Custom = {choose: function(){}};
APP = {
    citiesCache : [],
    deleteFilter : function(){
        var cookieName = APP_ACTIONURL.split('/').join('_');
        jQuery.cookies.del(cookieName);
    },
    saveFilter : function() {
        var params = $("form.filter").serializeHash();
        var N = 0;
        for (var i in params) {
            if (params[i] == '') {
                delete params[i];
            } else {
                N++;
            }
        }
        var cookieName = APP_ACTIONURL.split('/').join('_');
        if (N > 0) {
            jQuery.cookies.set(cookieName, jQuery.queryString(params), {hoursToLive: 24*30});
        } else {
            jQuery.cookies.del(cookieName);
        }
        return false;
    },

    showpopup : function(type) {
    	$.get('/ajax/get-popup/type/' + type, function(r)
        {
    		$(r).appendTo('body');
    		
    		var width  = document.body.offsetWidth;
    		var height = document.body.offsetHeight;
    		var scrollTop = (window.scrollY) ? window.scrollY : document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;

    		$('#popup, #popupiframe').css({width: width + 'px', height: height + 'px'});
    		
    		$('#popup_show').css({width: width + 'px', height: height - 100 + 'px', top: scrollTop - document.documentElement.offsetTop + 'px' });
        });
    	
        return false;
    },
    showpopupcalc : function(type, data) {
    	$.post('/calculator/get-calc/type/' + type, data, function(r)
        {
    		$(r).appendTo('body');
    		
    		var width  = document.body.offsetWidth;
    		var height = document.body.offsetHeight;
    		var scrollTop = (window.scrollY) ? window.scrollY : document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
    		
    		$('#popup, #popupiframe').css({width: width + 'px', height: height + 'px'});
    		
    		$('#popup_show').css({width: width + 'px', height: height - 100 + 'px', top: scrollTop - document.documentElement.offsetTop + 'px' });
        });
    	
        return false;
    },
    hidepopup : function() {
    	$('#popup, #popupiframe, #popup_show').remove();
        return false;
    },
    calcPrev : function(currentId) {
        $.post('/calculator/get-helper-block', {curr:currentId, dir:'prev'}, function(html){
            $('#calcPlace').html(html);
            Custom.init();
        });
    },
    calcNext : function(currentId) {
        $.post('/calculator/get-helper-block', {curr:currentId, dir:'next'}, function(html){
            $('#calcPlace').html(html);
            Custom.init();
        });
    },
    dialog : function(text) {
    	var html = '<div id="dialog-modal" title="Сообщение"><p>' + text + '</p></div>';
    	
    	$(html).appendTo('body');
    	
    	$("#dialog-modal").dialog({
			height: 140,
			resizable: false
		});
    	
    	$("div.ui-dialog").delay(1000).fadeOut(400, function()
    	{
    		$("#dialog-modal").dialog('destroy').remove();
    		
    	});
    },
    errorReport : function(form)
    {
    	var message = $.trim($('textarea', form).val());
    	
    	if (!message.length)
    	{
    		APP.dialog('Введите текст ошибки!');
    		return false;
    	}
    	
    	$.ajax({
            url: '/ajax/error-report',
            type: 'post',
            beforeSend: function()
            {
    			$('input[type=submit]', form).attr("disabled", "disabled");
            },
            complete: function()
            {
            	$('input[type=submit]', form).removeAttr("disabled");
            },
            success: function(r)
            {
                if (r.success == true)
                {
                	APP.dialog('Спасибо! Ваше сообщение отправлено администрации.');
                	APP.hidepopup();
                }
                else
                {
                	APP.dialog(r.error);
                }
            },
            cache: false,
            data: {message: message},
            dataType: "json"
        });
    	
    	return false;
    },
    
    insertTag: function(field, link)
    {
        var tag = $.trim($(link).text());
        var val = $.trim($(field).val());
        
        val = val.replace(/[\s,]+$/, '');
        
        var tagList = val.split(',');
        
        for (var i = 0; i < tagList.length; i++)
        {
            if ($.trim(tagList[i]) == tag)
            {
                return false;
            }
        }
        
        if (val)
        {
            val += ', ';
        }
        
        val += tag;
        
        $(field).val(val);
    },
    
    initGeoCitySelect: function()
    {
        var link = $('#geoCitySelect');
        var select = link.next('select');
        
        select.change(function(){
        	var cityId   = select.val();
        	var cityName = select.find('option:selected').html();
        	            
            var exdate = new Date();
            exdate.setDate(exdate.getDate() + 30);
            
            document.cookie = 'city=' + cityId + '; path=/; expires=' + exdate.toGMTString() + '';
            
            link.html(cityName);
            
            window.location.reload();
        });

    },
        
    initSearch: function()
    {
        var container  = $('#search-container');
        var field      = container.find('input[type=text]');
        var searchText = field.val();
        var where      = 0;
     
        $('#searchShow').click(function(){
            $('div.bandbox').toggle();
            container.toggle();
            
            return false;
        });
        
        container.find('form').submit(function()
        {
            var query = $.trim(field.val());
            
            if (query == '' || query == searchText) {
                APP.dialog('Введите запрос для поиска!');
                return false;
            }
            
            window.location.href = '/search/list/query/' + encodeURI(query) + '/where/' + where + '/';
            
            return false;
        });
        
        field.focus(function(){
            if ($(this).val() == searchText) {
                $(this).val('');
            }
        }).blur(function(){
            if ($(this).val() == '') {
                $(this).val(searchText);
            }
        });
        
        container.find('select').change(function()
        {
            where = $(this).val();
            
            container.find('a.searchlink').html($(this).find('option:selected').html());
            
            return false;
        });
    },
    
    preload: function(src)
    {
        var img = new Image();
        img.src = src;
    },
    
    setCookie: function(name, value, expires, path, domain, secure) {
    	if (!name || !value) return false;
        var str = name + '=' + encodeURIComponent(value);
    	if (expires) str += '; expires=' + expires.toGMTString();
    	if (path)    str += '; path=' + path;
    	if (domain)  str += '; domain=' + domain;
    	if (secure)  str += '; secure';
    	document.cookie = str;
    	return true;
    },
    
    getCookie: function(name) {
    	var pattern = "(?:; )?" + name + "=([^;]*);?";
    	var regexp  = new RegExp(pattern);
    	if (regexp.test(document.cookie))
    	return decodeURIComponent(RegExp["$1"]);
    	return false;
    }
};

(function() {
    
    if( window.jQuery || jQuery) {
        jQuery.fn['serializeHash'] = function(){
            var p = this.serializeArray(), result = {};
            for (var i=0; i<p.length; i++) {
                result[p[i].name] = p[i].value;
            }
            return result;
        };

        jQuery.fn['applyParams'] = function(){
            var params    = jQuery.queryString();
            var paramsNew = this.serializeHash();
            for (var i in paramsNew) {
                if (paramsNew[i] == '') {
                    delete params[i];
                } else {
                    params[i] = paramsNew[i];
                }
            }
            if (typeof APP_ACTIONURL === 'undefined' || APP_ACTIONURL == '') {
                location.search = '?' + jQuery.queryString(params);
            } else {
                var trim = function(str, charlist) {
                    charlist = !charlist ? ' \s\xA0' : charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
                    var re = new RegExp('^[' + charlist + ']+|[' + charlist + ']+$', 'g');
                    return str.replace(re, '');
                };
                var path = '';
                for (var i in params) {
                    path += i + '/'+ encodeURI(params[i]) + '/';
                }
                location.href = '/' + trim(APP_ACTIONURL, '/') + '/' + path;
            }
        };
        
        jQuery.postJSON = function(url, data, callback) {
            $.post(url, data, callback, "json");
        };

    }
    
    if (typeof jQuery.datepicker !== 'undefined') {
        jQuery.datepicker.setDefaults({
            closeText: 'Закрыть',
            prevText: '&#x3c;Пред',
            nextText: 'След&#x3e;',
            currentText: 'Сегодня',
            monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
            'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
            monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
            'Июл','Авг','Сен','Окт','Ноя','Дек'],
            dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
            dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
            dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
            //dateFormat: 'dd.mm.yy', 
            firstDay: 1,
            isRTL: false
        });
    }
})();

$(document).ready(function()
{
    if (typeof pageReloadTimer != 'undefined')
    {
        $('input[type=text], textarea').keypress(function()
        {
            if (pageReloadTimer != null)
            {
                clearTimeout(pageReloadTimer);
                pageReloadTimer = null;
            }
        });

        $('select').change(function()
        {
            if (pageReloadTimer != null)
            {
                clearTimeout(pageReloadTimer);
                pageReloadTimer = null;
            }
        });
    }
});


//Скроллинг
$(document).ready(function()
{
    initScrolling('div.scroller');
});

function initScrolling(selector)
{
    $(selector).not('.scrollerblocked').each(function()
    {                
        var scrollContent = $(this).prev(); // прокручивемое содержимое
        var scrollWindow  = scrollContent.parent(); // окошко
        var scroller      = $('div:first', this); // ползунок
        var scrollerMain  = $('div.sc', scroller); //главная часть ползунка 
        
        var windowHeight     = scrollWindow.height(); 
        var contentHeight    = scrollContent.height();
        var scrollHeight     = $(this).height();
        
        scrollerMain.height(Math.round((windowHeight * scrollHeight) / contentHeight));
        
        var scrollPathHeight = scrollHeight - scroller.height();
        var coefficient      = (contentHeight - windowHeight) / scrollPathHeight;

        if (contentHeight <= windowHeight) {
            //$(this).hide();
            //return;
        }
        
        // IE fix
        scrollContent.css('top', 0);

        scroller.draggable({
            axis: 'y',
            containment: $(this), 
            drag: function(event, ui)
            {
                scrollContent.css('top', - Math.round(ui.position.top * coefficient));
            }
        });
        
        scrollContent.mousewheel(function(e, detail)
        {
            e.preventDefault();
            
            var currTop = - parseInt($(this).css('top'));
            var maxTop  = contentHeight - windowHeight;
            var minTop  = 0;
            var newTop  = null;
            
            newTop = currTop - (detail * 30);

            if (newTop < minTop) {
                newTop = minTop;
            } else if (newTop > maxTop) {
                newTop = maxTop;
            }

            $(this).css('top', - newTop);
            
            scroller.css('top', Math.round(newTop * (1 / coefficient)));
        });
    });
}
// >


// Точечный пагинатор
$(document).ready(function()
{
    initDotPaginator('#bandturn-story', '#data-story', 4, 4, 0);
    initDotPaginator('#bandturn-consult', '#data-consult', 3, 3, 0);
    initDotPaginator('#bandturn-pressrelease', '#data-pressrelease', 2, 2, 0);
});

/*
* bandturn селектор контейнера пагинатора
* data селектор контейнера листаемых блоков
* onPage количество видимых блоков на странице
* perScroll количество перелистываемых блоков
* autoScrollTimeout таймаут автолистания, сек. (0 - выкл)
*/
function initDotPaginator(bandturn, data, onPage, perScroll, autoScrollTimeout)
{
    bandturn = $(bandturn);
    data     = $(data);

    var total = data.children().length;
    
    if (total <= onPage) {
        bandturn.hide();
        return;
    }
    
    var pages = (perScroll == 1)
              ? total - onPage + 1
              : Math.ceil(total / perScroll);
    
    var i = 0;
    while (i < pages) {
        $('<b />').data('pageNum', (i + 1)).appendTo(bandturn);
        
        i++;
    }

    bandturn.children().first().addClass('current');
    
    var itemWidth = data.children().first().outerWidth(true);
    var currentPageNum = 1;
    
    if (autoScrollTimeout > 0) {
        autoScrollTimeout = autoScrollTimeout * 1000;
        var autoScrollTimer = setTimeout(autoScroll, autoScrollTimeout);
    }
    
    data.css('left', 0); // IE fix
    
    bandturn.children().click(function()
    {
        if (autoScrollTimeout > 0) {
            clearTimeout(autoScrollTimer);
        }
    
        var pageNum = $(this).data('pageNum');

        if (pageNum == currentPageNum) {
            return false;
        }
        
        var maxLeftPos  = 0;
        var minLeftPos  = -(total - onPage) * itemWidth;
        
        var currLeftPos = data.css('left').replace('px', '');
        var newLeftPos  = currLeftPos - (itemWidth * (pageNum - currentPageNum) * perScroll);

        if (newLeftPos < minLeftPos) {
            newLeftPos = minLeftPos;
        } else if (newLeftPos > maxLeftPos) {
            newLeftPos = 0;
        }
        
        data.animate({left: Math.round(newLeftPos)}, 1000);

        currentPageNum = pageNum;
        
        bandturn.children().removeClass('current');
        
        $(this).addClass('current');
    });
    
    function autoScroll()
    {
        var next = bandturn.children('.current').next();
        
        if (!next.length) {
            next = bandturn.children().first();
        }
        
        next.click();
        
        autoScrollTimer = setTimeout(autoScroll, autoScrollTimeout);
    }
}
// >

/**
 * employ css text
 * @param cssText
 */
function employCssText(cssText) {
    var doc = document;
    var style = doc.createElement("style");
    style.setAttribute("type", "text/css");

    // для Safari надо всегда вставлять в head
    var head = doc.getElementsByTagName('head')[0];
    if (head) {
        // для IE надо сначала вставить ноду в DOM, а потому уже писать туда стили
        // иначе стили могут не примениться или будет js-ошибка
        head.appendChild(style);
        if (style.styleSheet) { // IE
            style.styleSheet.cssText = cssText;

        } else {
            style.appendChild(doc.createTextNode(cssText));
        }
    }
}



/*
 * Красивые чекбоксы (для опроса)
 */
jQuery.fn.prettyCheckboxes=function(a) {
    a=jQuery.extend({checkboxWidth:21,checkboxHeight:21,className:"prettyCheckbox",display:"list"},a);    
    $(this).each(function(){
    $label=$('label[for="'+$(this).attr("id")+'"]');    
    if($(this).is(":checked")){
        $label.addClass("checked")
    }
    $label.addClass(a.className).addClass($(this).attr("type")).addClass(a.display);
    $(this).addClass("hiddenCheckbox");    
    $label.bind("click",function(){$("input#"+$(this).attr("for")).triggerHandler("click");
    if($("input#"+$(this).attr("for")).is(":checkbox")){
        $(this).toggleClass("checked");
        $("input#"+$(this).attr("for")).checked=true;
        $(this).find("span.holder").css("top",0)}else{$toCheck=$("input#"+$(this).attr("for"));
    $('input[name="'+$toCheck.attr("name")+'"]').each(function(){$('label[for="'+$(this).attr("id")+'"]').removeClass("checked")});
    $(this).addClass("checked");$toCheck.checked=true}});
    $("input#"+$label.attr("for")).bind("keypress",function(b){
    if(b.keyCode==32){
        if($.browser.msie){
            $('label[for="'+$(this).attr("id")+'"]').toggleClass("checked")
        }else{$(this).trigger("click")}return false}})}
    )
};
