isInferior = parseFloat(navigator.appVersion.substr(navigator.appVersion.indexOf('MSIE')+5, 3)) < 7;

function paddleClass() {
	
	this.bladeArray = new Array();
	this.shaftMaterialArray = new Array();
	this.shaftArray = new Array();
	this.lockArray = new Array();
	
	this.currentBlade = "";
	this.currentShaftMaterial = "";
	this.currentShaft = "";
	this.currentLock = "";
	
	this.noShaft = false;
	
	function blade(bladeOBJ) {
		this.name = bladeOBJ.name;
		this.price = bladeOBJ.price;
		this.weight = bladeOBJ.weight;
		
		this.domID = bladeOBJ.domID;
		this.isDefault = bladeOBJ.isDefault ? 1 : 0;
		
		this.marketRestriction = bladeOBJ.marketRestriction;
	}
	
	this.addBlade = function addBlade(bladeOBJ) { this.bladeArray[bladeOBJ.domID] = new blade(bladeOBJ) };
	
	function shaftMaterial(shaftMatOBJ) {
		this.name = shaftMatOBJ.name;
		this.weight = shaftMatOBJ.weight;
		this.priceCode = shaftMatOBJ.priceCode;
		
		this.domID = shaftMatOBJ.domID;
		this.isDefault = shaftMatOBJ.isDefault;
		
		this.marketRestriction = shaftMatOBJ.marketRestriction;
	}
	
	this.addShaftMaterial = function addShaftMaterial(shaftMatOBJ) { this.shaftMaterialArray[shaftMatOBJ.domID] = new shaftMaterial(shaftMatOBJ); };

	function shaft(shaftOBJ) {
		this.name = shaftOBJ.name;
		this.price = shaftOBJ.price;
		this.weight = shaftOBJ.weight;
		this.pieceCount = shaftOBJ.pieceCount;
		
		this.domID = shaftOBJ.domID;
		this.isDefault = shaftOBJ.isDefault;
		
		this.marketRestriction = shaftOBJ.marketRestriction;
	}
	
	this.addShaft = function addShaft(shaftOBJ) { this.shaftArray[shaftOBJ.domID] = new shaft(shaftOBJ); };
	
	function lock(lockOBJ) {
		this.name = lockOBJ.name;
		this.price = lockOBJ.price;
		
		this.domID = lockOBJ.domID;
		this.isDefault = lockOBJ.isDefault;
		
		this.marketRestriction = lockOBJ.marketRestriction;
	}
	
	
	this.addLock = function addLock(lockOBJ) { this.lockArray[lockOBJ.domID] = new lock(lockOBJ); };
}

paddleClass.prototype.hasRestrictions = function(locale) {
    return;	
	/*var restricted = false;

    if (this.bladeArray[this.currentBlade].marketRestriction && this.bladeArray[this.currentBlade].marketRestriction.indexOf(locale) > -1) {restricted = true;}
    if (this.shaftArray[this.currentShaft].marketRestriction && this.shaftArray[this.currentShaft].marketRestriction.indexOf(locale) > -1) {restricted = true;}
    if (this.lockArray[this.currentLock].marketRestriction && this.lockArray[this.currentLock].marketRestriction.indexOf(locale) > -1) {restricted = true;}
    if (this.shaftMaterialArray[this.currentShaftMaterial].marketRestriction && this.shaftMaterialArray[this.currentShaftMaterial].marketRestriction.indexOf(locale) > -1) {restricted = true;}

    return restricted*/
}

paddleClass.prototype.updateDisplay = function() {
    return; // Configurator is disabled.
	var blade_USD = this.bladeArray[this.currentBlade].price.USD;
    var shaft_USD = (this.noShaft) ? 0 : this.shaftArray[this.currentShaft].price[this.shaftMaterialArray[this.currentShaftMaterial].priceCode].USD;
    var lock_USD = (this.noShaft) ? 0 : this.lockArray[this.currentLock].price[this.shaftArray[this.currentShaft].pieceCount].USD;
	
	var USDSpan = document.getElementById("USD");
    if (this.hasRestrictions("US")) USDSpan.innerHTML = "Not Available in US";
    else USDSpan.innerHTML = "USD $" + (blade_USD + shaft_USD + lock_USD);
	
	var blade_GBP = this.bladeArray[this.currentBlade].price.GBP
	var shaft_GBP = (this.noShaft) ? 0 : this.shaftArray[this.currentShaft].price[this.shaftMaterialArray[this.currentShaftMaterial].priceCode].GBP;
	var lock_GBP = (this.noShaft) ? 0 : this.lockArray[this.currentLock].price[this.shaftArray[this.currentShaft].pieceCount].GBP;

	var GBPSpan = document.getElementById("GBP");
	GBPSpan.innerHTML = "&pound;" + (blade_GBP + shaft_GBP + lock_GBP);
	
	var bladeWeight = this.bladeArray[this.currentBlade].weight;
	var shaftWeight = (this.noShaft) ? 0 : this.shaftMaterialArray[this.currentShaftMaterial].weight

	var weightSpan = document.getElementById("weight");
	weightSpan.innerHTML = bladeWeight + shaftWeight;
	
	var bladematerialSpan = document.getElementById("bladematerial");
	bladematerialSpan.innerHTML = this.bladeArray[this.currentBlade].name;
	
	var shaftnameSpan = document.getElementById("shaftname");
	shaftnameSpan.innerHTML = this.shaftArray[this.currentShaft].name;
	
	var shaftmaterialSpan = document.getElementById("shaftmaterial");
	(this.noShaft)? shaftmaterialSpan.innerHTML = "&nbsp;" : shaftmaterialSpan.innerHTML = this.shaftMaterialArray[this.currentShaftMaterial].name;
	
	var lockSpan = document.getElementById("lock");
	(this.noShaft) ? lockSpan.innerHTML = "Not Applicable (no shaft)" : lockSpan.innerHTML = this.lockArray[this.currentLock].name;
	
	if (this.noShaft) {
	    for (key in this.lockArray){
	        domObj = document.getElementById(this.lockArray[key].domID);
	        if (domObj && (domObj.className.indexOf("disabled")<0)) domObj.className = domObj.className + " disabled";
	        
	    }
	    i = 0;
	    for (key in this.shaftMaterialArray) {
	        domObj = document.getElementById(this.shaftMaterialArray[key].domID);
	        if (domObj && (domObj.className.indexOf("disabled")<0)) domObj.className = domObj.className + " disabled";
	    }
	    
	}
	else {
	    for (key in this.lockArray){
	        domObj = document.getElementById(this.lockArray[key].domID);
	        if (domObj) domObj.className = domObj.className.replace("disabled","");
	    }
	    for (key in this.shaftMaterialArray) {
	        domObj = document.getElementById(this.shaftMaterialArray[key].domID);
	        if (domObj) domObj.className = domObj.className.replace("disabled","");
	    }
	}
}

paddleClass.prototype.setBlade = function(whichblade) {
	
	if (this.currentBlade) {
		var oldBladeDOM = document.getElementById(this.currentBlade);
		oldBladeDOM.className = "";
	}
	else {
		var firstFire = true;
	}
	
	this.currentBlade = whichblade;
	
	var bladeDOM = document.getElementById(this.currentBlade);
	bladeDOM.className = "selected_material";
	
	if (!firstFire) this.updateDisplay();
}

paddleClass.prototype.initBlades = function() {

	for (key in this.bladeArray) {
		//if (this.bladeArray[key].isDefault) this.setBlade(key);
		
		domObj = document.getElementById(this.bladeArray[key].domID)

        if (domObj) {
		    domObj.onmouseover = function() { toggletip(1,this.id+".tip",this); };
		    domObj.onmouseout = function() { toggletip(0,this.id+".tip"); };
		   	//domObj.onclick = function() { paddle.setBlade(this.id);};
		}
	}
	
}

paddleClass.prototype.setShaft = function(whichshaft) {
	if (this.currentShaft) {
		var oldShaftDOM = document.getElementById(this.currentShaft);
		oldShaftDOM.className = "";
		firstFire = false;
	}
	else firstFire = true;
	
	this.currentShaft = whichshaft;
    this.noShaft = (this.shaftArray[this.currentShaft].pieceCount == 0);
	
	var shaftDOM = document.getElementById(this.currentShaft);
	shaftDOM.className = "selected_shaft";
	
	if (!firstFire) this.updateDisplay();
}

paddleClass.prototype.initShafts = function() {

	for (key in this.shaftArray) {
		//if (this.shaftArray[key].isDefault) this.setShaft(key);
		
		domObj = document.getElementById(this.shaftArray[key].domID)

        if (domObj) {
		    domObj.onmouseover = function() { toggletip(1,this.id+".tip",this); };
		    domObj.onmouseout = function() { toggletip(0,this.id+".tip"); };
		    //domObj.onclick = function() { paddle.setShaft(this.id); return false;};
		}
	}
	
}

paddleClass.prototype.initShaftMaterials = function() {

	for (key in this.shaftMaterialArray) {
		//if (this.shaftMaterialArray[key].isDefault) this.setShaftMaterial(key);
		
		domObj = document.getElementById(this.shaftMaterialArray[key].domID)

        if (domObj) {
	    	domObj.onmouseover = function() { if (!paddle.noShaft) toggletip(1,this.id+".tip",this); };
    		domObj.onmouseout = function() { if (!paddle.noShaft) toggletip(0,this.id+".tip"); };
    		//domObj.onclick = function() { if (!paddle.noShaft) paddle.setShaftMaterial(this.id); return false;};
		}
	}
	
}

paddleClass.prototype.setShaftMaterial = function(whichshaftMaterial) {
	if (this.currentShaftMaterial) {
		var oldShaftMaterialDOM = document.getElementById(this.currentShaftMaterial);
		oldShaftMaterialDOM.className = "";
		firstFire = false;
	}
	else firstFire = true;
	
	this.currentShaftMaterial = whichshaftMaterial;
	
	var shaftDOM = document.getElementById(this.currentShaftMaterial);
	shaftDOM.className = "selected_material";
	
	if (!firstFire) this.updateDisplay();
}

paddleClass.prototype.setLock = function(whichLock) {
	if (this.currentLock) {
		var oldLockDOM = document.getElementById(this.currentLock);
		oldLockDOM.className = "";
		firstFire = false;
	}
	else firstFire = true;
	
	this.currentLock = whichLock;
	
	var lockDOM = document.getElementById(this.currentLock);
	lockDOM.className = "selected_material";
	
	if (!firstFire) this.updateDisplay();
}

paddleClass.prototype.initLocks = function() {
    var i=0;
	for (key in this.lockArray) {
		//if (this.lockArray[key].isDefault) this.setLock(key);
		domObj = document.getElementById(this.lockArray[key].domID);

        if (domObj) {
		    domObj.onmouseover = function() { if (!paddle.noShaft) toggletip(1,this.id+".tip",this); };
		    domObj.onmouseout = function() { if (!paddle.noShaft) toggletip(0,this.id+".tip"); };
		    //domObj.onclick = function() { if (!paddle.noShaft) paddle.setLock(this.id); return false;};
		}
	}
}

function toggletip(visible, tipID) {
	var tipDOM = document.getElementById(tipID);

	if (visible) {
		if (window.isInferior) {
			jQuery('select').css('visibility', 'hidden');
		}
		tipDOM.style.display="block";
		
		var triggerCoords = findPos(arguments[2]);
		var triggerDims = findDim(arguments[2]);
		var tipDims = findDim(tipDOM);
		
		tipDOM.style.left = ((triggerCoords[0]+(triggerDims[0] / 2)) - tipDims[0]/2 + 10) + "px";
		tipDOM.style.top = (triggerCoords[1]-tipDims[1] + 5) + "px";
	}
	else {
		if (window.isInferior) {
			jQuery('select').css('visibility', 'visible');
		}
		tipDOM.style.display="none";
		
		tipDOM.style.left = "-1000px";
		tipDOM.style.top = "-1000px";
	}
}

// code from http://www.quirksmode.org/js/findpos.html
// QuirksMode.org is the personal site of Peter-Paul Koch
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function findDim(obj) {
	var width = obj.offsetWidth;
	var height = obj.offsetHeight;
	
	return [width,height];
}