
(function(){

	//vars
	var BRC = {
		prodDetailsPrice:'',
		prodDetailsExVatPrice:'',
		prodDetailsImage:'',
		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(); });
		}
		// Rotate Banner
		if ($('home-banner')){
			startBannerRotation('#home-banner a',6000);
		}
		
		if ($('depart-img')){
			startBannerRotation('.depart-img a',6000);
		}
		
		$$('.addtobasket').addEvent('click', function(e){ addToBasket(this, e); });	

		// ::: page spacific javascript 
		if($$('body.details').length > 0){
		
			//event for attribute products
			if($('ddlopt'))	{ 
				BRC.prodDetailsPrice = $('product_price').get('text');
				if($('exvatprice')){ 
					BRC.prodDetailsExVatPrice = $('exvatprice').get('text');
				}
				BRC.prodDetailsImage = $('baseimage').get('src');
				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);
			$('baselinkimage').set('href', BRC.prodDetailsImageLarge);
			if($('exvatprice')){ $('exvatprice').set('text', BRC.prodDetailsPrice);}
			$('product_price').set('text', BRC.prodDetailsExVatPrice);
			MagicZoom.refresh();MagicZoom.update();
			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 = obj.price.toFloat().numberFormat(2);
				$('product_price').set('text', exvatprice);
				$('baseimage').set('src', obj.imagelarge);
				$('baselinkimage').set('href', obj.imagexlarge);
				if($('exvatprice')){ $('exvatprice').set('text', price); }
				MagicZoom.refresh();MagicZoom.update();
			}
		};
		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 
		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 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')){
			$('basket-popup-container').fade('out');
		}
	};
	


})();









Number.implement({

	/*
	Property: numberFormat
		Format a number with grouped thousands.

	Arguments:
		decimals, optional - integer, number of decimal percision; default, 2
		dec_point, optional - string, decimal point notation; default, '.'
		thousands_sep, optional - string, grouped thousands notation; default, ','

	Returns:
		a formatted version of number.

	Example:
		>(36432.556).numberFormat()  // returns 36,432.56
		>(36432.556).numberFormat(2, '.', ',')  // returns 36,432.56
	*/

	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) : '');
	}


});