function trim(tcString) {
	
	if(!tcString || tcString == null || !tcString.replace) return '' ;
	
	return tcString.replace(/^\s+/,'').replace(/\s+$/,'') ;
	
}

function makeWin(tcUrl, tnWidth, tnHeight) {
	loWin = window.open(tcUrl, 'popup', 'height=' + tnHeight + ',width=' + tnWidth + ',resizable=no,toolbar=no,scrollbars=yes,menubar=no,location=no') ;
}

function autoComplete(event, toField, taArray) {
	
	if(!taArray || !taArray.length) return ;
	if(!toField || !toField.value) return ;
	if(('|8|46|37|38|39|40|33|34|35|36|45|').indexOf('|' + event.keyCode + '|') != -1) return ;
	
	var lcMatch = '' ;
	var lcVal = toField.value ;
	
	if(arguments.length > 3 && arguments[3]) lcVal = lcVal.toUpperCase() ;
	
	for(var i = 0 ; i < taArray.length ; i++)
		if(taArray[i].length > lcVal.length &&
			taArray[i].substr(0, lcVal.length) == lcVal) {
			
			lcMatch = taArray[i] ;
			break ;
			
		}
	
	if(!lcMatch) return ;
	
	toField.value = lcMatch ;
	
	if(toField.setSelectionRange) {
		toField.setSelectionRange(lcVal.length, lcMatch.length) ;
	} else {
		
		var loRange = toField.createTextRange() ;
		
		toField.value = lcMatch ;
		loRange.moveStart('character', lcVal.length) ;
		loRange.select() ;
		
	}
	
}

function findFocusObject() {
	
	var lcName = 'firstfocus' ;
	
	if(arguments && arguments[0]) lcName = arguments[0] ;
	
	var loObject = document.getElementById(lcName) ;
	
	if(loObject != null && loObject.focus) loObject.focus() ;
	if(loObject != null && loObject.select) loObject.select() ;
	
}

function isInteger(tcString) {
	
	var lcChar = '' ;
	
	for(var i = 0 ; i < tcString.length ; i++) {
		lcChar = tcString.charAt(i) ;
		if(lcChar < '0' || lcChar > '9') return(false) ;
	}
	
	return(true) ;
	
}

function stripCharsInBag(tcString, tcBag) {
	
	var lcReturn = '' ;
	var lcChar = '' ;
	
	for(var i = 0 ; i < tcString.length ; i++) {
		lcChar = tcString.charAt(i) ;
		if(tcBag.indexOf(lcChar) == -1) lcReturn += lcChar ;
	}
	
	return(lcReturn) ;
	
}

function keepCharsInBag(tcString, tcBag) {
	
	var lcReturn = '' ;
	var lcChar = '' ;
	
	for(var i = 0 ; i < tcString.length ; i++) {
		lcChar = tcString.charAt(i) ;
		if(tcBag.indexOf(lcChar) != -1) lcReturn += lcChar ;
	}
	
	return(lcReturn) ;
	
}

function isEmail(tcString) {
	
	if(!trim(tcString)) return(false) ;
	
	var lnCount = 1 ;
	var lnLength = tcString.length ;
	
	while(lnCount < lnLength && tcString.charAt(lnCount) != '@') lnCount++ ;
	
	if(lnCount >= lnLength || tcString.charAt(lnCount) != '@') return(false) ;
	
	lnCount += 2 ;
	
	while(lnCount < lnLength && tcString.charAt(lnCount) != '.') lnCount++ ;
	
	if(lnCount >= lnLength - 1 || tcString.charAt(lnCount) != '.') return false ;
	
	return true ;
	
}

function getZipType(tcZip) {
	
	tcZip = trim(tcZip) ;
	
	if(!tcZip) return('') ;
	
	var i = 0 ;
	var lcChar = '' ;
	var lcZip = '' ;
	var lcAlpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ;
	var lcNumeric = '0123456789' ;
	var lcBag = '' ;
	
	for(i = 0 ; i < tcZip.length ; i++) {
		lcChar = tcZip.charAt(i).toUpperCase() ;
		if((lcAlpha + lcNumeric).indexOf(lcChar) != -1) lcZip += lcChar ;
	}
	
	var lnLength = lcZip.length ;
	
	if((lnLength == 5 || lnLength == 9) && isInteger(lcZip)) return('us') ;
	
	if(lnLength != 6) return('') ;
	
	for(i = 0 ; i < lcZip.length ; i++) {
		lcChar = lcZip.charAt(i).toUpperCase() ;
		lcBag = (i % 2 == 1) ? lcNumeric : lcAlpha ;
		if(lcBag.indexOf(lcChar) == -1) return('') ;
	}
	
	return('ca') ;
	
}

function getDateFromString(tcDate) {
	
	tcDate = trim(tcDate) ;
	
	if(!tcDate) return(false) ;
	
	var laDate = tcDate.split('/') ;
	
	if(!laDate.length || laDate.length != 3) return(false) ;
	
	var
		lnMonth = parseInt(laDate[0], 10),
		lnDay = parseInt(laDate[1], 10),
		lnYear = parseInt(laDate[2], 10) ;
	
	if(!lnMonth || !lnDay || !lnYear) return(false) ;
	
	lnMonth += -1 ;
	
	if(!isInteger(lnMonth) || !isInteger(lnDay) || !isInteger(lnYear)) return(false) ;
	
	var ldDate = new Date() ;
	
	ldDate.setFullYear(lnYear, lnMonth, lnDay) ;
	
	if(lnMonth != ldDate.getMonth() || lnDay != ldDate.getDate() || lnYear != ldDate.getFullYear()) return(false) ;
	
	ldDate.setHours(0, 0, 0, 0) ;
	
	return(ldDate) ;
	
}

function asyncLink(tcLink, tcTarget, tcMessage) {
	
	document.getElementById(tcTarget).innerHTML = tcMessage ;
	
	if(window.XMLHttpRequest) {
		
		oRequest = new XMLHttpRequest() ;
		oRequest.onreadystatechange = function() { asyncDone(tcTarget) ; } ;
		oRequest.open('GET', tcLink, true) ;
		oRequest.send(null) ;
		
	} else if(window.ActiveXObject) {
		
		oRequest = new ActiveXObject('Microsoft.XMLHTTP') ;
		
    if (oRequest) {
    	oRequest.onreadystatechange = function() { asyncDone(tcTarget) ; } ;
    	oRequest.open('GET', tcLink, true) ;
    	oRequest.send() ;
		}
	}
}    

function asyncDone(tcTarget) {
	
	if (oRequest.readyState == 4)
		document.getElementById(tcTarget).innerHTML = oRequest.status == 200 ?
			oRequest.responseText : ('Error:\n' + oRequest.statusText) ;
	
}