// JScript File

// Implements the ProductData object
function ProductData(){

    // Constructor.
    var prodDataObj = null;
    var skuPriceDivEl = document.getElementById('skuPriceDiv');
    var descriptionDivEl = document.getElementById('descriptionDiv');
    var attributesDivEl = document.getElementById('attributesDiv');
    var theCurrentSKU = null;
    
 	// Load the product image URLs for the category.
	this.show = function(productId){	
		var parameters = "productId=" + productId 
		theRequest.post("/getproddata", this.showOnComplete, parameters);  //,this.showError); //for debugging
	}
	this.showOnComplete = function(jsonObj){  
		// ================================
		// JSON Format:
		// --------------------------------
		// {"Product":{
		//		"Label":"Bark Bangle, Set of 3",
		//		"Description":"bla bla bla"}
		//  "SKU":[{
		//		"SKU":"B040-DSE-av",
		//		"SKU_ID":"775",
		//		"DetailImagesNum":"0",
		//		"RetailPrice":"53.00",
		//		"Weight":"5.3",
		//		"Sellable":"Y"}],
		//  "attrDef":[{
		//      "AttrName":"Size",
		//      "AttrId":417,
		//      "Values":["Small","Large"],
		//      "IDs":[651,652]},...
		//   ],
		//   "SkuAttr":[{
		//		"SKU_ID":"788",
		//		"AttrDefVal_ID":"774"}
		//	 ]
		// }
		// ================================
//alert(jsonObj.toJSONString());		
		prodDataObj = jsonObj;
		clearPage();
		// Set the text data.
		document.getElementById('shortDescriptionDiv').innerHTML = prodDataObj.Product.Label
		if(prodDataObj.SKU.length > 0){
			updateHiddenFields(0);
			clearSkuPrice();
			updateSkuPrice(0)
			//
			addText(descriptionDivEl,prodDataObj.Product.Description);			
			addBr(attributesDivEl);
			for(var i=0; i<prodDataObj.attrDef.length; i++){
				addText(attributesDivEl,prodDataObj.attrDef[i].AttrName);
				addBr(attributesDivEl);
				var selEl = addSelect(attributesDivEl,prodDataObj.attrDef[i].AttrId);
				selEl.onchange = new Function("theProductData.swapSku(this)");    
				for(var j=0; j<prodDataObj.attrDef[i].Values.length; j++){
					addOption(selEl,prodDataObj.attrDef[i].Values[j],prodDataObj.attrDef[i].IDs[j])
				}
			}
		}
		setImages(0);
  	}    
	
	this.swapSku = function(el){
//alert('swapSku - ' + el.value);	
		var skuId = null;
		for(var i=0;i<prodDataObj.SkuAttr.length;i++){
			if(prodDataObj.SkuAttr[i].AttrDefVal_ID == el.value){
				skuId = prodDataObj.SkuAttr[i].SKU_ID;
				break;
			}
		}
		if(skuId!=null){
//alert("skuId=" + skuId);
			var idx = null;
			for(var i=0;i<prodDataObj.SKU.length;i++){
				if(prodDataObj.SKU[i].SKU_ID == skuId){
					idx = i;
					break;
				}
			}
			if(idx!=null){
				updateHiddenFields(idx);
				clearSkuPrice();
				updateSkuPrice(idx);
				setImages(idx);
			}
		}else{
			alert("SKU data missing.");
		}
	}
	
	
	//for debugging
 	this.showError = function(jsonObj,txt){
 	
 alert(txt);	
 	
 	
 	}
 	
 	this.getTheCurrentSKU = function(){
 		return theCurrentSKU;
 	}
 
 	function updateHiddenFields(idx){
 		document.cart.sku.value = prodDataObj.SKU[idx].SKU;	
 		var backordered = "";
 		if(prodDataObj.SKU[idx].Sellable == "N") backordered = "(BACKORDER) ";
		document.cart.Label.value = backordered + prodDataObj.Product.Label
		document.cart.price.value = prodDataObj.SKU[idx].RetailPrice;
		document.cart.weight.value = prodDataObj.SKU[idx].Weight;
 	}
 	
 	function updateSkuPrice(idx){
 		theCurrentSKU = prodDataObj.SKU[idx].SKU;
		addText(skuPriceDivEl,prodDataObj.SKU[idx].SKU);
		addSpace(skuPriceDivEl,6)
		var spanEl = addSpan(skuPriceDivEl)
		spanEl.style.fontWeight="bold";
		addText(spanEl,"$"+prodDataObj.SKU[idx].RetailPrice);
		if(prodDataObj.SKU[idx].Sellable == "N"){
			addBr(spanEl);
			addText(spanEl,"Currently out of stock, available in 45 days.");
			addBr(skuPriceDivEl);
			addText(skuPriceDivEl,"Your card will not be charged until the item ships.");
			addBr(skuPriceDivEl);
			addSpace(skuPriceDivEl);
		}
 	}
 	
 	function setImages(idx){
		document.getElementById('mainImg').src="/assets/images/sku/" + prodDataObj.SKU[idx].SKU + ".jpg";	
		// Detail images.
		var detailCount = prodDataObj.SKU[idx].DetailImagesNum;
/////////////////////////////////
// RIGHT NOW WE ONLY SUPPORT 2 DETAIL IMAGES
		for(var i=1;i<=2;i++){
			var detailImageEl = document.getElementById('detailImage' + i);
			if(i<=detailCount){
				detailImageEl.src = "/assets/images/prod/" + prodDataObj.SKU[idx].SKU + "_" + i + ".jpg";	
				detailImageEl.className = "clickableImage";
				var fn = "enlargeImage('" + i + "')";
				detailImageEl.onclick = new Function(fn);    
			}else{				
				detailImageEl.src = "/assets/images/prod/blank.jpg" 
				detailImageEl.className = "";
				detailImageEl.onclick = "";
			}
		}
	}
	//	
	// ================================================================================
	// START DOM Support.
	//
	function addText(parentEl,txt){
	    var txtNode = document.createTextNode(txt);
        parentEl.appendChild(txtNode);
        return txtNode;
	}
	//
	function addBr(parentEl){
	    var brNode = document.createElement('br');
        parentEl.appendChild(brNode);
	}
	//
	function addSpan(parentEl){
	    var spanNode = document.createElement('span');
        parentEl.appendChild(spanNode);
        return spanNode;
	}		
	//
	function addSpace(parentEl,howMany){
		if(howMany == null) howMany = 1;
		for(var i=0;i<howMany;i++){
			var txtNode = document.createTextNode('\u00a0');
			parentEl.appendChild(txtNode);
		}		
        return txtNode;
	}	
	//
	function addSelect(parentEl,id){
		var newEl= document.createElement('select');
		newEl.id = id;
		parentEl.appendChild(newEl);
		return newEl;
	}//addSelect
	//
	//
	function addOption(elSel,txt,val){
		var elOptNew = document.createElement('option');
		elOptNew.text = txt;
		elOptNew.value = val;
		try {
			elSel.add(elOptNew, null); // standards compliant; doesn't work in IE
		}catch(ex) {
			elSel.add(elOptNew); // IE only
		}	
		return elOptNew;
	}//addOption		
   			
	
    function clearPage() {
		// As we delete the nodes the lenth of oNodeList will vary so we
		// set now how many iterations we want to have.    
		var descriptionDivEl = document.getElementById('descriptionDiv');
		cnt = descriptionDivEl.childNodes.length
		for (var i=0; i<cnt; i++) {
			descriptionDivEl.removeChild(descriptionDivEl.firstChild);
		}		
		var attributesDivEl = document.getElementById('attributesDiv');
		cnt = attributesDivEl.childNodes.length
		for (var i=0; i<cnt; i++) {
			attributesDivEl.removeChild(attributesDivEl.firstChild);
		}				
	}// clearPage
	
	function clearSkuPrice(){
		var skuPriceDivEl = document.getElementById('skuPriceDiv');
		var cnt = skuPriceDivEl.childNodes.length
		for (var i=0; i<cnt; i++) {
			skuPriceDivEl.removeChild(skuPriceDivEl.firstChild);
		}	
	}
	//
	// END DOM Support.
	// ================================================================================
 
}
