/*
 * Rate Preferences Popup Manager
 */
RatePrefPopupManager = {
		
	/*
	 * Validate the rate preference dialog, hide or show errors and the compare button.
	 * RatePrefChecked param is optional, and handles cases were it's not passed in.
	 */
	validatePrefs: function(ratePrefChecked) {
		var selectedError = false;
		var enterCodeError = false;
		var enterSetCodeError = false;
		
		//validation for just clicked checkbox
		//enable / disable correlating text field
		var textField = this.getTextField(ratePrefChecked);
		if (textField != undefined) {
			if (ratePrefChecked.checked) {
				textField.disabled = false;
				textField.value = '';
			} else {
				textField.disabled = true;
			}
		}
		
		//validation for overall dialog 
		var checkedPrefs = new Array();
		var rateFieldsForm = document.getElementById('rateFieldsForm');
		for (var i = 0; i < rateFieldsForm.ratePref.length; i++) {
			if (rateFieldsForm.ratePref[i].checked) {
				checkedPrefs[checkedPrefs.length] = rateFieldsForm.ratePref[i];
			}
		}
		
		//too many or too few checks?
		if (checkedPrefs.length > 3) {
			selectedError = true;
			yuiDom.setStyle('maxSelectedError', 'display', 'block');
		} else if (checkedPrefs.length == 0) {
			selectedError = true;
			yuiDom.setStyle('minSelectedError', 'display', 'block');
		} else {
			yuiDom.setStyle('maxSelectedError', 'display', 'none');
			yuiDom.setStyle('minSelectedError', 'display', 'none');
		}

		//clear errors first
		yuiDom.setStyle('enterCodeError', 'display', 'none');
        yuiDom.setStyle('enterSetCodeError', 'display', 'none');

		//checked but blank?
		for (var i = 0; i < checkedPrefs.length; i++) {
			var checkedPref = checkedPrefs[i];
			if (checkedPref.checked) {
				var textField = this.getTextField(checkedPref);

				if (textField == undefined) {
					continue;
				}
				
				if (textField.value == '') {
					enterCodeError = true;
					yuiDom.setStyle('enterCodeError', 'display', 'block');
                } 
				
				//validate for set code
				var labelField = this.getLabelField(checkedPref);
				if (labelField != undefined) {
					var strLabel = labelField.innerHTML;
					if(strLabel.indexOf("SET") != -1){
						if ((textField != undefined) && (textField.value != '') && (!this.isInteger(textField.value))) {
						    enterSetCodeError = true;
						    yuiDom.setStyle('enterSetCodeError', 'display', 'block');
						}
					}
				}
			}
		}
		//show / hide compare button
		if (selectedError || enterCodeError || enterSetCodeError) {
			yuiDom.addClass('actionButtonContainer', "hasError");
		} else {
			yuiDom.removeClass('actionButtonContainer', "hasError");
		}
	},

	/*
	 * Find correlated text field based on ratePref checkbox
	 */
	getTextField: function(ratePrefCheck) {
		if (ratePrefCheck == undefined) {
			return undefined;
		}

		return document.getElementById("txtCode_" + ratePrefCheck.id.split("_")[1]);
	},
	
	/*
	 * Find correlated label field based on ratePref checkbox
	 */
	getLabelField: function(ratePrefCheck) {
		if (ratePrefCheck == undefined) {
			return undefined;
		}

		return document.getElementById("labelCheck_" + ratePrefCheck.id.split("_")[1]);
	},
	
	/*
	 * Check the character is digit .
	 */
	isDigit: function(c) {
		return ((c >= "0") && (c <= "9"));
	},

	/*
	 * Check the string is integer .
	 */
	isInteger: function(str) {  
		  for (var i = 0; i < str.length; i++) {
			  var c = str.charAt(i);
			  if (!this.isDigit(c)) {
			    return false;
			  }
		  }
		  return true;
	},
	
	/*
	 * Validate, then submit the rate preference form
	 */
	submitRateSelector: function() {
		//validate one more time, just in case they reloaded and are in a bad state
		this.validatePrefs();
		
		//if the button is not showing, there was an error
		if (!yuiDom.hasClass(yuiDom.get('rateSelectorSubmitButton'), 'hasError')) {
			this.updateRatePrefParam();
			this.handleOmniture();
			document.getElementById('ratePrefsForm').submit();
		}
		
	},
	
	/*
	 * Create the "rp" param value based on the checkboxes and set on the form.
	 */
	updateRatePrefParam: function() {
		var form = document.getElementById('rateFieldsForm');
		var checkedPrefValues = new Array();
		
		for (var i = 0; i < form.ratePref.length; i++) {
			if (form.ratePref[i].checked == true) {
				var prefString = form.ratePref[i].value;
				if (prefString.split(":")[1] == '') {
					prefString += document.getElementById("txtCode_" + form.ratePref[i].id.split("_")[1]).value;
				}
				
				checkedPrefValues[checkedPrefValues.length] = prefString; 
			}
		}
		
		var rpParamValue = "";
		//if less than 3 were checked, we need the trailing commas to force blanks
		for (var i = 0; i < 3; i++) {
			if (i < checkedPrefValues.length) {
				rpParamValue += checkedPrefValues[i];
			}
			
			if (i < 2) {
				rpParamValue += ",";
			}
		}
	
		var ratePrefForm = document.getElementById('ratePrefsForm');
		ratePrefForm.rp.value = rpParamValue;
	},
	
	/*
	 * Update omniture information
	 */
	handleOmniture: function() {
		s.events = "event35";
	    s.prop29 = "LPQ:RateToggles";
	    setOmniVars(s.charSet, s.server, s.channel, s.prop2, s.prop3, s.prop1, '',s.prop10, trackingPage, "RATEPREF");
		s.t();
	}

};

