﻿//
// Represents a support request form.
//
function SupportRequestForm() {
	this._initialize();
}

SupportRequestForm.prototype = {
	formActionUrl : "http://www.salesforce.com/servlet/servlet.WebToCase?encoding=UTF-8",
	form : null,
	inputs : new Array(),
	emailTextBox : null,
	returnUrlTextBox : null,

	//
	// Validates the form.
	//
	validate : function() {
		var isFormValid = true;
		var errorMessageSummary = "Please fix the following:\n";

		for(var i = 0; i < this.inputs.length; i++) {
			var input = this.inputs[i];
			var isInputValid = input.validator.validate();

			if(!isInputValid) {
				isFormValid = false;
				errorMessageSummary += "     - " + input.errorMessage + "\n";
			}
		}

		if(!isFormValid) {
			alert(errorMessageSummary);
		}

		return isFormValid;
	},

	//
	// Submits the form.
	//
	submit : function() {
		var isFormValid = this.validate();

		if(isFormValid) {
			this.returnUrlTextBox.value = this.returnUrlTextBox.value.replace(
				/{email}/i,
				escape(this.emailTextBox.value)
			);
				
			this.form.submit();
		}
	},

	//
	// Creates an array of inputs for the form.
	//
	_createInputs : function() {
		var inputElements = document.getElementsByTagName("input");
		var selectElements = document.getElementsByTagName("select");
		
		for(var i = 0; i < inputElements.length; i++) {
			var inputElement = inputElements[i];
			
			if(/text/i.test(inputElement.type)) {
				inputElement.validator = new Validator(inputElement);
				inputElement.errorMessage = inputElement.getAttribute("errorMessage");
				this.inputs.push(inputElement);
			}
		}
		
		for(var i = 0; i < selectElements.length; i++) {
			var selectElement = selectElements[i];
			
			selectElement.validator = new Validator(selectElement);
			selectElement.errorMessage = selectElement.getAttribute("errorMessage");
			this.inputs.push(selectElement);
		}
	},

	//
	// Initializes the support request form.
	//
	_initialize : function() {
		this.form = document.forms["aspnetForm"];
		this.returnUrlTextBox = this.form.retURL;
		this.emailTextBox = this.form.email;
		this.form.action = this.formActionUrl;
		
		this._createInputs();
	}
}

//
// IE6 Overrides
//
var isIE6 = /msie\s*6/i.test(navigator.userAgent);

if(isIE6) {
	SupportRequestForm.prototype.base_initialize = SupportRequestForm.prototype._initialize;

	SupportRequestForm.prototype._initialize = function() {
//		var description = document.getElementById("description");
//		var container = document.getElementById("container");
//		
//		description.style.position = "absolute";
//		description.style.top = "500px";
//		description.style.left = "174px";
//		description.style.background = "#fff";
//		container.appendChild(description);
		this.base_initialize();
	}
}

//
// Represents a required field validator
//
function Validator(element) {
	this._initialize(element);	
}

Validator.prototype = {
	element : null,
	regex : "",

	//
	// Validates the field.
	//
	validate : function() {
		var isValid = false;

		if(this.regex) {
			isValid = this.regex.test(this.element.value);
		} else {
			if(this.element.value && this.element.value != "Select...") {
				isValid = true;
			}
		}

		return isValid;
	},

	//
	// Initializes the required field validator.
	//
	_initialize : function(element) {
		this.element = element;
		
		var regex = this.element.getAttribute("regex");
		
		if(regex) {
			this.regex = new RegExp(regex);
		}
	}
}

var supportRequestForm;

addEvent(window, "load", function(){ supportRequestForm = new SupportRequestForm(); });
