/********* CROSS compatibility ***********/

function allEve(e)
{	
	var theKey = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
  	return theKey;
}

/********* AJAX functions **********/

function getHTTPObject()
{
	if (window.XMLHttpRequest)return new XMLHttpRequest();
	else
	{
		alert("Sorry, your browser does not support AJAX.");
		return null;
	}
}

/*********************************/
/* /en/admin_product.php */
/*********************************/

function AJAXcheckUniqueProductReference(reference, p_extended_data_flag)
{
	oReq = getHTTPObject();
	adjProductCode = '';
	vExtendedData = p_extended_data_flag;
	
	if (oReq != null)
	{
		//encoding to get the french characters across the GET form
		reference = encodeURIComponent(reference);

		oReq.open("GET", "../process/process_check_product_ref.php?ref="+reference, true);
		oReq.send(null);
		oReq.onreadystatechange = AJAXdoRefCheck;
	}
}

function AJAXcheckUniqueProductReferenceWithProductId(reference, product_id, p_extended_data_flag)
{
	oReq = getHTTPObject();
	adjProductCode = '';
	vExtendedData = p_extended_data_flag;
	
	if (oReq != null)
	{
		//encoding to get the french characters across the GET form
		reference = encodeURIComponent(reference);
		oReq.open("GET", "../process/process_check_product_ref.php?ref="+reference+"&pid="+product_id, true);
		oReq.send(null);
		oReq.onreadystatechange = AJAXdoRefCheck;
	}
}

function AJAXdoRefCheck()
{
	if(oReq.readyState == 4)
	{
		if (oReq.responseText != 0)
		{
			document.getElementById('err_ref').style.display = '';
			document.getElementById('err_ref').innerHTML = " This part number already exists. Please choose another one or leave it blank.";
			alert('The part number already exists. Please choose another one or leave it blank.');
			
			return false;
		}
		else
		{
			//enable the inputs so that they are sent through the form
			document.getElementById('use_auto_tax_flag_sell').disabled = false;
			document.getElementById('costPriceEx').disabled = false;
			document.getElementById('costTaxAmount').disabled = false;
			document.getElementById('costPriceInc').disabled = false;
			document.getElementById('sellPriceEx').disabled = false;
			document.getElementById('sellTaxAmount').disabled = false;
			document.getElementById('sellPriceInc').disabled = false;
			document.getElementById('extendedDataFlag').value = vExtendedData;
			
			document.getElementById('productsForm').submit();
		}
		
	}
}

/*********************************/
/* /en/admin_stock_receiving.php */
/*********************************/

function AJAXreceiveProduct(transferId, userId, labelFlag)
{
	vTransferId = transferId;
	oReq = getHTTPObject();
	if (oReq != null)
	{
		oReq.open("GET", "../process/process_receive_stock.php?tid="+transferId+"&uid="+userId+"&lbl="+labelFlag, true);
		oReq.send(null);
		oReq.onreadystatechange = AJAXdoTransfer;
	}
}

function AJAXquickReceiveProduct(productCode, whId, userId)
{
	oReq = getHTTPObject();
	if (oReq != null)
	{
		oReq.open("GET", "../process/process_quick_receive_stock.php?pcode="+productCode+"&whid="+whId+"&uid="+userId, true);
		oReq.send(null);
		oReq.onreadystatechange = AJAXdoQuickTransfer;
	}	
}

function AJAXdoTransfer()
{
	if(oReq.readyState <= 3)
	{
		document.getElementById('btn_without_lbl_'+vTransferId).style.display = 'none';
		document.getElementById('btn_with_lbl_'+vTransferId).className = 'sGrey';
		document.getElementById('btn_with_lbl_'+vTransferId).innerHTML = 'in progress...';	
	}
	else if(oReq.readyState == 4)
	{
		if (oReq.responseText != 'error')
		{
			document.getElementById('btn_without_lbl_'+vTransferId).style.display = 'none';
			document.getElementById('btn_with_lbl_'+vTransferId).className = 'transfer_success';
			document.getElementById('btn_with_lbl_'+vTransferId).innerHTML = 'done';
			doScannerOn();
		}
		else
		{
			document.getElementById('btn_without_lbl_'+vTransferId).style.display = 'none';
			document.getElementById('btn_with_lbl_'+vTransferId).className = 'transfer_error';
			document.getElementById('btn_with_lbl_'+vTransferId).innerHTML = 'error';
			doScannerOn();
		}
	}
}

function AJAXdoQuickTransfer()
{
	if(oReq.readyState == 4)
	{
		var data = oReq.responseText;
		var transfer_array = data.split("|");
		var transfer_id = transfer_array[0];
		var transfer_qty = transfer_array[1];
		var transfer_user_id = transfer_array[2];
				
		if (transfer_id != 'error' && transfer_qty != 'error' && transfer_user_id != 'error')
		{
			var confirmQty = confirm('Do you have a quantity of '+transfer_qty+' for transfer number '+transfer_id+ ' ?');
			if (confirmQty){AJAXreceiveProduct(transfer_id, transfer_user_id, 0);}
			else{doScannerOn();}
		}
		else{alert('The part number is not valid.');doScannerOn();}
	}
}


/*********************************/
/* /en/admin_stock_purchase.php */
/*********************************/

function AJAXpurchaseProduct(userId, wh_id)
{
	oReq = getHTTPObject();
	if (oReq != null)
	{
		var purchaseProductCode = document.getElementById('purchase_product_code').value;
		var purchaseProductQty = document.getElementById('purchase_product_qty').value;
		var purchaseSupplierId = document.getElementById('purchase_supplier_id').value;
		var purchaseCmt = document.getElementById('purchase_product_cmt').value;
		//encoding to get the french characters across the GET form
		purchaseCmt = encodeURIComponent(purchaseCmt);
		
		if(purchaseProductCode != '')
		{
			oReq.open("GET", "../process/process_admin_purchase.php?actionID=1&productCode="+purchaseProductCode+"&productQty="+purchaseProductQty+"&purchaseWhTo="+wh_id+"&purchaseSupplierId="+purchaseSupplierId+"&purchaseUserId="+userId+"&purchaseCmt="+purchaseCmt, true);
			oReq.send(null);
			oReq.onreadystatechange = AJAXdoManualPurchase;
		}
		else{alert('Please enter the product\'s part number');}
	}
}

function AJAXdoManualPurchase()
{
	if(oReq.readyState == 4)
	{
		if (oReq.responseText != 'error')
		{
			document.getElementById('purchaseResultSpan').style.display = '';
			document.getElementById('purchaseResultSpan').className = 'transfer_success';
			document.getElementById('purchaseResultSpan').innerHTML = 'done';
			document.getElementById('purchase_product_code').value = '';
			document.getElementById('purchase_product_qty').value = '';
			document.getElementById('purchase_product_cmt').value = '';
		}
		else
		{
			document.getElementById('purchaseResultSpan').style.display = '';
			document.getElementById('purchaseResultSpan').className = 'transfer_error';
			document.getElementById('purchaseResultSpan').innerHTML = 'error';
		}
		
	}
}

function AJAXpurchaseProductBarcode(userId, wh_id, barcode)
{
	oReq = getHTTPObject();
	vBarcode = barcode;
	vCodeType = document.getElementById('scanmode').value;
	
	if (oReq != null)
	{
		var purchaseSupplierId = document.getElementById('purchase_supplier_id_barcode').value;
		var purchaseProductQty = document.getElementById('purchase_product_barcode_qty').value;
		vPurchaseProductQty = purchaseProductQty;
		var purchaseCmt = document.getElementById('purchase_product_barcode_cmt').value;
		//encoding to get the french characters across the GET form
		purchaseCmt = encodeURIComponent(purchaseCmt);
		if (purchaseCmt == "Remarks"){purchaseCmt = '';}
		
		if(barcode != '')
		{
			oReq.open("GET", "../process/process_admin_purchase.php?actionID=2&productCode=-1&productBarcode="+barcode+"&codeType="+vCodeType+"&productQty="+purchaseProductQty+"&purchaseWhTo="+wh_id+"&purchaseSupplierId="+purchaseSupplierId+"&purchaseUserId="+userId+"&purchaseCmt="+purchaseCmt, true);
			oReq.send(null);
			oReq.onreadystatechange = AJAXdoPurchaseProductBarcode;
		}
		else{alert('Please enter the barcode');}
	}
}

function AJAXdoPurchaseProductBarcode()
{
	if(oReq.readyState == 4)
	{
		if (oReq.responseText != 'error')
		{
			document.getElementById('QuickPurchaseBarcode').value = '';
			document.getElementById('purchaseBarcodeResultSpan').style.display = '';
			document.getElementById('purchaseBarcodeResultSpan').className = 'transfer_success';
			document.getElementById('purchaseBarcodeResultSpan').innerHTML = vPurchaseProductQty+' x '+oReq.responseText+' ('+vBarcode+')';
		}
		else
		{
			document.getElementById('QuickPurchaseBarcode').value = '';
			document.getElementById('purchaseBarcodeResultSpan').style.display = '';
			document.getElementById('purchaseBarcodeResultSpan').className = 'transfer_error';
			document.getElementById('purchaseBarcodeResultSpan').innerHTML = 'The product cannot be found. ';
		}
		
	}
}

/*********************************/
/* /en/admin_stock_purchase_images.php */
/*********************************/

function AJAXpurchaseProductFromImg(userId, wh_id, code, product_id)
{
	vProductId = product_id;
	oReq = getHTTPObject();
	if (oReq != null)
	{
		var purchaseSupplierId = parent.document.getElementById('purchase_supplier_id_img').value;
		var purchaseProductQty = document.getElementById('purchase_product_qty_'+product_id).value;
		var purchaseCmt = document.getElementById('purchase_product_cmt_'+product_id).value;
		//encoding to get the french characters across the GET form
		purchaseCmt = encodeURIComponent(purchaseCmt);
		if (purchaseCmt == "Remarks"){purchaseCmt = '';}
		
		if(code != '')
		{
			oReq.open("GET", "../process/process_admin_purchase.php?actionID=1&productCode="+code+"&productQty="+purchaseProductQty+"&purchaseWhTo="+wh_id+"&purchaseSupplierId="+purchaseSupplierId+"&purchaseUserId="+userId+"&purchaseCmt="+purchaseCmt, true);
			oReq.send(null);
			oReq.onreadystatechange = AJAXdoManualPurchaseImg;
		}
		else{alert('Please enter the product\'s part number');}
	}
}

function AJAXdoManualPurchaseImg()
{
	if(oReq.readyState == 4)
	{
		if (oReq.responseText != 'error')
		{
			document.getElementById('purchaseBtnSpan_'+vProductId).style.display = 'none';
			document.getElementById('purchaseResultSpan_'+vProductId).style.display = '';
			document.getElementById('purchaseResultSpan_'+vProductId).className = 'transfer_success';
			document.getElementById('purchaseResultSpan_'+vProductId).innerHTML = 'done';
		}
		else
		{
			document.getElementById('purchaseResultSpan_'+vProductId).style.display = '';
			document.getElementById('purchaseResultSpan_'+vProductId).className = 'transfer_error';
			document.getElementById('purchaseResultSpan_'+vProductId).innerHTML = 'error';
		}
		
	}
}


/*********************************/
/* /en/admin_stock_adjustment.php */
/*********************************/

function AJAXadjustStock(userId, wh_id, p_action)
{
	oReq = getHTTPObject();
	adjProductCode = '';
	if (oReq != null)
	{
		document.getElementById('adjSpan').style.display = 'none';
		adjProductCode = parent.document.getElementById('adj_product_code').value;
		var adjProductQty = document.getElementById('adj_product_qty').value;
		var adjProductReason = document.getElementById('adj_product_reason').value;
		//encoding to get the french characters across the GET form
		adjProductReason = encodeURIComponent(adjProductReason);
		
		if(adjProductCode != '')
		{
			oReq.open("GET", "../process/process_admin_adjustment.php?actionID="+p_action+"&adjCode="+adjProductCode+"&adjQty="+adjProductQty+"&adjWh="+wh_id+"&adjUserId="+userId+"&adjCmt="+adjProductReason, true);
			oReq.send(null);
			oReq.onreadystatechange = AJAXdoStockAdj;
		}
		else{alert('Please enter the product\'s part number');}
	}
}

function AJAXdoStockAdj()
{
	if(oReq.readyState == 4)
	{
		if (oReq.responseText != 'error')
		{
			document.getElementById('adjSpan').style.display = '';
			document.getElementById('adjSpan').className = 'adjustment_success';
			document.getElementById('adjSpan').innerHTML = 'Adjustment done. Stock level for \"'+adjProductCode+'\" is now : '+oReq.responseText;
			document.getElementById('adj_product_code').value = '';
		}
		else
		{
			document.getElementById('adjSpan').style.display = '';
			document.getElementById('adjSpan').className = 'transfer_error';
			document.getElementById('adjSpan').innerHTML = 'An error occured. The adjustment could not be performed.';
		}
		
	}
}


/*********************************/
/* /en/admin_orderlist_update.php */
/*********************************/

function AJAXquickPackProduct(orderId, productCode, productQty)
{
	oReq = getHTTPObject();
	vOrderId = orderId;
	vCodeType = document.getElementById('scanmode').value;
	
	productQty = parseInt(""+productQty+"");
	
	if (productQty == 0){alert("The quantity is not valid.");document.getElementById('QuickPackQty').value='1';return;}
	if (oReq != null)
	{
		oReq.open("GET", "../process/process_quick_pack.php?orderId="+orderId+"&productCode="+productCode+"&productQty="+productQty+"&codeType="+vCodeType, true);
		oReq.send(null);
		oReq.onreadystatechange = AJAXdoQuickPack;
	}
}

function AJAXdoQuickPack()
{
	if(oReq.readyState == 4)
	{
		var data = oReq.responseText;
		if (data == 'over'){alert('Warning : the quantity to pack is greater than the quantity to be packed. Action aborted.');doScannerPackingOn();}
		else if (data == 'error'){alert('The part number is not valid.');doScannerPackingOn();}
		else if (data == 'duplicates'){alert('Product cannot be selected. Duplicate code');}
		else
		{
			var updated_array = data.split("|");
			for ( var orderlist in updated_array )
			{
				var orderlist_array = updated_array[orderlist];
				orderlist_array = orderlist_array.split(",");
				var the_orderlistid = orderlist_array[0];
				var the_totalqty = orderlist_array[1];
				var the_packedqty = orderlist_array[2];
				
				if (the_totalqty == the_packedqty)
				{
					document.getElementById('span_packed_qty_'+the_orderlistid).className = 'packing_full';
					document.getElementById('span_packed_qty_'+the_orderlistid).innerHTML = '<img src=\'../images/tick.gif\'>';
					document.getElementById('iframe_logs').src = 'admin_order_logs.php?orderid='+vOrderId;
				}
				else
				{
					document.getElementById('span_packed_qty_'+the_orderlistid).className = 'packing_not_full';
					document.getElementById('span_packed_qty_'+the_orderlistid).innerHTML = ''+the_packedqty+'';
					document.getElementById('iframe_logs').src = 'admin_order_logs.php?orderid='+vOrderId;
				}
			}
			document.getElementById('QuickPackQty').value = 1;
			doScannerPackingOn();
		}
	}
}


function AJAXpaymentMethodUpdate(orderId)
{
	oReq = getHTTPObject();
	vOrderId = orderId;
		
	if (oReq != null)
	{
		PaymentMethodID = document.getElementById('PaymentMethodID').value;
		ShopperID = document.getElementById('ShopperID').value;
		PaymentAmount = document.getElementById('PaymentAmount').value;
		PaymentRef = document.getElementById('PaymentRef').value;
		//encoding to get the french characters across the GET form
		PaymentRef = encodeURIComponent(PaymentRef);
		
		oReq.open("GET", "../process/process_admin_update_payment.php?actionID=1&orderID="+orderId+"&PaymentMethodID="+PaymentMethodID+"&PaymentRef="+PaymentRef+"&PaymentAmount=&ShopperID="+ShopperID, true);
		oReq.send(null);
		oReq.onreadystatechange = AJAXdoPaymentMethodUpdate;
	}	
}

function AJAXdoPaymentMethodUpdate()
{
	if(oReq.readyState == 4)
	{
		// var oSpanPaymentAmount = document.getElementById('spanPaymentAmount');
		// var oSpanPaymentRef = document.getElementById('spanPaymentRef');
		var vOrderID = document.getElementById('OrderID');
		
		/*
		FIREFOX HAS AN ISSUE UPDATING THE DOM for the innerHTML - the fields will be static
		if (PaymentMethodID == 0)
		{
			oSpanPaymentAmount.innerHTML = " - <input type='hidden' name='PaymentRef' id='PaymentRef' value=''>";
			oSpanPaymentRef.innerHTML = " - <input type='hidden' name='PaymentAmount' id='PaymentAmount' value=''>";
		}
		else
		{
			oSpanPaymentAmount.innerHTML = "<input tabindex=\"10\" class=\"Grey\" type=\"text\" onBlur=\"updateDOM(this);\" name=\"PaymentAmount\" id=\"PaymentAmount\" maxlength=\"20\" size=\"11\" value=\"\">";
			oSpanPaymentRef.innerHTML = "<input tabindex=\"11\" class=\"Grey\" type=\"text\" onBlur=\"updateDOM(this);\" name=\"PaymentRef\" id=\"PaymentRef\" maxlength=\"20\" size=\"11\" value=\"\" onkeydown=\"var c=allEve(event);if(c == 13){AJAXpaymentUpdate('"+vOrderId+"'); return false;}\">";
			oSpanPaymentAmount.focus();
		}
		*/
		
		//document.getElementById('iframe_logs').src = 'admin_order_logs.php?orderid='+vOrderId;
		document.location = 'admin_orderlist_update.php?orderID='+vOrderId
	}
}

function updateDOM(inputField)
{
	// if the inputField ID string has been passed in, get the inputField object
	
	if (typeof inputField == "string"){inputField = document.getElementById(inputField);}
	if (inputField.type == "select-one")
	{
		for (var i=0; i<inputField.options.length; i++)
		{
			if (i == inputField.selectedIndex){inputField.options[inputField.selectedIndex].setAttribute("selected","selected");}
		}
	}
	else if (inputField.type == "text"){inputField.setAttribute("value",inputField.value);}
	else if (inputField.type == "textarea"){inputField.setAttribute("value",inputField.value);}
	else if ((inputField.type == "checkbox") || (inputField.type == "radio"))
	{
		if (inputField.checked){inputField.setAttribute("checked","checked");}
		else{inputField.removeAttribute("checked");}
	}
}

function AJAXpaymentUpdate(orderId)
{
	oReq = getHTTPObject();
	vOrderId = orderId;
		
	if (oReq != null)
	{
		var oStatusID = document.getElementById('StatusID');
		CurrentStatusID = document.getElementById('CurrentStatusID').value;
		PaymentMethodID = document.getElementById('PaymentMethodID').value;
		PaymentAmount = document.getElementById('PaymentAmount').value;
		PaymentRef = document.getElementById('PaymentRef').value;
		//encoding to get the french characters across the GET form
		PaymentRef = encodeURIComponent(PaymentRef);
		ShopperID = document.getElementById('ShopperID').value;
		OrderTotalValue = document.getElementById('OrderTotalValue').value;
		OrderTotalValue = parseFloat(OrderTotalValue);
		PaymentAmount = PaymentAmount.replace(",",".");
		PaymentAmount = parseFloat(PaymentAmount);
		PaymentAmount = Number(PaymentAmount);
		
		if(PaymentRef == '')
		{
			var conf = confirm ('Warning : The reference is not valid. Do you really want to continue ?');if (!conf){oStatusID.value = CurrentStatusID;return;}
		}
			
		if(isNaN(PaymentAmount) && OrderTotalValue != 0){alert('Error : The amount received is not valid.');oStatusID.value = CurrentStatusID;return;}
		else if (PaymentAmount > 0)
		{
			if (PaymentAmount - OrderTotalValue < 0){alert('Action aborted : The amount received is not sufficient.');oStatusID.value = CurrentStatusID;return;}
			else if (PaymentAmount - OrderTotalValue > 0){var conf = confirm ('Warning : The amount received is greater than the total amount of the order. A store credit of $'+ (PaymentAmount - OrderTotalValue) +' will be issued to the customer. Do you want to go ahead ?');if (!conf){oStatusID.value = CurrentStatusID;return;}}
			else{var conf = confirm ('The payment cannot be modified once taken. Do you confirm the payment of $'+PaymentAmount+' ?');if (!conf){oStatusID.value = CurrentStatusID;return;}}
		}
		//alert('sending update request with '+PaymentMethodID);
		oReq.open("GET", "../process/process_admin_update_payment.php?actionID=2&orderID="+orderId+"&PaymentMethodID="+PaymentMethodID+"&PaymentRef="+PaymentRef+"&PaymentAmount="+PaymentAmount+"&ShopperID="+ShopperID, true);
		oReq.send(null);
		oReq.onreadystatechange = AJAXdoPaymentUpdate;
	}	
}

function AJAXdoPaymentUpdate()
{
	
	//value returned is updated "PaymentDTS|new_order_total_value"
	if(oReq.readyState == 4)
	{
		var returned_table = oReq.responseText.split("|");
		var returned_DTS = returned_table[0];
		var returned_OTV = returned_table[1];
		
		if (returned_DTS != '0000-00-00 00:00:00' && returned_DTS != '')
		{
			var oPaymentDTS = document.getElementById('PaymentDTS');
			oPaymentDTS.value = oReq.responseText;
			
			//payment has been successfully made => total value of order is updated to aknowledge the possible credits
			var oOrderTotalValue = document.getElementById('OrderTotalValue');
			oOrderTotalValue.value = returned_OTV;
			
			//automatically change the order status to 'payment received' #3
			sendCommandUpdateOrderStatus(2,3);
		}
		else{alert('An error occured. The payment has not been taken.');}
	}
}


function AJAXaddOrderComment(orderId)
{
	vOrderId = orderId;
	oReq = getHTTPObject();
	if (oReq != null)
	{
		var logComment = document.getElementById('orderComments').value;
		//encoding to get the french characters across the GET form
		logComment = encodeURIComponent(logComment);
		if(logComment != '')
		{
			oReq.open("GET", "../process/process_admin_log.php?actionID=1&orderID="+orderId+"&logText="+logComment, true);
			oReq.send(null);
			oReq.onreadystatechange = AJAXdorefreshOrderLog;
		}
		else{alert('The comment is not valid.');}
	}
}

function AJAXdorefreshOrderLog()
{
	if(oReq.readyState == 4)
	{
		if (oReq.responseText != 'error')
		{
			document.getElementById('iframe_logs').src = 'admin_order_logs.php?orderid='+vOrderId;
			document.getElementById('orderComments').value = '';
		}
	}
}

function AJAXreadyForDespatch(orderId)
{
	vOrderId = orderId;
	oReq = getHTTPObject();
	if (oReq != null)
	{
		oReq.open("GET", "../process/process_admin_check_packing.php?orderID="+orderId, true);
		oReq.send(null);
		oReq.onreadystatechange = AJAXdoReadyForDespatch;
	}
}

function AJAXdoReadyForDespatch()
{
	if(oReq.readyState == 4)
	{
		if (oReq.responseText == 0)
		{
			var conf = confirm ('You will not be able to cancel the order after this step. Please confirm.');
			if (conf){document.getElementById('form_update_order').submit();}else{document.getElementById('StatusID').value = 4;return;}
		}
		else{alert('Action aborted : All products must be packed.');document.getElementById('StatusID').value = 4;return;}
	}
}

function AJAXupdateColipost(orderId)
{
	vOrderId = orderId;
	oReq = getHTTPObject();
	colipostNB = document.getElementById('TrackingCode').value;
	//encoding to get the french characters across the GET form
	colipostNB = encodeURIComponent(colipostNB);
	
	if (oReq != null && colipostNB != '')
	{
		oReq.open("GET", "../process/process_admin_update_order_shipping.php?orderID="+orderId+"&colipostNB="+colipostNB, true);
		oReq.send(null);
		oReq.onreadystatechange = AJAXdoUpdateColipost;
	}
	else{alert('The shipping reference number is not valid.');document.getElementById('StatusID').value = 7;return;}
}

function AJAXdoUpdateColipost()
{
	if(oReq.readyState == 4)
	{
		if (oReq.responseText == 0)
		{
			document.getElementById('StatusID').value = 1;
			document.getElementById('form_update_order').submit();
		}
		else{alert('An error occured. The shipping reference number has no been saved.');document.getElementById('StatusID').value = 7;return;}
	}
}


/*********************************/
/* /en/shop_join.php */
/*********************************/

function AJAXcreateCustomerAccount(p_email)
{
	oReq = getHTTPObject();
	vEml = p_email;
	if (oReq != null)
	{
		oReq.open("GET", "../process/process_validate_new_customer_email.php?eml="+p_email, true);
		oReq.send(null);
		oReq.onreadystatechange = AJAXdoCreateCustomerAccount;
	}
}

function AJAXdoCreateCustomerAccount()
{
	if(oReq.readyState == 4)
	{
		var data = oReq.responseText;
		var oErrField = document.getElementById('span_err_message');
		//0 = unknow error
		//1 = email not valid
		//2 = account already exist
		//3 = available account
		
		if (data == 0){oErrField.innerHTML = "Unknown error, please contact Animeworks.com.au for further assistance.";oErrField.style.display='';return;}
		else if(data == 1){oErrField.innerHTML = "The email ' <u>"+vEml+"</u> ' is not valid. Please try again.";oErrField.style.display='';return;}
		else if(data == 2){oErrField.innerHTML = "The email ' <u>"+vEml+"</u> ' is already being used. <p/>If this email belongs to you, <a href=\"shop_pswd_recovery.php?useremail="+vEml+"\">click here</a> to recover your password.<br/>";oErrField.style.display='';return;}
		else if(data == 3){document.getElementById('sendJoinForm').submit();}
		else{oErrField.innerHTML = "Unknown error, please contact Animeworks.com.au for further assistance.";oErrField.style.display='';return;}
	}
}


/*********************************/
/*            global             */
/*********************************/

/* OBSOLETE

function updateSession(sessionItemName, sessionItemValue)
{
	vSessionItemName = sessionItemName;
	vSessionItemValue = sessionItemValue;
	oReq = getHTTPObject();
	if (oReq != null)
	{
		oReq.open("GET", "../process/process_update_session.php?sin="+sessionItemName+"&siv="+sessionItemValue, true);
		oReq.send(null);
		oReq.onreadystatechange = doUpdateSession;
	}	
}

function doUpdateSession()
{
	if(oReq.readyState == 4)
	{
		var data = oReq.responseText;
		//if the shipping address session is updated to "1" (pick-up), then hide the shipping option SPAN=span_delivery_method and show SPAN=span_pickup_method
		var oSpanDelivery = document.getElementById('span_delivery_method');
		var oSpanPickup = document.getElementById('span_pickup_method');
		
		if(oUpdate = document.getElementById('obj_'+data)){if(oUpdate.checked == false){oUpdate.checked = true;}else{oUpdate.checked = false;}}
		
		if (vSessionItemName == 'shop_shipAddressID')
		{
			if(vSessionItemValue == '1'){oSpanDelivery.style.display='none';oSpanPickup.style.display='';}
			else{oSpanDelivery.style.display='';oSpanPickup.style.display='none';}
		}
		
		if (data == 'error'){alert('An error occured. Please try again later.');return false;}
	}
}
*/

/* ********* */

function ObjectDisable(id)
{
	var elem = document.getElementById(id);
	elem.disabled=true;
}

function ObjectEnable(id)
{
	var elem = document.getElementById(id);
	elem.disabled = false;
}

function DivDisplay(id)
{
	var elem = document.getElementById(id);
	elem.style.display='';
}

function DivHide(id)
{
	var elem = document.getElementById(id);
	elem.style.display='none';
}

function checkForOtherName(check, theDiv, theValue)
{
	if (theValue == check){DivDisplay(theDiv);}
	else{DivHide(theDiv);}
}

function doScannerOn()
{
	document.getElementById('QuickReceiveCode').focus();
	document.getElementById('QuickReceiveCode').value='';
	document.getElementById('scanner_msg').innerText='Scanner ON  ';
	document.getElementById('scanner_msg').className='scanner_on';
}

function doScannerPackingOn()
{
	document.getElementById('QuickPackCode').focus();
	document.getElementById('QuickPackCode').value='';
	document.getElementById('scanner_msg').innerText='Scanner ON  ';
	document.getElementById('scanner_msg').className='scanner_on';
}

function doScannerAddProductOn()
{
	document.getElementById('QuickAddCode').focus();
	document.getElementById('QuickAddCode').value='';
	document.getElementById('scanner_msg').innerText='Scanner ON  ';
	document.getElementById('scanner_msg').className='scanner_on';
}

function doScannerPurchasingOn()
{
	document.getElementById('QuickPurchaseBarcode').focus();
	document.getElementById('QuickPurchaseBarcode').value='';
	document.getElementById('scanner_msg').innerText='Scanner ON  ';
	document.getElementById('scanner_msg').className='scanner_on';
}

function doScannerOff()
{
	document.getElementById('scanner_msg').innerText='Scanner OFF';
	document.getElementById('scanner_msg').className='scanner_off';
}

function showProject(id_btn_show, id_btn_hide, id_div)
{
	var elem_div = document.getElementById(id_div);
	var elem_btn_show = document.getElementById(id_btn_show);
	var elem_btn_hide = document.getElementById(id_btn_hide);
	elem_div.style.display='';
	elem_btn_show.style.display='none';
	elem_btn_hide.style.display='';
}

function showRequest(id_btn_show, id_btn_hide, id_div)
{
	var elem_div = document.getElementById(id_div);
	var elem_btn_show = document.getElementById(id_btn_show);
	var elem_btn_hide = document.getElementById(id_btn_hide);
	elem_div.style.display='';
	elem_btn_show.style.display='none';
	elem_btn_hide.style.display='';
}

function showStoryOnIndex(id_btn_show, id_btn_hide, id_div, id_short_div)
{
	var elem_div = document.getElementById(id_div);
	var elem_short_div = document.getElementById(id_short_div);
	var elem_btn_show = document.getElementById(id_btn_show);
	var elem_btn_hide = document.getElementById(id_btn_hide);
	elem_short_div.style.display='none';
	elem_div.style.display='';
	elem_btn_show.style.display='none';
	elem_btn_hide.style.display='';
}

function hideProject(id_btn_show, id_btn_hide, id_div)
{
	var elem_div = document.getElementById(id_div);
	var elem_btn_show = document.getElementById(id_btn_show);
	var elem_btn_hide = document.getElementById(id_btn_hide);
	elem_div.style.display='none';
	elem_btn_hide.style.display='none';
	elem_btn_show.style.display='';
}

function hideStoryOnIndex(id_btn_show, id_btn_hide, id_div, id_short_div)
{
	var elem_div = document.getElementById(id_div);
	var elem_short_div = document.getElementById(id_short_div);
	var elem_btn_show = document.getElementById(id_btn_show);
	var elem_btn_hide = document.getElementById(id_btn_hide);
	elem_div.style.display='none';
	elem_short_div.style.display='';
	elem_btn_hide.style.display='none';
	elem_btn_show.style.display='';
}

function hideRequest(id_btn_show, id_btn_hide, id_div)
{
	var elem_div = document.getElementById(id_div);
	var elem_btn_show = document.getElementById(id_btn_show);
	var elem_btn_hide = document.getElementById(id_btn_hide);
	elem_div.style.display='none';
	elem_btn_hide.style.display='none';
	elem_btn_show.style.display='';
}

function showImgPreview(oPrv, oLink)
{
	var oPreviewSpan = document.getElementById(oPrv);
		
	// Create new image
	var newImg=document.createElement('img');
	newImg.src=oLink;
	newImg.className= 'previewimage';
	oPreviewSpan.appendChild(newImg);
	
	//add item name
	//var newImgText=document.createElement('font');
	//newImgText.className= 'previewimagetext';
	//newImgText.innerHTML = '<br/>&nbsp; na mehe asdasasdas asd asdasd asd ssas das das &nbsp;';
	//oPreviewSpan.appendChild(newImgText);
	
	newImg.onmouseover=function(){this.style.cursor='pointer';}
	newImg.onclick=function(){oPreviewSpan.removeChild(newImg);}
		
	return false;
}

function chkSponsorForm()
{
	
	var tFields = new Array('sponsor_surname','sponsor_name','sponsor_address','sponsor_postcode','sponsor_city','sponsor_country');
	var faults = 0;
	
	document.getElementById('err_message').style.display = 'none';
	
	for(i=0;i<6;i++)
	{
		document.getElementById('err_'+tFields[i]+'').style.display = 'none';
		if(document.getElementById(tFields[i]).value == '')
		{document.getElementById('err_'+tFields[i]+'').style.display = '';faults++;}
	}
	
	if (faults > 0)
	{
		document.getElementById('err_message').style.display = '';
		return false;
	}
	else {return true;}
}

function chkAorEmailForm()
{
	
	var tFields = new Array('aor_email_address_to','aor_email_address_from','aor_email_object');
	var faults = 0;
	
	document.getElementById('err_message').style.display = 'none';
	
	for(i=0;i<3;i++)
	{
		document.getElementById('err_'+tFields[i]+'').style.display = 'none';
		if(document.getElementById(tFields[i]).value == '')
		{document.getElementById('err_'+tFields[i]+'').style.display = '';faults++;}
	}
	
	if (faults > 0)
	{
		document.getElementById('err_message').style.display = '';
		return false;
	}
	else {document.getElementById('form_send_email_aor').submit();}
}

function chkSendMessageForm()
{
	
	var tFields = new Array('message_surname','message_name','message_contact','message_subject');
	var faults = 0;
	
	document.getElementById('err_message').style.display = 'none';
	
	for(i=0;i<4;i++)
	{
		document.getElementById('err_'+tFields[i]+'').style.display = 'none';
		if(document.getElementById(tFields[i]).value == '')
		{document.getElementById('err_'+tFields[i]+'').style.display = '';faults++;}
	}
	
	if (faults > 0)
	{	
		document.getElementById('err_message').style.display = '';
		return false;
	}
	else {return true;}
}

function chkCreateAccountForm()
{
	
	var tFields = new Array('Surname','Firstname','Address1','Postcode','City','ShopperEmail','ShopperUsername');
	var faults = 0;
	
	document.getElementById('span_err_message').style.display = 'none';
	
	for(i=0;i<7;i++)
	{
		document.getElementById('err_'+tFields[i]+'').style.display = 'none';
		if(document.getElementById(tFields[i]).value == '')
		{document.getElementById('err_'+tFields[i]+'').style.display = '';faults++;}
	}
	
	if (document.getElementById('ShopperEmail').value != document.getElementById('ShopperUsername').value)
	{alert ("Les deux emails ne correspondent pas, merci de les corriger."); return false;}
	
	if (faults > 0)
	{	
		document.getElementById('span_err_message').style.display = '';
		return false;
	}
	else
	{
		AJAXcreateCustomerAccount(document.getElementById('ShopperEmail').value);
		return false;
	}
}

function chkSubForm()
{
	document.getElementById('err_message_blank').style.display = 'none';
	document.getElementById('err_message').style.display = 'none';
	
	var the_name = document.getElementById('name').value;
	var the_email = document.getElementById('email').value;
	
	if (the_name == '' || the_email == '')
	{
		document.getElementById('err_message_blank').style.display = '';
		return false;	
	}
	else {return true;}
}

function validateFilePdf(filename)
{
	if (!/\.pdf$/i.test(filename))
	{
		document.getElementById('err_message_non_pdf').style.display = 'none';
		return false;
	}
	else{return true}
}


function chkPdfUpload()
{
	document.getElementById('err_message_blank').style.display = 'none';
	document.getElementById('err_message_non_pdf').style.display = 'none';
	
	var the_file_name = document.getElementById('upload').value;
	var the_subject = document.getElementById('subject').value;
	var pdf_test = validateFilePdf(the_file_name);
	
	if (the_file_name == '' || pdf_test == false)
	{
		document.getElementById('err_message_non_pdf').style.display = '';
		return false;	
	}
	else if (the_subject == '')
	{
		document.getElementById('err_message_blank').style.display = '';
		return false;
	}
	else {return true;}
}

function chkPdfDownlaodUpload()
{
	document.getElementById('err_message_non_pdf').style.display = 'none';
	
	var the_file_name = document.getElementById('upload').value;
	var pdf_test = validateFilePdf(the_file_name);
	
	if (the_file_name == '' || pdf_test == false)
	{
		document.getElementById('err_message_non_pdf').style.display = '';
		return false;	
	}
	else {return true;}
}

function chkSponsorReqForm()
{
	document.getElementById('err_message_blank_sponsor').style.display = 'none';
	document.getElementById('err_message_sponsor').style.display = 'none';
	
	var to_email = document.getElementById('to_email_sponsor_request').value;
	
	if (to_email == '')
	{
		document.getElementById('err_message_blank_sponsor').style.display = '';
		return false;	
	}
	else {return true;}
}

function chkDonationReqForm()
{
	document.getElementById('err_message_blank_donation').style.display = 'none';
	document.getElementById('err_message_donation').style.display = 'none';
	
	var to_email = document.getElementById('to_email_donation_request').value;
	
	if (to_email == '')
	{
		document.getElementById('err_message_blank_donation').style.display = '';
		return false;	
	}
	else {return true;}
}

function chkDonationForm()
{
	
	var tFields = new Array('donation_surname','donation_name','donation_address','donation_postcode','donation_city','donation_country');
	var faults = 0;
	
	document.getElementById('err_message').style.display = 'none';
	
	for(i=0;i<6;i++)
	{
		document.getElementById('err_'+tFields[i]+'').style.display = 'none';
		if(document.getElementById(tFields[i]).value == '')
		{document.getElementById('err_'+tFields[i]+'').style.display = '';faults++;}
	}
	
	if (faults > 0)
	{
		document.getElementById('err_message').style.display = '';
		return false;
	}
	else {return true;}
}

function chkPswdForm()
{
	document.getElementById('err_message_blank').style.display = 'none';
	document.getElementById('err_message_different').style.display = 'none';
	
	var pswd1 = document.getElementById('password1').value;
	var pswd2 = document.getElementById('password2').value;
	
	if (pswd1 == '' || pswd2 == '')
	{
		document.getElementById('err_message_blank').style.display = '';
		return false;	
	}
	else if(pswd1 != pswd2)
	{
		document.getElementById('err_message_different').style.display = '';
		return false;
	}
	else {return true;}
}


function chkNewUserForm()
{
	
	document.getElementById('err_message_user_not_added').style.display = 'none';
	document.getElementById('err_message').style.display = 'none';
	
	var username = document.getElementById('addusername').value;
	var realname = document.getElementById('addrealname').value;
	
	if (username == '' || realname == '')
	{
		document.getElementById('err_message_user_not_added').style.display = '';
		return false;	
	}
	else {return true;}
}


function chkAddNewsForm()
{
	
	document.getElementById('err_message').style.display = 'none';
	
	var newstitle = document.getElementById('newstitle').value;
	var newstext = document.getElementById('newstext').value;

	if (newstitle == '' || newstext == '')
	{
		document.getElementById('err_message').style.display = '';
		return false;	
	}
	else {return true;}
}

function chkAddLinkForm()
{
	
	document.getElementById('err_message').style.display = 'none';
	
	var linktitle = document.getElementById('linktitle').value;
	var linkurl = document.getElementById('linkurl').value;

	if (linktitle == '' || linkurl == '')
	{
		document.getElementById('err_message').style.display = '';
		return false;	
	}
	else {return true;}
}

function chkAddMessageForm()
{
	
	document.getElementById('err_message').style.display = 'none';
	
	var messagetitle = document.getElementById('messagetitle').value;
	var messagetext = document.getElementById('messagetext').value;
	
	if (messagetitle == '' || messagetext == '')
	{
		document.getElementById('err_message').style.display = '';
		return false;	
	}
	else {return true;}
}

function chkAddProductForm(p_update_flag, p_product_id, p_extended_data_flag)
{
	var tFields = new Array('productName','sellPriceEx','sellTaxAmount','sellPriceInc');
	var faults = 0;
	
	document.getElementById('err_message').style.display = 'none';
	document.getElementById('warning').style.display = 'none';
	var vRef = document.getElementById('ref').value;
	
	for(i=0;i<4;i++)
	{
		document.getElementById('err_'+tFields[i]+'').style.display = 'none';
		if(document.getElementById(tFields[i]).value == '')
		{document.getElementById('err_'+tFields[i]+'').style.display = '';faults++;}
	}
	
	if (faults > 0)
	{
		document.getElementById('err_message').style.display = '';
		return false;
	}
	else 
	{
		if(uIsAlphaNumericDashUnderscore(vRef) == false)
		{
			document.getElementById('err_ref').style.display = '';
			document.getElementById('err_ref').innerHTML = " This part number is not valid.";
			alert('The part number is not valid.');
			return false;
		}
		else if(p_update_flag == 1){AJAXcheckUniqueProductReferenceWithProductId(vRef, p_product_id, p_extended_data_flag);}
		else{AJAXcheckUniqueProductReference(vRef, p_extended_data_flag);}
	}	
}

function chkAddCustomerForm()
{
	
	var tFields = new Array('surname','firstname','address1','postcode','city','shopperUsername');
	var faults = 0;
	
	document.getElementById('err_message').style.display = 'none';
	
	for(i=0;i<6;i++)
	{
		document.getElementById('err_'+tFields[i]+'').style.display = 'none';
		if(document.getElementById(tFields[i]).value == '' || document.getElementById(tFields[i]).value == 0)
		{document.getElementById('err_'+tFields[i]+'').style.display = '';faults++;}
	}
	
	if (faults > 0)
	{
		document.getElementById('err_message').style.display = '';
		return false;
	}
	else {document.getElementById('shopperUsername').disabled = false; return true;}

}

function chkNewShippingAddressForm()
{
	
	var tFields = new Array('Surname','Firstname','Address1','Postcode','City','CountryID');
	var faults = 0;
	
	document.getElementById('err_message').style.display = 'none';
	
	for(i=0;i<6;i++)
	{
		document.getElementById('err_'+tFields[i]+'').style.display = 'none';
		if(document.getElementById(tFields[i]).value == '' || document.getElementById(tFields[i]).value == 0)
		{document.getElementById('err_'+tFields[i]+'').style.display = '';faults++;}
	}
	
	if (faults > 0)
	{
		document.getElementById('err_message').style.display = '';
		return false;
	}
	else {return true;}

}

function chkAddsupplierForm()
{
	
	var tFields = new Array('surname','firstname','supplierEntityName');
	var faults = 0;
	
	document.getElementById('err_message').style.display = 'none';
	
	for(i=0;i<3;i++)
	{
		document.getElementById('err_'+tFields[i]+'').style.display = 'none';
		if(document.getElementById(tFields[i]).value == '' || document.getElementById(tFields[i]).value == 0)
		{document.getElementById('err_'+tFields[i]+'').style.display = '';faults++;}
	}

	if (faults > 0)
	{
		document.getElementById('err_message').style.display = '';
		return false;
	}
	else {return true;}

}

function showDeliveryAddress()
{
	document.getElementById('btnShowDelAddress').style.display = 'none';
	document.getElementById('addDeliveryAddressSpan').style.display = '';
}

function hideDeliveryAddress()
{
	document.getElementById('addDeliveryAddressSpan').style.display = 'none';
	document.getElementById('btnShowDelAddress').style.display = '';
}

function showSpan(span_name)
{
	document.getElementById(''+span_name+'').style.display = '';
}

function hideSpan(span_name)
{
	document.getElementById(''+span_name+'').style.display = 'none';
}

function makePopup(theUrl,w,h)
{	
	sH = screen.height;
	sW = screen.width;
	w = w+20;
	h = h+25;

	pos_x = (sW/2) - (w/2);
	pos_y = (sH/2) - (h/2);
	
	parametres="directories=no, location=no, menubar=no, resizable=yes, scrollbars=no, status=no, titlebar=no, toolbar=no, width="+w+", height="+h+", top="+pos_y+", left="+pos_x;
	window.open(""+theUrl+"","",""+parametres+"");
}

function makePopupBanner(theUrl,bid,w,h)
{	
	sH = screen.height;
	sW = screen.width;
	w = w+120;
	h = h+125;

	pos_x = (sW/2) - (w/2);
	pos_y = (sH/2) - (h/2);
	
	theUrl = theUrl+""+bid+"";
	
	parametres="directories=no, location=no, menubar=no, resizable=yes, scrollbars=no, status=no, titlebar=no, toolbar=no, width="+w+", height="+h+", top="+pos_y+", left="+pos_x;
	window.open(""+theUrl+"","Banner",""+parametres+"");
}

function doResetPW(p_id, p_name)
{
	var oForm = document.getElementById('userAdminForm');
	document.getElementById('userid').value = p_id;
	document.getElementById('username').value = p_name;
	oForm.action = '../process/process_reset_pw.php';
	return true;		
}
	
function doDeleteUser(p_id)
{
	var oForm = document.getElementById('userAdminForm');
	document.getElementById('userid').value = p_id;
	document.getElementById('username').value = '';
	oForm.action = '../process/process_delete_user.php';
	return confirm("Do you really want to delete this user ?");
}

function textareaMaxCharactersControl(p_textarea_id, p_max, p_counter)
{
	var oText = document.getElementById(p_textarea_id);
	var oCounter = document.getElementById(p_counter);
	var remainingChars = p_max-(oText.value.length);

	oCounter.innerText = remainingChars;
	if (oText.innerText.length > p_max){oText.value = oText.value.slice(0, p_max);}
}

function sendCommandToCart(p_action_id, p_product_id, p_qty)
{
	
	var oForm = document.getElementById('form_shop_cart_action');
	document.getElementById('actionID').value = p_action_id;
	document.getElementById('productID').value = p_product_id;
	p_qty = parseFloat(p_qty);
	document.getElementById('qty').value = p_qty;

	if (uIsInteger(p_qty) == false || p_qty < 0){alert('The required quantity is not valid.'); return;}
	oForm.submit();
	return true;
}

function sendCommandResetPrice(p_order_id, p_product_id, p_order_list_id, p_product_ref)
{
	var oForm = document.getElementById('form_reset_price');
	oForm.elements[0].value = p_order_id;
	oForm.elements[1].value = p_product_id;
	oForm.elements[2].value = p_order_list_id;
	oForm.elements[3].value = p_product_ref;						
	oForm.submit();
	return true;
}

function uIsInteger(vTest)
{
	var testResult = /^-?\d+$/.test(vTest);
	return testResult;
	
}

function submitRefund()
{
	var oForm = document.getElementById('form_refund');
	var refundValue = document.getElementById('total_refund_value').innerText;
	refundValue = parseFloat(refundValue);
	var refundMethodId = document.getElementById('refund_method_id').value;
	var orderValue = document.getElementById('order_total_value').value;
	
	if (refundValue == 0){alert("The amount of the refund must be greater than $0.00");return;}
	else if (refundMethodId == 0){alert("The refund method is not valid.");return;}
	else if (refundValue > orderValue)
	{
		var conf = confirm ('Warning : you are about to refund an amount greater than the original invoice. Do you want to proceed ?');
		if (conf){oForm.submit();}else{return;}
	}
	else
	{
		var conf = confirm ('Do you want to proceed with the refund of $'+refundValue+' ?');
		if (conf){oForm.submit();}else{return;}
	}
	return true;	
}

function updateRefundTotal()
{
	var oText = document.getElementById('total_refund_value');
	var orderTotalValue = document.getElementById('order_total_value').value;
	var itemList = document.getElementById('item_list').value;
	itemlist_array = itemList.split("|");
	var totalRefund = 0;
	
	for (var itemID in itemlist_array)
	{
		itemID_value = itemlist_array[itemID];
		item_value = document.getElementById('REFUND_VALUE_'+itemID_value).value;
		item_qty = document.getElementById('REFUND_QTY_'+itemID_value).value;
		item_value = parseFloat(item_value);
		item_value = Number(item_value);
		totalRefund = totalRefund+(item_value*item_qty);
	}
	
	if (orderTotalValue < totalRefund){oText.style.color='#822800';}else{oText.style.color='#888888';}
	oText.innerText = totalRefund;
}

function quickAddProduct(orderId, productCode, productQty, cdr)
{
	var vCodeType = document.getElementById('scanmode').value;
	var oTarget = document.getElementById('iframe_process');
	
	productQty = parseInt(""+productQty+"");
	
	if (productQty <= 0){alert("The quantity is not valid.");document.getElementById('QuickAddQty').value='1';return;}
	else if(productCode != ''){oTarget.src = "../process/process_admin_cart.php?actionID=8&newOrderID="+orderId+"&newProductCode="+productCode+"&newQTY="+productQty+"&codeType="+vCodeType+"&cdr="+cdr;}
	else{alert('Please enter the part number.');return;}
	
}

function sendCommandExportProductSheet(p_export_type, p_product_id)
{
	var oForm = document.getElementById('form_export_product_sheet');
	document.getElementById('productID').value = p_product_id;
	document.getElementById('export_type').value = p_export_type;
	
	if (p_export_type == 'pdf'){oForm.action = '../process/process_pdf_product_sheet.php';oForm.target='_blank';}
	else if (p_export_type == 'csv' || p_export_type == 'sql'){oForm.action = '../process/process_export_product_sheet.php';oForm.target='iframe_process';}
	
	oForm.submit();
	return true;
}

function sendCommandExportProductList(p_export_type, p_category_id)
{
	var oForm = document.getElementById('form_export_product_list');
	document.getElementById('categoryID').value = p_category_id;
	document.getElementById('export_type').value = p_export_type;
	document.getElementById('include_disc').value = document.getElementById('incDisc').checked;
	
	if (p_export_type == 'pdf'){oForm.action = '../process/process_pdf_product_list.php';oForm.target='_blank';}
	else if (p_export_type == 'pdf_images'){oForm.action = '../process/process_pdf_product_list_images.php';oForm.target='_blank';}
	else if (p_export_type == 'csv' || p_export_type == 'sql'){oForm.action = '../process/process_export_product_list.php';oForm.target='iframe_process';}
	
	oForm.submit();
	return true;
}

function sendCommandExportProductStock(p_export_type, p_category_id)
{
	var oForm = document.getElementById('form_export_product_stock');
	document.getElementById('categoryID').value = p_category_id;
	document.getElementById('export_type').value = p_export_type;
	document.getElementById('include_disc').value = document.getElementById('incDisc').checked;
	
	if (p_export_type == 'pdf'){oForm.action = '../process/process_pdf_product_stock.php';oForm.target='_blank';}
	else if (p_export_type == 'csv' || p_export_type == 'sql'){oForm.action = '../process/process_export_product_stock.php';oForm.target='iframe_process';}
	
	oForm.submit();
	return true;
}

function disableOurPick(p_our_pick_id)
{
	var oForm = document.getElementById('form_disable_our_pick');
	document.getElementById('disableOurPickID').value = p_our_pick_id;

	oForm.submit();
	return true;
}

function sendCommandUseCreditAdmin(p_credit_id)
{
	var oForm = document.getElementById('form_use_credit');
	document.getElementById('CID').value = p_credit_id;
	oForm.submit();
	return true;
}

function sendCommandCartProduct(p_action)
{
	var oTarget = document.getElementById('iframe_process');
	var newProductCode = document.getElementById('newProductCode').value;
	var newQTY = document.getElementById('newQTY').value;
	var orderID = document.getElementById('newOrderID').value;
	
	if(newQTY <= 0){alert('Action aborted. Only positive values are allowed.');return;}
	else if(newProductCode != ''){oTarget.src = '../process/process_admin_cart.php?newOrderID='+orderID+'&actionID='+p_action+'&newProductCode='+newProductCode+'&newQTY='+newQTY+'';}
	else{alert('Please enter the part number.');return;}
}


function add2ProductQ(p_output)
{
	var oTarget = document.getElementById('iframe_process');
	var newProductCode = document.getElementById('add2QCode').value;
	var newQTY = document.getElementById('add2QQTY').value;
	
	if(newProductCode != ''){oTarget.src = '../process/process_admin_productQ.php?actionID=1&productCode='+newProductCode+'&QTY='+newQTY+'&output='+p_output;}
	else{alert('Please enter the part number.');return;}
}

function add2TransferQ(p_output, p_user_id_from)
{
	var oTarget = document.getElementById('iframe_process');
	var transferProductCode = document.getElementById('transfer_product_code').value;
	var transferProductQty = document.getElementById('transfer_product_qty').value;
	var transferWhFrom = document.getElementById('transfer_wh_from').value;
	var transferWhTo = document.getElementById('transfer_wh_to').value;
	var transferProductCmt = document.getElementById('transfer_product_cmt').value;
	var userIdFrom = p_user_id_from;
	if(transferProductCode != ''){oTarget.src = '../process/process_admin_transferQ.php?actionID=1&productCode='+transferProductCode+'&productQty='+transferProductQty+'&transferWhFrom='+transferWhFrom+'&transferWhTo='+transferWhTo+'&userIdFrom='+userIdFrom+'&transfer_product_cmt='+transferProductCmt+'&output='+p_output;}
	else{alert('Please enter the part number.');return;}
}

function sendCommandUpdateOrderStatus(current_status_id, new_status_id)
{
	//rules
	//2 -> 1, 2 -> 3, 3 -> 1, 3 -> 4, 3 -> 5, 4 -> 3, 4 -> 5, 5 -> 1, 5 -> 6, 6 -> 7, 7 -> 1
	
	//set the action to 2, which is the change of Status
	
	document.getElementById('actionID').value='2';
	var oOrderID = document.getElementById('OrderID');
	var oStatusID = document.getElementById('StatusID');
	var oTrackingCode = document.getElementById('TrackingCode');
	var oPaymentMethodID = document.getElementById('PaymentMethodID');
	var oPaymentAmount = document.getElementById('PaymentAmount');
	var oPaymentRef = document.getElementById('PaymentRef');
	var oPaymentDTS = document.getElementById('PaymentDTS');
	var oOrderTotalValue = document.getElementById('OrderTotalValue');
	var oForm = document.getElementById('form_update_order');
	
	var orderBalance = oPaymentAmount.value - oOrderTotalValue.value;
		
	// 1 - CANCELLED ORDER
	if(new_status_id == 6)
	{
		//order can be cancelled only if it was on step 2,3, 4 or 5 (ID 2,3,5 or 4)
		if (current_status_id == 2 || current_status_id == 3 || current_status_id == 5 || current_status_id == 4)
		{
			var conf = confirm ('Warning : this action is irreversible, go ahead ?');
			if (conf){document.getElementById('form_update_order').submit();}
			else{oStatusID.value = current_status_id;return;}
		}
		else{alert('Error. Action is not allowed.');oStatusID.value = current_status_id; return;}
	}
	
	// 2 - WAITING FOR PAYMENT
	else if (new_status_id == 2)
	{
		alert('Action aborted. A payment has already been received.');oStatusID.value = current_status_id; return;
	}
	
	// 3 - PAYMENT RECEIVED 
	else if (new_status_id == 3)
	{
		// has to be in step 2 or 4 first (ID 2,5)
		if(current_status_id == 2 || current_status_id == 5)
		{
			//alert('DTS='+oPaymentDTS.value+' method='+oPaymentMethodID.value+' ref='+oPaymentRef.value+' payment='+oPaymentAmount.value+' total='+oOrderTotalValue.value+' balance='+orderBalance);
			
			//If payment has been taken (if DTS is != 0000-00-00 00:00:00
			if(oPaymentDTS.value != '' && oPaymentDTS.value != '0000-00-00 00:00:00')
			{
				//alert('payment taken');
				//if payment is not sufficient, DO NOT ACTION
				if (orderBalance != 0){alert('Action aborted. A payment amount is not valid.');oStatusID.value = current_status_id; return;}
				//if order is balanced, then proceed (whether it is a refund or not)
				else{oStatusID.value = new_status_id; oForm.submit();}
			}
			
			//If payment has not been taken
			else
			{
				//alert('payment NOT taken');
				//If payment method has been entered
				if(oPaymentMethodID.value != 0)
				{
					//If order balance >= 0 (balanced or overpaid) apply payment with the amount and reference
					//the order status will then be automatically changed to 3 if payment is sucessfull
					if(orderBalance >= 0)
					{
						//alert('order balanced, paiement processing...'+oPaymentMethodID.value);
						AJAXpaymentUpdate(oOrderID.value);
					}
					else{alert('Action aborted. A payment amount is not valid.');oStatusID.value = current_status_id;return;}
				}
				else{alert('Error. A payment method is mandatory.');oStatusID.value = current_status_id;return;}
			}
		}
		else{alert('Error. Action not allowed.');oStatusID.value = current_status_id;return;}
	}
	
	// 4 - WAITING FOR STOCK
	else if (new_status_id == 5)
	{	
		// has to be in step 3 and total_order_value = payment_amount (balance == 0)
		if(current_status_id == 3)
		{
			//does not let any order with negative balance. Any positive balance will be issued with a credit.
			if(orderBalance < 0){alert('Action aborted. The balance of the order is negative.');oStatusID.value = current_status_id;return;}
			else
			{
				if (orderBalance > 0){var conf = confirm ('Warning. The balance of the order is positive. A store credit of $'+ orderBalance +' will be issued to the customer. Go ahead ?');if (!conf){oStatusID.value = current_status_id;return;}}
				oStatusID.value = new_status_id; oForm.submit();
			}
		}
		else{alert('Error. Action not allowed.');oStatusID.value = current_status_id;return;}
	}
	
	// 5 - BEING PREPARED
	else if (new_status_id == 4)
	{	
		// has to be in step 3 or 4 first
		if(current_status_id == 3 || current_status_id == 5)
		{
			//does not let any order with negative balance. Any positive balance will be issued with a credit.
			if(orderBalance < 0){alert('Action aborted. The balance of the order is negative.');oStatusID.value = current_status_id;return;}
			else
			{
				if (orderBalance > 0){var conf = confirm ('Warning. The balance of the order is positive. A store credit of $'+ orderBalance +' will be issued to the customer. Go ahead ?');if (!conf){oStatusID.value = current_status_id;return;}}
				oStatusID.value = new_status_id; oForm.submit();
			}
		}
		else{alert('Error. Action not allowed.');oStatusID.value = current_status_id;return;}
	}
	
	// 6 - READY FOR DESPATCH
	else if (new_status_id == 7)
	{	
		// has to be in step 5 first
		if(current_status_id == 4)
		{
			// check if all items have been packed or not
			AJAXreadyForDespatch(oOrderID.value);
		}
		else{alert('Action not allowed. Your order has to be packed first.');oStatusID.value = current_status_id;return;}
	}
	
	// 7 - COMPLETED ORDER
	else if(new_status_id == 1) 
	{
		// has to be in step 6 first
		if(current_status_id == 7)
		{
			if (oTrackingCode.value == '')
			{
				alert('Action aborted. A shipping reference number is mandatory.');
				oStatusID.value = current_status_id; return;
			}
			else{AJAXupdateColipost(oOrderID.value);}
		}
		else{alert('Action aborted. Please go to the \'Ready for shipping\' step first.');oStatusID.value = current_status_id;return;}
	}
	
	//ELSE
	else{alert('Action not allowed.');return;}
}

function sendCommandUpdateOrderShippingAddress(p_new_shipping_id)
{
	
	document.getElementById('actionID').value='7';
	document.getElementById('ShippingAddressID').value = p_new_shipping_id;
	document.getElementById('form_update_order').submit();
}

function changeGroupId(p_menuId,p_groupId)
{
	var oForm = document.getElementById('form_update_group_id');
	document.getElementById('menu_id').value = p_menuId;
	document.getElementById('group_id').value = p_groupId;
	oForm.submit();
	return true;
}

function usernameAutofill(p_email)
{
	var oUsername = document.getElementById('shopperUsername');
	var oCopyEmailFlag = document.getElementById('copy_email');

	if (oCopyEmailFlag.status == true){oUsername.value = p_email};
}

function manageCopyFlag(p_flag_value)
{
	var oUsername = document.getElementById('shopperUsername');
	var oUserEmail = document.getElementById('shopperEmail');

	if (p_flag_value == false){oUsername.disabled = false;}
	else
	{
		oUsername.disabled = true;
		oUsername.value = oUserEmail.value;
	}
}


function changeLocation(p_new_location, p_current_url, p_original_location_value)
{
	var oForm = document.getElementById('form_change_location');
	var oOriginalLocation = document.getElementById('userWarehouseICCODE');
	var new_location_array = p_new_location.split("|");
	var new_location_id = new_location_array[0];
	var new_location_code = new_location_array[1];
	
	var p_current_url = String(p_current_url);
	var target_url_array = p_current_url.split("?");
	var target_url = target_url_array[0];
	
	if(target_url.match("admin_dashboard.php"))
	{
		document.getElementById('loc_id').value = new_location_id;
		document.getElementById('loc_code').value = new_location_code;
		oForm.action = target_url;
		oForm.submit();
		return true;
	}
	else
	{
		alert('Location change only available from Dashboard ');
		oOriginalLocation.value=p_original_location_value;
		return false;
	}
}

function calcTaxFromIncTax(obj)
{
	oTAXRate = document.getElementById(obj+'TaxRate');
	oEX = document.getElementById(obj+'PriceEx');
	oTAX = document.getElementById(obj+'TaxAmount');
	oINC = document.getElementById(obj+'PriceInc');
	oTAXRateFlag = document.getElementById('use_auto_tax_flag_'+obj);
	oTAX.disabled = true;
	oINC.value = oINC.value.replace(",",".");
	vTest = oINC.value;
	if (vTest.indexOf(".") == vTest.length-1){vTest = vTest.slice(0,vTest.length-1);}
	if (uIs2Decimal(vTest))
	{
		vEX = oINC.value / (1 + Number(oTAXRate.value)/100);
		oEX.value = vEX.toFixed(2);
		vTAX = Number(oINC.value)-vEX;
		oTAX.value = vTAX.toFixed(2);
		updateMargin();updateSaleDiscountPriceInc()
	}
	else{oEX.value = 'invalid'; oTAX.value = 'invalid';}
}

function calcTaxFromExTax(obj)
{
	oTAXRate = document.getElementById(obj+'TaxRate');
	oEX = document.getElementById(obj+'PriceEx');
	oTAX = document.getElementById(obj+'TaxAmount');
	oINC = document.getElementById(obj+'PriceInc');
	oTAXRateFlag = document.getElementById('use_auto_tax_flag_'+obj);
	oTAX.disabled = true;
	oEX.value = oEX.value.replace(",",".");
	vTest = oEX.value;
	if (vTest.indexOf(".") == vTest.length-1){vTest = vTest.slice(0,vTest.length-1);}
	
	if (uIs2Decimal(vTest))
	{
		vTAX = Number(oEX.value * oTAXRate.value/100);
		oTAX.value = vTAX.toFixed(2);
		vINC = Number(oEX.value) + vTAX;
		oINC.value = vINC.toFixed(2);
		updateMargin();updateSaleDiscountPriceInc()
	}
	else{oINC.value = 'invalid'; oTAX.value = 'invalid';}
}

function calcIncFromExAndTax(obj, field)
{
	oTAXRate = document.getElementById(obj+'TaxRate');
	oEX = document.getElementById(obj+'PriceEx');
	oTAX = document.getElementById(obj+'TaxAmount');
	oINC = document.getElementById(obj+'PriceInc');
	oINC.disabled = true;
	
	if(field == 'PriceEx')
	{
		oEX.value = oEX.value.replace(",",".");
		oTAX.value = oTAX.value.replace(",",".");
		vTestEx = oEX.value;
		vTestTax = oTAX.value;
		
		if (vTestEx.indexOf(".") == vTestEx.length-1){vTestEx = vTestEx.slice(0,vTestEx.length-1);}
		if (vTestTax.indexOf(".") == vTestTax.length-1){vTestTax = vTestTax.slice(0,vTestTax.length-1);}
		
		if (uIs2Decimal(vTestEx) && uIs2Decimal(vTestTax))
		{
			vINC = Number(oEX.value) + Number(oTAX.value);
			oINC.value = vINC.toFixed(2);
			vTAXRate = Number(oTAX.value) / Number(oEX.value) * 100;
			oTAXRate.value = vTAXRate.toFixed(2);
		}
		else{oINC.value = 'invalid';}
	}
	else if(field == 'TaxAmount')
	{
		oEX.value = oEX.value.replace(",",".");
		oTAX.value = oTAX.value.replace(",",".");
		vTestEx = oEX.value;
		vTestTax = oTAX.value;
		
		if (vTestEx.indexOf(".") == vTestEx.length-1){vTestEx = vTestEx.slice(0,vTestEx.length-1);}
		if (vTestTax.indexOf(".") == vTestTax.length-1){vTestTax = vTestTax.slice(0,vTestTax.length-1);}
		
		if (uIs2Decimal(vTestEx) && uIs2Decimal(vTestTax))
		{
			vINC = Number(oEX.value) + Number(oTAX.value);
			oINC.value = vINC.toFixed(2);
			vTAXRate = Number(oTAX.value) / Number(oEX.value) * 100;
			oTAXRate.value = vTAXRate.toFixed(2);
		}
		else{oTAXRate.value = 'invalid'; oINC.value = 'invalid';}	
	}
	
}

function handlerRef(obj)
{
	if (obj.value != '' && uIsAlphaNumericDashUnderscore(obj.value) == false)
	{
		vL = obj.value.length;
		obj.value = obj.value.slice(0,vL-1);
		alert('Invalid character.');
	}
}

function handlerBarcode(obj)
{
	if (obj.value != '' && uIsAlphaNumericDashUnderscore(obj.value) == false)
	{
		vL = obj.value.length;
		obj.value = obj.value.slice(0,vL-1);
		alert('Invalid character.');
	}
}

function handlerExTax(obj)
{
	oTAXRateFlag = document.getElementById('use_auto_tax_flag_'+obj);
	if(oTAXRateFlag.checked == true){calcTaxFromExTax(obj);updateMargin();updateSaleDiscountPriceInc()}
	else{calcIncFromExAndTax(obj,'PriceEx');updateMargin();updateSaleDiscountPriceInc()}
}

function handlerIncTax(obj)
{
	oTAXRateFlag = document.getElementById('use_auto_tax_flag_'+obj);
	if(oTAXRateFlag.checked == true){calcTaxFromIncTax(obj);updateMargin();updateSaleDiscountPriceInc()}
}

function handlerTax(obj)
{
	oTAXRateFlag = document.getElementById('use_auto_tax_flag_'+obj);
	if(oTAXRateFlag.checked == false){calcIncFromExAndTax(obj,'TaxAmount');updateMargin();updateSaleDiscountPriceInc()}
}

function updateSaleDiscountPriceInc()
{
	oSaleDiscountPriceInc = document.getElementById('discounted_price_inc');
	oDISC = document.getElementById('productSaleDiscount');
	vDISC = Number(oDISC.value);
	oEX = document.getElementById('sellPriceEx');
	oTAX = document.getElementById('sellTaxAmount');
	vSellPriceInc = Number(oEX.value)+Number(oTAX.value);
	
	vSaleDiscountPriceInc = vSellPriceInc*(100-vDISC)/100;
	oSaleDiscountPriceInc.innerHTML = " &nbsp; $"+vSaleDiscountPriceInc.toFixed(2);
}


function autoManualSwitch(obj, state)
{
	if(state == true)
	{
		oTAX = document.getElementById(obj+'TaxAmount');
		oINC = document.getElementById(obj+'PriceInc');
		oEX = document.getElementById(obj+'PriceEx');
		oINC.disabled = false;
		oTAX.disabled = true;
		
		oTAXRate = document.getElementById(obj+'TaxRate');
		oDefaultTAXRate = document.getElementById('default_tax_rate');
		vTAXRate = Number(oDefaultTAXRate.innerHTML)*100;
		oTAXRate.value = vTAXRate.toFixed(2);
		oTAX.value = oEX.value * vTAXRate/100;
		vINC = Number(oEX.value) + Number(oTAX.value);
		oINC.value = vINC.toFixed(2);
		updateMargin();updateSaleDiscountPriceInc()
	}
	else
	{
		oTAX = document.getElementById(obj+'TaxAmount');
		oINC = document.getElementById(obj+'PriceInc');
		oTAX.disabled = false;	
		oINC.disabled = true;
	}
}

function updateMargin()
{
	oMarginValue = document.getElementById('margin_value');
	oMarginPercent = document.getElementById('margin_percent');
	oCostInc = document.getElementById('costPriceInc');
	oSellEx = document.getElementById('sellPriceEx');
	vMarginVal = Number(oSellEx.value)-Number(oCostInc.value);
	oMarginValue.innerHTML = vMarginVal.toFixed(2);
	vMarginPercent = (vMarginVal/Number(oSellEx.value))*100;
	oMarginPercent.innerHTML = vMarginPercent.toFixed(2);
}

function calSellPriceWithMargin()
{
	oManualMargin = document.getElementById('manualSellMargin');
	oCostInc = document.getElementById('costPriceInc');
	oSellEx = document.getElementById('sellPriceEx');
	oSellInc = document.getElementById('sellPriceInc');
	oSellTaxAmount = document.getElementById('sellTaxAmount');
	oTAXRate = document.getElementById('sellTaxRate');
	
	vSellPriceEx = Number(oCostInc.value)/(1-Number(oManualMargin.value/100));
	oSellEx.value = vSellPriceEx.toFixed(2);
	
	if(oSellEx.value != 0)
	{
		calcTaxFromExTax('sell');
		oSellTaxAmount.disabled=false;
	}
	else{oSellEx.value=0;oSellTaxAmount.value=0;updateMargin();updateSaleDiscountPriceInc()}
}

function uIs2Decimal(vTest)
{
	var testResult = /^\d*(\.\d{1,2})?$/.test(vTest);
	return testResult;
}

function uIs2DecimalLive(vTest)
{
	if (vTest.indexOf(".") == vTest.length-1){vTest = vTest.slice(0,vTest.length-1);}
	var testResult = /^\d*(\.\d{1,2})?$/.test(vTest);
	return testResult;
}

function uIsAlphaNumericDashUnderscore(vTest)
{
	var regex=/^[0-9A-Za-z\-\_]+$/;
	var testResult = regex.test(vTest);
	return testResult;
}

function checkAll(theCheck)
{
  var f=theCheck.form;
  var chk = theCheck.checked;
  for (var i=0;i<f.elements.length;i++) {if (f.elements[i].type=='checkbox') {f.elements[i].checked=chk;}}
}
