/******************************************* PHASE 4 STOCK CHECK FOR PRODUCT - FULL STOCK RETURNED FROM COLOUR ********************************************************/
var dsColourStock = new Spry.Data.XMLDataSet("", "productdetail", { subPaths: "availability/item" });
colourStockObserver = new Object();
colourStockObserver.onPostLoad = function(notifier, data) {
	
	// check the panel is there first
	if (!$('productPanel')) { return false; }
	
	// assemble html snippet from returned xml
	var htmlTxt = '';
	// start an out-of-stock count
	var oosCount = 0;
	for (var i=0; i < notifier.data.length; i++) {
		var myName = notifier.data[i]['availability/item/name'];
		var myStock = notifier.data[i]['availability/item/currentstock'];
		if (myStock == 0) {
			htmlTxt += '<p class="disabled">\n';
			oosCount++;
		} else {
			htmlTxt += '<p>\n';
		}
		if (myStock == 0) {
			htmlTxt += '<input type="radio" name="product_size" id="product_size_' + myName + '" value="' + myName + '" disabled="disabled">\n';
		} else {
			htmlTxt += '<input type="radio" name="product_size" id="product_size_' + myName + '" value="' + myName + '">\n';
		}
		htmlTxt += '<label for="product_size_' + myName + '">' + myName + '</label>\n';
		htmlTxt += '</p>\n';
	}
	// stock area header actions
	var hEl = $$($('product_size').getElementsByTagName('h3')[0]);
	if (oosCount == (notifier.data.length -1)) {
		// if out of stock, change the header
		hEl.addClass('error');
		hEl.setText('Sorry, all sizes out of stock');
	} else {
		hEl.removeClass('error');
		hEl.setText('Please select your size');
	}
	
	$('sContainer').setHTML(htmlTxt);
	
	// set the "add to basket enabler" on each size input:
	sizeSelectEvent();	/* utility function (see ajax_panel_engine_PHASE4_2009_reskin - I know, I know) */
	
	// remove all loading indicators
	var fel = $$($('productPanel').getElementsByTagName('form'));
	var els = $$(fel[0].getElementsByTagName('span'));
	for (var i=0; i<els.length; i++) {
		els[i].removeClass('spinner');
	}
	
	// update the price area
	var price = notifier.data[0].price;
	var wasprice = notifier.data[0].wasPrice;
	if (wasprice != price) {
		$('overlayPriceDisplay').setHTML('<em>Now &pound;' + price + '</em><span> was &pound;' + wasprice + '</span>');
	} else {
		$('overlayPriceDisplay').setHTML('&pound;' + price);
	}
	
	// update the story area for this colour
	$('storyEl').setText(notifier.data[0].story);
	
	// if Everything is OOS, reset the header <h3>
	var el = $('sContainer').getParent().getFirst();
	if (oosCount == notifier.data.length) {
		el.addClass('error').setText('All sizes out of stock');
	} else {
		el.removeClass('error').setText('Please select your size');
	}
	
	// slide back out again
	var sizeSlideBack = new Fx.Style('sContainer', 'height', {
		duration: 400,
		wait: true,
		transition: Fx.Transitions.Quad.easeInOut
	});
	sizeSlideBack.start(50);	// 220px is the min height

	/* CHECK WITH BEN ABOUT THIS TRACKING SHIT???
	var pvarid = "";
	if (notifier.data[0].sku) {
		pvarid = notifier.data[0].sku;
	}
	dcsMultiTrack('WT.si_n','ShoppingCart','WT.si_x','1','WT.pn_sku',pvarid,'WT.tx_u','1','WT.tx_e','v');
	*/
}
dsColourStock.addObserver(colourStockObserver);

function colourStockCheck(productid, sizeobj, colorobj) {
	
	var paramObj = getParamsObj(sizeobj, colorobj);
	
	//var url = "index.cfm?event=getproductdetailstub&productid=" + productid + getSearchURL(sizeobj, colorobj);
	var url = "/index.cfm?event=productdetail.xml&action=stockdetail&productid=" + productid + "&varcodes=colour|" + paramObj.colourVal + ",size|" + paramObj.sizeVal + "&variationNames=colour,size&attributeNames=wasPrice,story";
	
	dsColourStock.url = url;
	
	// ensure Add To Bag is disabled
	$('add_to_shopping_bag').addClass('disabled');
	$$($('add_to_shopping_bag').getElementsByTagName('img'))[0].setProperties({
		'src' : 'images/structural/overlay/button_add_to_shopping_bag_2_disabled.png',
		'alt' : '',
		'class' : 'inactive'
	});
	// set the "size select checker" on disabled btn:
	$('add_to_shopping_bag').onclick = checkSizeSelected;	/* utility function (see ajax_panel_engine_PHASE4_2009_reskin - I know, I know) */
	
	// set up size area slide
	var sizeSlide = new Fx.Style('sContainer', 'height', {
		duration: 400,
		wait: false,
		transition: Fx.Transitions.Quad.easeInOut,
		onComplete: function() {
			// fire the load
			dsColourStock.loadData();
		}
	});
	sizeSlide.start(0);
}

/******************************************* RELATED ITEMS SERVICE ********************************************************/
var dsRelatedItems = new Spry.Data.XMLDataSet("", "products/product", { subPaths: [ "small" ] });
relatedStatusObserver = new Object();
relatedStatusObserver.onPostLoad = function (notifier, data) {

	// check the panel is there first
	if (!$('productPanel')) { return false; }
	
	var relatedArray = notifier.data;
	
	var el = $$($('complete_the_look').getElementsByTagName('ul'))[0];
	el.innerHTML = "";
	
	if (relatedArray.length > 0) {
		var childItems = "";
		var currentID = "";
		for (var i =0; i<relatedArray.length; i++) {
			
			var relItem = relatedArray[i];
			
			if (relItem.id != currentID) {
				currentID = relItem.id;
			
				if (i == 3) {
					childItems += '<li class="last_item">';
				} else {
					childItems += '<li>';
				}
				
				childItems += '<a href="/index.cfm?page=1017&productid=' + relItem.id + '&productvarid=' + relItem.productvarid + '" rel="product">';
				childItems += '<img src="' + relItem.small + '" alt="' + relItem.name + '" width="89" height="95">';	// ensure it's the first <small> returned
				childItems += '<span class="title">' + relItem.name + '</span>';
				childItems += '<span class="price">';
				if (typeof(relItem.wasPrice) != "undefined") {
					childItems += '<em>now &pound;' + relItem.price + '</em> was &pound;' + relItem.wasPrice;
				} else {
					childItems += '&pound;' + relItem.price;
				}
				childItems += '</span>';
				childItems += "</a></li>"
				
			}
		}
		el.innerHTML = childItems;
		prepLinks(el);
		// slide back out again
		var relatedSlideBack = new Fx.Style('complete_the_look', 'height', {
			duration: 300,
			wait: true,
			transition: Fx.Transitions.Quad.easeInOut
		});
		relatedSlideBack.start(220);	// 220px is the min height
	} else {
		// There are no related items returned
	}
	
}
dsRelatedItems.addObserver(relatedStatusObserver);

function updateRelated (productid, relation, sizeobj, colorobj) {
	
	var relatedURL = "index.cfm?event=xmlcall&action=relateditems&relatedtype="+ relation + "&maxitems=4&productid=" + productid + getSearchURL(sizeobj,colorobj);
	dsRelatedItems.url = relatedURL;
	
	// set up complete the look slide
	var relatedSlide = new Fx.Style('complete_the_look', 'height', {
		duration: 300,
		wait: false,
		transition: Fx.Transitions.Quad.easeInOut,
		onComplete: function() {
			// fire the load
			dsRelatedItems.loadData();
		}
	});
	relatedSlide.start(0);
}

/******************************************* ADD TO BASKET FUNCTIONS - SINGLE PRODUCT ********************************************************/
function addToBasket (productid, sizeobj, colorobj) {

	// prevent closing of panel during Add To Basket
	var btnEl = $('closeBtn');
	btnEl.setOpacity(0.25)
	btnEl.onclick = function() { return false; }
	
	// ensure Add To Bag is disabled
	$('add_to_shopping_bag').addClass('disabled');
	$$($('add_to_shopping_bag').getElementsByTagName('img'))[0].setProperties({
		'src' : 'images/structural/overlay/button_add_to_shopping_bag_2_disabled.png',
		'alt' : '',
		'class' : 'inactive'
	});
	
	// display spinner
	var el = $$($('product_actions').getElementsByTagName('span'))[0];
	el.removeClass('message');
	el.setText('');
	el.addClass('spinner');

	var addurl =  "index.cfm?event=xmlcall&action=addtobasket&productid=" + productid + getSearchURL(sizeobj,colorobj);
	
	dsBasketAdd = new Spry.Data.XMLDataSet(addurl, "basket/results", {useCache:false});
	basketObserver = new Object();
	basketObserver.onPostLoad = function (notifier, data) {

		var basketData = notifier.data;
		$('bagCount').innerHTML = basketData[0].items;

		var pvarid = "";
		var pqty = 1;
		if (basketData[0].productvarid) {
			pvarid = basketData[0].productvarid;
		}
		if (basketData[0].qty) {
			pqty = basketData[0].qty;
		}
		dcsMultiTrack('DCS.dcsuri','/index.cfm?page=1012','WT.si_n','ShoppingCart','WT.si_x','2','WT.pn_sku',pvarid,'WT.tx_u',pqty,'WT.tx_e','a');
		
		// show "added" message
		el.removeClass('spinner');
		el.addClass('message');
		el.setText('Item added to shopping bag.');
		// show the "post basket actions"
		responseSlide.start(34);	// 24px is the height of a button - plus 10px for a nice gap

		// reset close button
		btnEl.setOpacity(1)
		btnEl.onclick = function() {
			fadePage();
			return false;
		}
		// ensure Add To Bag is enabled
		$('add_to_shopping_bag').removeClass('disabled');
		$$($('add_to_shopping_bag').getElementsByTagName('img'))[0].setProperties({
			'src' : 'images/structural/overlay/button_add_to_shopping_bag_2.png',
			'alt' : 'Add to Shopping Bag',
			'class' : ''
		});
	}
	dsBasketAdd.addObserver(basketObserver);

	dsBasketAdd.loadData();
	return false;
}


/******************************************* STOCK CHECK FOR COLLECTION (BUY ALL) ********************************************************/
function stockCheckCollection(productid, sizeobj, colorobj) {
	if (sizeobj.value != '') {
		var dsCollectionStock = new Spry.Data.XMLDataSet("", "product/stock");
		stockStatusObserver = new Object();
		stockStatusObserver.onPostLoad = function(notifier, data) {

			// check the panel is there first
			if (!$('buyAllPanel')) { return false; }

			//Actually display the items here
			if(notifier.data[0].instock =="true"){
				$('qty_' + notifier.data[0].productid).disabled = false;
				$('coll_stock_panel_' + notifier.data[0].productid).style.display = 'block';
				$('coll_no_stock_panel_'+ notifier.data[0].productid).style.display = 'none';
			} else {
				//set the checkbox to unchecked
				$('qty_' + notifier.data[0].productid).checked = false;
				$('qty_' + notifier.data[0].productid).disabled = true;
				$('coll_stock_panel_' + notifier.data[0].productid).style.display = 'none';
				$('coll_no_stock_panel_'+ notifier.data[0].productid).style.display = 'block';
			}
			/**/
			var prodId = notifier.data[0].productid;
			if ($('psize_' + prodId)) {
				if ( $('psize_' + prodId).value ? ($('psize_' + prodId).value == '' ? false : true ) : false ) {
					$('coll_no_size_panel_' + prodId).style.display = 'none';
				} else {
					$('coll_no_stock_panel_' + prodId).style.display = 'none';
					$('coll_no_size_panel_' + prodId).style.display = 'block';
				}
			}
			
			var pvarid = '';
			if (notifier.data[0].sku) {
				pvarid = notifier.data[0].sku;
			}

			dcsMultiTrack('WT.si_n','ShoppingCart','WT.si_x','1','WT.pn_sku',pvarid,'WT.tx_u','1','WT.tx_e','v');
			// Mat addition:
			removeLoader();
		}
		dsCollectionStock.addObserver(stockStatusObserver);

		var url = 'index.cfm?event=xmlcall&action=stock&productid=' + productid + getSearchURL(sizeobj, colorobj);
		dsCollectionStock.url = url;
		dsCollectionStock.loadData();
	} else {
		/**/
		$('coll_stock_panel_' + productid).style.display = 'none';
		$('coll_no_stock_panel_' + productid).style.display = 'none';
		$('coll_no_size_panel_' + productid).style.display = 'block';
		/**/
	}
}


function getCollectionUpdatedImages(productid, sizeobj, colorobj) {
	var	dsCollectionImages = new Spry.Data.XMLDataSet("", "images/item");
	var imageStatusObserver = new Object();
	imageStatusObserver.onPostLoad = function(notifier, data){

		// check the panel is there first
		if (!$('buyAllPanel')) { return false; }

		//Make sure we are displaying the front and back stuff
		var imageArray = notifier.data;

		//this item has a front image
		if(imageArray[0]){
			frontImageData = imageArray[0];
			$("img_" + frontImageData.productid).src = frontImageData.small;
		}
	}
	dsCollectionImages.addObserver(imageStatusObserver);
	var imageurl = "index.cfm?event=xmlcall&action=productimages&productid=" + productid + getSearchURL(sizeobj,colorobj);
	dsCollectionImages.url = imageurl;
	dsCollectionImages.loadData();
}



function buyCollection(formItem){

	if (!formItem.products) { return false; }

	// prevent closing of panel during Add To Basket
	var btnEl = $('closeBtn');
	btnEl.setOpacity(0.25)
	btnEl.onclick = function() { return false; }

	var productids = new Array();
	//From the form, go and get all the 'products' checkboxes
	for (var i=0;i<formItem.products.length; i++) {
		var prodItem = formItem.products[i];
		if (prodItem.checked) {
			var buyItem = new Object();
			buyItem.productid = prodItem.value;
			//Check for size
			if (formItem['size_' + prodItem.value]) {
				var selSize = formItem['size_' + prodItem.value];
				buyItem.size = selSize.options[selSize.selectedIndex].value;
			}
			if (formItem['colour_' + prodItem.value]) {
				var selCol = formItem['colour_'+prodItem.value];
				buyItem.colour = selCol.options[selCol.selectedIndex].value;
			}
			productids[productids.length] = buyItem;
		}
	}

	var url = "index.cfm?event=xmlcall&action=addmultiple&" + formatMultipleProducts(productids);
	var dsAddMultiple = new Spry.Data.XMLDataSet(url, "basket/results", {useCache:false} );

	//handler for the results
	var multipleAdd = new Object();
	multipleAdd.onPostLoad = function (notifier, data) {
		var basketData = notifier.data;
		$('bagCount').innerHTML = basketData[0].items;
		$('bagAdded').style.display = "block";

		// reset close button
		btnEl.setOpacity(1)
		btnEl.onclick = function() {
			fadePage();
			return false;
		}

		//Need to pass this to the DCS Multitrack
		if (basketData[0].productvarids) {
			qtyList = Array();
			pArray = basketData[0].productvarids.split(";");
			for(var i = 0; i < pArray.length; i++){
				qtyList[i] = 1;
			}
			dcsMultiTrack('DCS.dcsuri','/index.cfm?page=1012','WT.si_n','ShoppingCart','WT.si_x','2','WT.pn_sku',basketData[0].productvarids,'WT.tx_u',qtyList.join(";"),'WT.tx_e','a');
		}
	}
	dsAddMultiple.addObserver(multipleAdd);
	dsAddMultiple.loadData();
	return false;
}


function formatMultipleProducts(aItems) {
	var urlstring = "productids=";
	//Add the product ID keys
	for (var i=0;i<aItems.length;i++) {
		if (i > 0) {
			urlstring += "," + aItems[i].productid;
		} else {
			urlstring += aItems[i].productid;
		}
	}

	//Now create the size/colour attributes
	for (var i=0;i<aItems.length;i++) {
		if (aItems[i].colour) {
			urlstring += "&colour_" + aItems[i].productid + "=" + aItems[i].colour; 
		}
		if (aItems[i].size) {
			urlstring += "&size_" + aItems[i].productid + "=" + aItems[i].size; 
		}
	}

	return urlstring;

}

function getBasketItems(){
	dsBasketItems = new Spry.Data.XMLDataSet("index.cfm?event=xmlcall&action=basketitems", "root/basket/totalitems", {useCache:false});
}



/******************************************* IMAGES SERVICE ********************************************************/
var	dsImages = new Spry.Data.XMLDataSet("", "images/item");
imageStatusObserver = new Object();
imageStatusObserver.onPostLoad = function(notifier, data){

	// check the panel is there first
	if (!$('productPanel')) { return false; }
	
	var imageArray = notifier.data;
	switchImages2(imageArray);
}
dsImages.addObserver(imageStatusObserver);

function getUpdatedImages(productid, sizeobj, colorobj) {
	var imageurl = "index.cfm?event=xmlcall&action=productimages&productid=" + productid + getSearchURL(sizeobj,colorobj);
	dsImages.url = imageurl;
	dsImages.loadData();
}


// WebTrends SmartSource Data Collector
// Copyright (c) 1996-2007 WebTrends Inc. All rights reserved.
// $DateTime: 2007/02/02 09:07:21 $
function dcsMultiTrack() {
	if (arguments.length%2==0){
		for (var i=0;i<arguments.length;i+=2){
			if (arguments[i].indexOf('WT.')==0){
				WT[arguments[i].substring(3)]=arguments[i+1];
			} else if (arguments[i].indexOf('DCS.')==0) {
				DCS[arguments[i].substring(4)]=arguments[i+1];
			} else if (arguments[i].indexOf('DCSext.')==0) {
				DCSext[arguments[i].substring(7)]=arguments[i+1];
			}
		}
		var dCurrent=new Date();
		DCS.dcsdat=dCurrent.getTime();
		dcsFunc("dcsCookie");
		dcsTag();
	}
}

/* UTILITY FUNCTIONS */
function hideItem(objid) {
	byId(objid).style.display = "none";
}

function byId(objectid){ return document.getElementById(objectid); }

/* PHASE 4: sends params obj to PHASE 4 colour/stock check function */
function getParamsObj(sizeobj, colorobj) {
	var paramsObj = {};
	paramsObj.sizeVal = '';
	paramsObj.colourVal = '';
	if (sizeobj) {
		// get the chosen size: if none selected, default to the first size
		// $('sContainer') div is what's being passed here, so collect the inputs:
		var inputEls = $$($(sizeobj).getElementsByTagName('input'));
		var sVal = '';
		for (var i=0; i < inputEls.length; i++) {
			if (inputEls[i].checked) {
				sVal = inputEls[i].value;
			}
		}
		if (sVal == '') {
			sVal = inputEls[0].value;
		}
		paramsObj.sizeVal = sVal;
	}
	if (colorobj) {
		var cVal = '';
		var cVal = colorobj.options[colorobj.selectedIndex].value;
		paramsObj.colourVal = cVal;
	}
	return paramsObj;
}

/* constructs search string for xml calls */
function getSearchURL(sizeobj, colorobj){
	var url = "";
	var lSearchVars = new Array();
	if (sizeobj) {
		if ($('sContainer')) {
			// get the chosen size: if none selected, default to the first size
			// $('sContainer') div is what's being passed here, so collect the inputs:
			var inputEls = $$($(sizeobj).getElementsByTagName('input'));
			var sVal = '';
			for (var i=0; i < inputEls.length; i++) {
				if (inputEls[i].checked) {
					sVal = inputEls[i].value;
				}
			}
			if (sVal == '') {
				sVal = inputEls[0].value;
			}
			url += "&size=" + sVal;
		} else {
			// backwards compat - used by "buy all"
			var size_item = sizeobj;
			url += "&size=" + size_item.options[(size_item.selectedIndex > 0 ? size_item.selectedIndex : 1)].value; //if no size is selected pick the first one in the
		}
		lSearchVars[lSearchVars.length] = "size";
	}
	if (colorobj) {
		var colour_item = colorobj;
		url += "&colour=" + colour_item.options[colour_item.selectedIndex].value;
		lSearchVars[lSearchVars.length] = "colour";
	}
	url += "&searchvars=";
	for (var i=0; i<lSearchVars.length;i++) {
		if(i !=0) url += ",";
		url += lSearchVars[i];
	}
	return url;	
}


function checkPostCode(selItem, destId)	{
	if(selItem.options[selItem.selectedIndex].value == "IE") {
		$(destId).value = "-";
	}
}