
var fullRatesCallout ={
		init: function(){
			//initialize from date and toDates
			var formsToInitialize = $(':hidden[name=initFormDates]');
			if($(formsToInitialize).length > 0)
			{
				$(formsToInitialize).each(function(){
					initFormDates($(this).val());
				});
			}
			
			var formObj = fullRatesCallout.findFullRatesCalloutForm("fullRatesCalloutForm");
			
			if(formObj)
			{
				var corporateCodeBox = formObj.corporateCode;
				var groupCodeBox = formObj.groupCode;			
				var incentivesBox = formObj.displayableIncentiveType_Number;
				
				var rewardCheckBoxElement = fullRatesCallout.findFormElementById(formObj, "rateREW", "useMarriottRewardsPoint");
				var noneRadioButtonElement= fullRatesCallout.findFormElementById(formObj, "none", "clusterCode");
				
				if(rewardCheckBoxElement && noneRadioButtonElement)
				{
					if((rewardCheckBoxElement.checked == true && formObj.useMarriottRewardsPoint.value == "true")||((formObj.isClusterCodePresent.value == "false")))
					{
						if (incentivesBox) {
							incentivesBox.value = "";
						}
						corporateCodeBox.value = "";
						if(groupCodeBox) {
							groupCodeBox.value = "";
						}
						noneRadioButtonElement.checked = true;
					}
					
				}
				else if((formObj.isClusterCodePresent.value == "false") && noneRadioButtonElement)
				{
					if (incentivesBox) {
						incentivesBox.value = "";
					}
					corporateCodeBox.value = "";
					if(groupCodeBox) {
						groupCodeBox.value = "";
					}
					noneRadioButtonElement.checked = true;
				}
				
				// Attach handlers for Reward check box/link, groupCode and clusterCode
				YAHOO.util.Event.addListener("use-rewards-point-link", "click", fullRatesCallout.handleRewardPointLink);
				for (j = 0; j < formObj.elements.length; j++) {
				
					if (formObj.elements[j].name == "useMarriottRewardsPoint" || formObj.elements[j].name == "clusterCode" || formObj.elements[j].name == "corporateCode" ||
					formObj.elements[j].name == "displayableIncentiveType_Number" ||
					formObj.elements[j].name == "groupCode") {
						if (formObj.clusterCode) {
							YAHOO.util.Event.addListener(formObj.elements[j], "click", fullRatesCallout.clusterCodeChanged);
							YAHOO.util.Event.addListener(formObj.elements[j], "change", fullRatesCallout.clusterCodeChanged);
							YAHOO.util.Event.addListener(formObj.elements[j], "focus", fullRatesCallout.clusterCodeChanged);							
						}
					}
				}
			}
						
		},
		
		handleRewardPointLink : function(e)
		{
			YAHOO.util.Event.preventDefault(e);
			
			var formObj = fullRatesCallout.findFullRatesCalloutForm("fullRatesCalloutForm");
			
			var rewardCheckBox = fullRatesCallout.findFormElementById(formObj, "rateREW", "useMarriottRewardsPoint");
					
			var noRatesButton = fullRatesCallout.findFormElementById(formObj, "none", "clusterCode");
			
			var corporateCodeBox = formObj.corporateCode;
			var groupCodeBox = formObj.groupCode;			
			var incentivesBox = formObj.displayableIncentiveType_Number;
			
			
			// The user clicked the "use rewards" Link - blank out the rest of the form
				if (incentivesBox) {
					incentivesBox.value = "";
				}
				corporateCodeBox.value = "";
				if(groupCodeBox) {
					groupCodeBox.value = "";
				}
				noRatesButton.checked = true;
				
				rewardCheckBox.checked = true;
				
				if(formObj.isReservationSite.value == 'true'){
					sendto('','','/search/redeemRewardsPoints.mi','5');
				}
				else{
					sendto('US','default_domain','/search/redeemRewardsPoints.mi','5');
				}
		
		},
		
		validateMRNumForCorpCode: function(formId, rewardErrorMessage)
		{
			var submit = true;
			var objform = fullRatesCallout.findFullRatesCalloutForm(formId);
			if((objform.corporateCode != null) && (objform.corporateCode.value == 'M11' || objform.corporateCode.value == 'm11'))
		
			{
				if(objform.marriottRewardsNumber == null || objform.marriottRewardsNumber.value == '')
				{
					var $D = YAHOO.util.Dom;
					var $E = YAHOO.util.Event;
				    
					alert(rewardErrorMessage);
					
					var rewardPanelControl = $D.get('reward-panel-control');
					var rewardPanelContent = $D.get('reward-panel-content');
					
					if($D.hasClass(rewardPanelControl,'collapsed') && $D.hasClass(rewardPanelContent,'content-collapsed'))
					{
						var z = new YAHOO.widget.Effect(rewardPanelContent);
						
						rewardPanelControl.className = 'expanded';
						$D.removeClass(rewardPanelContent,'content-collapsed')
						if($D.hasClass(rewardPanelContent,'child-expandable-container')){
							z.ChildExpand();
						}
						else{
							z.Expand();
						}
						setTimeout(function(){objform.marriottRewardsNumber.focus();},550);
						//objform.marriottRewardsNumber.focus();
					}
					else{
						objform.marriottRewardsNumber.focus();
					}					
					var submit = false;
				}
			}
			return submit;
		},
		
		
		validate: function(formId, offerStartDate, offerEndDate, subCategory, isRightMuSpecials, pageId, pageIdSpecials, rewardErrorMessage, rewardSpecials){
			
			var objForm =fullRatesCallout.findFullRatesCalloutForm(formId);
			var corporateCode;
			var groupCode;
			var formClusterCode;
				
			if(objForm.corporateCode)
			{
				corporateCode = objForm.corporateCode.value;
			}
			if(objForm.groupCode)
			{
				groupCode = objForm.groupCode.value;
			}
			
			var submit = false;
		
			var displayIncentiveNumber = objForm.displayableIncentiveType_Number;
			var objClusterSell = objForm.clusterSell;
			objClusterSell.value = false;
			
			var rewardCheckBox = fullRatesCallout.findFormElementById(objForm, "rateREW", "useMarriottRewardsPoint");
			
			var clusterCodeGroup =  objForm.elements["clusterCode"];
			
			if(clusterCodeGroup)
			{
				for(k=0; k<clusterCodeGroup.length; k++)
				{
					if(rewardCheckBox.checked == false && clusterCodeGroup[k].value == "MW1")
					{
						clusterCodeGroup[k].value = "none";  // reset to default value;
					}
					if(clusterCodeGroup[k].checked == true)
					{
						formClusterCode = clusterCodeGroup[k].value;
					}
				}
			}
						
			if (clusterCodeGroup){
				for (i=0;i<clusterCodeGroup.length;i++) {
					
					if((clusterCodeGroup[i].checked == true) && ((clusterCodeGroup[i].value == "none"))&&
					((rewardCheckBox) && (rewardCheckBox.checked == true) && (rewardCheckBox.value == "true" || objForm.useMarriottRewardsPoint.value == "true")))
					{
						if(objForm.numberOfRooms.value == 4)
						{
							if(confirm('The additional information is not applicable when requesting more than 3 rooms. Click "OK" to request a group room rate. Click "Cancel" to revise your search.')){
								objClusterSell.value = false;
								return true;
							}
							else{
								return false;
							}						
						}
						else{
							clusterCodeGroup[i].value = "MW1";
							formClusterCode = "MW1";
							objClusterSell.value = true;
						}
						
					}
					
					else if((clusterCodeGroup[i].checked == true) && (clusterCodeGroup[i].value == "CORP" || clusterCodeGroup[i].value == "corp")) 
					{
						if(objForm.numberOfRooms.value == 4)
						{
							if(confirm('The additional information is not applicable when requesting more than 3 rooms. Click "OK" to request a group room rate. Click "Cancel" to revise your search.')){
								objClusterSell.value = false;
								return true;
							}
							else{
								return false;
							}						
						}
						else if(corporateCode == '' || corporateCode.length<3){
							alert("The corporate/promotional code you entered has fewer than three characters. Please verify the code.");
							objForm.corporateCode.focus();
							return false;
						}
						else{
							objClusterSell.value = true;
							clusterCodeGroup[i].value='';
							
						}
					}
					else if((clusterCodeGroup[i].checked == true) && (clusterCodeGroup[i].value == "GROUP" || clusterCodeGroup[i].value == "group")) 
					{
						if(objForm.numberOfRooms.value == 4)
						{
							if(confirm('The additional information is not applicable when requesting more than 3 rooms. Click "OK" to request a group room rate. Click "Cancel" to revise your search.')){
								objClusterSell.value = false;
								return true;
							}
							else{
								return false;
							}						
						}
						else if(groupCode == '' || groupCode.length<7){
							alert("The group code you entered has fewer than seven characters. Please verify the code.");
							objForm.groupCode.focus();
							return false;
						}
						else{
							clusterCodeGroup[i].value='';
						}
					}
					else if ((clusterCodeGroup[i].checked == true) && (clusterCodeGroup[i].value == "INT" || clusterCodeGroup[i].value == "int"))
					{
						if(objForm.numberOfRooms.value == 4)
						{
							if(confirm('The additional information is not applicable when requesting more than 3 rooms. Click "OK" to request a group room rate. Click "Cancel" to revise your search.')){
								objClusterSell.value = false;
								return true;
							}
							else{
								return false;
							}						
						}
						else if (displayIncentiveNumber && displayIncentiveNumber.value == '')
						{
							alert("You have requested a special rate without specifying an award type or number. We cannot check rates and availability unless the award type or number is specified.");
	 									return false;
						}
						else if (displayIncentiveNumber && displayIncentiveNumber.value != '' && objForm.numberOfRooms.value > 1)
						{
							alert('You may only reserve one room at a time when redeeming an award.  To book more than one room, please call Marriott Individual Incentives Reservations at 1-800-899-7235.')
							return false;
						}
						else if(displayIncentiveNumber && displayIncentiveNumber.value != '' && (objForm.fromDate.value == '' || objForm.toDate.value == ''))
						{
							alert('Please enter check-in and check-out dates when searching by award number or type');	
							return false;
						}
						else{
							clusterCodeGroup[i].value='';
						}
					}
					else if ((clusterCodeGroup[i].checked == true) && (clusterCodeGroup[i].value != "") 
						&& (clusterCodeGroup[i].value != "none") && (clusterCodeGroup[i].value != "INT") 
						&& (clusterCodeGroup[i].value != "group")) {
						objClusterSell.value = true;
					}
										
				}
			}
			
					    
			submit = fullRatesCallout.validateMRNumForCorpCode(formId, rewardErrorMessage);
		
			if(objForm.numberOfRooms.value == 4 && formClusterCode != 'none')
			{
			    if(confirm('The additional information is not applicable when requesting more than 3 rooms. Click "OK" to request a group room rate. Click "Cancel" to revise your search.')){
					objClusterSell.value = false;
					return true;
				}
				else{
					return false;
				}
			}
		
			if(submit)
			{
		
				if (pageId != pageIdSpecials || (isRightMuSpecials == "true"))
				{
					
					submit = validateForm(formId);
					
				}
				else
				{
					var rewardsOffers = rewardSpecials;					
					if(validateForm(formId) == true)
					{				
						submit =  ValidateOfferDates(formId, offerStartDate, offerEndDate, rewardsOffers, subCategory);
						
					}else{
						submit = false ;
					}
				}
			}
			return submit;
		},		
		
		findFullRatesCalloutForm: function(formId){
		
			var formObj = null;
			for(i=0; i< document.forms.length; i++)
			{
				if((document.forms[i].id == formId) && (document.forms[i].name == "fullRatesCalloutForm"))
				{
					formObj = document.forms[i];
				}
			}
			if(formObj!= null)
			{
				return formObj;
			}
			else{
				return null;
			}
		},
		
		findFormElementById: function(formObj, elementId, elementName){
			var elementObj = null;
			
			for(i=0; i < formObj.elements.length; i++)
			{
				if (elementName && formObj.elements[i].id == elementId && formObj.elements[i].name == elementName) {
					elementObj = formObj.elements[i];
					
				}
				else 
					if (formObj.elements[i].id == elementId) {
						elementObj = formObj.elements[i];
					}
				
			}
			return elementObj;
				
		},
		
		clusterCodeChanged: function(){
			var clusterCode = this.form.clusterCode;
			var corporateCodeBox = this.form.corporateCode;
			var groupCodeBox = this.form.groupCode;			
			var incentivesBox = this.form.displayableIncentiveType_Number;
			
			var noRatesButton = null;
			var corporateCodeButton = null;
			var groupCodeButton = null;
			var incentivesButton = null;
			var rewardCheckBox = null;			
			
			rewardCheckBox = fullRatesCallout.findFormElementById(this.form, "rateREW", "useMarriottRewardsPoint");
			
			
			noRatesButton = fullRatesCallout.findFormElementById(this.form, "none", "clusterCode");
			corporateCodeButton = fullRatesCallout.findFormElementById(this.form, "corp", "clusterCode");
			groupCodeButton = fullRatesCallout.findFormElementById(this.form, "group", "clusterCode");
			incentivesButton = fullRatesCallout.findFormElementById(this.form, "INT", "clusterCode");
			
			if(this == rewardCheckBox){
				// The user checked the "use rewards" checkbox - blank out the rest of the form
				if (incentivesBox) {
					incentivesBox.value = "";
				}
				corporateCodeBox.value = "";
				if(groupCodeBox) {
					groupCodeBox.value = "";
				}
				noRatesButton.checked = true;
								
			}
			else {
				// The user selected something else - uncheck the use points box				
				if (rewardCheckBox) {
					rewardCheckBox.checked = false;
				}
				
				if (this.type == "text") {
					// User clicked a text box
					if (this == corporateCodeBox) {
						corporateCodeButton.checked = true;
						if (incentivesButton) {
							incentivesBox.value = "";
						}
						if (groupCodeButton){
							groupCodeBox.value = "";
						}
						
					}
					else if(this == groupCodeBox) {
						groupCodeButton.checked = true;
						if (incentivesButton) {
							incentivesBox.value = "";
						}
						if (corporateCodeButton){
							corporateCodeBox.value = "";
						}
						
					}
					else if (this == incentivesBox) {
						incentivesButton.checked = true;
						if (corporateCodeButton){
							corporateCodeBox.value = "";
						}
						if (groupCodeButton){
							groupCodeBox.value = "";
						}
					}
				}
				else if (this.type == "radio") {
						// User clicked a radio button
						if (this == corporateCodeButton) {
							// User selected corporate code radio button
							corporateCodeBox.focus();
						}
						else {
							corporateCodeBox.value = "";
						}
						
						if (this == groupCodeButton) {
							groupCodeBox.focus();
						}
						else {
							groupCodeBox.value = "";
						}
						
						if (this == incentivesButton) {
							// User selected the incentives radio button
							incentivesBox.focus();
						}
						else {
							if (this.form.displayableIncentiveType_Number) {
								incentivesBox.value = "";
							}
						}
					}
			}
			
		},
		
		moreOptions: function(formId, checkAvailabilityURL, netlinkResURL, netlinkId){
			var objForm = fullRatesCallout.findFullRatesCalloutForm(formId);
			var propertyCode = objForm.propertyCode.value;
			var fromDate = objForm.fromDate.value;
			var toDate = objForm.toDate.value;
			var numberOfGuests = objForm.numberOfGuests.value;
			var numberOfRooms = objForm.numberOfRooms.value;
			var marriottRewardsNumber = objForm.marriottRewardsNumber.value;
			var corporateCode = null;	
			var groupCode = null;	
			var submit = true;
			if(objForm.corporateCode)
			{
				corporateCode = objForm.corporateCode.value;
			}
			if(objForm.groupCode)
			{
				groupCode = objForm.groupCode.value;
			}			
			//var rewardCheckBoxElement = document.getElementById("rateREW");
			var rewardCheckBoxElement = fullRatesCallout.findFormElementById(objForm, "rateREW", "useMarriottRewardsPoint");
			var clusterCodeGroup = objForm.clusterCode;
			var clusterCodeValue = null;
			
			//create Param list
			var params = "&fromDate="+fromDate+"&toDate="+toDate+"&numberOfGuests="+numberOfGuests+"&numberOfRooms="+numberOfRooms+"&marriottRewardsNumber="+marriottRewardsNumber;
			
			if(clusterCodeGroup){
				// get the value of cluster code, for which checkbox/radio button is checked
				for (i=0; i<clusterCodeGroup.length; i++)
				{
					if(clusterCodeGroup[i].checked == true)
					{
						clusterCodeValue = clusterCodeGroup[i].value;					
					}
				}
			}
			
			if((clusterCodeValue!=null)&&(clusterCodeValue.length>0)&&(clusterCodeValue!="INT"))
			{
				
				if(rewardCheckBoxElement.checked == true && rewardCheckBoxElement.value == "true" && clusterCodeValue == "none")
				{
					params = params + "&cc=MW1";
					corporateCode = "";
					groupCode = "";
					
				}
				else if((clusterCodeValue == "CORP" || clusterCodeValue == "corp"))
				{
					if(corporateCode == '' || corporateCode.length<3){
						alert("The corporate/promotional code you entered has fewer than three characters. Please verify the code.");
						objForm.corporateCode.focus();
						submit = false;
					}
					else{
						params = params + "&cc="+corporateCode;
					}
					
				}
				else if((clusterCodeValue == "GROUP"|| clusterCodeValue == "group")){		
					if(groupCode == '' || groupCode.length<7){
						alert("The group code you entered has fewer than seven characters. Please verify the code.");
						objForm.groupCode.focus();
						submit= false;
						
					}	
					else{
						params = params + "&groupCode="+groupCode+"&cc=GROUP";
					}		
				}				
				else if((clusterCodeValue!= "corp" || clusterCodeValue !="CORP")
						&& (clusterCodeValue != "group" || clusterCodeValue != "GROUP")){
					params = params + "&cc="+clusterCodeValue;
				}
			}
			if(submit)
			{
				var url = checkAvailabilityURL+propertyCode;

				if (netlinkId == 'true')
				{
					url = netlinkResURL+propertyCode+'&app=NetLink';
				}
				//alert(url);
				if (objForm.isReservationSite.value == 'false' && rewardCheckBoxElement!= null && rewardCheckBoxElement.checked == true)
				{
					sendto('US','default_domain',url+params,'3');
				}
				else
				{
					document.location.href=url+params;
				}
			}			
			
			
		},
		
		dealsPageMoreOptions: function(formId, checkAvailabilityURL, netlinkResURL, netlinkId){
			var objForm = fullRatesCallout.findFullRatesCalloutForm(formId);
			var propertyCode = objForm.propertyCode.value;
			var fromDate = objForm.fromDate.value;
			var toDate = objForm.toDate.value;
			var numberOfGuests = objForm.numberOfGuests.value;
			var numberOfRooms = objForm.numberOfRooms.value;
			var marriottRewardsNumber = objForm.marriottRewardsNumber.value;
			var corporateCode = objForm.corporateCode.value;
						
			var params = "&fromDate="+fromDate+"&toDate="+toDate+"&numberOfGuests="+numberOfGuests+"&numberOfRooms="+numberOfRooms+"&marriottRewardsNumber="+marriottRewardsNumber;
						
			if(corporateCode.length > 0)
			{
				params = params + "&cc="+corporateCode;
			}			
			
			var url = checkAvailabilityURL+propertyCode;

			if (netlinkId == 'true')
			{
				url = netlinkResURL+propertyCode+'&app=NetLink';
			}
			
			document.location.href=url+params;
			
		}

	
};

YAHOO.util.Event.onAvailable("layout-message-bar", fullRatesCallout.init, fullRatesCallout, true,true);

function validateForm(formId) {

	var objForm = fullRatesCallout.findFullRatesCalloutForm(formId);
	var fromDate = objForm.fromDate.value;
	var toDate = objForm.toDate.value;
	if (fromDate != '' || toDate != '')
	{
		if (formId == 'fullRatesCalloutForm')
		{
			return dates.validateDates();
		}
		else
		{
			return dates.validateDates('','fromDate','toDate',formId);
		}
	}
	else
	{
		fullRatesCallout.moreOptions(formId,'/reservation/availability.mi?propertyCode=','/netlink/reservation/availability.mi?propertyCode=','');
		return false;
	}
}

function ValidateOfferDates(formId, offerStartDate, offerEndDate, rewardsOffers, subCategory)
{	
	if (offerStartDate != '' && offerEndDate != '') {
		var startYear = offerStartDate.substring(0, offerStartDate.indexOf('-'));
		var startMonthDay = offerStartDate.substring(offerStartDate.indexOf('-')+1);
		var startMonth = startMonthDay.substring(0, startMonthDay.indexOf('-'));
		var startDay = startMonthDay.substring(startMonthDay.indexOf('-')+1);
	 	offerStartDate = startMonth+"/"+startDay+"/"+startYear;

	 	var endYear = offerEndDate.substring(0, offerEndDate.indexOf('-'));
		var endMonthDay = offerEndDate.substring(offerEndDate.indexOf('-')+1);
		var endMonth = endMonthDay.substring(0, endMonthDay.indexOf('-'));
		var endDay = endMonthDay.substring(endMonthDay.indexOf('-')+1);
	 	offerEndDate = endMonth+"/"+endDay+"/"+endYear;	 
	 	
	 	var offerEndDateForChkout = new Date(offerEndDate); 
		offerEndDateForChkout.setDate(offerEndDateForChkout.getDate() + 1);
		
		
		var objForm = fullRatesCallout.findFullRatesCalloutForm(formId);
		var dateFormatPattern = objForm.elements['dateFormatPattern'].value.toLowerCase();
		var fromDate = objForm.elements['fromDate'].value ;

		fromDate = dateInMMDDYYFormat(fromDate,dateFormatPattern) ;
		if (!IsDateEqualOrAfter(offerStartDate, fromDate) ||
	 		!IsDateEqualOrAfter(fromDate, offerEndDate)){
			alert("Check In Date is not valid for this offer.  Please verify your selection criteria.");
			return false;
		}

		var toDate = objForm.elements['toDate'].value ;
		toDate = dateInMMDDYYFormat(toDate,dateFormatPattern) ;

		if (!IsDateEqualOrAfter(toDate, offerEndDateForChkout)){
			alert("Check Out Date is not valid for this offer.  Please verify your selection criteria.");
			return false;
		}
 	}
	
	return ValidateRewards(formId, rewardsOffers, subCategory);
}

function ValidateRewards(formId, rewardsOffers, subCategory)
{
	
	var objForm = fullRatesCallout.findFullRatesCalloutForm(formId);
	var marriottRewardsNumber = objForm.marriottRewardsNumber.value;
	if (subCategory != '' && rewardsOffers.indexOf(subCategory) != -1) {
		if (marriottRewardsNumber == '') {
			alert("A Marriott Rewards Number is required for this offer.\n Please enter a Rewards Number.");
			objForm.marriottRewardsNumber.focus();
			return false;
		}
	}
	return true;
}

function initFormDates(formId)
{
	var curDate = new Date();
	var fromDate = (curDate.getMonth()+ 1) + "/" + curDate.getDate() + "/" + curDate.getFullYear();
	
	var objForm = fullRatesCallout.findFullRatesCalloutForm(formId);
	var dateFormatPattern = (objForm.elements['dateFormatPattern'].value).toLowerCase() ;
	objForm.elements['fromDate'].value = formatDate(fromDate,dateFormatPattern) ;
	objForm.elements['toDate'].value = datePlusOne(fromDate,dateFormatPattern) ;
	
}

function openAgency()
{
	window.open("/property/property/locatorPopUp.jsp","AgencyLocator", 'toolbar=0,location=0,directories=0,status=0,menubar=0,resizable=yes,width=500,height=500');
}

function IsDateEqualOrAfter(firstDate, secondDate)
{

	var dtmDate1 = new Date(firstDate);
	var dtmDate2 = new Date(secondDate);

	return (dtmDate1.getTime() <= dtmDate2.getTime());
}

