var homepage = {
 
    init : function() {
    	var brandSelected = false;

        // Attach handlers for homepage search module tabs
        var findTab = document.getElementById("find-hotel");
        var keywordTab = document.getElementById("keyword-search");
        var lookupTab = document.getElementById("lookup");
        var moreOptionsLink = document.getElementById("more-options");
        if(findTab) {findTab.onclick = homepage.toggleSearchType;}
        if(keywordTab) {keywordTab.onclick = homepage.toggleSearchType;}
        if (lookupTab) {lookupTab.onclick = homepage.toggleSearchType;}
        moreOptionsLink.onclick = homepage.moreOptions;
        
        // Add button mouse-over effects
        if(document.getElementsByTagName){
			var buttons = document.getElementsByTagName('button');
			for(i=0;i<buttons.length;i++) {
				buttons[i].onmouseover = homepage.changeButtonClass;
				buttons[i].onmouseout = homepage.changeButtonClass;
			}
		}

		// Add slider control
		var sliderControl = document.getElementById("toggle-slider");
    	sliderControl.onclick = homepage.toggleSlider;
    	
    	// Add brand dropdown
    	if(document.all) {
			if(document.getElementById("brandsDirectory")) {
				var sfEls = document.getElementById("brandsDirectory").getElementsByTagName("LI");
				for (var i=0; i<sfEls.length; i++) {
					sfEls[i].onmouseover=function() {
						this.className+=" sfhover";
					}
					sfEls[i].onmouseout=function() {
						this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
					}
				}
			}
		}
        
        // Attach handlers for country & state onchange, brands onclicks, corp code onclicks
		for(i=0; i<document.forms.length; i++){
			for(j=0; j<document.forms[i].elements.length; j++){
				if(document.forms[i].elements[j].name == "destinationAddress.country") {
					document.forms[i].elements[j].onchange=homepage.countryChanged;
				}
				else if(document.forms[i].elements[j].name == "destinationAddress.stateProvince") {
					document.forms[i].elements[j].onchange=homepage.stateChanged;
				}
				else if(document.forms[i].elements[j].name == "marriottBrands") {
					document.forms[i].elements[j].onclick=homepage.brandsSelectionChanged;
					if(document.forms[i].elements[j].value != "all" && document.forms[i].elements[j].checked) {
						brandSelected = true;
					}	
				}
				else if(document.forms[i].elements[j].name == "clusterCode" || document.forms[i].elements[j].name == "useRewardsPoints" ||
						document.forms[i].elements[j].name == "corporateCode") {
					document.forms[i].elements[j].onclick=homepage.clusterCodeChanged;
				}
			}
		}
		
		// Attach form validation
		for(var k=0; k<document.forms.length; k++) {
			if(document.forms[k].id == "city-search-form" || document.forms[k].id == "keyword-form") {
				document.forms[k].onsubmit = homepage.validateSearchForm;
				// If this is the travel agents site, pop the results window
				if(document.getElementById("travel-agent-search-form")) {
					document.forms[k].target = "TravelAgentsPropSearchPopup";
				}
			}
		}
		
		// Set up quick tools
		if(document.getElementById("quick-tools-trigger")) {
			var quickToolsTrigger = document.getElementById("quick-tools-trigger");
			quickToolsTrigger.onclick = homepage.toggleQuickTools;
			YAHOO.util.Dom.addClass(quickToolsTrigger, "collapsed");
			// If the controlling element contains an A tag, disable it
			controllersChildren = YAHOO.util.Dom.getChildrenBy(quickToolsTrigger, function(el){return el.tagName == 'A';});
			for (j=0; j<controllersChildren.length; j++) {
				controllersChildren[j].onclick = function() { return false; };
			}
		}
		
		// Open the brand slider on the homepage if a brand is selected
		if(document.getElementById("homepage") && brandSelected) {
			homepage.toggleSlider.call(document.getElementById("toggle-slider"));
		}
	
	},
    
    toggleSlider : function() {
    	var attributes = {height: { to: 140 }};
    	
    	if(this.className == "close-slider") {
    		var attributes = {height: { to: 0 }};
    		this.className = "open-slider";
    	}
    	else {
    		this.className = "close-slider";
    	}
    	
    	var anim = new YAHOO.util.Anim('brand-selection', attributes, .3);
		anim.animate();
    },
    
    toggleQuickTools : function() {
    	var quickTools = document.getElementById("quick-tools");
    	
    	if ( YAHOO.util.Dom.hasClass(quickTools, "active")) {
    		YAHOO.util.Dom.removeClass(quickTools, "active");
    	}
    	else {
    		YAHOO.util.Dom.addClass(quickTools, "active");
    	}
    },
    
    toggleSearchType : function() {
    	var hiddenForms = homepage.getElementsByClass("toggling-forms");
    	var searchTabs = homepage.getElementsByClass("search-tab");
    	
    	var formToShow = this.id + "-form";
    	
    	// Show the form
    	for(var i = 0; i < hiddenForms.length; i++){
        	if(hiddenForms[i].id == formToShow){
                // Show the form
                hiddenForms[i].style.display = "block";
        	}
        	else {
                // Hide the other forms
                hiddenForms[i].style.display = "none";
        	}
        }
    	// Correct the tabs
    	for(var j = 0; j < searchTabs.length; j++){
        	if(searchTabs[j] == this){
                searchTabs[j].className = "active-tab search-tab";
        	}
        	else {
                searchTabs[j].className = "inactive-tab search-tab";
        	}
        }
    },
    
	changeButtonClass : function()
	{
		var newButtonClass;
		var buttonClass = this.className;
		var buttonPattern = /-hover/;
		if(buttonPattern.test(buttonClass)) {
			newButtonClass = buttonClass.replace('-hover','');
		}
		else {
			newButtonClass = buttonClass.replace(buttonClass, buttonClass + '-hover');
		}
	 	this.className=newButtonClass;
	},
	
	stateChanged : function() {
	// If the user selects a state in the search form, "US" is automatically selected as the country
		if(this.name.match("destination")) {
			if (this.selectedIndex == 0 ) {
				this.form.elements["destinationAddress.country"].selectedIndex = 0;
			}
			else {
				this.form.elements["destinationAddress.country"].value = "US";
			}
		}
		else if(this.name.match("origin")) {
			if (this.selectedIndex == 0 ) {
				this.form.elements["originAddress.country"].selectedIndex = 0;
			}
			else {
				this.form.elements["originAddress.country"].value = "US";
			}
		}
	},
	
	countryChanged : function() {
	// If the user selects a non-US country, the state dropdown is blanked out
		if(this.name.match("destination")) {
			if ( this.value != "US" ) {
				this.form.elements["destinationAddress.stateProvince"].selectedIndex = 0;
			}
		}
		else if(this.name.match("origin")) {
			if ( this.value != "US" ) {
				this.form.elements["originAddress.stateProvince"].selectedIndex = 0;
			}
		}
	},
	
	clusterCodeChanged : function() {
		var clusterCode = this.form.clusterCode;
		var corporateCodeButton = null;
		var corporateCodeBox = this.form.corporateCode;
		var incentivesButton = null;
		var incentivesBox = this.form.displayableIncentiveType_Number;
		
		for(var i = 0; i < clusterCode.length; i++) {
			if(clusterCode[i].value=="other") {
				corporateCodeButton = clusterCode[i];
			}
		}
		
		if (this.name == "useRewardsPoints") {
		// The user checked the "use points" checkbox - blank out the rest of the form
			for(var i = 0; i < clusterCode.length; i++) {
				clusterCode[i].checked = false;
			}
			corporateCodeBox.value = "";
		}
		else {
		// The user selected something else - uncheck the use points box				
			if(this.form.useRewardsPoints) {		
				this.form.useRewardsPoints.checked = false;
			}
			// Blank out the other buttons
			for(var i = 0; i < clusterCode.length; i++) {
				if(clusterCode[i] != this) {
					clusterCode[i].checked = false;
				}
			}
				
			if(this == corporateCodeBox) {
				corporateCodeButton.checked = true;
			}
			else {
			// User clicked a checkbox
				if(this == corporateCodeButton) {
					if(corporateCodeButton.checked == true) {
					//User checked the corp code box
						corporateCodeBox.focus();
					}
					else {
					// User unchecked the corp code box
						corporateCodeBox.value = "";
					}
				}
				else {
					corporateCodeBox.value = "";
				}
			}
		}
		
	},
	
	brandsSelectionChanged : function() {
		var checkboxGroup =  this.form.elements["marriottBrands"];
		var allCheckbox = checkboxGroup[checkboxGroup.length -1];
		
		if (this == allCheckbox) {
		// The user clicked "All brands"
			// Don't let the user de-select All brands
			allCheckbox.checked = true;
			
			// De-select other checkboxes
			for (i = 0; i < checkboxGroup.length; i++) {
				if(checkboxGroup[i].value != "all") {
					checkboxGroup[i].checked = false;
				}
			}
		}
		else {
			var isAnySelected = false;
			for (j = 0; j < checkboxGroup.length-1; j++) {
				if(checkboxGroup[j].checked) {
					isAnySelected = true;
					allCheckbox.checked = false;
				}
			}
			if(!isAnySelected) {
				allCheckbox.checked = true;
			}
		}  
	},
	
	moreOptions : function() {
    	var form = document.getElementById("city-search-form");
    	
    	var queryString = "?destinationAddress.city=" + form.elements["destinationAddress.city"].value +
    					"&destinationAddress.stateProvince=" + form.elements["destinationAddress.stateProvince"].value +
    					"&destinationAddress.country=" + form.elements["destinationAddress.country"].value +
    					"&fromDate=" + form.elements["fromDate"].value +
    					"&toDate=" + form.elements["toDate"].value +
    					"&roomCount=" + form.elements["roomCount"].value +
    					"&guestCount=" + form.elements["guestCount"].value +
    					"&marriottRewardsNumber=" + form.elements["marriottRewardsNumber"].value +
    					"&corporateCode=" + form.elements["corporateCode"].value;  
    	
    	var clusterGroup = form.elements["clusterCode"];
    	for (i = 0; i < clusterGroup.length; i++) {
    		if(clusterGroup[i].checked == true) {
    			queryString = queryString + "&clusterCode=" + clusterGroup[i].value;
    		}
    	}
    	
    	var brandsGroup =  form.elements["marriottBrands"];
    	for (i = 0; i < brandsGroup.length; i++) {
    		if(brandsGroup[i].checked == true) {
    			queryString = queryString + "&marriottBrands=" + brandsGroup[i].value;
    		}
    	}
    	if (form.elements["useRewardsPoints"] != null && form.elements["useRewardsPoints"].checked  == true) {
    		queryString = queryString + "&useRewardsPoints=true";
    	}
    	var URL = document.getElementById("more-options");
    	URL.href = URL.href + queryString;
    	window.location.href = URL.href;
    },
    
	validateSearchForm : function() {
		var form = this;
		var selectedRate = false;
		var selectedUseRewards = false;
		var groupRatesMessage = document.getElementById("groupMessage");
		var useRewardsPtsMessage = document.getElementById("useRewardsPtsMessage");
		
		if (this.id != 'keyword-form') {
			var clusterCodeGroup =  form.elements["clusterCode"];
			var useRewardsPoints = form.elements["useRewardsPoints"];
			
			if((useRewardsPoints) && (useRewardsPoints.checked == true))
			{
				selectedUseRewards = true;				
			}
		
			if (form.elements["clusterCode"]){
				for (i=0;i< form.elements["clusterCode"].length;i++) {
					if ((clusterCodeGroup[i].checked == true) && (clusterCodeGroup[i].value != "") 
						&& (clusterCodeGroup[i].value != "none") && (clusterCodeGroup[i].value != "INT") ) {
						selectedRate = true;
					}
				}
			}
			
			if(form.elements["roomCount"].value == 4)
			{
				if(selectedRate)
				{
					return confirm(groupRatesMessage.value);
				}
				else if(selectedUseRewards)
				{
					return confirm(useRewardsPtsMessage.value);
				}
			}
		}
		
		if(selectedRate == true) {
			//need to exclude rewards clusters from this check due to business logic change for RRE
			if(( form.elements["corporateCode"].value.toUpperCase() != "REW") &&
					( form.elements["corporateCode"].value.toUpperCase() != "P17") &&
					( form.elements["corporateCode"].value.toUpperCase() != "MRW") &&
					( form.elements["corporateCode"].value.toUpperCase() != "MXR") &&
					( form.elements["corporateCode"].value.toUpperCase() != "MW1")) {
				if((form.elements["fromDate"].value == "" || form.elements["fromDate"].value == null ) &&
				   (form.elements["toDate"].value == "" || form.elements["toDate"].value == null )) {
					var choice = confirm("You have requested a special rate without specifying dates. We can store this information for your convenience, but cannot check rates and availability unless dates are specified.\n" + 
										 "Click 'OK' to continue without dates, or 'Cancel' to go back and change your search options.");
					return choice;
				}			
			}
		}
		
		if (form.elements["searchType"] == 'InCity') {
			 form.elements["vsMarriottBrands"].value = homepage.buildMarriottBrandsVSParam(form);
		}
		
	},
	
	buildMarriottBrandsVSParam : function(form) {
		var checkboxGroup =  form.elements["marriottBrands"];
		var checkboxGroupSize = checkboxGroup.length;
		var allCheckboxIndex = checkboxGroup.length - 1;
		var allCheckbox = checkboxGroup[allCheckboxIndex];
		
		var vsParam = new String();
		if ( allCheckbox.checked )
		{
			vsParam += "All";
		}
		else
		{
			var numberOfSelected = 0;
			for ( counter = 0; counter < checkboxGroupSize; counter++ )
			{
				if (checkboxGroup[counter].checked)
				{
					numberOfSelected ++;
					if (numberOfSelected > 1)
					{
					    vsParam += "_";
					}
					vsParam += checkboxGroup[counter].value;
				}
			}
		}
		
		return vsParam;
	},
	
	// Taken from utilities.js
	getElementsByClass : function(searchClass,node,tag) {
	// Returns an array of nodes matching searchClass -
		var classElements = new Array();
		if ( node == null )
			node = document;
		if ( tag == null )
			tag = '*';
		var els = node.getElementsByTagName(tag);
		var elsLen = els.length;
		var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
		for (i = 0, j = 0; i < elsLen; i++) {
			if ( pattern.test(els[i].className) ) {
				classElements[j] = els[i];
				j++;
			}
		}
		return classElements;
	},
	
	translateParams : function(formID,clusterCode) {
		var clusterCodeGroup = document.getElementById(formID).elements["clusterCode"];
		for (i=0;i<document.getElementById(formID).elements["clusterCode"].length;i++)
		{
			if ((clusterCodeGroup[i].value == clusterCode))
			{
				clusterCodeGroup[i].checked = true; 
			}else
			{
				clusterCodeGroup[i].checked = false;
			}
		}
		homepage.moreOptionsForm(formID,'/specials/translatePromotion.mi');
	},
	
	moreOptionsForm : function(formID,actionPath) {
		var form = document.getElementById(formID);
		var currentActionPath = form.action;
		form.action=actionPath;
		form.submit();
		form.action = currentActionPath;
	},
		
	checkAndSendto : function(formID,elementName,country,brand,URL,type) {		
		var clusterCodeGroup = document.getElementById(formID).elements["clusterCode"];
		var corporateCode = document.getElementById(formID).elements["corporateCode"];
			
		for (i=0;i<document.getElementById(formID).elements["clusterCode"].length;i++) {
			clusterCodeGroup[i].checked = false;
		}
		if(corporateCode) {
			corporateCode.value = "";
		}
				
		document.getElementById(formID).elements[elementName].checked = true;
		sendto(country,brand,URL,type);	
	},
		
	useMRPoints : function(url) {
		var url = new String(url);
		var protocol = window.location.protocol;
		var forwardUrl = new String("");
		var form = document.forms[0];
		var parentWinAction = form.action;
		
		url = url.toLowerCase();
		forwardUrl = protocol + "//" + url;
		form.action=forwardUrl;
		
		var win=window.open(form.action, "useMRPoints");
		if (win.focus) {
			form.useRewardsPoints.value="true";
			form.target="useMRPoints";
			form.submit();
		}
		if (win == null || win.opener.focus) {
			form.useRewardsPoints.value="false";
			form.action=parentWinAction;
			form.target="_parent";
		}
		
	}
}

addLoadEvent = function (func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
    	window.onload = func;
  	}
  	else {
    	window.onload = function() {
   			oldonload();
   			func();
    	}
    }
}

addLoadEvent(homepage.init);