
//***********************************************************
// 	OBJECTS                                             *
//***********************************************************

function bike() {
	this.familyId = null;
	this.familyTitle = null;
	this.name = null;
	this.copy = null;
	this.msrp = null;
	this.colors = new Array();
	this.colorFams = new Array();
	this.stdWheel = null;
	this.optWheelDesc = null;
	this.optWheelPrice = 0;
	this.toString = function() {
		var outString = "";
		outString =  "----------------------------------------------------<br>";
		outString += "Family ID:       " + this.familyId + "<br>";
		outString += "Family Title:    " + this.familyTitle + "<br>";
		outString += "Bike Name:       " + this.name + "<br>";
		outString += "Bike Copy:       " + this.copy + "<br>";
		outString += "MSRP:            " + this.msrp + "<br>";
		outString += "Standard Wheel:  " + this.stdWheel + "<br>";
		outString += "Wheel Opt Desc:  " + this.optWheelDesc + "<br>";
		outString += "Wheel Opt Price: " + this.optWheelPrice + "<br>";
		for ( z = 0; z < this.colors.length; z++ ){
			outString += "    " + this.colors[z].colorCode + ", " + this.colors[z].name + ", " + this.colors[z].price + "<br>";
		}
		return outString;
	}
}

function colorOption() {
	this.colorCode = null;
	this.name = null;	 // Vivid Black
	this.family = null;
	this.price = 0;
}

function colorFamily() {
	this.id = null;  // matches color family on colorOption
	this.bikePrice = 0;
}


//***********************************************************
// 	END OBJECTS                                         *
//***********************************************************
//***********************************************************
//      DECLARE GLOBAL VARIABLES                            *
//***********************************************************
var bikes = new Array();
var selectedBikeIndex = 0;
var selectedColorIndex = 0;
var selectedWheelIndex = 0;
var currentBasePrice = 0;
var currentColorPrice = 0;
var currentWheelPrice = 0;
var financedAmount = 0;
var apr = 6.49;
var months = 72;
var tradeIn = 0;
var downPay = 0;
var motorClothes = 0;
var genuineAccessories = 0;
//***********************************************************
//      END GLOBAL VARIABLES                                *
//***********************************************************

function initApp(jspBikeModel) { 
	
	
	if(findInitSelectedBike(jspBikeModel))
	{
		//assign color prices on bikes derived from color family price and bike price
		deriveColorCosts();
	
		drawBikeSelector();
	
		drawColorSelector();
	
		drawWheelSelector();
	
		selectModel();
		
	}
	
	
}

//***********************************************************
//      BEGIN USER GESTURES                                 *
//***********************************************************


function findInitSelectedBike(modelName)
{
	
	if(modelName != "empty")
	{
		var bikePos = findBikePos(modelName);
	
		selectedBikeIndex = bikePos;           
           	currentBasePrice = bikes[bikePos].msrp;
          	currentColorPrice = bikes[bikePos].colors[0].price;  
		
	}
	return true;		
}

function findBikePos(modelName)
{
	var counter = 0;
	var found = false;
	
	while(counter != bikes.length)
	{		
		if(bikes[counter].name == modelName)
		{			
			 return counter;			
		}			
		
		counter ++;
	}		
		return 0;
}


function selectModel() {
	// set the global bike index
	var selectorElem = document.getElementById("bikeSelectorDD");
	var valueElem = document.getElementById("pgApr");
	selectedBikeIndex = selectorElem.value;
	document.getElementById("pgApr").options.length = 0;
	

		document.getElementById('paymentAmountSpan').innerHTML = "";	
		document.getElementById("pgApr").options.length = 0;
		document.getElementById("pgApr").options[0]=new Option("9.49", "9.49", true, false)
		document.getElementById("pgApr").options[1]=new Option("10.49", "10.49", false, false)
		document.getElementById("pgApr").options[2]=new Option("11.49", "11.49", false, false)
		document.getElementById("pgApr").options[3]=new Option("12.49", "12.49", false, false)
		document.getElementById("pgApr").options[4]=new Option("13.49", "13.49", false, false)
		document.getElementById("pgApr").options[5]=new Option("14.49", "14.49", false, false)
		document.getElementById("pgApr").options[6]=new Option("15.49", "15.49", false, false)
		document.getElementById("pgApr").options[7]=new Option("16.49", "16.49", false, false)
		document.getElementById("pgApr").options[8]=new Option("17.49", "17.49", false, false)
	

		document.getElementById('aprSpan').innerHTML = "9.49";
		document.getElementById('termSpan').innerHTML = "72";
	
	
	//set base bike price
	currentBasePrice = bikes[selectedBikeIndex].msrp;
	
	//bike selector needs to be re-drawn in case users selects non-bike option
	drawBikeSelector();
	
	//draw color selector
	selectedColorIndex = 0;
	drawColorSelector();

	//draw wheel selector
	selectedWheelIndex = 0;  //0 = standard, 1 = option
	drawWheelSelector();

	//set default financing values
	updateFinancedAmount();

	//recalulate payment
	//updatePaymentAmount();		
	
	updateBikeHeaderImage();
	
	updateBikeImage();
	drawTermLenSelector();  // The term length has different values for different models.
	highlight();
}

function selectColor(colorIndex) {
	selectedColorIndex = colorIndex;
	currentColorPrice = bikes[selectedBikeIndex].colors[selectedColorIndex].price;
	
	drawColorSelector(colorIndex);
	
	updateBikeImage();
	
	//set default financing values
	updateFinancedAmount();

	//recalulate payment
	updatePaymentAmount();	
	highlight();
}

function selectWheel(wheelIndex) {
	selectedWheelIndex = wheelIndex;
	if ( selectedWheelIndex == 0 ) {
		currentWheelPrice = 0;
	} else {
		currentWheelPrice = bikes[selectedBikeIndex].optWheelPrice;
	}
	
	updateBikeImage();
	
	//set default financing values
	updateFinancedAmount();


	//recalulate payment
	updatePaymentAmount();	
	highlight();
}

function updateEstimate(){
	//set js values from page form
	apr = document.getElementById("pgApr").value;
	months = document.getElementById("pgTerm").value;
	tradeIn = parseFloat(document.getElementById("pgTradeIn").value);
	downPay = parseFloat(document.getElementById("pgDownPmnt").value);
	motorClothes = parseFloat(document.getElementById("pgMc").value);
	genuineAccessories = parseFloat(document.getElementById("pgGma").value);
	
	if ( isNaN(tradeIn) ) {
		tradeIn = 0;
		document.getElementById("pgTradeIn").value = "0";
	}
	
	if ( isNaN(downPay) ) {
		downPay = 0;
		document.getElementById("pgDownPmnt").value = "0";
	}
	
	
	//change financing summary spans
	document.getElementById('aprSpan').innerHTML = "" + apr;
	document.getElementById('termSpan').innerHTML = "" + months;
	document.getElementById('tradeInSpan').innerHTML = "" + tradeIn;
	document.getElementById('downPaymentSpan').innerHTML = "" + downPay;
	document.getElementById('gmaSpan').innerHTML = "" + genuineAccessories;
	document.getElementById('mcmSpan').innerHTML = "" + motorClothes;

	//set default financing values
	updateFinancedAmount();

	//recalulate payment
	updatePaymentAmount();	
	
	//change bgcolor and border to orange
	highlight();
		
}
//***********************************************************
//      END USER GESTURES                                   *
//***********************************************************


function highlight(){
	window.parent.setTimeout("document.getElementById('factorbullets').style.borderColor='#FF6200'", 0);
	window.parent.setTimeout("document.getElementById('factorbullets').style.borderColor='#999999'", 400);
	window.parent.setTimeout("document.getElementById('emp').style.borderColor='#FF6200'", 0);
	window.parent.setTimeout("document.getElementById('emp').style.borderColor='#999999'", 400);
	window.parent.setTimeout("document.getElementById('emp').style.backgroundColor='#FF6200'", 0);
	window.parent.setTimeout("document.getElementById('emp').style.backgroundColor='#d9d9d9'", 400);
	
	window.parent.setTimeout("document.getElementById('subhdr_emp').src='/en_US/Media/images/Content/Pictorial/payment_estimator/sub_hdr_estimatedmonthly_on.gif'", 0);
	window.parent.setTimeout("document.getElementById('subhdr_emp').src='/en_US/Media/images/Content/Pictorial/payment_estimator/sub_hdr_estimatedmonthly.gif'", 400);	
}


function updateBikeHeaderImage() { 
	document.getElementById("bikeHeaderImageSpan").innerHTML = bikes[selectedBikeIndex].copy;
}

function updateBikeImage() { 	
	
	var imageName = "/en_US/Media/flash/2009_Motorcycles/img/specs/";	
	imageName +=  bikes[selectedBikeIndex].name.toLowerCase();
	imageName += "_dom_" + bikes[selectedBikeIndex].colors[selectedColorIndex].colorCode.toLowerCase();
	if ( selectedWheelIndex == 0 ) {
		imageName += "_sws";
	} else {
		imageName += "_ows";
	}
	imageName += "_s.jpg";
	//alert(imageName);	
	
	document.getElementById("bikeImageSpan").innerHTML = "<img src=\"" + imageName + "\" width=\"220\" height=\"140\">";
}

function drawWheelSelector() {
	var outHTML = "";
	if ( bikes[selectedBikeIndex].optWheelPrice == "N/A" ) {
		//then there is only one wheel, no option/buttons
		outHTML += bikes[selectedBikeIndex].stdWheel		
	} else {
		outHTML += "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>";
		outHTML += "<td colspan=\"4\"><img class=\"select\" src=\"/en_US/Media/images/Content/Pictorial/payment_estimator/sub_hdr_choosewheel.gif\" border=\"0\" /></td></tr>";
		outHTML += "<tr><td><input type=\"radio\" checked name=\"wheels\" value=\"default\" onClick=\"selectWheel(0)\"></td>";
		outHTML += "<td>" + bikes[selectedBikeIndex].stdWheel + "</td>";
		outHTML += "<td><input type=\"radio\" name=\"wheels\" value=\"opt_wheel\" onClick=\"selectWheel(1)\"></td>";
		outHTML += "<td>" + bikes[selectedBikeIndex].optWheelDesc + " $" + bikes[selectedBikeIndex].optWheelPrice + "</td>";
		outHTML += "</tr></table>";		
	}
	
	document.getElementById("wheelSelector").innerHTML = outHTML;
}

function drawBikeSelector(){
	var outHTML = "<select class=\"pymt\" style=\"width:334px; height:19px;\" id=\"bikeSelectorDD\" onChange=\"selectModel()\">";
	var prevFamily = "";
	var prevBikeID = "";
	var curFamily = "";
	var isFirst = true;
	for ( var x = 0; x < bikes.length; x++ ) {
		curFamily = bikes[x].familyId;
		if ( curFamily != prevFamily ) {
			if ( isFirst == false ) {
				outHTML +="<option class=\"pymt\" value=\"" + prevBikeID + "\">- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</option>";
			}
			outHTML += "<option class=\"pymt\" value=\"" + x + "\">" + bikes[x].familyTitle + "</option>";
			isFirst = false;
		}
		if ( x == selectedBikeIndex ) { outHTML += "<option class=\"pymt\" selected "; } else { outHTML += "<option class=\"pymt\" "; }
		
		outHTML += "value=\"" + x + "\">" + "-" + bikes[x].copy + "</option>";
		prevBikeID = x;
		prevFamily = curFamily;
	}
	
	document.getElementById("bikeSelector").innerHTML = outHTML;
}

function drawColorSelector() {
	
	//var outHTML = "<table class=\"selector\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td colspan=\"" + ((bikes[selectedBikeIndex].colors.length)-1) + "\">";
	var outHTML = "<img class=\"select\" src=\"/en_US/Media/images/Content/Pictorial/payment_estimator/sub_hdr_selectapaint.gif\" border=\"0\" />";
	outHTML += bikes[selectedBikeIndex].colors[selectedColorIndex].name + " adds $" + bikes[selectedBikeIndex].colors[selectedColorIndex].price + " to MSRP<br>";
	//outHTML += "</td></tr><tr>";
	outHTML += "<div id=\"chipcontainer\">"
	for ( var x = 0; x < bikes[selectedBikeIndex].colors.length; x++) {
		outHTML += "<div class=\"chip\"><img class=\"chipimg\" ";
		if ( x == selectedColorIndex ) {
			//use different style for highlight image
			outHTML += "style=\"border:solid; border-color:#FF6200; border-width:2px;\" ";
		} else {
			outHTML += "style=\"border:solid; border-color:#D1D1D1; border-width:2px;\" ";
		}
		outHTML += " height=\"26\" width=\"26\" src=\"/en_US/Media/flash/2009_Motorcycles/img/pnw/pnw_dom_" + bikes[selectedBikeIndex].colors[x].colorCode.toLowerCase() + "_t.jpg\" border=\"2\" onClick=\"selectColor(" + x + ")\"></div>";		
	}
	outHTML += "</div>";
	//outHTML += "</tr></table>";
	
	document.getElementById("colorSelector").innerHTML = outHTML;
	
}

function drawTermLenSelector() {
	var selectorElem = document.getElementById("bikeSelectorDD");
	var valueElem = document.getElementById("pgApr");
	selectedBikeIndex = selectorElem.value;
	var outHTML = "<select class=\"pymt\" id=\"pgTerm\" style=\"width:86px; height:19px;\">";

	outHTML += "<option class=\"pymt\" value=\"72\">72 months</option>";
	outHTML += "<option class=\"pymt\" value=\"60\">60 months</option>";
	outHTML += "<option class=\"pymt\" value=\"48\">48 months</option>";
	outHTML += "<option class=\"pymt\" value=\"36\">36 months</option>";
	outHTML += "<option class=\"pymt\" value=\"24\">24 months</option>";

	outHTML += "</select>";
	
	document.getElementById("TermLenSelector").innerHTML = outHTML;
}

function updateFinancedAmount(){
	financedAmount = parseFloat(currentBasePrice) + parseFloat(currentColorPrice) + parseFloat(currentWheelPrice);
	financedAmount -= tradeIn;
	financedAmount -= downPay;
	financedAmount += motorClothes;
	financedAmount += genuineAccessories;
	document.getElementById("financedAmountSpan").innerHTML = "$" + CurrencyFormattedRound(financedAmount);	
}

function updatePaymentAmount() {
	var interest = (apr/12)/100;
	var payment = (financedAmount*interest)/(1-Math.pow(1+interest,-months));
	document.getElementById("paymentAmountSpan").innerHTML =  "$" + CurrencyFormatted(payment);
}


String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}


function deriveColorCosts() {
	for ( var x = 0; x < bikes.length; x++ ) {		
		for ( var y = 0; y < bikes[x].colors.length; y++ ) {			
			var curColorFamily = bikes[x].colors[y].family;
			for ( var z = 0; z < bikes[x].colorFams.length; z++ ) {		
				if ( curColorFamily.toUpperCase() == bikes[x].colorFams[z].id.toUpperCase() ) {		
					// we found the family that matches the color, get price difference and set on color
					bikes[x].colors[y].price = bikes[x].colorFams[z].bikePrice - bikes[x].msrp;
					//check if error in color data, never return a negative paint cost
					if ( bikes[x].colors[y].price < 0 ) {
						bikes[x].colors[y].price = 0;
					}
					break;
				}
			}
		}
	}
}

function stripPriceFmt(inPriceString) {
	var outString = new String(inPriceString);
	var prevLength = outString.length;
	var newLength = 0;
	while ( prevLength != newLength ) {
		prevLength = outString.length;
		outString = outString.replace("$","");
		outString = outString.replace(",","");
		outString = outString.replace(" ","");
		newLength = outString.length;
		//alert("this worked!");
	}
	return outString;
}

function htmlDecode(inString) {
	var outString = new String(inString);
	var prevLength = outString.length;
	var newLength = 0;
	while ( prevLength != newLength ) {
		prevLength = outString.length;
		outString = outString.replace("(R)","&reg;");
		outString = outString.replace("(tm)","&trade;");
		outString = outString.replace("(C)","&copy;");
		outString = outString.replace("%2C",",");
		outString = outString.replace("%3B",";");
		newLength = outString.length;
		//alert("this worked!");
	}
	return outString;
}

function CurrencyFormatted(amount)
{
	var i = parseFloat(amount);
	if(isNaN(i)) { i = 0.00; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf('.') < 0) { s += '.00'; }
	if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
	s = minus + s;
	return s;
}

function CurrencyFormattedRound(amount)
{
	var i = parseFloat(amount);
	if(isNaN(i)) { i = 0.00; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	s = minus + s;
	return s;
}

