function qsInit(){	
	qsShell = $('QuickSearchShell');
	qsContainer = $('QuickSearchContainer');
	qscHTML = qsContainer.innerHTML;
	if(document.getElementById('quickSearchFormBean')){
		qsForm = $('quickSearchFormBean');
		qsErrorCon = $('QuickSearchErrorContainer');
		qsError = $('QuickSearchErrorText');
		qsDestContainer = $('DestinationContainer');
		qsDestField = $('searchbox');
		qsSubmitBut = $('submitbutton');
		
		qsForm.async.value = true;
		qsForm.onsubmit = formSubmit;
	}
	dsHistory.addFunction(qsBase, window, qscHTML);
}

function qsBase(qscHTML, historyObject){		
	if (!historyObject || !historyObject.calledFromHistory){
		dsHistory.addFunction(qsBase, window, qscHTML);
	}
	if(!document.getElementById('quickSearchFormBean') || !document.getElementById('SearchBoxContainer')){
		qsContainer.innerHTML = qscHTML;
		qsForm = $('quickSearchFormBean');
		qsErrorCon = $('QuickSearchErrorContainer');
		qsError = $('QuickSearchErrorText');
		qsDestContainer = $('DestinationContainer');
		qsDestField = $('searchbox');
		qsSubmitBut = $('submitbutton');
		
		qsForm.async.value = true;
		qsForm.onsubmit = formSubmit;
	}
}

function qsClarifyLoc(contentObj, historyObject){		
	if(!document.getElementById('quickSearchFormBean')){
		qsContainer.innerHTML = contentObj.qscH;
		qsForm = $('quickSearchFormBean');
		qsErrorCon = $('QuickSearchErrorContainer');
		qsError = $('QuickSearchErrorText');
		qsDestContainer = $('DestinationContainer');
		qsSubmitBut = $('submitbutton');
		
		qsForm.async.value = true;
		qsForm.onsubmit = formSubmit;
	}
	qsDestContainer.innerHTML = "<div id='ClarifyBoxContainer'><div id='SearchBoxLabel'><label for='locationSelect'>"+CLARIFYLOCLBL+"</label></div><select id='searchbox' name='searchbox' size='3' tabindex='1'>"+buildLocOptList(contentObj.loc)+"</select><div id='startOverLink'><a href='?clearQuickRes=true'>"+STARTOVERTXT+"</a></div></div>";
	qsDestField = $('searchbox');
	qsSubmitBut.src = SELECTLOCBUTSRC;
	qsSubmitBut.alt = SELECTLOCBUTALTTXT;
	
	qsError.innerHTML = "<p>" + message['error'] + "</p>";
	if (!historyObject || !historyObject.calledFromHistory){
		dsHistory.addFunction(qsClarifyLoc, window, contentObj);
	}
}

function qsClarifyHotel(contentObj, historyObject){		
	if(!document.getElementById('quickSearchFormBean')){
		qsContainer.innerHTML = contentObj.qscH;
		qsForm = $('quickSearchFormBean');
		qsErrorCon = $('QuickSearchErrorContainer');
		qsError = $('QuickSearchErrorText');
		qsDestContainer = $('DestinationContainer');
		qsSubmitBut = $('submitbutton');
		
		qsForm.async.value = true;
		qsForm.onsubmit = formSubmit;
	}
	qsDestContainer.innerHTML = "<div id='ClarifyBoxContainer'><div id='SearchBoxLabel'><label for='hotelSelect'>"+CLARIFYLOCLBL+"</label></div><select id='hotelSelect' name='hotelSelect' size='3' tabindex='1'>"+buildHotelOptList(contentObj.hotel)+"</select><div id='startOverLink'><a href='?clearQuickRes=true'>"+STARTOVERTXT+"</a></div></div>";
	qsDestField = $('hotelSelect');
	qsSubmitBut.src = SELECTLOCBUTSRC;
	qsSubmitBut.alt = SELECTLOCBUTALTTXT;
	
	qsError.innerHTML = "<p>" + message['error'] + "</p>";
	if (!historyObject || !historyObject.calledFromHistory){
		dsHistory.addFunction(qsClarifyHotel, window, contentObj);
	}
}

function qsNoAvail(noAvailURL, historyObject){		
	qsContainer.innerHTML = "<div id='NoAvailContainer'><p>"+NOAVAILMESS1+" <a href='"+noAvailURL+"' target='_blank'> "+NOAVAILMESS2+"</a> "+NOAVAILMESS3+" "+ message['resDirectPhoneAndMsg_header'] +" "+NOAVAILMESS4+"</p><div id='startOverLink'><a href='?clearQuickRes=true'>"+STARTOVERTXT+"</a></div></div>";
	if (!historyObject || !historyObject.calledFromHistory){
		dsHistory.addFunction(qsNoAvail, window, noAvailURL);
	}
}

function validateDest(){	
	if(qsDestField == null){
		
		return true;
	}
	qsError.innerHTML = "<p>&nbsp;</p>";
	if (qsDestField.value == "" || /^\s+$/.test(qsDestField.value))
	{
		qsError.innerHTML = "<p>"+NODESTERRTXT+"</p>";
		qsDestField.clear();
		qsDestField.focus();
		
		return false;
	}
	else{
		return true;
	}
}

function checkAsync(){
	var asyncV = $F('async');
	if(asyncV == "true"){
		return true;
	}
	else{
		return false;
	}
}

function formSubmit(){
	if(validateDest()){
		if(checkAsync()){
			var formData = qsForm.serialize();
		      	qsProcessing();
		      	asyncSubmitData(formData);
		      	
		      	return false;
		}
		else{
			qsForm.submit();
		}
	}
	else{
		return false;
	}
}

function asyncSubmitData(formData){	
	var URL = qsForm['action'];
	new Ajax.Request(URL,{
		parameters: formData,
		onSuccess: function(result){			
			var msg = eval('(' + result.responseText + ')');
			handleResponse(msg);
		},
		onFailure: function(){
			qsForm.submit();
		}
	});
	
	return false;
}

function handleResponse(message){	
    	var action = message['action'];
	switch(action){
	case "success":
		var redirectURL = message['redirectURL'];
		document.location = redirectURL;
		break;
	case "clarifyLoc":
		qsForm.onsubmit = function(){return false;};
		var locations = message['locations'];			
		qsDestContainer.innerHTML = "<div id='ClarifyBoxContainer'><div id='SearchBoxLabel'><label for='locationSelect'>"+CLARIFYLOCLBL+"</label></div><select id='searchbox' name='searchbox' size='3' tabindex='1'>"+buildLocOptList(locations)+"</select><div id='startOverLink'><a href='?clearQuickRes=true'>"+STARTOVERTXT+"</a></div></div>";
		qsDestField = $('searchbox');
		qsSubmitBut.src = SELECTLOCBUTSRC;
		qsSubmitBut.alt = SELECTLOCBUTALTTXT;
		qsSubmitBut.observe('click', formSubmit);
		qsError.innerHTML = "<p>" + message['error'] + "</p>";
		qscHTML = qsContainer.innerHTML;
		
		dsHistory.addFunction(qsClarifyLoc, window, {loc: locations, qscH: qscHTML});
		
		break;
	case "clarifyHotel":
		qsForm.onsubmit = function(){return false;};
		var hotels = message['hotels'];
		qsDestContainer.innerHTML = "<div id='ClarifyBoxContainer'><div id='SearchBoxLabel'><label for='hotelSelect'>"+CLARIFYLOCLBL+"</label></div><select id='hotelSelect' name='hotelSelect' size='3' tabindex='1'>"+buildHotelOptList(hotels)+"</select><div id='startOverLink'><a href='?clearQuickRes=true'>"+STARTOVERTXT+"</a></div></div>";
		qsDestField = $('hotelSelect');
		qsSubmitBut.src = SELECTLOCBUTSRC;
		qsSubmitBut.alt = SELECTLOCBUTALTTXT;
		qsSubmitBut.observe('click', formSubmit);
		qsError.innerHTML = "<p>" + message['error'] + "</p>";
		qscHTML = qsContainer.innerHTML;
		
		dsHistory.addFunction(qsClarifyHotel, window, {hotel: hotels, qscH: qscHTML});
		
		break;
	case "noAvail":
		var redirectURL = message['redirectURL'];
		var noAvailURL = message['noAvailURL'];		
		if (redirectURL.indexOf('dates-preferences') > -1 )
		{
		   document.location = redirectURL;	
		}
		else
		{
		   qsContainer.innerHTML = "<div id='NoAvailContainer'><p>"+NOAVAILMESS1+" <a href='"+noAvailURL+"' target='_blank'> "+NOAVAILMESS2+"</a> "+NOAVAILMESS3+" "+ message['resDirectPhoneAndMsg_header'] +" "+NOAVAILMESS4+"</p><div id='startOverLink'><a href='?clearQuickRes=true'>"+STARTOVERTXT+"</a></div></div>";
		   dsHistory.addFunction(qsNoAvail, window, noAvailURL);
		}
		break;
	case "noLocation":
		qsError.innerHTML = "<p>" + message['error'] + "</p>";
		qsDestField.focus();
		break;
	default:
		qsError.innerHTML = "<p>" + message['error'] + "</p>";
		qsDestField.focus();
		break;
	}
}

function qsProcessing(){
	qsError.innerHTML = "<p class='loading'>"+PROCESSINGTXT+"</p>";
	qsError.appendChild(loadingImgObj);
}

function buildLocOptList(loc){
	var optList = "";
	for(var i=0; i<loc.length; i++){
		if(i==0){
			optList += "\n<option value='"+loc[i]['city']+", "+((loc[i]['stateCode'] !='') ? loc[i]['stateCode']+", " : "")+loc[i]['country']+"' selected='selected'>"+loc[i]['city']+", "+((loc[i]['stateCode'] !='') ? loc[i]['stateCode']+", " : "")+loc[i]['country']+"</option>";
		}else{
			optList += "\n<option value='"+loc[i]['city']+", "+((loc[i]['stateCode'] !='') ? loc[i]['stateCode']+", " : "")+loc[i]['country']+"'>"+loc[i]['city']+", "+((loc[i]['stateCode'] !='') ? loc[i]['stateCode']+", " : "")+loc[i]['country']+"</option>";
		}
	}
	return optList;
}

function buildHotelOptList(hotel){
	var optList = "";
	for(var i=0; i<hotel.length; i++){
		if(i==0){
			optList += "\n<option value='"+hotel[i]['hotelCode']+"' selected='selected'>"+hotel[i]['hotelFriendlyName']+"</option>";
		}else{
			optList += "\n<option value='"+hotel[i]['hotelCode']+"'>"+hotel[i]['hotelFriendlyName']+"</option>";
		}		
	}
	return optList;
}
