var gPax,gAdults,gChildren,gRooms,gAges,newDate1,newDate2;
var gAdultCounts=new Array(2,2,2,2,2,2,1,3,1,4);
var gChildCounts=new Array(0,1,0,0,1,0,0,0,0,0);
var gMaxPax=9;
var gRoomText='Номер';
var gFacs = "0|1|2|3|4|5|6|7|8|9";
var gHasFacs = true;

function TransferScreen(ButtonName, DivName) {
    //document.getElementById(DivName).style.visibility = "visible";
    //document.getElementById(DivName).style.display="block";
    document.getElementById(ButtonName).disabled = true;
    }

function initForm() {
	for (var j=0; j<getRoomLines(); j++) {
		for (var i=0; i<3; i++) {
			if (getSelectionValue(getRoomAgeField(j,i))==0 || getSelectionValue(getRoomAgeField(j,i))==null ) {
				var field=getRoomAgeField(j,i);
				showField(field.name,false);
				field.selectedIndex= 0;
			}
		}
    }
	
	var dates=gStartDate.split('-');
    var el=new Array('D','M','Y');
    el['Y']=dates[0];
    el['M']=getMonthName(dates[1],gMonthNames);
    el['D']=dates[2];
    newDate1=el[gDateFormat.charAt(0)]+' '+el[gDateFormat.charAt(1)]+' '+el[gDateFormat.charAt(2)];
    
    var dates=gEndDate.split('-');
    var el=new Array('D','M','Y');
    el['Y']=dates[0];
    el['M']=getMonthName(dates[1],gMonthNames);
    el['D']=dates[2];
    newDate2=el[gDateFormat.charAt(0)]+' '+el[gDateFormat.charAt(1)]+' '+el[gDateFormat.charAt(2)];
	gMsg1+=newDate1+' - '+newDate2;
	gLoaded=true;
}

function pad(str,padChar,minLen,right) {
	var count=minLen - str.length;
	while (count-- > 0)
		str=(right)?(str + padChar):(padChar + str);
	return str;
}

function writeToLayer(layer,text) {
	if (!layer) return;
	if (document.layers) {
		layer.document.write(text);
		layer.document.close();
	} else {
		layer.innerHTML=text;
	}
}


function getLayer(layer) {
	if (self.all){
		//alert('1: ' + layer);
		return ('document.all.'+layer);
		}
	if (document.getElementById){
		return document.getElementById(layer);
		}
	return ('document.'+layer);
}


function trim(text) {
	if (text==null || text.length==0)
		return '';
	var end=text.length;
	do {
		end--;
	} while (end>=0 && text.charAt(end)==' ');
	if (end<0)
		return '';
	var start=0;
	while (text.charAt(start)==' ')
		start++;
	return text.substring(start,end+1);
}



function getRoomAgeField(roomNumber,ageNumber) {
	var field='Room'+roomNumber+'Ages'+ageNumber;
	return eval(gNameRoot+field);
}


function showField(field,show) {
	var obj=getLayer(field);
	if (!obj) return;
	if (obj.style) {
		obj.style.visibility=show ? 'visible' : 'hidden';
	} else {
		obj.visibility=show ? 'show' : 'hide';
	}
}


function showAges(number,count) {
	for (var i=0; i<3; i++) {
		var field=getRoomAgeField(number,i);
		if (i<count) {
			showField(field.name,true);
		} 
		else {
			showField(field.name,false);
			field.selectedIndex= 0;
		}
	}
}

function showWTSAges(number, count) {
    for (var i = 0; i < 2; i++) {
        var field = getRoomAgeField(number, i);
        if (i < count) {
            showField(field.name, true);
        }
        else {
            showField(field.name, false);
            field.selectedIndex = 0;
        }
    }
}

function getRoomLines() {
	return eval(gNameRoot+'roomLines').value;
}

function getNightsField() {
	return eval(gNameRoot+"Nts");
}

function getArrivalDateField() {
	return eval(gNameRoot+"arrivalDate");
}

function getArrivalDayField() {
	return eval(gNameRoot+"arrivalDay");
}


function getRoomTypeField(roomNumber) {
	return eval(gNameRoot+'Room'+roomNumber);
}

function getRoomCountField(roomNumber) {
	return eval(gNameRoot+'Room'+roomNumber+'Count');
}


function getRoomCotField(roomNumber) {
	return eval(gNameRoot+'Room'+roomNumber+'Cots');
}


function isChildRoom(type) {
	return (type=='1' || type=='4');
}

function getSelectionValue(obj) {
	if (obj && obj.selectedIndex >= 0) {
		return obj.options[obj.selectedIndex].value;
	}
	return '';
}

function getLocField() {
	return document.wh.loc;
}

function getStarField() {
	return document.wh.star;
}

function getCurrencyField() {
	return document.wh.currency;
}

function getCityField() {
	return document.wh.citySelection;
}

function getOrderField() {
	return document.wh.order;
}


function getHotelNameField() {
	return document.wh.hotelName;
}



function getIndexOfOption(obj, value) {
	if (obj.options) {
		for (var idx= 0; idx< obj.options.length; idx++) {
			if (obj.options[idx].value== value)
				return idx;
		}
	}
	return -1;
}

function setSelectionValue(obj,value) {
	if (!obj) return;
	if (value!=null) {
		if (value.length>0) {
			obj.selectedIndex= getIndexOfOption(obj, value);
		} else {
			obj.selectedIndex= -1;
		}
	}
}


function buildSelection(options,values,selected,asString) {
	var o=options.split("|");
	var v,s=str='';
	var selectedOpt;
	if (values==null) {
		v=o;
	} else {
		v=values.split("|");
	}
	selectedOpt= (selected==null) ? -1 : selected;
	for (var i=0; i < o.length; i++) {
		s=(i==selectedOpt) ? 'SELECTED ' : '';
		str+='<OPTION '+s+'VALUE="'+v[i]+'">'+o[i];
	}
	str+='</SELECT>';
	if (asString) {
		return str;
	}
	document.writeln(str);
}


function chgRoomType(obj,number) {
	if (gMaxChildren==0 && isChildRoom(getSelectionValue(obj))) {
		alert('???');//gMsg13);
		obj.selectedIndex=0;
		return;
	}
	var roomCountField=getRoomCountField(number);
	if (getSelectionValue(obj)!=' ') {
		if (getSelectionValue(roomCountField)=='0') {
			setSelectionValue(roomCountField,'1');
		}
	} else {
		setSelectionValue(roomCountField,'0');
		getRoomCotField(number).selectedIndex=0;
	}
	testRooms();
}

function chgRoomCount(obj,number) {
	if (getSelectionValue(obj)=='0') {
		getRoomTypeField(number).selectedIndex=0;
		getRoomCotField(number).selectedIndex=0;
	}
	testRooms();
}

function chgRoomAge(obj,number) {
	if (Number(getSelectionValue(obj))>0) {
		if (!isChildRoom(getSelectionValue(getRoomTypeField(number)))) {
			alert(gMsg10);
			obj.selectedIndex=0;
		}
	}
}


function testRooms() {
	var total=0;
	var roomLines=getRoomLines();
	for (var i=0; i<roomLines; i++) {
		var count=0;
		var type=getSelectionValue(getRoomTypeField(i));
		if (isChildRoom(type)) {
			count=Number(getSelectionValue(getRoomCountField(i)));
		}
		showAges(i,count);
		total+=count;
	}
	showField("DivChildTitle",(document.layers) || total > 0);
}

function buildChildAges(ages,selected,asString) {
	var opts="  ";
	var vals="00";
	var j=0;
	var len=ages.length / 2;
	for (var i=0; i<len; i++) {
		var age=parseInt(ages.substr(j,2),10);
		opts+="|"+age;
		vals+="|"+age;
		j+=2;
	}
	return buildSelection(opts,vals,selected,asString);
}

function buildCitySelection(prompt,options,values,selected,asString) {
	var srch='<OPTION class="otherDest" value="SOTHR">'+prompt;
	var o=options.split("|");
	var v,s='';
	var str=srch;
	var selectedOpt;
	if (values==null) {
		v=o;
	} else {
		v=values.split("|");
	}
	selectedOpt= (selected==null) ? -1 : selected+1;
	for (var i=0; i < o.length; i++) {
		s=(i==selectedOpt) ? 'SELECTED ' : '';
		str+='<OPTION '+s+'VALUE="'+v[i]+'">'+o[i];
	}
	str+='</SELECT>';
	if (asString) {
		return str;
	}
	document.writeln(str);
}

function cvtDateToISO(day, monthYear) {
  	return (monthYear + "-" + day);
}

function getDspDate(dayObj,monthYearObj) {
	var day=getSelectionValue(dayObj);
	var monthYear=getSelectionValue(monthYearObj);
	if (Number(day)<1 || monthYear=='') {
		return null;
	}
	return cvtDateToISO(day,monthYear);
}

function buildDayList(asString) {
	var opts=" ";
	var vals="00";
	for (var i=1; i<=31; i++) {
		opts+="|"+i;
		vals+="|"+(i<10?'0':'')+String(i);
	}
	return buildSelection(opts,vals,0,asString);
}


function buildMonthYearList(monthNames,startMonth,startYear,monthCount,asString) {
	var fullDate="";
	var fullValue="";
	var sep="|";
	var month=startMonth-1;
	var year=startYear;
	var names=monthNames.split("|");
	var isMY=gDateFormat.indexOf('M')<gDateFormat.indexOf('Y');
	for (var i=0; i<=monthCount; i++) {
		if (isMY) {
			fullDate=fullDate + sep + names[month++]+" "+year;
		} else {
			fullDate=fullDate + sep + year +" "+names[month++];
		}
		fullValue=fullValue + sep+year + "-" + ((month<10)?'0':'') + month;
		if (month==12) {
			month=0;
			year++;
		}
	}
	return buildSelection(fullDate,fullValue,0,asString);
}



function buildDateSelection(dayField,mthField,monthNames,startMonth,startYear,monthCount,asString) {
	var dayList=dayField+buildDayList(true);
	var mthList=mthField+buildMonthYearList(monthNames,startMonth,startYear,monthCount,true);
	var isDM=gDateFormat.indexOf('D')<gDateFormat.indexOf('M');
	var s= isDM ? dayList+mthList: mthList+dayList;
	if (asString) {
		return s;
	}
	document.writeln(s);
}

function isValidDate(isoDate) {
	if (isoDate==null) {return false;}
	var maxDays = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	var date = isoDate.split("-");
	if (date[0] >= 1900 && date[0] < 2100) {
		if (date[1] > 0 && date[1] <= 12) {
			if (date[2] > 0) {
				if (date[2] <= maxDays[date[1]-1]) {
					return true;
				}
				return (date[2]==29 && date[1]==2 && (date[0] % 4 == 0));
			}
		}
	}
	return false;
}




function isValidDspDate(isoDate, earliestDate, latestDate) {
	return (isValidDate(isoDate) && isoDate>= earliestDate && isoDate<=latestDate);
}	

function isValidArrivalDate() {
	return isValidDspDate(getArrivalDate(),gStartDate,gEndDate);
}

function getArrivalDate() {
	return getDspDate(getArrivalDayField(),getArrivalDateField());
}

function getMonthName(month,monthNames) {
	var names=monthNames.split('|');
	return names[month-1];
}

function cvtISOToDate(isoDate) {
	var atomDate= isoDate.split('-');
	var aDate=new Date(parseInt(atomDate[0],10),parseInt(atomDate[1],10)-1,parseInt(atomDate[2],10),6,0,0);
	return aDate;
}

function fmtDateISO(aDate) {
	with (aDate) {
		var mm=getMonth()+1;
		if (mm<10) {mm='0'+mm;}
		var dd=getDate();
		if (dd<10) {dd='0'+dd;}
		return (getFullYear() + '-' + mm + '-' + dd);
	}
}

function addDays(isoDate, noOfDays) {
	var aDate=cvtISOToDate(isoDate);
	if (!aDate) return "";
	var millis=86400000 * noOfDays;
	aDate=new Date(aDate.getTime()+millis);
	return fmtDateISO(aDate);
}


function calcCheckOut() {
	var newDate='';
	if (isValidArrivalDate()) {
		var nts=Number(getSelectionValue(getNightsField()));
		if (nts>0) {
			var dates=addDays(getArrivalDate(),nts).split('-');
			var el=new Array('D','M','Y');
			el['Y']=dates[0];
			el['M']=getMonthName(dates[1],gMonthNames);
			el['D']=dates[2];
			newDate=el[gDateFormat.charAt(0)]+' '+el[gDateFormat.charAt(1)]+' '+el[gDateFormat.charAt(2)];
		}
	}
	return newDate;
}


function changeCheckOut() {
	var newDate=calcCheckOut();
	if (newDate!='') {
		var layer=getLayer("ContentCheckOut");
		if (!layer) layer=getLayer("DivCheckOut.document.ContentCheckOut");
		writeToLayer(layer,'<B>'+newDate+'</B>');
	}
	showField("DivCheckOut",newDate!='');
}

function changeDate() {
	changeCheckOut();
}

function buildNumericSelection(from,count,minSize,asString,increment,suppressBlank) {
	var s="  ";
	var delta=1;
	if(increment)
		delta=increment;
	var doSep=true;
	if (suppressBlank!=null) {
		doSep=!suppressBlank;
		s='';
	}
	var max=from+count;
	for (var i=from; i<max; i=i+delta) {
		if (doSep)
			s+="|";
		s+=pad(String(i),"0",minSize);
		doSep = true;
	}
	return buildSelection(s,null,null,asString);
}

function monthDiff(date1,date2) {
	var mth1=Number(date1.substr(0,4)) * 12 + Number(date1.substr(5,2));
	var mth2=Number(date2.substr(0,4)) * 12 + Number(date2.substr(5,2));
	return Math.abs(mth1-mth2);
}

function checkForm() {
return checkCity() && checkDate() && checkNts() && checkRooms() && checkLoc() && checkStar() && checkCurrency();
}


function checkFormSmall() {
return checkCity() && checkDate() && checkNts() && checkRoomsSmall()  && checkStar() && checkCurrency();
}

function checkCity() {
	var value=getSelectionValue(getCityField());
	if (value=='' || value.substring(0,1)=='S') {
		alert(gMsg8);
		return false;
	}
	return true;
}

function checkDate() {
	if (!isValidArrivalDate()) {
		alert(gMsg1);
		return false;
	}
	return true;
}

function checkNts() {
	if (Number(getSelectionValue(getNightsField()))<1) {
		alert(gMsg2);
		return false;
	}
	return true;
}

function roomError(msg,number) {
	alert ('('+gRoomText+' '+(++number)+'):'+msg);
}


function checkRooms() {
	var type,count,cots;
	var roomLines=getRoomLines();
	gPax=gAdults=gChildren=0;
	for (var i=0; i<roomLines; i++) {
		type=getSelectionValue(getRoomTypeField(i));
		count=Number(getSelectionValue(getRoomCountField(i)));
		cots=Number(getSelectionValue(getRoomCotField(i)));
		if (type!=' ' || count!=0 || cots!=0) {
			if (type==' ') {
				roomError(gMsg5,i);
				getRoomTypeField(i).focus();
				return false;
			}
			if (count==0) {
				roomError(gMsg6,i);
				getRoomCountField(i).focus();
				return false;
			}
			// Кроватки для младенцев не разрешены в номерах SB
			if (type=='6' && cots!=0) {
				roomError(gMsg9,i);
				getRoomCotField(i).focus();
				return false;
			}
			gAdults+= gAdultCounts[type] * count;
			gChildren+= gChildCounts[type] * count;
			var childCount=0;
			for (var j=0; j<3; j++) {
				var age=getSelectionValue(getRoomAgeField(i,j));
				if (age!=null && Number(age)!=0) {
					childCount++;
				}
			}
			if (childCount!=(gChildCounts[type] * count)) {
				// Разрешается не более 3-х детей
				if (count<=3) {
					roomError(gMsg7,i);
					return false;
				}
			}	
		}
	}
	gPax=gAdults + gChildren;
	if (gPax > gMaxPax) {
		alert(gMsg3+(gMaxPax<9?gMsg3a:''));
		return false;
	}
	if (gPax==0) {
		alert(gMsg4);
		return false;
	}
	if (gChildren > gMaxChildren) {
		alert(gMsg12+gMaxChildren);
		return false;
	}
	return true;
}


function checkRoomsSmall() {
	var count;
		count=Number(getSelectionValue(getLayer('RoomCount')));
		if (count==0) {
				alert(gMsg6);
				getLayer('RoomCount').focus();
				return false;
		}
	return true;
}




function checkLoc() {
	var value=getSelectionValue(getLocField());
	if (value=='' || value.substring(0,1)=='S') {
		alert(gMsg16);
		return false;
	}
	return true;
}
function checkStar() {
	if (getStarField().selectedIndex< 0) {
		alert(gMsg15);
		return false;
	}
	return true;
}


function checkCurrency() {
	if (getSelectionValue(getCurrencyField())=='') {
		alert(gMsg18);
		getCurrencyField().focus();
		return false;
	}
	return true;
}


function packageRooms(number) {
	gRooms=gAges="";
	var value="";
	var obj,type,count;
	for (var i=0; i<number; i++) {
		type=getSelectionValue(getRoomTypeField(i));
		gRooms+=type;
		count=getSelectionValue(getRoomCountField(i));
		gRooms+=count;
		gRooms+=String(getSelectionValue(getRoomCotField(i)));
		if (isChildRoom(type)) {
			var nc=Number(count);
			for (var j=0; j<nc; j++) {
				value=getSelectionValue(getRoomAgeField(i,j));
				if (value==null) {
					value='00';
				} else {
					value=pad(value,"0",2);
				}
				gAges+=value;
			}
		}
	}
}


function getFacilities() {
	// Build selected facilities list 
	var facArray = gFacs.split('|');
	var obj;
	var facList = "";
	if (gHasFacs) {
		for (i=0;i<facArray.length;i++) {
			obj=eval("document.wh.Fac"+facArray[i]);
			if (obj && obj.checked) {
				facList += facArray[i]+'|';
			}
		}
	}
	// Return the list of selected facilities
	return facList;
}




function submitForm(submitter,receiver,ButtonId,DivName) {
		if (gLoaded) {
		with(receiver) {
			packageRooms(getRoomLines());
			var dest=getSelectionValue(getCityField());
			destType.value=dest.substr(0,1);
			destCode.value=dest.substr(1,4);
			with (getCityField())
			cityName.value=options[selectedIndex].text;
			arrival.value=getArrivalDate();
			duration.value=getSelectionValue(getNightsField());
			loc.value=getSelectionValue(getLocField());
			rooms.value=gRooms;
			ages.value=gAges;
			adults.value=gAdults;
			children.value=gChildren;
			hotelName.value=trim(getHotelNameField().value);
			order.value=getSelectionValue(getOrderField());
			star.value=getSelectionValue(getStarField());
			facilities.value=getFacilities();
			currency.value=getSelectionValue(getCurrencyField());
		with (submitter) {
			gRooms = rooms.value;
			gAges= ages.value;
			gAdults = adults.value;				
			gDuration= duration.value;
			gCity=dest;
			gArrival= arrival.value;
			gCategory="  ";
			gLoc= loc.value;
			gBudget="0";
			gHotelName=hotelName.value;
			gOrder=order.value;
			gStar=star.value;
			gChildren = children.value; 
			gCityName = cityName.value;
			gFacilities=facilities.value;
			gCurrency=currency.value;
			}
		gLoaded=false;
		submit();
		}
	}
	return false;
}

function submitForm2(submitter,receiver,ButtonId,DivName) {
		if (gLoaded) {
		with(receiver) {
		    if (document.wh.nNumberOfGuests[0].checked==true){
		        NumberOfGuests.value=1;
		    }
		    if (document.wh.nNumberOfGuests[1].checked==true){
		        NumberOfGuests.value=2;
		    }
		    if (document.wh.avail.checked==true){
		        avail.value=1;
		    }
		    if (document.wh.avail.checked==false){
		        avail.value=0;
		    }
			destCode.value=getSelectionValue(getCityField());
			with (getCityField())
			cityName.value=options[selectedIndex].text;
			arrival.value=getArrivalDate();
			duration.value=getSelectionValue(getNightsField());
			rooms.value=getSelectionValue(getLayer("RoomCount"));
			star.value=getSelectionValue(getStarField());
			currency.value=getSelectionValue(getCurrencyField());
		with (submitter) {
			gRooms = rooms.value;
			gNumberOfGuests=NumberOfGuests.value
			gDuration= duration.value;
			gCity=destCode;
			gArrival= arrival.value;
			gStar=star.value;
			gCityName = cityName.value;
			gCurrency=currency.value;
			gAvail=avail.value;
			}
		gLoaded=false;
		submit();
		}
	}
	return false;
}

function moveWin(win,x,y) {
	win.moveTo(x,y);
}


function displayWindow(WindowNumber,additional,width,height) {
	var win=gWindow;
	var w=(width!=null)?width:600;
	var h=(height!=null)?height:450;
	additional=(additional!=null)?additional:'';
	if (!win || win.closed) {
		win= window.open(parent.location+"?Delim=&DesignOff=1&WindowNumber="+WindowNumber+'&additional='+additional,"","width="+w+",height="+h+",location,status,resizable,scrollbars");
		moveWin(win,screen.availWidth-600,30);
		gWindow=win;
	} else {
		//if (win.closed) win.open();
		win.location.replace(parent.location+"?Delim=&DesignOff=1&WindowNumber="+WindowNumber+'&additional='+additional);
		win.focus();
	}
	return false;
}

function setCity(city, cityName, countryName) {
	return setCommonCity(city,cityName,countryName);
}
	
function setCommonCity(city, cityName, countryName) {
	var cityAndCountryName= cityName;
	if (trim(countryName).length>0)
		cityAndCountryName+=', '+countryName;
	var obj=getCityField();
	if (addToOptionList(obj, cityAndCountryName, city)) {
		var optArr=valArr=sep='';
		var len=obj.options.length;
		for (var idx=0; idx< len; idx++) {
			if (obj.options[idx].value!='SOTHR') {
				optArr+= sep+obj.options[idx].text;
				valArr+= sep+obj.options[idx].value;
				sep='|';
			}
		}
		parent.gCityOpt=optArr;
		parent.gCityVal=valArr;
	}
	return true;
}
function setCommonArea(city, cityName) {
	var obj=getCityField();
	if (addToOptionList(obj, cityName, city)) {
		var optArr=valArr=sep='';
		var len=obj.options.length;
		for (var idx=0; idx< len; idx++) {
			if (obj.options[idx].value!='SOTHR') {
				optArr+= sep+obj.options[idx].text;
				valArr+= sep+obj.options[idx].value;
				sep='|';
			}
		}
		parent.gCityOpt=optArr;
		parent.gCityVal=valArr;
	}
	return true;
}


function addToOptionList(obj, newOption, newValue) {
	var idx= getIndexOfOption(obj, newValue);
	var add= idx< 0 ? true: false;
	if (add)
		idx= addSortedSelection(obj, newOption, newValue);
	setOptionSelected(obj, idx);
	return add;
}


function addSortedSelection(obj, newOption, newValue) {
	var idx= obj.options.length;
	obj.options[obj.options.length]= new Option(' ', ' ');
	while (idx> 0 && obj.options[idx-1].text> newOption) {
		obj.options[idx].text= obj.options[idx-1].text;
		obj.options[idx].value= obj.options[idx-1].value;
		idx--;
	}
	obj.options[idx].text= newOption;
	obj.options[idx].value= newValue;
	return idx;
}

function setOptionSelected(obj, idx) {
	//obj.options[idx].selected= true;
	obj.selectedIndex= idx;
}
