// JavaScript Document

function fFindObjectPosition( oElement ) {
  if( typeof( oElement.offsetParent ) != 'undefined' ) {
    for( var posX = 0, posY = 0; oElement; oElement = oElement.offsetParent ) {
      posX += oElement.offsetLeft;
      posY += oElement.offsetTop;
    }
    return [ posX, posY ];
  } else {
    return [ oElement.x, oElement.y ];
  }
}

function fToggleClass(ele, class1, class2){
	if (ele.className == class1 || ele.className == ''){
		ele.className = class2;
	} else {
		ele.className = class1;
	}
}

function elementFocus(){
	if(document.forms.length){
		if(document.forms[0].elements[0].type == 'text'){
			var uriParts = parse_uri(self.location.href);
			if(!uriParts['anchor']){
				document.forms[0].elements[0].focus();
			}
		}
	}
}

function openWindow(url) {
	newwindow = window.open(url);
	if (window.focus) {newwindow.focus()}
	return false;
}

function changeDisplayView(ele){
	var form = ele.form;
	var vw = '';
	for(i=0; i<form.elements.length; i++){
		vw += form.elements[i].value + ',';
	}
	if(form.action.indexOf('?') > -1){
		form.action = form.action + '&vw=' + vw;
	} else {
		form.action = form.action + '?vw=' + vw;
	}
	self.location.href = form.action;
}

function toggleEle(ele){
	if(ele.style.display == 'none'){
		ele.style.display = 'block';
	} else {
		ele.style.display = 'none';
	}
}

function openUL(ele){
	document.getElementById(ele).style.display = 'block';
}

function closeUL(ele){
	document.getElementById(ele).style.display = 'none';
}

function confirmDelete(text, url){
	var conf = confirm(text);	
	if(conf){
		self.location.href = url;
	}
}

function comparePasswords(reenter, enter){
	enter = document.getElementById(enter);
	if(reenter.value !== enter.value){
		alert('The passwords do not match. Please try again.');
		enter.value = '';
		reenter.value = '';
	}
}

function radioGroupChecked(colRadio){
	for(var n=0; n<colRadio.length; n++){
		if(colRadio[n].checked){
			return true;
		}
	}
	return false;
}

Array.prototype.inArray = function (value) {
	var i;
	for (i=0; i < this.length; i++) {
		if (this[i] === value) {
			return true;
		}
	}
	return false;
};

function maxChars(ele, amt){
	ele.value = ele.value.substring(0, amt-1);
}

function onlyDigits(ele, decimals){
	var decimals = (decimals == null) ? 0 : decimals;
	var valid = Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
	if(decimals){
		valid[valid.length] = '.';
	}
	inputTemp = ele.value;		
	for (x=0; x<inputTemp.length; x++){	
		if(!valid.inArray(inputTemp.charAt(x))){
			if(!(inputTemp.charAt(x) == '-' && x == 0)){
				inputTemp = inputTemp.substring(0, x) + inputTemp.substring(x+1, inputTemp.length);	
			}
		}
	}
	if(decimals && inputTemp.indexOf('.') > -1){
		inputTemp = inputTemp.substring(0, inputTemp.indexOf('.') + (decimals + 1));
	}
	ele.value = inputTemp;
}

function formatPhone(ele){	
	if(event.keyCode !== 8){
		onlyDigits(ele);
		var phone = ele.value;
		switch (phone.length){
			case 0:
				adjusted = phone;
				break;
			case 1:
				adjusted = phone;
				break;
			case 2:
				adjusted = phone;
				break;
			case 3:
				adjusted = "(" + phone + ")";
				break;
			case 4:
				adjusted = "(" + phone.substr(0, 3) + ")" + phone.substr(3, 1);//  
				break;
			case 5:
				adjusted = "(" + phone.substr(0, 3) + ")" + phone.substr(3, 2);
				break;	
			case 6:
				adjusted = "(" + phone.substr(0, 3) + ")" + phone.substr(3, 3);
				break;		
			case 7:
				adjusted = "(" + phone.substr(0, 3) + ")" + phone.substr(3, 3) + "-" + phone.substr(6, phone.length);
				break;
			case 8:
				adjusted = "(" + phone.substr(0, 3) + ")" + phone.substr(3, 3) + "-" + phone.substr(6, phone.length);
				break;
			case 9:
				adjusted = "(" + phone.substr(0, 3) + ")" + phone.substr(3, 3) + "-" + phone.substr(6, phone.length);
				break;
			case 10:
				adjusted = "(" + phone.substr(0, 3) + ")" + phone.substr(3, 3) + "-" + phone.substr(6, 4);
		}
		ele.value = adjusted;
	}
}

function validEmail(ele){
	if(ele.value.length > 0){
		if(!emailCheck(ele.value)){
			ele.value = '';
			ele.focus();
		}
	}
}

function styleForm(){
	for (i=0; i<document.forms.length; i++){
		form = document.forms[i];
		for (j=0; j<form.elements.length; j++){
			if(form.elements[j].className.indexOf('_exempt') == -1){
				switch (form.elements[j].type){
					case "button":
					case "submit":
						form.elements[j].className = "buttons";
						break;
					case "checkbox":
						form.elements[j].className = "checkbox";
						break;
					case "textarea":
						form.elements[j].className = "textbox";
						break;
					case "select-one":
						form.elements[j].className = "select";
						break;
					case "radio":
						form.elements[j].className = "radio";
						break;
					case "text":
						//error class is dependant on the initial class
						if(form.elements[j].className.indexOf('input') > -1){
							form.elements[j].className = "input";
						}
						if(form.elements[j].className.indexOf('currency') > -1){
								form.elements[j].className = "currency";
						}
						break;
					default:	
				}
			}
		}
	}
}

//---GENERIC FORM VALIDATOR--------------------------//
/*
The function's arguments include a reference to the form to be validated and
a comma seperated string of element ids to ignore during validation.
The default action is to check each element within the form with the exception
of the elements listed within the 'exempt_string.'
If any of the checked elements are without a value, the element is flagged
by changing the style class and an error field is populated with text.
*/
function validForm(form, exempt_string){
	styleForm();//the form is restyled to non-error style classes
	if (exempt_string == null){
		exempt = new Array();//if the argument is null an empty array is created
		} else {			
			exempt = exempt_string.split(",");//the split function creates an array is the argument contains data
	}
	document.getElementById("error").innerHTML = "";//clear the error field
	var valid = true;//assume no errors are present
	for (var i=0; i<form.elements.length; i++){//iterate through all elements
		var ele = form.elements[i];
		//compare current element to items listed as exempt by the exempt string argument
		if(ele.type == 'hidden' || exempt.inArray(ele.id) || ele.className.indexOf('_exempt') > -1){
			continue;//if found that element is hidden or is exempt, continue to next element
		}
		//perform style changes only if element validation is required
		//and current element contains invalid data.
		if (ele.value == "" || ele.value == 0 || 
			(ele.type == 'radio' && !radioGroupChecked(document.getElementsByName(ele.name)))){
			valid = false;
			document.getElementById("error").innerHTML = "Please complete all highlighted entries.";
			switch (ele.type){
				case "button":
				case "submit":
					ele.className = "buttons";
					break;
				case "textarea":
					ele.className = "textbox_error";
					break;
				case "select-one":
					ele.className = "select_error";
					break;
				case "radio":
					ele.className = "radio_error";
					break;
				default:	
					//error class is dependant on the initial class
					if (form.elements[i].className.indexOf('input') > -1){
						ele.className = "input_error";
						} else {
							ele.className = "currency_error";
					}
					break;	
			}
		}
	}
	return valid;
}
