var protocol = '<%=request.getScheme()%>';
var server = '<%=request.getServerName()%>';
var port = '<%=request.getServerPort()%>';
var path = '<%=request.getContextPath()%>';
var url = protocol + '://' + server + ':' + port + path;
/* here - add your action 
var accDetailsPage = url + '/displaySomePage.do';
*/

// FORM SUBMISSION WATCHDOG
function submitValidator() {
   for (i=0; i<document.forms.length; i++) {
      document.forms[i].notSubmitted = true;
      document.forms[i].onsubmit = submitWachtdog;
   }
}

function submitWachtdog() {
	if (this.notSubmitted) {
		this.notSubmitted = false;
		return true;
	}
	return false;
}


// GLOBALS
var NO_LENGTH = 0;
var openWindowHandle;

function setFieldValue(form, el, val) {
	if (val == INVISIBLE_TOKEN) val = '';
  	var theForm;
  	for (var i=0; i<document.forms.length; i++) {
    	if (document.forms[i].name == form) {
      		theForm = document.forms[i];
    	}
  	}
  	for (var j=0; j<theForm.elements.length; j++) {
    	if (theForm.elements[j].name == el) {
      		theForm.elements[j].value = val;
    	}
  	}
}

function setSelectValue(form, el, val) {
	if (val == INVISIBLE_TOKEN) val = '';
  	var theForm;
  	for (var i=0; i<document.forms.length; i++) {
    	if (document.forms[i].name == form) {
      		theForm = document.forms[i];
    	}
  	}
  	var theSelect;
  	for (var j=0; j<theForm.elements.length; j++) {
    	if (theForm.elements[j].name == el) {
      		theSelect = theForm.elements[j];
		}
  	}
  	for (var k=0; k<theSelect.length ; k++){
    	if (theSelect.options[k].selected == true) {
      		theSelect.options[k].selected = false;
    	}
    	if (theSelect.options[k].value == val) {
      		theSelect.options[k].selected = true;
    	}
  	}
}

function isTabKey() { 
	var TAB_KEY = 9;
	return (TAB_KEY == event.keyCode);
}

function toUpperFieldValue(form, el) {
	if (isTabKey()) return;
	
	var theForm;
	for (var i=0; i<document.forms.length; i++) {
		if (document.forms[i].name == form) {
			theForm = document.forms[i];
		}
	}
    for (var j=0; j<theForm.elements.length; j++) {
		if (theForm.elements[j].name == el) {
			theForm.elements[j].value = theForm.elements[j].value.toUpperCase();
		}
    }
}

function enableField(form, el, flag) {
	var theForm;
  	for (var i=0; i<document.forms.length; i++) {
    	if (document.forms[i].name == form) {
      		theForm = document.forms[i];
    	}
  	}
  	for (var j=0; j<theForm.elements.length; j++) {
    	if (theForm.elements[j].name == el) {
    		theForm.elements[j].disabled = !flag;
		}
  	}
}

function checkRadio(form, name, val) {
	var theForm;
  	for (var i=0; i<document.forms.length; i++) {
    	if (document.forms[i].name == form) {
      		theForm = document.forms[i];
    	}
  	}
  	for (var j=0; j<theForm.elements.length; j++) {
    	if (theForm.elements[j].name == name && theForm.elements[j].value == val) {
			theForm.elements[j].checked = true;	
		}
  	}
}

function enableRadio(form, name, val, flag) {
	var theForm;
  	for (var i=0; i<document.forms.length; i++) {
    	if (document.forms[i].name == form) {
      		theForm = document.forms[i];
    	}
  	}
  	for (var j=0; j<theForm.elements.length; j++) {
    		if (theForm.elements[j].name == name && theForm.elements[j].value == val) {
			theForm.elements[j].disabled = !flag;	
		}
  	}
}

function enableRadioGroup(form, name, flag) {
	var theForm;
  	for (var i=0; i<document.forms.length; i++) {
    	if (document.forms[i].name == form) {
      		theForm = document.forms[i];
    	}
  	}
  	for (var j=0; j<theForm.elements.length; j++) {
    		if (theForm.elements[j].name == name) {
			theForm.elements[j].disabled = !flag;	
		}
  	}
}

function getValueOfSelectedRadio(form, name) {
	var theForm;
  	for (var i=0; i<document.forms.length; i++) {
    	if (document.forms[i].name == form) {
      		theForm = document.forms[i];
    	}
  	}
	var val = null;
  	for (var j=0; j<theForm.elements.length; j++) {
    	if (theForm.elements[j].name == name && theForm.elements[j].checked)
			val = theForm.elements[j].value;
	}
	return val;
}

//change label and onclick function
function changeButton(name, txt, cbFn) {
	var btn = document.getElementById(name);
	btn.value = txt;
	if (cbFn != null)
		btn.onclick = cbFn;
}

function isFieldEmpty(form, el) {
  	var theForm;
  	for (var i=0; i<document.forms.length; i++) {
    	if (document.forms[i].name == form) {
      		theForm = document.forms[i];
    	}
  	}
  	for (var j=0; j<theForm.elements.length; j++) {
    	if (theForm.elements[j].name == el) {
	      	if (theForm.elements[j].value != null && theForm.elements[j].value != '') {
	        	return false;
	      	}
    	}
  	}
  	return true;
}

function isFieldDisabled(form, el) {
	var theForm;
  	for (var i=0; i<document.forms.length; i++) {
    	if (document.forms[i].name == form) {
      		theForm = document.forms[i];
    	}
  	}
  	for (var j=0; j<theForm.elements.length; j++) {
    	if (theForm.elements[j].name == el) {
    		return (theForm.elements[j].disabled);
		}
  	}
	return null;
}

function setFocusOnField(form, el) {
  	var theForm;
  	for (var i=0; i<document.forms.length; i++) {
    	if (document.forms[i].name == form) {
      		theForm = document.forms[i];
    	}
  	}
  	for (var j=0; j<theForm.elements.length; j++) {
    	if (theForm.elements[j].name == el) {
    		theForm.elements[j].focus();	
    	}
  	}
}

function isInt(s) {
  	if (s != null && s != "") {
		for (var i = 0; i < s.length; i++) {
			var c = s.charAt(i);
			if (!((c >= "0") && (c <= "9"))) 
				return false;
		}
	}
	return true;
}

function isInteger(form, el) {
	var theForm;
  	for (var i=0; i<document.forms.length; i++) {
    	if (document.forms[i].name == form) {
      		theForm = document.forms[i];
    	}
  	}
  	var s;
  	for (var j=0; j<theForm.elements.length; j++) {
    	if (theForm.elements[j].name == el) {
      		s = theForm.elements[j].value;
    	}
  	}	
  	if (s != null && s != "") {
		for (var k = 0; k<s.length; k++) {
			var c = s.charAt(k);
			if (!((c >= "0") && (c <= "9"))) 
				return false;
		}
	}
	return true;
}

function isNum(s) {
	if (s != null && s != "") {
	    var n = /(^\d+$)|(^\d+\.\d+$)/;
	    if (!n.test(s)) 
			return false;
	}
	return true;
}

function isNumber(form, el) {
	var theForm;
  	for (var i=0; i<document.forms.length; i++) {
    	if (document.forms[i].name == form) {
      		theForm = document.forms[i];
    	}
  	}
  	var s;
  	for (var j=0; j<theForm.elements.length; j++) {
    	if (theForm.elements[j].name == el) {
      		s = theForm.elements[j].value;
    	}
  	}
	if (s != null && s != "") {
	    var n = /(^\d+$)|(^\d+\.\d+$)/;
	    if (!n.test(s)) 
			return false;
	}
	return true;
}

function hasNonEmptyInput(el, msg) {
	if (isInputEmpty(el)) {
		resetInputElement(el);
		alert(msg);
    	return false;
    }
    return true;
}

function hasInnerHtml(id, msg) {
	var htm = document.getElementById(id).innerHTML;
	if (htm == null || htm == '') {
		alert(msg);	
		return false;
	}
	return true;
}

function hasInnerText(id, msg) {
	var txt = document.getElementById(id).innerText;
	if (txt == null || txt == '') {
		alert(msg);	
		return false;
	}
	return true;
}

function hasIntegerInput(el, len, msg) {
	// check if the passed string is an integer
	var s = el.value;
	for (var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (!((c >= "0") && (c <= "9"))) {
			resetInputElement(el);
			alert(msg);
			return false;
		}
	}
	// check if the length is the desired one [no check for a 0 len]
	if (len > 0 && len != s.length) {
		el.select();
		el.focus();
		alert(msg);
    	return false;
    }
    return true;
}

function hasNumberInput(el, msg) {
	var n = /(^\d+$)|(^\d+\.\d+$)/;
	if (!n.test(el.value)) {
		resetInputElement(el);
		alert(msg);
		return false;
	}
    return true;
}

function formatNumber(el) {
	var val = el.value;
	if (val.charAt(0) == '.')
		el.value = '0' + val;
}

function isInputEmpty(el) {
	return (el.value == null || el.value == '');
}

function isOptionValid(form, el, val) {
  	var theForm;
  	for (var i=0; i<document.forms.length; i++) {
    	if (document.forms[i].name == form) {
      		theForm = document.forms[i];
    	}
  	}
  	var theSelect;
  	for (var j=0; j<theForm.elements.length; j++) {
    	if (theForm.elements[j].name == el) {
      		theSelect = theForm.elements[j];
		}
  	}
  	for (var k=0; k<theSelect.length; k++) {
    	if (theSelect.options[k].value == val)
      		return true;
  	}
  	return false;
}

function resetInputElement(el) {
    el.value = '';
    el.focus();
}

function logParams(fields, form) {
	var appForm = null;
	switch (form) {
		case "viewProductsForm" :
			appForm = document.viewProductsForm; 				
			break; 		
	}
	if (appForm != null) {
		var SEPARATOR = "!##!";
		var pairs = '';
		for (var i=0; i<fields.length; i++) {
			pairs = pairs + fields[i].name + ' = ' + fields[i].value + SEPARATOR;
		}
		pairs = pairs.substring(0, (pairs.length-SEPARATOR.length));
		appForm.hiddenFieldName.value = pairs;
	
		appForm.submit();
		Sleep(300);
	}
}

function validateHiddenFields(form, el) {
  	var msg;
  	switch (el) {	
 		case "appointDate" :
      		msg = "message1";
      		break;
      		
      	case "validAddressPos" :
      		msg = "message1";
      		break;
  	}
  	if (isFieldEmpty(form, el)) {
    	alert(msg);
    	return false;
  	}
  	return true;
}

function validateTextInput(form, el, type) {
	switch (type) {
		case "empty" :
			return isFieldEmpty(form, el);	
	  		break;
	  		
	  	case "number" :
			return isNumber(form, el);
	  		break;
	  		
	  	case "int" :
	  	case "integer" :
			return isInteger(form, el);
	  		break;
  	}
  	return true;
}

function loadSelect(form, el, filter, arr) { 
	var theForm;
	for (var i=0; i<document.forms.length; i++) {
	  	if (document.forms[i].name == form) {
	    	theForm = document.forms[i];
	  	}
	}
    var theSelect;
    var theFilter;
    for (var j=0; j<theForm.elements.length; j++) {
      	if (theForm.elements[j].name == el) {
        	theSelect = theForm.elements[j];
      	}
      	if (theForm.elements[j].name == filter) {
        	theFilter = theForm.elements[j];
      	}
    }
    // empty the select
    var len = theSelect.length; 
    for (var i=len-1; i>=0; i--) {
      	theSelect.options[i] = null;
    }
    // reload the select
    var flen = theFilter.value.length;
    var value;
    var pos = 0;
	for (var j=0; j<arr.length ; j++) { 
  		value = arr[j];
  		if (flen > 0) {
			if (theFilter.value != value.substr(0,flen)) {
      			value = "";
    		}
  		}
  		if (value != "") {
    		theSelect[pos++] = new Option(value, value);
  		}
	}
}

function getTail(val, no) {
  	len = val.length;
  	if (len <= no) {
  		return val;
  	} else {
  		return (val.substr(len-no, len));
  	}
}

function Sleep(gap) {
  	var then;
  	var now;
  	then = new Date().getTime();
  	now = then;

  	while((now - then) < gap) {
    	now = new Date().getTime();
  	}
}

/*
function Street (name, vector, firstHouse, lastHouse) { 
	this.name = name;
	this.vector = vector; 
	this.firstHouse = firstHouse; 
	this.lastHouse = lastHouse; 
} 
function StreetFieldsInfo (names, types) {
	this.names = names;
	this.types = types;
}

fieldNames = new Array("name", "vector", "firstHouse", "lastHouse");
fieldTypes = new Array("string", "string", "int", "int");
streetMetadata = new StreetFieldsInfo(fieldNames, fieldTypes);
*/

// Remove existing content of an element
function clearChildNodes(elemID) {
    var elem = document.getElementById(elemID);
    while (elem.childNodes.length > 0) {
        elem.removeChild(elem.firstChild);
    }
}

/*
function finishDrawStreetsTable(tbodyID, elArray, metaArray) {
    var tr, td, txt;
    tbody = document.getElementById(tbodyID);
    tbody.className="tableList";

    // create holder for accumulated tbody elements and text nodes
    var frag = document.createDocumentFragment();

    // loop through data source
    for (var i = 0; i < elArray.length; i++) {
    	tr = document.createElement("tr"); 
    	if (i % 2 == 0) {
			tr.className="trColor1"; 
		} else {
			tr.className="trColor2";
		}  	
        for (var j = 0; j < metaArray.names.length; j++) {
            td = document.createElement("td");
	  	    tr.appendChild(td);

		    var prop = metaArray.names[j];
		    td = document.createElement("td");
		    if (prop == "name") {
				td.width="298";
		    } else if (prop == "vector") {
				td.width="60";
		    } else if (prop == "firstHouse") {
				td.width="100";
		    } else if (prop == "lastHouse") {
				td.width="81";
		    }
    	    txt = document.createTextNode(elArray[i][prop]);
            if (prop == "name") {	    
		    	a = document.createElement('a');
				a.setAttribute('href','javascript:setStreetFieldsValue(' + i + ')');
				a.appendChild(txt);
				td.appendChild(a);
	    	} else {
    	    	td.appendChild(txt);
	    	}
    	    tr.appendChild(td);
        }   
        frag.appendChild(tr);
    }
    tbody.appendChild(frag);
}
*/
function finishDrawOneColumnTable(tbodyID, elArray, form, field) {
    var tr, td, txt, value;
    tbody = document.getElementById(tbodyID);
    tbody.className="tableList";

    // create holder for accumulated tbody elements and text nodes
    var frag = document.createDocumentFragment();

    // loop through data source
    for (var i = 0; i < elArray.length; i++) {
    	tr = document.createElement("tr");  
    	if (i % 2 == 0) {
            tr.className="trColor1"; 
		} else {
            tr.className="trColor2";
		}
		td = document.createElement("td");
		sp = document.createElement('span');
	  	a = document.createElement('a');
	
		value = elArray[i];
		if (elArray[i] == INVISIBLE_TOKEN) {
			sp.className="invisible";
			value = '';
		} 
		a.setAttribute('href','javascript:setFieldValue("' + form + '","' + field + '","' + value + '")');
		txt = document.createTextNode(elArray[i]);
		a.appendChild(txt);
		sp.appendChild(a);
		td.appendChild(sp);
    	tr.appendChild(td);
        frag.appendChild(tr);
    }
    tbody.appendChild(frag);
}
/*
function filterStreetValues (arr, prop, filterVal) {
	var tempArr = new Array();
	var runner = 0;
	for (var i=0; i<arr.length; i++) {
	    var value = arr[i][prop]; 
	    if (stringTypeFilter(value, filterVal) == 0) {
			tempArr[runner++] = arr[i];
	    }
	}
	return tempArr;
}
*/
function filterOneTypeValues (arr, filterVal) {
	var tempArr = new Array();
	var runner = 0;
	for (var i=0; i<arr.length; i++) {
		if (stringTypeFilter(arr[i], filterVal) == 0) {
			tempArr[runner++] = arr[i];
		}
	}
	return tempArr;
}

function stringTypeFilter(a, b) {
	a = a.toLowerCase();
    b = b.toLowerCase();
    if (a.length > b.length) {
       a = a.substr(0, b.length);
    }
    return ((a < b) ? -1 : ((a > b) ? 1 : 0));
}

function trimBlanks(s) {
  return (s.replace(/ /g,''));
}

function trimArrayBlanks(a) {
  var n = new Array();
  var j = 0;
  for (var i=0; i<a.length; i++) {
    val = trimBlanks(a[i]);
    if (val != '') {
      n[j++] = val;
    }
  }
  return n;
}

function replaceArrayBlanks(a, s) {
  var n = new Array();
  for (var i=0; i<a.length; i++) {
    val = trimBlanks(a[i]);
    if (val != '') 
      n[i] = val;
    else    
  	  n[i] = s;
  }
  return n;
}

function arrayBlanksToInvisible(a) {
  var n = new Array();
  for (var i=0; i<a.length; i++) {
    val = trimBlanks(a[i]);
    if (val != '') 
      n[i] = val;
    else    
  	  n[i] = INVISIBLE_TOKEN;
  }
  return n;
}

function decodeAmps(s) {
  return (s.replace(/&amp;/g,'&'));
}

function formatDate(date, separator) {
  var arr = date.split(separator);
  var padDate = padLeft(arr[0]) + separator + padLeft(arr[1]) + separator + padLeft(arr[2]);
  return padDate;
}

function formatDateWithSeparator(date, separator) {
  var adjustDate = date.substr(0,4) + separator + date.substr(4,2) + separator + date.substr(6,2);
  return adjustDate;
}

function padLeft(val) {
  var padVal = val;
  if (val.length == 1) {
    padVal = "0" + val;
  }
  return padVal;
}

function launchPopUp(page,name,h,w,toolbar_flag,menubar_flag) 
{
	openWindowHandle = this.open (page, "MSDS_POPUP_"+name,
							       "toolbar=" + ((toolbar_flag!=null && toolbar_flag == 1) ? 'yes' : 'no')  + 
								   ",menubar=" + ((menubar_flag!=null && menubar_flag == 1) ? 'yes' : 'no') + 
								   ",location=no" + 
								   ",scrollbars=yes"+
								   ",resizable=yes"+
								   ",status=yes" +
								   ",left=0" +
								   ",top=0" +
								   ",height=" + ((h!=null) ? h : (screen.availHeight-50)) + 
								   ",width=" + ((w!=null) ? w : (screen.availWidth-12))
                           		  );
	//openWindowHandle.resizeTo(screen.availWidth,screen.availHeight);
	openWindowHandle.focus();
}

function launchPdfPopUp(productId, h, w, toolbar_flag, menubar_flag) 
{
	var form = $("viewPdfForm"); 
	
	/*
	 * Browser Bug Handler (in try catch block). 
	 * Check if window accessible by calling focus method. 
	 * If it is not, that means there is no connection with window. Re-open and close it.
	 * Then use window reference again to open new window.
	 */
	try 
	{ 
		if (openWindowHandle)  
		{
			openWindowHandle.close();
			openWindowHandle.focus();
		}	
	} 
	catch(e) 
	{
		openWindowHandle = this.open ("", "viewPdfWindow", "resizable=yes");
		openWindowHandle.close();
		openWindowHandle = null;
	}

	form.productId.value = productId;
	openWindowHandle = this.open ("", "viewPdfWindow",
			"toolbar=" + ((toolbar_flag!=null && toolbar_flag == 1) ? 'yes' : 'no')  + 
			",menubar=" + ((menubar_flag!=null && menubar_flag == 1) ? 'yes' : 'no') + 
			",location=no" + 
			",scrollbars=yes"+
			",resizable=yes"+
			",status=yes" +
			",left=0" +
			",top=0" +
			",height=" + ((h!=null) ? h : (screen.availHeight-50)) + 
			",width=" + ((w!=null) ? w : (screen.availWidth-12))
	);
	
	openWindowHandle.focus();
	form.submit();
}

function launchModalPopUp(page, h, w) {
	var params = "dialogHeight:"+h+"px; dialogWidth:"+w+"px; dialogTop:150px; dialogLeft:150px; edge:Raised; center:No; help:No; resizable:Yes; status:No;";
	window.showModalDialog(page,window,params);
}

function closePopUp() 
{
	if (openWindowHandle != null)
	{
		openWindowHandle.close();
	}
}

function doSubmitForm(form, params) 
{
	switch (form) 
	{
  		case "viewproductsForm" : 
 			//if (!validateWorkTime()) return;
 		break;
 	}

 	for (var i=0; i<document.forms.length; i++) 
 	{
    	if (document.forms[i].name == form) 
    	{
			document.forms[i].action = params;
      		document.forms[i].submit();
    	}
  	}
}

function doValidateSubmitForm(form, params, msg) 
{
	var message = "You are about to " + msg + " product. \nCould you please confirm your action by clicking Ok button \nor cancel your action by clicking Cancel button."
  	if (confirm(message)) {
		doSubmitForm(form, params);
  	}
}


function isLineValid(line) {
    var LINE_LENGTH = 4;
	if (!hasNonEmptyInput(line, NO_LINE_MSG))
		return false;
	return hasIntegerInput(line, LINE_LENGTH, INVALID_LINE_MSG);
}

function isNonEmptyInputValidInteger(el) {
	if (isInputEmpty(el))
		return true;
	return hasIntegerInput(el, NO_LENGTH, INVALID_NUMBER_MSG);
}

function doRelease() {
	try { 
		frm = document.forms[0];
		if (frm.action == "/appContext/stn.do" || 
  			frm.action == "/appContext/sftn.do") 
  		{
			if (frm.activeButton.value == 'buttonCancel') 
			{
				frm.submit();
				Sleep(500); // milliseconds"
			}
		}
	} catch(e) {
		// nothing to report
	}
}


///// START - functions specific to 'ServiceAddressSearchForm' /////////
function setOverrideValues(npa, nxx) {
	document.serviceAddressSearchForm.npa.value = npa;
	document.serviceAddressSearchForm.nxx.value = nxx;
	document.serviceAddressSearchForm.submit();
}

function drawTable(tbodyID) {
    clearChildNodes(tbodyID);
    switch (tbodyID) {
		case "streets" :
			finishDrawStreetsTable(tbodyID, streetData, streetMetadata);
			break;

		case "houses" :
			finishDrawOneColumnTable(tbodyID, houseData, "serviceAddressSearchForm", "houseNumSuffix");
			break;	
			
		case "apartments" :
			finishDrawOneColumnTable(tbodyID, apartmentData, "serviceAddressSearchForm", "apartment");
			break;		
    }	 
}


function doFilter(type) {
	switch (type) {
		case "streets" :
		  	// reset the initial values
		  	streetData = allStreets;		
		  	var name = document.serviceAddressSearchForm.filterStreetNameField.value;
		  	if (name != null && name != '') {
		    	streetData = filterStreetValues (streetData, streetMetadata.names[0], name);
		  	}

		  	var vector = document.serviceAddressSearchForm.filterVectorField.value;
		  	if (vector != null && vector != '') {
		    	streetData = filterStreetValues (streetData, streetMetadata.names[1], vector);
		  	}
		  	drawTable('streets');
			break;

     	case "houses" :
		  	// reset the initial values			
			houseData = allHouses;
			var no = document.serviceAddressSearchForm.filterHouseNumbersField.value;
			if (no != null && no != '') {
				houseData = filterOneTypeValues (houseData, no);
			}
        	drawTable('houses');
			break;
			
		case "apartments" :
		  	// reset the initial values
			apartmentData = allApartments;
			var no = document.serviceAddressSearchForm.filterApartmentNumbersField.value;
			if (no != null && no != '') {
				apartmentData = filterOneTypeValues (apartmentData, no);
			}
        	drawTable('apartments');
			break;
  	}
}

function setStreetFieldsValue(index) {
	setFieldValue("serviceAddressSearchForm", "street", streetData[index].name);
	setSelectValue("serviceAddressSearchForm", "vector", trimBlanks (streetData[index].vector));	
}


function validateView(type) {
	var searchVal = "";
	if (type == 1) {
		var street = document.serviceAddressSearchForm.street;
		if (hasNonEmptyInput(street, NO_STREET_MSG))
			searchVal = street.value;
		else
			return false;

	} else if (type == 2) {
    	var lot = document.serviceAddressSearchForm.lot;
    	if (hasNonEmptyInput(lot, NO_LOT_MSG))
			searchVal = "&" + lot.value;
		else
			return false;
    	var block = document.serviceAddressSearchForm.block.value;
    	if (block != null && block != '')
    		searchVal = searchVal + " " + block;	
    	var plan = document.serviceAddressSearchForm.plan.value;
    	if (plan != null && plan != '')
    		searchVal = searchVal + " " + plan;	
    		  	
    } else if (type == 3 || type == 4) {
    	if (type == 3) {
	    	var quarter = document.serviceAddressSearchForm.quarter;
			if (hasNonEmptyInput(quarter, NO_QUARTER_MSG))
				searchVal = quarter.value;
			else
				return false;

	    } else {
	    	var subdiv = document.serviceAddressSearchForm.subdivision;
	    	if (hasNonEmptyInput(subdiv, NO_SUBDIVISION_MSG))
				searchVal = "&" + subdiv.value;
			else
				return false;
	    }	
    	var section = document.serviceAddressSearchForm.section.value;
    	if (section != null && section != '')
    		searchVal = searchVal + " " + section;	
    	var township = document.serviceAddressSearchForm.township.value;
    	if (township != null && township != '')
    		searchVal = searchVal + " " + township;	
    	var range = document.serviceAddressSearchForm.range.value;
    	if (range != null && range != '')
    		searchVal = searchVal + " " + range;	
    	var meridian = document.serviceAddressSearchForm.meridian.value;
    	if (meridian != null && meridian != '')
    		searchVal = searchVal + " " + meridian; 	
    		
    } else if (type == 5) { 	
    	var road = document.serviceAddressSearchForm.road;
    	if (hasNonEmptyInput(road, NO_STREET_MSG))
			searchVal = road.value;
		else
			return false;
	
    	var rType = document.serviceAddressSearchForm.roadType.value;
    	if (rType != null && rType != '')
    		searchVal = searchVal + " " + rType;	
    	var rNo = document.serviceAddressSearchForm.roadNo.value;
    	if (rNo != null && rNo != '')
    		searchVal = searchVal + " " + rNo;	
    }
    document.serviceAddressSearchForm.street.value = searchVal;
    
    if (!hasNonEmptyInput(document.serviceAddressSearchForm.city, NO_CITY_MSG))		
		return false;
		
	return hasNonEmptyInput(document.serviceAddressSearchForm.province, NO_PROVINCE_MSG);
}

function validateSASFields() { 
	if (!hasNonEmptyInput(document.serviceAddressSearchForm.street, NO_STREET_MSG))
		return false;	
	if (!hasNonEmptyInput(document.serviceAddressSearchForm.city, NO_CITY_MSG))		
		return false;
	return hasNonEmptyInput(document.serviceAddressSearchForm.province, NO_PROVINCE_MSG);		
}

function provinceSettings(province, type) {
	// vector is available only for the Standard view
    if (type == 1) {
		if (province == "AB") {
			setSelectValue("serviceAddressSearchForm", "vector", "");
			enableField("serviceAddressSearchForm", "vector", false);
		} else if (province == "BC"){
			enableField("serviceAddressSearchForm", "vector", true);
		}
	}
}
///// END - functions specific to 'ServiceAddressSearchForm' /////////




///// START - functions specific to 'SelectTelephoneNumberForm' /////////
function submitTollOnlyPlan() {
	var npa = document.selectTelephoneNumberForm.npa;
	if (!isNpaValid(npa))
		return false;
	var nxx = document.selectTelephoneNumberForm.nxx;
	if (!isNxxValid(nxx))
		return false;
	var line = document.selectTelephoneNumberForm.line;
	if (!isLineValid(line))
		return false;
	var sp = document.selectTelephoneNumberForm.lspId;
		if (!hasNonEmptyInput(sp, NO_PROVIDER_MSG))
			return false;	
			
	var tel = npa.value + nxx.value + line.value;
	document.selectTelephoneNumberForm.telephoneNumber.value = tel;
	
	sendParamsToOMS('selectTelephoneNumberForm', 'omsReturnIframe');	
}

function checkOverrideNumber() {
	var frm = document.selectTelephoneNumberForm;
	var num = frm.npa.value + frm.nxx.value + frm.line.value;
	var overrideNum = frm.telephoneNumber.value;
	if (num != overrideNum)
	{
		alert(NUMBER_CHANGED_MSG);
		return false;
	}
	return true; 
}

function isValidTnSearch() {
	var frm = document.selectTelephoneNumberForm;
	if (!isNxxValid(frm.nxx))
		return false;			
	// for a portability check a 10 digit number is required
	var nn = frm.npa.value + '-' + frm.nxx.value;	
	if (!isOptionValid('selectTelephoneNumberForm', 'npaNxx', nn)) {	
		return isLineValid(frm.line);
	}	
	return isNonEmptyInputValidInteger(frm.line);
}
///// END - functions specific to 'SelectTelephoneNumberForm' /////////


///// START - functions specific to 'DueDateSelectForm' /////////
function setAppointDateTime(date, time) {
	appointmentDate.innerHTML = formatDate(d, '/');
	appointmentTime.innerHTML = time;
	document.dueDateSelectForm.appointDate.value = formatDate(d, '/');
	document.dueDateSelectForm.appointDateTime.value = time;
}

function setAppointmentTime(appointment) {
	var date = '';
	var time = '';
	var text = '';
	if (appointment != null && appointment.length > 0) {
		var app = appointment.split('-');
		date = formatDate(app[0], '/');
		time = app[1];
		text = date + ' - ' + time;
	}
	appointmentDate.innerHTML = text;
	document.dueDateSelectForm.appointDate.value = date;
	document.dueDateSelectForm.appointDateTime.value = time;
}

/*
function sendNoWork() {
	document.dueDateSelectForm.appointDate.value = "";
	document.dueDateSelectForm.appointDateTime.value = "";
	document.dueDateSelectForm.actualWorkTime.value = "";
	document.dueDateSelectForm.noWork.value = "Y";
	sendParamsToOMS("dueDateSelectForm", "omsReturnIframe");
}
*/

function validateWorkTime() {
	var time = document.dueDateSelectForm.actualWorkTime;
	if (!hasNonEmptyInput(time, NO_WORKTIME_MSG))
		return false;
	formatNumber(time);
	return hasNumberInput(time, INVALID_WORKTIME_MSG);	
}
///// END - functions specific to 'DueDateSelectForm' /////////

///// START - functions specific to 'NegotiateUserNameForm' /////////
function ComponentInfo (type, username) {
	this.type = type;
	this.username = username;
}

function usernameExists (arr, comp) {
	if (arr.length == 0)
		return false;
	
	if (arr[0].username == comp.username)
		return true;
	
	for (var i=1; i<arr.length; i++) {
		if (arr[i].type == comp.type && arr[i].username == comp.username) {
			return true;
		}
	}
	return false;
}

function validatePassword(el) {
	s = el.value;
	if (s.length < 5 || s.length > 8) {
		el.select();
		alert(INVALID_PASSWORD_LENGTH_MSG);
    		return false;
	} else {
		s1 = trimBlanks(s);
		if (s.length != s1.length) {
			el.select();
			alert(INVALID_PASSWORD_CONTAIN_BLANKS_MSG);
    			return false;
		}
	}
	return true;
}

function validateUsername(el) {
	s = el.value;
	if (s.length < 3 || s.length > 8) {
		el.select();
		alert(INVALID_USERNAME_LENGTH_MSG);
    		return false;
	}
	var alphanum = "0123456789abcdefghijklmnopqrstuvwxyz";
	var special = "_.-";
	for (var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (alphanum.indexOf(c) < 0 && special.indexOf(c) < 0) {
			el.select();
			alert(INVALID_USERNAME_CHARACTER_MSG);
			return false;
		}
	}
	if (special.indexOf(s.charAt(0)) >= 0 || special.indexOf(s.charAt(s.length-1)) >= 0) {
		el.select();
		alert(INVALID_USERNAME_BEGIN_END_MSG);
		return false;
	}
	return true;
}

function validateUsernamesPasswords() {
	var frm = document.negotiateUserNameForm;
	var msg = "";
	var components = new Array();
	var index = 0;
	for (var i=0; i<frm.elements.length; i++) {
		if (frm.elements[i].type == "text") {
			var el = frm.elements[i];
			var parts = new Array();
			parts = el.name.split('.');
			if (isInputEmpty(el)) {	    			
				if (parts[1] == "userName")
					msg = NO_USERNAME_MSG;
				else
					msg = NO_PASSWORD_MSG;	
				el.focus();
				alert(msg);
				return false;

			} else if (parts[1] == "userName") {
				if (!validateUsername(el))
					return false;
					
				comp = new ComponentInfo (el.title, el.value);
				if (usernameExists(components, comp)) {
					el.select();
					alert(DUPLICATE_USERNAME_MSG);
					return false;

				} else {
					components[index] = comp;
					index++;
				}
				
			} else if (parts[1] == "password") {
				if (!validatePassword(el))
					return false;
			}
      	}
  	}	
  	return true;
}
///// END - functions specific to 'NegotiateUserNameForm' /////////


///// START - functions specific to 'UpdateBillingAddressForm' ////
function validateUBAFields() { 
	var frm = document.updateBillingAddressForm;
	if (isInputEmpty(frm.addressLine1)) {
		if (isInputEmpty(frm.addressLine2)) {
			if (isInputEmpty(frm.addressLine3)) {
				if (!hasNonEmptyInput(frm.addressLine1, NO_ADDRESS_LINE1_MSG))
					return false;
			}
		}
	}		
	if (!hasNonEmptyInput(frm.city, NO_CITY_MSG))
		return false;
	return true;
}

function updateUBAFields() {
	var frm = document.updateBillingAddressForm;
	var address = avsAddresses[frm.validAddressPos.value];
	
	// prepare first line
	var line1 = '';
	if (address.suite != '')
		line1 = address.suite + '-';		
	line1 = line1 + address.streetNumber + address.streetSuffix + ' ';
	line1 += address.streetName;	
	if (streetName.streetType != '')
		line1 = line1 + ' ' + address.streetType;
	
	// check for a PO Box address
	if (trimBlanks(line1) == '')
		line1 = address.poBoxLine;
	
	frm.addressLine1.value = line1;
	frm.city.value = address.city;
	frm.province.value = address.province;
	frm.postalCode.value = address.postalCode;
	frm.countryCode.value = 'CAN';
}

function updateCCUIAddress(el) {
	if (validateHiddenFields('updateBillingAddressForm', el)) {
		// be sure nothing strange can happen
		updateUBAFields();
		updateCCUIWindow();
	}
}

function updateCCUIWindow() {
	// update the parent
	var childForm = document.updateBillingAddressForm;
	var parentForm = opener.document.callingCardUserInfoForm;

	parentForm.addressLine1.value = childForm.addressLine1.value;
	parentForm.addressLine2.value = childForm.addressLine2.value;
	parentForm.addressLine3.value = childForm.addressLine3.value;
	parentForm.city.value = childForm.city.value;
	parentForm.province.value = childForm.province.value;
	parentForm.postalCode.value = childForm.postalCode.value;
	parentForm.country.value = childForm.countryCode.value;
	
	opener.enableAddressFields(true);
	window.close();
}
///// END - functions specific to 'UpdateBillingAddressForm' //////



///// START - functions specific to 'CallingCardUserInfoForm' ////
var cardRow = -1;

function enableSelectOperationButtons(flag) {
	enableField('callingCardUserInfoForm', 'buttonAdd', flag);
	enableField('callingCardUserInfoForm', 'buttonUpdate', flag);
	enableField('callingCardUserInfoForm', 'buttonDelete', flag);
	enableInputMode(!flag)
}

function enableInputMode(flag) {
	// set the fields values
	displayCCInfoViewOnly(flag);
	// enable/disable the fields
	enableField('callingCardUserInfoForm', 'customerName', flag);
	enableField('callingCardUserInfoForm', 'userName', flag);
	enableRadioGroup('callingCardUserInfoForm', 'nameOnCard', flag);
	enableField('callingCardUserInfoForm', 'cardType', flag);
	enableField('callingCardUserInfoForm', 'quantity', flag);
	enableRadioGroup('callingCardUserInfoForm', 'selectAddress', flag);
	enableAddressFields(flag);		
}

function enableAddressFields(flag) {
	enableField('callingCardUserInfoForm', 'careOfName', flag);
	enableField('callingCardUserInfoForm', 'buttonNewAddress', flag);
	updateShippingAddress();
/*
	enableField('callingCardUserInfoForm', 'addressLine1', flag);
	enableField('callingCardUserInfoForm', 'city', flag);
	enableField('callingCardUserInfoForm', 'province', flag);
	enableField('callingCardUserInfoForm', 'postalCode', flag);
	enableField('callingCardUserInfoForm', 'country', flag);
*/
}

function updateShippingAddress() {
	var address = '';
	var frm = document.callingCardUserInfoForm;
	var line1 = frm.addressLine1.value;
	if (line1 != null && line1 != '') {
		address = line1;
		var line2 = frm.addressLine2.value;
		if (line2 != null && line2 != '')
			address = address + ' ' + line2;
		var line3 = frm.addressLine3.value;
		if (line3 != null && line3 != '')
			address = address + ' ' + line3;
			
		address = address + ', ' + frm.city.value;
		address = address + ', ' + frm.province.value;
		address = address + ' ' + frm.postalCode.value;
	}
	shipAddressContainer = document.getElementById("shipAddress");
	shipAddressContainer.innerHTML = address;
}

function newCCUser() {
	setFieldValue('callingCardUserInfoForm', 'userName', '');
	checkRadio('callingCardUserInfoForm', 'nameOnCard', 'C');
	setSelectValue('callingCardUserInfoForm', 'cardType', STANDARD_TYPE);
	setFieldValue('callingCardUserInfoForm', 'quantity', '1');
	enableAddressFields(true);
}

function useCCUser() {
	var cc = callCards[currRow];
	setFieldValue('callingCardUserInfoForm', 'userName', cc.user);
	checkRadio('callingCardUserInfoForm', 'nameOnCard', cc.name);
	setSelectValue('callingCardUserInfoForm', 'cardType', cc.type);
	setFieldValue('callingCardUserInfoForm', 'quantity', cc.quantity);
}

function useBillingAddress() {
	checkRadio('callingCardUserInfoForm', 'selectAddress', 'billAddress');
	setFieldValue('callingCardUserInfoForm', 'careOfName', billAddress.careOfName);
	setFieldValue('callingCardUserInfoForm', 'addressLine1', billAddress.line1);
	setFieldValue('callingCardUserInfoForm', 'addressLine2', billAddress.line2);
	setFieldValue('callingCardUserInfoForm', 'addressLine3', billAddress.line3);
	setFieldValue('callingCardUserInfoForm', 'city', billAddress.city);
	setSelectValue('callingCardUserInfoForm', 'province', billAddress.province);
	setFieldValue('callingCardUserInfoForm', 'postalCode', billAddress.postalCode);
	setSelectValue('callingCardUserInfoForm', 'country', billAddress.country);
	enableAddressFields(false);
}

function hasNewAddress() {
	if (cardRow != -1) {
		var cc = callCards[cardRow];
		if (cc.override == 'Y') 
			return true;
	}
	return false;
}

function useNewAddress() {
	checkRadio('callingCardUserInfoForm', 'selectAddress', 'newAddress');	
	var add = (document.callingCardUserInfoForm.position.value == '0');
	if (!add && hasNewAddress()) {
		var cc = callCards[cardRow];
		setFieldValue('callingCardUserInfoForm', 'careOfName', cc.careOfName);
		setFieldValue('callingCardUserInfoForm', 'addressLine1', cc.line1);
		setFieldValue('callingCardUserInfoForm', 'addressLine2', cc.line2);
		setFieldValue('callingCardUserInfoForm', 'addressLine3', cc.line3);
		setFieldValue('callingCardUserInfoForm', 'city', cc.city);
		setSelectValue('callingCardUserInfoForm', 'province', cc.province);
		setFieldValue('callingCardUserInfoForm', 'postalCode', cc.postalCode);
		setSelectValue('callingCardUserInfoForm', 'country', 'CAN');
			
	} else {
		setFieldValue('callingCardUserInfoForm', 'careOfName', '');
		setFieldValue('callingCardUserInfoForm', 'addressLine1', '');
		setFieldValue('callingCardUserInfoForm', 'addressLine2', '');
		setFieldValue('callingCardUserInfoForm', 'addressLine3', '');
		setFieldValue('callingCardUserInfoForm', 'city', '');
		setSelectValue('callingCardUserInfoForm', 'province', billAddress.province);
		setFieldValue('callingCardUserInfoForm', 'postalCode', '');
		setSelectValue('callingCardUserInfoForm', 'country', billAddress.country);
	}
	enableAddressFields(true);
}

function useCCAddress() {
	var cc = callCards[currRow];
	var addressType = 'billAddress';
	if (cc.override == 'Y')
		addressType = 'newAddress';
	checkRadio('callingCardUserInfoForm', 'selectAddress', addressType);
	setFieldValue('callingCardUserInfoForm', 'careOfName', cc.careOfName);
	setFieldValue('callingCardUserInfoForm', 'addressLine1', cc.line1);
	setFieldValue('callingCardUserInfoForm', 'addressLine2', cc.line2);
	setFieldValue('callingCardUserInfoForm', 'addressLine3', cc.line3);
	setFieldValue('callingCardUserInfoForm', 'city', cc.city);
	setSelectValue('callingCardUserInfoForm', 'province', cc.province);
	setFieldValue('callingCardUserInfoForm', 'postalCode', cc.postalCode);
	setSelectValue('callingCardUserInfoForm', 'country', 'CAN');	
	enableAddressFields(true);
}

function displayCCInfoViewOnly(flag) {
	if (flag) return;
	if (currRow == -1) {
		newCCUser()
		useNewAddress();
	} else {
		useCCUser();
		useCCAddress();
	}
}

function addCallingCard() {
	enableSelectOperationButtons(false);
	setFieldValue('callingCardUserInfoForm', 'position', '0');
	cardRow = currRow;
	
	newCCUser();
	useBillingAddress();
	closePopUp();
	showManageCardButtons(true);	
	updateUserNameField('C');
}

function editCallingCard() {
	if (currRow == -1) {
		alert(NO_CALLING_CARD_MSG);
		return;
	}
	closePopUp();
	enableSelectOperationButtons(false);
	setFieldValue('callingCardUserInfoForm', 'position', currRow);
	cardRow = currRow;
	if (callCards[currRow].override == 'Y')
		useCCAddress();		
	else
		useBillingAddress();
	closePopUp();	
	showManageCardButtons(true);
	updateUserNameField(callCards[currRow].name);
}

function deleteCallingCard() {
	if (currRow == -1) {
		alert("Please select a calling card.");
		return false;
	}	
	var ans = confirm(CONFIRM_DELETE_CALLING_CARD_MSG);
	if (ans) {
		setFieldValue('callingCardUserInfoForm', 'position', currRow);
		closePopUp();
	}
	return ans;
}

function updateUserNameField(type) {
	var flag = true;
	if (type == 'C') {
		flag = false;
		setFieldValue('callingCardUserInfoForm', 'userName', '');
	}
	enableField('callingCardUserInfoForm', 'userName', flag);
}

function stopCreatingCard() {
	setFieldValue('callingCardUserInfoForm', 'position', '-1');
	cardRow = -1;
	showManageCardButtons(false);
	enableSelectOperationButtons(true);
	closePopUp();
}

function abort() {
	if (document.callingCardUserInfoForm.position.value != -1) {
		if (confirm(CONFIRM_NO_SAVE_MSG)) {
			showManageCardButtons(false);
			setFieldValue('callingCardUserInfoForm', 'position', '-1');		
		} else 
			return true;	
	}
	return false;
}

function showManageCardButtons(flag) {
	manageCardContainer = document.getElementById("manageCard");
	if (flag)
		manageCardContainer.style.visibility = "visible";
	else
		manageCardContainer.style.visibility = "hidden";
}

function validateCCFields() { 
	var frm = document.callingCardUserInfoForm;	
	var users_min = 0;
	var users_max = getMaxNoOfUsers(frm.cardType.value);
	var printedName = getValueOfSelectedRadio('callingCardUserInfoForm', 'nameOnCard');
	if (printedName != 'C') {
		if (!hasNonEmptyInput(frm.userName, NO_USER_NAME_MSG))
			return false;
	}
	if (!hasNonEmptyInput(frm.quantity, NO_QUANTITY_MSG))
		return false;
	if (!hasIntegerInput(frm.quantity, NO_LENGTH, INVALID_NUMBER_MSG))
		return false;				
	if (!isElementInputInRangeInteger(frm.quantity, users_min, users_max, INVALID_NUMBER_MSG))
		return false;
		
	// if not the billing address, check the shipping address fields	
	var isNew = false;
	var obj = frm.selectAddress;
  	for(var i=0; !isNew && i<obj.length; i++) {
    	if(obj[i].checked && obj[i].value == 'newAddress') {
			isNew = true;
		}
	}
	if (isNew) {
		if (!hasNonEmptyInput(document.callingCardUserInfoForm.careOfName, NO_CARE_OF_NAME_MSG))
			return false;	
		if (!hasInnerText('shipAddress', NO_ADDRESS_MSG))
			return false;
		frm.overrideBillingAddress.value="Y";
	}
	return true;
}

function getMaxNoOfUsers(type) {
	var numOfUsers = 99;
	if (callCards != null) {
		var curUsers = 0;
		for (var i=0; i<callCards.length; i++) {
			if (callCards[i].type = type)			
				curUsers += (callCards[i].quantity * 1);
		}
		numOfUsers -= curUsers;
	}
	return numOfUsers;
}

var ccuiCallback = function() {
	if (!isFieldDisabled('callingCardUserInfoForm', 'buttonAdd')) {
		displayCCInfoViewOnly(false);
		enableAddressFields(false);	
	}
}

function validateNewAddress(page) {
	// add params
	var frm = document.callingCardUserInfoForm;
	var p = page + "&addressLine1=" + frm.addressLine1.value;
	p += "&addressLine2=" + frm.addressLine2.value;
	p += "&addressLine3=" + frm.addressLine3.value;
	p += "&city=" + frm.city.value;
	p += "&province=" + frm.province.value;
	p += "&postalCode=" + frm.postalCode.value;
	launchPopUp(p, 580, 610);
}

function viewPin(page) {
	var frm = document.callingCardUserInfoForm;
	var cardNumber = frm.cardNumber.value;
	if (cardNumber == null || cardNumber == '') {
		alert(NO_CALLING_CARD_MSG);
		return false;
	}
	// add params
	var p = page + "&orderActionRefNum=" + frm.orderActionRefNum.value;
	p += "&serviceInstanceId=" + frm.serviceInstanceId.value;
	p += "&resourceId=" + frm.serviceResourceValueId.value;
	p += "&customerId=" + frm.customerId.value;
	p += "&csrId=" + frm.uid.value;
	p += "&cardType=" + frm.cardType.value;
	p += "&cardNumber=" + cardNumber;
	p += "&targetName=" + frm.omsTargetName.value;
	launchPopUp(p, 400, 592);
}
///// END - functions specific to 'CallingCardUserInfoForm' //////

///// START - functions specific to 'SearchEssentialChannelsForm' ////
function setTvStationDescription(desc, brief) {

	var oRow = event.srcElement.parentElement;
	stationDesc.innerHTML = desc;
	if (!brief) {
		var tblRows = document.getElementById('tvChannelsTable').rows;
		for (var i=0; i<tblRows.length; i++) {
			if (oRow.rowIndex == i)
				tblRows[i].className = 'trColorSelect2';
			else
				tblRows[i].className = '';	
		}
		document.forms[0].currentDesc.value = desc;
	} else {
		if (oRow.className == '')
			oRow.className = 'trColorOver2';
	}
}

function resetTvStationDescription() {
	var oRow = event.srcElement.parentElement;
	if (oRow.className == 'trColorOver2')
		oRow.className = '';
	stationDesc.innerHTML = document.forms[0].currentDesc.value;
}
///// END - functions specific to 'SsearchEssentialChannelsForm' //////


///// START - functions specific to 'SelectPaymentMethodForm' ////
var pcnCallback = function() {
	// nothing to do
}

function viewAccountDetails(page) {
	if (currRow == -1) {
		alert(NO_CHANNEL_SELECTED_TO_VIEW);
	} else {	
		// add params
		var p = page + "?accountIndex=" + currRow;
		launchPopUp(p, 400, 582);
	}
}

function submitPaymentMethod() {
	if (currRow == -1) {
		if (tblData.length > 0) {
			alert(NO_CHANNEL_SELECTED_TO_SAVE);
		} else {
			alert(NO_CHANNELS_FOR_CUSTOMER);
		}
		return;
	}
    document.selectPaymentMethodForm.pcnId.value = tblData[currRow][2];
    document.selectPaymentMethodForm.pcnDescription.value = tblData[currRow][0];
	document.selectPaymentMethodForm.isPCNSelected.value = 'true';
	sendParamsToOMS('selectPaymentMethodForm', 'omsReturnIframe');	
}
///// END - functions specific to 'SelectPaymentMethodForm' //////




/* NEW GLOBAL FUNCTIONS */

// text field input validation
function validateInputAsNumber(el) {
	var valid = false;
	if (!isElementInputEmpty(el, NO_NUMBER_MSG))
		valid = isElementInputNumer(el, INVALID_NUMBER_MSG);
	return valid;
}

function validateInputAsInteger(el) {
	var valid = false;
	if (!isElementInputEmpty(el, NO_NUMBER_MSG))
		valid = isElementInputInteger(el, INVALID_NUMBER_MSG);
	return valid;
}

function validateInputAsInRangeInteger(el) {
	var valid = false;
	if (!isElementInputEmpty(el, NO_NUMBER_MSG))
		valid = isElementInputInteger(el, INVALID_NUMBER_MSG);
	return valid;
}

function validateNotNullInputAsNumber(el) {
	var valid = true;
	if (!isElementInputEmpty(el))
		valid = isElementInputNumer(el, INVALID_NUMBER_MSG);
	return valid;
}

function validateNotNullInputAsInteger(el) {
	var valid = true;
	if (!isElementInputEmpty(el))
		valid = isElementInputInteger(el, INVALID_NUMBER_MSG);
	return valid;
}

function validateNotNullInput(el, msg) {
	return !(isElementInputEmpty(el, msg));
}

function isElementInputEmpty(el, msg) {
	var empty = (el.value == null || el.value == '');
	if (empty)
		focusElement(el, msg);
	return empty;
}

function isElementInputNumer(el, msg) {
	var n = /(^\d+$)|(^\d+\.\d+$)/;
	var valid = n.test(el.value);
	if (!valid)
		selectElement(el, msg);
	return valid;
}

function isElementInputInteger(el, msg) {
	var valid = true;
	for (var i = 0; valid && i<el.value.length; i++) {
		var c = el.value.charAt(i);
		valid = (c >= "0" && c <= "9");
		if (!valid)
			selectElement(el, msg);
	}
	return valid;
}

function isElementInputInRangeInteger(el, min, max, msg) {
	var outOfRange = (el.value < min || el.value > max);
	if (outOfRange) {
		el.value = '';
		selectElement(el, msg);
	}
	return (!outOfRange);
}

function focusElement(el, msg) {
	if (msg != '') {
		alert (msg);
		el.focus();
	}
}

function selectElement(el, msg) {
	if (msg != '') {
		alert (msg);
		el.select();
	}
}
// ---------------


// text field object
function setTextObjValue(el, val, form) {
	var elm = (form != null) ? getElementObj(form, el) : el;
	elm.value = val;
}

function getTextObjValue(el, form) {
	var elm = (form != null) ? getElementObj(form, el) : el;
	return elm.value;
}

function toUpperTextObjValue(el, form) {
	if (isTabKey()) return;
	var elm = (form != null) ? getElementObj(form, el) : el;
	elm.value = elm.value.toUpperCase();

}

function toLowerTextObjValue(el, form) {
	if (isTabKey()) return;
	var elm = (form != null) ? getElementObj(form, el) : el;
	elm.value = elm.value.toLowerCase();
}
// ---------------


// select field object
function setSelectObjValue(el, val, form) {
	var elm = (form != null) ? getElementObj(form, el) : el;
  	for (var i=0; i<elm.length ; i++) {
    	if (elm.options[i].selected == true) {
      		elm.options[i].selected = false;
    	}
    	if (elm.options[i].value == val) {
      		elm.options[i].selected = true;
    	}
  	}
}

function getSelectObjValue(el, form) {
	var val = null;
	var elm = (form != null) ? getElementObj(form, el) : el;
  	for (var i=0; i<elm.length ; i++) {
    	if (elm.options[i].selected == true) {
    		val = elm.options[i].value;
    	}
  	}
  	return val;
}
// ---------------


// radio field object
function checkRadioObj(frm, el, val) {
  	for (var i=0; i<frm.elements.length; i++) {
    	if (frm.elements[i].name == el && frm.elements[i].value == val) {
			frm.elements[i].checked = true;	
		}
  	}
}

function getCheckedRadioObjValue(frm, el) {
	var val = null;
  	for (var i=0; i<frm.elements.length; i++) {
    	if (frm.elements[i].name == el && frm.elements[i].checked)
			val = frm.elements[i].value;
	}
	return val;
}

// if we have a 'val' enable that radio button only,
// otherwise enable the whole radio group
function enableRadioObj(frm, el, flag, val) {
  	for (var i=0; i<frm.elements.length; i++) {
    	if (frm.elements[i].name == el) {
    		if (val == null || frm.elements[i].value == val)
    			frm.elements[i].disabled = !flag;		 
		}
  	}
}
// ---------------


// all field objects but radio
function enableElementObj(el, flag, form) {
	var elm = (form != null) ? getElementObj(form, el) : el;
	elm.disabled = !flag;
}

function disabledElementObj(el, form) {
	var elm = (form != null) ? getElementObj(form, el) : el;
	return elm.disabled;
}
// ---------------


// form and form elements
function getFormObj(form) {
  	var frm = null;
  	for (var i=0; i<document.forms.length; i++) {
    	if (document.forms[i].name == form) {
      		frm = document.forms[i];
    	}
  	}
	return frm;
}

function getElementObj(frm, el) {
	var elm = null;
  	for (var i=0; i<frm.elements.length; i++) {
    	if (frm.elements[i].name == el) {
      		elm = frm.elements[i];
		}
  	}
  	return elm;
}
// ---------------


/* NEW OTHER FUNCTIONS */
function disableAllButtons(frm) {
	for (var i=0; i<document.forms.length; i++) {
		var frm = document.forms[i];
		for (var j=0; j<frm.elements.length; j++) {
			if (frm.elements[j].type == 'submit' || frm.elements[j].type == 'button') {	    
				frm.elements[j].disabled = true;
			}
		}
	}
}

function upper(el) {
	el.value = el.value.toUpperCase();
}

function lower(el) {
	el.value = el.value.toLowerCase();
}

