//A few pricing values can be altered here

var dvdCost = 1.99;
var invalid = 0;

function cdCost(num){
	var i = 1.69;
	if (num > 300) i = (num > 500) ? 1.5 : 1.59;
	return i;
}

// Commit mp3 player-specific codecs to a var
var ipodAllowed = ['mp3', 'aac', 'wma'];

// Do a ton of stuff on domready
window.addEvent('domready', function() {
	if	(window.ie) {
		var sfEls = document.getElementById("nav").getElementsByTagName("li");
		for (var i=0; i<sfEls.length; i++) {
			sfEls[i].onmouseover=function() {
				this.className='';
				this.className="sfhover";
			}
			sfEls[i].onmouseout=function() {
				this.className='';
			}
		}
	}

	// Set exactly the extra space on home page
	if ($('home-top-feat')) $('home-top-feat').setStyle('height', $('home-top').getCoordinates().height + 'px');

	if ($('products')) {
		// Set up the styled check and radio buttons
		initARC('gear-enquiry', 'arcOn', 'arcOff', 'arcOn', 'arcOff');
	}

	if ($('register')) {
		$('accept-dealer-terms').addEvent('click', function(){
			$('submit').disabled = false;
			this.disabled = true;
		});
	}

	//  If the page loaded is the order page...
	if ($('order')) {

		// Set up summary value references
		var cdsTotalSize = $$('#order-details tr#total-cds td.descr strong');
		var cdsTotalCost = $$('#order-details tr#total-cds td.total');
		var codecOneName = $$('#order-details tr#total-codec-1 td strong');
		var codecOneSize = $$('#order-details tr#total-codec-1 td.descr strong');
		var codecTwoName = $$('#order-details tr#total-codec-2 td strong');
		var codecTwoSize = $$('#order-details tr#total-codec-2 td.descr strong');
		var dvdTotalSize = $$('#order-details tr#total-dvd td.descr strong');
		var dvdTotalCost = $$('#order-details tr#total-dvd td.total');
		var ipodSlctName = $$('#order-details tr#total-ipod td.descr strong');
		var ipodSlctSize = $$('#order-details tr#total-ipod td.descr strong');
		var ipodSlctCost = $$('#order-details tr#total-ipod td.total');
		var hddSlctName  = $$('#order-details tr#total-hdd td.descr strong');
		var hddSlctSize  = $$('#order-details tr#total-hdd td.descr strong');
		var hddSlctCost  = $$('#order-details tr#total-hdd td.total');
		var totalCost    = $$('#order-details tr.total td.total');

		// Set up the accordion
		var accordionToggles = $$('.ftoggle');
		var accordionStretchers = $$('.stretch');
		var myAccordion = new Accordion(accordionToggles, accordionStretchers, { opacity: false, show: 0 });

		// Set up the styled check and radio buttons
		initARC('order-form', 'arcOn', 'arcOff', 'arcOn', 'arcOff');

		// Handle step one validation (How many CDs do you want to convert?)
		var step1OK = $$('#how-many .toggle');
		// "progressToX" always alters page content and keeps the form processing
		var progressTo2 = function() {
			myAccordion.display(1);

			var numCDs = $('num-cds').value.trim();
			cdsTotalSize.setHTML(numCDs);
			cdsTotalCost.setHTML(toDollars(numCDs * cdCost(numCDs)));
		}

		// Keeps an eye on the amount of CDs inputted for conversion
		// and enables next step accordingly
		function handleCDs(event) {
			if (!isNaN(this.value) && this.value > 49 && this.value.indexOf('.') == -1) {
				step1OK.addEvent('click', progressTo2).setOpacity(1);
			}
			else {
				step1OK.removeEvent('click', progressTo2).setOpacity(.3);
			}
		}

		// Add the 'check if enough CDs' handler
		$('num-cds').addEvent('keyup', handleCDs);
		// Trap the enter key to disable accidental form submission
		$('num-cds').addEvent('keypress', function(evt) {
			checkKey = new Event(evt)
			return (checkKey.key == 'enter') ? checkKey.preventDefault() : checkKey.key;
		}.bind(this));

		// Handle step two validation (Select your digital library mediums)
		var step2OK = $$('#med-slct .toggle');
		var progressTo3 = function() {
			myAccordion.display(2);
			if ($('med-ipod').checked && !($('med-dvd').checked || $('med-hdd').checked)) {
				$$('fieldset#out-opts .info').hideThis('block');
				$$('fieldset#out-opts .rest').hideThis();
			}
			else {
				$$('fieldset#out-opts .info').hideThis();
				$$('fieldset#out-opts .rest').hideThis('block');
			}

			if (!$('med-dvd').checked) {
				$('digi-dvds').hideThis();
				$('total-dvd').hideThis();
			}
			else {
				$('digi-dvds').hideThis('block'); 
				$('total-dvd').hideThis('table-row');
			}

			if (!$('med-hdd').checked) {
				$('total-hdd').hideThis();
			}
			else {
				$('total-hdd').hideThis('table-row');
			}

			if (!$('med-ipod').checked) {
				$('total-ipod').hideThis();
			}
			else {
				$('total-ipod').hideThis('table-row'); 
			}
		}

		$$('#med-slct label').addEvent('click', function(){
			if (checkChecked('med-slct') > 0) {
				step2OK.addEvent('click', progressTo3).setOpacity(1);
			}
			else {
				step2OK.removeEvent('click', progressTo3).setOpacity(.3);
			}
		});

		// Handle step three validation (Select your digital formats)
		var step3OK = $$('#out-opts .toggle');
		var progressTo4 = function(){
			myAccordion.display(whereNext());

			var x = 0;

			$$('#out-opts input').forEach(function(e){
				if (e.checked) {
					if (x < 1){
						codecOneName.setHTML(e.id.substring(6).toUpperCase());
						codecOneSize.setHTML(calculate(e.id.substring(6)) + ' GB');
						x++;
					}
					else {
						codecTwoName.setHTML(e.id.substring(6).toUpperCase());
						codecTwoSize.setHTML(calculate(e.id.substring(6)) + ' GB');
						x++;
					}
				}
			});

			if (x == 1) $('total-codec-2').hideThis()
			else $('total-codec-2').hideThis('table-row');

			if ($('med-dvd').checked){
				$('cdsToDVD').value = dvdsNeeded;
				dvdTotalSize.setHTML(dvdsNeeded);
				dvdTotalCost.setHTML(toDollars(dvdsNeeded * dvdCost));
			}

			$('totalGBs').value = codecOneSize + codecTwoSize;
			if (whereNext() == 5) sumUp();
		}

		$$('#out-opts label').addEvent('click', function(){
			if (checkChecked('out-opts') > 0) {
				step3OK.addEvent('click', progressTo4).setOpacity(1);
			}
			else {
				step3OK.removeEvent('click', progressTo4).setOpacity(.3);
			}
		});

		// Handle step four validation (Select a new NAS drive)
		var step4OK = $$('#hdd-slct .toggle');
		var progressTo5 = function() {
			if ($('med-ipod').checked) myAccordion.display(4)
			else {
				myAccordion.display(5);
				sumUp();
			}

			hddSlctName.setHTML(gear[slctdItem].name);
			//hddSlctSize.setHTML(gear[slctdItem].size + "GB");
			hddSlctCost.setHTML(toDollars(gear[slctdItem].cost));
			if (whereNext() == 5) sumUp();
			step4OK.removeEvent('click', progressTo5).setOpacity(.3);
		}
		$$('#hdd-slct label').addEvent('click', function(){
				step4OK.addEvent('click', progressTo5).setOpacity(1);
		});

		// Handle step five validation (Select a new mp3 device)
		var step5OK = $$('#ipod-slct .toggle');
		var progressTo6 = function(){
			ipodSlctName.setHTML(gear[slctdItem].name);
			//ipodSlctSize.setHTML(gear[slctdItem].size + "GB");
			ipodSlctCost.setHTML(toDollars(gear[slctdItem].cost));
			myAccordion.display(5);
			sumUp();
			step5OK.removeEvent('click', progressTo6).setOpacity(.3);
		}
		$$('#ipod-slct label').addEvent('click', function(){
				step5OK.addEvent('click', progressTo6).setOpacity(1);
		});

		// Handle step six (Summary and details)
		var step6OK = $$('#details .toggle');
		var progressToFin = function(){
			var detailsNote = 'You\'re all done, submitting your order';

			if (detailsComplete()) {
				// Validate email, submit if OK
				if (/^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i.test($('details-email').value)) {
					if (invalid == 0) {
						detailsNote = 'Your details';
					}
					else {
						$('order-form').submit();
					}
				}
				else {
					detailsNote = 'That email <span style="color: red">is invalid</span>';
					$('details-email').focus();
					var invalid = 1;
				}
			}
			else detailsNote = 'Your details <span style="color: red">are incomplete</span>';
			$$('#details-form h3').setHTML(detailsNote);
			var invalid = 1;
		}

		$$('#details input').forEach(function(el){
			el.addEvent('blur', function(){
				detailsComplete();
			});
		});

		$$('#details label').addEvent('click', function(){
			if (checkChecked('accept-terms') > 0) {
				step6OK.addEvent('click', progressToFin).setOpacity(1);
			}
			else {
				step6OK.removeEvent('click', progressToFin).setOpacity(.3);
			}
		});

		// Step navigation
		$$('.backTo1').addEvent('click', function(){cleanForBack(0)});
		$$('.backTo2').addEvent('click', function(){cleanForBack(1)});
		$$('.backTo3').addEvent('click', function(){myAccordion.display(2)});
		$$('.backTo4').addEvent('click', function(){myAccordion.display(whereNext())});

		function cleanForBack(where){
			$$('#out-opts label').forEach(function(e){
				if ($(e.htmlFor).checked) toggleLabelStyle('order-form', e, 'arcOn', 'arcOff');
			});
			step3OK.removeEvent('click', progressTo4).setOpacity(.3);
			step4OK.removeEvent('click', progressTo5).setOpacity(.3);
			dvdTotalCost.setHTML('');
			ipodSlctCost.setHTML('');
			hddSlctCost.setHTML('');
			myAccordion.display(where);
		}

		function whereNext() {
			if ($('med-hdd').checked){
				return 3;
			}
			else if ($('med-ipod').checked){
				return 4;
			}
			else {
				return 5;
			}
		}

		// Toggle terms stuff
		var termsBox = $('terms');
		var toggleTerms = new Fx.Style(termsBox, 'height', {duration: 500});

		$$('.showHideTerms').addEvent('click', function(){
			(termsBox.getStyle('height').toInt() > 0) ? toggleTerms.start(0) : toggleTerms.start(100);
			return false;
		});

		// Set up page
		termsBox.setStyle('height', 0);
		$$('.toggle').setOpacity(.3);
		$('num-cds').focus();

		window.addEvent('beforeunload', function() {
			if (checkChecked('accept-terms') < 0) event.returnValue = "";
		});

		window.addEvent('load', function(){
			$('order').setStyle('overflow', 'auto');
			$('overlay').setStyle('display', 'none');
		});
		(function(){ $('overlay').setStyle('display', 'none'); }).delay(3000); // just in case
	}

});


// Function to cycle through all input elements and tally checked ones
// This is used to both limit maximum selections and return a count
function checkChecked(grp) {
	var boxcount = new Array();
	var inputs = $$('input');
	var result = true;

	for (var i in inputs) {
		if (inputs[i].type == 'checkbox' && inputs[i].checked) {
			var chkgrp = inputs[i].getAttribute('rel');

			if (!boxcount[chkgrp]) boxcount[chkgrp] = 0;

			if (++boxcount[chkgrp] >= 2) {
				result = (chkgrp == 'med-slct') ? true : false;
			}
		}
	}
	return (grp) ? boxcount[grp] : result;
}


// The function that calculates the CD to codec conversion
function calculate(cFormat, which) {
	var dvdSize, storageSize, dvdCount, neededSpace, iVal;

	// Get the entered number of audio CDs and tidy it up
	cdCount = $('num-cds').value.trim().toInt();
	// Set bitrate, currently only MP3 and AAC are bit-rate dependant
	cBitRate = (cFormat == 'mp3') ? 320 : 192;
	// The size of archive DVD, currently set at a standard DVD (4.7GB) less overhead
	dvdSize = 4;

	// Step through each possible codec until passed codec is matched and calculate appropriately.
	if (ipodAllowed.test(cFormat)) {
		storageSize = (cdCount * 80 * 60 * cBitRate) / 8 / 1024 / 1024;
	}
	else if (cFormat == 'wma') {
		storageSize = cdCount * 800 * 0.6 / 1024;
	}
	else if (cFormat == 'flac') {
		storageSize = cdCount * 800 * 0.58 / 1024;
	}
	else if (cFormat == 'wav') {
		storageSize = cdCount * 800 / 1024;
	}

	neededSpace = ((storageSize+0.05)*10);
	iVal = parseInt(neededSpace);
	storageSize = iVal/10;
	dvdCount = parseInt(storageSize/dvdSize) + 1;

	// Decide what should be returned depending on function call.
	// Either DVDs required or space required.
	return (which) ? dvdCount : storageSize.toInt();
}


// convert number to dollar value (string)
function toDollars(n) {
/*	var s = "" + Math.round(n * 100) / 100
	var i = s.indexOf('.')
	if (i < 0) return s + ".00"
	var t = s.substring(0, i + 1) + s.substring(i + 1, i + 3)
	if (i + 2 == s.length) t += "0";
	return t; */
	return '$' + parseFloat(n).toFixed(2);
}


// Calculate order total
function sumUp() {
	var wait = function(){
		$('order-totals').innerHTML = '';
		var orderTotal = 0;

		$$('#order-details tbody tr td.total').forEach(function(td){
			if (parseFloat(td.innerHTML.substring(1))) {
				orderTotal += parseFloat(td.innerHTML.substring(1));
			}
		});

		$('order-totals').innerHTML = toDollars(orderTotal);
		$('details-fname').focus();
	}.delay(1500, this);
}

function detailsComplete() {
	var r = true;
	$$('#details input').forEach(function(e){
		if (e.type == 'text' && e.value == '') {
			r = false;
		}
		else {
			$$('#details-form h3').setHTML('Your details');
			invalid == 0;
		}
	});
	if ($('details-address').value == '') r = false
	else {
		$$('#details-form h3').setHTML('Your details');
		invalid == 0;
	}
 
	return r;
}

function isNumberKey(evt){
	var charCode = (evt.which) ? evt.which : event.keyCode;
	if (charCode > 31 && (charCode < 48 || charCode > 57))
	return false;
	return true;
}

Element.extend({
	hideThis: function(show) {
		if (show != null) {
			if (show == 'table-row' && window.ie) show = 'block';
			this.setStyle('display', show);
		}
		else {
			this.setStyle('display', 'none');
		}
		return this;
	}
});

function device(name, size, cost, dscr, thmb) {
	this.name = name;
	this.size = size;
	this.cost = cost;
	this.dscr = dscr;
	this.thmb = thmb;
}

// Hash table, direct access to data
// gear["item-id"] = new device("item Name", spec, price, "item Description", "thumbnail.gif");

var gear = new Array();

