// Helper functions for select/menus

function removeAllOptions(selectbox)
{
var i;
	for(i=selectbox.options.length-1;i>=0;i--)
	{
		selectbox.remove(i);
	}
}
function removeOptions(selectbox)
{
	var i;
	if (selectbox.options) {
	for(i=selectbox.options.length-1;i>=0;i--)
	{
		if(selectbox.options[i].selected)
		selectbox.remove(i);
	}
	}
}
function addOption(selectbox,text,value )
{
	var optn = document.createElement("OPTION");
	optn.text = text;
	optn.value = value;
	selectbox.options.add(optn);
}

// check box helper functions
function writeTipCheckBoxToolTips( n, desc ) {
	var name = desc['name'] + n;

	var rtn =  '';
	for(var i = 0, cb, bits; (cb = desc['text'][i]); i++) {
		bits = 1<<i;
		rtn = rtn.concat('<label for="', name, '"> ', cb['abv'], ':</label>',
			'<input id="', name, '" name="', name, '[]" class="memCb" type="checkbox" onMouseOver="Tip(\'', cb['mouse'], '\')" onMouseOut="UnTip()" value="', bits, '">' );
	}
	return rtn;
}

function writeTipCheckBoxHdr(desc ) {
	var rtn =  '';
	for(var i = 0, cb, bits; (cb = desc['text'][i]); i++) {
		bits = 1<<i;
		rtn = rtn.concat(
			'<span class="memCbAbv">', cb['abv'], '</span>' );
	}
	return rtn;
}

function writeTipCheckBox( n, desc ) {
	var name = desc['name'] + n;

	var rtn =  '<span class="MultiSelect'+n+'">';
	for(var i = 0, cb, bits; (cb = desc['text'][i]); i++) {
		bits = 1<<i;
		rtn = rtn.concat(
			'<input id="', name, i, '" name="', name, '[]" class="memCb"  type="checkbox" title="', cb['mouse'], '" value="', bits, '">',
			'<label for="', name, '"> ', cb['mouse'], '</label>' );
	}
	return rtn+'</span>';
}

function writeTipCheckBoxOld( n, desc ) {
	var name = desc['name'] + n;

	var rtn =  '';
	for(var i = 0, cb, bits; (cb = desc['text'][i]); i++) {
		bits = 1<<i;
		rtn = rtn.concat(//'<label for="', name, '"> ', cb['abv'], ': </label>',
			'<input id="', name, '" name="', name, '[]" class="memCb"  type="checkbox" title="', cb['mouse'], '" value="', bits, '">' );
	}
	return rtn;
}

function populateCheckBox( n, desc, val) {
	var name = desc['name'] + n + '[]';
	var box = document.getElementsByName(name);
	var sum = 0;
	for(var i = 0, cb, bits; (cb = desc['text'][i]); i++) {
		bits = 1<<i;
		box.item(i).checked = bits & val ? true : false;
	}
}

function sumCheckBox( n, desc ) {
	var name = desc['name'] + n;
	var sum = 0;
	var box = document.getElementsByName(name);
	for(var i = 0, cb; (cb = desc['text'][i]); i++) {
		if (box[i].checked) sum += box[i].value;
	}
	return sum;
}

function phoneZipEntry( id, e, upDn, type ) {
	var keynum, keyChr;
	e = new Event(e);
	keynum = e.code;
	
	if (upDn == 0) {
		keyChr = e.key;
		return keyChr.test(/\d/) || (keynum < 48) || (keynum > 193) || (keynum == 190)  || (keynum == 109);
	} else {
		var field = $(id);
		var fixedField = '';
		var rtn = false;
		if ( id.test(/money|dollar/) || (type=="$")) {
			for (i = 0, n = 0, haveDot = -1; i < field.value.length; i++) {
				var c = field.value.charAt(i);
				if (-1 == haveDot) {
				 if (c.test(/\d/)){
					n++; fixedField += c; continue;
				 } else if (c == '.') {
				 	haveDot = n++;
					fixedField += '.'; continue;
				 }
			   } else if (n > (haveDot + 2)) break;
			     else if (c.test(/\d/)) {
					n++; fixedField += c; continue;
				 
				}
			}
			field.value = fixedField;
			return true;
		} else if ( /zip/.test(id) || (type=='zip')) {
			for (i = 0, n = 0, haveHyphen = false; i < field.value.length; i++) {
				var c = field.value.charAt(i);
				if (c == '.') c = '-';
				if ((n == 5)) { 
					haveHyphen = true;
					n++; fixedField += '-'; 
					if (c != '-') { 
						n++; fixedField += c; continue;
					}
				}
				else if ((c != '-')&& /\d/.test(c)) { n++; fixedField += c; }
				if ((!haveHyphen && (n == 6)) || (n==10)) break;
			}
			field.value = fixedField;
			if ((!haveHyphen && (n == 5)) || (n==10) || (n==0)) return true;
		} else {
		    for (i = 0, n = 0; i < field.value.length; i++) {
				var c = field.value.charAt(i);
				if (c == '.') c = '-';
				if ((n == 3) || (n == 7)) { 
					n++; fixedField += '-'; 
					if (c != '-') { 
						n++; fixedField += c; continue;
					}
				}
				else if ((c != '-')&& /\d/.test(c)) { n++; fixedField += c; }
				if (n == 12) break;
			}
			field.value = fixedField;
			return (n ==0) || (n == 12);
		}
		return false;
	}
}

function xphoneZipEntry( id, e, upDn ) {
	var keynum, keyChr;
	e = new Event(e);
	keynum = e.code;
	
	if (upDn == 0) {
		keyChr = e.key;
		return keyChr.test(/\d/) || (keynum < 48) || (keynum > 193) || (keynum == 190)  || (keynum == 109);
	} else {
		var field = $(id);
		var fixedField = '';
		var rtn = false;
		if ( id.test(/money|dollar/)) {
			for (i = 0, n = 0, haveDot = -1; i < field.value.length; i++) {
				var c = field.value.charAt(i);
				if (-1 == haveDot) {
				 if (c.test(/\d/)){
					n++; fixedField += c; continue;
				 } else if (c == '.') {
				 	haveDot = n++;
					fixedField += '.'; continue;
				 }
			   } else if (n > (haveDot + 2)) break;
			     else if (c.test(/\d/)) {
					n++; fixedField += c; continue;
				 
				}
			}
			field.value = fixedField;
			return true;
		} else if ( id.test(/zip/)) {
			for (i = 0, n = 0, haveHyphen = false; i < field.value.length; i++) {
				var c = field.value.charAt(i);
				if (c == '.') c = '-';
				if ((n == 5)) { 
					haveHyphen = true;
					n++; fixedField += '-'; 
					if (c != '-') { 
						n++; fixedField += c; continue;
					}
				}
				else if ((c != '-')&& /\d/.test(c)) { n++; fixedField += c; }
				if ((!haveHyphen && (n == 6)) || (n==10)) break;
			}
			field.value = fixedField;
			if ((!haveHyphen && (n == 5)) || (n==10) || (n==0)) return true;
		} else {
		    for (i = 0, n = 0; i < field.value.length; i++) {
				var c = field.value.charAt(i);
				if (c == '.') c = '-';
				if ((n == 3) || (n == 7)) { 
					n++; fixedField += '-'; 
					if (c != '-') { 
						n++; fixedField += c; continue;
					}
				}
				else if ((c != '-')&& /\d/.test(c)) { n++; fixedField += c; }
				if (n == 12) break;
			}
			field.value = fixedField;
			return (n ==0) || (n == 12);
		}
		return false;
	}
}

