// ** 
// ** 
// **                 Common reusable functions.
// ** 
// ** 
// **              These functions are copyright of 
// **      Nitin Vericherla and Glenbriar Technologies Inc.
// ** 
// ** You may copy these functions if you leave this notice intact.
// ** 







//________________________________________________________________________________________ 
//________________________________________________________________________________________ Input validation

function filterInput (input,the_type) {
	var s = input.value;
	var filteredValues = "";
	
	switch (the_type) {
		case "text":
			filteredValues = "~!@#$%^&*()`/;'[]\\|{}-=_+<>?:\"";
			break;
		case "long_text":
			filteredValues = "~^&*`[]\\|{}=+<>\"";
			break;
		case "num":
			filteredValues = "~!@#$%^&*()`,/;'[]\\{}-=_+<>?:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \"";
			break;
		case "date":
			filteredValues = "~!@#$%^&*()`,;'[]\\{}=_+<>?abcdefghijklnoqrstuvwxyzBCDEFGHIJKLNOQRSTUVWXYZ\"";
			break;
		case "email":
			filteredValues = "~!#$%^&*()`,;'[]\\{}=+<>?\"";
			break;
		case "phone":
			filteredValues = "~!@#$%^&*()`,/;'[]\\{}-=_+<>?:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \"";
			break;
		//tel_h and tel_m are referring to time (hour, minutes w/ leading zeros) NOT telephone!
		case "tel_h":
		case "tel_m":
			filteredValues = "~!@#$%^&*()`,.\\{}/;'[]-=_+<>?:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \"";
			break;
		default:
			filteredValues = "";
			break;
	}

	var i;
	var returnString = "";
	var hasChanged = false;

	for (i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (filteredValues.indexOf(c) == -1)
			returnString += c;
		else {
			hasChanged = true;
		}
	}
	
	if ((the_type == "num") && (returnString.length == 0)) {
		input.value = "0";
		input.style.backgroundColor = "#FFFF99";
		hasChanged = true;
	}
	else if ((the_type == "tel_h")||(the_type == "tel_m")) {
		if (returnString.length > 0) {
			switch (the_type) {
				case "tel_h":
					if (Number(returnString) > 12) {
						hasChanged = true;
						input.value = "00";
						input.style.backgroundColor = "#FFFF99";
					}
					break;
				case "tel_m":
					if (Number(returnString) > 60) {
						hasChanged = true;
						input.value = "00";
						input.style.backgroundColor = "#FFFF99";
					}
					break;
				default:
					break;
			}
		}
		else {
			input.value = "00";
			input.style.backgroundColor = "#FFFF99";
			hasChanged = true;
		}
	}
	else {
		input.value = returnString;
	}
	
	if (hasChanged)
		input.style.backgroundColor = "#FFFF99";
	else
		input.style.backgroundColor = "#FFFFFF";
	
}

//________________________________________________________________________________________ 
//________________________________________________________________________________________ Limit characters in textarea

function limitInput(theobj,thesize,thecounter) {
	var thestr = theobj.value;
	var thelen = theobj.value.length;
	
	if (thelen >= thesize) {
		theobj.value = thestr.substring(0,thesize);
		theobj.style.backgroundColor = "#FFFF99";
	}
	else
		theobj.style.backgroundColor = "#FFFFFF";
	
	thelen = theobj.value.length;
	
	if (thecounter != "")
		GEBI(thecounter).value = (thesize - thelen);
}

//________________________________________________________________________________________ 
//________________________________________________________________________________________ Email validation

function test_email(the_str) {
	var is_valid = true;
	var emailFilter=/^.+@.+\..{2,3}$/;
	
	if (the_str == "")
		is_valid = true;
	else if (!(emailFilter.test(the_str)))
		is_valid = false;
	
	return is_valid;
}

//________________________________________________________________________________________ 
//________________________________________________________________________________________ Phone number validation

function test_phones(phone1,phone2) {
	var is_ok = true;
	
	if ((phone1.length != 0) && (phone1.length != 3))
		is_ok = false;
	else if ((phone2.length != 0) && (phone2.length != 4))
		is_ok = false;
	else if (((phone1.length == 0) && (phone2.length != 0))||((phone1.length != 0) && (phone2.length == 0)))
		is_ok = false;
	
	return is_ok;
}

function test_longPhone(thenum) {
	var is_ok = true;
	
	if ((thenum.length != 0) && (thenum.length != 7) && (thenum.length != 10) && (thenum.length != 11))
		is_ok = false;
	else if ((thenum.length == 11) && (thenum.charAt(0) != '1'))
		is_ok = false;
	
	return is_ok;
	
}

//________________________________________________________________________________________ 
//________________________________________________________________________________________ Change selected index of drop-down

function change_DD(the_object,the_value) {
	var not_found = true;

	for (var i_change_DD = 0; ((i_change_DD < GEBI(the_object).length)&&(not_found)); i_change_DD++) {
		if (GEBI(the_object).options[i_change_DD].value == the_value) {
			GEBI(the_object).selectedIndex = i_change_DD;
			not_found = false;
		}
	}
}

//________________________________________________________________________________________ 
//________________________________________________________________________________________ Date adjustment by term (DAY,MONTH,etc)

function date_adjust(thedate,theamount,theterm,positive) {
	var date_ret = new Date();
	var T_dateparts = thedate.split("-");
	
	date_ret.setFullYear(Number(T_dateparts[0]),Number(T_dateparts[1]-1),Number(T_dateparts[2]));
	
	switch(theterm) {
		case "YEAR":
			if (positive)
				date_ret.setYear(date_ret.getYear() + Number(theamount));
			else
				date_ret.setYear(date_ret.getYear() - Number(theamount));
			break;
		case "MONTH":
			if (positive)
				date_ret.setMonth(date_ret.getMonth() + Number(theamount));
			else
				date_ret.setMonth(date_ret.getMonth() - Number(theamount));
			break;
		case "WEEK":
			if (positive)
				date_ret.setDate(date_ret.getDate() + (7 * Number(theamount)));
			else
				date_ret.setDate(date_ret.getDate() - (7 * Number(theamount)));
			break;
		case "DAY":
			if (positive)
				date_ret.setDate(date_ret.getDate() + Number(theamount));
			else
				date_ret.setDate(date_ret.getDate() - Number(theamount));
			break;
		default:
			break;
	}
	
	return date_ret.getFullYear() + "-" + (date_ret.getMonth() + 1) + "-" + date_ret.getDate();
}

//________________________________________________________________________________________ 
//________________________________________________________________________________________ Date comparison from strings

function date_greater(date1,date2) {
	var ret = false;
	
	if ((date1 != "")&&(date2 != "")) {

		var new_date1 = new Date();
		var new_date2 = new Date();
		
		var date1_parts = date1.split("-");
		var date2_parts = date2.split("-");
		
		new_date1.setFullYear(Number(date1_parts[0]),Number(date1_parts[1]-1),Number(date1_parts[2]));
		new_date2.setFullYear(Number(date2_parts[0]),Number(date2_parts[1]-1),Number(date2_parts[2]));
		
		if (new_date1 > new_date2)
			ret = true;
	}

	return ret;
}


//________________________________________________________________________________________ 
//________________________________________________________________________________________ Is In List 

function isinlist(T_element,T_id) {
	var ret = false;
	
	for (var i = 0;i < GEBI(T_id).length;i++) {
		if (GEBI(T_id).options[i].value == T_element) {
			ret = true;
			break;
		}
	}
	
	return ret;
}



//________________________________________________________________________________________ 
//________________________________________________________________________________________ Toggle .display 

function toggle_the_div(thediv) {
	GEBI(thediv).style.display = (GEBI(thediv).style.display == 'block')?'none':'block';
}


//________________________________________________________________________________________ 
//________________________________________________________________________________________ getElementById shorthand 

function GEBI(theid) {
	try {
		if (document.getElementById(theid)) {}
	}
	catch (e) { return false; }
	
	return document.getElementById(theid);
}


//________________________________________________________________________________________ 
//________________________________________________________________________________________ Focus on 1st text element 

function focus_form() {
	var i = 0;
	
	if (document.forms[0]) {
		var inputs = document.forms[0].getElementsByTagName("input");
		
		if (inputs.length > 0) {
			
			while ((i < inputs.length) && (inputs[i].type != "text"))
				i++;
			
			if (i < inputs.length)
				inputs[i].focus();
		}
	}
}