/*Центрирование внутри контейнера*/
jQuery.fn.centering = function(container, relative){
    if (container == undefined) container = $(window);
    if(relative == undefined) relative = $(this);

    var wt = relative.width();
    var ht = relative.height();

    var wc = container.width();
    var hc = container.height();

    var x = (wc - wt) / 2;
    var y = (hc - ht) / 2;
    if (container[0] == window) {
        x = x + container.scrollLeft();
        y = y + container.scrollTop();
    } else if  (container[0] != document) {
        cpos = container.offset();
        x = x + cpos.left + cpos.scrollLeft;
        y = y + cpos.top + cpos.scrollTop;
    }
    if (x < 0) x = 0;
    if (y < 0) y = 0;
    this.css({left:x,top:y});
}
/*Позиционирование относительно контейнера*/
jQuery.fn.setPosition = function(x, y, container, affixment_x, affixment_y){
    if (container == undefined) container = $(window);
    if (affixment_x == undefined) affixment_x = 'left';
    if (affixment_y == undefined) affixment_y = 'top';
    if (container[0] == window) {
        x = x + container.scrollLeft();
        y = y + container.scrollTop();
    } else if  (container[0] != document) {
        cpos = container.offset();
        x = x + cpos.left + cpos.scrollLeft;
        y = y + cpos.top + cpos.scrollTop;
    }
    switch (affixment_x) {
        case 'center': x = x - this.width() / 2; break;
        case 'right': x = x - this.width(); break;
    }
    switch (affixment_y) {
        case 'center': y = y - this.height() / 2; break;
        case 'bottom': y = y - this.height(); break;
    }
    this.css({left:x,top:y});
}
/*Листалка*/
jQuery.fn.initPager = function(){
    var childs = this.find('#pageSet').children();
    var pagesCount = childs.size();
    childs.each(function(i){
        if (i>0) $(this).hide();
        else $(this).addClass('visiblePage');
    });
    this.find('#left_arrow').css('display','none');
    if (pagesCount==1) this.find('#right_arrow').css('display','none');
    return pagesCount;
}
jQuery.fn.nextPage = function(){
    var pageset = this.find('#pageSet');
    var childs = pageset.children();
    var cpage = childs.filter('.visiblePage');
    var pagesCount = childs.size();
    var position = childs.index(cpage[0]);
    if (position<0) return;
    $(childs[position]).removeClass();
    $(childs[position]).hide();
    $(childs[position+1]).addClass('visiblePage');
    $(childs[position+1]).show();
    if (position >= pagesCount-2) this.find('#right_arrow').css('display','none');
    if (pagesCount > 1) this.find('#left_arrow').css('display','block');
    return position + 1;
}
jQuery.fn.prevPage = function(){
    var pageset = this.find('#pageSet');
    var childs = pageset.children();
    var cpage = childs.filter('.visiblePage');
    var pagesCount = childs.size();
    var position = childs.index(cpage[0]);
    if (position<0) return;
    $(childs[position]).removeClass();
    $(childs[position]).hide();
    $(childs[position-1]).addClass('visiblePage');
    $(childs[position-1]).show();
    this.find('#right_arrow').css('display','block');
    if (position < 2) this.find('#left_arrow').css('display','none');
    return position - 1;
}
/*Выборка всех элементов формы*/
jQuery.fn.formElements = function(){
    return this.find('input,select,textarea');
}
/*Включение отслеживания изменений в элементах формы*/
jQuery.fn.markChanged = function(){
    this.formElements().change(
        function(){$(this).attr('changed','changed');});
    return this;
}
/*Сброс марккировки измененных элементов формы*/
jQuery.fn.unmarkChanged = function(){
    this.formElements().removeAttr('changed');
    return this;
}
/*Выборка измененных элементов формы*/
jQuery.fn.getChanged = function(){
    return this.formElements().filter('[@changed=changed]');
}
/*Создание одномерного массива для POST*/
jQuery.fn.makePostMap = function(){
    var map = {};
    this.each(function(i){
        map[this.name] = this.value;
    });
    return map;
}
jQuery.fn.initKeyCtrl = function(){
    this.keydown(function(e){
        if (!e.ctrlKey) return;
        var code = e.keyCode || e.charCode;
        switch (code){
            case 37:
                var c = $('#prev_page').attr('href');
                break;
            case 39:
                var c = $('#next_page').attr('href');
                break;
            case 38:
                var c = $('#top_page').attr('href');
                break;
            case 40:
                var c = $('#bottom_page').attr('href');
                break;
            default: return;
        }
        if (c && c != undefined) location.href = c;
    });
}
showHideChild = function(obj){
    var block = obj.parentNode.lastChild;
    if ($(block).css('display') == 'none') $(block).css('display', 'block');
    else $(block).css('display', 'none');}
getStruct = function(name,obj,lev,max,tab){
    var res = '<div>'+tab+name+' = ';
    if ((typeof obj).match(/object/) && (max == undefined || lev<max)){
        res = res+'<a href="javascript:;" onclick="showHideChild(this)">object</a> <div style="display:none;">'+tab+'{<br/>';
        for (key in obj){
            try {
                res = res+getStruct(key, obj[key], lev+1, max, tab+'&#160;&#160;&#160;');}
            catch (e){
                res = res+tab+'<div>&#160;&#160;&#160;'+name+' = Not inspectable!</div>';}}
        res = res+tab+'}</div></div>';}
    else if ((typeof obj).match(/function/)){
        res = res+'<a href="javascript:;" onclick="showHideChild(this)">function</a> <div style="display:none;background:#ccf;"><pre>'+obj+'</pre></div></div>';}
    else {
        try {
            res = res+obj+'</div>';}
        catch (e){
            res = res+'Not inspectable!</div>'; }}
    return res;}
closeDebugWindow = function(obj){
    $(obj.parentNode).remove();
    if($.browser.msie){ $('select').css('visibility','visible'); }
}
inspectObject = function(obj,maxlevel,name){
    if($.browser.msie){ $('select').css('visibility','hidden'); }
    if (name == undefined) name = 'Inspected object';
    $(document.body).append('<div id="debugWindow" style="padding:5px;background:#fff;border:1px solid #00f;width:400px;height:300px;position:absolute;z-index:100;">Debug Window: look to "'+name+'" [<a href="javascript:;" onclick="closeDebugWindow(this)">Закрыть</a>]<div style="width:400px;height:270px;overflow:auto;background:#ddd;margin-top:10px;" id="debugFrame">Inspecting...</div>');
    $('#debugWindow').centering();
    var res = getStruct(name, obj,0,maxlevel,'');
    $('#debugFrame').html('<code>'+res+'</code>');}
inArray = function(arr,el){
    for (k in arr)
        if (arr[k] == el) return k;
    return undefined;}
buildUrl = function(alias, param){
    var url = location.protocol + '//' + document.domain;
    var langs = Array('eng','rus','ukr');
    var lngalias = location.pathname.match(/^\/([a-z]{3})(.?)/);
    if (lngalias){
        if ((lngalias[2] == '' || lngalias[2] == '/') && inArray(langs, lngalias[1]) != undefined){
            url = url + '/' + lngalias[1];}}
    url = url + (alias==undefined?'':alias);
    if (param != undefined){
        for (k in param){
            url = url + '/' + k + '.' + param[k];}}
    return url;}
gbID = function(id){
    return $(document.getElementById(id));}
isEmpty = function(v){
    return  v==undefined?true:typeof v=='string'?(!v.match(/[^\s]/)||v=='0'):(v==0||v==null);}
function ExpandClose(obj){
    var p = obj.parent()[0];
    var ch = $(p).children();
    if ($(ch[2]).css('display') == 'none') $(ch[2]).css('display','block');  else $(ch[2]).css('display','none');
    var pos = obj.offset();
    var t = pos.top + pos.scrollTop;
    var w = $(window).scrollTop();
    if (w > t) window.scrollTo(0, t);
    var alt = $(obj).attr('alter') || '';
    if (alt != ''){
        obj.attr('alter',obj.html());
        obj.html(alt);}}
function ExpandCloseRight(obj){
    var p = obj.parent()[0];
    var ch = $(p).children();
        if ($(ch[1]).css('display') == 'none')  $(ch[1]).css('display','block'); else $(ch[1]).css('display','none');
        
    var pos = obj.offset();
    var t = pos.top + pos.scrollTop;
    var w = $(window).scrollTop();
    if (w > t) window.scrollTo(0, t);
    var alt = $(obj).attr('alter') || '';
    if (alt != ''){
        obj.attr('alter',obj.html());
        obj.html(alt);}
}

function popupWindow(url, args, preloader) {
    preloader = preloader || '/i/Image/site/preloader.gif';
    if (preloader != '') {
        var pd = document.createElement('div');
        document.body.appendChild(pd);
        pd.style.position = 'absolute';
        pd.style.zIndex = 1000;
        pd.style.float = 'left';
        pd.innerHTML = '<img src="'+preloader+'" alt=""/>';
        $(pd).centering();
    }
    $.post(url,{ajax:'yes'}, function(res){
        if (preloader != undefined) {
            pd.parentNode.removeChild(pd);
        }
        args['url'] = url;
        showPopupWindow(res, args);
    });
}

function ___showPopupWindow(res, _arg){
    _arg = _arg || {};
    var args = {
        'title': '',
        'width': 'auto',
        'url'   : '',
        'height': 'auto',
        'print':0,
        'class': 'popupwin',
        'img': '/i/Image/site/icon_close.gif',
        'bodyId':'popupContainer'
    };
    $.extend(args,_arg);
    var h = $(document).height();
    if (!args.width != 'auto') args.width = parseInt(args.width) + 'px';
    if (!args.height != 'auto') args.height = parseInt(args.height) + 'px';
    var tmpl =
"<div id=\"pw_cont\" style=\"position:absolute;z-index:1000;\">\
<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" >\
<tr>\
    <td class=\"clt\"><img src=\"/i/trans.gif\" width=\"4\" height=\"4\" alt=\"\" /></td>\
    <td class=\"lt\"><img src=\"/i/trans.gif\" width=\"1\" height=\"4\" alt=\"\" /></td>\
    <td class=\"crt\"><img src=\"/i/trans.gif\" width=\"4\" height=\"4\" alt=\"\" /></td>\
</tr>\
<tr>\
    <td class=\"ll\"><img src=\"/i/trans.gif\" width=\"4\" height=\"1\" alt=\"\" /></td>\
    <td>\
<table class=\"{class}\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\
<tr><td class=\"header\"><div id=\"pw_title\" class=\"pw_title\" style=\"float:left;\">{title}</div>\
<div class=\"pw_close\" style=\"float:right;\">\
    <table cellpading=\"0\" cellspacing=\"0\" border=\"0\"><tr><td width=\"20\">"+
    ((args.print==1)?"<a href=\"{url}mode.1/\" target=\"_blank\"><img src=\"/i/Image/site/icon_print_news.gif\" width=\"16\" height=\"16\" alt=\"\" title=\"Печатная версия\" /></td><td>":'')
    +"<img src=\"{img}\" alt=\"\" title=\"Закрыть\" onclick=\"closePopup(this)\">\
    </td></tr></table>\
</div></td></tr>\
<tr><td class=\"pw_body\" id=\"{bodyId}\"><div id=\"pw_body\" style=\"width:{width}; height:{height};\">{body}</div></td></tr></table>\
</td>\
    <td class=\"lr\"><img src=\"/i/trans.gif\" width=\"4\" height=\"1\" alt=\"\" /></td>\
</tr>\
<tr>\
    <td class=\"clb\"><img src=\"/i/trans.gif\" width=\"4\" height=\"4\" alt=\"\" /></td>\
    <td class=\"lb\"><img src=\"/i/trans.gif\" width=\"1\" height=\"4\" alt=\"\" /></td>\
    <td class=\"crb\"><img src=\"/i/trans.gif\" width=\"4\" height=\"4\" alt=\"\" /></td>\
</tr>\
</table>\
</div>\
<div class=\"realyBigCover\" style=\"position:absolute;z-index:999;width:100%;height:"+h+"px;top:0;left:0;\">&nbsp;</div>";
    var node = document.createElement('div');
    document.body.appendChild(node);
    node.className = 'popupwinpdiv';
    var k;
    for(k in args) {
        tmpl = tmpl.replace('{'+k+'}', args[k]);
    }
    tmpl = tmpl.replace('{body}', res);
    node.innerHTML = tmpl;

    $('#pw_cont').centering($(window),$('#pw_body'));
    $('#pw_title').css('width',Math.round($('#pw_body').width()*0.9)+'px');
    //$(node).pngFix();
}



function showPopupWindow(res, _arg){
    _arg = _arg || {};
    var args = {
        'title': '',
        'width': 'auto',
        'url'   : '',
        'height': 'auto',
        'print':0,
        'class': 'popupwin',
        'img': '/i/Image/site/icon_close.gif',
        'bodyId':'popupContainer'
    };
    $.extend(args,_arg);
    var h = $(document).height();
    if (!args.width != 'auto') args.width = parseInt(args.width) + 'px';
    if (!args.height != 'auto') args.height = parseInt(args.height) + 'px';
    var tmpl =
"<div id=\"pw_cont\" style=\"position:absolute;z-index:1000;\">\
<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" >\
<tr>\
    <td class=\"clt\"><img src=\"/i/trans.gif\" width=\"4\" height=\"4\" alt=\"\" /></td>\
    <td class=\"lt\"><img src=\"/i/trans.gif\" width=\"1\" height=\"4\" alt=\"\" /></td>\
    <td class=\"crt\"><img src=\"/i/trans.gif\" width=\"4\" height=\"4\" alt=\"\" /></td>\
</tr>\
<tr>\
    <td class=\"ll\"><img src=\"/i/trans.gif\" width=\"4\" height=\"1\" alt=\"\" /></td>\
    <td>\
<table class=\"{class}\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\
<tr><td class=\"header\"><div id=\"pw_title\" class=\"pw_title\" style=\"float:left;\">{title}</div>\
<div class=\"pw_close\" style=\"float:right;\">\
    <a href=\"#\" title=\"Закрыть\" onclick=\"closePopup(this); return false;\">Закрыть</a>\
</div></td></tr>\
<tr><td class=\"pw_body\" id=\"{bodyId}\"><div id=\"pw_body\" style=\"width:{width}; height:{height};\">{body}</div></td></tr></table>\
</td>\
    <td class=\"lr\"><img src=\"/i/trans.gif\" width=\"4\" height=\"1\" alt=\"\" /></td>\
</tr>\
<tr>\
    <td class=\"clb\"><img src=\"/i/trans.gif\" width=\"4\" height=\"4\" alt=\"\" /></td>\
    <td class=\"lb\"><img src=\"/i/trans.gif\" width=\"1\" height=\"4\" alt=\"\" /></td>\
    <td class=\"crb\"><img src=\"/i/trans.gif\" width=\"4\" height=\"4\" alt=\"\" /></td>\
</tr>\
</table>\
</div>\
<div class=\"realyBigCover\" style=\"position:absolute;z-index:999;width:100%;height:"+h+"px;top:0;left:0;\">&nbsp;</div>";
    var node = document.createElement('div');
    document.body.appendChild(node);
    node.className = 'popupwinpdiv';
    var k;
    for(k in args) {
        tmpl = tmpl.replace('{'+k+'}', args[k]);
    }
    tmpl = tmpl.replace('{body}', res);
    node.innerHTML = tmpl;

    $(node.firstChild).centering();
    if (args['width'] != 'auto') {
        var w = parseInt(args['width']) - 80;
        $(node).find('#pw_title').css('width', w+'px');
    }
    //$(node).pngFix();
}



function closePopup(iobj) {
    while (iobj && iobj.nodeType == 1){
        if (iobj.className == 'popupwinpdiv') {
            iobj.parentNode.removeChild(iobj);
            break;
        }
        iobj = iobj.parentNode;
    }
}

function showImage(isrc, title) {
    title = title || '';
    var imgo = new Image();
    imgo.src = isrc;
    if ( imgo.readyState == 'complete' || imgo.complete ) {
        showPopupWindow('<img onclick="closePopup(this);" src="'+imgo.src+'" alt="" width="'+imgo.width+'" height="'+imgo.height+'"/>', {'title':title,'width':imgo.width,'height':imgo.height});
    } else {
        imgo.onload = function(){
            showPopupWindow('<img onclick="closePopup(this);" src="'+imgo.src+'" alt="" width="'+imgo.width+'" height="'+imgo.height+'"/>', {'title':title,'width':imgo.width,'height':imgo.height});
        }
    }
}

function maximizeImage(obj, postfix) {
    postfix = postfix || '-big.jpg';
    var m = obj.src.match(/^(.+)\.(jpg|jpeg|gif)$/);
    var ititle = obj.getAttribute('alt') || obj.getAttribute('title') || '';
    if (m) {
        showImage(m[1]+postfix, ititle);
    }
}

function bindMaximizeImage(cssclass, postfix) {
    var imgs = document.getElementsByTagName('img');
    var ptr = 0;
    while (ptr < imgs.length) {
        if (imgs[ptr].className == cssclass ) {
            imgs[ptr].onclick = function() {
                maximizeImage(this, postfix);
            }
        }
        ptr++;
    }
}

function popupImage(event) {
    postfix = event.target.href || '';
    if(postfix == '') return false;
    var ititle = '';//event.target.tips || event.target.alt || event.target.title || '';
    showImage(postfix, ititle);
    return false;
}
function bindPopupImage(cssclass, postfix) {
    $('.chutterset').click(popupImage);
}

