var jsFlexy =
{
    submit: function (form, target, options) {
        //return HTML_AJAX.formSubmit(form, target, options);
        form = HTML_AJAX_Util.getElement(form);
        if (!form) {
        // let the submit be processed normally
            return false;
        }

        var out = HTML_AJAX.formEncode(form);
        target = HTML_AJAX_Util.getElement(target);
        if (!target) {
            target = form;
        }
        try
        {
            var action = form.attributes['action'].value;
        }
        catch(e){}
        if(action == undefined)
        {
            action = form.getAttribute('action');
        }
        if (action.substring(0,7) == "http://") {
            action = action.substring(7);
            action = action.substring(action.search(/\//, action));
        }

        var callback = false;
        if (HTML_AJAX_Util.getType(target) == 'function') {
            callback = target;
        }
        else {
            callback = function(result) {
                // result will be undefined if HA_Action is returned, so skip the replace
                if (typeof result != 'undefined') {
                    HTML_AJAX_Util.setInnerHTML(target,result);
                }
            }
        }

        var serializer = HTML_AJAX.serializerForEncoding('Null');
        var request = new HTML_AJAX_Request(serializer);
        request.isAsync = true;
        request.callback = callback;

        switch (form.getAttribute('method').toLowerCase()) {
        case 'post':
            var headers = {};
            headers['Content-Type'] = 'application/x-www-form-urlencoded';
            request.customHeaders = headers;
            request.requestType = 'POST';
            request.requestUrl = '/inner'+action;
            request.args = out;
            break;
        default:
            if (action.indexOf('?') == -1) {
                out = '?' + out.substr(0, out.length - 1);
            }
            request.requestUrl = '/inner'+action+out;
            request.requestUrl = action+out;
            request.requestType = 'GET';
        }

        if(options) {
            for(var i in options) {
                request[i] = options[i];
            }
        }
        if (!form.getAttribute('notclear')) {
            form.innerHTML = phpVars.msgLoading;
        }
        target.innerHTML = phpVars.msgLoading;
        HTML_AJAX.makeRequest(request);
        return true;
    },
    
    link: function ( el, url, notClose ) {
        var target = 'body';
        var a = url.split('/');
        if (a.inArray('target')) {
            var u = '';
            for (i = 0; i < a.length; i++) {
                if (target == '*') {
                    target=a[i];
                } else if (a[i] == 'target') {
                    target='*';
                } else if (i+1 < a.length) {
                    u += a[i] + '/';
                }
            }
//            url = u;
        }
        notClose = (target=='body') || (target=='bodyMain') || (target+0>0) || (notClose && !(target+0>0));
        
        if (target=='') {
            target = 'body';
        }
        if (target && (target+0>0 || (target.charAt(0)=='!' && target.charAt(target.length)=='!'))) {
            if (target > 0) {
                var t = target;
            } else {
                var reg = target.substr(1,target.length-2);
                reg = new RegExp(reg);
            }
            var prnt;
            var last;
            
            while ((!prnt) && el && (el.tagName!='BODY')) {
                if ((t>0) && el.getAttribute('link')) {
                    last = el;
                    if (t==1) {
                        prnt = el;
                    } else {
                        t--;
                    }
                } else if (reg && reg.test(el.getAttribute('id'))) {
                    prnt = el;
                }
                el = el.parentNode;
            }
            if (last && (!prnt)) {
                prnt = last;
            }
            if (prnt) {
                target = prnt.getAttribute('id');
//                url = prnt.getAttribute('link'); // + url.substr(1, url.length-1);
            }
            
        }
        el = document.getElementById( target );
        if (!el) {
            return false;
        }
        
        var a = url.split('/');
        if (a.inArray('target')) {
            var u = '';
            var t = '';
            for (i = 0; i < a.length; i++) {
                if (t == '*') {
                    t = '';
                } else if (a[i] == 'target') {
                    t = '*';
                } else if (i+1 < a.length) {
                    u += a[i] + '/';
                }
            }
            url = u;
        }
        if (a[0].length != 2) {
            url = '/'+phpVars.LANGUAGE_ID+url;
        }
        
        if ((!notClose) && (url.charAt(0)=='/') && (el.getAttribute('link')==url)) {
            el.style.display = 'none';
            el.setAttribute('link','');
            el.innerHTML = '';
            return true;
        }
        
        if (url.charAt(0) != '/') {
            if (url.length > 0) {
                var u = url.split('/');
                var url_prefix = el.getAttribute('link');
                a = url_prefix.split('/');
                if (a.inArray(u[0])) {
                    url_prefix = '';
                    for (i = 0; i < a.length; i++) {
                        if (a[i] == u[0]) {
                            break;
                        }
                        url_prefix += a[i] + '/';
                    }
                }
                url = url_prefix + url;
            } else {
                url = el.getAttribute('link');
            }
        }
        el.setAttribute('link',url);
        
        el.innerHTML = phpVars.msgLoading;
        if (el.style.display == 'none') {
              el.style.display = 'block';
        }
        
        if (target=='body' || target=='bodyMain') {
            document.iframe_loaded=false;
            location.hash = url.substring(1);
            currentLocation = location.hash;
            if(document.iframesfix && document.frames['ajaxnav']){
                document.frames['ajaxnav'].location='?'+currentLocation.replace(/#/, ':hash:')+':iframesfix:';
            }
        }
        
        if (target.length > 0) {
            url += 'target/'+target+'/';
        }
        
        url = '/inner' + url;
        
        if (phpVars.is_debug) {
            el.innerHTML = '<div><i>Debug:</i> Link = '+url+'</div>';
            HTML_AJAX.append( target, url );
        } else {
            HTML_AJAX.replace( target, url );
        }
        
        if (target == 'body' || target=='bodyMain') {
            el = document.getElementById('scrollIntoView');
            if (el) {
                el.scrollIntoView(true);
            }
        }
        return true;
    },

    refresh: function ( el ) {
        var prnt;
        while (!prnt && el!=null) {
            if (el.className == 'parent') {
                prnt = el;
            }
            el = el.parentNode;
        }
        if (prnt) {
            var link = prnt.getAttribute('link');
            if (link) {
                this.link( this, link );
            }
        }
    },

    setActive: function( link )
    {
        var body = document.getElementsByTagName("body")[0]; 
        var tagA = body.getElementsByTagName("a"); 
        for (var i = 0; i < tagA.length; i++) { 
            clss = tagA[i].getAttribute("class");
            if ( clss == "active" ) {
                tagA[i].removeAttribute("class");
                clss = "";
            }
            href = tagA[i].getAttribute("href");
            if (href && href.substring(0,7) == "http://") {
                href = href.substring(7);
                href = href.substring(href.search(/\//, href));
            }
            if (href && href.length>2 && href == link.substring(0,href.length) && clss==null) {
                tagA[i].setAttribute("class", "active");
            }
        }
    },
    
    findParentEl: function(srcEl, destTag)
    {
        while (srcEl!=null) {
            if (srcEl.tagName == destTag) return srcEl;
            srcEl = srcEl.parentNode;
        }
        return null;
    },

    nextRow: function(el,url,firstTD, cntHead)
    {
        if (!el.tagName) {
            return false;
        }
        if (rowID = jsFlexy.insertRow(el,url,firstTD, cntHead)) {
            document.getElementById('td_add_'+rowID).setAttribute('innerLink',url);
            jsFlexy.divShow( url, 1, 'td_add_'+rowID );
        }
        return true;
    },
    
    refreshRow: function(el)
    {
        while (el!=null) {
            if (el.tagName=='TD' && el.id.substring(0,7)=='td_add_') {
                jsFlexy.divShow( el.getAttribute('innerLink'), 0, el.id );
                //return el;
            }
            el = el.parentNode;
        }
    },
    
    insertRow: function(el, url, firstTD, cntHead)
    {
        var tbl = jsFlexy.findParentEl(el,'TABLE');
        if (tbl==null) return false;
        
        var tbl_tr = jsFlexy.findParentEl(el,'TR');
        var insRow = null;
        var id = '';
    
        for (var i=0; i<tbl.tBodies[0].rows.length; i++) {
            id = tbl.tBodies[0].rows[i].getAttribute('id');
            if (i==insRow && id && id.substring(0,7)=='tr_add_') {
                if (tbl.tBodies[0].rows[i].getAttribute('innerLink')==url) {
                    if (cntHead > 0) {
                        i = i + cntHead;
                    }
                    tbl.deleteRow(i);
                    return false;
                } else {
                    tbl.tBodies[0].rows[i].setAttribute('innerLink',url);
                    return id.substring(7);
                }
            }
            if (tbl.tBodies[0].rows[i]==tbl_tr) { insRow = i+1; }
        }
        
        if (!insRow) { return false; }
    
        rowID = Math.random();
        while (document.getElementById('tr_add_'+rowID)) {
            rowID = Math.random();
        }
        
        var row = tbl.tBodies[0].insertRow(insRow);
        row.className = tbl.tBodies[0].rows[insRow-1].getAttribute('class');
        row.setAttribute('id', 'tr_add_'+rowID );
        row.setAttribute('innerLink', url );
    
        var addColSpan = tbl.tBodies[0].rows[0].cells.length;
        
        if (firstTD) {
            var cell0 = row.insertCell(0);
            var textNode = document.createTextNode(firstTD);
            cell0.appendChild(textNode);
            addColSpan = addColSpan - 1;
            var cell1 = row.insertCell(1);
        } else {
            var cell1 = row.insertCell(0);
        }
        
        cell1.setAttribute('id', 'td_add_'+rowID+'_main' );
        cell1.colSpan = addColSpan;
        
        //document.getElementById('td_add_'+rowID).innerHTML = phpVars.msgLoading + "loading...";
        btnClose = '<div align="right"><a href="javascript:void(0)" onclick="jsFlexy.deleteRowThis(this)" class="button">закрыть</a></div>'
//        document.getElementById('td_add_'+rowID+'_main').innerHTML = btnClose+'<div id="td_add_'+rowID+'">'+phpVars.msgLoading+'</div>'+btnClose;
        document.getElementById('td_add_'+rowID+'_main').innerHTML = '<div id="td_add_'+rowID+'">'+phpVars.msgLoading+'</div>';
        return rowID;
    },
    
    deleteRowThis: function(el)
    {
        var tr = jsFlexy.findParentEl(el,'TR');
        var tbl = jsFlexy.findParentEl(el,'TABLE');
        tbl.deleteRow(tr.rowIndex);
    },
    
    disp: function (id, el_a)
    {
        var div = document.getElementById(id);
        if (div.style.display=='none') {
            div.style.display = 'block';
            if (el_a) {
                if (! el_a.getAttribute('title_on')) {
                    el_a.setAttribute('title_on', el_a.innerHTML);
                }
                if (! el_a.getAttribute('title_off')) {
                    el_a.setAttribute('title_off', 'Закрыть');
                }
                el_a.innerHTML = el_a.getAttribute('title_off');
            }
        } else {
            div.style.display = 'none';
            if (el_a) {
                if (! el_a.getAttribute('title_on')) {
                    el_a.setAttribute('title_on', 'Отобразить' );
                }
                if (! el_a.getAttribute('title_off')) {
                    el_a.setAttribute('title_off', el_a.innerHTML );
                }
                el_a.innerHTML = el_a.getAttribute('title_on');
                document.getElementById(div.getAttribute('title_id')).innerHTML = div.getAttribute('title_on');
            }
        }
    },
    
    divShow: function ( url, notClose, id_div ) {
        id_div = this.findLinkId( url, id_div );
        if (id_div == 'body' || id_div=='bodyMain') {
            document.iframe_loaded=false;
            location.hash = url.substring(1);
            currentLocation = location.hash;
            if(document.iframesfix && document.frames['ajaxnav']){
                document.frames['ajaxnav'].location='?'+currentLocation.replace(/#/, ':hash:')+':iframesfix:';
            }
        }
        if (! url.split('/').inArray('target')) {
            url = url + 'target/' + id_div + '/';
        }
        var a = url.split('/');
        if (a[0].length != 2) {
            url = '/'+phpVars.LANGUAGE_ID+url;
        }
        if (id_div!=='body' && (!notClose)
                && document.getElementById(id_div).getAttribute('ajax') == url) {
            document.getElementById(id_div).style.display = 'none';
            document.getElementById(id_div).setAttribute('ajax','');
            document.getElementById(id_div).innerHTML = '';
        } else {
            document.getElementById(id_div).innerHTML = phpVars.msgLoading;
            document.getElementById(id_div).setAttribute('ajax',url);
            if (document.getElementById(id_div).style.display == 'none') {
                  document.getElementById(id_div).style.display = 'block';
            }
            HTML_AJAX.replace( id_div, '/inner' + url );
            if (id_div == 'body') {
                el = document.getElementById('scrollIntoView');
                if (el) {
                    el.scrollIntoView(true);
                }
            }
        }
        return true;
    },
    
    findLinkId: function ( url, id_div ) {
        if (!id_div) {
            var a = url.split('/');
            for (i = 0; i < a.length; i++) {
                if (id_div=='*') id_div=a[i];
                if (a[i]=='target') id_div='*';
            }
        }
        if (!id_div) {
            id_div = 'body';
        }
        return id_div;
    },
    
    divClose: function (id_div) {
        document.getElementById(id_div).innerHTML = '';
          document.getElementById(id_div).style.display = 'none';
    },
    
    Get_Cookie: function (name) {
       var start = document.cookie.indexOf(name+"=");
       var len = start+name.length+1;
       if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
       if (start == -1) return null;
       var end = document.cookie.indexOf(";",len);
       if (end == -1) end = document.cookie.length; 
       return unescape(document.cookie.substring(len,end)); 
    },
    
    Set_Cookie: function (name,value,expires,path,domain,secure) { 
        expires = expires * 60*60*24*1000;
        var today = new Date();
        var expires_date = new Date( today.getTime() + (expires) );
        var cookieString = name + "=" +escape(value) + 
           ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + 
           ( (path) ? ";path=" + path : "") + 
           ( (domain) ? ";domain=" + domain : "") + 
           ( (secure) ? ";secure" : ""); 
        document.cookie = cookieString; 
    },
    
    Delete_Cookie: function (name,path,domain) { 
       if (jsFlexy.Get_Cookie(name)) document.cookie = name + "=" + 
          ( (path) ? ";path=" + path : "") + 
          ( (domain) ? ";domain=" + domain : "") + 
          ";expires=Thu, 01-Jan-70 00:00:01 GMT"; 
    },
    
    slideStart: function(id, slide) {
        var el = document.getElementById(id);
        var el_content = document.getElementById(id+'_Content');
        
        el_content.style.position = 'relative';
        
        if (slide <= 0) {
            el.setAttribute('slide','-1');
            if (! el.style.height) {
                el.style.height = el_content.offsetHeight + 'px';
            }
            this.slideClose(id);
        } else {
            el.setAttribute('slide','1');
            el.style.visibility = 'visible';
            this.slideShow(id);
        }
    },
    
    slideShow: function(id) {
        var el = document.getElementById(id);
        if (el.getAttribute('slide') != '1') {
            return;
        }
        var el_content = document.getElementById(id+'_Content');
        var el_height = (el.style.height.substring(0,el.style.height.length-2) * 1);
        if (el_height + phpVars.slidedownSpeed > el_content.offsetHeight) {
            el.style.height = '';
            el_content.style.top = '0px';
            return;
        }
        el_content.style.top = '-' + (el_content.offsetHeight - (el_height + phpVars.slidedownSpeed)) + 'px';
        el.style.height = (el_height + phpVars.slidedownSpeed + 10) + 'px';
        setTimeout('jsFlexy.slideShow("'+id+'")', phpVars.slidedownTimer);
    },
    
    slideClose: function(id) {
        var el = document.getElementById(id);
        if (el.getAttribute('slide') != '-1') {
            return;
        }
        var el_content = document.getElementById(id+'_Content');
        var el_height = el.style.height.substring(0,el.style.height.length-2) * 1;
        if (el_height <= phpVars.slidedownSpeed) {
            el.style.height = '1px';
            el.style.visibility = 'hidden';
            return;
        }
        el_content.style.top = '-' + (10 + el_content.offsetHeight - (el_height - phpVars.slidedownSpeed)) + 'px';
        el.style.height = (el_height - phpVars.slidedownSpeed) + 'px';
        setTimeout('jsFlexy.slideClose("'+id+'")', phpVars.slidedownTimer);
    },
    
    Redirect: function(url) {
        window.location = url;
    },
    
    hideId: function(id, time) {
        if (time) {
            setTimeout('jsFlexy.hideId("'+id+'")', time);
        } else {
            var el = document.getElementById(id);
            if (el) {
                el.style.display = 'none';
            }
        }
    },
    
    deleteFormValues: function(form) {
        var validElement = function (element) {
            if (!element || !element.getAttribute) {
                return false;
            }
            if (element.disabled) {
                return false;
            }
            return true;
        }
        
        var ids_old = new Array();
        var ids_new = new Array();
        var ids_cnt = -1;
        
        var els = form.getElementsByTagName('INPUT');
        for (var i=0; i < els.length; i++) {
            if (!validElement(els[i])) {
                continue;
            }
            els[i].value = "";
            if (els[i].id.length > 0) {
                var r = Math.random()*1000;
                ids_cnt += 1;
                ids_old[ids_cnt] = "" + els[i].id;
                ids_new[ids_cnt] = "" + els[i].id + "_" + r;
                els[i].id = ids_new[ids_cnt];
            }
        }

        var els = form.getElementsByTagName('SELECT');
        for (var i=0; i < els.length; i++) {
            if (!validElement(els[i])) {
                continue;
            }
            els[i].value = "";
            els[i].selectedIndex = 0;
        }

        var els = form.getElementsByTagName('TEXTAREA');
        for (var i=0; i < els.length; i++) {
            if (!validElement(els[i])) {
                continue;
            }
            els[i].value = "";
        }
        
/*        var els = form.getElementsByTagName('SCRIPT');
        for (var i=0; i < els.length; i++) {
            for (var j=0; j<ids_old.length; j++) {
                els[i].text = els[i].text.replace( ids_old[j], ids_new[j] );
//                els[i].innerHTML = els[i].innerHTML.replace( ids_old[j], ids_new[j] );
            }
        }*/
        
        return form;
    },
        
    markAllCheckbox: function ( el ) {
        if (!el) {
            el = document;
        }
        var a = el.getElementsByTagName('input');
        for (i=0; i<a.length; i++) {
            if (a[i].getAttribute('type').toLowerCase() == 'checkbox') {
                a[i].checked = true;
            }
        }
    }
}

Array.prototype.inArray = function (value)
{
    var i;
    for (i=0; i < this.length; i++) {
        if (this[i] === value) {
            return true;
        }
    }
    return false;
};
