var Calendar=_cl={
	servData:{ 
		today:new Date(),
		weekdays:[],
		months:[],	
		type:"",
		nDays:320,
		nHours:0, 
		txtBackNextMonth:[],
		userDay: -1,
		monthDay:-1	
	},
	finalDate:null,
	lay:null,
	allCalendars:[],
	layNameDay:[],
	changeMonth:false,
	active:false,
	actualPicker:-1,
	onlyBooking:false,
	dateInSession:false,
    nomCampOb:[],
	load:function(){
	   	var destinationCities=dom.getElementsById("ciudadDestino")
		for(var xx=0;xx<destinationCities.length;xx++){
		    _cl.nomCampOb[xx] = [];
            _cl.nomCampOb[xx].push(["destinoLbl_"+xx,true]);
        }
        _cl.nomCampOb.push(["passangersLbl",true]);
		_cl.SD=_cl.servData;
		_cl.allC=_cl.allCalendars;
		
		
		var auxMonthtoday=_cl.SD.today.getMonth()		
		_cl.SD.today=new Date(_cl.SD.today.getFullYear(), _cl.SD.today.getMonth(), _cl.SD.today.getDate(), parseInt(_cl.SD.today.getHours()+_cl.SD.nHours))
		if(auxMonthtoday!=_cl.SD.today.getMonth()) _cl.changeMonth=true
		_cl.finalDate=new Date(_cl.SD.today.getFullYear(), _cl.SD.today.getMonth(), parseInt(_cl.SD.today.getDate()+_cl.SD.nDays))

		for(var xx=0;xx<arguments.length;xx++) {_cl.create(arguments[xx],xx)}
	
		
	},
	create:function(args,id){
		
		_cl.allC.push([args[1][0],args[1][1],args[1][2],args[1][3]])
		
		_auxDay=(_cl.SD.today.getMonth().toString().length>1)? _cl.SD.today.getDate().toString(): "0"+ parseInt(_cl.SD.today.getMonth()+1).toString()
		_cl.layNameDay[id]=args[1][3]
		if(_cl.layNameDay[id]!=null)
			_cl.layNameDay[id].className="weekDay4 ftl"
		
		_cl.listDays=args[1][0]
		_cl.listDays.cont=id
		_cl.listMonthYears=args[1][1]
		_cl.listMonthYears.cont=id
		
		if(!_cl.dateInSession){
			_cl.listDays.selectedIndex=_cl.SD.today.getDate()-1
			_cl.listMonthYears.selectedIndex=forms.getSelectedByValue(_cl.listMonthYears,_cl.SD.today.getFullYear().toString() +_auxDay)

		}
		
		
		var cbDate=_cl.getCbDate(_cl.listDays,_cl.listMonthYears)
		if(_cl.layNameDay[id]!=null)
			_cl.layNameDay[id].innerHTML=_cl.returnDayWeek(cbDate)		
		
		_cl.listDays.onchange=_cl.returnListDays
		_cl.listMonthYears.onchange=_cl.returnListMonthsAndYears

			
		var link=document.createElement("a")
		link.href="#"
		link.contId=id;
		link.onclick=function( ){
			_cl.actualPicker=this.contId
			_cl.init(args[1], this,this.contId);
			return false;
		}
		
		var  imgCalendar=document.createElement("img")
		imgCalendar.className="icoCalendar"
		imgCalendar.src=config.urlImg+"calendar.gif"
		
		link.appendChild(imgCalendar)
		page.$(args[0]).appendChild(link)
		
		
	},
	getCbDay:function(obj){return obj.value},
	getCbMonth:function(obj){return  parseInt(obj.value.substr(4,6),10)-1},
	getCbYear:function(obj){return  parseInt(obj.value.substr(0,4),10)},
	getCbDate:function(obj1,obj2){return  new Date(
		_cl.getCbYear(obj2),
		_cl.getCbMonth(obj2),
		_cl.getCbDay(obj1)
		
		)
	},	
	init:function(obj,objBtnCalendar,id){
	
		if(!_cl.active || id==0 ){
			_cl.inputReturn=[]
			_cl.inputReturn["day"]=obj[0]
			_cl.inputReturn["month"]=obj[1]
			_cl.inputReturn["hour"]=obj[2]
			_cl.inputReturn["nameDay"]=obj[3]
			idInput=_cl.inputReturn["day"].id
			
			var day=_cl.inputReturn["day"].value
			var month=parseInt(_cl.inputReturn["month"].value.substr(4,6),10)-1
			var year=parseInt(_cl.inputReturn["month"].value.substr(0,4),10)
			
			_cl.deleteCalendars()

			var lay=document.createElement("div");
			
			lay.setAttribute("id","CAL_"+idInput);
			lay.className="calendar";
			_cl.lay=lay;
			
			_cl.paint(day,month,year,lay);

			lay.style.display="block";
			lay.style.left=(obj[2]!=null)? xy.getX(obj[2])-(-1*obj[2].offsetWidth)-(-1*5)+"px" :xy.getX(objBtnCalendar)-(-1*objBtnCalendar.childNodes[0].offsetWidth) + 2 +"px";
			lay.style.top=(obj[2]!=null)? xy.getY(obj[2]) +"px":xy.getY(objBtnCalendar) +"px";
			
		}else {return false}
	},
	deleteCalendars:function(){
		for(var tt=0;tt<_cl.allC.length;tt++){
			if(page.$("CAL_"+_cl.allC[tt][0].id)){
				page.$("CAL_"+_cl.allC[tt][0].id).parentNode.removeChild(page.$("CAL_"+_cl.allC[tt][0].id))
			}
		}
	},
	cleanCalendars:function(){_cl.allCalendars=[]},
	returnDayWeek:function(d,m,y){
		var fs=(arguments.length==1)? d.getDay():new Date(y,m,d).getDay();
		fs=(fs==0)? 6:fs-1
		return _cl.SD.weekdays[fs]
	},
	returnDateLists:function(day,monthYear,idLayDay,typeSel){
		_cl.deleteCalendars()

		var month=parseInt(monthYear.value.substr(4,6),10)-1
		var year=parseInt(monthYear.value.substr(0,4),10)
		if(_cl.layNameDay[idLayDay]!=null)
			_cl.layNameDay[idLayDay].innerHTML=_cl.returnDayWeek(day,month,year)
		
		_cl.compareDates(day,month,year,idLayDay,typeSel)
	},
	returnListDays:function(){
		_cl.returnDateLists(this.value, this.parentNode.parentNode.getElementsByTagName("select")[1],this.cont,"d")
	},
	returnListMonthsAndYears:function(){
		_cl.returnDateLists(this.parentNode.parentNode.getElementsByTagName("select")[0].value, this,this.cont,"m")
	},
	compareDates:function(d,m,y,id,type){
		
		var allOptions=[]
		var _difMonth=(_cl.changeMonth)? 0:1
		var firstChange=false;

		

			for(var tt=0;tt<_cl.allC.length;tt++){
								
				allOptions[tt]={date:new Date(_cl.allC[tt][1].value.substr(4,6)+"/"+_cl.allC[tt][0].value+"/"+_cl.allC[tt][1].value.substr(0,4))}
				var today=new Date(_cl.SD.today.getFullYear(), _cl.SD.today.getMonth(), _cl.SD.today.getDate())
		
				
				if(allOptions[tt].date<today){
					_auxDay1= parseInt(_cl.SD.today.getMonth()+2,10).toString();
					 _cl.allC[tt][1].selectedIndex=forms.getSelectedByValue(_cl.allC[tt][1],_cl.SD.today.getFullYear().toString()+_auxDay1)
					if (!_cl.onlyBooking){
						var dayCD=today.getDate()-1
						var monthCD=forms.getSelectedByValue(_cl.allC[tt][1],today.getFullYear().toString() +_auxDay)
						if(tt==0){
							dayCD=_cl.allC[tt][0].value-1
							monthCD++
							firstChange=true;
						} 
						 if(tt>0){
							if(_cl.allC[tt][3]!=null && (allOptions[tt-1].date -today==0) && allOptions[tt].date<today){
								_cl.allC[tt][3].innerHTML=_cl.returnDayWeek(_cl.allC[tt][0].value,_cl.allC[tt][1].value.substr(4,6),today.getFullYear()) 
							} 
						 }else{
							_cl.allC[tt][0].selectedIndex=dayCD
							_cl.allC[tt][1].selectedIndex=monthCD
							if(_cl.allC[tt][3]!=null)
								_cl.allC[tt][3].innerHTML=_cl.returnDayWeek(_cl.allC[tt][0].value,_cl.allC[tt][1].value.substr(4,6)-1,today.getFullYear()) 
						 }
						 
						 
						 
					}
					
					allOptions[tt]={date:new Date(_cl.allC[tt][1].value.substr(4,6)+"/"+_cl.allC[tt][0].value+"/"+_cl.allC[tt][1].value.substr(0,4))}
				}
				if(tt>0 && !_cl.active && _cl.SD.type!="hotels" ){
				  
					if(_cl.allCalendars[tt][0].form==_cl.allCalendars[tt-1][0].form && allOptions[tt].date<allOptions[tt-1].date){
					  
						if(
							((id>0 && type=="d") || _cl.actualPicker>0 )&&
							!(allOptions[tt-1].date>=_cl.finalDate) &&
							parseInt(_cl.allC[tt][0].value,10)<parseInt(_cl.allC[tt-1][0].value,10) && 
							_cl.allC[tt-1][1].value.substr(0,4)==_cl.allC[tt][1].value.substr(0,4))
							
						{
							if(_cl.allC[tt-1][1].value.substr(0,4)>_cl.SD.today.getFullYear()){
								 var op1=parseInt(_cl.allC[tt-1][1].value.substr(4,6),10 )
								 var op2=12*(_cl.allC[tt-1][1].value.substr(0,4)-_cl.SD.today.getFullYear())
								 var op3=_cl.SD.today.getMonth()
								 var vm=parseInt(1+(op1+op2-op3-_difMonth),10)
								 
								 
							}else {
								var vm=parseInt(1+(_cl.allC[tt-1][1].value.substr(4,6) -_cl.SD.today.getMonth() -_difMonth),10 )
							}		
							if(_cl.allC[tt][1].options.length==vm){
								_cl.allC[tt][0].selectedIndex=_cl.allC[tt-1][0].selectedIndex
								_cl.allC[tt][1].selectedIndex=_cl.allC[tt-1][1].selectedIndex
								allOptions[tt].date=allOptions[tt-1].date
							}else{
								_cl.allC[tt][1].selectedIndex=vm;			
								allOptions[tt].date=new Date(_cl.allC[tt][1].value.substr(0,4),_cl.allC[tt][1].value.substr(4,6)-1,_cl.allC[tt][0].value,0,0,0,0)
								if(_cl.allC[tt][3]!=null)
									_cl.allC[tt][3].innerHTML=_cl.returnDayWeek(allOptions[tt].date)
							}
						}else{
							var changeDay=(firstChange)?0:1;
							_cl.allC[tt][0].selectedIndex=_cl.allC[tt-changeDay][0].value-1/***/
							 
							if(_cl.allC[tt-1][1].value.substr(0,4)>_cl.SD.today.getFullYear()){
								var p1=parseInt(_cl.allC[tt-1][1].value.substr(4,6) ,10) 
								var p2=parseInt(12*(_cl.allC[tt-1][1].value.substr(0,4)-_cl.SD.today.getFullYear())-_cl.SD.today.getMonth(),10) 
													_cl.allC[tt][1].selectedIndex=parseInt(p1+p2,10)-_difMonth
								allOptions[tt].date=new Date(_cl.allC[tt-1][1].value.substr(0,4),_cl.allC[tt-1][1].value.substr(4,6)-1,_cl.allC[tt-1][0].value,0,0,0,0)							
							}else {
								 _cl.allC[tt][1].selectedIndex=_cl.allC[tt-1][1].value.substr(4,6) -_cl.SD.today.getMonth() -_difMonth
								allOptions[tt].date=new Date(_cl.allC[tt][1].value.substr(0,4),_cl.allC[tt][1].value.substr(4,6)-1,_cl.allC[tt][0].value,0,0,0,0)
							}
							if (_cl.allC[tt][3]!=null)
								_cl.allC[tt][3].innerHTML=_cl.returnDayWeek(allOptions[tt].date)
							
						}				
					}
					
				}
				
				if(allOptions[tt].date>=_cl.finalDate){		
					 _cl.allC[tt][0].selectedIndex=_cl.finalDate.getDate()-1
					
					if (_cl.allC[tt][3]!=null && !_cl.onlyBooking){
						_cl.allC[tt][3].innerHTML=_cl.returnDayWeek(_cl.finalDate)
					}
				}
				
				var mm=parseInt(_cl.allC[tt][1].value.substr(4,6)-1,10)
				var yyyy=parseInt(_cl.allC[tt][1].value.substr(0,4),10)
				
				if(_cl.allC[tt][0].value>Gdate.dayMonth(mm,yyyy)){
					 _cl.allC[tt][0].selectedIndex=Gdate.dayMonth(mm,yyyy)-1
					var auxDate=new Date(_cl.allC[tt][1].value.substr(0,4),_cl.allC[tt][1].value.substr(4,6)-1,Gdate.dayMonth(m,y))
					_cl.allC[tt][3].innerHTML=_cl.returnDayWeek(auxDate)
					
				}	


				
			}
			
			firstChange=false;
			_cl.actualPicker=-1
		
	

	},
	paintNavigation:function(day,month,year,lay){
		var p=document.createElement("p");
		p.className="clear";

		var lnkPrev=document.createElement("a");
		lnkPrev.setAttribute("href","#");

		var imgBack=document.createElement("img");
		imgBack.setAttribute("alt",_cl.SD.txtBackNextMonth[0]);
		imgBack.setAttribute("title",_cl.SD.txtBackNextMonth[0])
		imgBack.src=config.urlImg+"btn_calendarBack.gif";
		imgBack.className="backmonth";
		
		var newMonth=month-1;
		var newYear=year;
		var d=day

		if (newMonth<0){
			newMonth=11;
			newYear=year-1;
		}

		lnkPrev.onclick=function(){
			_cl.paint(d,newMonth,newYear,lay,lay.getElementsByTagName("table")[0])
			return false;
		}
		
		lnkPrev.appendChild(imgBack);
		p.appendChild(lnkPrev);

		var spanNav=document.createElement("span");
		spanNav.className="txtmonth" 

		spanNav.appendChild(document.createTextNode(_cl.SD.months[month]+" "+year));
		p.appendChild(spanNav);
		
		var lnkNext=document.createElement("a");
		lnkNext.setAttribute("href","#");
		
		var imgNext=document.createElement("img");
		imgNext.setAttribute("alt",_cl.SD.txtBackNextMonth[1]);
		imgNext.setAttribute("title",_cl.SD.txtBackNextMonth[1])
		imgNext.src=config.urlImg+"btn_calendarForward.gif";
		imgNext.className="nextmonth";
		
		lnkNext.onclick=function(){
			var newMonth=month+1;
			var newYear=year;
			if (newMonth==12) {
				newMonth=0;
				newYear=year+1;
			}	
			_cl.paint(d,newMonth,newYear,lay,lay.getElementsByTagName("table")[0])
			return false;
		}
		
		lnkNext.appendChild(imgNext);
		p.appendChild(lnkNext);
		lay.appendChild(p);
	},
	paintDayOfWeek:function(weekdays,the_table){ 
		var thead=document.createElement("thead");
		var row=document.createElement("tr");
		for (i=0;i<weekdays.length;i++){
			var cell=document.createElement("th");
			var cellAbbr=document.createElement("abbr");
			cellAbbr.title=weekdays[i]
			cellAbbr.appendChild(document.createTextNode(weekdays[i].substr(0,2)));
			cell.appendChild(cellAbbr)
			row.appendChild(cell);
		}
		thead.appendChild(row);
		the_table.appendChild(thead);
	},
	paintMonth:function(day,month,year,the_table){
		var difMonth=(_cl.changeMonth)? 0:1
		var day=parseInt(day,10)
		var f=new Date(year,month,1);
		var beginningDay=f.getDay();
		if (beginningDay==0) beginningDay=7;

		if (month>0){
			previousDay=Gdate.dayMonth(month-1,year);
			var mesaux=month-1;
			var anyoaux=year;
		}else{
			previousDay=Gdate.dayMonth(11,year-1);
			var mesaux=11;
			var anyoaux=year-1;
		}

		var tbody=document.createElement("tbody");
		var tr=document.createElement("tr");

		for (j=previousDay-(beginningDay-1)+1;j<=previousDay;j++){
			var cell=document.createElement("td");
			cell.className="cellOtroMes";
			var aux=new Date(anyoaux,mesaux,j,_cl.SD.today.getHours(),_cl.SD.today.getMinutes(),_cl.SD.today.getSeconds());
			cell.appendChild(document.createTextNode(""));
			tr.appendChild(cell);
		}
		
		var cont=beginningDay;
		for (i=1;i<=7-beginningDay+1;i++){
			var cell=document.createElement("td");
			var text=document.createTextNode(i);
			var lnk=document.createElement("a");
			lnk.setAttribute("href","#");
			var aux=new Date(year,month,i-1,_cl.SD.today.getHours(),_cl.SD.today.getMinutes(),_cl.SD.today.getSeconds())
			if (aux<=_cl.finalDate  && (_cl.SD.today<=aux || _cl.SD.today.getDate()==i)){
			
				lnk.appendChild(text);
				
				if(lnk.firstChild.data==day  && month==_cl.inputReturn["month"].value.substr(4,6)-1) {
					cell.className="nullDat"
				}
				lnk.onclick=function(){
					_cl.returnSelection(this.firstChild.data,month,year)
					return false;
				}
				cell.appendChild(lnk);
				
			}else {
			
				var nullDat=document.createElement("span");
				nullDat.appendChild(document.createTextNode(i));
				nullDat.className="nullDat"
				cell.appendChild(nullDat);
			}
			if(aux<=_cl.SD.today ) {
				the_table.parentNode.childNodes[0].getElementsByTagName("a")[0].style.display="none"}
			tr.appendChild(cell);
			cont++;
		}
		tbody.appendChild(tr);
		the_table.appendChild(tbody);
		
		var d=i;
		var row2=2;
		if (month==11) {
			var messig=0;
			var anyosig=year+1;
		}else {
			messig=month+1;
			anyosig=year;
		}
		var writeThis=0;
		
		while ((row2<=6) && (parseInt(writeThis)<Gdate.dayMonth(month,year))){
			var row=document.createElement("tr");
			for (n=1;n<=7;n++) {
				if (d<=Gdate.dayMonth(month,year)){
					var cell=document.createElement("td");
					var text=document.createTextNode(d);
					var lnk=document.createElement("a");
					lnk.setAttribute("href","#");
					var aux=new Date(year,month,d+1,0,0,0,0);
					if ((aux<=_cl.finalDate) &&(_cl.SD.today<aux) || ((_cl.SD.today.getDate()==d)&&(aux.getMonth()>=month) && (aux.getMonth()>=year))){
						lnk.appendChild(text);
						if(lnk.firstChild.data==day && month==_cl.inputReturn["month"].value.substr(4,6)-1) cell.className="nullDat"
						cell.appendChild(lnk);
						lnk.onclick=function(){
							_cl.returnSelection(this.firstChild.data,month,year)
							return false;
						}
					}else{
						var nullDay=document.createElement("span");
						nullDay.appendChild(document.createTextNode(d));
						nullDay.className="nullDat"
						cell.appendChild(nullDay);
						
						if(aux>_cl.finalDate ){
							the_table.parentNode.childNodes[0].getElementsByTagName("a")[1].style.display="none"
						}
					}
					writeThis=d;
					row.appendChild(cell);

				}else{
					var cell=document.createElement("td");
					cell.className="cellOtroMes";
					cell.appendChild(document.createTextNode(""));
					row.appendChild(cell);
				}
				d++;
			}
			tbody.appendChild(row);
			row2++;
		}
		
	},
	returnSelection:function(d,m,y,obj){
		var monthWrite=m+1;
		if(obj==null){
			var objDay=_cl.inputReturn["day"];
			var objMonth= _cl.inputReturn["month"];
			var objNameDay=_cl.inputReturn["nameDay"];
		}else if(typeof(obj[0])=="object"){
			var objDay=obj[0];
			var objMonth=obj[1];
			var objNameDay=obj[3];
		}else{
			var objDay=page.$(obj[0]);
			var objMonth=page.$(obj[1]);
			var objNameDay=page.$(obj[2]);
		}
		 objDay.selectedIndex=parseInt(d)-1
		var difMonth=(_cl.changeMonth)? 0:1

		if(y>_cl.SD.today.getFullYear()){
			objMonth.selectedIndex=parseInt(monthWrite)+(12*(y-_cl.SD.today.getFullYear())-_cl.SD.today.getMonth())-difMonth
		}else{
			 objMonth.selectedIndex=parseInt(monthWrite)-_cl.SD.today.getMonth()-difMonth
		}
		if(objNameDay!=null)
			objNameDay.innerHTML=_cl.returnDayWeek(new Date(monthWrite +"/"+d +"/"+y))
		_cl.compareDates(d,m,y)
		if((obj==null))_cl.lay.style.display="none";
		
		if (_cl.SD.type=="hotels"){;Calendar.hotels.setDate();}; 
	},
	paint:function(d,m,y,lay){ 
		var thechilds=lay.childNodes;
		for (i=thechilds.length-1;i>=0;i--){lay.removeChild(thechilds[i]);}
		the_table=document.createElement("table")
		the_table.cellPadding=0;
		the_table.cellSpacing=0;
		
		var theBody=document.getElementsByTagName("body")[0]
		theBody.appendChild(lay);
		
		
		var auxText=document.createElement("div")
		auxText.appendChild(document.createTextNode("b"))
		auxText.style.height="1px"
		auxText.style.width="1px"
			auxText.style.border="1px solid red"
			auxText.style.display="inline"
		auxText.style.visibility="hidden"
		auxText.style.overflow="hidden"
		
		theBody.appendChild(auxText)
		_cl.paintNavigation(d,m,y,lay);
		lay.appendChild(the_table);
		_cl.paintDayOfWeek(_cl.SD.weekdays,the_table)
		_cl.paintMonth(d,m,y,the_table)
	}, 
	setType:function(v) {
		_cl.servData.type=v
	}

}
