function $() // given an array of ids, returns an array of objects
{
	var elements = new Array();
	
	for (var i = 0; i < arguments.length; i++) 
	{
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}

function validate_email(email_txt) // validates a string as a email id
{
	var emailReg = "^[\\w-_\.]*[\\w-_\.]\@([\\w].+)\.[\\w]$";
	var regex = new RegExp(emailReg);
	return regex.test(email_txt);
}

function validate_integer(int_str) // validates a string as an integer (i.e. no decimal points)
{
	regExpr = new RegExp(/^\d*$/);
	var regex = new RegExp(regExpr);
	return regex.test(int_str);
}

function validate_real_nos(real_nos_str) // validates a string as a Real Number (i.e. with decimal points)
{
	regExpr = new RegExp(/^-?\d*(\.\d{1,2})?$/);
	var regex = new RegExp(regExpr);
	return regex.test(real_nos_str);
}

function RoundOff(number,n) // rounds up given no to 'n' number of places
{
	str='';
	number=parseFloat(number);
	if(!isNaN(number))
	{
		power=Math.pow(10,n);
		number=Math.round(number*power)/power;
		return number;
	}
}

function str_trim(str) // strips of leading and following whitespaces from a string
{	
	if(str.length > 0)
		while(str.charAt(0)==' ')
			str = str.substr(1);
		
	if(str.length > 0)
		while(str.charAt((str.length - 1))==' ')
			str = str.substring(0, str.length-1);
	
	return str;
}

function str_implode(arr, delim) // Join array elements with a string
{
	var ret_str = "";
	var arr_len = 0;

	arr_len = arr.length;
	delim_len = delim.length;
	
	if(arr_len > 0)
	{
		for(var i=0; i < arr_len; i++)
			ret_str += delim + arr[i];

		if(ret_str.substr(0, delim_len))
			ret_str = ret_str.substr(delim_len);
	}
	
	return ret_str;
}

function CheckNum(obj) // validates a form ctrl for an integer
{
	regExpr = new RegExp(/^\d*$/);

	if(str_trim(obj.value)!="")
	{
		if(!regExpr.test(obj.value))
		{
			alert("Please Enter Valid Numbers");
			obj.value="0";		
		}
	}
	else
		obj.value="0";		
}

function CheckRealNum(obj) // validates a form ctrl for a real number
{
	regExpr=new RegExp(/^-?\d*(\.\d{1,2})?$/);
	
	if(str_trim(obj.value)!="")
	{
		if(!regExpr.test(obj.value))
		{
			alert("Please Enter Valid Figure");
			obj.value="0";		
		}
	}
	else
		obj.value="0";		
}

// NAVIGATION BASED
function AddAnother()
{
	if(Validate())
	{
		document.forms[0].add_mode.value = "Y";
		document.forms[0].submit();
	}
	else
		document.forms[0].add_mode.value = "N";
}

function GoToPage(page)
{
	window.document.location.href=page;
}

function GoToParentPage(page)
{
	window.paerent.document.location.href=page;
}

function ConfirmDelete(txt, page)
{
	var msg = "You Are About To Delete this " + txt + "! Continue?";

	if(confirm(msg))
		window.document.location.href=page;
}

function ConfirmDeletetionOfHotels(txt,page)
{
	var msg = "This Hotel has associations!!!Are You Sure You Want to Delete this " + txt + "?";

	if(confirm(msg))
		window.document.location.href=page;
}

function SubmitToThisPage(frm_nm, ctrl_nm, page_name)
{
	var page_no = document.getElementById(ctrl_nm).value;	
	var frm = eval("document."+frm_nm);
	
	frm.action = page_name+"?page="+page_no;
	frm.submit();
}

function SubmitPage(frm_nm, page)
{
	var frm = eval("document."+frm_nm);	
	frm.action = page;
	frm.submit();
}

function DefaultFocus(ctrl_nm)
{
	if(document.getElementById(ctrl_nm))
	{
		obj = document.getElementById(ctrl_nm);
		obj.focus();
	}
}

function SetFocus(obj)
{
	obj.focus();
	obj.select();
}

function UploadMailerPics()
{
	info="upload_images.php";
	window.open(info,"","menubars=0,width=500,height=550,scrollbars=1,resizable=1");
}

function ChangeRank(mode, fld, fld_val)
{
	var str = "";

	if(fld != "" && fld_val != "")
		str = "&fld=" + fld + "&fld_val=" + fld_val;
		
	var file = "rank-update.php?mode="+mode+str;
	win = window.open(file,'ChangeRank','width=900,height=600,scrollbars=1,resizable=1');
	WindowPosition(900,600,win);
}

function PricingChangeRank(mode, fld, fld_val) // mode, condition fld, condition value
{
	var str = "";

	if(fld != "" && fld_val != "")
		str = "&fld=" + fld + "&fld_val=" + fld_val;
	
	//alert(str);
	var file = "pricing_rank_update.php?mode="+mode+str;
	win = window.open(file,'ChangeRank','width=900,height=600,scrollbars=1,resizable=1');
	WindowPosition(900,600,win);
}

function ChangeImageRank(mode, fld, fld_val)
{
	var str = "";

	if(fld != "" && fld_val != "")
		str = "&fld=" + fld + "&fld_val=" + fld_val;
	var file = "image-rank-update.php?mode="+mode+str;
	win = window.open(file,'ChangeRank','width=900,height=600,scrollbars=1,resizable=1');
	WindowPosition(900,600,win);
}

function OpenPopup(file)
{
	win = window.open(file,'Popup','width=600,height=450,scrollbars=1');
	WindowPosition(600,450,win);
}

function WindowPosition(widthX,heightX,windowName)
{
	var width = (screen.width);
	var height = (screen.height - 25);
	var centerleft = 0;
	var centertop = 0;
	var centerleft = (width/2) - (widthX/2);
	var centertop = (height/2) - (heightX/2);
	var width=widthX;
	var height=heightX;
	windowName.moveTo(centerleft,centertop);
	windowName.resizeTo(width, height);
	windowName.focus();
}

function WindowPosition2(widthX,heightX,windowName) //same as above, only it takes %age vals as params for width n height
{
	var width = (screen.width);
	var height = (screen.height - 25);
		
	var wt = (width * widthX) / 100;
	var ht = (height * heightX) / 100;

	var centerleft = (width/2) - (wt/2);
	var centertop = (height/2) - (ht/2);

	windowName.resizeTo(wt, ht);
	windowName.moveTo(centerleft,centertop);
	windowName.focus();
}

function FillFromList(list_obj)
{
	var cmb = list_obj;

	str = "";
		
	for(i=0; i < cmb.length; i++)
		if(cmb.options[i])
			str += "~" + cmb.options[i].value;
	
	return str.substr(1);
}

function CheckDates(date1,date2)
{
	fday=date1.substr(8,2);
	fyear=date1.substr(0,4);
	fmonth=date1.substr(5,2);
	tday=date2.substr(8,2);
	tyear=date2.substr(0,4);
	tmonth=date2.substr(5,2);
	
	fromdate=new Date(fyear,fmonth,fday);
	todate=new Date(tyear,tmonth,tday);
	
	fromdate=fromdate.getTime();
	todate=todate.getTime();	
	
	day1=fromdate/(60*60*24*1000);
	day2=todate/(60*60*24*1000);
	
	if((day2 < day1))
		return false;
	else 
		return true;
}
function ConvertFromYMDtoDMY(ymd_date)
{
	var dt_arr = ymd_date.split('-');
	var dmy_date = dt_arr[2] + "-" + dt_arr[1] + "-" + dt_arr[0];
	return dmy_date;
}

function ConvertFromDMYtoYMD(dmy_date)
{
	var dt_arr = dmy_date.split('-');
	var ymd_date = dt_arr[2] + "-" + dt_arr[1] + "-" + dt_arr[0];
	return ymd_date;
}
function ValidateSearchPanel(form_name, today_date)
{
	var frm = form_name;
	
	if(frm.txtchkin.value == "")
	{
		alert("Please Choose A Check In Date");
		frm.f_trigger_a.focus();
		return false;
	}

	///    DIFFERENCE CHECKING ....
	var days = 0;
	var difference = 0;
	var chkInDate = ConvertFromYMDtoDMY(frm.txtchkin.value);
	var arrchkInDate = chkInDate.split("-");
	chkInDate = new Date(arrchkInDate[1]+"/"+arrchkInDate[2]+"/"+arrchkInDate[0]);
	var chkOutDate = ConvertFromYMDtoDMY(frm.txtchkout.value);
	var arrchkOutDate = chkOutDate.split("-");
	chkOutDate = new Date(arrchkOutDate[1]+"/"+arrchkOutDate[2]+"/"+arrchkOutDate[0]);
	difference =  chkOutDate - chkInDate;
	days = difference/(1000*60*60*24);
   
   ///  LESS THAN TODAY CHECK
	var chkTodayDate = today_date;
	var arrchkTodayDate = chkTodayDate.split("-");
	chkTodayDate = new Date(arrchkTodayDate[1]+"/"+arrchkTodayDate[2]+"/"+arrchkTodayDate[0]);
	todaychkdifference =  chkInDate - chkTodayDate;
	todaychkdays = todaychkdifference/(1000*60*60*24);
   
	if(todaychkdays < 0)
	{
		alert("Check In Date Should Begin From Today Or Later");
		frm.f_trigger_a.focus();
		return false;
	}

    if(frm.txtchkout.value == "")
	{
		alert("Please Choose A Check Out Date");
		frm.f_trigger_b.focus();
		return false;
	}	
	
	if(days <= 0)
	{
		alert("Check Out Date Should Be Greater Than The Check In Date");
		return false;
	}
   
	if(days >= 7)
	{
		alert("Maximum Range Of Days Is 7 !!! Please Change Accordingly");
		frm.f_trigger_b.focus();
		return false;
	}

	for(var i=1; i <= frm.cmbnumrooms.value; i++)
	{
		x_adult = eval("frm.adult"+i);
		x_child = eval("frm.child"+i);
		num_ppl = parseInt(x_adult.value) + parseInt(x_child.value);

		if(num_ppl > 4)
		{
			alert("Maximum 4 Guests Allowed Per Room.");
			x_adult.focus();
			return false;
		}
	}

	return true;	
}

function ValidateSearchPanelForTariff(form_name, today_date)
{
	var frm = form_name;
	
	if(frm.txtchkin1.value == "")
	{
		alert("Please Choose A Check In Date");
		frm.f_trigger_c.focus();
		return false;
	}

	///    DIFFERENCE CHECKING ....
	var days = 0;
	var difference = 0;
	var chkInDate = ConvertFromYMDtoDMY(frm.txtchkin1.value);
	var arrchkInDate = chkInDate.split("-");
	chkInDate = new Date(arrchkInDate[1]+"/"+arrchkInDate[2]+"/"+arrchkInDate[0]);
	var chkOutDate = ConvertFromYMDtoDMY(frm.txtchkout1.value);
	var arrchkOutDate = chkOutDate.split("-");
	chkOutDate = new Date(arrchkOutDate[1]+"/"+arrchkOutDate[2]+"/"+arrchkOutDate[0]);
	difference =  chkOutDate - chkInDate;
	days = difference/(1000*60*60*24);
   
   ///  LESS THAN TODAY CHECK
	var chkTodayDate = today_date;
	var arrchkTodayDate = chkTodayDate.split("-");
	chkTodayDate = new Date(arrchkTodayDate[1]+"/"+arrchkTodayDate[2]+"/"+arrchkTodayDate[0]);
	todaychkdifference =  chkInDate - chkTodayDate;
	todaychkdays = todaychkdifference/(1000*60*60*24);
   
	if(todaychkdays < 0)
	{
		alert("Check In Date Should Begin From Today Or Later");
		frm.f_trigger_c.focus();
		return false;
	}

    if(frm.txtchkout1.value == "")
	{
		alert("Please Choose A Check Out Date");
		frm.f_trigger_d.focus();
		return false;
	}	
	
	if(days <= 0)
	{
		alert("Check Out Date Should Be Greater Than The Check In Date");
		return false;
	}
   
	if(days >= 7)
	{
		alert("Maximum Range Of Days Is 7 !!! Please Change Accordingly");
		frm.f_trigger_d.focus();
		return false;
	}

	/*for(var i=1; i <= frm.cmbnumrooms.value; i++)
	{
		x_adult = eval("frm.adult"+i);
		x_child = eval("frm.child"+i);
		num_ppl = parseInt(x_adult.value) + parseInt(x_child.value);

		if(num_ppl > 4)
		{
			alert("Maximum 4 Guests Allowed Per Room.");
			x_adult.focus();
			return false;
		}
	}*/

	return true;	
}


function Validate4PackageData(pkg_limit, chkin, chkout)
{
	var span_days = pkg_limit;
	var frm = document.frm_srch;
	var dat = document.frm_dat;

	var fromdt = ConvertFromDMYtoYMD(chkin);
	var tmp_fromdt = fromdt.split("-");
	var from_date = new Date(tmp_fromdt[1]+"/"+tmp_fromdt[2]+"/"+tmp_fromdt[0]);
	
	var todt = ConvertFromDMYtoYMD(chkout);
	var tmp_todt = todt.split("-");
	var to_date = new Date(tmp_todt[1]+"/"+tmp_todt[2]+"/"+tmp_todt[0]);

	msec = to_date - from_date;
	secs = (msec/1000);
	mins = (secs/60);
	hrs = (mins/60);
	days = (hrs/24);

	if(days < span_days)
		return false; // disable packages option n set to room rate disp
	else
		return true;
}

function GenerateRoomCtrls4SideSearchPanel(numrooms, MAX_ADULT, MAX_CHILD)
{
	str = "";
	
	str += "<table width='100%' border='0' cellspacing='1' cellpadding='1' align='center'>";

	for( i = 1 ; i <= numrooms ; i++ )
	{
		str += "<tr>";
		str += "<td class='searchtxt'><b>Room " + i + "</b> : ";

		str += "Adults : <select class=box name='adult"+i+"'>";
		
		for(numadults = 2 ; numadults <= MAX_ADULT; numadults++)
			str += "<option value='"+ numadults +"'>" +numadults+ "</option>";
		
		str += "</select>";
		
		str += "Children : <select class=box name='child"+i+"'><option value='0'>0</option>";
		for(numchild = 1 ; numchild <= MAX_CHILD; numchild++)
			str += "<option value='"+ numchild +"'>" +numchild+ "</option>";

		str += "</select>";		
		str += "</td>";
		str += "</tr>";
	}
	str += "</table>";

	return str;
}

function TopDealsChangeRank(mode, fld, fld_val)
{
	var str = "";

	if(fld != "" && fld_val != "")
		str = "&fld=" + fld + "&fld_val=" + fld_val;

	var file = "top_deals_rank_update.php?mode="+mode+str;
	win = window.open(file,'ChangeRank','width=900,height=600,scrollbars=1,resizable=1');
	WindowPosition(900,600,win);
}


function dateAdd(dtfrom,days)
{
		aFdate=dtfrom.split("-");
		var dtFdate = aFdate[1]+'/'+aFdate[0]+'/'+aFdate[2];
		var d = new Date(dtFdate);
		d.setDate(d.getDate()+days);
		var result=d.getDate()+"-"+d.getMonth()+"-"+d.getYear();
		
		return result;
}

function dateDiff(dtfrom,dto)
{
	fday=dtfrom.substr(0,2);
	tday=dto.substr(0,2);
	fmonth=dtfrom.substr(3,2);
	tmonth=dto.substr(3,2);
	fyear=dtfrom.substr(6,4);
	tyear=dto.substr(6,4);
	
	dtFdate=new Date(fyear,fmonth,fday);
	dtTdate=new Date(tyear,tmonth,tday);
	
	var sOneDay = 1000*60*60*24;
	var iDiff=dtTdate-dtFdate;
	var diff = (iDiff/sOneDay);

	return diff;
}

function adddate(dtfrom,days)
{
	
	fday=dtfrom.substr(0,2);
	fmonth=dtfrom.substr(3,2);
	fyear=dtfrom.substr(6,4);
	fmonth=fmonth-1;
	
	var x_day = parseFloat(fday) + parseInt(days);
	var new_date = new Date(fyear,fmonth,x_day);	

	var new_yyyy = new_date.getFullYear();
	var new_mm = parseInt(new_date.getMonth()) + 1;
	if(new_mm < 10)	new_mm = '0' + new_mm;	
	var new_dd = new_date.getDate();
	if(new_dd < 10)	new_dd = '0' + new_dd;	
		
	var new_dt = new_yyyy + '-' + new_mm + '-' + new_dd;
	return new_dt;
}


function hourglass() 
{
	var width = (screen.width) - 155;
	var height = (screen.height - 125);
	var centerleft = 0;
	var centertop = 0;
	var centerleft = (width/2) - (32/2);
	var centertop = (height/2) - (32/2);
	document.all.hiddenDIV.style.top=centertop;
	document.all.hiddenDIV.style.left=centerleft;
	document.all.hiddenDIV.style.visibility="visible";
	doHourglass();
}

function numbersonly(e)
{
	var unicode = e.charCode ? e.charCode : e.keyCode;
	
	if( unicode != 8 && unicode!=46)   //if the key isn't the backspace key (which we should allow)
	{
		if(unicode < 48 || unicode > 57)   //if not a number
				return false;  //disable key press
		else
			return true;   // enable keypress
	}
	else
	{
		return true;   // enable keypress
	}
}

function removehourglass()
{
	undoHourglass();
	document.getElementById("hiddenDIV").style.visibility="hidden"; 
}

function doHourglass()
{
	document.body.style.cursor = 'wait';
}

function undoHourglass()
{
	document.body.style.cursor = 'default';
}

function roundNumber(number,decimals) {
	var newString;// The new rounded number
	decimals = Number(decimals);
	if (decimals < 1) {
		newString = (Math.round(number)).toString();
	} else {
		var numString = number.toString();
		if (numString.lastIndexOf(".") == -1) {// If there is no decimal point
			numString += ".";// give it one at the end
		}
		var cutoff = numString.lastIndexOf(".") + decimals;// The point at which to truncate the number
		var d1 = Number(numString.substring(cutoff,cutoff+1));// The value of the last decimal place that we'll end up with
		var d2 = Number(numString.substring(cutoff+1,cutoff+2));// The next decimal, after the last one we want
		if (d2 >= 5) {// Do we need to round up at all? If not, the string will just be truncated
			if (d1 == 9 && cutoff > 0) {// If the last digit is 9, find a new cutoff point
				while (cutoff > 0 && (d1 == 9 || isNaN(d1))) {
					if (d1 != ".") {
						cutoff -= 1;
						d1 = Number(numString.substring(cutoff,cutoff+1));
					} else {
						cutoff -= 1;
					}
				}
			}
			d1 += 1;
		} 
		newString = numString.substring(0,cutoff) + d1.toString();
	}
	if (newString.lastIndexOf(".") == -1) {// Do this again, to the new string
		newString += ".";
	}
	var decs = (newString.substring(newString.lastIndexOf(".")+1)).length;
	for(var i=0;i<decimals-decs;i++) newString += "0";
	//var newNumber = Number(newString);// make it a number if you like
	if(decimals==0)
		newString=newString.replace('.','');
	
	newString=roundFigure(newString);
	return newString; // Output the result to the form field (change for your purposes)
}

function roundFigure(number)
{
	var modeofnum= number%5;
	var result=(modeofnum==0)?number:parseInt(number)+(5-modeofnum);
	return result;
}

function GetSelected(ctrl_name)
{
	for(var r=0; r < ctrl_name.length; r++)
	if(ctrl_name[r].checked)
		return true;
	
	return false;
}

function chngorderlist(order)
{
	if(document.frm_hotel.rate_view.value=='ROOM')
		action_file = "room_results.php";
	else
		action_file = "package_results.php";

	document.frm_hotel.ordervalue.value=order;
	document.frm_hotel.action = action_file;
	document.frm_hotel.submit();
}

function chngratelist(val)
{
	if(val=='ROOM')
		action_file = "room_results.php";
	else
		action_file = "package_results.php";

	document.frm_hotel.rate_view.value=val;
	document.frm_hotel.action = action_file;
	document.frm_hotel.submit();
}

function ViewHotel(hid,cmbrate)
{
	action_file = "hotel_disp.php?srch_mode=SRCH&hid="+hid+"&view=P&rdtype=P&cmbrate="+cmbrate;
	document.frm_hotel.action = action_file;
	document.frm_hotel.submit();
}

function BookNow(val, pdid, cmbrate,hid,nrms,chkin,chkout)
{
	action_file = "online_booking.php?bk_type="+val+"&view=R&id="+pdid+"&cmbrate="+cmbrate+"&hid="+hid+"&nrms="+nrms+"&txtchkin"+chkin+"&txtchkout"+chkout;
	document.frm_hotel.action = action_file;
	document.frm_hotel.submit();
}

function CheckIt()
{
	var frm = document.frm_srch;
	var chkin = frm.txtchkin.value;
	var chkout = frm.txtchkout.value;

	if(!ValidateSearchPanel(frm, '<? echo $checkingdate; ?>'))
		return false;

	if(!Validate4PackageData('<? echo PKG_LIMIT; ?>', chkin, chkout))
	{
		action_file = "room_rates.php";
		frm.action = action_file;
	}
	
	if(frm.rdtype[1].checked)
		frm.action= "room_rates.php";
	
	return true;
}

function PackageCheck()
{
	var frm = document.frm_srch;
	var chkin = frm.txtchkin.value;
	var chkout = frm.txtchkout.value;

	if(!Validate4PackageData('<? echo PKG_LIMIT; ?>', chkin, chkout))
	{
		frm.rdtype[1].checked = true;
		SetCombo('R');
		frm.rdtype[0].disabled = true;
	}
	else
	{
		frm.rdtype[0].disabled = false;
	}
}

function ViewInclusions(pid)
{
	info="inclusions.php?pid="+pid;
	window.open(info,"oy","menubars=0,width=400,height=300,scrollbars=yes");
}

function DisplayBigPic(pic,pos,hid,caption)
{
//+ "TMP_"
	var image = "<img src='<? echo HOTEL_PATH?>" + pic + "' width='450' height='300'>";
	document.getElementById("big_pic_"+hid).innerHTML = image;
	//var desc = caption;
	document.getElementById("pic_desc_"+hid).innerHTML = caption;
}

function UploadContentPics()
{
	info="content_pics.php";
	window.open(info,"","menubars=0,width=500,height=550,scrollbars=1");
}

function checktodate(frm,to)
{
	/*var days=dateDiff(frm,to);
	if(days>7)
	{
		alert("Check Out Date cannot be more than a week");
		var todate = adddate(frm,3);
		document.getElementById('txtchkout1').value=ConvertFromDMYtoYMD(todate);
	}*/
	
	loadrate();
}

function CheckPackDate(frm,to)
{
	if(document.getElementById('view').value=="P")
	{
		var date_difa=dateDiff(frm,to);
		var date_difb=document.getElementById('nights').value;
		
		if(date_difa!=date_difb)
		{
			var todate=document.getElementById('packdate').value;
			alert("Sorry Cannot calculate ! Duration cannot be less/greater than  Package Duration !");
			document.getElementById('bkchkout').value=todate;
		}
		else loadbooking();
	}
	else loadbooking();
}

function ChangePackDateDisp(frmdate)
{
	var todate = adddate(frmdate,3);
	document.getElementById('txtchkout1').value=ConvertFromDMYtoYMD(todate);
	loadrate();
}

function ChangePackDate(frmdate)
{
	var date_difb=document.getElementById('nights').value;
	var todate = adddate(frmdate,date_difb);
	document.getElementById('bkchkout').value=ConvertFromDMYtoYMD(todate);
	loadbooking();
}
function SetCss(td_obj, css_nm)
{
//	alert(css_nm);
	if(!td_obj || !css_nm)
		return false;
		
	td_obj.className = css_nm;
}
