/**
 * Основной скрипт для обеспечения интерактивности элементов приложения
 * при помощи использования библиотеки jQuery
 *
 * validated by JSLint (@see http://www.jslint.com/)
 *
 * @ver. 2010-04-20-11-00
 */
(function ($) {
    /**
     * Если DOM структура документа полностью загружена.
     * @see http://api.jquery.com/ready/
     */
    $(document).ready(function () {
        /***********************************************************************
         ************** ЗАДАЕМ НЕОБХОДИМЫЕ СВОЙСТВА ОБЪЕКТА ********************
         **********************************************************************/
        /**
         * Корневой объект-контейнер для хранения свойств и методов приложения
         */
        APP = {};


        /***********************************************************************
         ***************** ЗАДАЕМ МЕТОДЫ ДЛЯ ПРИЛОЖЕНИЯ ************************
         **********************************************************************/
        /**
         * Метод для создания закладки
         *
         * @param title (string) - заголовок для помещения в закладки
         * @param url (string)   - адрес
         * @return bool|void
         */
        APP.setBookmark = function ( title, url ) {
            title = title || 'LiteForex - The World of Financial Freedom';
            url = url || 'http://www.liteforex.org';

            try {
                if ( window.sidebar ) { // Mozilla Firefox Bookmark
                    window.sidebar.addPanel(title, url, "");
                }
                else if ( window.external ) { // IE Favorite
                    window.external.AddFavorite(url, title);
                }
                else if ( window.opera && window.print ) { // Opera Hotlist
                    return true;
                }
            }
            catch (e) { }
        };
        /**
         * Метод для обновления панели котировок
         *
         * @return void
         */
        APP.quotesUpdate = function () {

            $.get("/ajax/quotes", function(data){
                 $("#quotes23_7").html(data);
            });

        };
        /**
         * Метод обеспечивающий получение текущей даты и времени и вставки этих
         * данных в шапку сайта
         *
         * @return void
         */
        APP.headerDateTime = function () {
            var pad         = function (n) {return ( n < 10 ) ? '0' + n : n;}, // корректировка чисел <10
                date        = new Date(),
                day         = pad( date.getDate() ),
                month       = pad( date.getMonth() + 1 ),
                year        = date.getFullYear(),
                hours       = pad( date.getHours() ),
                minutes     = pad( date.getMinutes() ),
                seconds     = pad( date.getSeconds() ),
                UTCHours    = date.getUTCHours(),
                localHours,
                offset;

            // устанавливаем дату и время в шапке сайта
            $('#gmt').html( month + '.' + day + '.' + year + ' <span>' + hours +
                ':' + minutes + ':' + seconds + '</span>' );

            // устанавливаем время для столиц стран в шапке сайта
            $('.header-time .hours').each(function () {
                offset = Number( $(this).attr('offset') ); // получаем смещение
                date.setUTCHours(UTCHours + offset); // задаем полученное смещение
                localHours = pad( date.getUTCHours() ); // получаем локальные часы
                // вставляем локальные часы
                $(this).text( localHours );
            });
            $('.header-time .minutes').text(minutes);
        };


        /**
         * Метод для запуска мерцания выбранного элемента с заданным интервалом
         *
         * @param item (mixed) - jQuery элемен который должен мерцать
         * @param interval (int) - периодичность мерцания в миллисекундах
         * @return void
         */
        APP.blinker = function ( item, interval ) {
            var typeofitem = typeof item,
                flip = 0;

            interval = interval || 500;
            item = ( typeofitem == 'object' ) ? item : $(item);

            if ( (typeofitem == 'string') || (typeofitem == 'object') ) {
                window.setInterval( function () {
                    item.toggleClass( 'hidden', (flip++ % 2) === 0 );
                }, interval );
            }
        };


        /**
         *
         * Метод переключающий графики в виджете "quotations Forex"
         *
         * @return void
         *
         */
        APP.quotationForex = function (el) {

            $("#quotGraph").css('display','none');
            $("#quotGraph").parent().css('width','160px');



            $('#quotGraph').load(function() {
              $("#quotGraph").css('display','block');
              $("#quotGraph").parent().css('width','auto');

            });

            $("#quotGraph").attr('src','http://plug.liteforex.org/xmtm/drawchart.aspx?symbol='+el.innerHTML+'&period=3600&width=190&height=163&lineup=FFCB2306&linedown=FFCB2306&barup=FFFFFFFF&bardown=FFC9D1DE&shadow=true&shadowoffset=2&shadowOpacity=90&rand=0.8246482142965827');
            $(el).parent().children().removeClass("selected");
            $(el).addClass("selected");

        };

        APP.calendarFilterShow = function (el) {
            if ($("#"+el).css('display')=='block') {
                $("#"+el).slideUp(500);
            }
            else {
                $("#"+el).slideDown(500);
            }
        };

        APP.calendarFilterShowAction = function () {

            var link = "";
            link = $("#calendarFilterSubmitBaseUrl").val();

            $.each($("#calendarFilterPan div.el input:checked"), function() {
                link += $(this).attr('class')+'_'+$(this).val()+'_';
            });
            location.href = link.slice(0,-1);

        };
        APP.calendarFilterMYAction = function () {

            var link = "";
            link = $("#calendarFilterMYBaseUrl").val();

            var month = $("#calendarSelectMonth").val();
            var year = $("#calendarSelectYear").val();

            link += APP.date2timestamp(year,month,1,0,0,0);

            //alert(link)

            location.href = link.slice(0,-1);

        };

        APP.date2timestamp = function (year, month, day, hour, min, sec) {
            return (Date.UTC(year, month-1, day, hour, min, sec) / 100);
        };

        /**
         * Метод для перевода переданного контента с помощью сервиса google translate
         *
         * @param newsid (string) - идентификатор блока в котором находится контент
         *                          новости для перевода
         * @param lang (string)   - код языка на который будет осуществлен перевод
         *                          (по умолчанию английский)
         *
         * @return void
         */
        APP.googleTranslate = function ( newsid, lang ) {
            newsid  = newsid || null;
            lang    = lang || 'en';

            if ( newsid ) {
                $('#' + newsid).translate(lang);
            }
        };


        /***********************************************************************
         *********************** ОБРАБОТЧИК ДЕЙСТВИЙ ***************************
         **********************************************************************/
        APP.actionsHandler = function () {
            // при клике кнопкой мыши снимаем фокус с элемента, чтобы не было
            // характерной штрихпунктирной рамки вокруг элемента
            $("a, input[type=button], input[type=submit], button").live('click', function () {
                $(this).blur();
            });

            // выпадающий список языков для выбора
            $('.lang_cur').live('click', function () {
                $('.lang_drop_frm').toggle("blind");
            });

            // Виджет quotations Forex
            $('#quotFor .selector div').live('click', function () {
                APP.quotationForex( this );

                return false;
            });

            // Панель фильтров в календаре
            $('.calendarFiltres').live('click', function () {
                APP.calendarFilterShow('calendarFilterPan');

                return false;
            });
            $('#calendarFilterSubmit').live('click', function () {
                APP.calendarFilterShowAction();

                return false;
            });

            $('#calendarSelectMonthAndYear').live('click', function () {
                APP.calendarFilterShow('calendarSelectMonthAndYearPan');

                return false;
            });
            $('#calendarSubmitMYButton').live('click', function () {
                APP.calendarFilterMYAction();
            });

            // При клике по ссылке "избранное" помещаем страницу в закладки
            $('a#favorites').live('click', function () {
                APP.setBookmark( document.title, document.location.href );

                return false; // останавливаем дальнейшее действие ссылки
            });

            $(".fib_bot #submit").bind('click',function() {
                var ma  = $('#fibMax').val().replace(',', '.');
                var mi  = $('#fibMin').val().replace(',', '.');
                ma = ma.replace(',', '.');
                mi = mi.replace(',', '.');

                var maxF = Number(ma);
                var minF = Number(mi);
                var val = 0;



                val = maxF+(maxF-minF)*1.618;
                $('#lev11').val(val.toFixed(4));
                val = minF-(maxF-minF)*1.618;
                $('#lev12').val(val.toFixed(4));

                val = maxF+(maxF-minF)*1.382;
                $('#lev21').val(val.toFixed(4));
                val = minF-(maxF-minF)*1.382;
                $('#lev22').val(val.toFixed(4));

                val = maxF+(maxF-minF);
                $('#lev31').val(val.toFixed(4));
                val = minF-(maxF-minF);
                $('#lev32').val(val.toFixed(4));

                val = maxF+(maxF-minF)*0.618;
                $('#lev41').val(val.toFixed(4));
                val = minF-(maxF-minF)*0.618;
                $('#lev42').val(val.toFixed(4));

                val = maxF-(maxF-minF)*0.382;
                $('#lev51').val(val.toFixed(4));
                val = minF+(maxF-minF)*0.382;
                $('#lev52').val(val.toFixed(4));

                val = maxF-(maxF-minF)*0.5;
                $('#lev61').val(val.toFixed(4));
                val = minF+(maxF-minF)*0.5;
                $('#lev62').val(val.toFixed(4));

                val = maxF-(maxF-minF)*0.618;
                $('#lev71').val(val.toFixed(4));
                val = minF+(maxF-minF)*0.618;
                $('#lev72').val(val.toFixed(4));

            });

            // Калькулятор, изменение credit в зависимотсти от инструмента
            $('#traider-calc select#simbol').live('change',function () {
                if ($('#traider-calc select#simbol').val().indexOf("-",0) == 0) {
                    $('#traider-calc #credit').val('20');
                    $('#traider-calc #credit').attr('disabled', true);
                }
                else {
                    $('#traider-calc #credit').val('10');
                    $('#traider-calc #credit').attr('disabled', false);
                }
            });
                
            // Обработка, калькулятор трейдера, клик на расчитать
            $('#traider-calc #submit').live('click',function () {


                $('#traider-calc #calc-kurs').val("");
                $('#traider-calc #calc-point').val("");
                $('#traider-calc #calc-margin').val("");


                $.get('/ajax/calc/'+$('#traider-calc select#simbol').val()+'/'+$('#traider-calc #credit').val()+'/'+$('#traider-calc #count').val() +'/'+$('#traider-calc #resultq').val(), {},

                    function (json) {

                        $('#traider-calc #calc-kurs').val(json.kurs);
                        $('#traider-calc #calc-point').val(json.point);
                        $('#traider-calc #calc-margin').val(json.margin);

                    }, 'json');                                     // указываем явно тип данных

            });
            //End Обработка, калькулятор трейдера, клик на расчитать

            //Эффекты над полем search
            $('#search #txt').each(function() {

                var default_value = $('#search #txt').attr('defval');
                $(this).focus(function() {
                    if(this.value == default_value) {
                        this.value = '';
                    }
                });
                $(this).blur(function() {
                    if(this.value == '') {
                        this.value = default_value;
                    }
                });
            });

            $('#search #btn').live('click',function () {

                if (($('#search #txt').attr('value') != $('#search #txt').attr('defval')) && ($.trim($('#search #txt').attr('value')) != ''))
                {
                    return true;
                }
                else
                {
                    return false;
                }

            });

            // обработка нажатия ссылки (кнопки) перевода новсти с помощью google translate
            $('.news-content .translate-link').live('click', function () {
                APP.googleTranslate( $(this).attr('rel'), $(this).attr('lang') );
                return false;
            });

            // обработка нажатия на кнопку регистрации в акции lifering
            $('#lifering-submit').live('click', function () {
                var old_login   = $('#old_login').val(),
                    old_pwd     = $('#old_pwd').val(),
                    new_login   = $('#new_login').val(),
                    new_pwd     = $('#new_pwd').val();

                $.post('/lifering/register', {old_login: old_login, old_pwd: old_pwd, new_login: new_login, new_pwd: new_pwd}, function (data) {
                    $('#lifering-form').html(data);
                });

                return false;
            });
        };
		
		var stop=false;
		var ban=1;

		function switchBan (b) {

			if (b>0) {
				stop=true;
				$("#b"+ban).css('display','none');
				ban = b;
				$("#b"+ban).css('display','block');
			} else {
				$("#b"+ban).fadeOut('500',function () {
					ban=(ban==6)?1:ban+1;
					$("#b"+ban).fadeIn('500');
				});
			}
		}
		function roller() {
			if (stop===false) {
				switchBan(0);
			}
			setTimeout(function () {
				roller();
			},5000 );
		}
		$(document).ready(function() {
			$('#jBanner').css('background','none');
			roller();
		});
		/*
		$("#jBanner #but1").mouseenter(function () { switchBan(1); });
		$("#jBanner #but2").mouseenter(function () { switchBan(2); });
		$("#jBanner #but3").mouseenter(function () { switchBan(3); });
		$("#jBanner #but3,#jBanner #but2,#jBanner #but1").mouseleave(function () { stop=false;});
		*/


        /***********************************************************************
         ***************** ИНИЦИАЛИЗАЦИЯ НЕОБХОДИМЫХ ПАРАМЕТРОВ ****************
         **********************************************************************/
        APP.init = function () {
            // регистрируем обработчик событий
            APP.actionsHandler();

            // Создаем вкладки
            try {$("#tabs").tabs();}catch(e){}

            // вставляем в шапку текущую дату и время
            APP.headerDateTime();
            // задаем интервал обновления времени в 1 секунду
            window.setInterval( function () {
                APP.headerDateTime();
            }, 1000 );
            
            // включаем мерцание двоиточий - разделителей времени (тикалка для часов)
            APP.blinker( $('.header-time span.time-divider'), 500 );

            // обновление графиков
            window.setInterval( function () {
                APP.quotesUpdate();
            }, 60000 );
        };


        /***********************************************************************
         ******************************* СТАРТ *********************************
         **********************************************************************/
        APP.init();
    });
})(jQuery);

/**
 * заставляет часы тикать
 * Функция была полностью переработана (см. APP.headerDateTime() )
 * из-за следующих недостатков:
 * - засоряет глобальное пространство имен - т.е. располагается в глобальном
 *   пространстве имен, а не в составе объекте APP. Что является плохой практикой;
 * - много лишних телодвижений из-за чего повышается нагрузка на обработку браузером клиента;
 * - не используется функционал jQuery.
 */
//function tickalka( el, year, month, day, hour, minute ) {
//    var time_element    = document.getElementById(el),
//        region_time     = new Date(year, month, day, hour, minute),
//        current_minute  = new Date().getMinutes();
//
//    setInterval(function() {
//        var current_time = new Date();
//
//        if (current_time.getMinutes() != current_minute) {
//            current_minute = current_time.getMinutes();
//            region_time = new Date(region_time.getTime() + 60000);
//        }
//
//        if ( (current_time % 1000) > 500 ) {
//            time_element.innerHTML = format(region_time, true);
//        }
//        else {
//            time_element.innerHTML = format(region_time);
//        }
//    }, 250);
//
//    /**
//     * Функция для задания нужного формата
//     *
//     * @param date (obj)
//     * @param sw (bool)
//     * @return string
//     */
//    function format( date, sw ) {
//        sw      = sw || false;
//        date    = date || new Date();
//
//        var pad     = function (n) {return ( n < 10 ) ? '0' + n : n;}, // корректировка чисел <10
//            hour    = pad( date.getHours() ),
//            min     = pad( date.getMinutes() );
//
//        if ( sw ) {
//            return hour + ':' + min;
//        }
//
//        return hour + "<strong style='visibility:hidden'>:</strong>" + min;
//    }
//}

