
if (! ("console" in window) || !("firebug" in console)) {
	var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
	window.console = {};
	for (var i = 0; i <names.length; ++i) window.console[names[i]] = function() {};
}

var T_MINUTE = 60;
var T_HOUR = 3600;
var T_DAY = 86400;
var T_WEEK = 604800;
// special case; month and cannot be consistently defined as periods
var T_MONTH = -1;
var T_YEAR = -12;

function grep (needle, haystack) {
	return $.inArray(needle, haystack);
}

// Initialize upon load to let all browsers establish content objects
function spawnActivity (personID) {
	window.open('activity.php?style=dialogue&personID=' + Number(personID), 'activity' + Number(personID), 'location=0,directories=0,height=400,width=600,menubar=1,resizable=1,scrollbars=1');
}

function spawnOrderHistory (personID) {
	window.open('orderHistory.php?style=dialogue&personID=' + Number(personID), 'orderHistory' + Number(personID), 'location=0,directories=0,height=400,width=600,menubar=1,resizable=1,scrollbars=1');
}

function spawnOrder (orderID) {
	window.open('orderView.php?style=dialogue&orderID=' + Number(orderID), 'orderView' + Number(orderID), 'location=0,directories=0,height=600,width=1100,menubar=1,resizable=1,scrollbars=1');
}

function spawnRouteMap () {
	window.open('routeMap.php', 'routeMap', 'location=0,directories=0,height=600,width=800,menubar=1,resizable=1,scrollbars=1');
}

function newOrder (personID, orderType) {
	window.open('order.php?customerID=' + Number(personID) + '&orderType=' + orderType, 'order' + Number(personID), 'location=0,directories=0,height=600,width=1100,menubar=1,resizable=1,scrollbars=1');
}

var xmlHttp;

function getXmlHttpObject () {
	var xmlHttp;
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	} catch (e) {
		// Internet Explorer
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				return false;
			}
		}
	}
	return xmlHttp;
}

function getParentRow (el) {
   while (el.parentNode && 'tr' != el.nodeName.toLowerCase()) {
     el = el.parentNode;
   }
   return el;
}

function moveRow (el, x) {
	el = getParentRow(el);
   var t = el.parentNode;
   var j = el.sectionRowIndex;
   var i = (j + Number(x)) % t.rows.length;
   if ((i - j) % 2) {
   	if (i > j) {
   		var rowStart = j;
   		var rowEnd = i;
   	} else {
   		var rowStart = i;
   		var rowEnd = j;
   	}
   	for (i2 = rowStart; i2 <= rowEnd; i2 ++) {
   		swapRowColour(t.rows[i2]);
   	}
	}
   t.replaceChild(t.removeChild(el), t.insertRow(i));
}

function deleteRow (el) {
	el = getParentRow (el);
   var t = el.parentNode;
   t.removeChild(el);
}

function clearFormFields (formID) {
	editForm = document.getElementById(formID);
	$(editForm.elements).each(function () {
		$(this).removeClass('errorField');
	});
}

function submitComment () {
	commentFormObj = document.getElementById('commentForm');
	commentStatusObj = document.getElementById('commentStatus');
	if (!commentFormObj.nature.selectedIndex) {
		commentStatusObj.innerHTML = 'Please choose whether this is a service- or technical-related comment.';
		commentFormObj.nature.className = 'invalid';
		commentStatusObj.className = 'notice';
		commentStatusObj.style.display = 'inline';
		return false;
	}
	xmlHttp = getXmlHttpObject ();
	xmlHttp.onreadystatechange = confirmComment;
	xmlHttp.open('GET', 'submitComment.php?nature=' + commentFormObj.nature.options[commentFormObj.nature.selectedIndex].value + '&personID=' + commentFormObj.personID.value + '&page=' + commentFormObj.page.value + '&comments=' + encodeURIComponent(commentFormObj.comments.value), true);
	xmlHttp.send(null);
	commentStatusObj.innerHTML = 'Sending comment...';
	commentStatusObj.className = null;
	commentFormObj.nature.className = null;
	commentStatusObj.style.display = 'inline';
}

function confirmComment () {
	if (xmlHttp.readyState == 4) {
		result = xmlHttp.responseText;
		commentStatusObj = document.getElementById('commentStatus');
		if (result == '1') {
			commentStatusObj.innerHTML = 'Thank you for your comment!';
			commentStatusObj.className = 'okay';
		} else {
			commentStatusObj.innerHTML = 'We have disabled comments for now.';
			commentStatusObj.className = 'notice';
		}
	}
}

function swapRowColour (rowObj) {
	if (rowObj.className.substr(0, 3) == 'odd') rowObj.className = 'even ' + rowObj.className.substr(4);
	else if (rowObj.className.substr(0, 4) == 'even') rowObj.className = 'odd ' + rowObj.className.substr(5);
}

function toggleDiv (divID, statusBox) {
	thisDiv = document.getElementById(divID);
	if (typeof statusBox == 'object') {
		if (statusBox.length == 3) {
			try { thisStatus = document.getElementById(statusBox[0]); }
			catch (err) { thisStatus = false; }
		}
	}
	if (thisDiv.style.display == 'none') {
		thisDiv.style.display = 'block';
		if (thisStatus) thisStatus.innerHTML = statusBox[2];
	} else {
		thisDiv.style.display = 'none';
		if (thisStatus) thisStatus.innerHTML = statusBox[1];
	}
}

function addAddress (addressData, fromNewAddress) {
	fromNewAddress = typeof(fromNewAddress) != 'undefined' ? fromNewAddress : false;
	lastNewAddyID = Number($('#newAddyQty').val());
	newAddy = false;
	if (addressData == null) {
		newAddy = true;
		newAddyID = lastNewAddyID + 1;
		addressData = {
			'addressID': newAddyID,
			'addressType': 0,
			'careOf': '',
			'address1': '',
			'address2': '',
			'city': '',
			'prov': '',
			'postalCode': '',
			'phone': '',
			'directions': ''
		};
	} else if (fromNewAddress) newAddy = true;
	if (addressData.errorFields) errorFields = addressData.errorFields;
	else errorFields = new Array ();
	thisToken = (newAddy ? 'new' : '') + 'addresses[' + addressData.addressID + ']';
	thisAddy = $('<ul>');
	thisAddy.addClass('form');
	thisAddy.attr('id', thisToken);
	// address type
	addyType = $('<li>');
	addyType.html('<label>Address type</label> <input type="checkbox" name="' + thisToken + '[ship]"' + (addressData.addressType & 1 ? ' checked="checked"' : '') + '> <label for="' + thisToken + '[ship]" class="noform">shipping</label> &nbsp; <input type="checkbox" name="' + thisToken + '[mail]"' + (addressData.addressType & 2 ? ' checked="checked"' : '') + '> <label for="' + thisToken + '[mail]" class="noform">mailing</label> &nbsp; <input type="checkbox" name="' + thisToken + '[pay]"' + (addressData.addressType & 4 ? ' checked="checked"' : '') + '> <label for="' + thisToken + '[pay]" class="noform">payment drop-off</label>');
	if ($.inArray('addressType', errorFields) > -1) addyType.addClass('errorField');
	thisAddy.append(addyType);
	// care of
	careOf = $('<li>');
	careOf.html('<label for="' + thisToken + '[careOf]">Care of</label> <input type="text" name="' + thisToken + '[careOf]" value="' + addressData.careOf + '"/>');
	if ($.inArray('careOf', errorFields) > -1) careOf.addClass('errorField');
	thisAddy.append(careOf);
	// address
	addy1 = $('<li>');
	addy1.html('<label for="' + thisToken + '[address1]">Address</label> <input type="text" name="' + thisToken + '[address1]" value="' + addressData.address1 + '"/>');
	if ($.inArray('address1', errorFields) > -1) addy1.addClass('errorField');
	thisAddy.append(addy1);
	addy2 = $('<li>');
	addy2.html('<label for="' + thisToken + '[address2]">(line 2)</label> <input type="text" name="' + thisToken + '[address2]" value="' + addressData.address2 + '"/>');
	if ($.inArray('address2', errorFields) > -1) addy1.addClass('errorField');
	thisAddy.append(addy2);
	// city
	city = $('<li>');
	city.html('<label for="' + thisToken + '[city]">City</label> <span class="widget"><input type="text" name="' + thisToken + '[city]" value="' + addressData.city + '"/>, <input type="text" name="' + thisToken + '[prov]" value="' + (addressData.prov ? addressData.prov : 'BC') + '" size="2" maxlength="4"' + ($.inArray('prov', errorFields) > -1 ? ' class="errorField"' : '') + '/></span>');
	if ($.inArray('city', errorFields) > -1) city.addClass('errorField');
	thisAddy.append(city);
	// postal code
	postalCode = $('<li>');
	postalCode.html('<label for="' + thisToken + '[postalCode]">Postal code</label> <input type="text" name="' + thisToken + '[postalCode]" value="' + addressData.postalCode + '"/>');
	if ($.inArray('postalCode', errorFields) > -1) postalCode.addClass('errorField');
	thisAddy.append(postalCode);
	// phone
	phone = $('<li>');
	phone.html('<label for="' + thisToken + '[phone]">Phone</label> <input type="text" name="' + thisToken + '[phone]" value="' + addressData.phone + '"/>');
	if ($.inArray('phone', errorFields) > -1) phone.addClass('errorField');
	thisAddy.append(phone);
	// directions
	directions = $('<li>');
	directions.html('<label for="' + thisToken + '[directions]">Directions</label> <textarea name="' + thisToken + '[directions]">' + addressData.directions + '</textarea>');
	if ($.inArray('directions', errorFields) > -1) directions.addClass('errorField');
	thisAddy.append(directions);
	// delete
	del = $('<li>');
	del.html('<label for="' + thisToken + '[del]">Delete</label> <input type="checkbox" name="' + thisToken + '[del]" value="1"/>');
	$('input', del).change(function () {
		if ($(this).is(':checked')) $('#' + thisToken).addClass('inactive');
		else $('#' + thisToken).removeClass('inactive');
	});
	thisAddy.append(del);
	$('#addresses').append(thisAddy);
	if (newAddy & !fromNewAddress) $('#newAddyQty').val(newAddyID);
}
