var debug = true;
var helper_timer = null;
var helper_click = false;
var LockData = false;
ajax_object_counter = 0;

function checkForm(El)
{
    var tElement = El.getElementsByTagName("INPUT");
    for (var i=0; i<tElement.length; i++)
    {
        if ((tElement[i].getAttribute('required') != null) && (tElement[i].getAttribute('required') != '') && (tElement[i].value == ''))
        {
            alert(tElement[i].getAttribute('required'));
            tElement[i].focus();
            return false;
        }
        if ((tElement[i].getAttribute('required') != null) && (tElement[i].getAttribute('required') != '') && (tElement[i].type == 'checkbox') && !tElement[i].checked)
        {
            alert(tElement[i].getAttribute('required'));
            tElement[i].focus();
            return false;
        }
        if ((tElement[i].getAttribute('equal') != null) && (tElement[i].getAttribute('equal') != ''))
        {
            var tt = document.getElementById(tElement[i].getAttribute('equal'));
            if ((tt != null) && (tt.value != tElement[i].value))
            {
                alert(tElement[i].getAttribute('equaltext'));
                tt.focus();
                return false;
            }
        }
        if ((tElement[i].getAttribute('minlength') != null) && (tElement[i].getAttribute('minlength') != '') && (tElement[i].value.length < tElement[i].getAttribute('minlength')))
        {
            alert(tElement[i].getAttribute('mintext'));
            tElement[i].focus();
            return false;
        }
        if ((tElement[i].getAttribute('is_email') != null) && (tElement[i].getAttribute('is_email') != ''))
        {
          var re = /^[0-9a-zA-Z&]([-_.]?[0-9a-zA-Z&])*@[0-9a-zA-Z&]([-.]?[0-9a-zA-Z&])*\.[a-zA-Z]{2,4}?$/;//[a-wyz][a-z](g|l|m|pa|t|u|v|fo)?                
          if (!tElement[i].value.match(re)) {
                alert(tElement[i].getAttribute('is_email'));
                tElement[i].focus();
                return false;
            }
        }
        if ((tElement[i].getAttribute('is_float') != null) && (tElement[i].getAttribute('is_float') != '') && (tElement[i].value != ''))
        {
            if (parseFloat(tElement[i].value) != tElement[i].value)
            {
                alert(tElement[i].getAttribute('is_float'));
                tElement[i].focus();
                return false;
            }
        }
/*   if ((tElement[i].getAttribute('maxvalue') != null) && (tElement[i].getAttribute('maxvalue') != '') && (tElement[i].value+1 > tElement[i].getAttribute('maxvalue')+1))
        {
            alert(tElement[i].getAttribute('maxvaluetext'));
            tElement[i].focus();
            return false;
        }*/
    }

    tElement = El.getElementsByTagName("SELECT");
    for (var i=0; i<tElement.length; i++)
    {
        if ((tElement[i].getAttribute('required') != null) && (tElement[i].getAttribute('required') != '') && (tElement[i].value == ''))
        {
            alert(tElement[i].getAttribute('required'));
            tElement[i].focus();
            return false;
        }
    }
    return true;
}

function sendAction()
// arguments[0] - Action
// arguments[1] - if == true  - send action to dynamicIFrme, else send and reload page
{
    if (arguments[0])
    {
        var mainForm = document.getElementById("mainform");
        mainForm.action.value = arguments[0];
        if (arguments[1])
            mainForm.target = 'dynamicIFrame';
        else
            mainForm.target = '_self';
        if (arguments[2])
        {
            var tt = document.getElementById('actionvalue');
            tt.value = arguments[2];
        }
        mainForm.submit();
    }
}

function sendXAction()
{
    //arguments[0] - action
    //other arguments - parameters, ex. sendXAction('update', 'id', 5);
    //         sendXAction('update', 'id', 5, 'pid', 10);
    el = document.getElementById('xForm');
    if (el)
    {
        document.body.removeChild(el);
    }

    var xForm = document.createElement('FORM');
    var elemAction = document.createElement('INPUT');

    xForm.id = 'xForm';

    elemAction.setAttribute('type', 'hidden');
    elemAction.setAttribute('name', 'action');
    elemAction.setAttribute('value', arguments[0]);
    xForm.appendChild(elemAction);

    var Form = document.getElementById("mainform");
    var elemModule = document.createElement('INPUT');
    elemModule.setAttribute('name', 'module');
    elemModule.setAttribute('type', 'hidden');
    elemModule.setAttribute('value', Form.module.value);
    xForm.appendChild(elemModule);


    for (var i=1; i<arguments.length; i+=2)
    {
        var elem = document.createElement('INPUT');
        elem.setAttribute('name', arguments[i]);
        elem.setAttribute('type', 'hidden');
        try{elem.setAttribute('value', arguments[i+1]); }catch(e){};
        xForm.appendChild(elem);
    }
    xForm.setAttribute('method', 'post');
    xForm.target = 'dynamicIFrame';

    document.body.appendChild(xForm);

    xForm.submit();
}

function sendJAction()
{
    //arguments[0] - action
    //arguments[1] - module, if empty - current module
    //other arguments - parameters, ex. sendJAction('update', 'user', 'id', 5);
    //         sendJAction('update', '', 'id', 5, 'pid', 10);
    el = document.getElementById('xForm');
    if (el)
    {
        document.body.removeChild(el);
    }

    var xForm = document.createElement('FORM');
    var elemAction = document.createElement('INPUT');

    xForm.id = 'xForm';

    elemAction.setAttribute('type', 'hidden');
    elemAction.setAttribute('name', 'action');
    elemAction.setAttribute('value', arguments[0]);
    xForm.appendChild(elemAction);

    var Form = document.getElementById("mainform");
    var elemModule = document.createElement('INPUT');
    elemModule.setAttribute('name', 'module');
    elemModule.setAttribute('type', 'hidden');
    if (arguments[1])
        elemModule.setAttribute('value', arguments[1]);
    else
        elemModule.setAttribute('value', Form.module.value);
    xForm.appendChild(elemModule);


    for (var i=2; i<arguments.length; i+=2)
    {
        var elem = document.createElement('INPUT');
        elem.setAttribute('name', arguments[i]);
        elem.setAttribute('type', 'hidden');
        try{elem.setAttribute('value', arguments[i+1]); }catch(e){};
        xForm.appendChild(elem);
    }
    xForm.setAttribute('method', 'post');
    xForm.target = '_self';

    document.body.appendChild(xForm);

    xForm.submit();
}

//------------------------------------------------------- AJAX -------------------------------------------------------




function AJAXcreateRequestObject()
{
    var request_;
    var browser = navigator.appName;
    if (browser == "Microsoft Internet Explorer")
        request_ = new ActiveXObject("Microsoft.XMLHTTP");
    else
        request_ = new XMLHttpRequest();
    return request_;
}

function AJAXGetData()
//      arguments[0] - url
{

    var AJAXhttp = AJAXcreateRequestObject();

    AJAXhttp.open('GET', arguments[0]);
//  AJAXhttp.onprogress
    AJAXhttp.onreadystatechange = 
        function AJAXhandle_call()
        {
            if(AJAXhttp.readyState == 4)
            {
                AJAXprocessVars(AJAXhttp.responseXML);
                AJAXprocessArrays(AJAXhttp.responseXML.firstChild);
                AJAXprocessExec(AJAXhttp.responseXML);
                ajax_object_counter--;
                if (ajax_object_counter == 0)
                {
//                  hide_ajax_message();
                }
            }
        }

    AJAXhttp.send(null);
//  show_ajax_message();
    ajax_object_counter++;
}

function AJAXPostData()
//      arguments[0] - url
//      arguments[1] - data
{
    var AJAXhttp = AJAXcreateRequestObject();
    if(!AJAXhttp) return false;
    AJAXhttp.onreadystatechange = 
        function AJAXhandle_call()
        {
            if (AJAXhttp.readyState == 4)
            {
                if (AJAXhttp.responseXML)
                {
                    try { AJAXprocessVars(AJAXhttp.responseXML); } catch (e) {}
                    try { AJAXprocessArrays(AJAXhttp.responseXML.firstChild); } catch (e) {}
                    try { AJAXprocessExec(AJAXhttp.responseXML); } catch (e) {}
                    try 
                    { 
                        ajax_object_counter--; 
                        if (ajax_object_counter == 0)
                        {
//                          hide_ajax_message();
                        }
                    } catch (e) {}
                }
            }
        }

    AJAXhttp.open('POST', arguments[0], true);

    AJAXhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    AJAXhttp.send(AJAXurlEncodeData(arguments[1]));
    return;
//  show_ajax_message();
    ajax_object_counter++;
    return true;
}

function AJAXprocessExec(x)
{
    var tt = x.getElementsByTagName('Exec');

    for (var i=0; i<tt.length; i++)
    {
        var zz = tt[i].childNodes[0].nodeValue;
        if (zz)
        {
            eval(zz);
        }
    }
}

function AJAXprocessVars(x)
{
    if (x)
    {
        var tt = x.getElementsByTagName('VarName');
        if (tt)
        {
            for (var i=0; i<tt.length; i++)
            {
                for (var j=0; j<tt.item(i).attributes.length; j++)
                {
                    if (tt.item(i).attributes[j].name == 'name')
                    {
                        var qq = tt.item(i).getElementsByTagName('data');

                        if (qq.item(0).attributes[0].name == 'type' && qq.item(0).attributes[0].value == 'int')
                            eval(tt.item(i).attributes[j].value + '=' + (qq.item(0).childNodes.length?qq.item(0).childNodes[0].nodeValue:''));
                        else if (qq.item(0).attributes[0].name == 'type' && qq.item(0).attributes[0].value == 'string')
                            eval(tt.item(i).attributes[j].value + '=\'' + (qq.item(0).childNodes.length?qq.item(0).childNodes[0].nodeValue:'') + '\'');
                    }
                }
            }
        }
    }
}

function AJAXprocessArrays()
{
    var x = arguments[0];

    for (var i=0; i<x.childNodes.length; i++)
    {
        var tt = x.childNodes[i];
        if (tt.tagName == 'VarArrayName')
        {
            var nodeName = tt.getAttribute('name');

            if (arguments[1])
            {
//              alert(arguments[1] + ' = new Array');
                eval(arguments[1] + ' = new Array');
            }
            else
            {
//              alert(nodeName + ' = new Array');
                eval(nodeName + ' = new Array');
            }

            for (var j=0; j<tt.childNodes.length; j++)
            {
                if (tt.childNodes[j].tagName == 'data')
                {
                    var aType = tt.childNodes[j].getAttribute('type')
                    var akey = tt.childNodes[j].getAttribute('key')

                    if (aType == 'array')
                    {
                        AJAXprocessArrays(tt.childNodes[j], (arguments[1]?arguments[1]:nodeName) + '[' + (akey?'\'' + akey + '\'':k) + ']');
                    }
                    else
                    {
//                      alert(akey);
//                      alert((arguments[1]?arguments[1]:nodeName) + "['" + (akey?akey.replace("'", "\\'"):k) + "']" +  '=' + (aType=='string'?'\'':'') + tt.childNodes[j].childNodes[0].nodeValue + (aType=='string'?'\'':'') + ';');
//                      eval((arguments[1]?arguments[1]:nodeName) + "['" + (akey?akey.replace("'", "\\'"):k) + "']" +  '=' + (aType=='string'?'\'':'') + tt.childNodes[j].childNodes[0].nodeValue + (aType=='string'?'\'':'') + ';');
                        var zzzzzzzzzzzz = tt.childNodes[j].childNodes[0].nodeValue;
                        eval((arguments[1]?arguments[1]:nodeName) + "['" + (akey?akey.replace(/\'/g, "\\'"):k) + "']" +  '= zzzzzzzzzzzz'  + ';');
                    }
                }
            }
        }
    }
}

function AJAXurlEncodeData(data)
{
    var query = [];
    if (data instanceof Object)
    {
        for (var k in data)
        {
            if (data[k] instanceof Object)
            {
                for (var j in data[k])
                {
                    if (data[k][j] instanceof Object)
                    {
                        for (var i in data[k][j])
                        query.push(encodeURIComponent(k) +"["+j+"]["+i+"]=" + encodeURIComponent(data[k][j][i]));
                    }
                    else
                    query.push(encodeURIComponent(k) +"["+j+"]=" + encodeURIComponent(data[k][j]));
                }
            }
            else
                query.push(encodeURIComponent(k) + "=" + encodeURIComponent(data[k]));
        }

        return query.join('&');
    }
    else
    {
        return encodeURIComponent(data);
    }
}

//------------------------------------------------------- /AJAX ------------------------------------------------------
//------------------------------------------------------- Controls ---------------------------------------------------

function processAJAXControls()
{
    var El;
    
    El = document.body.getElementsByTagName("SELECT");
    for (var i = 0; i < El.length; i++)
        xCheckControl(El[i]);

    El = document.body.getElementsByTagName("INPUT");
    for (var i = 0; i < El.length; i++)
        xCheckControl(El[i]);

    El = document.body.getElementsByTagName("SPAN");
    for (var i = 0; i < El.length; i++)
        xCheckControl(El[i]);

    El = document.body.getElementsByTagName("DIV");
    for (var i = 0; i < El.length; i++)
    {
        if (El[i].id == '')
        {
            El[i].id = 'grid_'+Math.round(Math.random()*10000000);
        }
        xCheckControl(El[i]);
    }
}

function xCheckControl(El)
{
    if (El.getAttribute("data_from") != "")
    {
        El.fill = xfControlFill;
        El.refresh = xfControlFill;
        El.update = xfControlUpdate;
        El.updateCounter = xControlUpdateCounter;

        if (El.getAttribute("searchgroup"))
        {
            El.old_onchange = El.onchange;
            El.onchange = xControlUpdateCounter;
        }

//      if (El.getAttribute("ajax_type") == "grid")
//      {
//          
//      }

        if (El.getAttribute("ajax_type") == "helper")
        {
            El.get_list = xfControlGetList;
            El.onkeyup = function ()
            {
                if (El.getAttribute('old_value') != El.value)
                {
                    if (helper_timer)
                        clearTimeout(helper_timer);
                    helper_timer = setTimeout("document.getElementById('" + this.id + "').get_list()", 500);
                }
            }
            El.onclick = function ()
            {
                if ((El.dataArray) && (!El.getAttribute('nocache')))
                {
                    xCreateHelper(El.id, El.dataArray);
                }
                else
                {
                    if (El.getAttribute('nocache'))
                    {
                        if (helper_timer)
                            clearTimeout(helper_timer);
                        document.getElementById(this.id).get_list();
                    }
                }
                helper_click = true;
            }
        }

        if (El.getAttribute("autofill") == "true")
            El.fill();
    }
}

function xfControlGetList()
{
    data = xControlGetArraySearchGroup(this.getAttribute('searchgroup'));
    data[(this.name?this.name:this.id)] = this.value;
    data['id'] = this.id;

//  AJAXPostData('/_log.php', data);
    AJAXPostData(this.getAttribute('data_from'), data);
}

function xControlGetArraySearchGroup()
{
    var data = [];

    if (arguments[0])
    {
        var tInputs = document.getElementsByTagName('INPUT');
        for (var i=0; i<tInputs.length; i++)
        {
            if (tInputs[i].getAttribute('searchgroup') == arguments[0])
            {
                data[(tInputs[i].name?tInputs[i].name:tInputs[i].id)] = tInputs[i].value;
            }
        }
        var tSelects = document.getElementsByTagName('SELECT');
        for (var i=0; i<tSelects.length; i++)
        {
            if (tSelects[i].getAttribute('searchgroup') == arguments[0])
            {
                data[(tSelects[i].name?tSelects[i].name:tSelects[i].id)] = tSelects[i].value;
            }
        }
    }

    return data;
}

function xControlUpdateCounter()
{
    if (this.getAttribute('searchgroup'))
    {
        var tc = document.getElementById('searchGroupCount' + this.getAttribute('searchgroup'));
        if (tc)
        {
            xCloseGrids();
            data = xControlGetArraySearchGroup(this.getAttribute('searchgroup'));
            data['id'] = tc.id;

            AJAXPostData(tc.getAttribute('data_from'), data);
        }
        try { this.old_onchange(); } catch (e) {}
    }
}

function xCloseGrids()
{
    var tTables = document.getElementsByTagName('TABLE');
    for (var i=0; i<tTables.length; i++)
    {
        if ((tTables[i].getAttribute('thisGrid') == '1') || (tTables[i].getAttribute('thisPaging') == '1'))
        {
            tTables[i].parentNode.removeChild(tTables[i]);
            i = 0;
        }
    }
}

function show_helper()
//      arguments[0] - selectID
//      arguments[1] - fillFrom
{
    var tt = document.getElementById(arguments[0]);
    var fTable, ftBody, row, cell, el;
    var t = '';

    if (tt && (tt.tagName == 'INPUT'))
    {
        xCreateHelper(arguments[0], arguments[1]);
    }
    else if (debug)
    {
        alert('Error: Route xFillSelect - selectID not found in document.');
    }
}

function xCreateHelper()
//      arguments[0] - Create for element
//      arguments[1] - Get Data from
{
    var size_add = 2;
    var startTabIndex = 100;
    var tt = document.getElementById(arguments[0]);
    var cell_couner = 0;

    tt.setAttribute('old_value', tt.value);
    tt.dataArray = arguments[1];
    tt.focus();
    tt.updateCounter();

    var zz_check = document.getElementById('helper_main_tab');
    if (zz_check)
        zz_check.parentNode.removeChild(zz_check);

    if (arguments[1].length > 0)
    {
        tt.setAttribute('old_tabIndex', tt.tabIndex);
        tt.tabIndex = startTabIndex;

        tt.onkeydown = function (e)
        {
            if (!e)
                e = event;

            if (e.keyCode == 40)            // Cursor down
            {
                var zz = document.getElementById('helper_main_tab');
                if (zz)
                {
                    zz.childNodes[0].childNodes[0].firstChild.focus();
                }
            }

            if (e.keyCode == 38)            // Cursor down
            {
                var zz = document.getElementById('helper_main_tab');
                if (zz)
                {
//                  alert(zz.childNodes[0].childNodes[zz.childNodes[0].childNodes.length - 1].childNodes[0].innerHTML);
                    zz.childNodes[0].childNodes[zz.childNodes[0].childNodes.length - 1].childNodes[0].focus();
                }
            }
        }

        fTable = document.createElement("TABLE");
        fTable.id = 'helper_main_tab';
        fTable.border = '0';
        fTable.className = 'helper_tab'
        fTable.cellSpacing = 0;
        fTable.cellPadding = 0;
        fTable.style.position = 'absolute';
        fTable.style.top = get_top(tt) + tt.clientHeight + size_add;
        fTable.style.left = get_left(tt);

//      fTable.style.left = tt.offsetParent.offsetLeft + tt.offsetLeft;
        fTable.width = tt.clientWidth + size_add;

        ftBody = document.createElement("TBODY");

        for (i in arguments[1])
        {
            cell_couner++;
            row = document.createElement("TR");
            cell = document.createElement("TD");
            cell.appendChild(document.createTextNode(arguments[1][i]['name']));
            cell.className = 'helper_cell_out';
            cell.tabIndex = startTabIndex + cell_couner;
            cell.onmouseover = function ()
                {
                    this.className = 'helper_cell_over';
                }
            cell.onmouseout = function ()
                {
                    this.className = 'helper_cell_out';
                }
            cell.onfocus = function (e)
                {
                    this.className = 'helper_cell_over';
                }
            cell.onblur = function (e)
                {
                    this.className = 'helper_cell_out';
                }
            cell.onkeydown = function (e)
                {
                    if (!e)
                        e = event;

                    if (e.keyCode == 40)            // Cursor down
                    {
                        this.className = 'helper_cell_out';
                        if (this.parentNode.parentNode.childNodes.length == this.tabIndex - startTabIndex)
                            tt.focus();
//                          this.parentNode.parentNode.childNodes[0].firstChild.focus();
                        else
                            this.parentNode.parentNode.childNodes[this.tabIndex - startTabIndex].firstChild.focus();
                        return false;
                    }
                    else if (e.keyCode == 38)       // Cursor up
                    {
                        this.className = 'helper_cell_out';
                        if (this.tabIndex - startTabIndex == 1)
                            tt.focus();
//                          this.parentNode.parentNode.childNodes[this.parentNode.parentNode.childNodes.length - 1].firstChild.focus();
                        else
                            this.parentNode.parentNode.childNodes[this.tabIndex - startTabIndex - 2].firstChild.focus();
                        return false;
                    }
                    else if (e.keyCode == 9)        // TAB
                    {
                        if (e.shiftKey)
                        {
                            this.className = 'helper_cell_out';
                            if (this.tabIndex - startTabIndex == 1)
                                this.parentNode.parentNode.childNodes[this.parentNode.parentNode.childNodes.length - 1].firstChild.focus();
                            else
                                this.parentNode.parentNode.childNodes[this.tabIndex - startTabIndex - 2].firstChild.focus();
                        }
                        else
                        {
                            this.className = 'helper_cell_out';
                            if (this.parentNode.parentNode.childNodes.length == this.tabIndex - startTabIndex)
                                this.parentNode.parentNode.childNodes[0].firstChild.focus();
                            else
                                this.parentNode.parentNode.childNodes[this.tabIndex - startTabIndex].firstChild.focus();
                        }
                        return false;
                    }
                    else if (e.keyCode == 13)       // ENTER
                    {
                        tt.value = this.innerHTML;
                        var zz = document.getElementById('helper_main_tab');
                        tt.parentNode.removeChild(zz);
                        tt.focus();
                        tt.setAttribute('tabIndex', tt.getAttribute('old_tabIndex'));
                        tt.dataArray = null;
                        tt.updateCounter();
                        return false;
                    }
                    else
                    {
                        tt.focus();
//                      tt.onkeypress(e);
                    }
                }
            cell.onclick = function (e)
                {
                    tt.value = this.innerHTML;
                    var zz = document.getElementById('helper_main_tab');
                    tt.parentNode.removeChild(zz);
                    tt.focus();
                    tt.setAttribute('tabIndex', tt.getAttribute('old_tabIndex'));
                    tt.dataArray = null;
                    tt.updateCounter();
                    return false;
                }

            row.appendChild(cell);
            ftBody.appendChild(row);
        }
        fTable.appendChild(ftBody);
        tt.parentNode.appendChild(fTable);
    }
//  alert(cell_couner);
}

function xfControlUpdate()
{
    if (this.getAttribute('data_to'))
    {
        var data = new Array();
        data[(this.name?this.name:this.id)] = this.value;
//      AJAXPostData('/_log.php', data);
        AJAXPostData(this.getAttribute('data_to'), data);
    }
}

function xfControlFill()
{
    if (this.tagName == 'SELECT')
    {
        this.options.length = 0;
        var newOpt = new Option('Loading...', '-1', 1, 1);
        this.options[0] = newOpt
        this.disabled = true;
    }
    else if (this.tagName == 'INPUT')
    {
        this.value = 'Loading...';
        this.disabled = true;
    }
    else if (this.tagName == 'SPAN')
    {
        this.innerHTML = 'Loading...';
    }
    else if (this.tagName == 'DIV')
    {
        this.style.width = '100%';
//      this.style.height = '50px';
        this.align = 'left';

//      this.innerHTML = 'Loading...';
//      this.style.textAlign='center';
    }

//  AJAXGetData(this.getAttribute('data_from'));
    if (this.getAttribute('searchgroup'))
        tt = xControlGetArraySearchGroup(this.getAttribute('searchgroup'));
    else
        var tt = [];

    tt['id'] = this.id;
    AJAXPostData(this.getAttribute('data_from'), tt);
}

function xFillSelect()
//      arguments[0] - selectID
//      arguments[1] - fillFrom
//      arguments[2] - Selected ID
{
    var tt = document.getElementById(arguments[0]);
    var sel;

    if (tt)
    {
        tt.options.length = 0;
        for (key in arguments[1])
        {
            var newOpt = new Option(arguments[1][key], key,1,1);
            tt.options[tt.options.length] = newOpt
            if ((arguments[2] == key) || (tt.getAttribute('selectedId') == key))
            {
                sel = tt.options.length - 1;
            }
        }

        if (!LockData)
            tt.disabled = false;
        tt.setAttribute('oldStatus', false);

        if (sel)
            tt.selectedIndex = sel;
        else
            tt.selectedIndex = 0;

        var qq = tt.getAttribute('onfilled');
        if (qq)
            eval(qq);
    }
    else if (debug)
    {
        alert('Error: Route xFillSelect - selectID not found in document.');
    }
}

function xFillInput()
//      arguments[0] - selectID
//      arguments[1] - fillFrom
{
    var tt = document.getElementById(arguments[0]);

    if (tt)
    {
        tt.value = arguments[1];
        tt.disabled = null;
    }
    else if (debug)
    {
        alert('Error: Route xFillInput - selectID not found in document.');
    }
}

//                          GRID


function xFillGrid()
//      arguments[0] - gridID
//      arguments[1] - fillFrom
//      arguments[2] - paging
{
    var fTable, ftBody, row, cell, inp, lnk, btn, div, img, filters, no_filter;
    var tt = document.getElementById(arguments[0]);

    tt.innerHTML = '';
    tt.style.height='';
    
/* create buttons */
    div = document.createElement('DIV');
    div.width = '100%';
    div.style.height='30px';
    fTable = document.createElement("TABLE");
    fTable.id = 'grid_buttons_tbl_'+arguments[0];
    fTable.border = 0;
    fTable.align = 'left';
    fTable.cellSpacing = 5;
    fTable.cellPadding = 0;
    ftBody = document.createElement("TBODY");
    fTable.appendChild(ftBody);
    row = document.createElement("TR");
    ftBody.appendChild(row);
    /*save button*/
    cell = document.createElement("TD");
    row.appendChild(cell);
    btn = document.createElement('INPUT');
    btn.className = 'rowButton';
    btn.type = 'BUTTON';
    btn.setAttribute('grid_id', arguments[0]);
    btn.value = 'Save';
    btn.onclick = grid_save;
    cell.appendChild(btn);
    /*cancel button*/
    cell = document.createElement("TD");
    row.appendChild(cell);
    btn = document.createElement('INPUT');
    btn.className = 'rowButton';
    btn.type = 'BUTTON';
    btn.setAttribute('grid_id', arguments[0]);
    btn.value = 'Cancel';
    btn.onclick = grid_cancel;
    cell.appendChild(btn);
    /*filter button*/
    cell = document.createElement("TD");
    row.appendChild(cell);
    btn = document.createElement('INPUT');
    btn.className = 'rowButton';
    btn.type = 'BUTTON';
    btn.setAttribute('grid_id', arguments[0]);
    btn.value = 'Filter';
    btn.onclick = grid_filter;
    cell.appendChild(btn);

    div.appendChild(fTable);
    tt.appendChild(div);

    
    
/* create grid paging */        
    if (arguments[2]['num_pages'] > 0)
    {
        fTable = document.createElement("TABLE");
        fTable.id = 'grid_paging_tbl_'+arguments[0];
        fTable.border = 0;
        fTable.align = 'left';
        fTable.className = 'grid_paging';
        fTable.cellSpacing = 0;
        fTable.cellPadding = 5;

        ftBody = document.createElement("TBODY");

        fTable.appendChild(ftBody);

        row = document.createElement("TR");
        ftBody.appendChild(row);

        if (arguments[2]['pages'][0]['number'] != 1)
        {
            cell = document.createElement("TD");
            row.appendChild(cell);
            lnk = document.createElement("A");
            lnk.setAttribute('grid_id', arguments[0]);
            lnk.setAttribute('page_number',1);
            lnk.onclick = grid_change_paging;
            lnk.innerHTML = '1';
            cell.appendChild(lnk);


            cell = document.createElement("TD");
            row.appendChild(cell);
            cell.innerHTML = '...';
        }
        
        for (p in arguments[2]['pages'])
        {
            cell = document.createElement("TD");
            row.appendChild(cell);
            
            if (arguments[2]['pages'][p]['current'] == 1)
            {
                cell.innerHTML = arguments[2]['pages'][p]['number'];
            }
            else
            {
                lnk = document.createElement("A");
                lnk.setAttribute('grid_id', arguments[0]);
                lnk.setAttribute('page_number',arguments[2]['pages'][p]['number']);
                lnk.onclick = grid_change_paging;
                lnk.innerHTML = arguments[2]['pages'][p]['number'];
                cell.appendChild(lnk);
            }
        }

        if (arguments[2]['pages'][p]['number'] != arguments[2]['num_pages'])
        {
            cell = document.createElement("TD");
            row.appendChild(cell);
            cell.innerHTML = '...';

            cell = document.createElement("TD");
            row.appendChild(cell);
            lnk = document.createElement("A");
            lnk.setAttribute('grid_id', arguments[0]);
            lnk.setAttribute('page_number',arguments[2]['num_pages']);
            lnk.onclick = grid_change_paging;
            lnk.innerHTML = arguments[2]['num_pages'];
            cell.appendChild(lnk);
        }

        tt.appendChild(fTable);
        var br = document.createElement('BR');
        tt.appendChild(br);
        var br = document.createElement('BR');
        tt.appendChild(br);

    }

    
/* create grid */   

    if (tt)
    {
        fTable = document.createElement("TABLE");
        fTable.width='100%';
        fTable.style.backgroundColor = 'white';
        fTable.id = 'grid_main_tbl_'+arguments[0];
        fTable.border = 0;
        fTable.align = 'left';
        fTable.className = 'grid_tbl';
        fTable.cellSpacing = 0;
        fTable.cellPadding = 0;
        fTable.style.padding = 0;

        ftBody = document.createElement("TBODY");

        fTable.appendChild(ftBody);
/* create grid header */    
        for (i in arguments[1])
        {
            row = document.createElement("TR");
            for (ii in arguments[1][i])
            {
                cell = document.createElement("TH");
                cell.style.fontSize = '10px';
                lnk = document.createElement("A");
                lnk.setAttribute('grid_id', arguments[0]);
                lnk.setAttribute('order_by',ii);
                if (ii == 'id')
                {
                    cell.style.width = '50px';
                }
                if (tt.getAttribute('order_by') == ii)
                {
                    var ord = tt.getAttribute('order');
                    lnk.setAttribute('order', ord);
                    if (ord == 'asc')
                        ii = ii + '&nbsp;<img src="/admin/images/arrow_down.gif">';
                    else
                        ii = ii + '&nbsp;<img src="/admin/images/arrow_up.gif">';
                    
                    
                }
                lnk.onclick = grid_change_sorting;
                lnk.innerHTML = ii;
                cell.appendChild(lnk);
                cell.style.textAlign = "center";
                row.appendChild(cell);
            }
            ftBody.appendChild(row);
            break;
        }
/* create grid filter */
        for (i in arguments[1])
        {
            row = document.createElement("TR");
            row.id = 'grid_filter_' + arguments[0];
            row.style.display = 'none';
            no_filter = 'false';
            
            try{
                eval('filters=grid_filter_'+arguments[0]+';');
            }
            catch(e){no_filter = 'true';};
            for (ii in arguments[1][i])
            {
                

                var fTable1 = document.createElement("TABLE");
                fTable1.border = 0;
                fTable1.width='100%';
                fTable1.cellSpacing = 0;
                fTable1.cellPadding = 0;
                var ftBody1 = document.createElement("TBODY");
                fTable1.appendChild(ftBody1);
                var row1 = document.createElement("TR");
                ftBody1.appendChild(row1);
                var cell1 = document.createElement("TD");
                if (ii == 'id')
                    cell1.style.width="36px";
                else
                    cell1.style.width = '100%';

                cell = document.createElement("TD");

                inp = document.createElement("INPUT");
                
                if (no_filter == 'false')
                    if (filters[ii] != '')
                        inp.value = filters[ii];
            
                inp.id = 'grid_filter_input_' + ii + '_' + arguments[0];
                inp.className = 'grid_input_filter';
                inp.setAttribute('field_name', ii);
                inp.style.width = '100%';
                cell1.appendChild(inp);
                row1.appendChild(cell1);
                var cell1 = document.createElement("TD");
                cell1.style.backgroundColor = '#666666';
//              cell1.style.width="18px";
                img = document.createElement('IMG');
                img.src='/admin/images/applyfilter.gif';
                img.style.border='1px solid black';
                img.style.cursor = 'pointer';
                img.setAttribute('grid_id', arguments[0]);
                img.onclick = grid_apply_filter;
                cell1.appendChild(img);
                row1.appendChild(cell1);
                cell.appendChild(fTable1);
                row.appendChild(cell);
            }
            ftBody.appendChild(row);
            break;
        }   

/* create grid content */   
        for (i in arguments[1])
        {
            row = document.createElement("TR");
            for (ii in arguments[1][i])
            {
                cell = document.createElement("TD");
                inp = document.createElement("INPUT");
                inp.style.width = '100%';
                inp.value = arguments[1][i][ii];
                inp.setAttribute('original_value', arguments[1][i][ii]);
                inp.className = 'grid_input';
                inp.onkeyup = grid_input_check_for_changes;
                inp.setAttribute('field_name', ii);
                if (ii == 'id')
                {
                    inp.readOnly = true;
                    inp.style.width = '55px';
                }
                cell.appendChild(inp);
                row.appendChild(cell);
            }
            ftBody.appendChild(row);
        }
        tt.appendChild(fTable);
    }
    else if (debug)
    {
        alert('Error: Route xFillGrid - selectID not found in document.');
    }
}

function grid_change_paging()
{
//  alert('1');
    var grid_id, grid, data_from, page, params, order_by, filters;
    grid_id = this.getAttribute('grid_id');
    grid = document.getElementById(grid_id);

    data_from = grid.getAttribute('data_from');
    page = this.getAttribute('page_number');
    grid.setAttribute('page_number',  page);
    order_by = grid.getAttribute('order_by');
    order = grid.getAttribute('order');
    
    params =  new Array();
    params['id'] = grid_id;
    
    if (page)
        params['p'] = page;
    if (order_by)
        params['order_by'] = order_by;
    if (order)
        params['order'] = order;

    try{
        eval('filters=grid_filter_'+grid_id+';');
        params['filters'] = filters;
    }catch(e){};
    
    AJAXPostData(data_from, params);
}

function grid_change_sorting()
{
    var grid_id, grid, data_from, order_by, params, order, page, filters;
    grid_id = this.getAttribute('grid_id');
    grid = document.getElementById(grid_id);
    data_from = grid.getAttribute('data_from');
    order_by = this.getAttribute('order_by');
    grid.setAttribute('order_by',order_by);
    page = grid.getAttribute('page_number');
    
    if (!this.getAttribute('order'))
    {
        this.setAttribute('order', 'asc');
        order = 'asc';
    }
    else
    {
        order = this.getAttribute('order');
        if (order == 'asc')
            order = 'desc';
        else 
            order = 'asc';
    }
    grid.setAttribute('order',order);
    params =  new Array();
    params['p'] = page;
    params['id'] = grid_id;
    params['order_by'] = order_by;
    params['order'] = order;
    try{
    eval('filters=grid_filter_'+grid_id+';');
    params['filters'] = filters;
    }catch(e){};
    AJAXPostData(data_from, params);
}

function grid_input_check_for_changes()
{
    if (this.value != this.getAttribute('original_value'))
    {
        this.className = 'grid_input_changed';
    }
    else
    {
        this.className = 'grid_input';
    }
}

function grid_save()
{
//  a[id][fieldname] = value;

    var grid_table, grid_id, tds, params, data_to, params_data, grid, filters;
    grid_id = this.getAttribute('grid_id');
    grid = document.getElementById(grid_id);
    grid_table = document.getElementById('grid_main_tbl_'+grid_id);
    tds = grid_table.getElementsByTagName('INPUT');
    params_data = new Array();
    for (var i=0; i<tds.length; i++)
    {
        if (tds[i].value != tds[i].getAttribute('original_value'))
        {
            if (!params_data[tds[i].parentNode.parentNode.firstChild.firstChild.value])
            {
                params_data[tds[i].parentNode.parentNode.firstChild.firstChild.value] = new Array();
            };
            params_data[tds[i].parentNode.parentNode.firstChild.firstChild.value][tds[i].getAttribute('field_name')] = tds[i].value;
        }
    }
    data_to = grid.getAttribute('data_to');
    page = grid.getAttribute('page_number');
    order_by = grid.getAttribute('order_by');
    order = grid.getAttribute('order');

    
    params =  new Array();
    
    params['id'] = grid_id;
    
    if (page)
        params['p'] = page;
    if (order_by)
        params['order_by'] = order_by;
    if (order)
        params['order'] = order;
    try{
    eval('filters=grid_filter_'+grid_id+';');
    params['filters'] = filters;
    }catch(e){};
    params['update_data'] = params_data;
//  alert(params['update_data'][2]['master']);

    AJAXPostData(data_to, params);
    
}

function grid_cancel()
{
    var grid_table, grid_id, tds;
    grid_id = this.getAttribute('grid_id');
    grid_table = document.getElementById('grid_main_tbl_'+grid_id);
    tds = grid_table.getElementsByTagName('INPUT');
    for (var i=0; i<tds.length; i++)
    {
        tds[i].value = tds[i].getAttribute('original_value');
        tds[i].className = 'grid_input';
    }

}

function grid_filter()
{
    var grid_id, filter_row;
    grid_id = this.getAttribute('grid_id');
    filter_row = document.getElementById('grid_filter_'+grid_id);
    if (filter_row.style.display == 'none')
        filter_row.style.display = '';
    else
        filter_row.style.display = 'none';
}

function grid_apply_filter()
{
    var inp, grid_id, field_name, grid, filters, params_data, data_from;
    grid_id = this.getAttribute('grid_id');
    grid = document.getElementById(grid_id);
    data_from = grid.getAttribute('data_from');
    grid_table = document.getElementById('grid_main_tbl_'+grid_id);
    filters = grid_table.getElementsByTagName('INPUT');
    
    params_data = new Array();
    
    for (var i=0; i<filters.length; i++)
        if (filters[i].className == 'grid_input_filter')
    {
            params_data[filters[i].getAttribute('field_name')] = filters[i].value;
    }

//  alert(params_data['master']);
    
    alert('grid_filter_' + grid_id + '=params_data;');
    eval('grid_filter_' + grid_id + '=params_data;');
    
    
    data_to = grid.getAttribute('data_to');
    page = grid.getAttribute('page_number');
    order_by = grid.getAttribute('order_by');
    order = grid.getAttribute('order');
    eval('filters1=grid_filter_'+grid_id+';');

    params =  new Array();
    
    params['id'] = grid_id;
    
    if (page)
        params['p'] = page;
    if (order_by)
        params['order_by'] = order_by;
    if (order)
        params['order'] = order;
    params['filters'] = filters;
//  alert(params['filters']['master']);

    AJAXPostData(data_from, params);
}

//                          /GRID


function LockControls()
{
    var c;

    LockData = arguments[0];

    if (arguments[1])
        LockElement = arguments[1];
    else
        LockElement = document.body;

    if (LockData)
        LockElement.className = "lockContent";
    else
        LockElement.className = "";

    c = LockElement.getElementsByTagName('INPUT');
    for (var i=0; i<c.length; i++)
    {
        if (LockData)
        {
            c[i].setAttribute('oldStatus', c[i].getAttribute('disabled'));
            c[i].setAttribute('disabled', true);
        }
        else
        {
            c[i].disabled = c[i].getAttribute('oldStatus');
        }
    }

    c = LockElement.getElementsByTagName('SELECT');
    for (var i=0; i<c.length; i++)
    {
        if (LockData)
        {
            c[i].setAttribute('oldStatus', c[i].getAttribute('disabled'));
            c[i].setAttribute('disabled', true);
        }
        else
        {
            c[i].disabled = c[i].getAttribute('oldStatus');
        }
    }

    c = LockElement.getElementsByTagName('TEXTAREA');
    for (var i=0; i<c.length; i++)
    {
        if (LockData)
        {
            c[i].setAttribute('oldStatus', c[i].getAttribute('disabled'));
            c[i].setAttribute('disabled', true);
        }
        else
        {
            c[i].disabled = c[i].getAttribute('oldStatus');
        }
    }
}

function hide_ajax_message()
{
    var el = document.getElementById('show_message_div');
    el.style.display = 'none';
}

function show_ajax_message()
{
    var el, text;

    if (arguments[0])
        text = arguments[0];
    else
        text = 'DATA PROCESSING...';

    if (document.getElementById('show_message_div'))
    {
        el = document.getElementById('show_message_div');
    }
    else
    {
        el = document.createElement('DIV');
        el.id = 'show_message_div';
//!!!!!!!!!!!!!!!
        document.body.appendChild(el);
//!!!!!!!!!!!!!!!
    }


    el.innerHTML = text;
    el.style.top = document.body.scrollTop;

    el.style.display = '';
}

function get_top(el)
{
    var top = 0;
    try {top += el.offsetTop;} catch (e) {}
    if (el.tagName != 'BODY')
        top += get_top(el.offsetParent);
    return top;
}

function get_left(el)
{
    var left = 0;
    try {left += el.offsetLeft;} catch (e) {}
    if (el.tagName != 'BODY')
        left += get_left(el.offsetParent);
    return left;
}


///////////////                         STARTS

function change_stars()
{
    if (!LockData)
    {
        n = arguments[0];
        if (!n)
        {
            var tt = document.getElementById((arguments[1]?arguments[1]:'Stars'));
            n = tt.value;
        }

        if (arguments[0] == -1)
            n=0

        var i=1;
        for (i=5; i>n; i--)
            document.getElementById('show_start_'+i).src = '/admin/images/stars/star.gif';

        for (i=1; i<=n; i++)
            document.getElementById('show_start_'+i).src = '/admin/images/stars/star_.gif';
    }
}

function fix_star(n)
{
    if (!LockData)
    {
        var tt = document.getElementById((arguments[1]?arguments[1]:'Stars'));
        if (n > 0)
        {
            tt.value = n;
            if (tt.getAttribute('searchgroup'))
            {
                tt.updateCounter();
            }
        }
        else
        {
            tt.value = '';
            if (tt.getAttribute('searchgroup'))
            {
                tt.updateCounter();
            }
        }
    }
}
///////////////                         /STARTS

function open_pic(name)
{
    window.open('/openimage.php?img=' + name + '&loaded=0', 'pre_image', 'toolbar=0,menubar=0,personalbar=0,scrollbars=0,status=0,location=0,resizable=0,width=200,height=100');
}



