function popUp(URL) {
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=720,height=500');");
}

function popUpSize(URL, w, h) {
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=" + w + ",height=" + h + "');");
}

function refreshPage(vPage){
	window.location.href = vPage;
}

/*
Field Validation
*/
function trim(str){
   return str.replace(/^\s*|\s*$/g,"");
}

function testRegExp(form_name, element_name, re) {
	return new RegExp(re).test(trim(document.forms[form_name].elements[element_name].value));
}

function validateString(form_name, element_name) {
	return (document.forms[form_name].elements[element_name].value.length > 0);
}

function validateSelection(form_name, element_name) {
	return (document.forms[form_name].elements[element_name].value.length > 0);
}

function validateRadioButton(form_name, element_name) {
	element = document.forms[form_name].elements[element_name];
	isSet = false
	for (i=element.length-1; i > -1; i--) {
		if (element[i].checked)
		{
			isSet = true;
		}
	}
	return isSet
	//return (document.forms[form_name].elements[element_name].selectedIndex >= 0);
}

//case insensitive version
function validateCheckbox(form_name, element_name) {
	return validateCheckBox(form_name, element_name);
}

function validateCheckBox(form_name, element_name) {
	return document.forms[form_name].elements[element_name].checked;
}

function validateCleanString(form_name, element_name) {
	return testRegExp(form_name, element_name, '^[A-Za-z0-9_]+$');
}

function validateEmail(form_name, element_name) {
	return testRegExp(form_name, element_name, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
}

function validateAbsUrl(form_name, element_name) {
	return testRegExp(form_name, element_name, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+$');
}

function validateNumber(form_name, element_name, allow_blank) {
	return (!allow_blank && value == '') ? false : testRegExp(form_name, element_name, '^-?[0-9]*\\.?[0-9]*$');
}

function validatePhoneNumber(form_name, element_name, allow_blank) {
	return (!allow_blank && value == '') ? false : testRegExp(form_name, element_name, '^[(]?[2-9]{1}[0-9]{2}[) -.]{0,2}' + '[0-9]{3}[- .]?' + '[0-9]{4}[ ]?' + '((x|ext)[.]?[ ]?[0-9]{1,5})?$');
}


function validateForm(form_name, validate_list){
	errors = "Errors in Form:";
	
	for(field_item in validate_list){
		//check if its empty
		field_data = validate_list[field_item];
		if (field_data[3].toLowerCase() == "text"){		
			if (! validateString(form_name, field_data[0])){
				errors = errors + "\n" + field_data[2] + " cannot be blank";
			}else{
				//check the validation
				switch(field_data[1].toLowerCase()){
					case "email" :
						if (validateEmail(form_name, field_data[0]) == 0)
						{
							errors = errors + "\n" + field_data[2] + " is not a valid email address.";
						}
						break;
					case "number" :
						if (validateNumber(form_name, field_data[0], true) == 0)
						{
							errors = errors + "\n" + field_data[2] + " is not a valid number.";
						}
						break;
					
					case "phone" :
						if (validatePhoneNumber(form_name, field_data[0], true) == 0)
						{
							errors = errors + "\n" + field_data[2] + " is not a valid phone number.";
						}
						break;
					default : 
						//nothing
						break;
				}			
			}
		}else if(field_data[3].toLowerCase() == "option"){			
			if (validateSelection(form_name, field_data[0]) == 0){
				errors = errors + "\n" + field_data[2] + " must have a selection";
			}
		}else if(field_data[3].toLowerCase() == "checkbox"){
			if (validateCheckbox(form_name, field_data[0]) == 0){
				errors = errors + "\n" + field_data[2] + " must have a selection";
			}
		}else if(field_data[3].toLowerCase() == "radio"){
			if (validateRadioButton(form_name, field_data[0]) == 0){
				errors = errors + "\n" + field_data[2] + " must have a selection";
			}
		}
	}

	if (errors != "Errors in Form:")
	{
		alert(errors);
		return false
	}else{
		return true
	}
}


/*
Admin Functions 
*/
function displayAdminList(url){
	e = document.getElementById("tree_list");
	if (e != null && e != undefined)
	{
		e.src = url;
	}
}


function displayAdminPage(url){
	e = document.getElementById("content");
	if (e != null && e != undefined)
	{
		e.src = url
	}
}

function refreshNav(){
	e = document.getElementById("tree_list");
	if (e != null && e != undefined)
	{
		e.src = e.src;
	}
}

/*
Handles shared value fields, etc
*/
//Used to alert the page when something changes
function formValueChanged(vItem){
	//check the item
	iName = vItem.name;

	if(dependancies == null || dependancies == undefined){
		dependancies = Array();
	}
	if(dependancies[iName] != undefined){
		iToEdit = document.getElementById(dependancies[iName]);
		if (iToEdit != undefined)
		{
			//we have it so now we change the values
			iList = eval(dependancies[iName] + '_options');
			if (iList != undefined)
			{
				//get the list
				iValues = iList[vItem.value.toLowerCase()];
				//clear it
				iToEdit.options.length = 0;
				//remove the groups
				groups = iToEdit.getElementsByTagName("optgroup");
				if (groups.length > 0)
				{
					for(i=groups.length - 1;i>-1;i--){
						iToEdit.removeChild(groups[i]);
					}
				}
				//add them all back in
				if (iValues.length>0)
				{
					for (i=0;i<iValues.length;i++)
					{
						iToEdit.options[iToEdit.options.length] = new Option(iValues[i][0], iValues[i][1]);
					}
				}
			}
		}
	}	
}

//Collects all the current options
function collectOptions(iItem){
	iValueList = Object();
	iElement = document.getElementById(iItem);
	if(iElement != null){
		//get the info
		groups = iElement.getElementsByTagName("optgroup");
		if (groups.length == 0)
		{
			//flat list
			iGroup = Array();
			for(i=0;i<iElement.options.length;i++){
				iOption = iElement.options[i];
				iGroup.push(Array(iOption.text, iOption.value));
			}
			iValueList[""] = iGroup;
		}else{
			//each group
			for(i=0;i<groups.length;i++){
				iGroupOptions = Array();
				iGroupName = groups[i].label.toLowerCase();
				iOptions = groups[i].getElementsByTagName("option");
				if (iOptions.length > 0)
				{
					for(j=0;j<iOptions.length;j++){
						iGroupOptions.push(Array(iOptions[j].text, iOptions[j].value));
					}
				}
				iValueList[iGroupName] = iGroupOptions;
			}

		}
	}
	return iValueList;
}

var dependancies = Array();