var upgradeFrom = null;
var skipSteps = {};
var prequal = false;
var shownSteps = [];

var upgrade_sources = {
	'EW-165': 'Symphonic Choirs Original',
	'EW-166': 'Complete Composers Collection'
};

function showPurchaseType(show, picker) {
	var allPurchaseTypes = [ 'full', 'ni_upgrade', 'additional', 'educational', 'expansion' ];
	for( type in allPurchaseTypes ) {
		purchaseTypeDiv = document.getElementById('purchase_'+allPurchaseTypes[type]);
		if( purchaseTypeDiv )
			purchaseTypeDiv.style.display = 'none';
	}
	document.getElementById('purchase_'+show).style.display = 'inline';

	pickerOffset = picker.offsetTop - document.getElementById('select_purchase_type').offsetTop;
	document.getElementById('purchase_type_pointer').style.top = pickerOffset + "px";

	pickerHeight = 148 - pickerOffset;
	document.getElementById('purchase_type_vert').style.height = pickerHeight + "px";

	document.getElementById('purchase_type_pointer').style.display = 'block';
}

function updateExpansionPrices() {
	var e = document.getElementById('price_EW-187');
	e.innerHTML = '$79.95';

	e = document.getElementById('price_EW-187U');
	e.innerHTML = '$79.95';
}

function updatePrices(suffix, suffix2, option, apply) {
	if( suffix == undefined )
		suffix = '';
	if( suffix2 == undefined )
		suffix2 = '';

	var products = ['EW-182', 'EW-182B', 'EW-187'];
	for( p in products ) {
		var e = document.getElementById('price_' + products[p]+suffix+suffix2);
		if( e ) {
			var price = parseFloat( options[products[p]+suffix]['price'] );
			if( option != undefined && apply != undefined ) {
				price += parseFloat( options[products[p]+suffix][option]['options'][apply]['mod'] );
			}
			e.innerHTML = '$' + commafy(price);
		}
	}
}

function showAllowedUpgrades() {
	var upgradesAllowed = null;
	if( upgradeFrom.substr(0,6) == 'EW-165' )
		upgradesAllowed = [ 'EW-182U', 'EW-182BU' ];
	if( upgradeFrom.substr(0,6) == 'EW-166' )
		upgradesAllowed = [ 'EW-182U', 'EW-182BU' ];

	if( upgradesAllowed != null ) {
		var all_upgrades = [ 'EW-182U', 'EW-182BU' ];
		for( upgrade in  all_upgrades ) {
			document.getElementById( 'upgrade_' + all_upgrades[upgrade] ).style.display = 'none';
		}
		
		for( upgrade in upgradesAllowed ) {
			// set price
			var u = upgradesAllowed[upgrade];
			var price = options[u]['list_price'];
			price += options[u]['Upgrade from']['options'][upgradeFrom]['mod'];
			if( prequal === false ) {
				if( options[u]['Pre-qualified']['options']['No'] != undefined ) 
					price += options[u]['Pre-qualified']['options']['No']['mod']
				else
					price += options[u]['Pre-qualified']['options']['N/A']['mod']
			}
			else
				price += options[u]['Pre-qualified']['options'][prequal]['mod'];

			if( document.getElementById("pdate_med").checked )
				price += options[u]['Grace period']['options']['Yes']['mod'];

			var e = document.getElementById('upgrade_price_' + u);
			if( price <= 0 )
				e.innerHTML = 'FREE';
			else
				e.innerHTML = '$' + commafy(price);
/*
			e = document.getElementById('new_upg_price_' + u);
			if( e && options[u]['July 1'] ) {
				price += options[u]['July 1']['options'][upgradeFrom]['mod'];
				if( price <= 0 )
					e.innerHTML = 'FREE';
				else
					e.innerHTML = '$' + commafy(price);
			}
*/
			document.getElementById( 'upgrade_' + upgradesAllowed[upgrade] ).style.display = '';
		}
	}
}

function showUpgradeStep( number ) {
	for( i=1; i<=5; ++i ) {
		var id = "upgrade_step_" + i;
		var e = document.getElementById( id );
		if( e ) {
			e.style.display = i==number ? "block" : "none";
		}
	}

	for( i=1; i<=4; ++i) {
		if( skipSteps[i] )
			continue;

		var id = "upgrade_complete_" + i;
		var e = document.getElementById( id );
		if( e ) {
			e.style.display = i<number ? "block" : "none";
		}
	}

	if( number == 5 ) {
		showAllowedUpgrades();
	}

	shownSteps.push( number );
}

function goBack() {
	// remove the current step
	shownSteps.pop();
	// get the previous step
	var step = shownSteps.pop();
	// undo its state
	switch( step ) {
		case 1: upgradeFrom = null; break;
		case 3: prequal = false; break;
		case 4: prequal = false; break;
	}
	showUpgradeStep( step );
}

function setText( id, text ) {
	document.getElementById( id ).innerHTML = text;
}

function skipStep( number ) {
	skipSteps[number] = true;
}

function renumberStep( step, as ) {
	setText( "upgrade_step_name_" + step, as);
}

function selectUpgradeFrom( e ) {
	upgradeFrom = e.id;
	setText( 'upgrade_from', e.id);
	showUpgradeStep( 2 );
}

function selectSerialNumber() {
	if( checkOptions() ) {
		var serial = document.getElementById("serial_number_proxy").value;
		setText('upgrade_serial', serial);
		if( upgradeFrom == 'EW-165' ) {
			renumberStep( 5, 5 );
			skipSteps = {};
			showUpgradeStep( 3 );
		}
		else {
			renumberStep( 5, 3 );
			skipStep( 3 );
			skipStep( 4 );
			showUpgradeStep( 5 );
		}
	}
}

function selectPurchaseDate() {
	var text = null;
	var prepayOption = false;
	if( document.getElementById("pdate_old").checked )
		text = document.getElementById("pdate_old_text").innerHTML;
	else if( document.getElementById("pdate_med").checked ) {
		text = document.getElementById("pdate_med_text").innerHTML;
		switch( upgradeFrom ) {
			case 'EW-165': prequal = 'EW-182U'; break;
			default: break;
		}
	}
	else if( document.getElementById("pdate_new").checked ) {
		text = document.getElementById("pdate_new_text").innerHTML;
		prepayOption = true;
	}

	setText( "upgrade_pdate", text );
	if( prepayOption ) {
		document.getElementById('prepaid_platinum').style.display = upgradeFrom=='EW-155PRO' ? 'block' : 'none';
		document.getElementById('prepaid_general').style.display = upgradeFrom=='EW-155PRO' ? 'none' : 'block';
		//showUpgradeStep( 4 );
		renumberStep( 5, 4 )
		skipStep( 4 );
		showUpgradeStep( 5 );
	}
	else {
		renumberStep( 5, 4 )
		skipStep( 4 );
		showUpgradeStep( 5 );
	}
}

function selectPrePay() {
	var text = null;
	if( document.getElementById("prepaid_none").checked )
		text = document.getElementById("prepaid_none_text").innerHTML;
	else if( document.getElementById("prepaid_other").checked ) {
		text = document.getElementById("prepaid_other_text").innerHTML;
		prequal = upgradeFrom.substr(0,6) == 'EW-160' ? 'EW-179U' : 'EW-180U';
	}
	else if( document.getElementById("prepaid_plat_std").checked ) {
		text = document.getElementById("prepaid_plat_std_text").innerHTML;
		prequal = 'EW-178U';
	}
	else if( document.getElementById("prepaid_plat_plus").checked ) {
		text = document.getElementById("prepaid_plat_plus_text").innerHTML;
		prequal = 'EW-177U';
	}

	setText( "upgrade_prepay", text );
	showUpgradeStep( 5 );
}

function restartUpgrade() {
	upgradeFrom = null;
	prequal = false;
	skipSteps = {};
	shownSteps = [];
	for( upgrade in options ) {
		options[upgrade]['price'] = options[upgrade]['list_price'];
	}
	showUpgradeStep(1);
}

function commafy(i) {
	i = i.toFixed(2);
	var re = /(-?\d+)(\d{3})/
	var num = i.toString();
	while (re.test(num)) {
		num = num.replace(re, "$1,$2")
	}
	return num;
}

function checkOptions() {
	var ser = document.getElementById('serial_number_proxy');

	if (!ser.value.match(/^\s*\d{5,}( |-)?\d{5,}( |-)?\d{5,}( |-)?\d{5,}( |-)?\d{5,}\s*$/)) {
	  alert("Please enter your current serial number, in this format:\n\n#####-#####-#####-#####-#####");
	  return false;
	}

	return true;
}

function buyOrchestraSimple( sku ) {
	document.getElementById('productid').value = sku;
	document.orderform.submit();
}

function buyOrchestra( sku, upgrade ) {

	// fill in productid for cart.php
	document.getElementById('productid').value = options[sku]['productid'];
/*
	if( sku.match(/L$/) ) {
		var upgrade_additional_field = document.getElementById("upgrade_additional");

		// default to full license
		upgrade_additional_field.name = "product_options[" + options[sku]['License Type']['classid'] + "]";
		upgrade_additional_field.value = options[sku]['License Type']['options']['Full License (delivered instantly)']['id'];
	}
*/
	if( sku.match(/AL$/) ) {
/*
		var upgrade_additional_field = document.getElementById("upgrade_additional");
		upgrade_additional_field.name = "product_options[" + options[sku]['License Type']['classid'] + "]";
		upgrade_additional_field.value = options[sku]['License Type']['options']['Additional License (requires verification)']['id'];
*/
		var serial_number_field = document.getElementById("upgrade_serial_number");
		serial_number_field.name = "product_options[" + options[sku]['Serial number']['classid'] + "]";
		serial_number_field.value = document.getElementById("auth_code_proxy").value;
	}
	else if( upgrade != null ) {

		if( upgradeFrom == null )
			upgradeFrom = upgrade;

		// fill in upgrade source
		var upgrade_from_field = document.getElementById("upgrade_option");
		upgrade_from_field.name = "product_options[" + options[sku]['Upgrade from']['classid'] + "]";
		upgrade_from_field.value = options[sku]['Upgrade from']['options'][upgradeFrom]['id'];

		if( upgradeFrom != 'EW-182' && upgradeFrom != 'EW-182U' ) {
			// serial number
			var serial_number_field = document.getElementById("upgrade_serial_number");
			serial_number_field.name = "product_options[" + options[sku]['Serial number']['classid'] + "]";
			serial_number_field.value = document.getElementById("serial_number_proxy").value;

			// prepaid/prequalified
			var prequal_field = document.getElementById("upgrade_prequalified");
			prequal_field.name = "product_options[" + options[sku]['Pre-qualified']['classid'] + "]";
			if( prequal === false ) {
				if( options[sku]['Pre-qualified']['options']['No'] != undefined ) 
					prequal_field.value = options[sku]['Pre-qualified']['options']['No']['id']
				else
					prequal_field.value = options[sku]['Pre-qualified']['options']['N/A']['id']
			}
			else
				prequal_field.value = options[sku]['Pre-qualified']['options'][prequal]['id']

			// grace period
			var grace_period_field = document.getElementById("upgrade_grace_period");
			grace_period_field.name = "product_options[" + options[sku]['Grace period']['classid'] + "]";
			if( upgradeFrom == 'EW-165' ) {
				if( document.getElementById("pdate_med").checked )
					grace_period_field.value = options[sku]['Grace period']['options']['Yes']['id'];
				else
					grace_period_field.value = options[sku]['Grace period']['options']['No']['id'];
			}
			else
				grace_period_field.value = options[sku]['Grace period']['options']['N/A']['id'];
		}
	}

	document.orderform.submit();
}
