var qsParam = new Array();
var abandon_URL = 'javascript: window.history.back();';
var hotelName;
var maxRooms = 99;
var stayPeriod = new Array();
function resPrice (sgl, dbl, extra, pax, rooms){
  this.pax = pax;
  this.sgl = sgl;
  this.dbl = dbl;
  this.extra = extra;
  this.rooms = rooms;
  this.res_total = 0;
  this.getPrice = getPrice;
};
function roomRate(date,value1, value2, value3, value4, inventory ){
  this.date = date;
  this.value1 = value1;
  this.value2 = value2;
  this.value3 = value3;
  this.value4 = value4;
  this.inventory = inventory;
  this.getOccupancyRate = function(occ) {
    if (occ == 1) {
      return this.value1;
    } else if (occ == 2) {
      return this.value2;
    } else if (occ == 3) {
      return this.value3;
    } else {
      return this.value4;
    }
    
  }
}

function reverseDateYMD(dats, splstr){
	var dts = new Array();
	dts = dats.split(splstr);
	return dts[2]+splstr+dts[1]+splstr+dts[0];
}

var URL = {

    // public method for url encoding
    encode : function (string) {
        return escape(this._utf8_encode(string));
    },

    // public method for url decoding
    decode : function (string) {
        return this._utf8_decode(unescape(string));
    },

    // private method for UTF-8 encoding
    _utf8_encode : function (string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    },

    // private method for UTF-8 decoding
    _utf8_decode : function (utftext) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;

        while ( i < utftext.length ) {

            c = utftext.charCodeAt(i);

            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i+1);
                c3 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }

        }

        return string;
    }

}

function qs() {
  var query = window.location.search.substring(1);
  //document.getElementById('info_panel').innerHTML = query;
  var parms = query.split('&');
  for (var i=0; i<parms.length; i++) {
    var pos = parms[i].indexOf('=');
    if (pos > 0) {
      var key = parms[i].substring(0,pos);
      var val = URL.decode(parms[i].substring(pos+1));
      qsParam[key] = val;
    }
  }
}

function set_hotel_detail() {
  document.getElementById('d_rtype').innerHTML = qsParam['rtype'];
  document.getElementById('d_hname').innerHTML = qsParam['hname'];
  
  document.getElementById('adate').value = qsParam['adate'];
  document.getElementById('ddate').value = qsParam['ddate'];
  document.getElementById('rooms').value = qsParam['rooms'];
  document.getElementById('rtype').value = qsParam['rtype'];
  document.getElementById('hname').value = qsParam['hname'];
  document.getElementById('pax').value = qsParam['pax'];
  
}

function set_guest_detail () {

}

function build_room_url(hotel_name, room_type) {
  return "hname="+escape(hotel_name)+"&rtype="+escape(room_type)+"&adate="+escape(qsParam['adate'])+"&ddate="+escape(qsParam['ddate'])+"&rooms="+qsParam['rooms'];
  
}

function executeReservation1(form) {

if((document.getElementById('btn_adate').value != "--") && (document.getElementById('btn_ddate').value != "--"))
{
	document.getElementById('adate').value = document.getElementById('btn_adate').value;
	document.getElementById('ddate').value = document.getElementById('btn_ddate').value;
	 document.getElementById('adate1').value = document.getElementById('btn_adate').value;
	document.getElementById('ddate1').value = document.getElementById('btn_ddate').value;
	executeReservation(form);
	return false;
}
else
{
executeReservation(form)
	return false;
}


}

function modTenValid( cardNumber ){
	var clen = new Array(cardNumber.length);
	var n = 0, sum = 0;
	
	for(n = 0; n < cardNumber.length; n++ ){
		clen[n] = parseInt(cardNumber.charAt(n));
	}
	
	for(n = clen.length - 2; n >= 0; n -= 2){
		clen[n] *= 2;
		if(clen[n] > 9){
			clen[n] -= 9;}
	}
	
	for(n = 0; n < clen.length; n++){
		sum += clen[n];
	}
	
	return(((sum%10)===0)? true : false);
}

function doCreditCardValidation(cardnumber, cardtype, returnImg) {
  	cardnumber = cardnumber.replace (/\s/g, "");
	
	var cards = new Array();
  	//Assign Card Types: Names, Length, Prefixes, and check digit
		cards [0] = {name: "Visa",
			imgName: "visa.gif",
			length: "13,16", 
			prefixes: "4",
			checkdigit: true};
		cards [1] = {name: "MasterCard",
			imgName: "mastercard.gif", 
			length: "16", 
			prefixes: "51,52,53,54,55",
			checkdigit: true};
		cards [2] = {name: "DinersClub",
			imgName: "unknown.gif",
			length: "14,16", 
			prefixes: "300,301,302,303,304,305,36,38,55",
			checkdigit: true};
		cards [3] = {name: "CarteBlanche", 
			imgName: "unknown.gif",
			length: "14", 
			prefixes: "300,301,302,303,304,305,36,38",
			checkdigit: true};
		cards [4] = {name: "AmEx", 
			imgName: "amex.gif",
			length: "15", 
			prefixes: "34,37",
			checkdigit: true};
		cards [5] = {name: "Discover", 
			imgName: "discover.gif",
			length: "16", 
			prefixes: "6011,650",
			checkdigit: true};
		cards [6] = {name: "JCB", 
			imgName: "unknown.gif",
			length: "15,16", 
			prefixes: "3,1800,2131",
			checkdigit: true};
		cards [7] = {name: "enRoute", 
			imgName: "unknown.gif",
			length: "15", 
			prefixes: "2014,2149",
			checkdigit: true};
		cards [8] = {name: "Solo", 
			imgName: "solo.gif",
			length: "16,18,19", 
			prefixes: "6334, 6767",
			checkdigit: true};
		cards [9] = {name: "Switch", 
			imgName: "unknown.gif",
			length: "16,18,19", 
			prefixes: "4903,4905,4911,4936,564182,633110,6333,6759",
			checkdigit: true};
		cards [10] = {name: "Maestro", 
			imgName: "maestro.gif",
			length: "16,18", 
			prefixes: "5020,6",
			checkdigit: true};
		cards [11] = {name: "VisaElectron", 
			imgName: "visa.gif",
			length: "16", 
			prefixes: "417500,4917,4913",
			checkdigit: true};
			
			

	var cardexp = /^[0-9]{13,19}$/;
	if(cardnumber.length >0 && cardexp.exec(cardnumber))
	{
		for(var currentType in cards){ 
			var prefix = new Array ();
			var lengths = new Array ();
			if(cards[currentType] && cards[currentType].prefixes){
				prefix = cards[currentType].prefixes.split(",");
	
				for (i=0; i<prefix.length; i++){
					var exp = new RegExp("^" + prefix[i]);
					if (exp.test(cardnumber)){
					  lengths = cards[currentType].length.split(",");
					  for (j=0; j<lengths.length; j++){
						if (cardnumber.length == lengths[j]){
							if (cards[currentType].checkdigit){
								if(modTenValid(cardnumber)){
									if(cards[currentType].name == cardtype){
										return true;
									}
									else{
									//alert("Please Verify Your Card Number & Card Type");
										return false;
									}
								
									/*if(returnImg){
										return cards[currentType].imgName;
									}else{
										return true;}*/
								}
								
							}
						}
					  }
					}
				  }	
			}
		}
		if(returnImg){
			return "unknown.gif";
		}else{
			return false;}
	}else{
	//alert("Please Verify Your Credit Card Number");
		if(returnImg){
			return "unknown.gif";
		}else{
			return false;}
	}
}

function ccValidation(form)
{

var flag = 0;
var ccv = document.bookingmask.ccv.value;
var my_month = document.bookingmask.expCCMonth.value;
var my_year = document.bookingmask.expCCYear.value;
var cardnumber = document.bookingmask.cc_number.value;
var cardtype = document.bookingmask.cc_type.value;
var len =ccv.length;
if (len == 3 || len ==4){
flag=1;
}
		
		
		var sysDate=new Date();
		var  currDate=new Date(sysDate);
		var  dt = new Date(currDate);
		
		if( parseFloat(my_month) < (dt.getMonth()+1) && parseFloat(my_year) <= dt.getFullYear()) {
			alert("Please verify your Card expiry details");
			 return false;
		}
		else if (flag==0){
		
			alert("Please verify your CVV Code");
		return false;
		}
		else if(!doCreditCardValidation(cardnumber,cardtype))
		    	{
				alert("Verify Your Credit Card Details");
				return false;
			}
		else{
				return true;
			}	


		
		
}

function checkEmail(form){
 var check_pass1 = true;
 var check_pass2 = true;
 var tmp = document.getElementById("guest_email").value;
 var tmp1 = document.getElementById("guest_contact_tel").value;
  var pattern = /^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_-])+\.([a-zA-Z])+([a-zA-Z])+/;
  var numReg=/^[0-9]+$/;
  
  if(!pattern.test(tmp))
  {
	check_pass1 = false;
  }
  if(!numReg.test(tmp1))
  {
  
	check_pass2 = false;
  }
 if( checkForm('required',null,form)) {
 
 		if(check_pass1 && check_pass2){
			if(ccValidation(form)){
						form.submit();
						return false;
					}
					else{
						return false;
					}
					
		}
		else {
				if(!check_pass1){
				alert("Please check your email address!");
				document.getElementById("guest_email").style.backgroundColor = "#ffa0a0";
					return false;
				}
				 if(!check_pass2){
				alert("Please check your telephone number!");
				document.getElementById("guest_contact_tel").style.backgroundColor = "#ffa0a0";
					return false;
				}
		
			} 
	}
else{
		return false;
	}
 }

function checkForm(req_input,req_check, form) {
  var check_pass = true;
  if(document.getElementById(req_input) != null){
    var reqs=document.getElementById(req_input).value;
    reqs = reqs.substring(0,reqs.lastIndexOf(';')); var req_fields = new Array();
    var req_fields = reqs.split(';'); nbr_fields = req_fields.length;
    for(var i=0;i<nbr_fields;i++){ 
      if(document.getElementById(req_fields[i]).value.length <=0){ 
	document.getElementById(req_fields[i]).style.backgroundColor = "#ffa0a0";
	check_pass = false; 
      } else {
	  document.getElementById(req_fields[i]).style.backgroundColor = "";
      }
    }
  }
  if (document.getElementById(req_check) != null) {
    var reqs=document.getElementById(req_check).value;
    reqs = reqs.substring(0,reqs.lastIndexOf(';')); var req_fields = new Array();
    var req_fields = reqs.split(';'); nbr_fields = req_fields.length;
    for(var i=0;i<nbr_fields;i++){ 
      if(document.getElementById(req_fields[i]).checked){ 
	  document.getElementById(req_fields[i]).style.backgroundColor = "";
      } else {
	document.getElementById(req_fields[i]).style.backgroundColor = "#ffa0a0";
	check_pass = false; 
      }
    }
	}
	if (!check_pass) alert("Please complete the mandatory fields!")
    return check_pass;
}



function executeReservation(form) {
  var LANG_NOT_ALL_FIELDS='Not All Fields are Complete... ';
  /*if ( document.form.roomID.value == 0 ) {
				alert( LANG_NOT_ALL_FIELDS+' (Room Type)' );
	} else if ( form.adate.value == 0 || form.adate.value == "") {
		alert( LANG_NOT_ALL_FIELDS+' (Arrival Date)' );
	} else if ( form.ddate.value == 0  || form.ddate.value == "") {
		alert( LANG_NOT_ALL_FIELDS+' (Departure Date)' );
	} else {
		//document.getElementById('bookingmask').submit();
	}
  
  */
  if( checkForm('required',null,form)) {
  	form.submit();
  	return false;
} else {
	return false;
}
}

function completeReservation(form) {
	
}

function checkResDates() {
  var rc_date = new Date();
  var a_date = new Date();
  var d_date = new Date();
  var t_date = new Array();
  t_date = document.getElementById('adate').value.split("-");
  a_date.setFullYear(t_date[0],t_date[1]-1,t_date[2]);
  t_date = document.getElementById('ddate').value.split("-");
  d_date.setFullYear(t_date[0],t_date[1]-1,t_date[2]);
  if (rc_date > a_date) {
    alert("Arrival date is in the past!");
    return false;
  } 
  if (a_date>d_date) {
    alert("Departure date is before arrival date!");
    setDdate();
  }
  
  //document.getElementById('info_panel').innerHTML = d_date +" -- t_date = " + t_date[2]+t_date[1]+t_date[0] ;
  //var d_date = document.getElementById('ddate').value;

  
}

function setDdate(){
  var a_date = new Date();
  var d_date = new Date();
  var t_date = new Array();
  t_date = document.getElementById('adate').value.split("-");
  a_date.setFullYear(t_date[0],t_date[1]-1,t_date[2]);
  t_date = document.getElementById('ddate').value.split("-");
  d_date.setFullYear(t_date[0],t_date[1]-1,t_date[2]);
  if (d_date < a_date) {
    d_date = a_date;
    d_date.setDate(d_date.getDate() + 1);
    //document.getElementById('info_panel').innerHTML = d_date;
    t_date[0]= d_date.getDate();
    if (t_date[0] < 10) { t_date[0]="0"+t_date[0];}
    t_date[1]= d_date.getMonth()+1;
    if (t_date[1] < 10) { t_date[1]="0"+t_date[1];}
    t_date[2]= d_date.getFullYear();
    //document.getElementById('ddate').value =   t_date[0]+"-"+t_date[1]+"-"+t_date[2];
    document.getElementById('ddate').value =   t_date[2]+"-"+t_date[1]+"-"+t_date[0];
  }
}
function getHotelName (){ 
 return document.getElementById("hlh_hotel_name").innerHTML; 
}
function abandonReservation() {
  window.location=abandon_URL;
}

function getPrice(){
  var use_price = 0;
  if (this.pax == 1) {
    use_price = this.sgl;
  } else if (this.pax== 2){
    use_price = this.dbl;
  } else {
    use_price = this.dbl + (this.extra * (this.pax -2)) ;
  }
  return (this.rooms * use_ptice);
}
function setBookURL() {
  var room = null;
  for (var i=0; i<maxRooms; i++) {
    room = document.getElementById("room"+i);
    if (room != null) {
      room.href = "bookahotel.php?Itemid="+qsParam['Itemid']+"&option="+qsParam['option']+"&task=reservation&res_op=detail&"+build_room_url(document.getElementById('hlh_hotel_name').innerHTML,i);
      //room.href = "index.php?Itemid="+qsParam['Itemid']+"&option="+qsParam['option']+"&task=reservation&"+build_room_url(document.getElementById('hlh_hotel_name').innerHTML,i);
    }
  
  }
}
function checkCrsCalendar(ev) {
	var el = Calendar.is_ie ? Calendar.getElement(ev) : Calendar.getTargetElement(ev);
	//for (; el != null; el = el.parentNode)
	// FIXME: allow end-user to click some link without closing the
	// calendar.  Good to see real-time stylesheet change :)
		// calls closeHandler which should hide the calendar.
		calendar.callCloseHandler(); 
		Calendar.stopEvent(ev);
		//calendar.sel.value = alert(calendar.dateStr);
	
}

function selectedCrsDate(cal, datestr){
	cal.sel.value = datestr;
	cal.sel2.value = cal.rev ? reverseDateYMD(datestr, "-"):datestr;
	checkResDates();
	closeCrsCalHandler(cal);

	
}

function closeCrsCalHandler(cal, datestr) {
	
	cal.hide();
	
}

function crsCalendar (id, format, beginY, endY) {
	crsCalendar2(id, id, format, beginY, endY, false);
}
function pastDates(date){
	
	var today = new Date()
	if(date < today ) {
		return true;
		
	}
	return false;
		
	
}
function crsCalendar2(id, id2, format, beginY, endY, reverse) {
	var el = document.getElementById(id);
	var el2 = document.getElementById(id2);
	if (calendar != null) {
		// we already have one created, so just update it.
		calendar.hide();		// hide the existing calendar
		calendar.parseDate(el.value); // set it to a new date
	} else {
		// first-time call, create the calendar
		var cal = new Calendar(true, null, selectedCrsDate, closeCrsCalHandler );

		calendar = cal;		// remember the calendar in the global
		calendar.setDateFormat(format);
		cal.setRange(beginY, endY);	// min/max year allowed
		calendar.setDisabledHandler(pastDates);
		calendar.create();		// create a popup calendar
		calendar.parseDate(el.value); // set it to a new date
	}
	calendar.sel = el;		// inform it about the input field in use
	calendar.sel2 = el2;		// inform it about the input field in use
	calendar.rev = reverse;
	calendar.showAtElement(el2);	// show the calendar next to the display field

	// catch mousedown on the document
	//Calendar.addEvent(document, "mouseup", checkCrsCalendar);
	return false;
}

function calcCost(){
  pax = document.getElementById('pax').value;
  rooms = document.getElementById('rooms').value;
  price = 0;
  avg_price = 0;
  for( i = 0; i< stayPeriod.length; i++) {
    price = price + stayPeriod[i].getOccupancyRate(pax);
  }
  price *= rooms;
  avg_price = (price / stayPeriod.length / rooms);
  document.getElementById('average_cost').value = avg_price;
  document.getElementById('total_cost').value = price;
  
}
