﻿// JavaScript Document

//google.load('visualization', '1', {});

var basketProcessesRunning = 0

$(function() {
	
	
	$("input.integeronly").each(function() {
	
		var input = $(this)
	
		function checkValue() {
		
			var value = $(input).val()
			
			value = value.replace(/,/g,"")
			
			value = parseInt(value)
			if($(input).is(".positiveonly")) {if(value<0) {value = Math.pow(Math.pow(value,2),0.5)}}
			if(isNaN(value)) {value = 100}
			
			input.val(value)
			
		}
		
		input.change(checkValue)
		
		input.keyup(function() {
			if($(this).val()!="") {
				$(this).change()
			}
		})
	
	})
	
	
	
	$("select.custom-select").each(function() {
											
		var options = $(this).find("option")
		$(this).after('<div class="custom-select-replacement"><a href="#" class="selected-item-display"></a><ul></ul></div>')
		var container = $(this).siblings(".custom-select-replacement")
		var ul = container.find("ul")
		var display = container.find(".selected-item-display")
		var value
		
		options.each(function() {
							  
			ul.append("<li/>")
			var li = ul.find("li:last")
			
			li.html('<span class="custom-select-value">'+$(this).attr("value")+'</span><span class="custom-select-option">'+$(this).html()+'</span>')
			
			if($(this).is(":selected")) {
				value = $(this).attr("value")
				ul.find("li").removeClass("selected")
				li.addClass("selected")
				display.html($(this).html())
			}
			
							  
		})
		
		var name = $(this).attr("name")
		var className = $(this).attr("class")
		
		container.append('<input type="hidden"/>')
		
		var input = container.find("input")
		
		$(this).remove()
		
		input.attr("name",name)
		input.attr("id",name)
		input.attr("value",value)
		input.attr("class",className)
		
		display.click(function(e) {
			display.focus()
			$(this).parent().find(".hover").removeClass("hover")
			e.preventDefault()
			container.toggleClass("custom-select-open")
		}).focus(function() {
			$(this).addClass("focussed")
		}).blur(function() {
			$(this).removeClass("focussed")
			tryClose()			  
		})
		
		ul.find("li").hover(function() {$(this).toggleClass("hover")},function() {$(this).toggleClass("hover")}).click(function() {
		
			commitSelect($(this))
			forceClose()
			display.focus()
																																
		})
		
		container.mouseout(function() {
									
			tryClose()							
									
		})
		
		
		function commitSelect(el) {
			
			if(el.size()>0) {
				input.val(el.find(".custom-select-value").text())
				ul.find("li").removeClass("selected")
				el.addClass("selected")
				display.html(el.find(".custom-select-option").html())
				input.change()
			}
			
		}
		
		function tryClose() {
			if(display.is(".focussed")) {}
			else if(ul.find("li.hover").size()==0) {forceClose()}
		}
		
		function forceClose() {
			container.removeClass("custom-select-open")
		}
		
		function selectedLabel() {
		
			return ul.find("li.selected .custom-select-option").text()
			
		}
		
		display.keypress(function(e) {
			
			e.preventDefault()
			
			var keyCode = e.keyCode ? e.keyCode : e.charCode
			
			if(keyCode==37||keyCode==38) {commitSelect(ul.find("li.selected").prev())}
			else if(keyCode==39||keyCode==40) {commitSelect(ul.find("li.selected").next())}
			
			else {
				var char = String.fromCharCode(keyCode).toLowerCase()
				var siblings =  ul.find("li.selected").nextAll()
				var match
				var i=0
				while(!match&&i<siblings.size()) {
					if(siblings.eq(i).find(".custom-select-option").text().charAt(0).toLowerCase()==char) {match = siblings.eq(i)}
					i++
				}
				
				if(!match) {
					siblings =  ul.find("li.selected").siblings()
					
					i=0
					while(!match&&i<siblings.size()) {
						if(siblings.eq(i).find(".custom-select-option").text().charAt(0).toLowerCase()==char) {match = siblings.eq(i)}
						i++
					}	
				}
				
				if(match) {
					commitSelect(match)	
				}
				
				
			}
								   
		})
		
		input.bind("update",function(e,v) {
			
			var lis = ul.find("li")
			
			for(var i=0;i<lis.size();i++) {
			
				var val = lis.eq(i).find(".custom-select-value").text()
				if(val == v) {
					commitSelect(lis.eq(i))
					break;
				}
				
			}
									 
		})
		
	})
	
	
	$("#lead_type").change(function() {
		
		if($(this).val()=="UCA"||$(this).val()=="UCA/PPI") {
			
			$("#ucav").closest("div.holder").slideDown(500)
	 	 	$("#ucan").closest("div.holder").slideDown(500)	
		}
		else {
			$("#ucav").trigger("update",0).closest("div.holder").slideUp(500)
	 	 	$("#ucan").trigger("update",0).closest("div.holder").slideUp(500)	
		}
		
		if($(this).val()=="PPI"||$(this).val()=="UCA/PPI") {
	 	 	$("#ppin").closest("div.holder").slideDown(500)	
		}
		else {
	 	 	$("#ppin").trigger("update",0).closest("div.holder").slideUp(500)	
		}
		
		if($(this).val()=="DM") {
	 	 	$("#dm").val("1")	
		}
		else {
	 	 	$("#dm").val("0")	
		}
		
		
		
	})
	

	
	
	
	
	function loading(target) {
		
		target.parent
		
	}
	
	loading($(".spec"))
	
	
	
	
	
	var leadAttributeLabels = new Object()
	var leadAttributeIDs = new Array()
	var productCodeBase = ""
	var products = new Object()
	
    
	function handleProductData(data) {
		
		leadAttributeLabels = data.leadAttributeLabels
		
		for(var i in leadAttributeLabels) {
			leadAttributeIDs.push(i)
			productCodeBase+=i+"-"
		}
		
		productCodeBase+="#"
		
		for(var i=0;i<data.products.length;i++) {
		
			var product = data.products[i]
			product.productCode = productCodeBase
			
			for(var a=0;a<leadAttributeIDs.length;a++) {
			
				if(leadAttributeIDs[a]!="cost") {
					product.productCode+="-"+product[leadAttributeIDs[a]]	
				}
				
			}
			
			products[product.productCode] = product
			
		
			
		}
		
		$("#lead_type").closest("div.holder").slideDown(500)
	  	$("#quantity").closest("div.holder").slideDown(500)
	  
		
	}
	
	
	$.ajax({
		url:"/data/products.txt",
		data:{date:(new Date()).getTime()},
		success:handleProductData,
		dataType:"json"
	})
    
    
	
	
	function getCost(overrides) {
		
		var attributes = overrides ? overrides : new Object()
		
		var productCode = productCodeBase
		
		
		for(var i=0;i<leadAttributeIDs.length-1;i++) {
			
			attributes[leadAttributeIDs[i]] = attributes[leadAttributeIDs[i]] ? attributes[leadAttributeIDs[i]] : $("#"+leadAttributeIDs[i]).val()
			
			productCode += "-"+(attributes[leadAttributeIDs[i]])
		}
		
		
		var isValid = true
		
		if($("#lead_type").val()=="UCA"||$("#lead_type").val()=="UCA/PPI") {
			if(attributes["ucav"]=="0"||attributes["ucan"]=="0") {isValid = false}
		}
		
		if($("#lead_type").val()=="PPI"||$("#lead_type").val()=="UCA/PPI") {
			if(attributes["ppin"]=="0") {isValid = false}
		}
		
		if(!isValid) {return null}
		
		//alert(productCode)
		
		if(products[productCode]) {
			
			return products[productCode].cost	
			
		}	
		
		else {return null}
		
		
	}
	
	
	function updatePrices() {
		
		var isValid = true
		
		$(".cost-diff").remove()
		
		if($("#lead_type").val()=="0") {isValid=false}
		
		if($("#lead_type").val()=="UCA"||$("#lead_type").val()=="UCA/PPI") {
			if($("#ucav").val()=="0"||$("#ucan").val()=="0") {isValid = false}
		}
		
		if($("#lead_type").val()=="PPI"||$("#lead_type").val()=="UCA/PPI") {
			if($("#ppin").val()=="0") {isValid = false}
		}
		
		
		if(isValid) {
			
			
			
			var costPerLead = getCost()
			
			if(costPerLead) {
				$(".price-target").text(sterling(costPerLead*parseInt($("#quantity").val())))
				$(".invalid-price").css("display","none")
				$(".valid-price").css("display","block")
				
				
				
				
				$(".price-increments").each(function() {
		
					var thisID = $(this).attr("name")
					var ul = $(this).siblings("ul")
					var lis = ul.find("li")
					
					lis.each(function() {
									  
						var thisValue = $(this).find(".custom-select-value").text()
						var override = {}
						override[thisID]=thisValue
						var thisCostPerLead = getCost(override)
						if(thisCostPerLead) {
							var costDiff = thisCostPerLead-costPerLead
							if(costDiff) {
								$(this).append((costDiff<0 ? '<span class="cost-diff cost-diff-negative"> &nbsp;(-' : '<span class="cost-diff"> &nbsp;( +')+sterling(Math.pow(Math.pow(costDiff,2),.5))+' per lead)</span>')
							}
						}
									  
					})
																 
				})
		
			}
			
			else {
				$(".invalid-price").css("display","block")
				$(".valid-price").css("display","none")
			}
			
			$(".price").slideDown(500)
			
			
			
			
		}
		
		else {$(".price").slideUp(500)}
		
		
		
		
	}
	
	$(".update-price").change(updatePrices)
		
	
	
	$("#configurator").submit(function() {
		
		
		basketProcessesRunning++
		
		/*
		var basket = $(".basket-items")
		
		basket.find(".no-items").css("display","none")
		if(basket.find("ol").size()<1) {basket.append("<ol/>")}
		var ol = basket.find("ol")
		ol.append('<li class="hidden"><div class="holder"><span class="desc"></span> <span class="cost"></span></div></li>')
		var newLi = ol.find("li:last")
		newLi.find(".desc").text($("#lead_type").val()+" x "+$("#quantity").val())
		newLi.find(".cost").text($(".price-target").text())
		newLi.slideDown(500)
		ol.slideDown(500)
		
		return false
		*/
		
		if(basketProcessesRunning==1) {
			$(".totals,.no-items").loading()
		} //slideUp(500)
		
		
		$(this).ajaxSubmit({
			
			
			
			url:"/ajax/html/basket.shtml",
			success:function(html) {
				basketProcessesRunning--
				if(basketProcessesRunning<1) {
					$(".basket").html(html)
					$("form.remove-button").submit(removeButtonHandler)
					$(".totals").slideDown(500)
					$(".basket-items .new").slideDown(500)
				}
			}
						   
		})
		
		
		return false
		
	})
	
	$("form.remove-button").submit(removeButtonHandler)
	
	
	
})

function sterling(v) {
	
	var pence = Math.round(v*100)
	
	
	if(v<1) {return pence+"p"}
	
	var out = pence+""
	
	
	
	pence = "."+out.substring(out.length-2,out.length)
	if(pence==".00") {pence = ""}
	
	
	out = out.substring(0,out.length-2)
	
	var chars = new Array()
	
	for(var i=0;i<out.length;i++) {
		if(i>0&&Math.floor(i/3)==(i/3)) {
			chars.push(",")
		}
		chars.push(out.charAt(out.length-i-1))
	}
	out = chars.reverse().join("")
	out="£"+out+pence
	
	return out

}




function removeButtonHandler(e) {
	
	basketProcessesRunning++
	
	if(basketProcessesRunning==1) {$(".totals").loading()}
	$(e.target).parents("li").slideUp(500)
	
	
	$(e.target).ajaxSubmit({
		
		
		url:"/ajax/html/basket.shtml",
		success:function(html) {
			basketProcessesRunning--
			if(basketProcessesRunning<1) {
				$(".basket").html(html)
				$("form.remove-button").submit(removeButtonHandler)
				$(".totals").slideDown(500)

			}
		}
					   
	})
	
	return false									
											
	
}