function replaceAll(sException, sFind, sReplace){
	var nIndex = sException.indexOf(sFind);
	while (nIndex > -1){
		sException = sException.replace(sFind, sReplace);
		nIndex = sException.indexOf(sFind);
	}
    return sException;
}
function IsNumber(sValue){
	sNumber = "0123456789";
	for(var i=0; i<=sValue.length-1; i++){
		sChar = sValue[i];
		if (sNumber.indexOf(sChar) < 0) return false;
	}
	return true;
}
gsDelimiter = '.';
function format_number(lNumber, bIsNoFormat){
	if (!bIsNoFormat || bIsNoFormat == null) bIsNoFormat = false;
	var sNum = new String(lNumber);
	if (sNum == '') return '';
	if (sNum.indexOf(gsDelimiter) > -1) sNum = replaceAll(sNum, gsDelimiter, '');
	if (bIsNoFormat) return sNum;
	
	if (!IsNumber(sNum)) return 0;
	if (sNum.length <= 3) return sNum;
	
	var sRtn = "", k = 0;
	for (var i=sNum.length-1; i>=0; i--){
		stmp = sNum[i];
		if (k == 2 && i > 0){
			k = 0;
			sRtn = gsDelimiter + stmp + sRtn;
		}else{
			if (sRtn == '') sRtn = stmp;
			else sRtn = stmp + sRtn;
			k++;
		}
	}
	return sRtn;
}
function trimString(string) {
	if (string==null || string.length<1) return "";
	var start; start=0;
	var end; end = string.length-1;
	while ((start<=end) && (string.charAt(start)==" " || string.charCodeAt(start)==13 || string.charCodeAt(start)==10)) start++;
	while ((end>start) && (string.charAt(end)==" " || string.charCodeAt(end)==13 || string.charCodeAt(end)==10)) end--;
	if (start>end) return "";
	return string.slice(start,end+1);
}

function maxLength(tf, len) {
	if (tf.value.length>len) tf.value = tf.value.substr(0,len);
}

function displayWindow(url, name, width, height) {
	var _left, _top;
	var newWin, feature;
	if (document.all) {
		_left = (screen.width - width)/2;
		_top = (screen.height - height)/2;
	} else {
		_left = (800 - width)/2;
		_top = (600 - height)/2;
	}
	feature = 'width=' + width + ',height=' + height + ',left=' + _left + ',top=' + _top;
	if (width >= 500 && height >= 300) feature += ',resizable=yes, location=no, menubar=no, scrollbars=yes,status=no, toolbar=no';
	else feature += ',resizable=no, location=no, menubar=no, scrollbars=yes, status=no, toolbar=no';
	newWin = window.open(url, name, feature);
	if (newWin) {
		newWin.focus();
		return newWin;
	}
	else return null;
}

function selectMenu(menu, value, isValue) {
	var i;
	if (isValue) {
		for (i=0; i<menu.options.length; i++) {
			if (menu.options[i].value == value) {
				menu.options[i].selected = true;
				break;
			}
		}
	}
	else {
		for (i=0; i<menu.options.length; i++) {
			if (menu.options[i].text == value) {
				menu.options[i].selected = true;
				break;
			}
		}
	}
}

function addMenuToMenu(srcobj, desobj, not_added) {
	// If options[i].value == not_added, then isn't added, this is defaul
	var j, k, bIns;
	bIns=false;
	if (srcobj.selectedIndex == -1) return false;

	for (k=0; k<srcobj.options.length; k++) {
		if ((srcobj.options[k].selected==true) && (srcobj.options[k].value != not_added)) {
			for (j=0; j<desobj.options.length; j++) {
				if (srcobj.options[k].value == desobj.options[j].value) {
					bIns=true;
					break;
				}
			}
			if (bIns==true) {
				bIns = false;
				continue;
			}
			desobj.options.length += 1;
			for (j=desobj.options.length-1; j>0; j--) {
				desobj.options[j] = new Option(desobj.options[j-1].text, desobj.options[j-1].value);
			}
			desobj.options[0] = new Option(srcobj.options[k].text, srcobj.options[k].value);
		}
	}
	return true;
}

function addTextToMenu(value, text, desobj, column) {
	// If options[i].value == not_added, then isn't added, this is defaul
	var i,j,tmp;
	if (value==null || text==null) return false;
	if (column != 2) {
		tmp = value.toLowerCase();
		for (i=0; i<desobj.options.length; i++) {
			if (desobj.options[i].value.toLowerCase() == tmp) return false;
		}
	}
	else {
		tmp = text.toLowerCase();
		for (i=0; i<desobj.options.length; i++) {
			if (desobj.options[i].text.toLowerCase() == tmp) return false;
		}
	}
	desobj.options.length += 1;
	for (j=desobj.options.length-1; j>0; j--) {
		desobj.options[j] = new Option(desobj.options[j-1].text, desobj.options[j-1].value);
	}
	desobj.options[0] = new Option(text, value);
	desobj.selectedIndex = 0;
	return true;
}

function removeMenu(obj, not_removed) {
	// If options[i].value == not_removed, then isn't added, this is defaul
	var i, k;
	i = 0;
	if (obj.selectedIndex==-1) return false;
	while (i<obj.options.length) {
		if ((obj.options[i].selected == true) && (obj.options[i].value != not_removed)) {
			for (k=i; k<obj.options.length-1; k++) {
				obj.options[k] = new Option(obj.options[k+1].text, obj.options[k+1].value);
				if (obj.options[k+1].selected) obj.options[k].selected = obj.options[k+1].selected;
				else i++;
			}
			obj.options.length -= 1;
		}
		else i++;
	}
}
function inputFloat(tf, allowNeg) {
	if (tf.value == "") return true;
	var i, c, state, value;
	state	= 'H';
	value	= '';
	for (i=0; i<tf.value.length; i++) {
		c	= tf.value.charAt(i);
		if (c == '-') {
			if (i==0 && allowNeg==true) value += c;
		}
		else if (c == '.') {
			if (state == 'H') {
				value	+= c;
				state	= 'T';
			}
		}
		else if (c >= '0' && c <= '9') {
			value += c;
		}
	}
	if (value.length>0 && value.charAt(0) == '.') value = '0' + value;
	if (tf.value != value) tf.value	= value;
}

function inputInt(tf, allowNeg) {
	if (tf.value == "") return true;
	var i, c, value;
	value	= '';
	for (i=0; i<tf.value.length; i++) {
		c	= tf.value.charAt(i);
		if (c == '-') {
			if (i==0 && allowNeg==true) value += c;
		}
		else if (c >= '0' && c <= '9') {
			value += c;
		}
	}
	if (tf.value != value) tf.value	= value;
}

function myParseInt(value) {
	if (value==null || value=='') return parseInt('');
	var i; i=0;
	while (i<value.length) {
		if (value.substr(i,1)=='0') i++;
		else break;
	}
	if (i<value.length) return parseInt(value.substr(i));
	else return parseInt(value);
}