var requestBeingProcessed = false;

// Removes leading whitespaces
function LTrim( value ) {
	var re = /\s*((\S+\s*)*)/;
	return value.replace(re, "$1");
}

// Removes trailing whitespaces
function RTrim( value ) {
	var re = /((\s*\S+)*)\s*/;
	return value.replace(re, "$1");
}

// Removes whitespaces from both ends
function trim( value ) {
	return LTrim(RTrim(value));
}

// Utility function to add an event listener
function addEvent(o,e,f){
	if (o.addEventListener){ o.addEventListener(e,f,true); return true; }
	else if (o.attachEvent){ return o.attachEvent("on"+e,f); }
	else { return false; }
}

// Validates if a request can be processed - checks if some other request is already in progress
function validateSubmit() {
	if (requestBeingProcessed) {
		alert("Thanks for your patience while your request is being processed.");
		return false;
	}
	else {
		requestBeingProcessed = true;
		return true;
	}
}

// submit default form - by default, don't disable Subsequent Requests
function submitForm() {
	return submitFormCheck(true);
}

// submit default form - provides an option to disable Subsequent Requests
function submitFormCheck(disableSubsequentRequests) {
	return submitFormNameCheck("", disableSubsequentRequests);
}

// submit named form - by default, don't disable Subsequent Requests
function submitFormName(formName) {
	return submitFormNameCheck(formName, true);
}

// submit named form - provides an option to disable Subsequent Requests
function submitFormNameCheck(formName, disableSubsequentRequests) {
	if (disableSubsequentRequests) {
		if (!validateSubmit()) {
			return false;
		}
	}

	var form = getForm(formName);
	if (form == null) {
		form = getDefaultForm();
	}

	form.submit();
	return true;
}

// returns a reference to a named form
function getForm(formName) {
	if (formName == null || formName == '') {
		return null;
	} 
	else {
		return document.forms[formName];
	}
}

// returns a reference to the default form (first one in the document)
function getDefaultForm() {
	return document.forms[0];
}


// navigate to the specified url - provides an option to disable Subsequent Requests
function processLink(url, disableSubsequentRequests) {

	// navigate to the specified link only if it is valid to process a request
	if (disableSubsequentRequests) {
		if (validateSubmit()) {
			location.href = url;
		}
	}
}

// navigate to the specified url - by default, don't disable Subsequent Requests
function processLink(url) {
	processLink(url, false);
}

function openPopupWindowNamed(url, name) {
	return window.open(url);
}

function openNewTab(url, name) {
	return window.open(url);
}

function openPopupWindow(url) {
	var newWin = openPopupWindowNamed(url, '_blank');
	newWin.focus();
	return newWin;
}

function getHtmlControl(ctlName) {
	var obj;
	if (document.all) {
		obj = document.all[ctlName];
	} 
	if (!obj && document.getElementById) {
		obj = document.getElementById(ctlName);
	}
	if (!obj) {
		obj = document.getElementsByName(ctlName);
		if (obj.length) {
			return obj[0];
		} 
	}
	if (!obj) {
		obj = document.forms[0][ctlName];
	}
	return obj;
}

function disableHtmlControl(ctlName) {
	var obj = getHtmlControl(ctlName);
	if (obj) {
		if (obj.type == "text") {
			obj.readOnly = true;
			obj.value = "";
		} else {
			obj.disabled = true;
		}
		obj.className = "disabled";
	}
}

function enableHtmlControl(ctlName) {
	var obj = getHtmlControl(ctlName);
	if (obj) {
		if (obj.type == "text") {
			obj.readOnly = false;
		} else {
			obj.disabled = false;
		}
		obj.className = "";
	}
}

function setControlValue(ctlName, value) {
	var obj = getHtmlControl(ctlName);
	if (obj) {
		obj.value = value;
	}
}

function getControlValue(ctlName) {
	var obj = getHtmlControl(ctlName);
	return (obj) ? obj.value : "";
}

function getSelectedRadio(ctlName) {
	var obj;
	if (document.all) {
		obj = document.all[ctlName];
	} 
	if (!obj && document.getElementById) {
		obj = document.getElementById(ctlName);
	}
	if (!obj) {
		obj = document.getElementsByName(ctlName);
	}
	
	if (obj.length > 0) {
		for (var i=0; i<obj.length; i++) {
			if (obj[i].checked) {
				return obj[i];
			}
		}
	} else {
		return (obj.checked) ? obj : null;
	} 
}

function markRadioValue(ctlName, value) {
	var obj;
	if (document.all) {
		obj = document.all[ctlName];
	} 
	if (!obj && document.getElementById) {
		obj = document.getElementById(ctlName);
	}
	if (!obj) {
		obj = document.getElementsByName(ctlName);
	}
	
	if (obj.length > 0) {
		for (var i=0; i<obj.length; i++) {
			if (obj[i].value == value) {
				return obj[i].checked = true;
			}
		}
	} else {
		if (obj.value == value) {
			return obj.checked = true;
		}
	} 
}

function selectUnselectAllCheckboxes(namePattern, isChecked) {
	var objInputs = document.body.getElementsByTagName("input");
	if(!objInputs) {
		return;
	}
	if(!objInputs.length) {
		if (objInputs.type == "checkbox") { 
			objInputs.checked = isChecked;
		}
	}
	else {
		for(var i = 0; i < objInputs.length; i++) {
			if (objInputs[i].type == "checkbox" 
				&& objInputs[i].name.indexOf(namePattern) >= 0) 
			{ 
				objInputs[i].checked = isChecked;
			}
		}
	}
}

function isIE() {
	var agent = navigator.userAgent.toLowerCase();
	return ((agent.indexOf("msie") > 0) && (agent.indexOf("opera") < 0));
}

function isIE6() {
	var agent = navigator.userAgent.toLowerCase();
	return isIE() && !isIE7Up();
}

function isIE7() {
	var agent = navigator.userAgent.toLowerCase();
	return isIE() && (agent.indexOf("msie 7") > 0);
}

function isIE8() {
	var agent = navigator.userAgent.toLowerCase();
	return isIE() && (agent.indexOf("msie 8") > 0);
}

function isIE7Up() {
	return isIE7() || isIE8();
}

function isUndefined(value) {
	return (undefined == value || null == value);
}

function clearZeros(obj) {
	if (obj) {
		if (obj.value == '0' || obj.value == '0.0') {
			obj.value = "";
		}
	}
}

function limitLength(ctl, length) {
	var sValue = ctl.value;
	if (sValue.length > length) {
		alert("You have reached the maximum allowed limit of "+length+" chars for this field."
			+ "\n\nThank you!");
		return false;
//		oComments.value = oComments.value.substring(0, 1000);
	}
	return true;
}

