function initProductLists() {

	initProductLists.loadDetail = function () {
		var height = (NG.ua.isApp('Safari') ? 500 : 450);
		NG.popup('product.html?productid='+this.id, {'name':'product'+this.id,'width':560,'height':height,'dependant':true,'location':'yes','arg':this});
	}

	initProductLists.saveSucceeded = function () {
		alert('Save succeeded');
		this.actualQty = this.qtyElement.value*1;
		this.changeQty();
		alert('Saved quantity of '+this.qtyElement.value+' for product #'+this.id);
	}

	initProductLists.saveFailed = function () {
		alert('Save failed');
	}

	initProductLists.saveQty = function (e) {
		window.location = '/addtocart.php?'+escape('add['+this.id+']')+'=1&'+escape('qty['+this.id+']')+'='+escape(this.qtyElement.value)+'&returnurl='+escape(window.location);
/*		if (this.qtyElement.value*1 != this.actualQty*1) {
			var img = new Image();
			NG.addTrigger(img, 'error', [this, 'saveFailed']);
			NG.addTrigger(img, 'load', [this, 'saveSucceeded']);
			img.src = '/addtocart.php?productid='+this.id+'&qty='+this.qtyElement.value;
		}
		NG.preventDefault(e);*/
	}

	initProductLists.changeQty = function (qty) {
		if (arguments.length > 0 && isInt(arguments[0])) this.qtyElement.value = qty;
		if (this.qtyElement.value*1 != this.actualQty*1) {
			this.addElement.className = 'add add-unsaved';
		} else if (this.actualQty > 0) {
			this.addElement.className = 'add add-saved';
		} else {
			this.addElement.className = 'add';
		}
	}

	var i,j,k,divs,subdivs,product,inputs,frms = document.getElementsByTagName('form');
	for (i = 0; i < frms.length; i++) {
		if (/(^| )product-list( |$)/.test(frms[i].className)) {
			frms[i].productList = {};
			divs = frms[i].getElementsByTagName('div');
			for (j = 0; j < divs.length; j++) {
				if (/(^| )product-thumb( |$)/.test(divs[j].className)) {
					inputs = divs[j].getElementsByTagName('input');
					if (inputs.length == 2) {
						product = {};
						product.loadDetail = initProductLists.loadDetail;
						product.saveQty = initProductLists.saveQty;
						product.saveSucceeded = initProductLists.saveSucceeded;
						product.saveFailed = initProductLists.saveFailed;
						product.changeQty = initProductLists.changeQty;
						for (k = 0; k < inputs.length; k++) {
							if (/(^| )qty( |$)/.test(inputs[k].className)) product.qtyElement = inputs[k];
							else if (/(^| )add( |$)/.test(inputs[k].className)) product.addElement = inputs[k];
						}
						product.id = product.qtyElement.name.substr(4, product.qtyElement.name.length-5);
						product.actualQty = product.qtyElement.value*1;
						if (product.actualQty == 0) {
							product.qtyElement.value = product.qtyElement.defaultValue = 1;
						} else {
							product.addElement.className = 'add add-saved';
						}
						NG.addTrigger(product.qtyElement, 'keypress', [product, 'changeQty'], 250);
						NG.addTrigger(product.qtyElement, 'change', [product, 'changeQty']);
						NG.addTrigger(product.addElement, 'click', [product, 'saveQty']);
						subdivs = divs[j].getElementsByTagName('div');
						for (k = 0; k < subdivs.length; k++) {
							if (/(^| )(caption|thumb)( |$)/.test(subdivs[k].className)) {
								NG.addTrigger(subdivs[k], 'click', [product, 'loadDetail']);
							}
						}
						frms[i].productList[product['productId']] = product;
					}
				};
			}
		}
	}
}

function finishedFlash() {
	var flash = document.getElementById('trans-flash');
	var body = document.getElementById('content-body');
	if (flash && body) {
		if (NG.ua.isEng('MACIE')) {
			// MAC IE won't allow removal of flash, and then crashes at the next page load
			// so we just sweep the trans-flash container under the carpet, the movie should
			// also have loop=false (see beginFlash)
			flash.style.display = 'none';
			// For some reason style.(display,top,left) don't change unless we also change
			// something like .border
			flash.style.border = 'none';
		} else {
			flash.parentNode.removeChild(flash);
		}
		body.style.visibility = 'visible';
	}
}

function beginFlash(url) {
	var w = arguments.length >= 3 ? arguments[1] : 590;
	var h = arguments.length >= 3 ? arguments[2] : 400;
	var body = document.getElementById('content-body');
	if (body) {
		body.style.visibility = 'hidden';
		var div = document.createElement('div');
		div.id = 'trans-flash';
		div.style.position = 'absolute';
		div.style.left = '180px';
		div.style.top = '170px';
		div.innerHTML = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="'+w+'" height="'+h+'" align="middle"><param name="allowScriptAccess" value="sameDomain" /><param name="movie" value="'+url+'"><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="loop" value="false" /><embed src="'+url+'" menu="false" quality="best" bgcolor="#ffffff" loop="false" width="'+w+'" height="'+h+'" name="affirmations_trans_poster" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>';
		body.parentNode.insertBefore(div, body);
	}
}

function centerNodeOnScreen(id) {
	var height = 0; var width = 0;
	var node = document.getElementById(id);
	if (NG.ua.isEng('GECKO') || NG.ua.isEng('KHTML')) {
		height = window.innerHeight;
		width = window.innerWidth;
	} else if (NG.ua.isEng('MSIE') || NG.ua.isEng('MACIE')) {
		height = document.body.clientHeight;
		width = document.body.clientWidth;
	}
	if (node && height > 0 && node.offsetHeight > 0 && width > 0 && node.offsetWidth > 0) {
		node.style.position = 'absolute';
		node.style.top = Math.max(0,Math.round((height-node.offsetHeight)/2))+'px';
		node.style.left = Math.max(0,Math.round((width-node.offsetWidth)/2))+'px';
	}
}

function checkBrowserCapable() {
	if (!isBrowserCapable() && location.pathname !== '/incompatible.html') {
		location.href = '/incompatible.html';
	}
}

function isBrowserCapable() {
	return (NG.ua.isEng('MSIE', 5.5, '>=') || NG.ua.isEng('GECKO') || NG.ua.isEng('MACIE', 5.2, '>=') || NG.ua.isEng('KHTML'));
}

function showProductImage(imagenumber) {
	var imgs = document.getElementById('product-imgs').getElementsByTagName('div');
	for (var i = 0; i < imgs.length; i++) {
		imgs[i].style.display = (i+1 == imagenumber ? 'block' : 'none');
	}
}

function setShippingEvent() {
	var frm = document.forms[0];
	var ele = frm.elements;
	for (var i = 0; i < ele.length; i++) {
		if (ele[i].name.search(/billingaddress/) > -1) {
			NG.addTrigger(ele[i], 'onchange', setShippingValue, 0, ele[i]);
		} else if (ele[i].name.search(/shippingaddress/) > -1) {
			NG.addTrigger(ele[i], 'onchange', untickShipping, 0, ele[i]);
		}
	}
}

function setShipping(obj) {
	var frm = obj.form;
	
	if (obj.checked) {
		for (var i = 0; i < frm.length; i++) {
			if (frm[i].name.search(/billingaddress/) > -1) {
				var shipName = frm[i].name.replace(/billing/, 'shipping');
				if (isDef(frm[shipName])) {
					frm[shipName].value = frm[i].value;
				}
			}
		}
	}
}

function setShippingValue(obj) {
	var frm = obj.form;
	if (frm['form_sameshipping'].checked) {
		var shipName = obj.name.replace(/billing/, 'shipping');
		if (isDef(frm[shipName])) {
			frm[shipName].value = obj.value;
		}
	}
}

function untickShipping(obj) {
	obj.form['form_sameshipping'].checked=false;
}