function MM_swapImgRestore() { //v3.0
	var i,x,a = document.MM_sr;
	for(i=0; a && i < a.length && (x=a[i]) && x.oSrc; i++) {
		x.src=x.oSrc;
	}
}

function MM_preloadImages() { //v3.0
	var d=document;
	if(d.images) {
		if(!d.MM_p) {
			d.MM_p=new Array();
		}
		var i,j=d.MM_p.length,a=MM_preloadImages.arguments;
		for(i=0; i<a.length; i++)  {
			if(a[i].indexOf("#")!=0) {
				d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];
			}
		}
	}
}

function MM_findObj(n, d) { //v4.01
	var p,i,x;
	if(!d) {
		d=document;
		if((p=n.indexOf("?"))>0&&parent.frames.length) {
			d=parent.frames[n.substring(p+1)].document;
			n=n.substring(0,p);
		}
	}
	if(!(x=d[n])&&d.all) {
		x=d.all[n];
		for (i=0;!x&&i<d.forms.length;i++) {
			x=d.forms[i][n];
		}
	}
	for(i=0;!x&&d.layers&&i<d.layers.length;i++) {
		x=MM_findObj(n,d.layers[i].document);
	}
	if(!x && d.getElementById) {
		x=d.getElementById(n);
		return x;
	}
}

function MM_swapImage() { //v3.0
	var i,j=0,x,a=MM_swapImage.arguments;
	document.MM_sr=new Array;
	for(i=0;i<(a.length-2);i+=3) {
		if((x=MM_findObj(a[i]))!=null) {
			document.MM_sr[j++]=x;
			if(!x.oSrc) {
				x.oSrc=x.src; x.src=a[i+2];
			}
		}
	}
}

// This function will show or hide an element based on the id you pass in and whether it is currently visible or not
function toggleObj(objId) {
	var obj = document.getElementById(objId);
	if(obj.style.display != 'none') {
		obj.style.display = 'none';
	}
	else {
		obj.style.display = 'block';
	}
}

// This function will show an element based on the id you pass in
function showobj(objid) {
	var obj = document.getElementById(objid);
	obj.style.display = "block";
}

// This function will hide an element based on the id you pass in
function hideobj(objid) {
	var obj = document.getElementById(objid);
	obj.style.display = "none";
}


// This function will check to see if the value of a form is equal to the condition you supplied
// If it is, it will show the objid you passed in, otherwise it will hide the element
function getSelectedValue(value,condition,objid) {
	if(value == condition) {
		showobj(objid);
	}
	else {
		hideobj(objid);
	}
}


// This function will ask for delete confirmation of item id
// If they confirm it will send them to url, where if they have the correct permissions, the item will be deleted
function deletefromdb(id,url) {
	input_box=confirm("Are you sure you want to delete this?");
	
	if(input_box) {
		str1 = url.concat("task=delete&id=");
		str2 = str1.concat(id);
		window.location = str2;
	}
}

// This function sets the max length for the textarea object
function ismaxlength(obj) {
	var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
	if (obj.getAttribute && obj.value.length>mlength)
	obj.value=obj.value.substring(0,mlength)
}

function checkext(upload_field, formats, alertText) {
	if(formats == undefined) {
		// Not sure why, but this only works with the | at the beginning and end
		formats = "|\.jpeg|\.jpg|\.gif|\.png|";
	}
	if(alertText == undefined) {
		alertText = "Please select a JPEG, GIF or PNG file.";
	}
	
	// this is just an example of checking
	// image file extension - jpg/jpeg
	var re_text = "/" + formats + "/i";
	//alert(re_text);
	var filename = upload_field.value;
	/* Checking file type */
	if(filename.search(re_text) == -1) {
		alert(alertText);
		upload_field.value = '';
	}
	return true;
}

function remove(url, id, alertText) {
	if(alertText == undefined) {
		alertText = "Are you sure you want to remove this?";
	}
	
	input_box=confirm(alertText);
	
	if(input_box) {
		str1 = url.concat("task=remove&id=");
		str2 = str1.concat(id);
		window.location = str2;
	}
}

function confirm_action(url, action, id, alertText) {
	if(alertText == undefined) {
		alertText = "Are you sure you want to remove this?";
	}
	
	input_box=confirm(alertText);
	
	if(input_box) {
		str1 = url.concat("task=");
		str2 = str1.concat(action);
		str3 = str2.concat("&id=");
		str4 = str3.concat(id);
		window.location = str4;
	}
}

// This function will send a value from the child window to it's parent
function sendValue(fieldObjId, sendValue, closeWin) {
	fieldObj = window.opener.document.getElementById(fieldObjId);
	fieldObj.value = sendValue;
	if(closeWin == undefined || closeWin == true) {
		window.close();
	}
}


function sendValueAndSwapImage(fieldObjId, sendValue, imageObjId, imagePath, closeWin) {
	fieldObj = window.opener.document.getElementById(fieldObjId);
	fieldObj.value = sendValue;
	imageObj = window.opener.document.getElementById(imageObjId);
	
	if(imageObj) {
		imageObj.src = imagePath + sendValue;
		if(sendValue == null) {
			imageObj.parentNode.removeChild(imageObj);
		}
	}
	else {
		if(sendValue != null) {
			imageObj = window.opener.document.createElement('img');
			fieldObj.parentNode.appendChild(imageObj);
			imageObj.src = imagePath + sendValue;
			imageObj.id = imageObjId;
		}
	}
	if(closeWin == undefined || closeWin == true) {
		window.close();
	}
}


function populateAddressFields(objIdPrefix, selectObj, addressArray) {
	if(addressArray.constructor == Array && selectObj) {
		addressNameFieldId = objIdPrefix + '_AddressName';
		emailFieldId = objIdPrefix + '_Email';
		titleFieldId = objIdPrefix + '_Title';
		firstnameFieldId = objIdPrefix + '_FirstName';
		miFieldId = objIdPrefix + '_MI';
		lastnameFieldId = objIdPrefix + '_LastName';
		fullnameFieldId = objIdPrefix + '_FullName';
		companyFieldId = objIdPrefix + '_Company';
		address1FieldId = objIdPrefix + '_AddressLine1';
		address2FieldId = objIdPrefix + '_AddressLine2';
		cityFieldId = objIdPrefix + '_City';
		stateFieldId = objIdPrefix + '_State';
		zipFieldId = objIdPrefix + '_Zip';
		countryFieldId = objIdPrefix + '_Country';
		phoneFieldId = objIdPrefix + '_Phone';
		faxFieldId = objIdPrefix + '_Fax';
		extrafield1FieldId = objIdPrefix + '_ExtraField1';
		extrafield2FieldId = objIdPrefix + '_ExtraField2';
		extrafield3FieldId = objIdPrefix + '_ExtraField3';
		extrafield4FieldId = objIdPrefix + '_ExtraField4';
		extrafield5FieldId = objIdPrefix + '_ExtraField5';
		
		// GET THE CORRECT ADDRESS FOR THE ONE SELECTED
		tempIndex = selectObj.selectedIndex;
		// IF AN ADDRESS IS SELECTED, AND NOT JUST THE FIRST OPTION
		if(tempIndex > 0) {
			addressId = selectObj.options[tempIndex].value;
			for(i = 0; i < addressArray.length; i++) {
				if(addressArray[i]['id'] == addressId) {
					selectedAddress = addressArray[i];
					break;
				}
			}
		}
		
		addressNameObj = document.getElementById(addressNameFieldId);
		if(addressNameObj && selectedAddress['name'] != undefined) {
			addressNameObj.value = selectedAddress['name'];
		}
		emailObj = document.getElementById(emailFieldId);
		if(emailObj && selectedAddress['email'] != undefined) {
			emailObj.value = selectedAddress['email'];
		}
		titleObj = document.getElementById(titleFieldId);
		if(titleObj && selectedAddress['title'] != undefined) {
			titleObj.value = selectedAddress['title'];
		}
		firstnameObj = document.getElementById(firstnameFieldId);
		if(firstnameObj && selectedAddress['firstname'] != undefined) {
			firstnameObj.value = selectedAddress['firstname'];
		}
		miObj = document.getElementById(miFieldId);
		if(miObj && selectedAddress['mi'] != undefined) {
			miObj.value = selectedAddress['mi'];
		}
		lastnameObj = document.getElementById(lastnameFieldId);
		if(lastnameObj && selectedAddress['lastname'] != undefined) {
			lastnameObj.value = selectedAddress['lastname'];
		}
		fullnameObj = document.getElementById(fullnameFieldId);
		if(fullnameObj && (selectedAddress['firstname'] != undefined || selectedAddress['lastname'] != undefined)) {
			tempFullName = '';
			if(selectedAddress['firstname'] != undefined) {
				tempFullName += selectedAddress['firstname'];
			}
			if(selectedAddress['firstname'] != undefined && selectedAddress['lastname'] != undefined) {
				tempFullName += ' ';
			}
			if(selectedAddress['lastname'] != undefined) {
				tempFullName += selectedAddress['lastname'];
			}
			fullnameObj.value = tempFullName;
		}
		companyObj = document.getElementById(companyFieldId);
		if(companyObj && selectedAddress['company'] != undefined) {
			companyObj.value = selectedAddress['company'];
		}
		address1Obj = document.getElementById(address1FieldId);
		if(address1Obj && selectedAddress['address'] != undefined) {
			address1Obj.value = selectedAddress['address'];
		}
		address2Obj = document.getElementById(address2FieldId);
		if(address2Obj && selectedAddress['address2'] != undefined) {
			address2Obj.value = selectedAddress['address2'];
		}
		cityObj = document.getElementById(cityFieldId);
		if(cityObj && selectedAddress['city'] != undefined) {
			cityObj.value = selectedAddress['city'];
		}
		stateObj = document.getElementById(stateFieldId);
		if(stateObj && selectedAddress['state'] != undefined) {
			stateObj.value = selectedAddress['state'];
		}
		zipObj = document.getElementById(zipFieldId);
		if(zipObj && selectedAddress['zip'] != undefined) {
			zipObj.value = selectedAddress['zip'];
		}
		countryObj = document.getElementById(countryFieldId);
		if(countryObj && selectedAddress['country'] != undefined) {
			countryObj.value = selectedAddress['country'];
		}
		phoneObj = document.getElementById(phoneFieldId);
		if(phoneObj && selectedAddress['phone'] != undefined) {
			phoneObj.value = selectedAddress['phone'];
		}
		faxObj = document.getElementById(faxFieldId);
		if(faxObj && selectedAddress['fax'] != undefined) {
			faxObj.value = selectedAddress['fax'];
		}
		extrafield1Obj = document.getElementById(extrafield1FieldId);
		if(extrafield1Obj && selectedAddress['extrafield1'] != undefined) {
			extrafield1Obj.value = selectedAddress['extrafield1'];
		}
		extrafield2Obj = document.getElementById(extrafield2FieldId);
		if(extrafield2Obj && selectedAddress['extrafield2'] != undefined) {
			extrafield2Obj.value = selectedAddress['extrafield2'];
		}
		extrafield3Obj = document.getElementById(extrafield3FieldId);
		if(extrafield3Obj && selectedAddress['extrafield3'] != undefined) {
			extrafield3Obj.value = selectedAddress['extrafield3'];
		}
		extrafield4Obj = document.getElementById(extrafield4FieldId);
		if(extrafield4Obj && selectedAddress['extrafield4'] != undefined) {
			extrafield4Obj.value = selectedAddress['extrafield4'];
		}
		extrafield5Obj = document.getElementById(extrafield5FieldId);
		if(extrafield5Obj && selectedAddress['extrafield5'] != undefined) {
			extrafield5Obj.value = selectedAddress['extrafield5'];
		}
	}
}


/*
   Creates an html attribute.
   @param name the name of the attribute.
   @param value the (string) value of the attribute.
   @return the newly created html attribute
*/
function createHTMLAttribute(name, value) {
   var attribute = document.createAttribute(name);
   attribute.nodeValue = value;
   return attribute;
}

// BEHAVES SIMILARLY TO PHP'S PRINT_R FUNCTION
function print_r(theObj){
	var output = "";
	if(theObj.constructor == Array || theObj.constructor == Object) {
		output = "<ul>";
		for(var p in theObj) {
			if(theObj[p].constructor == Array || theObj[p].constructor == Object) {
				output += "<li>["+p+"] => "+typeof(theObj)+"</li>";
				output += "<ul>";
				output += print_r(theObj[p]);
				output += "</ul>";
			} else {
				output += "<li>["+p+"] => "+theObj[p]+"</li>";
			}
		}
		output += "</ul>";
	}
	else {
		output += theObj;
	}
	
	return output;
}

function removeOption(selectObjId, callbackFunc) {
	// GET THE SELECT OBJECT
	selectObj = document.getElementById(selectObjId);
	
	if(selectObj) {
		tempIndex = selectObj.selectedIndex;
		// IF AN OPTION IS SELECTED
		if(tempIndex >= 0) {
			selectObj.remove(tempIndex);
		}
	}
	
	if(callbackFunc != undefined) {
		eval(callbackFunc);
	}
}

function moveOptionUp(selectObjId, callbackFunc) {
	// GET THE SELECT OBJECT
	selectObj = document.getElementById(selectObjId);
	
	if(selectObj) {
		tempIndex = selectObj.selectedIndex;
		// IF AN OPTION IS SELECTED
		if(tempIndex > 0) {
			movedownOptionObj = selectObj.options[(tempIndex - 1)];
			moveupOptionObj = selectObj.options[tempIndex];
			// IF BOTH ARE REGULAR OPTIONS AND NOT IN AN OPTION GROUP
			if(moveupOptionObj.parentNode.nodeName == 'SELECT' && movedownOptionObj.parentNode.nodeName == 'SELECT') {
				try {
					selectObj.add(moveupOptionObj,movedownOptionObj);
				}
				catch(e) { // IE ONLY
					selectObj.remove(moveupOptionObj.index);
					selectObj.add(moveupOptionObj,movedownOptionObj.index);
				}
			}
			else {
				// IF THE ONE THAT IS MOVING UP IS A REGULAR OPTION
				if(moveupOptionObj.parentNode.nodeName == 'SELECT') {
					// GET THE OPTION GROUP FOR THE ONE THAT IS MOVING DOWN
					optGroupId = movedownOptionObj.parentNode.attributes.name.nodeValue;
					optGroupObj = document.getElementById(optGroupId);
					// THEN FIGURE OUT WHICH OPTION IS FIRST IN THAT GROUP
					tempOptionsArr = optGroupObj.childNodes;
					for(i = 0; i < tempOptionsArr.length; i++) {
						if(tempOptionsArr[i].nodeName == 'OPTION') {
							tempFirstOptionObj = tempOptionsArr[i];
							// THEN ADD IT ABOVE THAT OPTION
							//selectObj.add(moveupOptionObj,tempFirstOptionObj); // was putting in optgroup
							break;
						}
					}
				}
				// ELSE IF THE ONE THAT IS MOVING DOWN IS A REGULAR OPTION
				else if(movedownOptionObj.parentNode.nodeName == 'SELECT') {
					// GET THE OPTION GROUP FOR THE ONE THAT IS MOVING UP
					optGroupId = moveupOptionObj.parentNode.attributes.name.nodeValue;
					optGroupObj = document.getElementById(optGroupId);
					// THEN FIGURE OUT WHICH OPTION IS LAST IN THAT GROUP
					tempOptionsArr = optGroupObj.childNodes;
					for(i = 0; i < tempOptionsArr.length; i++) {
						if(tempOptionsArr[i].nodeName == 'OPTION') {
							tempFirstOptionObj = tempOptionsArr[i];
							// THEN ADD THAT OPTION ABOVE IT
							//selectObj.add(tempFirstOptionObj, movedownOptionObj); // was putting in optgroup
							break;
						}
					}
				}
				// ELSE BOTH ARE IN OPTION GROUPS
				else {
					moveupOptGroupId = moveupOptionObj.parentNode.attributes.name.nodeValue;
					movedownOptGroupId = movedownOptionObj.parentNode.attributes.name.nodeValue;
					// IF THEY ARE IN THE SAME OPTION GROUP JUST MOVE THEM
					if(moveupOptGroupId == movedownOptGroupId) {
						try {
							selectObj.add(moveupOptionObj,movedownOptionObj);
						}
						catch(e) { // IE ONLY
							selectObj.remove(moveupOptionObj.index);
							selectObj.add(moveupOptionObj,movedownOptionObj.index);
						}
					}
					// ELSE THEY ARE IN DIFFERENT OPTION GROUPS LEAVE THEM ALONE
				}
			}
		}
	}
	
	if(callbackFunc != undefined) {
		eval(callbackFunc);
	}
}

function moveOptionDown(selectObjId, callbackFunc) {
	selectObj = document.getElementById(selectObjId);
	
	if(selectObj) {
		tempIndex = selectObj.selectedIndex;
		if(tempIndex < (selectObj.options.length - 1)) {
			moveupOptionObj = selectObj.options[(tempIndex + 1)];
			movedownOptionObj = selectObj.options[tempIndex];
			// IF BOTH ARE REGULAR OPTIONS AND NOT IN AN OPTION GROUP
			if(moveupOptionObj.parentNode.nodeName == 'SELECT' && movedownOptionObj.parentNode.nodeName == 'SELECT') {
				try {
					selectObj.add(moveupOptionObj,movedownOptionObj);
				}
				catch(e) { // IE ONLY
					selectObj.remove(moveupOptionObj.index);
					selectObj.add(moveupOptionObj,movedownOptionObj.index);
				}
			}
			else {
				// IF THE ONE THAT IS MOVING UP IS A REGULAR OPTION
				if(moveupOptionObj.parentNode.nodeName == 'SELECT') {
					// GET THE OPTION GROUP FOR THE ONE THAT IS MOVING DOWN
					optGroupId = movedownOptionObj.parentNode.attributes.name.nodeValue;
					optGroupObj = document.getElementById(optGroupId);
					// THEN FIGURE OUT WHICH OPTION IS FIRST IN THAT GROUP
					tempOptionsArr = optGroupObj.childNodes;
					for(i = 0; i < tempOptionsArr.length; i++) {
						if(tempOptionsArr[i].nodeName == 'OPTION') {
							tempFirstOptionObj = tempOptionsArr[i];
							// THEN ADD IT ABOVE THAT OPTION
							//selectObj.add(moveupOptionObj,tempFirstOptionObj); // was putting in optgroup
							break;
						}
					}
				}
				// ELSE IF THE ONE THAT IS MOVING DOWN IS A REGULAR OPTOIN
				else if(movedownOptionObj.parentNode.nodeName == 'SELECT') {
					// GET THE OPTION GROUP FOR THE ONE THAT IS MOVING UP
					optGroupId = moveupOptionObj.parentNode.attributes.name.nodeValue;
					optGroupObj = document.getElementById(optGroupId);
					// THEN FIGURE OUT WHICH OPTION IS LAST IN THAT GROUP
					tempOptionsArr = optGroupObj.childNodes;
					for(i = 0; i < tempOptionsArr.length; i++) {
						if(tempOptionsArr[i].nodeName == 'OPTION') {
							tempFirstOptionObj = tempOptionsArr[i];
							// THEN ADD THAT OPTION ABOVE IT
							//selectObj.add(tempFirstOptionObj, movedownOptionObj); // was putting in optgroup
							break;
						}
					}
				}
				// ELSE BOTH ARE IN OPTION GROUPS
				else {
					moveupOptGroupId = moveupOptionObj.parentNode.attributes.name.nodeValue;
					movedownOptGroupId = movedownOptionObj.parentNode.attributes.name.nodeValue;
					// IF THEY ARE IN THE SAME OPTION GROUP JUST MOVE THEM
					if(moveupOptGroupId == movedownOptGroupId) {
						try {
							selectObj.add(moveupOptionObj,movedownOptionObj);
						}
						catch(e) { // IE ONLY
							selectObj.remove(moveupOptionObj.index);
							selectObj.add(moveupOptionObj,movedownOptionObj.index);
						}
					}
					// ELSE THEY ARE IN DIFFERENT OPTION GROUPS LEAVE THEM ALONE
				}
			}
		}
	}
	
	if(callbackFunc != undefined) {
		eval(callbackFunc);
	}
}

// This function will open the specified url in a new window
function popup(winLink, winName, winWidth, winHeight, winResize, winScroll, winMenu) {
	if(winWidth == undefined || winWidth == NaN) {
		winWidth = 400;
	}
	if(winHeight == undefined || winHeight == NaN) {
		winHeight = 400;
	}
	if(winResize == undefined || (winResize != "yes" && winResize != "no" && winResize.constructor != Boolean)) {
		winResize = "yes";
	}
	if(winScroll == undefined || (winScroll != "yes" && winScroll != "no" && winScroll.constructor != Boolean)) {
		winScroll = "yes";
	}
	if(winMenu == undefined || (winMenu != "yes" && winMenu != "no" && winMenu.constructor != Boolean)) {
		winMenu = "no";
	}
	if(!window.focus) {
		return true;
	}
	var winURL;
	if(typeof(winLink) == 'string') {
		winURL=winLink;
	}
	else {
		winURL=winLink.href;
	}
	var winStyle;
	winStyle = 'width=' + winWidth + ',height=' + winHeight + ',scrollbars=' + winScroll + ',menubar=' + winMenu + ',location=' + winMenu + ',toolbar=' + winMenu + ',resizeable=' + winResize;
	window.open(winURL, winName, winStyle);
	
	return false;
}