// JavaScript Document

var diskFormatChoices = new Array();
diskFormatChoices[0] = new Array('CD-R', 'cdr', 24, '1:2.5,25:1.25,100:0.8,250:0.75,500:0.7,1000:.51,2500:0.43,5000:0.35,7500:0.31,10000:0.29,25000:0.26,50000:0.25');
diskFormatChoices[1] = new Array('Mini CD', 'minicd',18);
diskFormatChoices[2] = new Array('Shaped CD', 'shapedcd',19);	
diskFormatChoices[3] = new Array('DVD-R / DVD 5', 'dvd', 1);
diskFormatChoices[4] = new Array('Mini DVD', 'minidvd', 23);
diskFormatChoices[5] = new Array('Shaped DVD', 'shapeddvd', 22);
diskFormatChoices[6] = new Array('Dual Layer DVD+R / DVD 9', 'dualdvd', 21);
diskFormatChoices[7] = new Array('Double Sided DVD 10', 'doubledvd', 20);

/* Note the choices display is currently hard coded into the input form */
diskPrintingChoices = new Array();
diskPrintingChoices[0] = new Array('None','9', 9);
diskPrintingChoices[1] = new Array('1-2 Color','10', 10);
diskPrintingChoices[2] = new Array('Full Color','11', 11);


var diskPackagingChoices = new Array();
diskPackagingChoices[0] = new Array('None', 'none', 12);
diskPackagingChoices[1] = new Array('White Window Paper Sleeve', 'white', 6);
diskPackagingChoices[2] = new Array('Clear Poly Sleeve', 'clear', 5);
diskPackagingChoices[3] = new Array('Slimline Jewel Case', 'slimjewel', 1);
diskPackagingChoices[4] = new Array('Jewel Case', 'jewel', 2);
diskPackagingChoices[5] = new Array('Clam Shell', 'clam',3);
diskPackagingChoices[6] = new Array('DVD Amaray Case Cover', 'amaray', 7);
diskPackagingChoices[7] = new Array('Double DVD Amaray Case Cover', 'dblamary', 8);
diskPackagingChoices[8] = new Array('Mini or Shaped Sleeve', 'minisleeve', 4);
diskPackagingChoices[9] = new Array('5 in Cardstock Sleeve','card', 16);

var diskInsertChoices = new Array();
diskInsertChoices[0] = new Array('None','none', 19);
diskInsertChoices[1] = new Array('2 Panel Insert','2panel', 14);
diskInsertChoices[2] = new Array('4 Panel Insert','4panel', 15);
diskInsertChoices[3] = new Array('8 Panel Booklet','8panel', 20);
diskInsertChoices[4] = new Array('DVD Amaray Case Cover','amaraycover', 17);
diskInsertChoices[5] = new Array('DVD Amaray Insert 2 panel','amarayinsert', 18);

var diskQuantity = 0;
var diskType = '';
var diskFormat = '';
var diskPackaging = '';
var diskPrinting = '';
var diskInsert = '';
var diskBarCodeOpt = 0;
var diskShrinkWrapOpt = 0;
var unitCost = 0;
var totalCost = 0;


var diskFormatOpts = new Array();
var diskPackagingOpts = new Array();
var diskInsertOpts = new Array();
var diskMiscOpts = new Array();

function getProductInfo (key, productArray, prodIndex) {
	/* Retrieves product info from given nested array whose inside array's second value matches key and the returns the array field with index prodIndex  */
	var prodInfo; 
	var prodKey = '';
	var prodResult = 0;
	
	for (var i = 0; i < productArray.length; i++) {
		prodInfo = productArray[i];
		prodKey = prodInfo[1];
		if (prodKey == key) {
			prodResult = prodInfo[prodIndex];		
		}
	}
	return prodResult; 
}

function computeProductId () {
	/* computes product id from cart based on disk type and format */
	var prodId = getProductInfo(diskFormat, diskFormatChoices, 2);
	
	return prodId;
}

function computePackageId() {
	/* Retrieves Option Id from the array */
	var packId = getProductInfo(diskPackaging, diskPackagingChoices, 2);
	
	return packId; 
	
}

function computeInsertId () {
	/* Retrieves Option Id from the array */
	var insertId = getProductInfo(diskInsert, diskInsertChoices, 2);
	
	return insertId;
}

function insertFormElements () {
	
	/* Displays note to user to wait while the system processes order */
	shopDisplayOrder();
	
	/*Inserts the required form fields so that Zen Cart will add the data to the shopping cart */ 
	var productid = computeProductId();
	var idStr = '';
	
	if (productid > 0) {
		idStr = '<input type="text" name="products_id" value="' + productid + '" />';
	}
	
	var packageid = computePackageId(); 
	var packageStr = '';
	if (packageid > 0) {
		packageStr = '<input type="text" name="id[1]" value="' + packageid + '" />';
	}
	
	var insertid = computeInsertId();
	var insertStr = '';
	if (insertid > 0) {
		insertStr = '<input type="text" name="id[6]" value="' + insertid + '" />';
	}
	
	var barcodeStr = '';
	if (diskBarCodeOpt > 0) {
		barcodeStr = '<input type="checkbox" name="id[7][21]" value="21" id="attrib-7-21" checked="checked"/>';
	}
	
	var shrinkwrapStr = '';
	if (diskShrinkWrapOpt > 0) {
		shrinkwrapStr = '<input type="checkbox" name="id[4][13]" value="13" id="attrib-4-13" checked="checked"/>';	
	}
	
	var formStr = '';
	
	formStr = idStr + packageStr + insertStr + barcodeStr + shrinkwrapStr;
	
	document.getElementById('shop-tab-6').innerHTML = formStr;
	
	document.getElementById('order_wizard_form').submit();
	
}

/* summary of order text, 
	0 - quantity 
	1 - disk format 
	2 - printing 
	3 - Packaging 
	4 - inserts 
	5 - bar code
	6 - shrink wrap 
	*/
var summary = new Array('','','','','','',''); 

function setSummary () {
	/* Set the summary text to display selections as the wizard works through the steps */	
	var summaryStr = '';

	for (var i = 0; i < 7; i++) {
		if (summary[i]) {
			summaryStr = summaryStr + summary[i] + '<br />';	
		}
	}

	document.getElementById('shop-summary').innerHTML = summaryStr;
	
	/* computeFeatureCost();*/
}

function setDiskQuantity () {
	/* Stores entered disk Quantity in global variable */ 
	var quant = document.getElementById('shop-diskQuantity');

	if (quant) {
		diskQuantity = quant.value;	
		/* rechecks to see if the DVD 10 option is in play */
		setDisk(diskType);
		summary[0] = 'Quantity:&nbsp;' + diskQuantity; 
		setSummary();
	}	
}




function setDiskPrinting (val) {
	/* Reocords the Printing Values as they are entered */
	diskPrinting = val;
	
	var printStr = 'Disk Printing:&nbsp;';

	printStr = printStr + getProductInfo(val, diskPrintingChoices, 0);
	
	summary[2] = printStr;
	
	setSummary();
		
}

function setPackaging (format) {
	
	/* Reset Packaging every time the selection list may change, Maybe be smart about this and check setting to avaibale options ????*/ 
	diskPackaging = '';
	diskPackagingOpts = new Array();
	setSummary();
	
	if (format == 'minicd' || format == 'minidvd' || format == 'shapedcd' || format == 'shapeddvd') {
		diskPackagingOpts = new Array(0, 8);
	}
	else {
		if (diskQuantity >= 100) {
			diskPackagingOpts = new Array(0, 1, 2, 3, 4, 5, 6, 7, 9);
		}
		else {
			diskPackagingOpts = new Array(0, 1, 2, 3, 4, 5, 6, 7);
		}
	}
	
	if (diskPackagingOpts.length > 0) {
	
		var Str = '<table><tr><td colspan="3"><h5><u>Disk Packaging</u></h5></td></tr>';
		var Opt; 
		var index;
		
		for (var i = 0; i < diskPackagingOpts.length; i++) {
			index = diskPackagingOpts[i];
			Opt = diskPackagingChoices[index];
			Str = Str + '<tr><td>&nbsp;&nbsp;</td><td>' + Opt[0] + '</td><td><input type="radio" name="pack" value="' + Opt[1] + '" onclick="setDiskPackage(this.value, 1);" /></td></tr>';	
		}
		
		var Str = Str + '</table>';
	
		document.getElementById('shop-packaging').innerHTML = Str;
		
	}
}

function setDiskPackage (val, interactive) {
		
	var org = false;
	
	if (interactive === undefined) {
		interactive = false;	
	}
	
	
	if ((diskPackaging == '' || diskPackaging == 'none') && interactive) {
		org = true;	
	}	
		
	diskPackaging = val;
	
	var packStr = '';
	
	var packOpts = diskPackagingChoices;
	var packOpt;
	
	for (var i = 0; i < packOpts.length; i++) {
		packOpt = packOpts[i];
		if (val == packOpt[1]) {
			packStr = packOpt[0];	
		}
	}
	
	summary[3] = 'Packaging:&nbsp;' + packStr;
	
    setDiskInserts(val);
	setMiscOpts(val);
	
	setSummary();
	
	if (org) {
		shopDisplayTab('3','4');	
	}
}


function setDiskInserts (package) {
	
	diskInsert = '';
	diskInsertOpts = new Array();
	summary[4] = '';
	
	if (package == 'none' || package == 'minisleeve' || package == 'white' || package == 'clear' || package == 'clam' || package == 'card' || diskQuantity < 100) {
		diskInsertOpts = new Array();
	}
	else if (package == 'slimjewel') {
		diskInsertOpts = new Array(0,1,2);
	}
	else if (package == 'jewel') {
		diskInsertOpts = new Array(0,1,2,3);
	}
	else if (package == 'amaray' || package == 'dblamary') {
		if (diskQuantity < 100) { 
			diskInsertOpts = new Array(0,5);
		}
		else {
			diskInsertOpts = new Array(0,4,5);	
		}
	}
	
	var Str = 'No insert options available for the selected package or the order quantity is below the 100 minimum required for certain insert options. ';
	
	if (diskInsertOpts.length > 0) {
	    
		Str = '<table><tr><td colspan="2"><h5><strong>Disk Insert</strong></h5></td></tr>';
		var Opt;
		var index;
		
		for (var i = 0; i < diskInsertOpts.length; i++) {
			index = diskInsertOpts[i];
			Opt = diskInsertChoices[index];
			Str = Str + '<tr><td>&nbsp;&nbsp;</td><td>' + Opt[0] + '</td><td><input type="radio" name="insert" value="' + Opt[1] + '" onchange="setDiskInsert(this.value, 1);" /></td></tr>';	
		}
		
		var Str = Str + '</table>';
	}
	
	document.getElementById('shop-insert').innerHTML = Str;	
}

function setDiskInsert (val, interactive) {
		
	var org = false;
	
	if (interactive === undefined) {
		interactive = false;	
	}
	
	if (diskInsert == '' && interactive) {
		org = true;	
	}

 	diskInsert = val;
	
	var Opts = diskInsertChoices;
	var Opt;
	var Str = '';
	for (var i = 0; i < Opts.length; i++) {
		Opt = Opts[i];
		if (val == Opt[1]) {
			Str = Opt[0];	
		}
	}
	
	if (val) {
		summary[4] = 'Insert:&nbsp;' + Str;
	}
	else {
		summary[4] = '';
	}
	setSummary();
	
	if (org) {
		shopDisplayTab('4','5');	
	}
}




function setMiscOpts (package) {

	/* Reset Misc Options */
	diskBarCodeOpt = 0;
	summary[5] = '';
	diskShrinkWrapOpt = 0;	
	summary[6] = '';
	
	var str = '';
	
	if (package == 'none' || package == 'minisleeve' || package == 'white' || package == 'clear' || package == 'clam' || package == 'card') {
		str = 'No additional options are available for the selected package type';	
	}
	else {
		str = '<table><tr><td colspan="3"><h5><u>Extra Options</u></h5></td></tr>';
		str = str + '<tr><td>&nbsp;&nbsp;</td><td>Bar Code Spine Label</td><td><input type="checkbox" name="barcode" onclick="setBarcodeOpt();"/></td></tr>';
		str = str + '<tr><td>&nbsp;&nbsp;</td><td>Shrinkwrap / Overwrap</td><td><input type="checkbox" name="shrinkwrap" onclick="setShrinkWrapOpt();"/></td></tr>';
		str = str + '</table>';
	}
	
	document.getElementById('shop-misc').innerHTML = str;
}


function setDisk (disk) {
	/* Sets the disk format and displays the appropriate disk format options */
	diskType = disk;
	
	var htmlStr = '';
	
	var formats = DiskFormats(disk);
	
	if (formats.length > 0) {
	
		var htmlStr = '<table><tr><td colspan="3"><h5><u>Disk Format</u></h5></td></tr>';
	
		var opts; 
		var optStr;
		var index; 
		
		for (var i=0; i < formats.length; i++) {
			
			index = formats[i];
			var opts = diskFormatChoices[index];
			var optStr = '<tr><td>' + opts[0] + '</td><td><input type="radio" name="diskformat" value="'+opts[1]+'" onclick="setDiskFormat(\''+ opts[1] + '\', 1)"/></td></tr>';
		
			htmlStr = htmlStr + optStr;
		}
	
		htmlStr = htmlStr + '</table>';
	
	}
	
	var formatHtmlObj = document.getElementById('shop-diskFormat');
	
	formatHtmlObj.innerHTML = htmlStr;
	
	setDiskFormat('');
}

function setDiskFormat (format, interactive) {
	
	var org = false;
	
	if (interactive === undefined) {
		interactive = false;	
	}
	
	if (diskFormat == '' && interactive) {
		org = true;	
	}
	
	/* Stores chosen disk Format in global variable */
	diskFormat = format;
	
	/* Set the summary string */
	summary[1] = 'Disk Format:&nbsp;';
	var formatStr = '';
	
	formatStr = getProductInfo(format,diskFormatChoices,0);
	
	summary[1] = summary[1] + formatStr;

	setPackaging(format);
	setDiskPackage('none');
	setDiskInserts('none');
	setMiscOpts('none');	
	setSummary();
	
	if (org) {
		shopDisplayTab('1','2');	
	}
}

function DiskFormats (diskType) {
	/* Returns the format selections based on the disk type chosen */ 
	var formats = new Array();
	
	if (diskType == 'cdr') {
		diskFormatOpts = new Array(0, 1, 2)
	}
	else if (diskType == 'dvd') {
		if (diskQuantity > 999) {
			diskFormatOpts = new Array(3,4,5,6,7);
		}
		else {
			diskFormatOpts = new Array(3,4,5,6);
		}
	}
	
	return diskFormatOpts;
}


function shopDisplayTab(curTab, nextTab) {
	/* Swaps tabs that are currently displayed */
	document.getElementById('shop-tab-'+ nextTab).style.left = '0px';
	document.getElementById('shop-tab-'+ curTab).style.left = '-9999px';
}

function shopDisplayOrder() {
	/* Displays tab 7, which asks user not to do anything as the order is being processed */
	
	for (var i = 1; i < 7; i++) {
		document.getElementById('shop-tab-'+ i).style.left = '-9999px';
	}
	
	document.getElementById('shop-tab-7').style.left = '0px';
}


function setBarcodeOpt (val) {
	
	if (diskBarCodeOpt == 0) {
		diskBarCodeOpt = 1;	
		summary[5] = 'Bar Code Spline Label:&nbsp; Yes';
	}
	else {
		diskBarCodeOpt = 0;	
		summary[5] = '';
	}
	setSummary();
}

function setShrinkWrapOpt () {
	
	if (diskShrinkWrapOpt == 0) {
		diskShrinkWrapOpt = 1;	
		summary[6] = 'Shrink Wrap:&nbsp; Yes';
	}
	else {
		diskShrinkWrapOpt = 0;	
		summary[6] = '';
	}
	setSummary();
}

function computeFeatureCost (key, infoArray) {
	/* retrieves the pricing information from the product info, then extracts the price based on the current diskQuantity, format is "ct:price,ct:price" */
	var priceInfo = getProductInfo(key, infoArray, 3);
	
	var priceComponents = new Array();
	
	if (isNaN(priceInfo)) {
		priceCompoenents = priceInfo.split(',');
	}
	
	//alert('Price Components:' + priceComponents.length);
	
	var price = 0;
	
    for (var i = 0; i < priceComponents.length; i++) {
		var priceElements = priceComponent.split(':');
		var priceCt = priceElements[0];
		var priceCost = priceElements[1];
		
		if (diskQuantity >= priceCt) {
			price = priceCost;	
		}
	}
	
	return price;
	
}
function computeDiskCost () {

	var formatCost = computeFeatureCost(diskFormat, diskFormatChoices);
	
	alert('Format Cost:' + formatCost);
	
	
	
}