// JavaScript Document

function openCalendar(ele){
	var uri = parse_uri(document.URL);
	var domain = uri['domain'];
	var calContainer = document.getElementById('calDiv')
	var calIframe = document.getElementById('calIframe');
	var date = ele.value;
	var field = ele.name;
	if (calContainer && document.createElement && !calIframe){
		var calIframe=document.createElement('IFRAME');
		calIframe.id='calIframe';
		calIframe.name='jsCal';
		calIframe.height=300;
		calIframe.width=280;
		calIframe.scrolling='no';
		calIframe.frameBorder=0;
		calIframe.src = "http://" + domain + "/incl/calendar.php?date=" + date + "&field=" + field;
		calContainer.appendChild(calIframe);
	}
}

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

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

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

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 validCreateUser(form, create_user){
	switch (create_user){
		case 'NOTAVAIL':
			var exempt_string = 'field[s_address2],b_address2,b_company,s_company';
			if(validForm(form, exempt_string)){
				return true;
			}
			return false;
			break;
		case 'OPTIONAL':
			var exempt_string = 'field[s_address2],b_address2,b_company,s_company,maillist,usr,pwd,rpwd';
			var usr = form.usr.value;
			var pwd = form.pwd.value;
			var rpwd = form.rpwd.value;
			
			if(!usr || !pwd || !rpwd){
				var cfrm = confirm('You have chosen to not become a registered user of this site.\r\nBy doing so, you accept that you will not have access to tracking this order and viewing your order history.\r\nIf you wish to become a registered user, please click "Cancel" and complete the username and password fields.');		
			} else {
				var cfrm = true;
			}
			
			if(cfrm && validForm(form, exempt_string)){
				return true;
			}
			return false;
			break;
		case 'MANDATORY':
			var exempt_string = 'field[s_address2],b_address2,b_company,s_company,maillist';
			if(validForm(form, exempt_string)){
				return true;
			}
			return false;
			break;
		default:
			return false;
	}
	return false;
}

function copyBilling(ele){
	var form = ele.form;	
	for(i=0; i<form.elements.length; i++){
		var eleName = form.elements[i].name;		
		var field = eleName.substr(eleName.indexOf('[')+1, (eleName.indexOf(']') - (eleName.indexOf('[')+1)));	
		if(field.indexOf('b_') > -1){	
			var crsp = 'field[s_' + field.substr(2) + ']';			
			if(document.getElementById(crsp)){
				bfield = document.getElementById(crsp);
				bfield.value = (ele.checked) ? form.elements[i].value : '';
			}
		}
	}
}

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

function onlyDigits(ele){
	var valid = Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
	inputTemp = ele.value;		
	for (x=0; x<inputTemp.length; x++){	
		if(!valid.inArray(inputTemp.charAt(x))){
			inputTemp = inputTemp.substring(0, x) + inputTemp.substring(x+1, inputTemp.length);
		}
	}
	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++){
			switch (form.elements[j].type){
				case "button":
				case "submit":
					form.elements[j].className = "buttons";
					break;
				case "textarea":
					form.elements[j].className = "textbox";
					break;
				case "select-one":
					form.elements[j].className = "select";
					break;
				default:	
					//error class is dependant on the initial class
					if (form.elements[j].className.indexOf('input') > -1){
						form.elements[j].className = "input";
						} else {
							form.elements[j].className = "currency";
					}
					break;
			}
		}
	}
}

//---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
	var reg;
	for (i=0; i<form.elements.length; i++){//iterate through all elements
		reg = true;//assume validation is required for current element
		var ele = form.elements[i];
		//compare current element to items listed as exempt by the exempt string argument
		for (j=0; j<exempt.length; j++){
			if (ele == document.getElementById(exempt[j])){
				reg = false;//if found that element is exempt, change required variable to false
			}
		}
		//perform style changes only if element validation is required
		//and current element contains invalid data.
		if (reg == true && (ele.value == "" || ele.value == 0)){
			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;
				default:	
					//error class is dependant on the initial class
					if (form.elements[j].className.indexOf('input') > -1){
						ele.className = "input_error";
						} else {
							ele.className = "currency_error";
					}
					break;	
			}
		}
	}
	return valid;
}