var DISC_TYPE_OPTION = new Array(
	'CD', 'DVD'
);
var VOLUME_OPTION = new Array(
	10, 25, 50, 100, 150, 200, 250, 300, 350, 400, 500,
	1000, 1500, 2000, 2500, 3000, 4000, 5000, 10000
);
var PRINT_OPTION = new Array(
	'Thermal', '3-Color', 'Full Color'
);
var PACKAGE_OPTION = new Array(
	'Standard Jewel Case:2-Panel',
	'Standard Jewel Case:4-Panel',
	'Standard Jewel Case:8-Panel',
	'Slim Jewel Case:Case Only',
	'Slim Jewel Case:2-Panel',
	'Digi-Pak:4-Panel',
	'Digi-Pak:6-Panel',
	'Digi-Pak:4-Panel DVD Size',
	'Cardboard Pocket:2-Panel',
	'Cardboard Pocket:4-Panel',
	'Premium Amaray Box:Front Wrap',
	'Standard Amaray Box:Front Wrap',
	'White Window Sleeve',
	'C-Shell',
	'Poly Box',
	'Bulk'
);
var hits = 0	;

/*
	Do NOT change anything below this. You should know what you are doing before you start changing the code
*/
var TOTAL_DISC_TYPE = DISC_TYPE_OPTION.length;			// CD, DVD
var TOTAL_VOLUME = VOLUME_OPTION.length;				// 10, 50, .... 10000
var TOTAL_PRINT_OPTION = PRINT_OPTION.length;			// Thermal, 3-Color, Full Color
var TOTAL_PACKAGE_OPTION = PACKAGE_OPTION.length;		// See above for various package option available with inserts

var DTY_INDEX = -1;
var VOL_INDEX = -1;
var MIN_MAX_INDEX = 0;	// Default to MIN
var PRT_INDEX = -1;
var PKG_INDEX = -1;
var INS_INDEX = 0;

var pre_price = new Array(TOTAL_DISC_TYPE);
var std_price = new Array(TOTAL_DISC_TYPE);

/*
	Define the array to hold the prices. The array is a 4 dimensional array. I really mean 4.
	All Price information for each disc type, package and insert will go here.
	The price information are stored in 3 dimensional array.
	Dimension	Description		Values
	=================================
	       1			PRINTING		0 and 1. 	0 refers CD and 1 refers DVD
		  2			VOLUME		0 - 14.  Ex: 0 refers 50, 14 refers 10000
		  3			PACKAGE 		0 -
					+ INSERT
	1st dimension values: 0 and 1.
	2nd dim

*/
for (var i = 0; i < TOTAL_DISC_TYPE; i++) {
	pre_price[i] = new Array(TOTAL_VOLUME);
	std_price[i] = new Array(TOTAL_VOLUME);
	for (var j = 0; j < TOTAL_VOLUME; j++) {
		pre_price[i][j] = new Array(TOTAL_PRINT_OPTION );
		std_price[i][j] = new Array(TOTAL_PRINT_OPTION);
		for (var k = 0; k < TOTAL_PRINT_OPTION; k++) {
			pre_price[i][j][k] = new Array(TOTAL_PACKAGE_OPTION);
			std_price[i][j][k] = new Array(TOTAL_PACKAGE_OPTION);
		}
	}
}

var std_turntime = new Array(TOTAL_DISC_TYPE);
var pre_turntime = new Array(TOTAL_DISC_TYPE);

for (var i = 0; i < TOTAL_DISC_TYPE; i++) {
	std_turntime[i] = new Array(2);
	pre_turntime[i] = new Array(2);
	for (var j = 0; j < 2; j++) {
		std_turntime[i][j] = new Array(TOTAL_PRINT_OPTION );
		pre_turntime[i][j] = new Array(TOTAL_PRINT_OPTION);
		for (var k = 0; k < TOTAL_PRINT_OPTION; k++) {
			std_turntime[i][j][k] = new Array(TOTAL_PACKAGE_OPTION);
			pre_turntime[i][j][k] = new Array(TOTAL_PACKAGE_OPTION);
		}
	}
}

function submitOrder() {
	if (!validate(1)) {
		return;
	}
	var subject = document.getElementsByName('subject')[1].value;
	subject = subject.replace(/Inquiry/, "Order");
	
	var name = document.getElementsByName('name')[0].value;
	var email = document.getElementsByName('email')[0].value;
	var phone = document.getElementsByName('phone')[0].value;

	var volume = document.getElementById('disc_count').innerHTML;
	var discType = document.getElementById('disc_type').innerHTML;
	var printType = document.getElementById('print_type').innerHTML;
	var pkg = document.getElementById('package_type').innerHTML;
	var insert = document.getElementById('insert_type').innerHTML;
	
	var stdPrice = document.getElementById('std_total').innerHTML;
	var prePrice = document.getElementById('pre_total').innerHTML;

	var stdTime = document.getElementById('std_days').innerHTML;
	var preTime = document.getElementById('pre_days').innerHTML;

	var url = "/placeorder.php?subject=" + escape(subject) + '&name=' + escape(name) 
				+ '&email=' + escape(email) + '&phone=' + escape(phone)
				+ '&type=' + escape(discType) + '&volume=' + escape(volume) 
				+ '&printing=' + escape(printType) + '&package=' + escape(pkg)
				+ '&insert=' + escape(insert) + '&standard_price=' + escape(stdPrice)
				+ '&premium_price=' + escape(prePrice)
				+ '&standard_turnover_time=' + escape(stdTime) 
				+ '&premium_turnover_time=' + escape(preTime);

	var quoteForm = document.getElementsByName('quoteForm')[0];
	
	quoteForm.action = url;
	quoteForm.submit();
}

function calculateQuote()
{
	if (!validate(1)) {
		return;
	}

	var type = document.getElementsByName('type');
	var discType;
	for (var i = 0; i < type.length; i++) {
		if (type[i].checked) {
			DTY_INDEX = i;
			discType = type[i].value;
		}
	}

	var vol = document.getElementsByName('volume');
	var volume = vol[0].options[vol[0].selectedIndex].value;
	VOL_INDEX = getVolumeIndex(volume);
	if (volume < 1000) MIN_MAX_INDEX = 0;
	else MIN_MAX_INDEX = 1;

	var print = document.getElementsByName('printing');
	var printType;
	for (var i = 0; i < print.length; i++) {
		if (print[i].checked) {
			PRT_INDEX = i;
			printType = print[i].value;
		}
	}

	var pkg = document.getElementsByName('package');
	var pkge, pkgIns;
	for (var i = 0; i < pkg.length; i++) {
		if (!pkg[i].checked) continue;
		pkge = pkg[i].value;
		pkgIns = pkge;
		PKG_INDEX = i;
		break;
	}

	//alert(DTY_INDEX + '==' + VOL_INDEX + '==' + PRT_INDEX + '==' + PKG_INDEX);

	if (DTY_INDEX == -1 || VOL_INDEX == -1
			|| PRT_INDEX == -1 || PKG_INDEX == -1) {
		alert('Please select all required fields');
		return;
	}

	var ins = document.getElementsByName('insert');
	var insert;
	for (var i = 0; i < ins.length; i++) {
		if (ins[i].disabled) continue;
		insert = ins[i].value;
		pkgIns += ':' + insert;
		break;
	}
	PKG_INDEX = getPackageIndex(pkgIns);

	//alert(pkgIns + ' ***** index = ' + PKG_INDEX);

	var stdPrice = std_price[DTY_INDEX][VOL_INDEX][PRT_INDEX][PKG_INDEX];
	var prePrice = pre_price[DTY_INDEX][VOL_INDEX][PRT_INDEX][PKG_INDEX];
	var stdTurnTime = std_turntime[DTY_INDEX][MIN_MAX_INDEX][PRT_INDEX][PKG_INDEX];
	var preTurnTime = pre_turntime[DTY_INDEX][MIN_MAX_INDEX][PRT_INDEX][PKG_INDEX];

	var pre_days, std_days;
	var pre_rate, std_rate, pre_total, std_total;

	if (isX(preTurnTime)) pre_days = '-';
	else pre_days = preTurnTime + ' Days';

	if (isX(stdTurnTime)) std_days = '-';
	else std_days = stdTurnTime + ' Days';

	if (isX(prePrice)) {
		pre_rate = '-';
		pre_total = '-';
	} else {
		pre_rate = '$' + prePrice;
		pre_total = '$' + (prePrice * volume).toFixed(2);
	}

	if (isX(stdPrice)) {
		std_rate = '-';
		std_total = '-';
	} else {
		std_rate = '$' + stdPrice;
		std_total = '$' + (stdPrice * volume).toFixed(2);
	}

	document.getElementById('pre_days').innerHTML = pre_days;
	document.getElementById('std_days').innerHTML = std_days;

	document.getElementById('pre_rate').innerHTML = pre_rate;
	document.getElementById('std_rate').innerHTML = std_rate;
	document.getElementById('pre_total').innerHTML = pre_total;
	document.getElementById('std_total').innerHTML = std_total;
	
	document.getElementById('disc_count').innerHTML = volume;
	document.getElementById('disc_type').innerHTML = discType;
	document.getElementById('print_type').innerHTML = printType;
	document.getElementById('package_type').innerHTML = pkge;
	if (insert)
		document.getElementById('insert_type').innerHTML = insert;
	else
		document.getElementById('insert_type').innerHTML = '-';

	// Send the contact information for the first time
	//alert(hits);
	if (hits == 0) {
		hits = hits + 1;
		var subject = document.getElementsByName('subject')[1].value;
		var name = document.getElementsByName('name')[0].value;
		var email = document.getElementsByName('email')[0].value;
		var phone = document.getElementsByName('phone')[0].value;

		var url = "/firstcontact.php?subject=" + escape(subject) + '&name=' + escape(name) 
				+ '&email=' + escape(email) + '&phone=' + escape(phone)	
				+ '&type=' + escape(discType) + '&volume=' + escape(volume) 
				+ '&printing=' + escape(printType) + '&package=' + escape(pkge);
		if (insert) {
			url += '&insert=' + escape(insert) ;
		}
		url += '&standard_price=' + escape(std_rate) + '&premium_price=' + escape(pre_rate)
			+ '&standard_turnover_time=' + escape(std_days) 
			+ '&premium_turnover_time=' + escape(pre_days);
				
		initXMLHttp();
		if (xmlHttp == null) {
			alert("Your browser does not support AJAX!");
			return null;
		}
		xmlHttp.onreadystatechange=function () {};
		try {
			xmlHttp.open("GET", url, true);
		} catch (e) {
			alert(e.message);
		}
		xmlHttp.send(null);
	}

}

function getVolumeIndex(volume) {
	for (var i = 0; i < VOLUME_OPTION.length; i++)
		if (volume == VOLUME_OPTION[i]) return i;
	return -1;
}

function getPackageIndex(pkgIns) {
	for (var i = 0; i < PACKAGE_OPTION.length; i++)
		if (pkgIns.indexOf(PACKAGE_OPTION[i]) == 0) return i;
	return -1;
}

function isX(value) {
	if (value.indexOf('x') == 0) return true;
	return false;
}

function trim(str) {
	return str.replace( /(?:(?:^|\n)\s+|\s+(?:$|\n))/g, "");
}

function initPrices() {
	// Use Ajax calls to read the price txt file and then parse and store in the array.
	if (initialized) {
		return;
	}
	initXMLHttp();
	if (xmlHttp == null) {
		alert("Your browser does not support AJAX!");
		return null;
	}
	xmlHttp.onreadystatechange=parseData;
	url = "/orderform/prices.csv";
	//url = "prices.csv";
	try {
		xmlHttp.open("GET", url, true);
	} catch (e) {
		alert(e.message);
	}
	xmlHttp.send(null);
}

function parseData() {

	if(xmlHttp.readyState != 4) {
		return;
	}
	// Parsing the response now.
	var response = xmlHttp.responseText;
	//alert(response.length);
	var lines = response.split("\n");
	var prices, line;
	var p, group, count = 0;
	// Reading CD - Standard Price
	for (i = 0, dataLineCount = 0; i < lines.length; i++) {
		if (lines[i] == null) continue;
		line = trim(lines[i]);
		if (line.length == 0 || line.indexOf('#') == 0 || line.indexOf(',') == 0)  continue;
		// Parsing the line
		price = line.split(",");
		group = parseInt(dataLineCount/(TOTAL_VOLUME + 2), 10);	// 0, 1, 2, 3
		dataLineCount++;

		switch (group) {
			case 0:			// CD Standard Price
				if (count < TOTAL_VOLUME) {
					for (var j = 1; j < price.length;) {
						p = parseInt((j-1)/TOTAL_PRINT_OPTION, 10);
						for (var k = 0; k < TOTAL_PRINT_OPTION; k++) {
							std_price[0][count][k][p] = trim(price[j++]);
						}
					}
				} else {
					var count2 = count - TOTAL_VOLUME;
					for (var j = 1; j < price.length;) {
						p = parseInt((j-1)/TOTAL_PRINT_OPTION, 10);
						for (var k = 0; k < TOTAL_PRINT_OPTION; k++) {
							std_turntime[0][count2][k][p] = trim(price[j++]);
						}
					}
				}
				break;
			case 1:			// CD Premium Price
				if (count < TOTAL_VOLUME) {
					for (var j = 1; j < price.length;) {
						p = parseInt((j-1)/TOTAL_PRINT_OPTION, 10);
						for (var k = 0; k < TOTAL_PRINT_OPTION; k++)
							pre_price[0][count][k][p] = trim(price[j++]);
					}
				} else {
					var count2 = count - TOTAL_VOLUME;
					for (var j = 1; j < price.length;) {
						p = parseInt((j-1)/TOTAL_PRINT_OPTION, 10);
						for (var k = 0; k < TOTAL_PRINT_OPTION; k++) {
							pre_turntime[0][count2][k][p] = trim(price[j++]);
						}
					}
				}
				break;
			case 2:			// DVD Standard Price
				if (count < TOTAL_VOLUME) {
					for (var j = 1; j < price.length;) {
						p = parseInt((j-1)/TOTAL_PRINT_OPTION, 10);
						for (var k = 0; k < TOTAL_PRINT_OPTION; k++)
							std_price[1][count][k][p] = trim(price[j++]);
					}
				} else {
					var count2 = count - TOTAL_VOLUME;
					for (var j = 1; j < price.length;) {
						p = parseInt((j-1)/TOTAL_PRINT_OPTION, 10);
						for (var k = 0; k < TOTAL_PRINT_OPTION; k++) {
							std_turntime[1][count2][k][p] = trim(price[j++]);
						}
					}
				}
				break;
			case 3:			// DVD Premium Price
				if (count < TOTAL_VOLUME) {
					for (var j = 1; j < price.length;) {
						p = parseInt((j-1)/TOTAL_PRINT_OPTION, 10);
						for (var k = 0; k < TOTAL_PRINT_OPTION; k++)
							pre_price[1][count][k][p] = trim(price[j++]);
					}
				} else {
					var count2 = count - TOTAL_VOLUME;
					for (var j = 1; j < price.length;) {
						p = parseInt((j-1)/TOTAL_PRINT_OPTION, 10);
						for (var k = 0; k < TOTAL_PRINT_OPTION; k++) {
							pre_turntime[1][count2][k][p] = trim(price[j++]);
						}
					}
				}
				break;
		}
		count++;
		if (count == (TOTAL_VOLUME + 2)) count = 0;
	}
	//printPrice();
	//printTurnTime();
}

function printPrice() {
	var msg = '';
	for (var i = 0; i< TOTAL_VOLUME; i++) {
		//msg = '';
		for (var k = 0; k< TOTAL_PACKAGE_OPTION; k++) {
			for (var j = 0; j< TOTAL_PRINT_OPTION; j++) {
				msg += std_price[0][i][j][k] + ",";
			}
		}
		msg += "\n";
	}
	alert(msg);
}

function printTurnTime() {
	var msg = '';
	for (var i = 0; i< 2; i++) {
		//msg = '';
		for (var k = 0; k< TOTAL_PACKAGE_OPTION; k++) {
			for (var j = 0; j< TOTAL_PRINT_OPTION; j++) {
				msg += std_turntime[1][i][j][k] + ",";
			}
		}
		msg += "\n";
	}
	alert(msg);
}

var msxmls = new Array( "Msxml2.XMLHTTP.5.0",
				"Msxml2.XMLHTTP.4.0",
				"Msxml2.XMLHTTP.3.0",
				"Msxml2.XMLHTTP",
				"Microsoft.XMLHTTP" );
var initialized = false;
var xmlHttp;

function initXMLHttp() {
	if (xmlHttp != null) {
		return xmlHttp;
	}
	if (window.XMLHttpRequest) {
		// Firefox, Opera 8.0+, Safari
		xmlHttp = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		// Internet Explorer
		for (var i = 0; i < msxmls.length; i++) {
			try {
				xmlHttp = new ActiveXObject(msxmls[i]);
				if (xmlHttp != null) break;
			} catch(e) {}
		}
	}
}

/* This is for form validation */
function validate(index)
{
	var reqField = document.getElementsByName('name');
	if (reqField[0].value == '') {
		alert('Please enter your Name');
		return false;
	}
	reqField = document.getElementsByName('email');
	if (reqField[0].value == '') {
		alert('Please enter your Email');
		return false;
	}
	reqField = document.getElementsByName('phone');
	if (reqField[0].value == '') {
		alert('Please enter a Phone Number');
		return false;
	}

	var checked = false;
	var type = document.getElementsByName('type');
	for (var i = 0; i < type.length; i++) {
		if (type[i].checked) {
			checked = true;
			break;
		}
	}
	if (!checked) {
		if (index == 1)
			alert('Please select a disc type');
		else
			alert('Please select either Mini Disc or Business Cards');
		return false;
	}
	return true;
}