if (LS == undefined) var LS = {};
LS.resbox = function () {
	var iataHelpPanel;
	var proxyServerName = "";
	var proxyServerPort = "";
	var ProxyServerPath = "/JSAPIProxyPage/proxy.aspx";
	var geoServerName = "geocode.dev.mapquest.com";
	var serverPort = "80";
	var serverPath = "mq";
	var geoExec;
	var confirmAddrDlg;
	var geoAddr;
	var pickupLoc;
	var dropoffLoc;
	var currentLoc;
	var stopLoc;
	var serviceP2P = [];
	var geocoding = false;
	var submitpending = false;
	var p2p = "false";
	var busy;
	var busybodytext;

	function rndVal() {
		var tmp = new Date();
		return tmp.getTime();
	}

	function initServiceArr(arr) {
		var cnt = document.getElementById("sidcnt").value;
		var name, id;
	  for (var i=1; i <= cnt; i++) {
			id = "sp2p_" + i;
			var elem = document.getElementById(id);
			var name = elem.name;
			arr[name] = document.getElementById(id).value;
		}
	}

	function clearLoc(loc) {
		loc.fulladdress.value	= "";
		loc.longitude.value = 0;
		loc.latitude.value = 0;
		loc.address.value = "";
		loc.city.value = "";
		loc.state.value = "";
		loc.zipcode.value = "";
		loc.country.value = "";
		loc.airportcode.value = "";
		loc.geoaddr = null;
	}
	function serviceChange(sid) {
		p2p = serviceP2P["sid"+sid];
		document.getElementById("p2p").value = p2p;
		document.getElementById("serviceid").value = sid;
		if (p2p == "false") {
			document.getElementById("dropoff").style.visibility = "hidden";
			clearLoc(dropoffLoc);
		} else {
			document.getElementById("dropoff").style.visibility = "visible";
		}
	}

	function initMQ() {
		geoExec = new MQExec(	geoServerName, serverPath,
													serverPort, proxyServerName, ProxyServerPath,
													proxyServerPort );
	}

	function initYUIDlgs() {
		confirmAddrDlg = new YAHOO.widget.SimpleDialog("confirmAddr", {
			width:"300px",
			fixedcenter:true,
			modal:true,
			visible:false,
			draggable:false,
			icon: YAHOO.widget.SimpleDialog.ICON_HELP,
			constraintoviewport: true,
			buttons: [ 	{ text: "Yes", 
										handler: function () {
											confirmAddrDlg.hide();
											currentLoc.fulladdress.value	= geoAddr.getStreet() + ", " + geoAddr.getCity() + ", " + geoAddr.getState() + ", " +  geoAddr.getPostalCode() + ", " + geoAddr.getCountry();
											currentLoc.longitude.value = geoAddr.getMQLatLng().getLongitude();
											currentLoc.latitude.value = geoAddr.getMQLatLng().getLatitude();
											currentLoc.address.value = geoAddr.getStreet();
											currentLoc.city.value = geoAddr.getCity();
											currentLoc.state.value = geoAddr.getState();
											currentLoc.zipcode.value = geoAddr.getPostalCode();
											currentLoc.country.value = geoAddr.getCountry();
											currentLoc.geoaddr = geoAddr;
											geocoding = false;
											if (submitpending) {
												goForm(true);
											}
										}, 
										isDefault: true },
									{ text: "No",  
										handler: function () {
											confirmAddrDlg.hide();
											currentLoc.fulladdress.focus();
											geocoding = false;
											if (submitpending) {
												submitpending = false;
											}
										}
									} ]
		}	);
		confirmAddrDlg.render(document.body); 		

		iataHelpPanel = 
			new YAHOO.widget.Panel("iataCodeHelp", 
				{	width:"300px", 
					fixedcenter: true, 
					constraintoviewport: true, 
					underlay:"shadow", 
					close:true, 
					visible:false, 
					modal:true,
					draggable:true,
					zIndex:"12"
				} 
			);
		iataHelpPanel.render(document.body);
		
		busy = new YAHOO.widget.Panel("wait",  
			{ width:"340px", 
				fixedcenter:true, 
				constraintoviewport: true, 
				close:false, 
				draggable:false, 
				zindex:4,
				modal:true,
				visible:false
			} 
		);

		busy.setHeader("Searching, please wait...");
		busy.setBody('<img src="/reserve/images/headers/wait.gif" />');
		busy.render(document.body);
	}

	function addrChange(loc) {
		if (loc.fulladdress.value != "" && loc.airportcode.value=="") {
			currentLoc = loc;
			loc.longitude.value = 0;
			loc.latitude.value = 0;
			loc.address.value = "";
			loc.city.value = "";
			loc.state.value = "";
			loc.zipcode.value = "";
			loc.country.value = "";
			loc.geoaddr = null;
			loc.airportcode.value = "";
			geocodeAddr(loc);
		}
	}

	function geocodeAddr(loc) {
		geocoding = true;
		var address = new MQSingleLineAddress();
		var gaCollection = new MQLocationCollection("MQGeoAddress");
		address.setAddress(loc.fulladdress.value);
		geoExec.geocode(address, gaCollection);
		geoAddr = gaCollection.get(0);
		var dlgBody = "Is this the correct address?<br><table class='dlgtbl'>"+
					"<tr><td><b> Street: </b></td><td>"+geoAddr.getStreet()+ "</td></tr>" +
					"<tr><td><b> City: </b></td><td>"+geoAddr.getCity()+ "</td></tr>" +
					"<tr><td><b> State: </b></td><td>"+geoAddr.getState()+ "</td></tr>" +
					"<tr><td><b> Zip: </b></td><td>"+geoAddr.getPostalCode()+ "</td></tr>" +
					"<tr><td><b> Country: </b></td><td>"+geoAddr.getCountry()+ "</td></tr></table>";
		confirmAddrDlg.setBody(dlgBody); 
		confirmAddrDlg.setHeader(loc.dialogheader); 
		confirmAddrDlg.show();
	}

	function initDataSources() {
	//	iataCityDS = new YAHOO.widget.DS_JSArray(iataCodesArrayByCity);
	//	iataCodeDS = new YAHOO.widget.DS_JSArray(iataCodesArrayByCode);
		iataCityDS = new YAHOO.util.XHRDataSource("/getairport.asp");
		iataCityDS.responseType = YAHOO.util.XHRDataSource.TYPE_TEXT;
		iataCityDS.maxCacheEntries = 100; 
		iataCityDS.responseSchema = {
	    recordDelim: "#",
	    fieldDelim: "%"
	  };
		iataCodeDS = new YAHOO.util.XHRDataSource("/getairport.asp");
		iataCodeDS.responseType = YAHOO.util.XHRDataSource.TYPE_TEXT;
		iataCodeDS.maxCacheEntries = 100; 
		iataCodeDS.responseSchema = {
	    recordDelim: "#",
	    fieldDelim: "%"
	  };
	}

	function initIATACityAutoComplete() {
		iataCityAutoComp = new YAHOO.widget.AutoComplete("iata_city_input","iata_city_container", iataCityDS); 
		iataCityAutoComp.prehighlightClassName = "yui-ac-prehighlight";
		iataCityAutoComp.typeAhead = false;
		iataCityAutoComp.useShadow = true;
		iataCityAutoComp.forceSelection = true;
		iataCityAutoComp.minQueryLength = 3; 
		iataCityAutoComp.maxResultsDisplayed = 20; 
		iataCityAutoComp.queryMatchSubset = false; 
		iataCityAutoComp.generateRequest = function(sQuery) {
	    return "?type=city&query=" + sQuery ;
	  };
		iataCityAutoComp.formatResult = function(oResultItem, sQuery) {
			return (oResultItem[1] + ", " + oResultItem[0] + ", "+ oResultItem[2] + " (" + oResultItem[3] +")");
		};
	  iataCitySelectHandler = function(sType, aArgs) {
			var aData = aArgs[2]; //array of the data for the item as returned by the DataSource
			iataHelpPanel.target.fulladdress.value = aData[1] + " (" + aData[3] + ")";
			iataHelpPanel.target.address.value  = aData[3]; 
			iataHelpPanel.target.airportcode.value  = aData[3];
			iataHelpPanel.target.city.value = aData[0];
			iataHelpPanel.target.state.value = aData[2];
			iataHelpPanel.target.longitude.value = aData[4];
			iataHelpPanel.target.latitude.value = aData[5];
			iataHelpPanel.target.zipcode.value = "";
			iataHelpPanel.target.country.value = "";
			iataHelpPanel.hide();
		};
		iataCityAutoComp.itemSelectEvent.subscribe(iataCitySelectHandler);
	}

	function initIATACodeAutoComplete() {
		iataCodeAutoComp = new YAHOO.widget.AutoComplete("iata_code_input","iata_code_container", iataCodeDS); 
		iataCodeAutoComp.prehighlightClassName = "yui-ac-prehighlight";
		iataCodeAutoComp.typeAhead = false;
		iataCodeAutoComp.useShadow = true;
		iataCodeAutoComp.forceSelection = true;
		iataCodeAutoComp.maxResultsDisplayed = 20; 
		iataCodeAutoComp.queryMatchSubset = false; 
		iataCodeAutoComp.queryDelay = .1; 
		iataCodeAutoComp.generateRequest = function(sQuery) {
	    return "?type=code&query=" + sQuery ;
	  };
		iataCodeAutoComp.formatResult = function(oResultItem, sQuery) {
			return (oResultItem[0] + " (" + oResultItem[2] + ", " + oResultItem[3] +")");
		};
	  iataCodeSelectHandler = function(sType, aArgs) {
			var aData = aArgs[2]; //array of the data for the item as returned by the DataSource
			iataHelpPanel.target.fulladdress.value  = aData[2] + " (" + aData[0] + ")";
			iataHelpPanel.target.address.value  = aData[0]; 
			iataHelpPanel.target.airportcode.value  = aData[0];
			iataHelpPanel.target.city.value = aData[1];
			iataHelpPanel.target.state.value = aData[3];
			iataHelpPanel.target.longitude.value = aData[4];
			iataHelpPanel.target.latitude.value = aData[5];
			iataHelpPanel.target.zipcode.value = "";
			iataHelpPanel.target.country.value = "";
			iataHelpPanel.hide();
		};
		iataCodeAutoComp.itemSelectEvent.subscribe(iataCodeSelectHandler);
	}

	function initLocations() {	
		pickupLoc = {
			dialogheader: "Please confirm pickup address",
			geoaddr: null,
			fulladdress: document.getElementById("pickup_fulladdress"),
			address: document.getElementById("pickup_address"),
			city: document.getElementById("pickup_city"),
			state: document.getElementById("pickup_state"),
			zipcode: document.getElementById("pickup_zipcode"),
			country: document.getElementById("pickup_country"),
			longitude: document.getElementById("pickup_longitude"),
			latitude: document.getElementById("pickup_latitude"),
			airportcode:	document.getElementById("pickup_airportcode")
		};

		dropoffLoc = {
			dialogheader: "Please confirm dropoff address",
			geoaddr: null,
			fulladdress: document.getElementById("dropoff_fulladdress"),
			address: document.getElementById("dropoff_address"),
			city: document.getElementById("dropoff_city"),
			state: document.getElementById("dropoff_state"),
			zipcode: document.getElementById("dropoff_zipcode"),
			country: document.getElementById("dropoff_country"),
			longitude: document.getElementById("dropoff_longitude"),
			latitude: document.getElementById("dropoff_latitude"),
			airportcode:	document.getElementById("dropoff_airportcode")
		};
		
		stopLoc = {
			geoaddr: null,
			longitude: {
				value: 0
			},
			latitude: {
				value: 0
			}
		}
	}

	function initValidation() {	
		// Form Validation Goodies
		define('total_passengers','num','Total Passengers');
		define('vehicleid','select','Vehicle Type');
		define('sel_serviceid','select','Service Type');
		
		define('pickup_date','calendardate','Pick Up Date');
		define('sel_pickup_hours','select','Pick Up Hours');
		define('sel_pickup_mins','select','Pick Up Mins');
		define('pickup_fulladdress','block','Pick Up Address');
		
		define('dropoff_date','calendardate','Drop Off Date');
		define('sel_dropoff_hours','select','Drop Off  Hours');
		define('sel_dropoff_mins','select','Drop Off  Mins');
	}
	function initForm() {	
		var sid = document.getElementById("serviceid").value;
		var ph = document.getElementById("pickup_hours").value;
		var pm = document.getElementById("pickup_mins").value;
		var dh = document.getElementById("dropoff_hours").value;
		var dm = document.getElementById("dropoff_mins").value;

		if (sid != "") {
			setSelected(document.getElementById("sel_serviceid"), sid);
		}
		if (ph != "") {
			setSelected(document.getElementById("sel_pickup_hours"), ph);
		}
		if (pm != "") {
			setSelected(document.getElementById("sel_pickup_mins"), pm);
		}
		if (dh != "") {
			setSelected(document.getElementById("sel_dropoff_hours"), dh);
		}
		if (dm != "") {
			setSelected(document.getElementById("sel_dropoff_mins"), dm);
		}
		document.signupinfo.total_passengers.focus();
	}
	function getIATACode(oLoc) {
		iataHelpPanel.target = oLoc;
		document.getElementById("iata_code_input").value = "";
		document.getElementById("iata_city_input").value = "";
		iataHelpPanel.show();
		return false;
	}

	function setSelected(selObj, value) {
	  for (var i=0; i < selObj.length; i++) {
	    if (selObj.options[i].value == value) {
	      selObj.options[i].selected = true;
				if (selObj.onchange) {
					selObj.onchange();	
				}
	    }
	  }
	}

	function goForm(returnVal) {
		
		var dtPickDateTime = new Date(document.signupinfo.pickup_datetime.value);
		var dtDropDateTime = new Date(document.signupinfo.dropoff_datetime.value);
		var dtCurrentDateTime = new Date();
		//alert('Current Date:' + dtCurrentDateTime);
		//alert('Pickup Date/Time: ' + dtPickDateTime  + ' Dropoff Date/Time: ' + dtDropDateTime);

		if (returnVal){ 
			if ((dtPickDateTime >= dtDropDateTime) || (dtPickDateTime < dtCurrentDateTime)) {
				alert('The pickup date/time must be before the drop off date/time. Also, the pickup date must not be before today\'s date');
				return false;
			}
			if (p2p == "true") {
				handleP2PReq(); 
			} else {
				handleHourlyReq();
			}
		}
		return false;
	}
	function handleP2PReq() {
		if (dropoffLoc.fulladdress.value == "") {
			alert("Dropoff address must be specified.");
		} else if ((pickupLoc.longitude.value != 0) && 
								(pickupLoc.latitude.value != 0) &&
								(dropoffLoc.longitude.value != 0) && 
								(dropoffLoc.latitude.value != 0)) {
				document.signupinfo.submit();
		} else {
			if (pickupLoc.geoaddr == null) {
				submitpending = true;
				addrChange(pickupLoc);
			}
			if (dropoffLoc.geoaddr == null) {
				submitpending = true;
				addrChange(dropoffLoc);
			}
		}
	}
	function handleHourlyReq() {
		if (geocoding) {
			submitpending = true;
		} else {
			if ((pickupLoc.longitude.value != 0) && 
					(pickupLoc.latitude.value != 0)) {
				document.signupinfo.submit();
			} else {
				submitpending = true;
				addrChange(pickupLoc);
			}
		}
	}
	function buildDateTime(form) {
	 var b = "/";
	 var s = ":";
	 var spc = " ";
	 var strPickupDateTime = "";
	 var strDropoffDateTime = "";

	 //Build Pickup Date Value
	 strPickupDateTime = form.pickup_date.value + spc

	 strPickupDateTime = strPickupDateTime + form.sel_pickup_hours[form.sel_pickup_hours.selectedIndex].value + s;
	 strPickupDateTime = strPickupDateTime + form.sel_pickup_mins[form.sel_pickup_mins.selectedIndex].value; 
	 
	 form.pickup_datetime.value = strPickupDateTime;

	 //Build Drop Off Date Time
	 strDropoffDateTime = form.dropoff_date.value + spc

	 strDropoffDateTime = strDropoffDateTime + form.sel_dropoff_hours[form.sel_dropoff_hours.selectedIndex].value + s;
	 strDropoffDateTime = strDropoffDateTime + form.sel_dropoff_mins[form.sel_dropoff_mins.selectedIndex].value; 
	 
	 form.dropoff_datetime.value = strDropoffDateTime;

	//alert('Pickup Date/Time: ' + strPickupDateTime + ' Dropoff Date/Time: ' + strDropoffDateTime);
	}

	return {
		init: function() {
			initMQ();
			initYUIDlgs();
			initDataSources();
			initIATACodeAutoComplete();
			initIATACityAutoComplete();
			initServiceArr(serviceP2P);
			initLocations();
			initValidation();
			initForm();
		},
		serviceChange: function(value) {
			serviceChange(value);
		},
		adjustDropOffTime:	function(formField,updateField) {
			adjustDropOffTime(formField,updateField); 
		},
		buildDateTime: function(form) {
			buildDateTime(form);
		},
		pickupAddrChange:	function() {
			pickupLoc.airportcode.value = "";
			addrChange(pickupLoc);
		},
		dropoffAddrChange:	function() {
			dropoffLoc.airportcode.value = "";
			addrChange(dropoffLoc);
		},
		getIATACode: function(oLoc) {
			return getIATACode(oLoc);
		},
		goForm: function(returnVal) {
			return goForm(returnVal);
		},
		getPickupLoc: function() {
			return pickupLoc;
		},
		getDropoffLoc: function() {
			return dropoffLoc;
		}
	}
}();

