// (c) RBA Software Ltd 2001
var gDelimiter=new String("|");
var gIsNav=(navigator.appName.indexOf("Netscape") >= 0);
var gIsIE=(navigator.appName.indexOf("Microsoft") >= 0);

//could be function, returns boolean of IE version.
var gIsIE6=(gIsIE && navigator.appVersion.indexOf("MSIE 6.0") >= 0);

var gAdultCounts=new Array(2,2,2,2,2,2,1,3,1,4);
var gChildCounts=new Array(0,1,2,0,1,2,0,0,0,0);

function getSelectionValue(obj) {
	if (obj && obj.selectedIndex >= 0) {
		return obj.options[obj.selectedIndex].value;
	}
	return '';
}

function getRadioValue(obj) {
	if (obj) {
		for (var i=0; i<obj.length; i++) {
			if (obj[i].checked)
				return obj[i].value;
		}
	}
	return null;
}

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 isDspField(field) {
	var obj=getLayer(field);
	if (!obj) return false;
	if (obj.style) 
		return (obj.style.display=="inline");
	return (obj.display=="block");
}

function dspField(field,show) {
	var obj=getLayer(field);
	if (!obj) return;
	if (obj.style) {
		obj.style.display=show ? "inline" : "none";
	} else {
		obj.display=show ? "block" : "none";
	}
	return false;
}

function getLayer(layer) {
	if (document.all) 
		return eval('document.all.'+layer);
	if (document.getElementById) 
		return document.getElementById(layer);
	return eval('document.'+layer);
}

function writeToLayer(layer,text) {
	if (!layer) return;
	if (document.layers) {
		layer.document.write(text);
		layer.document.close();
	} else {
		layer.innerHTML=text;
	}
}

function setRadioValue(obj,value) {
	if (!obj || value==null)
		return;
	if (value.length>0) {
		for (var i=0; i<obj.length; i++) {
			if (obj[i].value==value) {
				obj[i].checked=true;
				return;
			}
		}
	}
}

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 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 buildAdults(adults,selected,asString) {
	var opts="";
	for (var i=1; i<=adults; i++)
		opts+="|"+String(i);
	return buildSelection(opts,opts,selected,asString);
}

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 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;
	try {
		names=monthNames.split("|");
	} catch (e) {
		names=monthNames;
	}

	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 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 buildTimeSelection(asString) {
	var opts=" ";
	var vals="0";
	for (var h=0; h<24; h++) {
		for (var m=0; m<60; m+=5) {
			opts+="|"+String(h)+':'+pad(String(m),"0",2);
			vals+="|"+String(h*100+m);
		}
	}
	return buildSelection(opts,vals,asString);
}

function statusMsg(msg) {
	window.status=msg;
	parent.canScroll = false;
	return true;
}

function hideMsg() {
	window.status='';
	parent.canScroll = true;
	return true;
}

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 isEmpty(text) {
	return (trim(text).length==0);
}

function changeSelection(obj, val, newOption, newValue) {
	with (obj) {
		for (var idx= 0; idx< options.length; idx++) {
			if (options[idx].value== val) {
				options[idx].text= newOption;
				options[idx].value= newValue;
				break;
			}
		}
	}
}

function getIndexOfElement(arr, val) {
	for (var idx=0; idx< arr.length; idx++) {
		if (arr[idx]== val) {
			return idx;
		}
	}
	return null;
}

function pad(str,padChar,minLen,right) {
	var count=minLen - str.length;
	while (count-- > 0)
		str=(right)?(str + padChar):(padChar + str);
	return str;
}

function getChildAgeOpt(min,max) {
	var s='';
	var delim='';
	for (var i=min; i<=max; i++) {
		s+=delim+String(i);
		delim="|";
	}
	return s;
}

function getChildAgeVal(min,max) {
	return getChildAgeOpt(min,max);
}
	
function getRoomTypeDesc(type) {
	var i=getIndexOfElement(gRoomTypeVal.split("|"),type);
	if (i==null)
		return '';
	return (gRoomTypeOpt.split("|"))[i];
}

function truncateEmptyOptions(text) {
	var optionListText= new String(text);
	for (var idx= (optionListText.length-1); idx>= 0; idx--) {
		if (optionListText.charAt(idx)!= "|") {
			return (optionListText.substring(0, (idx+1)));
		}
	}
	return optionListText;
}

function ResetForm(form) {
	form.reset();
	initForm(form);
}

function displayCalendar(event,cal) {
	var win=top.gCalWindow;
	if (!win || win.closed) {
		if (!cal)
			cal="Calendar.jsp";
		win=window.open(cal,"Calendar","width=250,height=185,scrollbars=no,resizable="+(document.layers?"no":"yes"));
		top.gCalWindow=win;
		moveWin(win,event.screenX,event.screenY);
	} else {
		if (win.closed) win.open();
		win.crtCal();
		win.focus();
	}
	return false;
}

function showBusy(text,showImage) {
	var s='<html><head>'+ parent.gStyleSheet+ '</head>';
	s+='<body><table width=100% cellspacing="0" cellpadding="0" align="center" border=0><tr>';
	s+='<td class=titlerow width="100%" align="left">'+text+'...</td></tr></table>';
	if (showImage)
		s+=parent.gWaitImage;
	s+='</body></html>';
	return s;
}

function goWait(url,submitter,target) {
	location.replace(url+'?submitter='+submitter+'&target='+target);
}

function showElementsIn(select) {
	var text='';
	var select=window.prompt("Show what?",select);
	var obj=eval(select);
	if (obj) {
		if (typeof(obj)!="object") {
			text=select+'='+obj;
		} else {
		for (var idx in obj) {
			text+=', ' + idx + '=' + obj[idx];
		}}
		alert(text);
	}
}

function addSelection(obj, newOption, newValue) {
	obj.options[obj.options.length]= new Option(newOption, newValue);
	return obj.options.length-1;
}

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 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 addToEndOfOptionList(obj, newOption, newValue) {
	var idx= getIndexOfOption(obj, newValue);
	var add= idx< 0 ? true: false;
	if (add) {
		idx= obj.options.length;
		obj.options[idx]= new Option(' ', ' ');
		obj.options[idx].text= newOption;
		obj.options[idx].value= newValue;
	}
	setOptionSelected(obj, idx);
	return add;
}

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 setOptionSelected(obj, idx) {
	//obj.options[idx].selected= true;
	obj.selectedIndex= idx;
}

function displaySearchDest(url,width,height) {
	var win=top.gSearchDestWindow;
	var w=(width!=null)?width:600;
	var h=(height!=null)?height:450;
	if (!win || win.closed) {
		win= window.open(url,"","width="+w+",height="+h+",resizable,scrollbars");
		moveWin(win,screen.availWidth-600,30);
		top.gSearchDestWindow=win;
	} else {
		if (win.closed) win.open();
		win.location.replace(url);
		win.focus();
	}
	return false;
}

function displayEmailSearchLightbox(url,event,client,value) {
	var win=top.gSearchEmailWindow;
	url+='?searchClientId='+client+'&search='+escape(value);
	lightbox(url, '', event,440,600);
	return false;
}

function displayEmailSearch(url,client,value) {
	var win=top.gSearchEmailWindow;
	url+='?searchClientId='+client+'&search='+escape(value);
	if (!win || win.closed) {
		win= window.open(url,"","width=800,height=400,resizable,scrollbars");
		moveWin(win,screen.availWidth-850,30);
		top.gSearchEmailWindow=win;
	} else {
		if (win.closed) win.open();
		win.location.replace(url);
		win.focus();
	}
	return false;
}

function displayInfoWindow(event,url,city,code,lang,book,existBed,immed,supplier,rooms,listName,row) {
	url+='?city='+trim(city)+'&item='+trim(code)+(book!=null?'&book='+trim(book)+'&existBed='+trim(existBed)+'&immed='+trim(immed):'');
	if (supplier!=null && rooms!=null)
		url+= '&supplier='+supplier+'&rooms='+rooms;
	if (listName!=null && row!=null)
		url+= '&listName='+listName+'&row='+row;
	lightboxFull(url, '', event);
	return false;
}

function closeWindows() {
	closeCal();
	closePopUp();
	closeSearchDest();
	closeInfo();
	closeSearchEmail();
}

function closeCal() {
	var win=top.gCalWindow;
	if (win!= null && !win.closed)
  		win.close();
}

function closePopUp() {
	var win=top.gPopUpWindow;
	if (win!= null && !win.closed)
  		win.close();
}

function closeSearchDest() {
	var win=top.gSearchDestWindow;
	if (win!= null && !win.closed)
  		win.close();
}

function closeSearchEmail() {
	var win=top.gSearchEmailWindow;
	if (win!= null && !win.closed)
  		win.close();
}

function closeInfo() {
	var win=top.gInfoWindow;
	if (win!= null && !win.closed)
  		win.close();
}

function getStatusDesc(code,descList,codeList) {
	for (var i=0; i<codeList.length; i++) {
		if (code==codeList[i]) {
			return descList[i];
		}
	}
	return " ";
}

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 setCommonUI(ui, name, type) {
	var obj=getUI(type);
	if (addToOptionList(obj, name, ui)) {
		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='|';
			}
		}
	}
	return true;
}


function moveWin(win,x,y) {
	win.moveTo(x,y);
}

function openPopUp(url,event,width,height,move,centre,options) {
	var win=top.gPopUpWindow;
	if(width==null)	width = 500;
	if(height==null) height = 500;
	
	try {
		if (!win || win.closed) {
			if (!options) {
				options="resizable,scrollbars";
			}
			win=window.open(url,"","width=" + width + ",height=" + height + ","+options);
			top.gPopUpWindow=win;		
	
			if (move)
				if(centre){
					moveWin(win,(screen.availWidth-width)/2,(screen.availHeight-height)/2)
				}else{
					moveWin(win,screen.availWidth-width-20,20);
				}
		} else {
			if (win.closed) win.open();
			win.focus();
			win.location.replace(url);
		}
	} catch (e) {}
	return false;
}

function openInfo(url,event,width,height) {
	try {
		if (width && height) {
			return lightbox(url, '', event, height, width);		
		} else {
			return lightboxFull(url, '', event);
		}
	} catch (e) {
		location=url;
		return false;
	}
}

function showItem(event,url,city,code,lang,book,existBed,immed) {
	return openInfo(url+'?city='+trim(city)+'&item='+trim(code)+(book!=null?'&book='+trim(book)+'&existBed='+trim(existBed)+'&immed='+trim(immed):''),event);
}

function showRSItem(event,url,city,code,lang,date,langList,spcCode) {
	return openInfo(url+'?city='+escape(city)+'&item='+escape(code)+'&date='+escape(date)+'&langlist='+escape(langList)+'&spccode='+escape(spcCode),event);
}

function showTNItem(event,url,city,item,type,vhcInfo) {
	return openInfo(url+'?minCat='+type+'&city='+city+'&item='+escape(item)+'&vhcInfo='+vhcInfo,event);
}

function showSBItem(event,url,city,item,date,langlist,direction,isReturn,book,row) {
	return openInfo(url+'?city='+escape(city)+'&item='+escape(item)+'&date='+escape(date)+'&langlist='+escape(langlist)+'&isReturn='+escape(isReturn)+'&direction='+escape(direction)+(book!=null?'&book='+trim(book):'')+(row!=null?'&row='+trim(row):''),event);
}

function showAAInfo(event,url,type,city,item,lang,dur,startDate) {
	return openInfo(url+'?apttype='+escape(type)+'&city='+escape(city)+'&item='+escape(item)+'&dur='+escape(dur)+'&startdate='+escape(startDate),event);
}

function showHHInfo(event,url,city,item,lang,supplier,rooms,itemDate) {
	url += '?city='+trim(city)+'&item='+trim(item)+'&supplier='+supplier+'&rooms='+rooms;
	if (itemDate)
		url += "&itemdate="+itemDate;
	try {
		return lightboxFull(url,'',event);
	} catch (e) {
		return openInfo(url,'',event);
	}
}

function showPKInfo(event,url,city,item,startDate) {
	return openInfo(url+'?city='+escape(city)+'&item='+escape(item)+'&startdate='+escape(startDate),event);
}

function showVHInfo(event,url,suppCity,supp,destCity,acriss,servDate,crtDate) {
	return openInfo(url+'?suppCity='+suppCity+'&supp='+supp+'&destCity='+destCity+'&acriss='+acriss+'&servDate='+servDate,event);
} 

function showFlashPrsnt(url,city,item,itemType,imgType,printImgType,itemDesc) {
	gItemDesc=itemDesc;
	return openPopUp(url+'?city='+trim(city)+'&item='+trim(item)+'&itemType='+itemType+'&imgType='+imgType+'&printImgType='+printImgType,null,600,500);
}

//OCT604 
function showMeetingPointMap(url,startDate,city,item,itemType,imgType,printImgType) {
	return openPopUp(url+'?city='+trim(city)+'&item='+trim(item)+'&itemType='+itemType+'&startDate='+startDate+'&imgType='+imgType+'&printImgType='+printImgType,null,600,500);
}

function showFlashImage(url,imgType,printImgType,itemDesc,image,srvType) {
	parent.opener.gItemDesc=itemDesc;
	return location.href=url+'?imgType='+imgType+'&printImgType='+printImgType+'&image='+image+'&srvType='+srvType;
}

function showGroupInfo(event,url,ui) {
	return openInfo(url+'?ui='+ui,event);
}
function showClientInfo(event,url,clientId,page,from) {
	if (from != null) {
		if (clientId.length == 0) {
			if (from=='BKG') {
				alert(gMsg5);
				return false;
			}
			if (from=='ITM') {
				alert(gMsg4);
				return false;
			}
			if (from==' ') {
				alert(gMsgClient);
				return false;
			}
		}
	}
	try {
		return lightbox(url+'?clientId='+clientId+'&nextPage='+page,'',event,450,600);
	} catch (e) {
		return openPopUp(url+'?clientId='+clientId+'&nextPage='+page,event,600,450);
	}
}

function showInfo(event,url,type,city,item,lang,book,existBed,immed,dur,startDate) {
	if (type=='HH') {
		return showItem(event,url,city,item,lang,book,existBed,immed);
	}
	if (type=='AA') {
		return openInfo(url+'?apttype='+escape(type)+'&city='+escape(city)+'&item='+escape(item)+'&dur='+escape(dur)+'&startdate='+escape(startDate),event);
	}
	return openPopUp(url+'?type='+escape(type)+'&city='+escape(city)+'&item='+escape(item),event,400,200,false);
}

function showRPInfo(event,url,prodUI) {
	return openInfo(url+'?prodUI='+prodUI,event);
}

function showRPInfo(event,url,prodUI,anchor) {
	return openInfo(url+'?prodUI='+prodUI+"#"+anchor,event);
}

function showRPPassInfo(event,url,prodUI,tfHdrUI,tfRteUI) {
	return openInfo(url+'?prodUI='+prodUI+'&tfHdrUI='+tfHdrUI+'&tfRteUI='+tfRteUI+"#passRestrictions",event);
}

function showINInfo(event,url) {
	try {
		return lightbox(url,'',event,600,800);
	} catch (e) {
		return openPopUp(url,event,800,600,false);
	}
}

function showPics(event,url,city,code,lang) {
	return showItem(event,url,city,code,lang);
}

function showMap(event,url,city,code,itemType, listName, row, mapProvider) {
	var url = url+'?city='+trim(city)+'&item='+trim(code)+'&itemType='+trim(itemType);
	if(isIMapProvider(mapProvider)){
		url += '&listName='+listName;
		url += '&row=' + row;
	}
	return openPopUp(url,event,800,500,false,false,"resizable,scrollbars,status");
}

function getKeyEvent(event) {
	if (event.keyCode)
		return event.keyCode;
	if (event.which)
		return event.which;
	return 0;
}

function editKey(event,delimiters) {
	var key=getKeyEvent(event);
	if (key==8 || key==9) return true;
	var chr=String.fromCharCode(key);
	if (delimiters==null)
		delimiters='/\\d/';
	var exp=eval(delimiters);
	return chr.match(exp)!=null;
}

function checkPaste(event){
	if(!gIsIE){
		return !(event.ctrlKey && editKey(event, "/v/i"));
	}
}

function openPaymentPopUp(url,event) {
	var win=top.gPaymentWindow;
	if (!win || win.closed) {
		win=window.open(url,"Payment","width=400,height=500,resizable,scrollbars,status");
		top.gPaymentWindow=win;
		var y=(event!=null)?event.screenY:9999;
	} else {
		if (win.closed) win.open();
		win.focus();
		win.location.replace(url);
	}
	return false;
}

function closePaymentPopUp() {
	var win=top.gPaymentWindow;
	if (win!= null && !win.closed)
  		win.close();
}

function roll(imgName,rollover) {
	document.images[imgName].src = gRoll[rollover].src;
}

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 getFirstOption(options) {
	var str='';
	var o=options.split("|");
	if (o.length==2)
		str=o[1];
	return str;
}


function addFavourite(url,name) {
	try {
		if (typeof window.external!="undefined") {
			// IE
			window.external.AddFavorite(url,name);
			return false;
		}
		// Doesn't work properly
		// Mozilla
		//if (typeof window.sidebar.addPanel!="undefined") {
		//	window.sidebar.addPanel(name,url,"");
		//	return false;
		//}
	} catch(e) {}
	// Assume all others need cut+paste
	window.prompt(gFavourite,url);
	return false;
}

function showInfoApt(event,url,type,city,item,aptType,lang,dur,startDate,book,listName,propertyId,fixed,cotMsg,recommend) {
	if ((type=='HH') || (type=='AA')){
		return showItemApt(event,url,city,item,aptType,dur,startDate,book,listName,propertyId,fixed,cotMsg,recommend);
	}
}

function showItemApt(event,url,city,code,aptType,dur,startDate,book,listName,propertyId,fixed,cotMsg,recommend) {
   	return openInfo(url+'?city='+trim(city)+'&item='+trim(code)+'&apttype='+trim(aptType)+'&dur='+trim(dur)+'&startdate='+trim(startDate)+(book!=null?'&book='+trim(book):'')+(listName!=null?'&listName='+trim(listName):'')+(propertyId!=null?'&propertyId='+trim(propertyId):'')+(fixed!=null?'&fixedStay='+trim(fixed):'')+(cotMsg!=null?'&showCotMsg='+trim(cotMsg):'')+(recommend!=null?'&recommend='+trim(recommend):''),event);
}	

function showDuration(days,hrs,mins,asString) {
	var s="";
	if (days>0) {
		s+=days + "&nbsp;" + gDurText[(days==1)?0:1] + " ";
	}
	if (hrs>0) {
		s+=hrs + "&nbsp;" + gDurText[(hrs==1)?2:3] + " ";
	}
	if (mins>0) {
		s+=mins + "&nbsp;" +gDurText[4];
	}
	if(asString)
		return s;
	document.write(s);
}

function showSpecialOffer(event,url,city,code,type,desc,cityName,startDate,endDate, tourLang, omitFrDt) {
	parent.gSpcOfferCityName=cityName;
	parent.gSpcOfferItemName=desc;

	var qryStr ='?city='+trim(city)+'&item='+trim(code)+'&type='+trim(type)+'&startDate='+trim(startDate)+'&endDate='+trim(endDate) +'&tourLang=' +trim(tourLang);
	if (omitFrDt!=null)
		qryStr+='&omitFrDt='+omitFrDt;
	try {
		return lightbox(url+qryStr,'',event,310,600);
	} catch (e) {
		return openPopUp(url+qryStr,event,600,300,false);
	}
}

function showIdeas(event,url,city,item,cityName,srvType) {
	return openPopUp(url+'?city='+trim(city)+'&item='+trim(item)+'&cityName='+cityName+'&srvType='+srvType,event,600,500);
}

function showSchedule(event,url,city,item,date,langList,direction,isReturn) {
	return openPopUp(url+'?city='+escape(city)+
	                     '&item='+escape(item)+
	                     '&date='+escape(date)+
	                     '&langList='+escape(langList)+
	                     '&direction='+escape(direction) +
	                     '&isReturn='+escape(isReturn),event,900, 400, false);
}

function rtnBasket(url) {
	if (gLoaded) {
		location.href=url;
	}
	return false;
}

function dspTable(field,show) {
	var obj=getLayer(field);
	if (!obj) 
		return;
	if (obj.style) {
		if (gIsIE) {
			obj.style.display=show ? "inline" : "none";
		} else {
			obj.style.display=show ? "table" : "none";
		}
	} else {
		obj.display=show ? "block" : "none";
	}
	return false;
}

function dspTableRow(field,show) {
	var obj=getLayer(field);
	if (!obj) 
		return;
	if (obj.style) {
		if (gIsIE) {
			obj.style.display=show ? "inline" : "none";
		} else {
			obj.style.display=show ? "table-row" : "none";
		}
	} else {
		obj.display=show ? "block" : "none";
	}
	
	showField(field,show);
	return false;
}

function makeArray(numberOfElements, initialValue) {
  if (numberOfElements==null) {
    numberOfElements = 1;
  }
  if (initialValue==null) {
    initialValue = "";
  }
  var arr = new Array(numberOfElements);
  for (var i=0;i<numberOfElements;i++) {
    arr[i] = initialValue;
  }
  return arr;
}

function showStayOffer(event,url,offerUI,itemCode) {
	try {
	return lightbox(url+'?offerUI='+trim(String(offerUI))+'&itemCode='+trim(itemCode),'',event,315,400);
	} catch (e) {
		return openPopUp(url+'?offerUI='+trim(String(offerUI))+'&itemCode='+trim(itemCode),event,315,400);
	}
}

function showLeadTime(event,url,desc) {
	this.desc = desc;
	try {
		return lightbox(url,'',event,350,600);
	} catch (e) {
		return openPopUp(url,event,600,350);
	}
}

function showRichMedia(event,url) {
	return openPopUp(url,event,800,600); 
}

function specialCond(event,type,bkgUI,itemUI,idx,crtDate,strDate,listName,subIdx,hasCharges,hasMinStay,hasHotelRst,rvn,isGC) {
	if (!gLoaded) return false;
	
	//Basic special condition link
	var url=gSpecialConditionUrl+'?type='+type+'&bkgUI='+bkgUI+'&itemUI='+itemUI;
	
	//Extra information
	if (!isNaN(idx)) url+='&idx='+idx;
	if (!isNaN(subIdx)) url+='&subIdx='+subIdx;
	if (listName) url+='&listName='+listName;
	if (crtDate && strDate)	url+='&crtDate='+crtDate+'&strDate='+strDate;
	if (hasCharges) url+='&hasCharges=true';
	if (hasMinStay) url+='&hasMinStay=true';
	if (hasHotelRst) url+='&hasHotelRst=true';
	if (rvn!=null) url+='&itemRvn='+rvn;
	if (isGC!=null) url+='&isGC='+isGC;
	try {
		return lightbox(url,'',event,400,750);
	} catch (e) {
		return openPopUp(url,event,600,500);
	}	
}

function checkYear(arrivalDate,nextYear,msg) {
	if (gChkDate && arrivalDate>nextYear) {
		return confirm(msg);
	}
	return true;
}

function setCookie(label, value){
	document.cookie = label + "=" + value;
}

function getCookieData(label){
	var labelLen = label.length;
	var cLen = document.cookie.length;
	var i=0;
	var cEnd;
	while(i < cLen){
		var j = i+labelLen;
		if(document.cookie.substring(i,j) == label){
			cEnd = document.cookie.indexOf(";", j);
			if(cEnd==-1){
				cEnd = document.cookie.length;
			}
			return unescape(document.cookie.substring(j+1, cEnd));
		}
		i++;
	}
	return "";
}
function isIMapProvider(mp){
	return mp && mp != '1' && mp != '2' && mp != '9';
}

function hasNoMapProvider(mp){
	return mp == '9';
}
function doSubstitution(template, subs){
	var re = /{(\d)}/;
	var str=template;
	var matchArr = str.match(re);
	while(matchArr != null){
		str = str.replace(matchArr[0], subs[matchArr[1]]);
		matchArr = str.match(re);
	}
	return str;
}

function isValidEmailAddrStr(addr) {
	// Ensure email contains no double quotes or spaces (possible that user pasted into field)
    addr=addr.replace(/["\s]/g,"");
	var str=new String(addr);
	var exp=eval("/^.+@{1,1}.+\\.{1,1}.+/g");
	var matches=str.match(exp);
	if (matches && matches.length==1 && matches[0]==str) {
		return true;
	}
	return false;
}

function priceBreakdown(url,qryStr,event) {
	return lightbox(url+qryStr,'',event,380,900);
}

function helpRoomTypes(event, url, parms) {
    url+= (parms!=null)? parms: '?page=help/HlpRooms.html&title=TXT0984&noFooter=Y&noButton=Y';
    try {
        return lightbox(url, '', event, 400, 600);
    } catch (e) {
        window.open(url,'','width=600,height=450,resizable,scrollbars');
    }
    return false;
}

function showCond(url, event) {
	try {
		return lightbox(url,'',event,400,600);
	} catch (e) {
		window.open(url,'','width=600,height=450,resizable,scrollbars');
	}
	return false;
}

function showBreakfast(url, event) {
	try {
		return lightbox(url,'',event,400,600);
	} catch (e) {
		openPopUp(url,event,600,250);
	}
	return false;
}

function windowElementsHider() {
	var len = 0
	try {
	len = self.parent.document.getElementById('TB_window');
		if (len == null || len == 0) {
			showWindowButtons();
		}
	} catch (e) {
			showWindowButtons();
	}
}

function showWindowButtons() {
			$("#closeButton").removeClass("hideMe");
			$("#pageFooter").removeClass("hideMe");
			$("#closeButton2").removeClass("hideMe");
}

function waitbox(targetURL, title, event, height, width) {
	/** check that the page size is reasonable.
	 we will use the size passes, but if it is too big for the window we will set it to the window size.
	 thickbox will default to 630 x 440 if too this is still too small.
	*/
	var size = getPageSize();
	
	if (height > size[0])
		height = size[0];
		
	if (width > size[1])
		width = size[1];
	
	var joiner = "?";
	if (targetURL.indexOf('?') > 0)
		joiner = "&";

	var lbAnim = top.gLightboxAnimationImg;
	if (lbAnim == undefined) {
		lbAnim = opener.top.gLightboxAnimationImg;
	}
	
	var newTargetURL = targetURL + joiner + "height=" + height + "&width=" + width + "&animationImg=" + escape(lbAnim)+"&TB_inline=true&inlineId=waitLightboxContent&modal=true";
	
	tb_show(title,newTargetURL);

	return false;
}

function buildSearchMsg() {
	var spanStr = '<span class="searchTextBold">';
	var spanEnd = '</span>';
	var msg = (getNightsField().value>1)? gSearchMsgPLR : gSearchMsgSNG;
	msg = msg.replace("\{0\}", spanStr);
	msg = msg.replace("\{1\}", spanEnd);
	if (gIsFreeFormatSearchEnabled) {
		var obj = eval(gNameRoot+"freeFormatCityEntry");
		parm = obj.value;
	} else {
		with (getCityField())
			parm = options[selectedIndex].text;
	}
	msg = msg.replace("\{2\}", spanStr + parm + spanEnd);
	parm = localizeDate(getDate("arrival"), gDisplayDateFormat, true);
	msg = msg.replace("\{3\}", "<nobr>" + spanStr + parm + spanEnd + "</nobr>");
	parm = getNightsField().value;
	msg = msg.replace("\{4\}", parm);	
	return msg;
}

// Populate a list box with set of options and values
// n.b. ensure "box" has a name attribute
function loadListBox(box,opt,val) {
	var selectParentNode = box.parentNode;
	var obj = box.cloneNode(false);
	var s=buildSelection(opt,val,null,true);
	if (document.all) {
		// Fudge for IE woes (innerHTML corrupts <OPTION> list)
		box.outerHTML=obj.outerHTML.replace("</SELECT>",s+"</SELECT>");
		// Have to re-find object otherwise parentNode isn't set
		obj=document.getElementsByName(box.name)[0];
		return obj;
	}
	obj.innerHTML=s;
	selectParentNode.replaceChild(obj,box);
	return obj;
}

function clearListBox(box) {
	var selectParentNode = box.parentNode;
	var newBox = box.cloneNode(false);
	selectParentNode.replaceChild(newBox, box);
	return newBox;
}

