/**
 * @author Adviser
 */

var originalTextColor
var currentTextColor
var ERROR_TEXT_COLOR_IE = "#e6005c";
var ERROR_TEXT_COLOR_FIREFOX = "rgb(230, 0, 92)";
var SELECT = 0;

var whatToDo= new Array();
    whatToDo[0]=wickedFunction;

function wickedFunction(){
	var browserName = BrowserDetect.browser;
	var activeElementId;
	if (browserName == "Explorer") {
		activeElementId = document.activeElement.id;
	} else if(browserName == "Firefox") {

	} else if (browserName == "Safari") {

	} else {
		alert("This website is designed to work with the IE, Firefox or Safari browsers only.");
	}
	re_enter_data(activeElementId);
	document.getElementById(activeElementId).focus();
	document.getElementById(activeElementId).select();
}

function validate_form(stringArray, predictField, dateField, selectField){
	var browserName = BrowserDetect.browser;
	var browerVersion = BrowserDetect.version;
	var browerOS = BrowserDetect.OS;
	var value;
	var errorMessage;
	var isValid = true;

	if(stringArray != null) {
		var nItems = stringArray.length;
		for(var iItem=0; iItem<nItems; iItem++){
			var inputField = document.getElementById(stringArray[iItem]);
			var isPassword = stringArray[iItem] == "password";
			var isConfirmPassword = stringArray[iItem] == "confirm_password";

			if(!isPassword && !isConfirmPassword && isError(inputField)) {
				isValid = false;
				break;
			} else {
				originalTextColor = inputField.style.color;
				value = inputField.value;
				if (stringArray[iItem] == "password" || stringArray[iItem] == "confirm_password"){
					if (isPassword && document.getElementById("password").value == "") {
							errorMessage = "can't be empty";
							isValid = setPasswordErrorMessage(browserName, password_td, "password", errorMessage);
					} else if(isConfirmPassword && document.getElementById("confirm_password").value == ""){
							errorMessage = "can't be empty";
  						    isValid = setPasswordErrorMessage(browserName, confirm_password_td, "confirm_password", errorMessage);
					} else {
						var isMatch = document.getElementById("password").value == document.getElementById("confirm_password").value;
						if (!isMatch) {
							errorMessage = "passwords don't match";
							isValid = setPasswordErrorMessage(browserName, password_td, "password", errorMessage);
							isValid = setPasswordErrorMessage(browserName, confirm_password_td, "confirm_password", errorMessage);
						}
					}
				} else {
					if (value == "") {
						errorMessage = "can't be empty";
						isValid = setErrorMessage(inputField, errorMessage, null, stringArray[iItem]);
					} else if (stringArray[iItem] == "number_of_opps"){
						if (!((isInteger(value) && value > 0) || (value.toLowerCase()=="multiple"))) {
							errorMessage = "must be a real number";
							isValid = setErrorMessage(inputField, errorMessage, null, stringArray[iItem]);
						}
					} else if (stringArray[iItem] == "email"){
						if (!isValidEmail(value)) {
							errorMessage = "invalid email";
							isValid = setErrorMessage(inputField, errorMessage, null, stringArray[iItem]);
						}
					} else if(stringArray[iItem] ==  "link_url"){
						isValid = isValidUrl(value, inputField, stringArray[iItem]);
					}
				}
			}
		}
	}

	if(predictField != null) {
		var ID_INDEX = 0;
		var ARRAY_INDEX = 1;
		var predictFieldId;
		var nItems = predictField.length;
		for (var iPredictField=0; iPredictField<nItems; iPredictField++) {
			predictFieldId = predictField[iPredictField][ID_INDEX];
			predictArray = predictField[iPredictField][ARRAY_INDEX];
			if (predictArray != null) {
				var inputField = document.getElementById(predictFieldId);
				if(isError(inputField)) {
					isValid = false;
					break;
				} else {
					originalTextColor = inputField.style.color;
					value = inputField.value;
					if(value == ""){
					    errorMessage = "can't be empty";
						isValid = setErrorMessage(inputField, errorMessage, null, predictFieldId);
					} else if(!isValidataPredict(value, predictArray)){
						errorMessage = "doesn't exist in DB";
						isValid = setErrorMessage(inputField, errorMessage, null, predictFieldId);
					}
				}
			}
		}
	}

	if(dateField != null) {
		var ID_INDEX = 0;
		var CONDITION_INDEX = 1;
		var nItems = dateField.length;
		for (var iDateField=0; iDateField<nItems; iDateField++) {
			var dateFieldId = dateField[iDateField][ID_INDEX];
			var doCheck = dateField[iDateField][CONDITION_INDEX];
			var inputField = document.getElementById(dateFieldId);

			if(isError(inputField)) {
				isValid = false;
				break;
			} else {
				originalTextColor = inputField.style.color;
				value = inputField.value;
				if(value=="" && doCheck) {
 				    errorMessage = "can't be empty";
					isValid = setErrorMessage(inputField, errorMessage, null, dateFieldId);
				} else if(value!="" && !ValidateForm(dateFieldId) && doCheck) {
					errorMessage = "dd-mm-yyyy";
					isValid = setErrorMessage(inputField, errorMessage, null, dateFieldId);
				}
			}
		}
	}

	if(selectField != null) {
		var nItems = selectField.length;
		for (var iSelectField=0; iSelectField<nItems; iSelectField++) {
			var inputField = document.getElementById(selectField[iSelectField]);
			if(isError(inputField)) {
				isValid = false;
				break;
			} else {
				originalTextColor = inputField.style.color;
				var iSelected = inputField.selectedIndex;
				var iOption = inputField.options[iSelected];
				value = iOption.value;
				if(value == "") {
					errorMessage = "-- must choose --";
					isValid = setErrorMessage(iOption, errorMessage, SELECT, selectField[iSelectField]);
				}
			}
		}
	}
	return isValid;
}

function isError(inputField){
	var isRed = ((inputField.style.color == ERROR_TEXT_COLOR_IE) || (inputField.style.color == ERROR_TEXT_COLOR_FIREFOX));
	return isRed;
}

function setErrorMessage(inputField, errorMessage, inputType, id){
	if (inputType == SELECT) {
		inputField.text = errorMessage;
	} else {
		inputField.value = errorMessage;
	}

	var browserName = BrowserDetect.browser;
	if (browserName == "Explorer") {
		inputField.onclick = whatToDo[0];
	 	inputField.onselectstart = whatToDo[0];
	} else if(browserName == "Firefox") {

	} else if (browserName == "Safari") {

	} else {
		alert("Oi, do yourself a favour. Get youself a IE, Firefox or Safari.");
	}
	inputField.style.color = ERROR_TEXT_COLOR_IE;
	return false;
}

function setPasswordErrorMessage(browserName, parentNode, id, errorMessage){
	if (browserName == "Explorer") {
	   var aString = '<input type="text" name="" id="' + id + '" value="" class="field">';
	   var newElement = document.createElement(aString);
	   parentNode.removeChild(document.getElementById(id));
	   parentNode.appendChild(newElement);
	   setErrorMessage(newElement, errorMessage, null, id);
	} else if(browserName == "Firefox") {
    	var currentElement = document.getElementById(id);
		currentElement.type = "text";
        setErrorMessage(currentElement, errorMessage, null, id);
	} else if (browserName == "Safari") {

	} else {
		alert("Oi, do yourself a favour. Get youself a IE, Firefox or Safari.");
	}
	return false;
}

function re_enter_data(elementId) {
	var browserName = BrowserDetect.browser;
	var inputField = document.getElementById(elementId);
	currentTextColor = 	inputField.style.color;
	if (isError(inputField)) {
		clearInputFieldValue(elementId);
		var isPassword = elementId == "password";
		var isConfirmPassword = elementId == "confirm_password";
		if (isPassword || isConfirmPassword) {
			if (browserName == "Explorer") {
				var parentNode = password_td;
				if (isConfirmPassword) {
  					parentNode = confirm_password_td;
				}
				var aString = '<input type="password" name="" id="' + elementId + '" value="" class="field">';
			   	var newElement = document.createElement(aString);
		   		parentNode.removeChild(document.getElementById(elementId));
		  		parentNode.appendChild(newElement);
				inputField	= newElement;
			} else if(browserName == "Firefox") {
				inputField.type = "password";
			} else if (browserName == "Safari") {

			} else {
				alert("Oi, do yourself a favour. Get youself a IE, Firefox or Safari.");
			}
		}
		inputField.style.color = originalTextColor;
	}
}

function clear_style(elementId) {
	document.getElementById(elementId).style.color = originalTextColor;
}

function clearInputFieldValue(id) {
	document.getElementById(id).value = "";
}

function isValidataPredict(predictId, predictArray){
	var isValid = false;
	var nItems = predictArray.length;
	for (var iItem=0; iItem<nItems; iItem++){
		if(predictArray[iItem] == predictId){
			isValid = true;
		}
	}
	return isValid;
}

function isValidUrl(url, inputField, element) {
	var nChars = url.length;
	var isValid = true;
	var containDot = false;
	var HTTP = "http://";
	var invalidCode;	
	var INVALID_URL = 0;							
	var INVALID_START = 1;
	var INVALID_END = 2;
			
	url = url.toLowerCase();
	
	if(nChars > HTTP.length) {
		for (var i = 0; i < nChars; i++) {
			if (i < HTTP.length) {
				if (url.charAt(i) != HTTP.charAt(i)) {
					invalidCode = INVALID_START;
					isValid = false;									
				}
			} 
			
			if (url.charAt(i) == ".") {
				containDot = true;				
				if(i == nChars - 1) {
					invalidCode = INVALID_END;
					isValid = false;											
				}					
			}				
		} 
		
		if (!containDot) {
			isValid = false;				
			invalidCode == INVALID_URL;
		}
	} else {
			invalidCode = INVALID_URL;
			isValid = false;		
	}
		
	if (!isValid) {
		if ((invalidCode == INVALID_URL)) {
	 		errorMessage = "invalid URL";
	    } else if (invalidCode == INVALID_START) {
	 		errorMessage = "invalid URL, plase start with http://";
	    } else if (invalidCode == INVALID_END) {
			errorMessage = "invalid URL, URL can not end with '.'";	 			
	  	}
		setErrorMessage(inputField, errorMessage, null, element);																		
	}
	return isValid;	
}

function isValidEmail(email){
	var nChars = email.length;
	var isAt = false;
	var isDot = false;
	for (var i = 0; i < nChars; i++) {
		if (email.charAt(i) == "@") {
			isAt = true;
		}
		if (isAt) {
			if ((email.charAt(i) == ".") && (i != nChars - 1)) {
				isDot = true;
			}
		}
	}
	return (isAt && isDot);
}