

(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); });
		
		
		// showhide link div toggle

		$$('.videolink').addEvent('click', function(){ replacevideo(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.downloads').length > 0){
			$$('#tabs a').addEvent('click', function(e){ setProdManualTab(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');

		}

	};

	

	var replacevideo = function(el){
		$('videoplayer').empty();
		video = el.getChildren('.hide').get('html')
		$('videoplayer').set('html',video);
		//alert(video);	
	};




})();



















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) : '');

	}





});
