window.onloadListeners=new Array();

window.addOnLoadListener = function (listener) {
	window.onloadListeners[window.onloadListeners.length]=listener;
}

window.onload=function(){
	for(var i=0;i<window.onloadListeners.length;i++){
		func = window.onloadListeners[i];
		func.call();
	}
}

var baseTitle = "";
function errorMessage() {
	if(this.req.status == 200) {
		var error_message = document.getElementById("error_message");
		if(error_message != null) {
			error_message.innerHTML = this.req.responseText;
			if(baseTitle == "") baseTitle = document.title;
			document.title = baseTitle + " - " + this.req.responseText;
			window.status= this.req.responseText;
		}
	}
}

//window.addOnLoadListener(function);

function getCheckOrderFormForUID(uid) {
	if(uid == 'new') {
		new net.ContentLoader('user_admin/new_user.php',getNewUserForm);
	} else if (uid == 'lookup') {
		new net.ContentLoader('user_admin/user_lookup_by_letter.php?render=select',getLetterLookUp);
	} else {
		new net.ContentLoader('order_admin/checkOrderFormForUID.php?uid=' + uid,checkOrderFormForUID);
	}
}

function checkOrderFormForUID() {
	if(this.req.status == 200) {
		setDIVInnerHTML("check_order",this.req.response);
	}
}

function getLetterLookUp() {
	if(this.req.status == 200) {
		setDIVInnerHTML(
			"div_for_letter",
			"<p>Pick the first letter of the user's " +
			"Last or First Name or the user's email " +
			"address or user name:  " + this.req.responseText +
			"</p>"
		);
	}
}

function exists(id) {
	var elem = document.getElementById(id);
	if(elem == null) return false;
	return true;
}

function clearStatus() {
	setDIVInnerHTML("page_status","");
}

function updateAddress() {
	var uid = document.user_address_for_UID.uid.value;
	var b_address = document.user_address_for_UID.b_address.value;
	var b_address2= document.user_address_for_UID.b_address2.value;
	var b_city = document.user_address_for_UID.b_city.value;
	var b_state= document.user_address_for_UID.b_state.value;
	var b_zip=document.user_address_for_UID.b_zip.value;
	var b_country= document.user_address_for_UID.b_country.value;
	new net.ContentLoader(
		"user_admin/updateAddress.php?uid=" + uid +
		"&b_address=" + b_address.replace(/'/g,"''") +
		"&b_address2=" + b_address2.replace(/'/g,"''") +
		"&b_city=" + b_city.replace(/'/g,"''") +
		"&b_state=" + b_state.replace(/'/g,"''") +
		"&b_zip=" + b_zip.replace(/'/g,"''") +
		"&b_country=" + b_country.replace(/'/g,"''"),
		updateStatus
	);
}

function updateEmailAddress() {
	var uid = document.user_email_address_for_UID.uid.value;
	var email = document.user_email_address_for_UID.email.value;
	var uname = document.user_email_address_for_UID.uname.checked;
	var invoice_t = document.user_email_address_for_UID.invoice_t.checked;
	var oldEmail = document.user_email_address_for_UID.oldEmail.value;
	new net.ContentLoader(
		"user_admin/updateEmailAddress.php?uid=" + uid +
		"&email=" + email.replace(/'/g,"''") +
		"&uname=" + uname + "&oldEmail=" +
		oldEmail.replace(/'/g,"''") + "&invoice_t=" + invoice_t,
		updateStatus
	);
}


function updatePassword() {
	var uid = document.user_password_for_UID.uid.value;
	var pass = document.user_password_for_UID.pass.value;
	new net.ContentLoader(
		"user_admin/updatePassword.php?uid=" + uid +
		"&pass=" + pass.replace(/'/g,"''"),
		updateStatus
	);
}

function updatePhoneNumbers() {
	var uid = document.user_phone_numbers_for_UID.uid.value;
	var d_phone = document.user_phone_numbers_for_UID.d_phone.value;
	var e_phone = document.user_phone_numbers_for_UID.e_phone.value;
	new net.ContentLoader(
		"user_admin/updatePhoneNumbers.php?uid=" + uid +
		"&d_phone=" + d_phone.replace(/'/g,"''") +
		"&e_phone=" + e_phone.replace(/'/g,"''"),
		updateStatus
	);
}

function updateStatus() {
	if(this.req.status == 200) {
		//alert(this.req.responseText);
		var response = this.req.responseText;
		if(response.indexOf("An error occurred") != -1) {
			setDIVInnerHTML("page_status",response,"red");
		} else {
			setDIVInnerHTML("page_status",response,"green");
		}
	}
}

var lastcall = null;

function userSelectsForLetter(letter) {
	// this goofiness is required because IE does not support option.onclick
	// don't execute the same code twice in a row
	if(lastcall != letter) {
		// make sure we know what was called last
		lastcall = letter;
		// if it has been a while it doesn't matter what was called last.
		setTimeout('lastcall = null;',5000);
		if(exists("user_address")) {
			setDIVInnerHTML("user_address","");
		} else if(exists("user_email_address")) {
			setDIVInnerHTML("user_email_address","");
		} else if(exists("user_password")) {
			setDIVInnerHTML("user_password","");
		} else if(exists("user_phone_numbers")) {
			setDIVInnerHTML("user_phone_numbers","");
		} else {
			setDIVInnerHTML("check_order","");
		}
		clearStatus();
		//alert(letter);
		new net.ContentLoader("/admin/user_admin/lastNameSelectForLetter.php?letter=" + letter,lastNameSelect);
		new net.ContentLoader("/admin/user_admin/firstNameSelectForLetter.php?letter=" + letter,firstNameSelect);
		new net.ContentLoader("/admin/user_admin/unameSelectForLetter.php?letter=" + letter,unameSelect);
		new net.ContentLoader("/admin/user_admin/emailSelectForLetter.php?letter=" + letter,emailSelect);		
	}
}

function productSelectsForLetter(letter) {
	// this goofiness is required because IE does not support option.onclick
	// don't execute the same code twice in a row
	if(lastcall != letter) {
		// make sure we know what was called last
		lastcall = letter;
		// if it has been a while it doesn't matter what was called last.
		setTimeout('lastcall = null;',5000);
		setDIVInnerHTML("products","");
		clearStatus();
		//alert(letter);
		new net.ContentLoader("/admin/product_admin/productSelectForLetter.php?letter=" + letter,productSelect);
	}
}

function getUIDForFirstName(f_name) {
	new net.ContentLoader("/admin/user_admin/getUIDForFirstName.php?f_name=" + f_name,checkUIDForFirstName);
}

function getUIDForFirstAndLastName(f_name,l_name) {
	new net.ContentLoader("/admin/user_admin/getUIDForFirstAndLastName.php?f_name=" + f_name + "&l_name=" + l_name,checkUIDForFirstAndLastName);
}

function getUIDForLastName(l_name) {
	//alert("getUIDForLastName('" + l_name + "');");
	new net.ContentLoader("/admin/user_admin/getUIDForLastName.php?l_name=" + l_name,checkUIDForLastName);
}

function checkUIDForFirstName() {
	if(this.req.status == 200) {
		var response = this.req.responseText;
		if(response.substring(0,"uid=".length) == "uid=") {
			if(exists("popup")) {
				var uname = document.getElementById("uname");
				var desc = "";
				if(uname != null) {
					desc = uname.options[uname.selectedIndex].text;
				}
				returnUID("uid",response.substring("uid=".length),desc);
			} else if(exists("user_address")) {
				getAddressForUID(response.substring("uid=".length));
			} else if(exists("user_email_address")) {
				getEmailAddressForUID(response.substring("uid=".length));
			} else if(exists("user_password")) {
				getPasswordForUID(response.substring("uid=".length));
			} else if(exists("phone_numbers")) {
				getPhoneNumbersForUID(response.substring("uid=".length));
			} else {
				getCheckOrderFormForUID(response.substring("uid=".length));
			}
			getLastNameSelectForUID(response.substring("uid=".length));
			getUnameSelectForUID(response.substring("uid=".length));
			getEmailSelectForUID(response.substring("uid=".length));
		} else {
			getLastNameSelectForFirstName(response);
			getUnameSelectForFirstName(response);
			getEmailSelectForFirstName(response);
		}
	}
}

function checkUIDForFirstAndLastName() {
	if(this.req.status == 200) {
		var response = this.req.responseText;
		if(response.substring(0,"uid=".length) == "uid=") {
			if(exists("popup")) {
				var uname = document.getElementById("uname");
				var desc = "";
				if(uname != null) {
					desc = uname.options[uname.selectedIndex].text;
				}
				returnUID("uid",response.substring("uid=".length),desc);
			} else if(exists("user_address")) {
				getAddressForUID(response.substring("uid=".length));
			} else if(exists("user_email_address")) {
				getEmailAddressForUID(response.substring("uid=".length));
			} else if(exists("user_password")) {
				getPasswordUID(response.substring("uid=".length));
			} else if(exists("phone_numbers")) {
				getPhoneNumbersForUID(response.substring("uid=".length));
			} else {
				getCheckOrderFormForUID(response.substring("uid=".length));
			}
			getLastNameSelectForUID(response.substring("uid=".length));
			getUnameSelectForUID(response.substring("uid=".length));
			getEmailSelectForUID(response.substring("uid=".length));
		} else {
			var l = response.indexOf("l_name=");
			var f = response.indexOf("f_name=");
			var f_name = null;
			var l_name = null;
			if(f < l) {
				f_name = response.substring(response.indexOf("f_name=") + "f_name=".length);
				f_name = f_name.substring(0,f_name.indexOf(",l_name="));
				l_name = response.substring(response.indexOf(",l_name=")+",l_name=".length);
			} else {
				l_name = response.substring(response.indexOf("l_name=") + "l_name=".length);
				l_name = l_name.substring(0,l_name.indexOf(",f_name="));
				f_name = response.substring(response.indexOf(",f_name=")+",f_name=".length);
			}
			//alert("f:  " + f + ", l:  " + l + ", f_name:  '" + f_name + "', l_name:  '" + l_name + "', response:  '" + response + "'");
			getUnameSelectForFirstAndLastName(f_name,l_name);
			getEmailSelectForFirstAndLastName(f_name,l_name);
		}
	}
}

function selectUID(uid) {
	if(exists("popup")) {
		var uname = document.getElementById("uname");
		var desc = "";
		if(uname != null) {
			desc = uname.options[uname.selectedIndex].text;
		}
		returnUID("uid",uid,desc);
	} else if(exists("user_address")) {
		getAddressForUID(uid);
	} else if(exists("user_email_address")) {
		getEmailAddressForUID(uid);
	} else if(exists("user_password")) {
		getPasswordForUID(uid);
	} else if(exists("user_phone_numbers")) {
		getPhoneNumbersForUID(uid);
	} else {
		getCheckOrderFormForUID(uid);
	}
	getFirstNameSelectForUID(uid);
	getLastNameSelectForUID(uid);
	getUnameSelectForUID(uid);
	getEmailSelectForUID(uid);
}

function checkUIDForLastName() {
	if(this.req.status == 200) {
		var response = this.req.responseText;
		if(response.substring(0,"uid=".length) == "uid=") {
			if(exists("popup")) {
				var uname = document.getElementById("uname");
				var desc = "";
				if(uname != null) {
					desc = uname.options[uname.selectedIndex].text;
				}
				returnUID("uid",response.substring("uid=".length),desc);
			} else if(exists("user_address")) {
				getAddressForUID(response.substring("uid=".length));
			} else if(exists("user_email_address")) {
				getEmailAddressForUID(response.substring("uid=".length));
			} else if(exists("user_password")) {
				getPasswordForUID(response.substring("uid=".length));
			} else if(exists("phone_numbers")) {
				getPhoneNumbersForUID(response.substring("uid=".length));
			} else {
				getCheckOrderFormForUID(response.substring("uid=".length));
			}
			getFirstNameSelectForUID(response.substring("uid=".length));
			getUnameSelectForUID(response.substring("uid=".length));
			getEmailSelectForUID(response.substring("uid=".length));
		} else {
			getFirstNameSelectForLastName(response);
			getUnameSelectForLastName(response);
			getEmailSelectForLastName(response);
		}
	}
}

function getLastNameSelectForUID(uid) {
	new net.ContentLoader("/admin/user_admin/lastNameSelectForUID.php?uid=" + uid, lastNameSelect);
}

function getFirstNameSelectForUID(uid) {
	new net.ContentLoader("/admin/user_admin/firstNameSelectForUID.php?uid=" + uid, firstNameSelect);
}

function getUnameSelectForUID(uid) {
	new net.ContentLoader("/admin/user_admin/unameSelectForUID.php?uid=" + uid, unameSelect);
}

function getEmailSelectForUID(uid) {
	new net.ContentLoader("/admin/user_admin/emailSelectForUID.php?uid=" + uid, emailSelect);
}

function getAddressForUID(uid) {
	new net.ContentLoader("/admin/user_admin/addressForUID.php?uid=" + uid, addressForUID);
}

function getEmailAddressForUID(uid) {
	new net.ContentLoader("/admin/user_admin/emailAddressForUID.php?uid=" + uid, emailAddressForUID);
}

function getPasswordForUID(uid) {
	new net.ContentLoader("/admin/user_admin/passwordForUID.php?uid=" + uid, passwordForUID);
}

function returnUID(field,uid,uname) {
	window.opener.setUID(field,uid,uname);
	window.close();
}

function setUID(field,uid,uname) {
	var input = document.getElementById(field);
	if(input != null) input.value = uid;
	var display = document.getElementById("display_" + field);
	if(display != null) {
		if(field == "uid") {
			display.innerHTML = uname +
				"&nbsp;<input type='button' name='set_all' value='Set To Any Customer' " +
				"onclick=\"javascript:setAll('uid',0);" +
				"changeButtonLabel('select_uname','Select Customer');\">";
			changeButtonLabel('select_uname','Change Customer');
			//changeButtonLabel('set_all','Set To Any Customer');
		} else if(field == "pid") {
			display.innerHTML = uname +
				"&nbsp;<input type='button' name='set_all' value='Set To Any Product' " +
				"onclick=\"javascript:setAll('pid',0);" +
				"changeButtonLabel('select_product','Select Product');\">";
			changeButtonLabel('select_product','Change Product');
			updateCouponPreview('pid',uid,document.getElementById('id').value);
		}
	}
}

function getPhoneNumbersForUID(uid) {
	new net.ContentLoader("/admin/user_admin/phoneNumbersForUID.php?uid=" + uid, phoneNumbersForUID);
}

function emailAddressForUID() {
	if(this.req.status == 200) {
		setDIVInnerHTML("user_email_address",this.req.responseText);
		document.user_email_address_for_UID.email.focus();
		document.user_email_address_for_UID.email.select();
	}
}

function passwordForUID() {
	if(this.req.status == 200) {
		setDIVInnerHTML("user_password",this.req.responseText);
		document.user_password_for_UID.pass.focus();
		document.user_password_for_UID.pass.select();
	}
}

function phoneNumbersForUID() {
	if(this.req.status == 200) {
		setDIVInnerHTML("user_phone_numbers",this.req.responseText);
		document.user_phone_numbers_for_UID.d_phone.focus();
		document.user_phone_numbers_for_UID.d_phone.select();
	}
}

function addressForUID() {
	if(this.req.status == 200) {
		setDIVInnerHTML("user_address",this.req.responseText);
	}
}

function getLastNameSelectForFirstName(f_name) {
	new net.ContentLoader("/admin/user_admin/lastNameSelectForFirstName.php?f_name=" + f_name,lastNameSelect);
}

function getFirstNameSelectForLastName(l_name) {
	new net.ContentLoader("/admin/user_admin/firstNameSelectForLastName.php?l_name=" + l_name,firstNameSelect);
}

function getUnameSelectForFirstName(f_name) {
	new net.ContentLoader("/admin/user_admin/unameSelectForFirstName.php?f_name=" + f_name,unameSelect);
}

function getUnameSelectForFirstAndLastName(f_name, l_name) {
	new net.ContentLoader("/admin/user_admin/unameSelectForFirstAndLastName.php?f_name=" + f_name + "&l_name=" + l_name,unameSelect);
}

function getUnameSelectForLastName(l_name) {
	new net.ContentLoader("/admin/user_admin/unameSelectForLastName.php?l_name=" + l_name,unameSelect);
}

function getEmailSelectForFirstName(f_name) {
	new net.ContentLoader("/admin/user_admin/emailSelectForFirstName.php?f_name=" + f_name,emailSelect);
}

function getEmailSelectForFirstAndLastName(f_name, l_name) {
	new net.ContentLoader("/admin/user_admin/emailSelectForFirstAndLastName.php?f_name=" + f_name + "&l_name=" + l_name,emailSelect);
}

function getEmailSelectForLastName(l_name) {
	new net.ContentLoader("/admin/user_admin/emailSelectForLastName.php?l_name=" + l_name,emailSelect);
}

function lastNameSelect() {
	if(this.req.status == 200) {
		//alert(this.req.responseText);
		setDIVInnerHTML("lastname",this.req.responseText);
	}
}

function productSelect() {
	if(this.req.status == 200) {
		//alert(this.req.responseText);
		setDIVInnerHTML("products",this.req.responseText);
	}
}

function firstNameSelect() {
	if(this.req.status == 200) {
		setDIVInnerHTML("firstname",this.req.responseText);
	}
}

function unameSelect() {
	if(this.req.status == 200) {
		setDIVInnerHTML("div_for_uname",this.req.responseText);
	}
}

function emailSelect() {
	if(this.req.status == 200) {
		setDIVInnerHTML("div_for_email",this.req.responseText);
	}
}

function setDIVInnerHTML(id,innerHTML,color) {
	var div = document.getElementById(id);
	if(div == null) {
		alert(
			"id=" + id + ", innerHTML=" + innerHTML +
			", color=" + color
		);
	} else {
		div.innerHTML = innerHTML;
		if(color) {
			div.style.color = color;
			div.style.fontWeight = "bold";
		} else {
			div.style.color = "black";
			div.style.fontWeight = "normal";
		}
	}
}

function updateHiddenField(field,value,format) {
	display = document.getElementById('display_' + field);
	field = document.getElementById(field);
	
	format += ":";
	var entity = "";
	var replacement = "";
	var i;
	var x;
	for(i=0; i < 15 && format.indexOf(":") != -1; i++) {
		if(format == ":") break;
		entity = format.substring(0,format.indexOf(":"));	
		if(entity.indexOf("=") == -1) {
			if(entity == "buy" && value.toLowerCase().indexOf("buy ") == 0) {
				var aname = document.getElementById("aname");
				if(aname != null) {
					value = "buy-" + aname.value;
					break;
				}
				continue;
			} else if(entity == "all-lower-case") {
				value = value.toLowerCase();
			} else if(entity == "all-upper-case") {
				value = value.toUpperCase();
			}
			if(format.indexOf(":")+1 == format.length) break;
			format = format.substring(format.indexOf(":")+1);
			continue;
		} else if(entity.indexOf("=QUOT") != -1 || entity.indexOf('="') != -1) {
			replacement = '"';
		} else if(entity.indexOf("=SPACE") != -1 || entity.indexOf("= ") != -1) {
			replacement = " ";
		} else if(entity.indexOf("=APOS") != -1 || entity.indexOf("='") != -1) {
			replacement = "'";
		} else if(entity.indexOf("=COL") != -1) {
			replacement = ":";
		} else if(entity.substring(entity.indexOf("=")) == "=") {
			replacement = "";
		} else {
			replacement = entity.substring(entity.indexOf("=")+1);
		}
		entity = entity.substring(0,entity.indexOf("="));
		if(entity == "SPACE") entity = " ";
		if(entity == "QUOT") entity = '"';
		if(entity == "APOS") {
			entity = "'";
			if(value.indexOf("'") != -1) {
				//alert("Replace `'` with `" + replacement + "`");
			}
		}
		if(entity == "COL") entity = ":";
		for(x = 0; x < 30 && value.indexOf(entity) != -1; x++) {
			value = value.replace(entity,replacement);
		}
		if(format.indexOf(":")+1 == format.length) break;
		format = format.substring(format.indexOf(":")+1);
	}
	if(display != null) {
		display.innerHTML = value;
	}
	if(field != null) {
		field.value = value;
	}
}

lastPageNumber = 0;
function validatePnum() {
	var new1 = document.getElementById("new");
	if(new1!= null) {
		var aname = document.getElementById("aname");
		var pnum = document.getElementById("pnum");
		var domain = document.getElementsByName("domain")[0];
		if(lastPageNumber != pnum.value) {
			new net.ContentLoader(
				"/admin/article/validate_page_number.php?aname=" +
				aname.value + "&pnum=" + pnum.value + "&domain=" + domain.value,
				displayPnumResult
			);
			lastPageNumber = pnum.value;
		}
	}
}

function displayPnumResult() {
	if(this.req.status == 200) {
		var display_pnum = document.getElementById("display_pnum");
		if(display_pnum != null) {
			display_pnum.innerHTML = this.req.responseText;
		}
		if(this.req.responseText != '') {
			var num = this.req.responseText.substring(0,this.req.responseText.length-1);
			for(var i = num.length-1; i > 0; i--) {
				if(num.charAt(i) == ' ') {
					num=num.substring(i+1);
					break;
				}
			}
			var pnum = document.getElementById("pnum");
			if(pnum != null && pnum.value == num) {
				pnum.value = parseInt(num) + 1;
				validatePnum();
			}
		}
	}
}

function getNewUserForm() {
	alert("function getNewUserForm() is not done yet.");
}

function displayNewUserForm() {
	alert("function displayNewUserForm() is not done yet.");
}

function editInvoiceEmailAddress(email_address) {
	alert("function editInvoiceEmailAddress() is not done yet.");
}

function setAll(field,value) {
	var input = document.getElementById(field);	
	var display = document.getElementById('display_' + field);
	if(input != null) input.value = value;
	if(display != null) {
		if(field == "uid") display.innerHTML = 'Any Customer';
		else if(field == "pid") display.innerHTML = 'Any Product';
		else display.innerHTML = 'Any';		
		updateCouponPreview(field,value,document.getElementById('id').value);
	}
	var all = document.getElementsByName('set_all');
	for(var i = 0; i < all.length; i++) {
		if(all[i].getAttribute("onclick").indexOf("'" + field + "',") != -1 || all[i].getAttribute("onclick").indexOf('"' + field + '",') != -1) {
			all[i].parentNode.removeChild(all[i]);
			break;
		}
	}
}

function changeButtonLabel(field,label) {
	var button = document.getElementById(field);
	if(button == null) {
		button = document.getElementsByName(field);
		for(var i = 0; i < button.length; i++) {
			button[i].value = label;
		}
	} else {
		button.value = label;
	}
}

function selectUser() {
	window.open(
		'/admin/user_admin/user_lookup_by_letter.php?render=popup',
		'user_select_popup',
		'location=0,status=0,scrollbars=0,width=440,height=240,top=0,left=0');
}

function selectProduct() {
	window.open(
		'/admin/product_admin/product_lookup_by_letter.php?render=popup',
		'product_select_popup',
		'location=0,status=0,scrollbars=0,width=640,height=120,top=0,left=0');
}

var preview_settings = new Array();
var preview_parameters = new Array();
var delayed_coupon_updates = new Array();
function delayedCouponPreview(field) {
	var already_exists = false;
	for(var a = 0; a < preview_parameters.length; a++) {
		if(preview_parameters[a] == field) {
			already_exists = true;
			break;
		}
	}
	preview_settings[field] = delayed_coupon_updates[field][0] ; //value;
	if(already_exists != true) {
		preview_parameters[preview_parameters.length] = field;
	}
	var query_string = "?render=fragment&mini=true&id=" + delayed_coupon_updates[field][1];
	for(var i = 0; i < preview_parameters.length; i++) {
		query_string += "&" + preview_parameters[i] + "=" + preview_settings[preview_parameters[i]];
	}
	var coupon = "/coupon.php" + query_string;
	if(coupon != last_coupon) {
		new net.ContentLoader(coupon,displayCouponPreview);
	} else {
		
	}
	last_coupon = coupon;
	delayed_coupon_updates[field] = null;
}

var last_coupon = null;
var last_update_coupon_call = null;
function updateCouponPreview(field,value,id) {
	if(last_update_coupon_call != field+value+id) {
		last_update_coupon_call = field+value+id;
		if(delayed_coupon_updates[field] == null) {
			setTimeout("delayedCouponPreview('" + field + "');",2000);
		}
		// with each keystroke during the the two second pause, the value of that field is updated
		delayed_coupon_updates[field] = new Array(value,id);
	}
}

function displayCouponPreview() {
	if(this.req.status == 200) {
		var div = document.getElementById("coupon_preview");
		if(div != null) {
			div.innerHTML = this.req.responseText;
		} else {
		}
	} else {
	}
}

// takes two strings, id of select options are moving from, id of select options are moving to
function addAll(from,to) {
	// get selects
	from = document.getElementById(from);
	to = document.getElementById(to);
	// declare iterator
	var i;
	// if selects exist
	if(from != null && to != null) {
		// start from last option and work way down
		for(i = from.options.length - 1; i >= 0; i--) {
			// move option from from to to
			to.options[to.options.length] = from.options[i];
			// unselect moved option
			to.options[to.options.length-1].selected = false;				
		}
		// put comma separated list in hidden field, shorter of the two selects
		updateList(from,to);
	}
}

// make a comma separated list of the shorter select
function updateList(from,to) {
	var list = "";
	// if destination select is shorter
	if(to.options.length < from.options.length) {
		// try to get the list by the destination name
		list = document.getElementById(to.name + "_list");
		// otherwise, the source list is shorter
		if(list == null) list = document.getElementById(from.name + "_list");
		// if we found the list
		if(list != null) {
			// make sure it is named after the short list and not after the long list
			list.name = to.name + "_list";
			// reset list
			list.value = "";
			// populate list
			for(i = 0; i < to.options.length; i++) {
				if(i > 0) list.value += ",";
				list.value += to.options[i].value;
			}
		}
	// if source is shorter
	} else {
		// if list is named after the source
		list = document.getElementById(from.name + "_list");
		// if list is named after the destination
		if(list == null) list = document.getElementById(to.name + "_list");
		// if list exists
		if(list != null) {
			// make sure name is named after the shorter of the two lists
			list.name = from.name + "_list";
			// reset list
			list.value = "";
			// populate list
			for(i = 0; i < from.options.length; i++) {
				if(i > 0) list.value += ",";
				list.value += from.options[i].value;
			}
		}
	}
	if(list.value == "") list.value = " ";
	//alert(list.name + " = (" + list.value + ")");
}

// move selected items from from to to
function addSelected(from, to) {
	// get selects by IDs
	from = document.getElementById(from);
	to = document.getElementById(to);
	// if selects exist
	if(from != null && to != null) {
		var i;
		for(i = from.options.length - 1; i >= 0; i--) {
			// if selected
			if(from.options[i].selected == true) {
				// move
				to.options[to.options.length] = from.options[i];
				// unselect since we do not want to put it in POST or GET
				to.options[to.options.length-1].selected = false;	
				// from.remove(i); // not necesary because the act of asigning option to another option removes item
				// from.options[i]; // not necesary, see above.
			}
		}
		updateList(from,to);
	}
}

function highlightMainButton(td) {
	 td.className="primary_button_hover";
	 var leftSide = td.previousSibling;
	 var i = 0;
	 for(i = 0; i < 5 && (!leftSide.nodeName || leftSide.nodeName.toLowerCase() != "td"); i++) {
	 	leftSide = leftSide.previousSibling;
	 }
	 var rightSide = td.nextSibling;
	 for(i = 0; i < 5 && (!rightSide.nodeName || rightSide.nodeName.toLowerCase() != "td"); i++) {
	 	rightSide = rightSide.nextSibling;
	 }
	 var leftImg = leftSide.childNodes;
	 for(i = 0; i < 5 && (!leftImg[i].nodeName || leftImg[i].nodeName.toLowerCase() != "img"); i++) {
	 }
	 if(leftImg[i].nodeName && leftImg[i].nodeName.toLowerCase() == "img") {
	 	leftImg = leftImg[i];
	 }
	 var rightImg = rightSide.childNodes;
	 for(i = 0; i < 5 && (!rightImg[i].nodeName || rightImg[i].nodeName.toLowerCase() != "img"); i++) {
	 }
	 if(rightImg[i].nodeName && rightImg[i].nodeName.toLowerCase() == "img") {
	 	rightImg = rightImg[i];
	 }
	 if(leftImg.src && leftImg.src.toString().indexOf("_divider") == -1) {
	 	leftImg.src = "/images/main_nav_button_left_hover.jpg";
	 } else if(
	 	leftImg.src
	 &&
	 	leftImg.src.toString().indexOf("_divider") != -1
	 	
	 ) {
	 	leftImg.src = "/images/main_nav_button_divider_left_hover.jpg";
	 }
	 
	 if(rightImg.src && rightImg.src.toString().indexOf("_divider") == -1) {
	 	rightImg.src = "/images/main_nav_button_right_hover.jpg";
	 } else if(
	 	rightImg.src
	 &&
	 	rightImg.src.toString().indexOf("_divider") != -1
	 ) {
	 	rightImg.src = "/images/main_nav_button_divider_right_hover.jpg";
	 }
	 
}

function unHighlightMainButton(td) {
	td.className="primary_button";
	var leftSide = td.previousSibling;
	 var i = 0;
	 for(i = 0; i < 5 && (!leftSide.nodeName || leftSide.nodeName.toLowerCase() != "td"); i++) {
	 	leftSide = leftSide.previousSibling;
	 }
	 var rightSide = td.nextSibling;
	 for(i = 0; i < 5 && (!rightSide.nodeName || rightSide.nodeName.toLowerCase() != "td"); i++) {
	 	rightSide = rightSide.nextSibling;
	 }
	 var leftImg = leftSide.childNodes;
	 for(i = 0; i < 5 && (!leftImg[i].nodeName || leftImg[i].nodeName.toLowerCase() != "img"); i++) {
	 }
	 if(leftImg[i].nodeName && leftImg[i].nodeName.toLowerCase() == "img") {
	 	leftImg = leftImg[i];
	 }
	 var rightImg = rightSide.childNodes;
	 for(i = 0; i < 5 && (!rightImg[i].nodeName || rightImg[i].nodeName.toLowerCase() != "img"); i++) {
	 }
	 if(rightImg[i].nodeName && rightImg[i].nodeName.toLowerCase() == "img") {
	 	rightImg = rightImg[i];
	 }
	 if(leftImg.src && leftImg.src.toString().indexOf("_divider") == -1) {
	 	leftImg.src = "/images/main_nav_button_left.jpg";
	 } else if(
	 	leftImg.src
	 &&
	 	leftImg.src.toString().indexOf("_divider") != -1
	 ) {
	 	leftImg.src = "/images/main_nav_button_divider.jpg";
	 }
	 
	 if(rightImg.src && rightImg.src.toString().indexOf("_divider") == -1) {
	 	rightImg.src = "/images/main_nav_button_right.jpg";
	 } else if(
	 	rightImg.src
	 &&
	 	rightImg.src.toString().indexOf("_divider") != -1
	 ) {
	 	rightImg.src = "/images/main_nav_button_divider.jpg";
	 }
}

function highlightSecondaryButton(td) {
	td.className="secondary_button_hover";
	 var leftSide = td.previousSibling;
	 var i = 0;
	 for(i = 0; i < 5 && (!leftSide.nodeName || leftSide.nodeName.toLowerCase() != "td"); i++) {
	 	leftSide = leftSide.previousSibling;
	 }
	 var rightSide = td.nextSibling;
	 for(i = 0; i < 5 && (!rightSide.nodeName || rightSide.nodeName.toLowerCase() != "td"); i++) {
	 	rightSide = rightSide.nextSibling;
	 }
	 var leftImg = leftSide.childNodes;
	 for(i = 0; i < 5 && (!leftImg[i].nodeName || leftImg[i].nodeName.toLowerCase() != "img"); i++) {
	 }
	 if(leftImg[i].nodeName && leftImg[i].nodeName.toLowerCase() == "img") {
	 	leftImg = leftImg[i];
	 }
	 var rightImg = rightSide.childNodes;
	 for(i = 0; i < 5 && (!rightImg[i].nodeName || rightImg[i].nodeName.toLowerCase() != "img"); i++) {
	 }
	 if(rightImg[i].nodeName && rightImg[i].nodeName.toLowerCase() == "img") {
	 	rightImg = rightImg[i];
	 }
	 if(leftImg.src && leftImg.src.toString().indexOf("_divider") == -1) {
	 	leftImg.src = "/images/secondary_button_left_hover.jpg";
	 } else if(
	 	leftImg.src
	 &&
	 	leftImg.src.toString().indexOf("_divider") != -1
	 	
	 ) {
	 	leftImg.src = "/images/secondary_button_divider_left_hover.jpg";
	 }
	 
	 if(rightImg.src && rightImg.src.toString().indexOf("_divider") == -1) {
	 	rightImg.src = "/images/secondary_button_right_hover.jpg";
	 } else if(
	 	rightImg.src
	 &&
	 	rightImg.src.toString().indexOf("_divider") != -1
	 ) {
	 	rightImg.src = "/images/secondary_button_divider_right_hover.jpg";
	 }
}

function unHighlightSecondaryButton(td) {
	td.className = "secondary_button";
	var leftSide = td.previousSibling;
	 var i = 0;
	 for(i = 0; i < 5 && (!leftSide.nodeName || leftSide.nodeName.toLowerCase() != "td"); i++) {
	 	leftSide = leftSide.previousSibling;
	 }
	 var rightSide = td.nextSibling;
	 for(i = 0; i < 5 && (!rightSide.nodeName || rightSide.nodeName.toLowerCase() != "td"); i++) {
	 	rightSide = rightSide.nextSibling;
	 }
	 var leftImg = leftSide.childNodes;
	 for(i = 0; i < 5 && (!leftImg[i].nodeName || leftImg[i].nodeName.toLowerCase() != "img"); i++) {
	 }
	 if(leftImg[i].nodeName && leftImg[i].nodeName.toLowerCase() == "img") {
	 	leftImg = leftImg[i];
	 }
	 var rightImg = rightSide.childNodes;
	 for(i = 0; i < 5 && (!rightImg[i].nodeName || rightImg[i].nodeName.toLowerCase() != "img"); i++) {
	 }
	 if(rightImg[i].nodeName && rightImg[i].nodeName.toLowerCase() == "img") {
	 	rightImg = rightImg[i];
	 }
	 if(leftImg.src && leftImg.src.toString().indexOf("_divider") == -1) {
	 	leftImg.src = "/images/secondary_button_left.jpg";
	 } else if(
	 	leftImg.src
	 &&
	 	leftImg.src.toString().indexOf("_divider") != -1
	 ) {
	 	leftImg.src = "/images/secondary_button_divider.jpg";
	 }
	 
	 if(rightImg.src && rightImg.src.toString().indexOf("_divider") == -1) {
	 	rightImg.src = "/images/secondary_button_right.jpg";
	 } else if(
	 	rightImg.src
	 &&
	 	rightImg.src.toString().indexOf("_divider") != -1
	 ) {
	 	rightImg.src = "/images/secondary_button_divider.jpg";
	 }
}

function updatePname() {
	var params = getPnameParams();
	if(params != null) {
		new net.ContentLoader(
			"/admin/article/update_articles.php" + params,
			displayPnameField
		);
	}
}

function getPnameParams() {
	var pname = document.getElementById("pname");
	var year = document.getElementById("article_year");
	var month = document.getElementById("article_month");
	var catid = document.getElementById("catid");
	if(
		pname != null
	&&
		year != null
	&&
		month != null
	&&
		catid != null
	) {
		var params = "?pname=" +	pname.value +
			(catid.value	!= "category"	? "&catid="			+ catid.value	: "") +
			(month.value	> 0				? "&article_month="	+ month.value	: "") +
			(year.value		!= "Year"		? "&article_year="	+ year.value	: "");
		return params;			
	} else {
		return null;
	}	
}

function displayPnameField() {
	// Was it a positive response?
	if(this.req.status == 200) {
		// get current select
		var pname = document.getElementById("pname");
		// does it exist?
		if(pname != null) {
			// create a new range in which to create the new select
			var select = document.createRange();
			// set the starting point for the range
			select.setStartBefore(pname);
			// replace the range with an element generated by the response
			select = select.createContextualFragment(this.req.responseText);
			// replace current select with new select
			pname.parentNode.replaceChild(select,pname);
			// update the catid select
			updateCatid();
		}
	}
}

function updateCatid() {
	var params = getPnameParams();
	if(params != null) {
		new net.ContentLoader(
			"/admin/article/update_categories.php" + params,
			displayCatidField
		);
	}
}

function displayCatidField() {
	// Was it a positive response?
	if(this.req.status == 200) {
		// get current select
		var catid = document.getElementById("catid");
		// does it exist?
		if(catid != null) {
			// create a new range in which to create the new select
			var select = document.createRange();
			// set the starting point for the range
			select.setStartBefore(catid);
			// replace the range with an element generated by the response
			select = select.createContextualFragment(this.req.responseText);
			// replace current select with new select
			catid.parentNode.replaceChild(select,catid);
		}
	}
}

var link_tabs =
	new Array(
		"supplement_facts_link",
		"learn_more_link",
		"review_link",
		"return_policy_link",
		"why_shop_with_us_link",
		"compare_link"
	);

window.addOnLoadListener(checkForAjax);

var ajax_status = -1;

function checkForAjax() {
	new net.ContentLoader("/ajax/test.php",replaceLinks);
}

var active_link = "";
var previous_link = "";
var cannon_name = "";
function replaceLinks() {
	if(ajax_status == 200 || this.req.status == 200) {
		ajax_status == 200;
		var learn_more = document.getElementById("learn_more_link");
		var supplement_facts = document.getElementById("supplement_facts_link");
		var reviews = document.getElementById("review_link");
		var return_policy = document.getElementById("return_policy_link");
		var why_shop = document.getElementById("why_shop_with_us_link");
		var compare = document.getElementById("compare_link");
		if(supplement_facts != null && supplement_facts.href) {
			supplement_facts.href = getUrl(supplement_facts);
		}
		if(learn_more != null && learn_more.href) {
			learn_more.href = getUrl(learn_more);
		}
		if(reviews != null && reviews.href) {
			reviews.href = getUrl(reviews);
		}
		if(return_policy != null && return_policy.href) {
			return_policy.href = getUrl(return_policy);
		}
		if(why_shop != null && why_shop.href) {
			why_shop.href = getUrl(why_shop);
		}
		if(compare != null && compare.href) {
			compare.href = getUrl(compare);
		}
	}
}

function getUrl(element) {
	var url = null;
	if(element.id == "learn_more_link") {
		url = "javascript:loadLink('/ajax/learn_more.php?article=" +
			element.title.replace("/learn-more/","") + "&page=1" +
			"');";
	} else if(element.id == "supplement_facts_link") {
		url = "javascript:loadLink('/ajax/nutritional_info.php?cannon_name=" +
			element.title +
			"');";
		cannon_name = element.title;
	} else if(element.id == "review_link") {
		url =
			"javascript:loadLink('/ajax/reviews.php?cannon_name=" +
			element.title + "&ajax=true" +
			"');";
	} else if(element.id == "return_policy_link") {
		url =
			"javascript:loadLink('/ajax/show.php?article=5-star-guarantee&page=1');";
	} else if(element.id == "why_shop_with_us_link") {
		url =
			"javascript:loadLink('/ajax/show.php?article=why-shop-with-us&page=1');";
	} else if(element.id == "compare_link") {
		url =
			"javascript:loadLink('/ajax/compare.php?cannon_name=" +
			element.title + "&ajax=true');";
	}
	return url;
}


function getLabel(element) {
	var label = null;
	if(element.id == "learn_more_link") {
		label = "Learn More";
	} else if(element.id == "supplement_facts_link") {
		label = "Supplement Facts";
	} else if(element.id == "review_link") {
		label = "Reviews";
	} else if(element.id == "return_policy_link") {
		label = "Return Policy";
	} else if(element.id == "why_shop_with_us_link") {
		label = "Why Shop With Us";
	} else if(element.id == "compare_link") {
		label = "Compare";
	}
	return label;
}

var review_link_url = null;

function loadLink(url) {
	previous_link = active_link;
	if(url.indexOf("nutritional_info.php") != -1) {
		active_link = "supplement_facts_link";
	} else if(url.indexOf("learn_more.php") != -1) {
		active_link = "learn_more_link";
	} else if(url.indexOf("reviews.php") != -1) {
		review_link_url = url;
		active_link = "review_link";
	} else if(url.indexOf("5-star") != -1) {
		active_link = "return_policy_link";
	} else if(url.indexOf("why-shop-with-us") != -1) {
		active_link = "why_shop_with_us_link";
	} else if(url.indexOf("compare") != -1) {
		active_link = "compare_link";
	}
	var details = document.getElementById("details");
	if(details != null) details.innerHTML = "<h1>Loading</h1>";
	//setTimeout('new net.ContentLoader("' + url + '",displayContent);',50);
	new net.ContentLoader(url,displayContent);
}
var debug_msg = "";
var review_f_name = "";
var review_location="";
function displayContent() {
	if(this.req.status == 200) {
		var details = document.getElementById("details");
		if(details != null) {
			details.innerHTML =
				debug_msg +
				this.req.responseText
					.replace("View our Selection of Products","")
					.replace("View Our Selection of Products","");
			if(active_link == "supplement_facts_link"){
				details.style.backgroundColor = "#003399";	
			} else {
				details.style.backgroundColor = "white";	
				details.style.border = "1px solid black";		
				if(active_link == "review_link" && review_f_name == "" && review_location == "") {
					review_f_name = document.getElementById("first_name");
					review_location=document.getElementById("location");
					if(review_f_name != null && review_location != null) {
						review_f_name = review_f_name.value;
						review_location=review_location.value;
						updatePreview(review_f_name);
					} else {
						review_f_name = "";
						review_location="";
					}
				}
			}
		}
		// now that area is loaded, quickly swap activity state of old and current
		var i = 0;
		var active_anchor;
		if(active_link == "" && previous_link == "") {
			for(i = 0; i < link_tabs.length; i++) {
				// if we didn't just set it above
				if(link_tabs[i] != active_link && link_tabs[i] != previous_link) {
					// create an element object of the link
					active_anchor=document.getElementById(link_tabs[i]);
					// if successfull
					if(active_anchor != null) {
						// set inactive.
						if(
							active_anchor.className=="active"
						||
							active_anchor.className=="active_tab"
						) {
							active_link == link_tabs[i];
							break;
						} else {
							previous_link = link_tabs[i];
						}
					}
				}
			}
		}
		active_anchor = document.getElementById(active_link);
		var inactive_anchor=document.getElementById(previous_link);
		if(active_link != previous_link) {
			replaceTabWithActiveTab(active_anchor);
			replaceTabWithInactiveTab(inactive_anchor);
		}
		// now that old an current or set to the correct states, set all others to inactive incase there was a glitch.
	
		// foreach tab
		for(i = 0; i < link_tabs.length; i++) {
			// if we didn't just set it above
			if(link_tabs[i] != active_link && link_tabs[i] != previous_link) {
				// create an element object of the link
				inactive_anchor=document.getElementById(link_tabs[i]);
				// if successfull
				if(inactive_anchor != null) {
					// set inactive.
					replaceTabWithInactiveTab(inactive_anchor);
				}
			}
		}
	}
}

function updatePreview(nickname) {
	if(nickname == "") nickname = review_f_name;
	var preview = document.getElementById("preview");
	if(preview != null)
		preview.innerHTML =
			"<b>Your review will be signed:</b>&nbsp;&nbsp;" + nickname +
			" from " + review_location +
			"<input type='hidden' name='location' id='location' value='" +
			review_location + "'>";
}

function debugMessage(msg) {
	debug_msg += msg + "<br>";
	var details = document.getElementById("details");
	if(details != null) {
		details.innerHTML = msg + "<br>" + details.innerHTML;
	}
}

function replaceTabWithActiveTab(element) {
	if(element != null) {
		if(isString(element)) {
			element = document.getElementById(element);
		}
		if(!document.createRange) {
			element.outerHTML = "<a title='" + element.title +
				"' id='" + element.id +
				"' class='active_tab'><span class='active_tab'>" +
				getLabel(element) + "</span></a>";
		} else {
			var new_element = document.createRange();
			new_element.setStartBefore(element);
			var fragment = "<a title='" + element.title +
					"' id='" + element.id +
					"' class='active_tab'><span class='active_tab'>" +
					getLabel(element) + "</span></a>";
			new_element = new_element.createContextualFragment(fragment);
			element.parentNode.replaceChild(new_element,element);
		}
	}
}

function isString(obj) {
	if(obj == null) return false;
	var type = typeof obj;
	if (type == 'object') {
		try {
			if (obj.getDate) return false;
		} catch(notDate) {
		}
		try {
			if (obj.split) return true;
		} catch(notString) {
		}
	}
	return false;
}
function replaceTabWithInactiveTab(element) {
	if(element != null) {
		if(isString(element)) {
			element = document.getElementById(element);
		}
		var url = null;
		var id = null;
		if(!document.createRange) {
			url = getUrl(element);
			id = element.id;
			element.outerHTML = "<a title='" + element.title +
					"' id='" + element.id +
					"' class='tab'><span class='tab'>" + getLabel(element) + "</span></a>";
			element = document.getElementById(id);
			element.href = url;	
		} else {
			var new_element = document.createRange();
			new_element.setStartBefore(element);
			new_element =
				new_element.createContextualFragment(
					"<a href='' id='tempID' class='tab'><span class='tab'>" + getLabel(element) + "</span></a>"
				);			
			id = element.id;
			title = element.title;
			element.parentNode.replaceChild(new_element,element);
			element = document.getElementById("tempID");
			element.id = id;
			element.title = title;
			element.href = getUrl(element);
		}
	}
}

function ajaxLogin() {
	var uname = document.getElementById("uname");
	var pass = document.getElementById("pass");
	if(uname != null && pass != null) {
		new net.ContentLoader(
			"/user.php?op=login&uname=" + uname.value +
			"&pass=" + pass.value + "&ajax=true",
			checkLogin
		);
	}
}
var login_attempts = 0;
function checkLogin() {
	if(this.req.status == 200) {
		if(this.req.responseText == "Success") {
			login_attempts = 0;
			loadLink(review_link_url);
		} else {
			login_attempts++;
			var err_message = document.getElementById("err_message");
			err_message.innerHTML =
				this.req.responseText +
				(login_attempts > 1 ? " " + login_attempts + " Attempts" : "");
		}
	}
}

function submitReview() {
	var rating_1 = document.getElementsByName("rating_1");
	var rating_2 = document.getElementsByName("rating_2");
	var rating_3 = document.getElementsByName("rating_3");
	var summary = document.getElementById("title");
	var review = document.getElementById("review");
	var nickname = document.getElementById("nickname");
	if(
		rating_1 != null
	&&
		rating_2 != null
	&&
		rating_3 != null
	&&
		summary != null
	&&
		review != null
	&&
		nickname != null
	) {
		var i = 0;
		for(i = 0; i < rating_1.length; i++) {
			if(rating_1.length == 1) {
				rating_1 = rating_1[i];
				break;
			} else if(rating_1[i].checked == true) {
				rating_1 = rating_1[i];
				break;
			}
		}
		for(i = 0; i < rating_2.length; i++) {
			if(rating_2.length == 1) {
				rating_2 = rating_2[i];
				break;
			} else if(rating_2[i].checked == true) {
				rating_2 = rating_2[i];
				break;
			}
		}
		for(i = 0; i < rating_3.length; i++) {
			if(rating_3.length == 1) {
				rating_3 = rating_3[i];
				break;
			} else if(rating_3[i].checked == true) {
				rating_3 = rating_3[i];
				break;
			}
		}
		new net.ContentLoader(
			"/ajax/submit_review.php?rating_1=" +
			rating_1.value +
			"&rating_2=" + rating_2.value +
			"&rating_3=" + rating_3.value +
			"&title=" + summary.value +
			"&cannon_name=" + cannon_name +
			"&review=" + review.value + "&nickname=" + nickname.value,
			feedback
		);
	}
}

function feedback() {
	if(this.req.status == 200) {
		// -1 = failure
		// cannon_name = success
		if(
			isNaN(this.req.responseText)
		&&
			this.req.responseText.indexOf("Update Count") == -1
		) {		
			var review_link = document.getElementById("review_link");	
			var url = getUrl(review_link);
			url = url.substring(url.indexOf("'")+1);
			url = url.substring(0,url.indexOf("'"));
			loadLink(url);
		} else if(this.req.responseText.indexOf("Update Count") != -1) {
			preview.innerHTML =
				"<span style='color: red'>" +
				parseError(this.req.responseText) +
				"</span>";
		} else {
			var preview = document.getElementById("preview");
			if(preview != null) {
				preview.innerHTML =
					"<span style='color: red'>" +
					parseError(this.req.responseText) +
					"</span>";
			}
		}
		window.location.href="#tabs";
	}
}

function parseError(msg) {
	if(msg.indexOf("Duplicate entry") != -1) {
		return "Sorry, each customer may only review each product one time.  Your review was discarded.";
	}
	return msg;
}

function previewReview() {
	var rating_1 = document.getElementsByName("rating_1");
	var rating_2 = document.getElementsByName("rating_2");
	var rating_3 = document.getElementsByName("rating_3");
	var summary = document.getElementById("title");
	var review = document.getElementById("review");
	var nickname=document.getElementById("nickname");	
	var location=document.getElementById("location");	
	if(
		rating_1 != null
	&&
		rating_2 != null
	&&
		rating_3 != null
	&&
		summary != null
	&&
		review != null
	&&
		nickname != null
	&&
		location != null
	) {
		var i = 0;
		for(i = 0; i < rating_1.length; i++) {
			if(rating_1[i].checked == true) {
				rating_1 = rating_1[i];
				break;
			}
		}
		for(i = 0; i < rating_2.length; i++) {
			if(rating_2[i].checked == true) {
				rating_2 = rating_2[i];
				break;
			}
		}
		for(i = 0; i < rating_3.length; i++) {
			if(rating_3[i].checked == true) {
				rating_3 = rating_3[i];
				break;
			}
		}
		var callString = "/ajax/preview_review.php?rating_1=" +
			rating_1.value +
			"&rating_2=" + rating_2.value +
			"&rating_3=" + rating_3.value +
			"&title=" + summary.value +
			"&cannon_name=" + cannon_name +
			"&review=" + review.value +
			"&nickname=" + nickname.value +
			"&location=" + location.value;
		
		new net.ContentLoader(
			callString,
			displayPreview
		);
	}
}


function editReview() {
	var rating_1 = document.getElementById("rating_1");
	var rating_2 = document.getElementById("rating_2");
	var rating_3 = document.getElementById("rating_3");
	var summary = document.getElementById("title");
	var review = document.getElementById("review");
	var nickname=document.getElementById("nickname");	
	var location=document.getElementById("location");	
	var review_link = document.getElementById("review_link");
	if(
		review_link != null
	&&
		rating_1 != null
	&&
		rating_2 != null
	&&
		rating_3 != null
	&&
		summary != null
	&&
		review != null
	&&
		nickname != null
	&&
		location != null
	) {
		var callString = getUrl(review_link);
		callString = callString.substring(callString.indexOf("'")+1);
		callString = callString.substring(0,callString.indexOf("'"));
		callString += "&rating_1=" +
			rating_1.value +
			"&rating_2=" + rating_2.value +
			"&rating_3=" + rating_3.value +
			"&title=" + summary.value +
			"&cannon_name=" + cannon_name +
			"&review=" + review.value +
			"&nickname=" + nickname.value +
			"&location=" + location.value + "&review_form=true";
		//debugMessage(callString);
		new net.ContentLoader(
			callString,
			displayPreview
		);
	} else {
		debugMessage("review_link = " + review_link);
		debugMessage("rating_1 = " + rating_1);
		debugMessage("rating_2 = " + rating_2);
		debugMessage("rating_3 = " + rating_3);
		debugMessage("summary = " + summary);
		debugMessage("review = " + review);
		debugMessage("nickname = " + nickname);
		debugMessage("location = " + location);		
	}
}

function displayPreview() {
	if(this.req.status == 200) {
		var details = document.getElementById("details");
		if(details != null) {
			details.innerHTML = debug_msg + this.req.responseText;
		}
	}
}

function logYes(product_id,review_id) {
	new net.ContentLoader(
		"/ajax/log_helpful.php?helpful=true&product_id=" +
		product_id + "&review_id=" + review_id,
		hideOpinionButtons
	);
}

function logNo(product_id,review_id) {
	new net.ContentLoader(
		"/ajax/log_helpful.php?helpful=false&product_id=" +
		product_id + "&review_id=" + review_id,
		hideOpinionButtons
	);
}

function hideOpinionButtons() {
	if(this.req.status == 200) {
		var id = this.req.responseText;
		var yes = document.getElementById("yes" + id);
		var no = document.getElementById("no" + id);
		if(yes != null) yes.parentNode.innerHTML = "Thank You!";
		else if(no != null) no.parentNode.innerHTML = "Thank You!";
	}
}

function compare(theButton) {
	// where to put the fragment
	var details = document.getElementById("details");
	// compares check boxes
	var compares = document.getElementsByName("compare[]");
	var compare_buttons = document.getElementsByName("compare_buttons");
	// url to load
	var url = "";
	// which file to load
	var destination = "";
	
	// see how many were checked
	var i = 0,checked = 0;
	
	// Compare Now button, set the checkbox immediately before it checked
	if(theButton && compare_buttons != null && compare_buttons.length > 0) {
		for(i = 0; i < compare_buttons.length; i++) {
			if(compare_buttons[i] == theButton) {
				compares[i].checked = true;
				break;
			}
		}
	}
	// if no details area
	if(details == null) {
		// load whole page
		var destination = '/compare.php?';
		url = destination;
	// otherwise
	} else {
		// load fragment
		var destination = "/ajax/compare.php?";
		url = destination;		
	}
	
	// if there are checkboxes
	if(compares != null && compares.length > 0) {
		// for each check box
		for(i = 0; i < compares.length; i++) {
			// if true
			if(compares[i].checked == true) {
				// if url has parameters, add parameter separator
				if(url != destination) url += "&";
				// add product for check box
				url += "compare[]=" + compares[i].value;
				// increment product count
				checked++;
				if(checked == 4) break;
			}
		}
		// if less than two products
		if(checked < 2 && theButton != null) {
			// display instructions
			alert(
				"Make sure two or more 'Compare' boxes are checked (for the products you wish to compare), " +
				" then click 'Compare Now'."
			);
		// otherwise
		} else if(checked == 4 || theButton != null) {
			// if page is from the ajax dir, load fragment
			if(url.indexOf("/ajax/") == 0)
				loadLink(url);
			// otherwise, load page.
			else
				window.location.href = url + "&fragment=false";
		}
	}
}

function getButton(name,label,href,color,type) {		
	if(!color) color = "purple";	
	var button = document.createElement("table");		
	button.className = "button";
	button.cellSpacing = "0";
	button.cellPadding = "0";
	button.border = "0";
	var tbody = document.createElement("tbody");
	var tr = document.createElement("tr");
	var left = document.createElement("td");
	left.className = "button_left";
	var leftImg = document.createElement("img");
	leftImg.src = '/images/buttons/standard_' + color + '_left_side.gif';
	left.appendChild(leftImg);
	var middle = document.createElement("td");
	middle.className = "button_" + color;			
	if(href != "") {
		
		var a = document.createElement("a");
		a.href = href;
		a.className = "linkButton_" + color;
		a.innerHTML = label;
		middle.appendChild(a);
	} else {
		if(!type || (type.toLowerCase() != "submit" && type.toLowerCase() != "button")) type = "submit";
		var input = document.createElement("input");
		input.className = "inputButton_" + color;
		input.type = type;
		input.name = name;
		input.value = label;
		middle.appendChild(input);
	}
	
	var right = document.createElement("td");
	right.className = "button_right";
	var rightImg = document.createElement("img");
	rightImg.src = '/images/buttons/standard_' + color + '_right_side.gif';
	right.appendChild(rightImg);
	tr.appendChild(left);
	tr.appendChild(middle);
	tr.appendChild(right);
	tbody.appendChild(tr);
	button.appendChild(tbody);
	return button;
}