function cicle_img(d){
    var b1 = $('#btn_img_left');
    var b2 = $('#btn_img_right');
    var cc = parseInt($('#active_cover').val());
    var cn = cc+d;
    var zo = $('#btn_zoom');
    var zp = parseInt($('#cover_place img:eq('+(cn)+')').attr('zm'));
    
    if (d>0 && b1.hasClass('img_left_no')) b1.removeClass('img_left_no').addClass('img_left');    
    if (d<0 && b2.hasClass('img_right_no')) b2.removeClass('img_right_no').addClass('img_right');    
    if (d<0 && !$('#cover_place img:eq('+(cn+d)+')')[0]) b1.removeClass('img_left').addClass('img_left_no');    
    if (d>0 && !$('#cover_place img:eq('+(cn+d)+')')[0]) b2.removeClass('img_right').addClass('img_right_no');    
    
    if ($('#cover_place img:eq('+(cn)+')')[0]){
        if (zp==1 && zo.hasClass('zoom_off')){
            zo.removeClass('zoom_off').addClass('zoom_on');
        }else if(zp==0) zo.removeClass('zoom_on').addClass('zoom_off');
    }
    
    var t = 0;
    if ($('#cover_place img:eq('+(cn)+')')[0]){
        $('#active_index').val($('#cover_place img:eq('+(cn)+')').attr('ind'));
        np = d > 0  ? 280 : -280;
        $('#active_cover').val(cn);        
        if (d<0){
            $('#cover_place img:eq('+(cc)+')').css({'display':'none'});
            $('#cover_place img:eq('+(cn)+')').css({'left':0,'display':'none'});
            $('#cover_place img:eq('+(cn)+')').fadeIn(300);            
        }else {
            $('#cover_place img:eq('+(cc)+')').css({'left':0,'display':'none'});
            $('#cover_place img:eq('+(cn)+')').css({'left':0,'display':'none'}).fadeIn(300);
        }        
    }    
} // cicle_img
function hepernate(o){
    var RusA = "[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]";
    var RusV = "[аеёиоуыэю\я]";
    var RusN = "[бвгджзклмнпрстфхцчшщ]";
    var RusX = "[йъь]";
    var Hyphen = "\xAD";

    var re1 = new RegExp("("+RusX+")("+RusA+RusA+")","ig");
    var re2 = new RegExp("("+RusV+")("+RusV+RusA+")","ig");
    var re3 = new RegExp("("+RusV+RusN+")("+RusN+RusV+")","ig");
    var re4 = new RegExp("("+RusN+RusV+")("+RusN+RusV+")","ig");
    var re5 = new RegExp("("+RusV+RusN+")("+RusN+RusN+RusV+")","ig");
    var re6 = new RegExp("("+RusV+RusN+RusN+")("+RusN+RusN+RusV+")","ig");
    
    text = o.html();
    text = text.replace(re1, "$1"+Hyphen+"$2");
    text = text.replace(re2, "$1"+Hyphen+"$2");
    text = text.replace(re3, "$1"+Hyphen+"$2");
    text = text.replace(re4, "$1"+Hyphen+"$2");
    text = text.replace(re5, "$1"+Hyphen+"$2");
    text = text.replace(re6, "$1"+Hyphen+"$2");
    o.html(text);
}

function add_node(n_id, n_tag){
    n = $('#' + n_id + ' ' + n_tag + ':eq(0)').html();
    $('#' + n_id).append('<'+n_tag+'>' + n + '</'+n_tag+'>');
    n = $('#' + n_id + ' ' + n_tag ).length;
    $('#' + n_id + ' ' + n_tag + ':last span.mw25').html(n +'.');
    $('#' + n_id + ' ' + n_tag + ':last input:eq(0)').val('').removeClass('mark');
} // add_node
function remove_node(n_id, p){
    if (!$(p).parent().hasClass('hold')) $(p).parent().remove();
    else{
        var li = $(p).parent();
        $('input',li).val('');
    }
    var x = 1;
    $('#' + n_id + ' li span.mw25').each(function(){
        $(this).html(x+'.');
        x+=1;
    });
} // remove_node
function float_v(obj, mx){
    v = parseFloat($(obj).val());
    if (mx > 0 && v > mx) v = mx;
    if (isNaN(v)) $(obj).val('0.00');
    else $(obj).val(v.toFixed(2));
    $(obj).removeClass('mark');
} // tf
function explode( delimiter, string ) {    // Split a string by string
    // 
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: kenneth
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
 
    var emptyArray = { 0: '' };
 
    if ( arguments.length != 2
        || typeof arguments[0] == 'undefined'
        || typeof arguments[1] == 'undefined' )
    {
        return null;
    }
 
    if ( delimiter === ''
        || delimiter === false
        || delimiter === null )
    {
        return false;
    }
 
    if ( typeof delimiter == 'function'
        || typeof delimiter == 'object'
        || typeof string == 'function'
        || typeof string == 'object' )
    {
        return emptyArray;
    }
 
    if ( delimiter === true ) {
        delimiter = '1';
    }
 
    return string.toString().split ( delimiter.toString() );
}

function int_v(o){
    k = parseInt($(o).val());
    if (isNaN(k)) k =0;
    $(o).val(k);
} // int_v

function get_current_page(hash, m) {
    if (m == 0) var reg=/page=(\d*)/;
    else var reg=/#page=(\d*)/;
    arr=reg.exec(hash);
    return arr ? arr[1] : 0;
}
function logon_submit(){
    if ($('#login_input').val()!='' && $('#password_input').val()!='') request('popup_logon_submit', 'logon_form');
}
function randomString(string_length){
    var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
    var randomstring = '';
    for (var i=0; i<string_length; i++) {
        var rnum = Math.floor(Math.random() * chars.length);
        randomstring += chars.substring(rnum,rnum+1);
    }
    return randomstring;
} // randomString

function expand_div(d, o){
    if ($(o).hasClass('btn_hide')){
        $(o).removeClass('btn_hide').addClass('btn_show').attr('title', 'Развернуть');
        $('#'+d).slideUp(300);
    }else{
        $(o).addClass('btn_hide').removeClass('btn_show').attr('title', 'Свернуть');
        $('#'+d).slideDown(300);
    }
} // expand_div

function expand_object(d, o){
    if ($(o).hasClass('open')){
    
        $(o).removeClass('open').addClass('closed');
        $('#'+d).slideUp();
    }else{
        $(o).addClass('open').removeClass('closed');
        $('#'+d).slideDown();
    }
} // expand_div

function ut(){
    var foo = new Date;
    var unixtime_ms = foo.getTime();
//    var unixtime = parseInt(unixtime_ms / 1000);
    var unixtime = parseInt(unixtime_ms);
    return unixtime;
}
function href(hr, hra){	
    if (hra != '') document.location.href = hra;
    else{
        a = gup('a');
        if (a != '') t = '?a='+a+'&m='+hr;
        else{
            hr = hr.replace('?m=', '');
            t = '?m='+hr;
        }        
        document.location.href = t;
    }
}

function gup( name ){
    /*
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    return( results == null ) ? "" : results[1];
    */
    return $('#core_action').val();
}

function isArray(a){
    return a && typeof a == 'object' && a.constructor == Array;
} // isArray

function isObject(o){
    return (o && "object" == typeof o) || isFunction(o);
} // isObject
                                               
function isFunction(o){
    return 'function' == typeof o;
} // isFunction

function getFormFields(fdata) {
    form = document.getElementById(fdata);
    var result = {};
    var form_elements = form.elements;
    var cnt = form_elements.length;
    var cc = new Array();
    var el_c = new Array();
    for (var i = 0; i < cnt; i++) {
        if (cc == undefined) cc[n] =0;
        var field = form_elements[i];
        
        var field_type = field.type;
        if (('button' == field_type) || ('submit' == field_type)) continue;
        var n = field.name.replace('[]','');
        //.replace(']','');
        //n = field.name;
        
        if (n == '') n = 'undefined';
        
        if ($(field).attr('alt') == $(field).val()){
            var v = '';
        }else{
            var v = field.value;            
        }
            
        if ('checkbox' == field_type && !field.checked) v = '';
        if ('radio' == field_type && !field.checked) continue;
        
        if (el_c[n] == undefined){
            a_input = $('#'+fdata+' input[name="'+n+'"]').length;
            a_text = $('#'+fdata+' textarea[name="'+n+'"]').length;
            a_select = $('#'+fdata+' select[name="'+n+'"]').length;
            el_c[n] = a_input + a_text + a_select;
            if (el_c[n] == 0) el_c[n] = $('#'+fdata+' textarea[name="'+n+'"]').length;
            if (el_c[n] == 0) el_c[n] = $('#'+fdata+' select[name="'+n+'"]').length;
            cc[n] = 0; 
        }        
        if (el_c[n] == 1) result[n] = v;
        else if ('radio' != field_type){
            result[n+'['+cc[n]+']'] = v;
            cc[n] += 1;
        }else result[n] = v;
    }
    return result;        
} // getFormFields


function request(mode, fdata, a){
    a = typeof(a) != 'undefined' ? a : gup('a');    
    if ($('#btn_'+mode).hasClass('disabled')) return false;
    
//    $('#report').hide(0);
    dialogDisplayed = false;
    var popup = mode.indexOf('popup_');    
    var hidden = mode.indexOf('hidden_');
    var json = mode.indexOf('json_');
    
    // && popup>=0
    if ($('#DialogContainer')[0]) dialogDisplayed =true;
    
    url_get = '';
    if (document.getElementById(fdata)){
        send_data = jQuery.extend(getFormFields(fdata), {'m' : mode});
        if (a!='') url_get += '&form_name='+fdata;
        else url_get += '?form_name='+fdata;
    }else send_data = (isObject(fdata)) ? jQuery.extend(fdata, {'m' : mode}) : jQuery.extend({'id' : fdata}, {'m' : mode});
    
    if (!dialogDisplayed && hidden<0 && !$('#jDialogProgressBar')[0]) {
        $("body").prepend('<div id="jDialogProgressBar"><div class="loading_img"></div></div><div id="jDialogOverlay"></div><div id="jDialogContainer"></div>');
        overlayPos(1);
        dialogDisplayed=true;
    }else if ($('#DialogContainer')[0]){
        $('#DialogContainer').html('');
        dialogDisplayed=true;
    }
    $("#jDialogProgressBar").show();
    
    
    var json = mode.indexOf('json_');
    
    dt = (popup >=0) ? 'text' : 'script';
    if (json >=0) dt = 'json';
    
    if (a!='') sr = '/index.php?a='+a+url_get;
    else sr = '/index.php'+a+url_get;
    $.ajax({
        type: 'POST',
        url: sr,
        data: send_data,
        dataType: dt,
        error: function(msg){
                //  XMLHttpRequest.responseText
                var currentPos = true;
                resp = (msg.responseText!='') ? msg.responseText : 'Внутренняя ошибка сервиса. <br>Возможно утеряно соединение с сервером';
                $("#jDialogContainer").html('<div class="DialogContainer" id="DialogContainer"><div class="cb"><div class="bt"><div/></div><div class="i1"><div class="i2"><div class="i3" id="popup_holder"><div class="error">'+resp+'<br /></div></div></div></div><div class="bb"><div/></div></div></div>');
                if (currentPos){
                    reposition();
                    $('#jDialogOverlay').bind('click', function(){$.closeDialog();});
                }
                $("#jDialogProgressBar").fadeOut(900);
                
                if($.browser.msie && parseInt($.browser.version) < 7) {
                    $(window).scroll(function(){
                        if(dialogDisplayed==1) {
                            overlayPos();
                            if (currentPos)
                                reposition();
                        }
                    });
                }
                $(window).resize(function(){
                    if (dialogDisplayed==1) {
                        overlayPos();
                        if (currentPos)
                            reposition();
                    }
                });
                
                $(window).unload( function () {
                    if (dialogDisplayed==1)
                        $.closeDialog();
                });
                
                $(window).keydown(function(event){
                    if (event.keyCode == 27) 
                        $.closeDialog();
                });
        },
        success: function(msg){
            if (popup>=0){
                var currentPos = true;
                $("#jDialogContainer").html('<div class="DialogContainer" id="DialogContainer">'+msg+'</div>');
                //$("#DialogContainer").jqDrag('.bt').jqResize('.bb');
                if (currentPos){
                    reposition();
                    $('#jDialogOverlay').bind('click', function(){$.closeDialog();});
                }
                $("#jDialogProgressBar").fadeOut(900);
                
                if($.browser.msie && parseInt($.browser.version) < 7) {
                    $(window).scroll(function(){
                        if(dialogDisplayed==1) {
                            overlayPos();
                            if (currentPos)
                                reposition();
                        }
                    });
                }
                $(window).resize(function(){
                    if (dialogDisplayed==1) {
                        overlayPos();
                        if (currentPos)
                            reposition();
                    }
                });
                
                $(window).unload( function () {
                    if (dialogDisplayed==1)
                        $.closeDialog();
                });
                
                $(window).keydown(function(event){
                    if (event.keyCode == 27) 
                        $.closeDialog();
                });
                 
            }else $.closeDialog();
        }
    });
} // request

function reposition(){ //calculate the position
    var left = 0;
    var top = 0;
    var winWidth = $(window).width();
    var winHeight =  $(window).height();
    var dialogHeight = $("#jDialogContainer").children().height();
    var dialogWidth = $("#jDialogContainer").children().width();

    if ($.browser.msie) {
        left = document.body.scrollLeft || document.documentElement.scrollLeft;
        top = document.body.scrollTop || document.documentElement.scrollTop;
    }else{
        left = window.pageXOffset;
        top = window.pageYOffset;
    }

    var topOff = top + winHeight/2 - dialogHeight/2; //offset for IE6
    var    leftOff = left + winWidth/2 - dialogWidth/2; //offset for IE6
    var topFixed = topOff - top;
    var    leftFixed = leftOff - left;
    
    if ($.browser.msie && parseInt($.browser.version) < 7) { // IE6
        $("#jDialogContainer").children().css({
            top: topOff,
            left: leftOff,
            position: "absolute",
            zIndex: (2001)
        }).show(); 
    }
    else{    // firefox and IE7
        $("#jDialogContainer").children().css({
            top: topFixed, 
            left: leftFixed, 
            position: "fixed", 
            zIndex: (2001)
        }).show();
    }
}

function disableSelection(ind){
    target = (ind.innerHTML) ? ind : document.getElementById(ind);
    if (target){
        if (typeof target.onselectstart!="undefined") //IE route
	        target.onselectstart=function(){return false}
            else if (typeof target.style.MozUserSelect!="undefined"){
                //Firefox route
	            target.style.MozUserSelect="none"
            }else target.onmousedown=function(){return false}
        target.onmousedown=function(){return false}
        if (target.style.cursor!="pointer" && target.className.indexOf("cp")<0) target.style.cursor = "default";
	}
} // disableSelection


function overlayPos(init){
    var left = 0;
    var top = 0;
    var overlayWidth = $(window).width();
    var overlayHeight = $(document).height();
    var winHeight =  $(window).height();
    if ($.browser.msie && parseInt($.browser.version) < 7) { //if IE6
        $("#jDialogOverlay").css({
            top: 0, 
            left: 0, 
            width: overlayWidth, 
            height: overlayHeight, 
            position: "absolute",
            display: "block",
            color: '#000',
            zIndex: 1000
        });
    }else { //other browsers
        $("#jDialogOverlay").css({
            top: 0, 
            left: 0, 
            width: overlayWidth, 
            height: winHeight, 
            position: "fixed",
            display: "block",
            background: '#000',
            zIndex: 1000
        }).show();
    }
    
    if (init==1) {
        $("#jDialogOverlay").css("opacity", 0);
        $("#jDialogOverlay").fadeTo(200, 0.5);
    }
}
function unmark_field(f){
    $('#'+f + ' .mark').removeClass('mark');
} // unmark_field

function mark_field(f, m, ind){
    if (ind>=0) f = f + '[]';
    eq = ind <= 0 ? 0 : 1;
    o = $('[name="'+f+'"]:eq('+eq+')');
    if (m!=''){
        o.attr('title',m);
        o.parent().append('<div>'+m+'</div>')
    }
    o.addClass('mark');    
} // mark_field

function focus_on(o){
    setTimeout(function(){
        $('#'+o)[0].focus();
    }, 500);
}

function ls_mark_all(o,m,e){
    if (!$(o).attr('checked')) $('[name='+m+']').attr('checked',false);
        else $('[name='+m+']').attr('checked',true);
} // mark_all

function estop(e){
    e.stopPropagation();
}

function set_message(n){
    var p = $('#holder_new_message b:eq(0)');
    if (p[0]){
        if (!p.attr('num')) p.attr('num', n);
    }else{
        $('#holder_new_message').prepend('<b></b> ');
        //
    }
    if (p.attr('num')!=n){
        p.html('' + n + '').fadeOut().attr('num', n).fadeIn();
    }
} // set_message


function disable_rate_panel(pn, x, cn){
    v = Math.floor(x);
    d = Math.round((x-v)*100)/100;
    //wid = Math.ceil(d*25);
    wid = d*25;
    s = $('#rate_panel_' + pn + ' a span.half_star');
    if (s[0]){
        s.css('width',wid);
        sdom = s.parent().html();
        s.parent().html('');
        $('#rate_panel_' + pn + ' a:eq('+v+')').html(sdom);
    }else{
        $('#rate_panel_' + pn + ' a:eq('+v+')').html('<span style="width:'+wid+'px;" class="half_star">&nbsp;</span>');
    }    
    $('#rate_panel_' + pn).attr('title', 'Оценка: '+x+' (голосов: '+cn+')').addClass('cursor_def');
    $('#rate_panel_' + pn + ' a').unbind().removeClass('star_over').attr('title','');
    $('#rate_panel_' + pn + ' a:lt('+v+1+')').removeClass('star_off').addClass('star_on');
    $('#rate_panel_' + pn + ' a:gt('+(v-1)+')').addClass('star_off');    
} // disable_rate_panel

function init_rate_panel(pn, mw){    
    $('#' + pn + ' a').each(function(){$(this).attr('title', $(this).attr('row_id') + ' из 10');});
    $('#' + pn + ' a').bind('mouseenter', function(o){
        v = parseInt($(this).attr('row_id'));
        $('#' + pn + ' a:lt('+v+')').removeClass('star_off').removeClass('star_on').addClass('star_over')
        $('#' + pn + ' a:lt('+v+') span.half_star').hide();        
    }).bind('mouseout', function(o){
        $('#' + pn + ' a.star_over').removeClass('star_over');
        $('#' + pn + ' a:lt('+mw+')').addClass('star_on');
        $('#' + pn + ' a:gt('+(mw-1)+')').addClass('star_off');
        $('#' + pn + ' a span.half_star').show();
    }).bind('click', function(){
        v = parseInt($(this).attr('row_id'));
        request(pn, {'id':parseInt($('#'+pn).attr('row_id')), 'val':v, 'object':$('#'+pn).attr('row_name')});
    });
} // init_rate_panel
function monitor_set_btn(i){
    $('.monitor_caption_btn .monitor_dot_a').removeClass('monitor_dot_a').addClass('monitor_dot');
    if (i>0) $('.monitor_caption_btn span[row_id="'+i+'"]').removeClass('monitor_dot').addClass('monitor_dot_a');
    else $('.monitor_caption_btn span:eq(0)').removeClass('monitor_dot').addClass('monitor_dot_a');
} // monitor_set_btn

function monitor_open(e, i){
    $('#monitor').css({'background':'#000 url(/resource/monitor/'+i+'.png) no-repeat center'});    
    $('#hidden_image').attr('row_id', i);
    h = $('#monitor_caption_lib div[row_id='+i+']');
    $('#monitor_caption_text').html(h.html());
    
    u = h.attr('url');
    x = parseUri(u);
    s = parseUri(window.location);
    p = x.domain == s.domain ? '_self' : '_blank';
    if (u!=undefined){
        $('#monitor_href').attr('target', p);
        $('#monitor_href').attr('href', u);
    }else $('#monitor_href').removeAttr('href');
    
    monitor_set_btn(i);
} // monitor_open

function remove_album(n){
    request('remove_album', parseInt(n));
}
function refresh_img(){
    $('#capthca')[0].src = '/random_image.php?i='+ut();
}
function parseUri(sourceUri){
    var uriPartNames = ["source","protocol","authority","domain","port","path","directoryPath","fileName","query","anchor"];
    var uriParts = new RegExp("^(?:([^:/?#.]+):)?(?://)?(([^:/?#]*)(?::(\\d*))?)?((/(?:[^?#](?![^?#/]*\\.[^?#/.]+(?:[\\?#]|$)))*/?)?([^?#/]*))?(?:\\?([^#]*))?(?:#(.*))?").exec(sourceUri);
    var uri = {};
    
    for(var i = 0; i < 10; i++){
        uri[uriPartNames[i]] = (uriParts[i] ? uriParts[i] : "");
    }
    
    // Always end directoryPath with a trailing backslash if a path was present in the source URI
    // Note that a trailing backslash is NOT automatically inserted within or appended to the "path" key
    if(uri.directoryPath.length > 0){
        uri.directoryPath = uri.directoryPath.replace(/\/?$/, "/");
    }
    
    return uri;
}

function popup_static(txt){    
    
    $("body").prepend('<div id="jDialogProgressBar"><div class="loading_img"></div></div><div id="jDialogOverlay"></div><div id="jDialogContainer"><div class="DialogContainer" id="DialogContainer"><div class="cb"><div class="bt"><div/></div><div class="i1"><div class="i2"><div class="i3" id="popup_holder"><a id="img_close_btn" href="javascript:function(){return false;}" class="jDialogClose"></a>'+txt+'</div></div></div><div class="bb"><div/></div></div></div></div>');    
    $('#jDialogProgressBar').show();
    overlayPos(1);
    
    $('#jDialogOverlay').bind('click', function(event){event.stopPropagation();$.closeDialog();});    
    $('#img_close_btn').bind('click', function(event){event.stopPropagation();$.closeDialog();});    
    $('#DialogContainer').bind('click', function(event){event.stopPropagation();});
    
    setTimeout(function(){
        reposition();
        $('#jDialogProgressBar').hide();        
    }, 100);    
} // popup_static

function scrollLock(e) {
    var a=e.data.pos;
    window.scrollTo(a[0],a[1]);
    return false;
}

function stripslashes(str) {
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Ates Goral (http://magnetiq.com)
    // +      fixed by: Mick@el
    // +   improved by: marrtins
    // +   bugfixed by: Onno Marsman
    // +   improved by: rezna
    // +   input by: Rick Waldron
    // +   reimplemented by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: stripslashes('Kevin\'s code');
    // *     returns 1: "Kevin's code"
    // *     example 2: stripslashes('Kevin\\\'s code');
    // *     returns 2: "Kevin\'s code"
    return (str+'').replace(/\\(.?)/g, function (s, n1) {
        switch (n1) {
            case '\\':
                return '\\';
            case '0':
                return '\0';
            case '':
                return '';
            default:
                return n1;
            }
        });
}
function EditableString(str) {
    this.data = str;
}
EditableString.prototype.replaceAll = function (srcStr, dstStr) {
    this.pat = new RegExp(srcStr,"g");
    var newStr = this.data.replace (this.pat, dstStr);
    return new EditableString(newStr);
}
function unquoteXml(xmlStr){
    var result = new EditableString(xmlStr);
    result = result.replaceAll("&lt;", "<");
    result = result.replaceAll("&gt;", ">");
    result = result.replaceAll("&quot;", "\"");
    result = result.replaceAll("&amp;", "%");
    result = result.replaceAll("&#039;", "\'");
    result = result.replaceAll("&apos;", "'");
    return result.data;
}

function is_time(o, d){
    var timePat = /^(\d{1,2}):(\d{2})?$/;
    timeStr = $(o).val();
    var matchArray = timeStr.match(timePat);
    if (matchArray == null) {
        $(o).val(d);
        return false;
    }
    hour = matchArray[1];
    minute = matchArray[2];
    if (hour < 0  || hour > 23){        
        $(o).val(d);
        return false;
    }
    if (minute<0 || minute > 59) {        
        $(o).val(d);
        return false;
    }
}
