
function toggleDisplay(obj) {
	if (obj == null) return;
	if (obj.style.display == 'inline')
		obj.style.display = 'none'
	else
		obj.style.display = 'inline';
}



function getParentTR(obj) {
	if (obj == null)
		return null;
	if (obj.tagName.toLowerCase() == 'tr')
		return obj;
	return getParentTR(obj.parentElement);
}


function getMaxInstanceOf(idPrefix, tagName) {
	if (tagName == null) tagName = "input";
	var maxId = -1;
	for (var i=0; i < document.getElementsByTagName(tagName).length; i++) {
		obj = document.getElementsByTagName(tagName)[i];
		if (obj.id.slice(0,idPrefix.length) == idPrefix)
			maxId = Math.max(Number(obj.id.slice(idPrefix.length)), maxId)					
	}
	return maxId;
}

function getCountOf(idPrefix,tagName) {
	if (tagName == null) tagName = "input";
	var count = 0;
	for (i=0; i < document.getElementsByTagName(tagName).length; i++) {
		obj = document.getElementsByTagName(tagName)[i];
		if (obj.id.slice(0,idPrefix.length) == idPrefix)
			count++;
	}
	return count;
}

function getElementsByIdPrefix(idPrefix,tagName) {
	if (tagName == null) tagName = '*';
	var ar = new Array();
	var elmnts = document.getElementsByTagName(tagName);
	for (i=0; i < elmnts.length; i++) {
		//alert(rootObject.childNodes[i].id.slice(0,idPrefix.length));
		if (elmnts[i].id.slice(0,idPrefix.length) == idPrefix)
			ar.push(elmnts[i]);	
	}
	
	return ar;
}


function anyDuplicates(idPrefix, tagName, ignoreBlanks) {
	var i,j;
	if (ignoreBlanks == null)
		ignoreBlanks = false;
	var ar = getElementsByIdPrefix(idPrefix, tagName);
	for (i=0; i < ar.length; i++)
		for (j=i+1; j < ar.length; j++)
			if (ar[i].value == ar[j].value && (!ignoreBlanks || ar[i].value != ''))
				return true;

	return false;
}

function anyDuplicates3(idPrefix1, tagName1, idPrefix2, tagName2, idPrefix3, tagName3, ignoreBlanks) {
	//compares sets of 3 fields. if any set matches another set, returns true.
	var i,j;
	if (ignoreBlanks == null)
		ignoreBlanks = false;
	var ar1 = getElementsByIdPrefix(idPrefix1, tagName1);
	var ar2 = getElementsByIdPrefix(idPrefix2, tagName2);
	var ar3 = getElementsByIdPrefix(idPrefix3, tagName3);
	if (ar1.length != ar2.length || ar1.length != ar3.length) {
		alert('array length mismatch');
		return false;
	}
	for (i=0; i < ar1.length; i++)
		for (j=i+1; j < ar1.length; j++)
			if (   ar1[i].value == ar1[j].value && (!ignoreBlanks || ar1[i].value != '')
					&& ar2[i].value == ar2[j].value && (!ignoreBlanks || ar2[i].value != '')
					&& ar3[i].value == ar3[j].value && (!ignoreBlanks || ar3[i].value != '')
				)
				return true;
	
	return false;
}



function anyDuplicateAddresses(idPrefix) {
	var ar = getElementsByIdPrefix(idPrefix + 'Address1');
	for (i=0; i < ar.length; i++)
		for (j=i+1; j< ar.length; j++) 
			if (compareAddresses(idPrefix, ar[i].id.slice(idPrefix.length + 8), ar[j].id.slice(idPrefix.length + 8)))
				return true;
		
	
	return false;
}

function compareAddresses(idPrefix, m, n) {
	if (document.getElementById(idPrefix + 'Address1' + m).value != document.getElementById(idPrefix + 'Address1' + n).value)
		return false;
	if (document.getElementById(idPrefix + 'City' + m).value != document.getElementById(idPrefix + 'City' + n).value)
		return false;
	if (document.getElementById(idPrefix + 'State' + m).value != document.getElementById(idPrefix + 'State' + n).value)
		return false;
	if (document.getElementById(idPrefix + 'Zip' + m).value != document.getElementById(idPrefix + 'Zip' + n).value)
		return false;
	
	return true;
}




			

function disableAllInputs() {
	disableInputsByTagName('input');
	disableInputsByTagName('select');
}
function disableInputsByTagName(tag) {
	tagA = document.getElementsByTagName(tag);
	for (i=0; i < tagA.length; i++)
		tagA[i].disabled = true;
}

function enableAllInputs() {
	enableInputsByTagName('input');
	enableInputsByTagName('select');
}

function enableInputsByTagName(tag) {
	tagA = document.getElementsByTagName(tag);
	for (i=0; i < tagA.length; i++)
		tagA[i].disabled = false;
}


function notDisplay(dispState) {
	if (dispState == 'none')
		return 'inline';
	if (dispState == 'inline')
		return 'none';
}


function typingToUpper() {
	event.srcElement.value = trimString(event.srcElement.value.toUpperCase());
	
}


function trimString(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}


function roundMoney(nbr) {
	return Math.round(100 * nbr) / 100;
}

function formatCurrency(num) {
	num	=	num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
		num	=	"0";
	sign = (num	== (num	=	Math.abs(num)));
	num	=	Math.floor(num*100+0.50000000001);
	cents	=	num%100;
	num	=	Math.floor(num/100).toString();
	if (cents<10)
		cents	=	"0"	+	cents;
	for	(var i = 0;	i	<	Math.floor((num.length-(1+i))/3);	i++)
		num	=	num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-')	+	'$'	+	num	+	'.'	+	cents);
}


///------------------------------------select----------------------------
var keyBuffer = '';
var keyBufferTimeOut;

function isLetter(keyCode) {
	return ((keyCode == 32 || (keyCode >= 65 && keyCode <= 90) || (keyCode >=97 && keyCode <= 122)))
	
}

function selectKey() {
	var keyCode=event.keyCode;
	event.srcElement.curSelectedIndex = event.srcElement.selectedIndex;
	
	if (event.altKey) {
		event.srcElement.selectedIndex = event.srcElement.curSelectedIndex;
		return false;
	}
	if (keyCode == 9 || keyCode == 10 || keyCode == 13) return true;
	if (keyCode>=33 && keyCode<=40) return true; //arrow keys, pgup/pgdn, home, end
	
	if (!isLetter(keyCode))
		return false;
	
	window.clearTimeout(keyBufferTimeOut);
		
	var key=String.fromCharCode(keyCode).toLowerCase();
	keyBuffer+=key;
	
	event.srcElement.selectedIndex = findValPos(event.srcElement,keyBuffer,0,event.srcElement.options.length-1);
	
	try {
		event.srcElement.onchange();
	}
	catch (e) {
	
	}	
	
		
	keyBufferTimeOut=window.setTimeout("keyBuffer='';",4000);
	return false;
}

function findValPos(obj, val,startPos,endPos) {
	//binary search
	midPos=Math.ceil(startPos+(endPos-startPos)/2);
	if ((startPos==endPos)||(startPos==midPos)||(midPos==endPos)) {
		return midPos;
	}
	
	midStr =obj.options[midPos].innerHTML.toLowerCase().slice(0,val.length+10);
			
	if ((val+'          ')<midStr) {
		return findValPos(obj,val,startPos,midPos);
	} else if ((val+'          ')>midStr) {
		return findValPos(obj,val,midPos,endPos);
	} else {
		return midPos;
	}
}	

///------------------------------------select----------------------------

///--------------------------------keyboard shortcuts--------------------'
//usage:
//
// keyboardShortcuts['s'] = function() {fnLink('save'); };
//
//


var keyboardShortcuts = new Array();

function initKeyboardShortcuts() {
	var links = document.getElementsByTagName("a");
	for (i = 0; i < links.length; i++) {
		if (links[i].accessKey != "") {
			if (keyboardShortcuts[links[i].accessKey.toLowerCase()] == null) {
				//alert(links[i].accessKey.toLowerCase().charCodeAt(0));
				keyboardShortcuts[links[i].accessKey.toLowerCase().charCodeAt(0)] = links[i].click;
			}
		}
	}

	document.attachEvent('onkeydown', function () {
			var k = event.keyCode;
			//alert(k);
			if ((event.altKey && (k > 20 && k < 122 || k==188 || k==190)) || k == 27) {
				
				var key = String.fromCharCode(k).toLowerCase();
				if (k == 27) key = '~';
				if (k == 188) key = ',';
				if (k == 190) key = '.';
				
				
				window.setTimeout("try{keyboardShortcuts['" + key.charCodeAt(0) + "']()} catch (e) {}", 50);
				
				
				
				event.cancelBubble = true;						
				return false;
			}	
		}
	)
}



function StringBuffer(){ 
	this.buffer = []; 
} 

StringBuffer.prototype.append = function append(string){ 
	this.buffer.push(string); 
	return this; 
}

StringBuffer.prototype.toString = function toString(){ 
	return this.buffer.join(""); 
}


