/* Stack up window.onload event using this function from Simon Willison - http://www.sitepoint.com/blog-post-view.php?id=171578 */
var addLoadEvent = function (func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            oldonload();
            func();
        }
    }
}

/*
 * (c)2006 Jesse Skinner/Dean Edwards/Matthias Miller/John Resig
 * Special thanks to Dan Webb's domready.js Prototype extension
 * and Simon Willison's addLoadEvent
 *
 * For more info, see:
 * http://www.thefutureoftheweb.com/blog/adddomloadevent
 * http://dean.edwards.name/weblog/2006/06/again/
 * http://www.vivabit.com/bollocks/2006/06/21/a-dom-ready-extension-for-prototype
 * http://simon.incutio.com/archive/2004/05/26/addLoadEvent
 * 
 *
 * To use: call addDOMLoadEvent one or more times with functions, ie:
 *
 *    function something() {
 *       // do something
 *    }
 *    addDOMLoadEvent(something);
 *
 *    addDOMLoadEvent(function() {
 *        // do other stuff
 *    });
 *
 */
 
addDOMLoadEvent = (function(){
    // create event function stack
    var load_events = [],
        load_timer,
        script,
        done,
        exec,
        old_onload,
        init = function () {
            done = true;

            // kill the timer
            clearInterval(load_timer);

            // execute each function in the stack in the order they were added
            while (exec = load_events.shift())
                exec();

            if (script) script.onreadystatechange = '';
        };

    return function (func) {
        // if the init function was already ran, just run this function now and stop
        if (done) return func();

        if (!load_events[0]) {
            // for Mozilla/Opera9
            if (document.addEventListener)
                document.addEventListener("DOMContentLoaded", init, false);

            // for Internet Explorer
            /*@cc_on @*/
            /*@if (@_win32)
                document.write("<script id=__ie_onload defer src=//0><\/scr"+"ipt>");
                script = document.getElementById("__ie_onload");
                script.onreadystatechange = function() {
                    if (this.readyState == "complete")
                        init(); // call the onload handler
                };
            /*@end @*/

            // for Safari
            if (/WebKit/i.test(navigator.userAgent)) { // sniff
                load_timer = setInterval(function() {
                    if (/loaded|complete/.test(document.readyState))
                        init(); // call the onload handler
                }, 10);
            }

            // for other browsers set the window.onload, but also execute the old window.onload
            old_onload = window.onload;
            window.onload = function() {
                init();
                if (old_onload) old_onload();
            };
        }

        load_events.push(func);
    }
})();

// класс-список
var ListClass = new Class({
    initialize: function(event, elementclass)
    {
        this.objList = Array();
        this.objListH = Array();
        this.objInitList = Array();
        this.objInitListOID = Array();
        this.event = event;
        this.elementclass = elementclass;
    },

    addObject: function(book_id, object_id)
    {
        if (book_id == '' || object_id == '') return;

        this.objInitList.push(book_id);
        this.objInitListOID.push(object_id);
    },

    bindAll: function()
    {
        //alert(this.objInitList);
        for (i = 0; i < this.objInitList.length; i++)
        {
            this.objList[i] = new this.elementclass(this.objInitList[i]);
            //alert(this.objList[i].send);
            //this.objListH[i] = this.objList[i].send.bindAsEventListener(this.objList[i]);
            this.objListH[i] = this.objList[i].send.bind(this.objList[i]);

            $(this.objInitListOID[i]).addEvent(this.event, this.objListH[i]);
        }
    },

    unbindAll: function()
    {
        for (i = 0; i < this.objInitList.length; i++)
        {
            if ($(this.objInitListOID[i]))
            {
                $(this.objInitListOID[i]).removeEvent(this.event, this.objListH[i]);
            }
        }
    },

    clear: function()
    {
        this.unbindAll();
        this.objList = Array();
        this.objListH = Array();
        this.objInitList = Array();
        this.objInitListOID = Array();
    }
});

// привязка событий к списку элементов
function BindList(HTMLClass, ListObject){
    if ($$(HTMLClass).length>0){ListObject.clear();}
    $$(HTMLClass).each(function(item) {
        id = item.id.substr(item.id.lastIndexOf('-') + 1);
        ListObject.addObject(id, item.id);
    });
    if ($$(HTMLClass).length>0)ListObject.bindAll();
}

var trim = function($str) {
    return $str.replace(/^\s+|\s+$/g,"");
}

var strToQueryString = function(str)
{
    //var reg = new RegExp("\\\\",'g');
    //str = str.replace(reg, '[!!!backslash!!!]');
    //alert(str);

    var reg = new RegExp('([\\\\"])','g');
    str = str.replace(reg, '\\$1');

    //alert(str);
    str = encodeURIComponent(str);
    //alert(str);

    // /-%2F
    //var reg = new RegExp('\/', 'i');
    //str = str.replace(reg, '%2F');

    //alert(str);
    return str;
}

// 3 врапера 
function xshow(el){
    //Element.show(el);
    //$(el).setOpacity(1);
    if (!$(el))
    {
        alert("xshow. Object not found:" + el);
    }
    $(el).setStyle('display', 'block');
}

function xhide(el){
    //Element.hide(el);
    //$(el).setOpacity(0);
    if (!$(el))
    {
        alert("xhide. Object not found:" + el);
    }
    $(el).setStyle('display', 'none');
}

function xtoggle(el){
    if (!$(el))
    {
        alert("xtoggle. Object not found:" + el);
    }
    if ($(el).getStyle('display') == 'none') $(el).setStyle('display', 'block'); else $(el).setStyle('display', 'none');
}


// "loading..." block
var showLoading = false;
var periodical;

/**
 *  Инициализация блока лоадинг. и показ блока. Для пока вызывать именно этот метод.
 *
 *
 */
var initAd = function()
{
    //$('systemWorking').setOpacity(1);
    xshow('systemWorking');
    showLoading = true;
    showAd();
    periodical = showAd.periodical(100);
}
/**
 *  Показ блока лоадинг. Вызывается из initAd();
 *
 *
 */
var showAd = function()
{
    //status="11111";
    if (showLoading){
        //$('systemWorking').top = window.getScrollTop+20;
        $('systemWorking').setStyle('top', window.getScrollTop()+20);
        //setTimeout("showAd()", 100);
    }
    else
    {
        $clear(periodical);
    }
}
/**
 *  Сокрытие блока лоадинг
 *
 *
 */
var closeAd = function()
{
    //$('systemWorking').setOpacity(0);
    xhide('systemWorking');
    showLoading = false;
    $clear(periodical);
}
/**
 *  Сокрытие блока лоадинг
 *
 *
 */
var fail = function(t)
{
    //$('systemWorking').setHTML = Object.keys(t)//'Error!';
    $('systemWorking').set('html', 'Error!');
    //showLoading = false;
    //$clear(periodical);
}
// end of "loading..." block

var failure = function(t)
{
    //$('systemWorking').setHTML = Object.keys(t)//'Error!';
    $('systemWorking').set('html', 'Error!');
    //showLoading = false;
    //$clear(periodical);
}







var strToJson = function($str)
{
    return eval('(' + $str + ')');
}

var clear_select = function(id)
{
    select = $(id);

    if (select)
    {
        options = select.options;
        for ( i = options.length; i >= 0; i--) 
        { 
            options[i] = null; 
        }
    }
}

var fill_select = function(id, json_arr, first_option)
{
    sel = $(id);
    if (sel != null && json_arr != null)    
    {
        clear_select(sel);
    
        start_index = 0;
        if (first_option != null)
        {
            sel.options[0]  = new Option(first_option, "0");
            start_index = 1;
        }

        for (i = start_index; i <= json_arr.length; i++)
        {
            el = json_arr[i-1];
            sel.options[i]  = new Option(el.name, el.id);
        }

        cel.disabled = false;
    }
}

var hide_element = function(id)
{
    el = $(id);

    if (el)
    {
        el.style.display    = "none";
        el.style.visibility = "hidden";
    }
}

var show_element = function(id)
{
    el = $(id);

    if (el)
    {
        el.style.display    = "";
        el.style.visibility = "visible";
    }
}

var protect_email = function(address, domain)
{
	var href ='&#109;&#97;&#105;&#108;&#116;&#111;&#58;' + address + '&#64;' + domain;
	document.write('<a href="' + href + '" target="_blank">' + address + '&#64;' + domain + '</a>');
}