﻿var Params=
{   NullText: '!',
    namesQuerry: new Array(),
    paramsQuerry:  new Array(), 
    name_of_started_array_in_paramsGet: [],
    error: [],
    nullFields: false,
    nullCheckbox: [],
    params: function(fields, GetSet)
    {   if(GetSet.toLowerCase()=='get')
        {   this.error = [];
            this.nullCheckbox = [];
        this.nullFields = [];
            Params.paramsQuerry = [];
            Params.namesQuerry = [];
            this.paramsGet(fields);
            var errorText = '';
            if(this.nullFields.length>0) errorText += 'לא מילאת את כל השדות.' + '\n' + 'שדות חובה מוסמנים באדום.';
            var eC = this.error.length, eB = this.nullCheckbox.length;
            if(eC>0) errorText += (errorText!=''?'\n\n':'') + 'התקבלו שגיאות:';
            for(var i=0;i<eC;i++) errorText += '\n' + this.error[i];
            if(eB>0) errorText += (errorText!=''?'\n\n':'') + 'לא ניתן לשלוח בקשה זו...';
            for(var i=0;i<eB;i++) errorText += '\n' + this.nullCheckbox[i];
            if(errorText=='') errorText = false;
            return errorText;
        }
        else if(GetSet.toLowerCase()=='set')
        {   
            this.paramsSet(fields, null);
        }
        return false;
    },
    setField: function(node, parent, N)
    {   var name = node.attr.name ? node.attr.name : null;
        if(N && N>0 && name) name += '_' + N;
        var descr = node.attr.description;
        if(!descr) descr = parent ? parent.attr.description : "";
        if(name && $(name))
        {   var c = Params.namesQuerry.length;
            
            {   var v = '';
                for(var i=0;i<c;i++) if(Params.namesQuerry[i]==name) { v = Params.paramsQuerry[i].replace(/{%2E}/,',');break;}
                if($(name) && name!='City')
                {   if($(name+'_input') && !name.match(/Location/))
                    {   var arrName = name;
                            if(name.match(/DateD$/)) arrName = 'Days';
                            else if(name.match(/DateM$/)) arrName = 'Months';
                            else if(name.match(/DateY$/)) arrName = 'Years';
                            else if(name.match(/DateTH$/)) arrName = 'Hours';
                            else if(name.match(/DateTM$/)) arrName = 'Minutes';
                            else if(name.match(/RoomInfantCount/)) arrName = 'RoomInfantCount';
                            else if(name.match(/RoomsCount/)) arrName = 'Rooms';
                            else if(name.match(/RoomInfantAge/)) arrName = 'InfantAge';
                            
                        if(v=='')
                        {   if(eval('default_opts.'+name) || eval('default_opts.'+name)==0) v = eval('default_opts.'+name);
                            if($(name+'_input')) $(name+'_input').value = v;
                            try { $(name).value = Selects.getOptionValue(Selects.getArrayByName(arrName), v);}catch(exp){$(name).value = v;}
                        }
                        else
                        {   $(name).value = v;
                            if($(name+'_input')) try {$(name+'_input').value = Selects.getOptionText(Selects.getArrayByName(arrName), v);}catch(exp){$(name+'_input').value = v}
                        }
                        if ($(name+'_input').value.match(/[א-ת]/))$(name+'_input').style.direction = 'rtl';
                        else $(name+'_input').style.direction = 'ltr';
                    }
                    else $(name).value = v;
                }
            }
            if(node.attr.onkeyupfunct) 
            {   if(node.attr.focusOn) $(node.attr.focusOn).onkeyup = node.attr.onkeyupfunct;
                else if($(name+'_input'))$(name+'_input').onkeyup = node.attr.onkeyupfunct;
                else if($(name))$(name).onkeyup = node.attr.onkeyupfunct;
            }
            if(node.attr.maxlength)
            {   if(node.attr.focusOn) $(node.attr.focusOn).setAttribute('maxLength', node.attr.maxlength);
                else if($(name+'_input'))$(name+'_input').setAttribute('maxLength', node.attr.maxlength);
                else if($(name)) $(name).setAttribute('maxLength', node.attr.maxlength);
            }
            if(descr)
            {   descr = descr.replace(/%20/g,'&nbsp;');
                if($(name+'_text')) $(name+'_text').innerHTML = descr;
                else if(parent && $(parent.attr.name+'_text')) $(parent.attr.name+'_text').innerHTML = descr;
            }
        }
    },
    setArray: function(node, parent)
    {   var N=1;
        var count = node.childes.length;
        var id = -1;
        for(var i=0;i<count;i++)
        {   if(node.childes[i].name=='field')
            {   id = i;
                break;
            }
        }
        while(count>0 && id>=0 && $(node.childes[id].attr.name+'_'+N))
        {   this.paramsSet(node.childes,node, N);
            N++;
        }
    },
    setElem: function(node, parent)
    {   return false;
    },
    Sorting: function(node, parent, N)
    {   if(node.name=='field')this.setField(node, parent, N);
        else if(node.name=='elem' || node.name=='info') this.setElem(node, parent, N);
        else if(node.name=='array')this.setArray(node, parent, N);
        if(node.childes && node.childes.length>0) this.paramsSet(node.childes, node, N);
        return false;
    },
    paramsSet: function(fields, parent, N)
    {   if(!parent || parent.name!='array') N = -1;
        for(var i=fields.length-1;i>=0;i--)
        {   this.Sorting(fields[i], parent, N);
        }
        return false;
    },
    paramsGet: function(fields, parent, N)
    {   if(!parent || parent.name!='array') N = -1;
        for(var i=fields.length-1;i>=0;i--)
        {        if(fields[i].name=='field')this.GetField(fields[i], parent, N);
            else if(fields[i].name=='elem') this.GetElem (fields[i], parent, N, 'ROWS');
            else if(fields[i].name=='info') this.GetElem (fields[i], parent, N, 'INFO');
            else if(fields[i].name=='array')this.GetArray(fields[i], parent, N);
            if(fields[i].childes && fields[i].childes.length>0 && fields[i].name!='array') this.paramsGet(fields[i].childes, fields[i], N);
        }
        return false;
    },
    GetArray: function(node, parent)
    {   var N=1; var count = 0;
        if(node.childes && node.childes.length>0)
        {   if(node.childes[0].name=='elem' || node.childes[0].name=='info')
            try
            {   if(node.childes[0].name=='elem') ArrName = 'ROWS';
                else if(node.childes[0].name=='info') ArrName = 'INFO';
                var sub = node.attr.sub ? eval(node.attr.sub) : '';
                var j=Choice.filter_Id_func(node.childes[0].attr.name, eval(ArrName+'_src')); 
                count = eval(ArrName + (ArrName!='ROWS'?'':'[0]')+'['+j+']'+sub).length;
            }catch(ex){}
            while($(node.childes[N-1].attr.name+'_'+N) || (count>0 && N<=count))
            {   this.paramsGet(node.childes,node, N);
                N++;
            }
        }
    },
    GetElem: function(node, parent, N, ArrName)
    {   var name = node.attr.name ? node.attr.name : null;
        if(name)
        {   var param = '';
            try
            {   var sub = node.attr.sub ? node.attr.sub.toString() : '';
                var j = Choice.filter_Id_func(node.attr.name, eval(ArrName+'_src'));
                sub = sub + (N>0 ? '['+(N-1)+']':'');
                param = eval(ArrName + (ArrName!='ROWS'?'':'[0]')+'['+j+']'+sub);
            }catch(ex){}
            if(N>0) name += '_' + N;
            this.param_add(parent, node, param, N);
        }
    },
    GetField: function(node, parent, N)
    {   var name = node.attr.name ? node.attr.name : null;
        if(name)
        {   if(N>0) name += '_' + N;
            if($(name)) this.param_add(parent, node, $(name).value, N);
        }
    },/*
    paramsGet: function(fields)
    {   var params = '';
        var x = fields.length;
        for(var i=0;i<x;i++)
        {   var param = '';
            if(fields[i].name=='field')
            {   param = this.param(fields[i]);
            }
            else if(fields[i].name=='array')
            {   if(fields[i].childes.length>0)
                {   this.array(fields[i]);
                }
            }
            else if(fields[i].name=='elem')
            {   var sub = fields[i].sub && fields[i].sub!='' ? eval(fields[i].sub) : -1;
                try{ var j=Choice.filter_Id_func(fields[i].attr.name); param = sub>=0 ? ROWS[0][j][sub] : ROWS[0][j];}catch(ex){}
                if(fields[i].childes && fields[i].childes.length>0) param = this.param(fields[i]);
                else param = this.param_add(null,fields[i],param);
            }
            else if(fields[i].name=='info')
            {   try{param = INFO[Choice.filter_Id_func(fields[i].attr.name, INFO_src)];}catch(ex){}
                //alert(fields[i].attr.name + '\n' + info + '\n' + info_src]);
                param = this.param_add(null,fields[i],param);
            }
        }
        this.is_was_some_params_before = true;
        return false;
    },
    array: function(fields,arr)
    {   var count = fields.childes.length;
        for(var i=0;i<count;i++)
        {   var N=1;
            while($(fields.childes[i].attr.name+'_'+N))
            {   this.param_add(fields, fields.childes[i], $(fields.childes[i].attr.name+'_'+N).value, N);
                N++;
            }
        }
    },
    param: function(node)
    {   var param = '';
        if(node.name!='field' && node.childes.length>0)
        {   for(var j=node.childes.length-1;j>=0;j--)
            {   if($(node.childes[j].attr.name))param = ''+$(node.childes[j].attr.name).value;
                param = this.param_add(node, node.childes[j],param);
            }
        }
        else if(node.name=='field')
        {   param = $(node.attr.name) ? $(node.attr.name).value : "";
            param = this.param_add(null, node, param);
            if(node.childes && node.childes.length>0)this.paramsGet(node.childes);
        }
        return false;
    },*/
    param_add: function(parent,node,param, N)
    {   var name = node.attr.name;
        if(N>0) name += '_'+N;
        param = this.test(node, param, parent, N, name);
        if(param!=null)
        {   if($(name)) $(name).value = param;
            this.namesQuerry[this.namesQuerry.length] = name;
            try{param = param.replace(/,/g,'{%2E}');}catch(ex){}
            this.paramsQuerry[this.paramsQuerry.length] = param;
        }
        return false;
    },
    test:function(node, param, parent, N)
    {   var descr = node.attr.description && node.attr.description!='' ? node.attr.description : (parent && parent.attr.description ?parent.attr.description:null);
        if(!descr) descr = node.attr.name;
        var elemName = node.attr.focuson ? node.attr.focuson : node.attr.name;
        name = node.attr.name;
        if(node.attr.validelem) name = node.attr.validelem;
        else if(!node.attr.description) name = parent && parent.attr.name ? parent.attr.name : name;
        if(N>0)
        {   elemName += '_' + N;
            name += '_' + N;
        }
        param = this.param_funct(elemName, node.attr.funct , param);
        if((!node.attr.allownull || node.attr.allownull!='true') && (!this.param_funct(elemName, node.attr.allownullfunct, false)) && (param=='' || param==this.NullText))
        {   this.errorField(name,$(elemName),true);
            if($(elemName))$(elemName).setAttribute('onFocus', 'Params.shureField("'+name+'",this,true)');
            this.nullFields[this.nullFields.length] = elemName;
        }
        else if(!this.param_funct(elemName, node.attr.errorfunct, true))
        {   this.errorField(name,$(elemName));
            if($(elemName))$(elemName).setAttribute('onFocus', 'Params.shureField("'+name+'",this)');
            if($(elemName) && $(elemName).type=='checkbox') this.nullCheckbox[this.nullCheckbox.length] = node.attr.error ? node.attr.error : '';
            else this.error[this.error.length] = node.attr.error ? node.attr.error : '';
        }
        //if(this.error.length>0 || this.nullCheckbox.length>0) return null;
        return param;
    },
    param_funct: function(name, funct, defaultRet)
    {   var elem = $(name) ? $(name) : null;
        if(funct && funct!='') 
        {   return funct(elem);
        }
        return defaultRet;
    },
    shureField:function(name,elem,isNull)
    {   if($(name+'_text') && $(name+'_text').style) $(name+'_text').style.color = '';
        if(elem)
        {   if($(elem.id+'_input')) elem = $(elem.id+'_input');
            if(elem)
            {   if(isNull) elem.value = '';
                if(elem.style)
                {   elem.style.color = '';
                    elem.style.fontWeight = '';
                }
            }
        }
    },
    errorField:function(name,elem,isNull)
    {   if($(name+'_text')) $(name+'_text').style.color = 'red';
        if(elem)
        {   if($(elem.id+'_input')) elem = $(elem.id+'_input');
            if(elem)
            {   if(isNull) elem.value = this.NullText;
                elem.style.color = 'red';
                if(isNull) elem.style.fontWeight = 'bold';
            }
        }
    }
};
