﻿// Functions specific to flooring_details page

GOT.AUTOLINK = true;
GOT.AUTOELEMENTIDS = new Array('maincontent','contentleft');

function closeZoom(){
	var elFloZoom = document.getElementById("flo_zoom");
	elFloZoom.style.display = 'none';
}
function displayZoom(e){
	var elFloZoom = document.getElementById("flo_zoom");
	// get the image url
	var target = getEventTarget(e);
	var imgUrl = target.getAttribute('src');
	//alert(imgUrl);
	// strip image params off url
	if(imgUrl.indexOf('&') > -1){
		imgUrl = imgUrl.substring(0, imgUrl.indexOf('&'));
	}
	//imgUrl = encodeURIComponent(imgUrl);
	//\?src=([^&|&amp;])
	/*var rex = /\?src=()[^&|&amp;]/i
	if(rex.test(imgUrl)){
		var cleanImgUrl = imgUrl.replace(rex, '*');
		alert(cleanImgUrl);
	}*/
	if(imgUrl.indexOf('src=') > -1){
		imgUrl = imgUrl.substring(imgUrl.indexOf('?src=')+5);
	}
	//alert(imgUrl);
	// set url of flash object
	//ex: http://images.simplefloors.com/erez4/fsi4/fsi.swf?FPXBase=http://images.simplefloors.com/erez4%2Ferez%3Fsrc%3D&amp;FPXSrc=xBar/samples/BrazilianWalnut%255FFlat%255Fsmall.tif
	var swfUrl = "http://images.simplefloors.com/erez4/fsi4/fsi.swf?FPXBase=http://images.simplefloors.com/erez4%2Ferez%3Fsrc%3D&amp;CropToViewport=1&amp;Effects=%26sharpen%3d50&amp;FPXSrc=" + imgUrl;

	var so = new SWFObject(swfUrl, "mymovie", "363", "500", "7", "#FFFFFF");
	
	so.addParam("wmode", "opaque");
	
	so.write("flashcontent");
	
	// show the div
	elFloZoom.style.display = 'block';

}


//  checks for valid numeric strings	
function isNumeric(str){ // replace this function with isNaN()?
    alert();
	var strValidChars = "0123456789.";
	var strChar;
	var blnResult = true;

	if (str.length == 0) return false;

	for (i = 0; i < str.length && blnResult == true; i++)
	  {
	  strChar = str.charAt(i);
	  if (strValidChars.indexOf(strChar) == -1)
		 {
		 blnResult = false;
		 }
	  }
	return blnResult;
}
// need
function parseCoverageInput(str){
	var coverage = 0;
	if(isNumeric(str)){
		coverage = parseFloat(str);
	}
	return coverage;
	
}

function parseQuantityInput(str){
	var qty = 0;
	if(isNumeric(str)){
		qty = parseFloat(str);
	}
	return qty;
	
}

function calculateFlooring(){
alert();
	//Note: objFlooring instance should already be created
	var flooringTotal = 0;
	var elflocalc = document.getElementById('flooringcalc');
	//var txtCoverage = document.getElementById('txtCoverage');
	var txtCoverage = document.getElementById('ctl00_MainContent_txtCoverage'); // ASP.NET rendered ID
	var elCartonQty = document.getElementById('cartonQty');
	var hdnCartonQty = document.getElementById('ctl00_MainContent_txtCartonQty'); // ASP.NET rendered ID
	var elCurrentPricePerSqFt = document.getElementById('currentPricePerSqFt');
	var elCurrentFlooringTotal = document.getElementById('currentFlooringTotal');
	var elTotalCartonWeight = document.getElementById('totalCartonWeight');
	
	// get txtCoverage value , may need some better validation here
	var usrCoverage = parseCoverageInput(txtCoverage.value);
	
	if(usrCoverage > 0){
		// update cartons
		var cartonQty = objFlooring.CalculateCartonQuantity(usrCoverage);
		//alert(usrCoverage);
		elCartonQty.firstChild.nodeValue = cartonQty;
		hdnCartonQty.value = cartonQty;
		
		// update txtCoverage value based on cartons
		txtCoverage.value = objFlooring.CalculateSqFtCoverage(cartonQty);
		
		// update SFPrice
		elCurrentPricePerSqFt.firstChild.nodeValue = '$' + objFlooring.CalculateSqFtPrice(cartonQty);
		// update Total Price
		flooringTotal = objFlooring.CalculateSubTotal(cartonQty)
		elCurrentFlooringTotal.firstChild.nodeValue = '$' + flooringTotal;
		// Update total Pounds
		
		elTotalCartonWeight.firstChild.nodeValue = objFlooring.CalculateWeight(cartonQty);
	}
	
	else{
		// invalid input reset values.
		elCartonQty.firstChild.nodeValue = '--';
		hdnCartonQty.value = '0';
		//txtCoverage.value = '';
		elCurrentPricePerSqFt.firstChild.nodeValue = '$-.--';
		// update Total Price
		elCurrentFlooringTotal.firstChild.nodeValue = '$---.--';
		// Update total Pounds
		elTotalCartonWeight.firstChild.nodeValue = '--';
	}
	return flooringTotal;
}

function calculateAccessory(accessoryID){
	var subtotal = 0;
	// get all relevant elements
	var txtQty = document.getElementById('txtAccessoryQuantity_' + accessoryID);
	var hidPrice = document.getElementById('hidAccessoryPrice_' + accessoryID);
	var elAccTotal = document.getElementById('accessoryTotal_' + accessoryID);
	
	// get quantity entered by user
	var usrQty = parseQuantityInput(txtQty.value);
	
	if(usrQty > 0){
		// calculate price
		subtotal = parseFloat(hidPrice.value) * parseFloat(usrQty);
		elAccTotal.firstChild.nodeValue = '$' + subtotal.toFixed(2);
		
	}
	
	else {// invalid input
		//txtQty.value = '';
		elAccTotal.firstChild.nodeValue = '$--.--';
	}
	
	return subtotal;

}

function calculateAccessories(){
	var total = 0;
	// update all the individual accessory subtotals
	//var elAccessories = document.getElementById('accessories');
	var elAccessories = document.getElementById('accessories').getElementsByTagName('div');
	for(var i=0; i < elAccessories.length; i++){
		if(hasCssClass(elAccessories[i], 'accessoryitem')){
			var accID = parseInt(elAccessories[i].getAttribute('id').replace('accessory_',''));
			if(accID > 0){
				// update accessory
				var cost = calculateAccessory(accID);
				// add the cost to the subtotal
				if(cost >0){
					total += cost;
				}
			}
		}
	}
	
	// add the subtotals for an accessories total
	var elTotal = document.getElementById('currentAccessoriesTotal');
	
	if(total > 0){
		elTotal.firstChild.nodeValue = '$' + total.toFixed(2);
	}
	else{
		elTotal.value = '$--.--';
	}
	
}

// Attach event handlers for page
function flooring_details_init(){
	if (!document.getElementById) return;
	
	// attach zoom events to thumb images
	var elThumbLinks = document.getElementById('flo_images').getElementsByTagName('img');
	for(var i=0; i < elThumbLinks.length; i++){
		addEvent(elThumbLinks[i], 'click', displayZoom);
	}
	elThumbLinks = null;// IE memory leak protection
	
	// attach calculateFlooring to Update link
	var elLnkUpdateFloTotal = document.getElementById('update_flooringtotal');
	addEvent(elLnkUpdateFloTotal, 'click', calculateFlooring);
	elLnkUpdateFloTotal = null;
	// attach calculateFlooring to txtCoverage change
	var txtCoverage = document.getElementById('ctl00_MainContent_txtCoverage'); // ASP.NET rendered ID
	addEvent(txtCoverage, 'change', calculateFlooring);
	txtCoverage = null;

	// attach closeZoom to close link in flo_zoom
	var elLnkClose = document.getElementById('close_zoom');
	addEvent(elLnkClose, 'click', closeZoom);
	elLnkClose = null;
	
	// attach calculateAccessories to individual accessory links
	// find links inside of	<p class="acc_update"><a class="eventlink update_accessoriestotal">Update</a></p>
	var elAccessories = document.getElementById('accessories');
	// make sure accessories are rendered, if not don't attach events
	if(elAccessories==null || typeof elAccessories=="undefined"){return;} 
	elAccessories = null;
	
	var elAccLinks = document.getElementById('accessories').getElementsByTagName('a');
	
	for(var i=0; i < elAccLinks.length; i++){
		if(hasCssClass(elAccLinks[i], 'update_accessoriestotal')){
			addEvent(elAccLinks[i], 'click', calculateAccessories);
		}
	}
	elAccLinks = null;
	
	// attach calculateAccessories to individual accessory text input changes
	var elQtyInput = document.getElementById('accessories').getElementsByTagName('input');
	for(var i=0; i < elQtyInput.length; i++){
			addEvent(elQtyInput[i], 'change', calculateAccessories);
	}
	elQtyInput = null;
	
	// attach calculateAccessories to trim and accessories total link
	var elLnkUpdateAccTotal = document.getElementById('update_accessoriestotal');
	addEvent(elLnkUpdateAccTotal, 'click', calculateAccessories);
	elLnkUpdateAccTotal = null;
	
}

addEvent(window, 'load', flooring_details_init);

