(function(){

	//vars

	var BRC = {
		prodDetailsPrice:'',
		prodDetailsExVatPrice:'',
		prodDetailsRRP:'',
		prodDetailsStock:'',
		prodDetailsStockClass:'',
		prodDetailsStockMsg:'',
		prodDetailsImage:'',
		prodDetailsPopImageLarge:'',
		prodDetailsImageLarge:''
	};

	/*  DOM ready... and so it begins...  */

	window.addEvent('domready', function(){

		// ::: javascript for all pages

		// textbox help text show/hide		

		$$('input.lowlight').addEvents({
		    'focus': function(){ initTextboxHelpToggle(this); },
		    'blur': function(){ initTextboxHelpToggle(this); }
		});


		$$('.print').addEvent('click',function(e){
			new Event(e).stop(); // if you code your print link as a link, this basically does the same as “return false;”<br />  
			window.print();
		});
		

		// showhide link div toggle
		$$('.showhide').addEvent('click', function(){ showhideEl(this); });


		// currency switcher
		if($('btncurrency')){
			$('btncurrency').set('style','display:none;');			
			$('ddlcurrency').addEvent('change', function(e){ $('frmcurrency').submit(); });
		}
		
		
		// Swap medium image
		if($('prodimg-thumb')){
			$$('#prodimg-thumb a').addEvent('click', function(e){ 
				var target=($(this).getProperty('rel'));
				$('baseimage').set('src', target);
			});
		}
		
		
		// My Image Lightbox
		if($('mbCenter')){
			$('mbCenter').setStyle('display', 'none');
			$('mbCenter').fade('hide');
			
			$$('#baseimage').addEvent('click', function(e){
				$('mbOverlay').setStyle('display', 'block');
				$('mbCenter').setStyle('display', 'block');
				$('mbCenter').fade('in');
				$('mbOverlay').setStyle('opacity', '0.7');
				$('mbOverlay').setStyle('content', '.');
			});
			
			$$('.prodimg-pop-thumb a').addEvent('click', function(e){
				var target=($(this).getProperty('rel'));
				$$('.baselrgimage').fade('hide');
				$$('.baselrgimage').set('src', target);
				$$('.baselrgimage').fade('in');
			});
			
			$('mbOverlay').addEvent('click', function(e){
				$('mbCenter').fade('out');
				$('mbCenter').setStyle('display', 'none');
				$('mbOverlay').setStyle('display', 'none');
			});
			
			$('close').addEvent('click', function(e){
				$('mbCenter').fade('out');
				$('mbCenter').setStyle('display', 'none');
				$('mbOverlay').setStyle('display', 'none');
			});
			
			
			function check_esc(eventobjekt) {
				var var_key;
				
				if (window.event && window.event.keyCode) {
					var_key = window.event.keyCode;
				} else if (eventobjekt && eventobjekt.keyCode) {
					var_key = eventobjekt.keyCode;
				}
				if (var_key == 27)
				$('mbCenter').fade('out');
				$('mbCenter').setStyle('display', 'none');
				$('mbOverlay').setStyle('display', 'none');
			}
				
			if (document.addEventListener) {
				document.addEventListener('keypress', check_esc, false);
			} else if (document.attachEvent) {
				document.attachEvent('onkeypress', check_esc);
			}
		}
		
		
		// Product Details Tabs
		if($('tabs')){
			$$('.tabcontent').setStyle('display', 'none');
			$('tabcontent').getElement('.tabcontent').setStyle('display', 'block');
			$('tabs').getElement('.tab').addClass('current');
			$$('#tabs a').addEvent('click', function(e){
				var target=($(this).getProperty('rel'));
				var tab=($(this).getProperty('id'));
				$$('#tabs a').removeClass('current');
				$(tab).addClass('current');
				$$('.tabcontent').setStyle('display', 'none');
				$(target).setStyle('display', 'block');
			});
		}
		
		
		//Convert <A> tags to a list for product filters - ocChange required for IE : onClick for Firefox
		if($('filter-results')){
			var selectBlock = new Element('select', {'id': 'filter-list','onchange':'window.location=this(this.selectedIndex).value'});
			var html = "";
			html += '<option value="Order By">Order By</option>';
			$$('.filter-item').each(function(el){
				var href = el.getAttribute('href');
				var text = el.getAttribute('title');
				html += '<option value="'+href+'" onclick="window.location=\''+href+'\'">'+text+'</option>';
			});
			selectBlock.set('html', html);
			selectBlock.inject('filter-results', 'after');
			$('filter-results').dispose();
		}

		// Rotate Banner

		if ($('hero')){
			startBannerRotation('#hero a',6000);
		}

		if ($('depart-img')){
			startBannerRotation('.depart-img a',6000);
		}

		$$('.addtobasket').addEvent('click', function(e){ addToBasket(this, e); });	

		
		// ::: page spacific javascript 
		
		if($('floorarea')){
			$('txtproductfloorarea').addEvent('keyup', function(e){
				var area = $('txtproductfloorarea').get('value');
				var packsize = $('packsize').get('value');
				var price = $('product_price').get('text');
				var numberpacks = Math.ceil(area/packsize);
				var totalprice = (price*numberpacks).round(2);
				$('txtqty').set('value', numberpacks);
				$('totalpacksprice').set('text',totalprice);
			});
			$('txtqty').addEvent('keyup', function(e){
				var qty = $('txtqty').get('value');
				var area = $('txtproductfloorarea').get('value');
				var packsize = $('packsize').get('value');
				var price = $('product_price').get('text');
				var roomsize = qty*packsize;
				var totalprice = (price*qty).round(2);
				$('txtproductfloorarea').set('value', roomsize);
				$('totalpacksprice').set('text',totalprice);
			});
		}

		if($$('form.buyform')){
			//event for attribute products
			if($('ddlopt')){
				BRC.prodDetailsPrice = $('product_price').get('text');
				BRC.prodDetailsImage = $('baseimage').get('src');
				BRC.prodDetailsPopImageLarge = $('baselrgimage').get('src');
				BRC.prodDetailsStock = $('stock').get('text');
				BRC.prodDetailsStockMsg = $('stockMsg').get('text');
				if($('price-rrp')){ 
					BRC.prodDetailsRRP = $('price-rrp').get('text');
				}
				if($('exvatprice')){ 
					BRC.prodDetailsExVatPrice = $('exvatprice').get('text');
				}

				//BRC.prodDetailsImageLarge = $('baselinkimage').get('href');
				$('ddlopt').addEvent('change', function(e){ changeProductAttributes(this, e); }); 				
				$('addtobasket').addEvent('click', function(e){ 
					if($('ddlopt').get('value')==0){
						e.stop();
						alert('Please Choose an option first');
					}
				}); 
			}
			//events for product manual tabs
			$$('#tabs a').addEvent('click', function(e){ setProdManualTab(this, e); });
			//download link
			$$('#downloads a.downloadlink').addEvent('click', function(e){ downloadLink(this, e) });
		}

		

		if($$('body.basket').length > 0){
			//add events to qty drop downs
			$$('tbody select').addEvent('change', function(e){ 
				var id=this.get('id').replace('ddlname', '');
				var deliveryID =$('ddlcountry').value;
				window.location = '/pages/basket.html?id='+id+'&q='+this.get('value')+'&d='+deliveryID;
			});

			$('ddlcountry').addEvent('change', function(e){
				if(this.get('value')==''){
					return false;
				}
				window.location = '/pages/basket.html?d='+this.get('value');
			});

			$('btnsubmit').addEvent('click', function(e){checkBasketDelivery(e)});
			$('btnsubmit1').addEvent('click', function(e){checkBasketDelivery(e)});

			//add js back
			$('shopping-links-goback').addEvent('click', function(e){ 
				e.stop();
				history.go(-1);
			});
		}

	});
	

	var checkBasketDelivery = function(event){
		if($('ddlcountry').get('value')==''){
			alert('Please select a delivery destination');
			var e = new Event(event).stop();
			return false;
		}
	}


	var startBannerRotation = function(selector,delay){ 
		var i = 0;
		var layers = $$(selector); 
		delay = (delay == undefined)? 6000:delay;

		//fade funcion as a var
		var runFadeInit = function(){
			layers[i].fade('out'); 
			i = (i == layers.length-1)? 0 : i+1; 
			layers[i].fade('in');
		}

		runFadeInit();//so it runs once before the interval fires
		setInterval(runFadeInit,delay);
	};


	var initTextboxHelpToggle = function(el){
		//when a textbox has helpful text inside by default - show/hide it
		var title = el.get('title');
		var value = el.get('value');

		if(title == value){
			el.set('value', '');
			el.removeClass('lowlight');
		}
		else if(value == ''){
			el.set('value', el.get('title'));
			el.addClass('lowlight');
		}
	};


	var changeProductAttributes = function(el, e){
		//change price on product details page		
		var total = BRC.prodDetailsPrice;
		//get id for attribute 
		var id = el.get('value');

		if(id==0){
			$('baseimage').set('src', BRC.prodDetailsImage);
			$('baselrgimage').set('src', BRC.prodDetailsPopImageLarge);
			//$('baselinkimage').set('href', BRC.prodDetailsImageLarge);
			$('product_price').set('text', BRC.prodDetailsPrice);
			if($('price-rrp')){ 
				$('price-rrp').set('text', BRC.prodDetailsRRP);
			}
			if(BRC.prodDetailsStock != "0 In Stock"){
				$('stock').set('text', BRC.prodDetailsStock);
			}
			else{
				$('stock').setStyle('display', 'none');
			}
			if(BRC.prodDetailsStockMsg !=0){
				$('stockMsg').set('text', BRC.prodDetailsStockMsg);
			}
			else{
				$('stockMsg').setStyle('display', 'none');
			}
			$('prodimg-thumb-alt').setStyle('display', 'none');
			$('prodimg-thumb').setStyle('display', 'block');
			$('prodimg-pop-thumb-alt').setStyle('display', 'none');
			$('prodimg-pop-thumb').setStyle('display', 'block');
			return false;
		}

		var data = 'sID=attribute&id='+id;
		var doOutput = function(resp){
			if(resp!='false'){
				var obj = JSON.decode(resp);
				var exvatprice = obj.exvatprice.toFloat().numberFormat(2);
				var price_rrp = obj.price_rrp.toFloat().numberFormat(2);
				var price = obj.price.toFloat().numberFormat(2);
				var stock = obj.stock;
				var stockmsg = obj.stockMsg;
				var debug = obj.debug;
				var mainimages = obj.mainimages;
				var mainxlimages = obj.mainxlimages;
				var normthumb = obj.normthumb;
				var normlarge = obj.normlarge;
				var poplarge = obj.poplarge;
				
				$('prodimg-thumb').setStyle('display', 'none');
				$('prodimg-thumb-alt').setStyle('display', 'block');
				$$('prodimg-thumb-alt a').dispose();
				
				$('prodimg-pop-thumb').setStyle('display', 'none');
				$('prodimg-pop-thumb-alt').setStyle('display', 'block');
				$$('prodimg-pop-thumb-alt a').dispose();
				
				var mySplitResult = debug.split("##");
				var mySplitResult2 = mainimages.split("##");
				var mySplitResult3 = mainxlimages.split("##");
				
				
				var thumb = '<p>Click main image to zoom</p>';
					thumb += '<a onclick="swapImage(this);" rel="'+normlarge+'"><img src="'+normthumb+'" width="47px" /></a>';
				var c=0;
				for (var i=1; i<mySplitResult.length;) {
					thumb += '<a onclick="swapImage(this);" rel="'+mySplitResult2[c]+'"><img src="'+mySplitResult[c]+'" width="47px" /></a>';
					i++;
					c++;
				}
				$('prodimg-thumb-alt').innerHTML = thumb;


				var lrgthumb = '<a onclick="swapLargeImage(this);" rel="'+poplarge+'"><img src="'+normthumb+'" /></a>';
				var ct=0;
				for (var it=1; it<mySplitResult.length;) {
					lrgthumb += '<a onclick="swapLargeImage(this);" rel="'+mySplitResult3[ct]+'"><img src="'+mySplitResult[ct]+'" /></a>';
					it++;
					ct++;
				}
				$('prodimg-pop-thumb-alt').innerHTML = lrgthumb;

				
				$('product_price').set('text', exvatprice);
				if(stockmsg!=0){
					$('stockMsg').setStyle('display', 'block');
					$('stockMsg').set('text', stockmsg);
				}
				if(stock!=0){
					$('stock').setStyle('display', 'block');
					$('stock').set('text', stock+' In Stock');
				}
				$('baseimage').set('src', obj.imagelarge);
				$('baselrgimage').set('src', obj.poplarge);
				//$('baselinkimage').set('href', obj.imagexlarge);
				
				if(price_rrp>0){
					$('price-rrp').set('text', price_rrp);
				}
			}
		};
		var req = new Request({url:'/site/services/index.html', onSuccess:doOutput}).send(data);		
	};



	var showhideEl = function(el){
		var target = $(el.getProperty('rel'));
		if(target.hasClass('hide'))
			{ target.removeClass('hide');}
		else 
			{ target.addClass('hide');}
	};
	


	// !Product Manuals
	var setProdManualTab = function(el, event){
		var e = new Event(event).stop();
		//set to show group
		$$('#downloads .download').addClass('hide');
		$(el.get('rel')).removeClass('hide');

		//set current tab
		$$('#tabs a').removeClass('active');
		el.addClass('active');
	};

	

	var downloadLink = function(el, event){
		var msg = 'You must be logged in to download this file. Click OK to go to My Account and login';
		if(el.get('href')=='#loginToDownload'){
			var e = new Event(event).stop();
			if(confirm(msg)){
				window.location = '/my-account/?ref='+window.location.pathname;		
			}
		}
	}


	// !Add to Basket :::
	var addToBasket = function(el, event){
		var e = new Event(event).stop();
		var productID = $('hidprodid') ? $('hidprodid').get('value') : 0;
		var attributeID = $('ddlopt') ? $('ddlopt').get('value') : '';
		var qty = $('txtqty') ? $('txtqty').get('value') : 1;
		var container = $('basket-popup-container');
		var inner = container.getElement('div');
		
		//for inline basket links
		if(el.get('rel')){
			var values = el.get('rel').split('|').clean();
			productID = values[0];
			attributeID = values[2];
			qty = values[1];
		}

		

		//checks
		if($('ddlopt') && $('ddlopt').get('value')==0){ return false; }
		if(productID===0){ return false; }

		inner.set('html', ''); //clear contents
		$('mbOverlay').setStyle('display', 'block');
		$('mbOverlay').setStyle('opacity', '0.5');
		createBasketPopup(container, inner); //create basket popup

		//post to web service
		var data = 'sID=addtobasket&a='+productID+'&o='+attributeID+'&q='+qty;
		var basketPostOutput = function(resp){
			if(resp!='false'){
				var obj = JSON.decode(resp);
				setBasketPopupDisplay(container, obj);
				updateSmallBasket(obj);
				(function(){ closeBasketPopup(); }).delay(7000); //setup auto close after 7 seconds
			}
		};
		var req = new Request({url:'/site/services/index.html', onSuccess:basketPostOutput}).send(data);
	};


	var createBasketPopup = function(container, inner){
		//setup structure elements
		var divMain = new Element('div',{'class':'basket-popup-main'});
		var pClose = new Element('p', 	{'text':'The following item has been added to your basket...'});
		var divData = new Element('div',{'class':'basket-data loading'});
		
		//create close bit
		var a = new Element('a', {'html': '<img src="/site/img/basket/popup/close.gif" alt="close" />'})
		.addEvent('click', function(e){ closeBasketPopup(this, e); })
		.inject(pClose);
		
		//show container
		pClose.inject(divMain);
		divData.inject(divMain);
		divMain.inject(inner);
		container.set('style', 'display:block;');
		container.fade('show');
	};


	var setBasketPopupDisplay = function(container, obj){
		var divData = container.getElement('div.basket-data');
		var price = obj.price.toFloat();
		var html = '<span class="img"><img width="111px" src="'+obj.image+'" alt="'+obj.title+'" /></span>';

		html += '<span class="about">';
		html += '	<h4>'+obj.title+'</h4>';
		html += '	<span class="list-desc">';
		html += '		<ul>';
		if(obj.attributeTitle!=''){ html += '<li><b>Option:</b>  '+obj.attributeTitle+'</li>'; }
		html += '			<li><b>Quantity:</b> '+obj.qty+'</li>';
		html += '			<li><b>Total Price:</b> <span class="price">'+obj.symbol+price.numberFormat(2)+'</span></li>';
		html += '		</ul>';
		html += '	</span>';
		html += '</span>';
		html += '<div class="clear"></div>';
		html += '<div class="popup-footer">';
		html += '	<a class="continue-shopping" href="#_">Continue Shopping</a>';
		html += '	<a class="basket" href="/pages/basket.html"><img src="/site/img/basket/popup/gotobasket.jpg" /></a>';
		html += '	<div class="clear"></div>';
		html += '</div>';

		//add html to popup and add events
		divData.set('html', html)
		.removeClass('loading')
		.getElement('a.continue-shopping')
		.addEvent('click', function(e){ closeBasketPopup(this, e); });
	}

	

	var updateSmallBasket = function(obj){

		//checks if the small basket exists
		var newTotal = 0;
		var newItems = 0;
		var price = obj.price.toFloat();

		if($('basket-summary-small')){
			var products = $('basket-summary-small-products');
			var total = $('basket-summary-small-total');
			var items = $('basket-summary-small-items');
			var div  = new Element('div', {'class':'item clear'});
			var p    = new Element('p', {'text': obj.qty+' x ' + obj.title + (obj.attributeTitle!=''?' ('+obj.attributeTitle+')':'')});
			var span = new Element('span', {'html':obj.symbol+price.numberFormat(2)});

			//add element to small basket		
			p.inject(div);
			span.inject(div);
			div.inject(products, 'top');

			//if no prods message is in delete it
			if($('no-prods-msg')){ $('no-prods-msg').dispose(); }

			//update grand total
			newItems = items.get('text').toInt()+1;
			newTotal = total.get('text').replace(/,/g, '');
			newTotal = newTotal.toFloat()+price;
			newTotal = newTotal.round(2);
			total.set('text', newTotal.numberFormat(2));
			items.set('text', newItems);
		}

		//update basket line
		if($('basket-line')){
			var lineTotal = $('basket-line-total');
			var lineItems = $('basket-line-items');
			var lineNewTotal = lineTotal.get('text').replace(/,/g, '');
			var lineNewItems = lineItems.get('text').toInt()+1;

			lineNewTotal = lineNewTotal.toFloat()+price;
			lineNewTotal = lineNewTotal.round(2);

			$('basket-line-items').set('text', lineNewItems);
			$('basket-line-total').set('text', lineNewTotal.numberFormat(2));
		}
	};


	var closeBasketPopup = function(el, event){
		if(event){var e = new Event(event).stop();}
		if($('basket-popup-container')){
			$('mbOverlay').fade('out');
			$('basket-popup-container').fade('out');
		}
	};

})();


Number.implement({
	numberFormat : function(decimals, dec_point, thousands_sep) {
		decimals = Math.abs(decimals) + 1 ? decimals : 2;
		dec_point = dec_point || '.';
		thousands_sep = thousands_sep || ',';

		var matches = /(-)?(\d+)(\.\d+)?/.exec((isNaN(this) ? 0 : this) + ''); // returns matches[1] as sign, matches[2] as numbers and matches[3] as decimals
		var remainder = matches[2].length > 3 ? matches[2].length % 3 : 0;
		return (matches[1] ? matches[1] : '') + (remainder ? matches[2].substr(0, remainder) + thousands_sep : '') + matches[2].substr(remainder).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep) + 

				(decimals ? dec_point + (+matches[3] || 0).toFixed(decimals).substr(2) : '');

	}
});

// Swap alternate medium image
function swapImage(el){
	var target=($(el).getProperty('rel'));
	$('baseimage').set('src', target);
}

// Swap alternate xlarge image
function swapLargeImage(el){
	var target=($(el).getProperty('rel'));
	$$('.baselrgimage').fade('hide');
	$$('.baselrgimage').set('src', target);
	$$('.baselrgimage').fade('in');
}
	
