
//grab call parameters for ajax call and fill "reservation" div
function fillReservationTab(hotelid,numroom)
{
	var content_div="reservation";
	var method="GET";
        sendData("&datasSum="+escape('hotelid='+hotelid),URL_FICHEHOTELRESA,method,JSESSIONID,content_div,'preFillResaInfo();manageAgeBlock(numroom);');
}
//-------------------------------------------------------------

//call calendar servlet and fill div_calendar
function getCalendar(startDate)
{
	baseCalenDate=startDate;
	var strPaxDatas=concatPaxDatas();
	
	if(checkNbPax(strPaxDatas))
	{
		document.getElementById('div_calendar').innerHTML = loadingHTML;
		document.getElementById('msginfo').style.display = "none";
		var curr_link="hotelid="+hotelid+"&fromdate="+convertDateToStringSqlDate(startDate)+"&multiroom=1&purge=1&fichotel=1"+concatPaxDatas();
		datasSum=escape(curr_link);
		sendData("&datasSum="+datasSum+"&target=recupSummaryAvailability",URL_FICHEHOTELCAL,"GET",JSESSIONID,"div_calendar",'displayCal();checkErrors();checkForVirtualClick();');
	}
	else
	{
		alert(LANG_SELECTPAX_ALERT);
		
	}
}
//-------------------------------------------------------------
function checkErrors(){
	var errorSpan = document.getElementById('error');
	if(errorSpan != null){
		document.getElementById('div_staylength').style.display = "none";
		document.getElementById('button_book').style.display = "none";
	}
}
//--------------------------------------------------------------
function checkNbPax(strPaxDatas){

	var nbRooms = document.getElementById('select_nbrooms').options.selectedIndex +1;
	var split = strPaxDatas.split('&');
	var nbErrors = 0;
	for(i=1;i<nbRooms+1;i++){
		if(split[i-nbErrors] != null){
			if(split[i-nbErrors].charAt(split[i-nbErrors].indexOf("ages")+4) != i){
				nbErrors++;
				document.getElementById("select_adult_30@"+i).selectedIndex = 1;
			}
		}else{
			nbErrors++;
			document.getElementById("select_adult_30@"+i).selectedIndex = 1;
		}
	}
	if(nbErrors>0){
		return false;
	}else{
		return true;
	}

}
//-------------------------------------------------------------
function displayCal(){
	document.getElementById('msginfo').style.display = "block";
	document.getElementById('div_staylength').style.display = "";
	document.getElementById('button_book').style.display = "";
	if (document.getElementById('spanWebparambtn'))
		document.getElementById('spanWebparambtn').style.display = "none";
}
//-------------------------------------------------------------
function getCalendarPrev()
{
	var prevDate=baseCalenDate;	
	prevDate.setMonth(prevDate.getMonth()-1);
	getCalendar(prevDate);
	document.getElementsByName('calendarSelectedDate')[0].value='';
	document.getElementsByName('calendarNbNights')[0].value='';
}
//-------------------------------------------------------------
function getCalendarNext()
{
	var nextDate=baseCalenDate;
	nextDate.setMonth(nextDate.getMonth()+1);
	getCalendar(nextDate);
	document.getElementsByName('calendarSelectedDate')[0].value='';
	document.getElementsByName('calendarNbNights')[0].value='';
}
//-------------------------------------------------------------

//this method add or remove age lines when the number of rooms is changed
function manageAgeBlock(roomid)
{	
	
	var containerDiv=document.getElementById("table_agelines");
	var targetDivId="tr_room_"+roomid;
	var strHtml="";

	if(document.getElementById(targetDivId)!= undefined)//delete mode
	{
		for(i=(parseInt(roomid)+1);i<document.getElementById("select_nbrooms").options.length+1;i++)
		{
			if(document.getElementById("tr_room_"+i)!=undefined)
			{
				node=document.getElementById("tr_room_"+i);
				node.parentNode.removeChild(node);
			}
		}
	}
	else //add mode
	{
		for(k=1;k<(parseInt(roomid)+1);k++)
		{
			if(document.getElementById("tr_room_"+k)==undefined)
			{
				strHtml+=constructAgeLine(k);
			}
		}

		var content = containerDiv.innerHTML;	
		content = content.replace("<tbody>",'');
		content = content.replace("</tbody>",'');
		content += strHtml;

		var div = document.getElementById("div_agelines");
		div.innerHTML = '';
		div.innerHTML = "<table id=\"table_agelines\">" + content + "</table>";
		// valeurs par dÃ©faut
		for(j=1;j<(parseInt(roomid)+1);j++)
		{
			document.getElementById("select_adult_30@"+j).selectedIndex=2;
		}
	}
}
//-------------------------------------------------------------

//creates a line for age use many vars from java
function constructAgeLine(roomid)
{
	var strHtml="";
	var tmpStr=document.forms['form_fichehotelresa'].elements['PaxAgeLine'].value;
	while(tmpStr.indexOf('{roomid}')>-1)
	{
		tmpStr=tmpStr.replace('{roomid}',roomid);
	}
	strHtml+=tmpStr;
	return strHtml;
}
//-------------------------------------------------------------

//concat pax datas and transform it into a string of type : &ages1=30,2,12&ages2=30,3,4&ages3...
function concatPaxDatas()
{
	var tbSelect=document.getElementsByTagName("SELECT");
	var paxdatas="";
	nbAges=document.getElementById('select_nbrooms').selectedIndex+1;
	for (var j=1;j<nbAges+1;j++)//loop on the number of rooms
	{
		if(paxdatas.lastIndexOf(',')==paxdatas.length-1)//clean unwanted char at the end of the string
		{
			paxdatas=paxdatas.substring(0,paxdatas.length-1);
		}
		if(paxdatas.lastIndexOf('=')==paxdatas.length-1)//clean unwanted char at the end of the string
		{
			paxdatas=paxdatas.substring(0,paxdatas.lastIndexOf("&"));
		}

		paxdatas+="&ages"+j+"=";
		
		for(var i=0;i<tbSelect.length;i++)//loop on all select input of the page
		{
			selectElem=tbSelect[i];

			if(selectElem
				&& selectElem.name
				&& selectElem.name.indexOf('select_age')>-1
			)//filter select_age select
			{
				//get index and extract ages from the key
				tabIndex=selectElem.name.split('_');
				ageIndex=tabIndex[tabIndex.length-1].split('@');

				if(parseInt(ageIndex[1])==j)
				{
					for(var k=0;k<selectElem.selectedIndex;k++)
					{
						paxdatas+=ageIndex[0];
						paxdatas+=",";
					}
				}
			}
		}
	}
	if(paxdatas.lastIndexOf(',')==paxdatas.length-1)//clean unwanted char at the end of the string
	{
		paxdatas=paxdatas.substring(0,paxdatas.length-1);
	}
	if(paxdatas.lastIndexOf('=')==paxdatas.length-1)//clean unwanted char at the end of the string
	{
		paxdatas=paxdatas.substring(0,paxdatas.lastIndexOf("&"));
	}
	return paxdatas;
}
//-------------------------------------------------------------

//Creates a simple select of type <option value="n">n</option>
function constructNbPaxTypeSelect(selectname, nboption)
{
	var strHtml="";
	strHtml+="\n<SELECT name='"+selectname+"' id='select_"+selectname+"'>";
	for(i=1;i<(nboption+1);i++)
	{
		strHtml+="\n\t<option value='"+i+"'>"+i+"</option>";
	}
	strHtml+="\n</SELECT>\n";
	return strHtml;
}
//-------------------------------------------------------------

//This method is called when clicking on a day of the calendar
function clickCalendar(cell)
{
	
	// clean all previous values
	startDate=document.getElementsByName('calendarSelectedDate')[0].value;
	nbNights=document.getElementsByName('calendarNbNights')[0].value;
	
	if(startDate!='' && nbNights!='')
	{
		manageCalDates(startDate, nbNights,'', 'clean');//clean previous selection
	}
	
	//fill with current value
	nbNights=parseInt(document.getElementById('select_staylength').options[document.getElementById('select_staylength').selectedIndex].value);
	startDate=cell.id;
	
	if(!manageCalDates(startDate, nbNights, 'selectedCell', 'select'))
	{
		document.getElementsByName('calendarSelectedDate')[0].value=startDate;
		document.getElementsByName('calendarNbNights')[0].value=nbNights;
	}
	else
	{
		startDate=document.getElementsByName('calendarSelectedDate')[0].value;
		nbNights=document.getElementsByName('calendarNbNights')[0].value;
		// update selectbox
		if (document.getElementById('select_staylength'))
		{
			var idxNbNights = 0;
		
			for (idxSelect=0;idxSelect<document.getElementById('select_staylength').options.length;idxSelect++)
			{
				if (document.getElementById('select_staylength').options[idxSelect].value == nbNights)
				{
					idxNbNights = idxSelect;
					break;
				}
			}
			document.getElementById('select_staylength').selectedIndex = idxNbNights;
		}
		// Re-check previous cell
		manageCalDates(startDate, nbNights, 'selectedCell', 'select',false);
	}
}
//-------------------------------------------------------------

//This method apply check/uncheck a period on the calendar depending on the mode (clean=uncheck, select=check)
//return TRUE on ERROR, FALSE on SUCCESS
function manageCalDates(startDate, nbNights, className, mode, bdisplayerror)
{
	if (bdisplayerror == null || bdisplayerror == undefined)
		bdisplayerror = true;
	
	// Ce patch permet de tenir compte des jours d'arrivée autorisés :
	var tabAutorisedDays=null;
	if (document.getElementById('autorisedDays'))
	{	
	var autorisedDays=document.getElementById('autorisedDays').value;
	var reg=new RegExp("[@]+", "g");
	
	// 0 correspond au dimanche et 6 correspond au samedi.
	  tabAutorisedDays=autorisedDays.split(reg);	
	}
	var isError=false;
	
	var mixAutorized = false;
	var specialRateMode = false;
	if (document.getElementById('validSpecialRateDate') && document.getElementById('mixAutorized'))
		specialRateMode = true;
	

	// SpecialRate Mode
	if (specialRateMode)
	{
		mixAutorized = (document.getElementById('mixAutorized').value == 'true');
		// Reinitialize the number of validSpecialRateDays
		document.getElementById('validSpecialRateDate').value = 0;
	}
	
	var currDate=convertSqlDateToDate(startDate);
	if (currDate && currDate!=undefined && currDate!="")
	{
		// 0 correspond au dimanche et 6 correspond au samedi.
		var currDay=currDate.getDay();
		
		var nbDaysToCheck = parseInt(nbNights); //+1 because : 1 night = 2 days. For 1 night=1 day, you just have to remove "+1"
		if(mode!='clean')//clean mode is for unchecking days on the calendar before checking new ones
		{
			//This loop is only to check for errors (day out of calendar, day not available). does not apply if we are in "clean" mode
			var nbAvailDaysFound=0;
			for(i=0;i<nbDaysToCheck;i++)
			{
				sqlDate=convertDateToStringSqlDate(currDate);
				
				if(!document.getElementById(sqlDate))
				{
					if (bdisplayerror)
						alert(LANG_OUTOFSPACEDAY_ALERT);
					isError=true;
					break;
				}
				if(document.getElementsByName(sqlDate).length > 0)
				{
					var element = null;
					for (idxElem=0;idxElem<document.getElementsByName(sqlDate).length;idxElem++)
					{
						if (document.getElementsByName(sqlDate)[idxElem].value != undefined)
						{
							element = document.getElementsByName(sqlDate)[idxElem];
							break;	
						}
					}
						
					if (element == null || (element.value != "availCell" && element.value != "unavailSpecialRate"))
					{
						if (bdisplayerror)
							alert(LANG_DAYNOTAVAIL_ALERT);
						isError=true;
						break;
					}
					if (element != null && (element.value == "availCell" || (specialRateMode && mixAutorized && element.value == "unavailSpecialRate")))
					{
						nbAvailDaysFound=nbAvailDaysFound+1;
						
						if (specialRateMode && mixAutorized)
						{
							if (element.value == "availCell")
							{
								var iCurrentValidDays = document.getElementById('validSpecialRateDate').value;
								document.getElementById('validSpecialRateDate').value = (parseInt(iCurrentValidDays)+1);
							}
						}
					}
				}			
				currDate.setDate(currDate.getDate()+1);
			}		
			// on teste les jours d'arrivée autorisé
			if (tabAutorisedDays!=null && tabAutorisedDays[currDay]!=1)
			{		
				if (bdisplayerror)
					alert(LANG_ARRIVAL_DAY_NOT_AUTHORIZED);
				isError=true;
			}		
			if (nbAvailDaysFound==0 && isError==false)
			{		
				if (bdisplayerror)
					alert(LANG_ARRIVAL_DAY_NOT_AUTHORIZED);
				isError=true;
			}		
		}
		if(!isError)
		{
			currDate=convertSqlDateToDate(startDate);
			for(i=0;i<nbDaysToCheck;i++) //the main loop, apply style to day cells
			{
				sqlDate=convertDateToStringSqlDate(currDate);
				
				var element = null;
				for (idxElem2=0;idxElem<document.getElementsByName(sqlDate).length;idxElem2++)
				{
					if (document.getElementsByName(sqlDate)[idxElem2].value != undefined)
					{
						element = document.getElementsByName(sqlDate)[idxElem2];
						break;
					}
				}
			
				if (document.getElementById(sqlDate))
				{
	
					if(mode=='clean' && element != null)
					{
						document.getElementById(sqlDate).getElementsByTagName('div')[0].className=element.value;
					}
					else
					{
						document.getElementById(sqlDate).getElementsByTagName('div')[0].className=className;
					}
				}
				
				if(i==nbDaysToCheck-1)
				{
					document.getElementsByName('calendarToDate')[0].value=sqlDate;
				}
				
				currDate.setDate(currDate.getDate()+1);
			}
		}
		else
		{
			if (document.getElementsByName('calendarSelectedDate')[0])
			{
				document.getElementsByName('calendarSelectedDate')[0].value = "";
			}
		}
	}
	else
	{
		isError=false;
		if (document.getElementsByName('calendarSelectedDate')[0])
		{
			document.getElementsByName('calendarSelectedDate')[0].value = "";
		}
	}
	
	return isError;
}
//-------------------------------------------------------------


function convertDateToStringSqlDate(daDate)
{
	var sqlDate="";
	if (daDate.getYear() < 2000)
		sqlDate=(1900+daDate.getYear())+'-';
	else
		sqlDate=daDate.getYear()+'-';

	var intMonth=parseInt(daDate.getMonth())+1;
	if(intMonth<10)
		sqlDate+='0';
	sqlDate+=(intMonth)+'-'
	if(daDate.getDate()<10)
		sqlDate+='0';
	sqlDate+=daDate.getDate();
	return sqlDate;
}
//-------------------------------------------------------------
function convertSqlDateToDate(strDate)
{	
	var oDate= undefined;
	
	if (strDate != undefined && strDate != "" && strDate != "undefined")
	{
		var tabStrDate=strDate.split('-');
		daYear=parseInt(tabStrDate[0]);
		daYear=daYear;
	
		var tmpMonth=tabStrDate[1];
		if(tmpMonth && tmpMonth.indexOf('0')==0)
			tmpMonth=tmpMonth.substring(1,2);
	
		daMonth=parseInt(tmpMonth)-1;
	
		var tmpDay=tabStrDate[2];
		if(tmpDay.indexOf('0')==0)
			tmpDay=tmpDay.substring(1,2);
		
		daDay=parseInt(tmpDay);
		oDate= new Date(daYear, daMonth, daDay);
	}
	return oDate;
}
//-------------------------------------------------------------

function getResaUrl(langcode)
{
	
	var daUrl=RESA_URL;
	daUrl+="&id="+custid;
	daUrl+="&hotelid="+hotelid;
	daUrl+="&partid="+partid;
	var tabDate=document.getElementsByName('calendarSelectedDate')[0].value.split('-');
	if (langcode)
	{
		daUrl+="&lang="+langcode;
	}
	daUrl+="&fday="+tabDate[2];
	daUrl+="&fmonth="+tabDate[1];
	daUrl+="&fyear="+tabDate[0];
	daUrl+="&nbnights="+document.getElementsByName('calendarNbNights')[0].value;
	daUrl+="&numroom="+(document.getElementById('select_nbrooms').selectedIndex+1);
	daUrl+="&pageReturn=fiche_htl";
	daUrl+=concatPaxDatas();
	var reg=new RegExp("(ages)", "g");
	daUrl=daUrl.replace(reg,'roomAge');
	return daUrl;	
}
//-------------------------------------------------------------

function showDate(strDate,daDate)
{
	alert(strDate+"="+daDate.getFullYear()+"-"+daDate.getMonth()+"-"+daDate.getDate());
	
}
//-------------------------------------------------------------------
function refreshPage(){
	document.forms['form_fichehotelresa'].elements['calendarSelectedDate'].value = "";
	if(document.getElementById('div_calendar').innerHTML != ""){
		getCalendar(baseCalenDate);
	}
	
}
//--------------------------------------------------------------------
function checkDates(){
	var calendarSelectedDate=document.forms['form_fichehotelresa'].elements['calendarSelectedDate'].value;
	if(calendarSelectedDate && calendarSelectedDate != "" && calendarSelectedDate != "undefined"){
		return true;
	}else{
		alert(LANG_SELECT_DATE_MANDATORY);
		return false;
	}
}

