﻿var Selects = 
{   ArraysNames: ['Locations'],
    Arrays: Array(),
    getArrayByName: function(arrayName)
    {   for(var i=Selects.ArraysNames.length-1;i>=0;i--)
        {   if(Selects.ArraysNames[i]==arrayName)
            {   return Selects.Arrays[i];
            }
        }
        return null;
    },
    getOptionText: function(array, value)
    {   for(var i=array.length-1;i>=0;i--)
        {   if(array[i].value==value)
            {   return array[i].text;
            }
        }
        return '';
    },
    getOptionValue: function(array, text)
    {   for(var i=array.length-1;i>=0;i--)
        {   if(array[i].text==text)
            {   return array[i].value;
            }
        }
        return '';
    },
    AutoFill:'',
    loadSelects:
    {   load: function(elem, arrayName, addToSelect, postAct, load_anyway, defaultOption, deleteOptions, manualement,loadAuto,ClearOnClick)
        {   var load = true,path = '';
            if(location.href.match(/\/admin\//))path='../';
            if(loadAuto)
            {   if($(elem.id+'_input').value.length>2){load_anyway = true;addToSelect = true;}
                else 
                {   load = false;
                    $(elem.id+'_input').onkeyup = function(event)
                    {   if($(elem.id+'_input').value.length>2)
                        Selects.loadSelects.load(elem, arrayName, true, postAct, true, defaultOption, true, true,true,ClearOnClick)
                    };
                }
            }
            if(load)
            {   var v = $(elem.id+'_input').value;
                if (v.match(/[א-ת]/))$(elem.id+'_input').style.direction = 'rtl';
                else $(elem.id+'_input').style.direction = 'ltr';
                if((!Selects.getArrayByName(arrayName) || load_anyway && (!loadAuto||v.length>2)) && v.indexOf(this.AutoFill)==-1)
                ajax_cached(path+'ajax/Selects.aspx', 
                            'i=' + arrayName + (loadAuto?'&v='+(v.length>3?v.substring(0,3):v):''), 
                            this.on_done_load, 
                            this.on_error_load,{ClearOnClick:ClearOnClick, loadAuto:loadAuto,elem: elem, arrayName: arrayName, postAct: postAct, addToSelect: addToSelect, defaultOption: defaultOption, deleteOptions: deleteOptions, manualement: manualement,load_anyway:load_anyway},false,new Date());
                else if(addToSelect && Selects.getArrayByName(arrayName)) Selects.addOptions(elem, arrayName, postAct, defaultOption, deleteOptions, manualement, load_anyway,ClearOnClick);
                this.AutoFill = v;
            }
        },
        on_done_load: function(response,Obj)
        {   var r = eval(response);var i=-1;
            
            if(r.table.length>0)
            {   for(i=Selects.ArraysNames.length-1;i>=0;i--)
                {   if(Selects.ArraysNames[i]==Obj.arrayName)break;
                }
                if(i<0 || Obj.load_anyway)
                {   if(i<0) i=Selects.ArraysNames.length;
                    Selects.Arrays[i] = r.table;
                    Selects.ArraysNames[i] = Obj.arrayName;
                }
                if(Obj.addToSelect) Selects.addOptions(Obj.elem, Obj.arrayName, Obj.postAct, Obj.defaultOption, Obj.deleteOptions, Obj.manualement, Obj.loadAuto, Obj.ClearOnClick);
                else if(Obj.postAct) Obj.postAct(Obj.elem, Obj.arrayName);
            }
        },
        on_error_load: function(response,Obj)
        {   var arrayName = Obj.arrayName;
            alert('error loading ' + arrayName + '<br />' + response);
        }
    },
    addOptions: function(elem, arrayName, postAct, defaultOption, deleteOptions, manualement, loadAuto, ClearOnClick)
    {   array = this.getArrayByName(arrayName);
        if(elem && (array||loadAuto))
        {   if(manualement)
            {   if(deleteOptions) $(elem.id+'_list').innerHTML = '';
                if(elem.childNodes.length==0 && array.length>1&&defaultOption) this.addManualOption(elem, '', defaultOption!='' && defaultOption.replace ? defaultOption : 'בחר');
                if(array.length<2 && !loadAuto)
                {   elem.value = array[0].value;
                    if($(elem.id+'_input'))
                    {   $(elem.id+'_input').value = array[0].text;
                        $(elem.id+'_input').setAttribute('readOnly',true);
                        $(elem.id+'_input').setAttribute('autocomplete','off');
                    }
                }
                else
                {   if(arrayName=='Countries')alert(array.length);
                    for(var i=0; i<array.length; i++)
                    {    
                        this.addManualOption(elem, array[i].value, array[i].text, arrayName);
                    }
                    if(arrayName=='Countries')alert(array.length);
                    var AutoFill = true;
                    if(arrayName.indexOf('Country')!=-1 || arrayName.indexOf('Location')!=-1 || ClearOnClick) AutoFill = false;
                    //$(elem.id+'_input').setAttribute('autocomplete','off')
                    Selects.Edit.defaultOption = defaultOption;
                    $(elem.id+'_input').removeAttribute('readOnly');
                    
                    $(elem.id+'_input').onclick = function(event){Selects.Edit.show_hide_list(elem.id, arrayName, event, AutoFill,loadAuto);addWheelEvent();};
                    
                    $(elem.id+'_input').onblur = function(event){if(Selects.Edit.OUT){Selects.Edit.show_hide_list(elem.id, arrayName, event, true, loadAuto);}};
                    
                    $(elem.id+'_input').onmouseover = function(){if(Selects.Edit.FOCUS)addWheelEvent();else {$(elem.id+'_input').setAttribute('autocomplete','off');}};
                    $(elem.id+'_input').onmouseout = function(){delWheelEvent();$(elem.id+'_input').setAttribute('autocomplete','on');};
                    
                    $(elem.id+'_list').onmouseover = function(){Selects.Edit.OUT=false;};
                    $(elem.id+'_list').onmouseout = function(){Selects.Edit.OUT=true;};
                    
                    if($(elem.id+'_link'))$(elem.id+'_link').onmouseover = function(){Selects.Edit.OUT=false;};
                    if($(elem.id+'_link'))$(elem.id+'_link').onmouseout = function(){Selects.Edit.OUT=true; };
                    if($(elem.id+'_link'))$(elem.id+'_link').onclick = function(event){Selects.Edit.show_hide_list(elem.id, arrayName,event,true,loadAuto);};
                    
                    if(navigator.userAgent.indexOf('IE')!=-1)
                    {   $(elem.id+'_input').onclick = function(){Selects.Edit.show_hide_list(elem.id, arrayName, event, AutoFill,loadAuto);};
                        $(elem.id+'_input').onblur = function(){if(Selects.Edit.OUT){Selects.Edit.show_hide_list(elem.id, arrayName, event,true,loadAuto);}};
                        if($(elem.id+'_link'))$(elem.id+'_link').onclick = function(){Selects.Edit.show_hide_list(elem.id, arrayName,event,true,loadAuto);};
                    }
                    setSpanHeight(elem.id);
                    if(loadAuto) {$(elem.id+'_input').onclick()}
                }
            }
            else 
            {   if(deleteOptions) this.removeOptions(elem);
                if(elem.length==0 && array.length>1&&defaultOption) this.addOption(elem, '', (defaultOption!='' && defaultOption.replace ? defaultOption :'בחר'));
                for(var i=0; i<array.length; i++)
                {   this.addOption(elem, array[i].value, array[i].text);
                }
            }
        }
        if(postAct) postAct();
    },
    addManualOption: function (obj, value, text, arrayName)
    {  
        var optNew = document.createElement('a');
        optNew.href = 'javascript:void(0)';
        optNew.onclick = function(){f(obj.id,value,arrayName);_onchange(obj.id);};
        optNew.innerHTML = text;
        if (text.match(/[א-ת]/))optNew.style.direction = 'rtl';
        else optNew.style.direction = 'ltr';
        optNew.style.overflow = 'hidden';
        $(obj.id+'_list').appendChild(optNew);
    },
    addOption: function (obj, value, text)
    {   var optNew = document.createElement('option');
        optNew.value = value;
        optNew.text = text;
        try 
        {   obj.add(optNew, null); // standards compliant; doesn't work in IE
        }
        catch(ex) 
        {   obj.add(optNew); // IE only
        }
    },
    removeOptions: function(obj)
    {   var i;
        for (i = obj.length - 1; i>=0; i--) 
        {   obj.remove(i);
        }
    }

};
var SimpleSelects =
{   ArrayLoad: function(ArrayName, min, max)
    {   var array = [];
        if(ArrayName=='Days')
        {   for(var i=1; i<=31; i++)
            {   var v = i<10?'0'+i:i;
                array[array.length]={value:v+'',text:v+''};
            }
        }
        else if(ArrayName=='Months')
        {   for(var i=1; i<=12; i++)
            {   var v = i<10?'0'+i:i;
                array[array.length]={value:v+'',text:DateTime.monthNames[i-1]+''};
            }
        }
        else if(ArrayName=='Years')
        {   var y = DateTime.toDayYear;
            for(var i=y; i<y+5; i++)
            {   array[array.length]={value:i+'',text:i+''};
            }
        }
        else if(ArrayName=='Hours')
        {   for(var i=0; i<24; i++)
            {   var v = i<10?'0'+i:i;
                array[array.length]={value:v+'',text:v+''};
            }
        }
        else if(ArrayName=='Minutes')
        {   for(var i=0; i<60; i+=15)
            {   var v = i<10?'0'+i:i;
                array[array.length]={value:v+'',text:v+''};
            }
        }
        else if(ArrayName=='Months01')
        {   for(var i=1; i<=12; i++)
            {   var v = i<10?'0'+i:i;
                array[array.length]={value:v+'',text:v+''};
            }
        }
        else if(ArrayName=='Years01')
        {   var y = DateTime.toDayYear;
            for(var i=y; i<y+5; i++)
            {   var v = (i+'').substring(2);
                array[array.length]={value:v+'',text:'20'+v+''};
            }
        }
        else if(ArrayName=='Age')
        {   for(var i=18; i<=70; i++)
            {   array[array.length]={value:i+'',text:i+''};
            }
        }
        else if(ArrayName=='CardCode')
        {   array[array.length]={value:'VI',text:'Visa'};
            array[array.length]={value:'MC',text:'Master Card'};
            array[array.length]={value:'AE',text:'American Express'};
        }
        else if(ArrayName=='5')
        {   for(var i=0; i<=5; i++)
            {   array[array.length]={value:i+'',text:i+''};
            }
        }
        else if(ArrayName=='Rooms')
        {   for(var i=1; i<=3; i++)
            {   array[array.length]={value:i+'',text:i+''};
            }
        }
        else if(ArrayName=='Nights')
        {   for(var i=1; i<=30; i++)
            {   array[array.length]={value:i+'',text:i+''};
            }
        }
        else if(ArrayName.indexOf('RoomAdultCount')!=-1)
        {   if(isNaN(parseInt(min))) min = 1;
            if(isNaN(parseInt(max))) max = 4;
            for(var i=min; i<=max; i++)
            {   array[array.length]={value:i+'',text:i+''};
            }
        }
        else if(ArrayName=='RoomInfantCount')
        {   for(var i=0; i<=2; i++)
            {   array[array.length]={value:i+'',text:i+''};
            }
        }
        else if(ArrayName=='InfantAge')
        {   for(var i=0; i<=12; i++)
            {   array[array.length]={value:i+'',text:i+''};
            }
        }
        else if(ArrayName=='PreFix')
        {   array[array.length]={value:'Mr',text:'Mr'};
            array[array.length]={value:'Ms',text:'Ms'};
            array[array.length]={value:'Mrs',text:'Mrs'};
        }
        return array;
    },
    Load: function(elem, arrayName, min,max)
    {   var obj = new Object();
        obj = {table: this.ArrayLoad(arrayName, min, max)}
        Selects.loadSelects.on_done_load(obj,{elem: elem, arrayName: arrayName, postAct: null, addToSelect: true, deleteOptions: true, defaultOption: false, manualement:true,load_anyway:true});
    }
};
function setSpanHeight(id)
{   var maxOnPage = 10;
    var spanHeight = 16;
    var mySpanArr = $(id+'_list').getElementsByTagName('a');
    var length = mySpanArr.length;
    if(length<1)
    {   $(id+'_list').style.height = '0px';
        if(length<1)$(id+'_input').value = '';
        return;
    }
    $(id+'_list').style.height =(length<10?length*spanHeight:maxOnPage*spanHeight) + 'px';
}
Selects.Edit = 
{   OUT: true,
    FOCUS:false,
    Start:function(id, arrayName,loadAuto)
    {   Selects.Edit.id=id;
        Selects.Edit.arrayName=arrayName;
        Selects.Edit.SpanArray = $(Selects.Edit.id+'_list').getElementsByTagName('a');
        $(id+'_input').onkeyup = function(event){Selects.Edit.myFuncB(event, loadAuto);}
        $(id+'_input').onkeydown = function(event){Selects.Edit.myFuncD(event, loadAuto);}
        if(navigator.userAgent.indexOf('IE')!=-1)
        {   $(id+'_input').onkeyup = function(){Selects.Edit.myFuncB(event, loadAuto)};
            $(id+'_input').onkeydown = function(){Selects.Edit.myFuncD(event, loadAuto)};
        }
        addWheelEvent();
    },
    id:'',
    arrayName: '',
    defaultOption: false,
    SpanArray:[],
    currentSpanNum : -1,
    myFuncD:function(event,loadAuto)
    {   var arr = Selects.getArrayByName(Selects.Edit.arrayName);
        var row = Selects.Edit.currentSpanNum;
        if(event.keyCode==38)
        {   row--;
	        if(row<0)row = Selects.Edit.SpanArray.length-1;
            Selects.Edit.scrollList(row);//тут заносим номер активного  спана в currentSpanNum
            if(!loadAuto)$(Selects.Edit.id + '_input').value = arr[row].text;
            return;
        }
        else if(event.keyCode==40)
        {   row++;
	        if(row>Selects.Edit.SpanArray.length-1)row = 0;
            Selects.Edit.scrollList(row);//тут заносим номер активного  спана в currentSpanNum
            if(!loadAuto)$(Selects.Edit.id + '_input').value = arr[row].text;
            return;
        }
    },
    myFuncB:function(event,loadAuto)
    {   var value = $(Selects.Edit.id + '_input').value;
        if(!loadAuto||value.length>3)
        {   if(event.keyCode!=40&& event.keyCode!=38)
	        {   if(event.keyCode==13)
	            {   Selects.Edit.searchInListArray(value, true, true, loadAuto);
	            }   
	            else if (value != '')
	            {   Selects.Edit.searchInListArray(value, true);
	            }
	        }
	    }
	    else if(loadAuto&&value.length>2)
        {   if(event.keyCode!=40&& event.keyCode!=38&&event.keyCode!=13)
            Selects.loadSelects.load($(Selects.Edit.id), Selects.Edit.arrayName, true, false, true, Selects.Edit.defaultOption, true, true,true);
            else if(event.keyCode==13) Selects.Edit.searchInListArray(value, true, true, loadAuto);
        }
        else if(loadAuto)
        {   if(event.keyCode==13) Selects.Edit.searchInListArray(value, true, true, loadAuto);
            else Selects.Edit.show_hide_list(Selects.Edit.id,Selects.Edit.arrayName,event, true, true);
        }
    },
    searchInListArray:function(value, auto, shutdown, loadAuto)
    {   if(auto)
        {   var arr = Selects.getArrayByName(Selects.Edit.arrayName);
            if(shutdown && loadAuto && Selects.Edit.currentSpanNum>=0) value = arr[Selects.Edit.currentSpanNum].text;
            value = value.toLowerCase();
            var i = Selects.Edit.searchInList(value);
	        if(!i)
            {   for(var j=value.length; j>1;j--)
                {   value = value.substring(0,j-1);
                    if(!i) i = Selects.Edit.searchInList(value);
                    if(i) break;
                }
                if(!i) Selects.Edit.currentSpanNum = 0;
                $(Selects.Edit.id + '_input').value = arr[Selects.Edit.currentSpanNum].text;
            }
            if(shutdown && Selects.Edit.SpanArray[Selects.Edit.currentSpanNum])
            {   Selects.Edit.SpanArray[Selects.Edit.currentSpanNum].onclick();
            }
            else if (arr[Selects.Edit.currentSpanNum].text.toLowerCase()==value && loadAuto) Selects.Edit.SpanArray[Selects.Edit.currentSpanNum].onclick();
            else $(Selects.Edit.id + '_list').style.display = 'block';
        }
    },
    searchInList:function(value, arrayName)
    {   var arr;
        if(arrayName) arr = Selects.getArrayByName(arrayName)
        else arr = Selects.getArrayByName(Selects.Edit.arrayName);
        var arr_len = arr.length;
        value = value.replace(/([\)\(])/gi,'\\$1');
        var reg_1 = new RegExp('^'+value+'','i');
        var reg_2 = new RegExp('[^a-z0-9]'+value+'','i');
        for(var i=0; i<arr_len; i++)
        {   if(arr[i].text.match(reg_1))
            {   Selects.Edit.scrollList(i);
                return true;
            }
        }
        for(var i=0; i<arr_len; i++)
        {   if(arr[i].text.match(reg_2))
            {   Selects.Edit.scrollList(i);
                return true;
            }
        }
        Selects.Edit.scrollList(0);
        return false;
    },
    scrollList:function(row)
    {   pos = (row)*16;
	    $(Selects.Edit.id+'_list').scrollTop = pos.toString();
	    Selects.Edit.changeSpanStyle(row);
	},
	changeSpanStyle:function(row)
	{   var length = Selects.Edit.SpanArray.length;
	    if(Selects.Edit.currentSpanNum>=0 && Selects.Edit.SpanArray[Selects.Edit.currentSpanNum])
	    {   Selects.Edit.SpanArray[Selects.Edit.currentSpanNum].style.color = '';
		    Selects.Edit.SpanArray[Selects.Edit.currentSpanNum].style.backgroundColor = '';
	    }
	    Selects.Edit.currentSpanNum = row; 
	    if(Selects.Edit.currentSpanNum>=0 && Selects.Edit.SpanArray[Selects.Edit.currentSpanNum])
	    {   Selects.Edit.SpanArray[Selects.Edit.currentSpanNum].style.color = '#fff';
	        Selects.Edit.SpanArray[Selects.Edit.currentSpanNum].style.backgroundColor = '#0093DD';
	    }
	},
	show_hide_list:function(id,arrayName,event, AutoFill, loadAuto)
    {   //$('test').innerHTML += event.type + '<br/>' + Selects.Edit.OUT;
        var d_style = $(id+'_list').style;
        if(loadAuto)if($(id+'_input').value.length<3)
        {   var value = $(id+'_input').value; var arr = Selects.getArrayByName(arrayName);
            if(value.length<3 && arr && arr.length>0)
            {   value = value.toLowerCase();var i = true;
                if(value == '') i = false;
                else
                {   i = Selects.Edit.searchInList(value,arrayName);
	                if(!i)
                    {   for(var j=value.length; j>1;j--)
                        {   value = value.substring(0,j-1);
                            if(!i) i = Selects.Edit.searchInList(value,arrayName);
                            if(i) break;
                        }
                    }
                }
                if(!i) d_style.display='none';
            }
            return false;
        }
        if(!event) var event = {type:'click'};
        if(d_style.display!='block' && event.type!='blur')
	    {   //initSearchForm();
	        //initOptList();
		    d_style.display='block';
		    if(location.href.toLowerCase().indexOf('default')==-1 && !location.href.match(/\/(#.*)?$/))
	        {   var theHeight = 0;
                if (window.innerHeight) theHeight=window.innerHeight;
                else if (document.documentElement && document.documentElement.clientHeight) theHeight=document.documentElement.clientHeight;
                else if (document.body) theHeight=document.body.clientHeight;
                
                var Scroll = 0;
                if (document.documentElement && document.documentElement.scrollTop)Scroll = document.documentElement.scrollTop;
                else if (document.body && document.body.scrollTop)Scroll = document.body.scrollTop;
                var top = 0;
                var d = $(id+'_list');
                d_style.top = '';
                var h = parseInt(d.offsetHeight);
                while(d.offsetParent){if(d.offsetTop)top+=d.offsetTop;d=d.offsetParent;}
                
                top -= Scroll;
                if((top+h)>=theHeight)
                {   d_style.top = (top - h + Scroll - $(id+'_input').offsetHeight) + 'px';
                    d_style.borderBottom = '1px solid #000';
                    d_style.borderTop = '0px solid #000';
                }
                else
                {   d_style.top = '';
                    d_style.borderBottom = '0px solid #000';
                    d_style.borderTop = '1px solid #000';
                }
            }
		    $(id+'_input').focus();
		    Selects.Edit.FOCUS = true;
		    Selects.Edit.Start(id,arrayName,loadAuto);
		    var autoFill = true;
		    if(!AutoFill) $(id+'_input').value = '';
		    Selects.Edit.searchInListArray($(id+'_input').value, AutoFill, false, loadAuto);
		}
	    else
	    {   Selects.Edit.FOCUS = false;$(id+'_input').blur();
	        Selects.Edit.searchInListArray($(id+'_input').value, true, !loadAuto, loadAuto);
	    }
	},
	setSpanHandlers:function()
    {   var spanArr = $(Selects.Edit.id+'_list').getElementsByTagName('a');
        for(var j=0; j<spanArr.length; j++)
        {   spanArr[j].onmouseover =function(){ this.style.color = '#fff';this.style.backgroundColor = '#0093DD'; }
            spanArr[j].onmouseout =function(){ this.style.color = '';this.style.backgroundColor = ''; }
        }
    },
    moveObject:function(event)
    {   var delta = 0;
        if (!event) event = window.event;
        // normalize the delta
        if (event.wheelDelta)
        {
        // IE & Opera
        delta = event.wheelDelta / 120;
        }
        else if (event.detail) // W3C
        {
        delta = -event.detail / 3;
        }
        var currPos=document.getElementById(Selects.Edit.id+'_list').scrollTop;
        var myH = document.getElementById(Selects.Edit.id+'_list').offsetHeight;
        
        //
        //calculating the next position of the object
        currPos=parseInt(currPos)-(delta*16);
        
        //moving the position of the object
        document.getElementById(Selects.Edit.id+'_list').scrollTop=currPos;
    }
};
function addHandler(object, event, handler, useCapture) {
    if (object.addEventListener) object.addEventListener(event, handler, useCapture);
    else if (object.attachEvent) object.attachEvent('on' + event, handler);
    else object['on' + event] = handler;
}
function removeHandler(object, event, handler) {
    if (object.removeEventListener) object.removeEventListener(event, handler, false);
    else if (object.detachEvent) object.detachEvent('on' + event, handler);
}
function preventDef(event) {
    var event = event || window.event; 
    if(event.preventDefault) event.preventDefault();
    else event.returnValue = false; // IE branch - do more tests if that's not enough
}
function addWheelEvent()
{   addHandler($(Selects.Edit.id+'_input'), 'DOMMouseScroll',  Selects.Edit.moveObject);
    addHandler($(Selects.Edit.id+'_input'), 'mousewheel',  Selects.Edit.moveObject);
	            addHandler(window, 'DOMMouseScroll',  preventDef);
	/* Opera */ addHandler(window, 'mousewheel', preventDef);
	/* IE */    addHandler(document, 'mousewheel',  preventDef);

}
function delWheelEvent()
{	//removeHandler($(Selects.Edit.id+'_input'), 'DOMMouseScroll',  preventDef);
    //removeHandler($(Selects.Edit.id+'_input'), 'mousewheel', preventDef);
                removeHandler(window, 'DOMMouseScroll',  preventDef);
	/* Opera */ removeHandler(window, 'mousewheel', preventDef);
	/* IE */    removeHandler(document, 'mousewheel',  preventDef);
}
function changeInputValue(id,value){
 $(id).value = value;
// i.style.color = '#000';

}
 
function f(id,value,arrayName,remain)
{   changeInputValue(id,value);
    if(value) changeInputValue(id+'_input',Selects.getOptionText(Selects.getArrayByName((arrayName?arrayName:id)),value));
    else changeInputValue(id+'_input', (eval('default_opts.'+id)?eval('default_opts.'+id):''));
    
    if (value.match(/[א-ת]/))$(id+'_input').style.direction = 'rtl';
    else $(id+'_input').style.direction = 'ltr';
    Selects.Edit.FOCUS = false;
    if(!remain)$(id+'_list').style.display = 'none';
}


