function authFormSubmit(realm, formName)
{
	pWin("/" + realm + "/cgi/parse?TPL=/doc/common/parent-submit.html&FORM_NAME=" + formName, 500,350,"","AUTH_TIMEOUT");
	return false;
}

function requireString(fVar, name)
{
	if (!fVar || fVar.value == "") {
		alert("You must enter a " + name);
		return false;
	} else
		return true;
}

function getElementLength(formElement)
{
// returns number of elements in a formvar multiple
	if (!formElement)
		return 0;
	else
		return (formElement.length) ? formElement.length : 1;
}

function checkboxSet(formElement, value)
{
// sets all checkboxes from element[0] to the specified value
	var n = getElementLength(formElement);

	switch (n) {
		case 0:
			return;
		case 1:	
			formElement.checked = value;
			break;
		default:
			for (var i = 0; i < n; i++) {
				formElement[i].checked = value;
			}
	}
}

function checkCount(formElement)
{
// returns number of items that are checked

	if (!formElement)
		return false;

	var count = 0;
	var n = getElementLength(formElement);

	switch (n) {
		case 0:
			return 0;
		case 1:
			return (formElement.checked) ? 1 : 0;
		default:
			for (var i = 0; i < n; i++) {
				switch(formElement.type) {	
					case 'select-one':
					case 'select-multiple':	
						count += ((formElement[i].selected) ? 1 : 0);
						break;
					default:
						count += ((formElement[i].checked) ? 1 : 0);
						break;
				}
			}
			return count;
	}
}

function maxSelect(fObj, max, buf) {

	count = checkCount(fObj);
	if (count <= max) {
		buffer = new Array();
		for (i=0; i<fObj.options.length; i++) {
			if (fObj.options[i].selected) {
				buffer[buffer.length] = i;
			}
		}
		return buffer;
	} else {
		alert('You may select a maximum of ' + max + '!');
		fObj.selectedIndex = -1;
		for (i=0; i<buf.length; i++) {
			fObj.options[buf[i]].selected = true;
		}
	}
		

}

function validateElem(formVar, fieldName, max)
{
// for batch processing of lists; checks that at least one element exists,
// at least one is checked, and (optionally) that not more than max are checked;
// returns number of checked if ok, false otherwise

	var		i = 0;
	var		n = getElementLength(formVar);
	var		checked = checkCount(formVar);

	if (max) {
		if (checked > max) {
			overMaxAlert(checked, max, fieldName);
			return false;
		}
	}
	
	switch (n) {
		case 0:
			alert("To perform this action, there must be at least one " + fieldName + " in your list.");
			return false;
		case 1:
			if (!formVar.checked) {
				alert("Please select at least one "  + fieldName + " using the checkboxes in your list.");
				return false;
			} else
				return checked;
		default:
			for (var i = 0; i < n; i++) {
				if (formVar[i].checked)
					return checked;
			}
			alert("Please select at least one "  + fieldName + " using the checkboxes in your list.");
			return false;
	}
}

function checkFieldSize(formVar, maxsize, name)
{
// checks the size of a <TEXTAREA> or <INPUT> entry;
// when called from a <form onSubmit> event handler, will prevent form 
// from being submitted if size of entry exceeds maxsize

	if (!formVar)
		return true;

	var		n = formVar.value.length;
	if (n > maxsize) {
		var diff = n - maxsize;
		alert("The maximum size of the field \"" + name + "\" is " + maxsize +
		      " characters; you have entered " + n + " characters.\n" +
		      "Please reduce your entry by at least " + diff + " characters.");
		formVar.focus();
		return false;
	} else
		return true;
}

function checkBlank(formVar, message)
{
// checks if a formvar is blank or whitespace;
	if (formVar.value.search(/^ *$/) == -1)
		return true;
	
	alert("Please enter " + message + ".");
	return false;
}

function selectState(state, country)
{
	var usaFlag = 0;

	if (country.options[country.selectedIndex].value == "USA")
		usaFlag = 1;
	else {
		for (var i = 0; i < state.length; i++) {
			if (state.options[i].selected && state.options[i].value != "") {
				usaFlag = 1;
				break;
			}
		}
	}

	if (usaFlag) {
		for (i = 0; i < country.length; i++) {
			if (country.options[i].value == "USA") {
				country.options[i].selected = true;
				break;
			} else
				country.options[i].selected = false;
		}
	}
}

var stateBuffer = new Array();

function selectCountry(country, state)
{
	if (state.options[state.selectedIndex].value != "")
		stateBuffer[state.name] = state.selectedIndex;

	if (state.type != "select-one") {
		for (var i = 0; i < state.length; i++)
			state.options[i].selected = false;
	}

	if (country.options[country.selectedIndex].value != "USA")
		state.selectedIndex = 0;
	else if (stateBuffer[state.name])
		state.selectedIndex = stateBuffer[state.name];
}

function resetForm(formObj)
{

	var		i;
	
	for (i = 0; i < formObj.length; i++) {
		if (formObj[i].type != "hidden")
			setVal(formObj[i], null);
	}
}

function setVal(formVar, val)
{
// attempts to set a formVar's value to the value specified by "val";
// NOTE: val must be an array!!! for non-multiple formvars, pass the
// desired value in val[0].
	var		i, j;

	if (!formVar) return;

	switch (formVar.type) {
		case "select-one":
		case "select-multiple":
			if (!val || !val.length) {
				formVar.selectedIndex = 0;
				break;
			}
			for (i = 0; i < val.length; i++) {
				for (j = 0; j < formVar.length; j++) {
					if (formVar.options[j].value == val[i]) {
						formVar.options[j].selected = true;
						break;
					}
				}
			}
			break;
		case "checkbox":
		case "radio":
			if (!val || !val.length) {
				formVar.checked = false;
			} else {
				for (i = 0; i < val.length; i++) {
					if (formVar.value == val[i]) {
						formVar.checked = true;
						break;
					} else {
						formVar.checked = false;
					}
				}
			}
			break;
		case "text":
		case "textarea":
		case "password":
			formVar.value = (val && val.length) ? val[0] : "";
			break;
	}
	return;
}

function getVal(formVar, hiddenFlag)
{
// returns value of the specified formVar
// NOTE: it returns an ARRAY, not a single value
// hiddenFlag determines if getVal retrieves hidden variables or not
	var		val = new Array();
	var		i, j;
	
	if (!formVar) return null;
	
	switch (formVar.type) {
		case "select-one":
			val[0] = formVar.options[formVar.selectedIndex].value;
			break;
		case "select-multiple":
			for (i = 0, j = 0; i < formVar.length; i++) {
				if (formVar.options[i].selected)
					val[j++] = formVar.options[i].value;
			} 
			break;
		case "checkbox":
		case "radio":
			val[0] = (formVar.checked) ? formVar.value : null;
			break;
		case "text":
		case "password":
			val[0] = formVar.value;
			break;
		case "hidden":
			val[0] = (hiddenFlag) ? formVar.value : null;
			break;
		default:
			val[0] = null;
	}

	for (i = 0; i < val.length; i++) 
		val[i] = httpEscape(val[i]);
		
	return val;
}

function getValSingle(fVar, hiddenFlag)
{
	var		val = getVal(fVar, hiddenFlag);
	return val[0];
}

function httpEscape(str)
{
// a "proper" implementation of the escape() routine; 

	var		i, c;
	var		output = "";

	if (!str || (typeof str != "string"))
		return str;

	for (i = 0; i < str.length; i++) {
		c = str.charAt(i);
		if (c.match(/[a-z0-9\/-]/i)) {
			output += c;
			continue;
		}
		c = str.charCodeAt(i);
		output += "%" + c.toString(16);
	}

	return output;
}

function integerFormat(formVar)
{
	var output = "";
	var reValid = /[0-9]/;
	var inputStr = formVar.value;

	if (formVar.value == "")
		return;
	
	for (i = 0; i < inputStr.length; i++) {
		foo = inputStr.charAt(i);
		if (foo.match(reValid))
			output += foo;
		else if (foo == '.')
			break;
	}
	
	output = (output) ? parseInt(output) : 0;
	if (output > 99999999) {
		alert("The maximum size for this field is $99,999,999");
		output = 9999999;
	}
	// interpret 'k' or 'm' characteres at end
	foo = inputStr.charAt(inputStr.length-1);
	if (foo.match(/[kK]/) && (output < 99999))
		output *= 1000;
	else if (foo.match(/[mM]/) && (output < 99))
		output *= 1000000;
		
	formVar.value = output.toString();
}

function stripText(fVar)
{
	var		i, c;
	var		str = fVar.value;
	var		out = "";
	
	for (i = 0; i < str.length; i ++) {
		if ((c = str.charCodeAt(i)) > 127) {
			switch (c) {
				case 8226:
				case 61607:
				case 61656:
					out += '-';
					break;
				case 8220:
				case 8221:
					out += '"';
					break;
				case 8216:
				case 8217:
					out += "'";
					break;
				case 8230:
					out += '...';
					break;
				case 8221:
					out += ' -- ';
					break;
				case 223:
					out += '&eacute;';
					break;
				default:
					out += '-';
			}
		} else {
			out += str.charAt(i);
		}
	}
	
	fVar.value = out;
}

function stripTextMulti()
{
	var		i;
	for (i = 0; i < arguments.length; i++) {
		if (arguments[i])
			stripText(arguments[i]);
	}
}

function checkPassword(pass1, pass2)
{
	if (!pass1 || !pass2)
		return false;

	if (pass1.value != pass2.value) {
		alert("Sorry, your passwords do not match. Please enter them again.");
		pass1.value = pass2.value = "";
		pass1.focus();
		return false;
	} else if (pass1.value.length < 6) {
		alert("Please enter a password that is at least 6 characters long.");
		pass1.value = pass2.value = "";
		pass1.focus();
		return false;
	}

	return true;
}

function dispLen(key, fv)
{
    cnt = fv.value.length;
    divObj = document.getElementById(key+'_Cnt');
    divObj.innerHTML = '' + cnt + '';
}

function insertAtCursor(myField, myValue) {
//IE support
if (document.selection) {
    myField.focus();
    sel = document.selection.createRange();
    sel.text = myValue;
}
//MOZILLA/NETSCAPE support
else if (myField.selectionStart || myField.selectionStart == '0') {
    var startPos = myField.selectionStart;
    var endPos = myField.selectionEnd;
    myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
} else {
    myField.value += myValue;
}

}

//clears a form element once onFocus then removes this feature from itself

function focusToNullOnce(fVar)
{
    fVar.value='';
    fVar.onfocus = "void(0);";
}

function setSelectionRange(input, selectionStart, selectionEnd) {
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}

function setCaretToEnd(input) {
  setSelectionRange(input, input.value.length, input.value.length);
}

function setCaretToBegin(input) {
  setSelectionRange(input, 0, 0);
}

function setCaretToPos(input, pos) {
  setSelectionRange(input, pos, pos);
}

function selectString(input, string) {
  var match = new RegExp(string, "i").exec(input.value);
  if (match) {
    setSelectionRange(input, match.index, match.index + match[0].length);
  }
}

function replaceSelection(input, replaceString) {
  if (input.setSelectionRange) {
    var selectionStart = input.selectionStart;
    var selectionEnd = input.selectionEnd;
    input.value = input.value.substring(0, selectionStart)
                  + replaceString
                  + input.value.substring(selectionEnd);
    if (selectionStart != selectionEnd) // has there been a selection
      setSelectionRange(input, selectionStart, selectionStart + replaceString.length);
    else // set caret
      setCaretToPos(input, selectionStart + replaceString.length);
  }
  else if (document.selection) {
    var range = document.selection.createRange();
    if (range.parentElement() == input) {
      var isCollapsed = range.text == '';
      range.text = replaceString;
      if (!isCollapsed)  { // there has been a selection
        //it appears range.select() should select the newly 
        //inserted text but that fails with IE
        range.moveStart('character', -replaceString.length);
        range.select();
      }
    }
  }
}


