window.addEvent('domready', function(e){
	kamUi.setInitialiseOptions({
		kamForm:{
			errorReporting: 'alert'
		}
	});
//	kamUi.initialise();

	var faderImages = document.id('faderImages');
	if(faderImages){
		var changer = new kamContentChanger(faderImages,{
			cellsElement : 'faderStore',
			autoChange : true
		});
	}
	
	// enlarge button
	var items = document.getElements("div.galleryItems a");
	items.each( function(elm,index){
		var spanElm = new Element("span", {
			"class":"enlarge",
			"html":"click to enlarge and order"
		});
		elm.grab(spanElm);
	});
	
	
	footer();
	gallery();
	registerForm();
	kamUi.initialise();
	accountForm();
	memberHome();
	basket();
});

function memberHome(){
	// Expands and contracts the details tables
	var table = document.id('parentTable');
	
	if(table){
		var detailTableObjs = [];
		var flag = false;
		// Create and array of objects, each comprising of a fx object and the height of the associated table
		document.getElements('.detailsTable').each( function(table){ 
			detailTableObjs.push({
				fx : new Fx.Morph(table, { 
					onStart : function(){ flag = true; },
					onComplete : function(){ flag = false }				
				}),
				height : table.measure(function(){
    				return this.getSize().y;
				}) 
			});
		});
		
		document.getElements('a.viewDetails').each( function(a,key){
			a.store('status','closed');
			var height = 0;
			// On click of show/hide either morph the tables height to 'open' or 'close' and set the html on the 'a' element
			a.addEvent('click', function(e){
				e.preventDefault();
				if(!flag){
					if(a.retrieve('status') == 'closed'){
						a.store('status','open');
						a.set('html','Hide details');										
						
						detailTableObjs[key].fx.set({ 
							'height':0,
							'display':'block'
						});
						detailTableObjs[key].fx.start({'height':detailTableObjs[key].height});		
					}else{
						a.store('status','closed');
						a.set('html','Show details');
						
						detailTableObjs[key].fx.start({'height':0});	
					}
				}
			});
		});
	}
}

function accountForm(){
	var form = document.id('accountDetailsForm');
	if(form){
		var heightReg = 0;
		var flag = false;
		var fxReg = new Fx.Morph(document.id('accountDetailsSection'),{
			onStart: function(){ flag = true; },
			onComplete: function() { flag = false; }
		});
		
		var delSection = document.id('deliverySection');
		if ( delSection ){
			var delRadios = delSection.getElements('input')	
		
			delRadios.each( function(input, key){
				if(input.checked){
					(key == 0) ? heightReg = 580 : heightReg = 850;
					fxReg.start({'height':heightReg});
				}
				input.addEvent('click', function(e){
					if(!flag){
						(key == 0) ? heightReg = 580 : heightReg = 850;
						fxReg.start({'height':heightReg});
					}else{
						e.preventDefault();	
					}
				});
			});
		}
	}
}

function registerForm(){
	// Customer section - makes the register form open or close in response to a user clicking on either of the radios 
	// 'new customer' or 'returning customer'
	var form = document.id('continueForm');
	if(form){			
		var heightReg = 0;		
		var heightPass = 0;
		var newCustomerForm = document.id('newCustomerForm');
		var flag = false;
		var fxReg = new Fx.Morph(newCustomerForm,{
			onStart: function(){ flag = true; },
			onComplete: function() { flag = false; }
		});
		var fxPass = new Fx.Morph(document.id('passwordSection'));
		
		newCustomerForm.getElements('input,select').each( function(element){
			element.set('disabled', 'disabled');
		});
		
		document.id('customerSection').getElements('input').each( function(input, key){
			input.addEvent('click', function(e){																					
				if(!flag){
					if(key == 0){
						heightReg = 0; 
						heightPass = 80;	
						
						newCustomerForm.getElements('input,select').each( function(element){
							element.set('disabled', 'disabled');
						});
					}else{
						heightPass = 0;
						heightReg = 660;
						
						newCustomerForm.getElements('input,select').each( function(element){
							element.erase('disabled');
						});
					}
					fxReg.start({'height':heightReg});

					fxPass.start({'height':heightPass});
				}else{
					e.preventDefault();	
				}
			});
		});		
		
		// Delivery expand
		var delRadios = document.id('deliverySection').getElements('input')
		delRadios.each( function(input, key){
			input.addEvent('click', function(e){
				if(!flag){
					(key == 0) ? heightReg = 660 : heightReg = 950;
					fxReg.start({'height':heightReg});
				}else{
					e.preventDefault();	
				}
			});
		});

		// Populate the delivery address if same as billing, or vica versa
		var delInputs = document.id('deliveryAddressSection').getElements('input, select');
		var billInputs = document.id('billingAddressSection').getElements('input, select');
		

		
//		document.id('customerSubmit').addEvent('click', function(e){
		form.addEvent('submit', function(e){								
			e.preventDefault();				
			// Check if the delivery is the same as the billing or not
			if(delRadios[0].checked){ // Yes
				billInputs.each( function(input,key){
					if(input.get('type') == 'text') delInputs[key].set('value',(input.get('value')));								  
				});
			}else{ // No
				delInputs.each( function(input){ 
					if(input.get('type') == 'text') input.set('value','');											
				});
			}	
		//	form.submit();
		});
		
	}
}

function gallery(){
	// Modal handler for the product details
	var galleryDiv = document.getElement('.galleryItems');

	if(galleryDiv){													
		galleryDiv.getElements('a').each( function(a){
			a.addEvent('click', function(e){												  
				e.preventDefault();
				new kamContentRequest(a.get('href'),{
					retrieve: 'productDetails',
					evalScripts: true,
					onSuccess: function(response){
						new kamModal({
							content: document.id(response),
							onShow: function(){
								var form = this.elements.content.getElement('.productPurchasingOptions');
								if ( form ){
									if ( typeof purchaseOptions != 'undefined' ){
										var price = form.getElement('.optionPrice');
										var select = form.getElement('select');
										select.addEvent('change', function(event){
											var newValue = select.get('value');
											if ( purchaseOptions[newValue] ) {
												price.set('html', purchaseOptions[newValue]);
											}
										});
									}
								}
							}
						}).show();
					}
				}).execute();
			});
		});
	}

	// sub nav for the gallery pages
	var subNavDiv = document.getElement('.sub');
	if ( subNavDiv ){
		var bottomLis = subNavDiv.getElements('ul.parentUl > li.active > ul > li');
		bottomLis.each( function(li){
			li.getElement('a').addEvent('click', function(e){
				e.preventDefault();
				li.toggleClass('selected', ! li.hasClass('selected'));
				
				var conCatString = '';
				bottomLis.each( function(element){
					if ( element.hasClass('selected') ) {
						if ( conCatString != '' ) conCatString += ',';
						conCatString += element.getElement('a').get('rel');
					}
				});
				
				var uri = new URI();
				uri.setData({
					toggledTags: conCatString
				},true);
				uri.go();
			});
		});
	}
}

function footer(){
	// applies classes to footer elements for ie8 and older browsers that don't support selectors fully
	if(Browser.ie == true && Browser.version < 9){	
		var footerDiv = document.getElement('.footer');
		
		var galleryLi = footerDiv.getElements('li:nth-child(3)').addClass('galleryNav');				
		galleryLi.getElements('li:nth-child(odd)').each( function(li){ li.addClass('odd'); });		
	}
}

function basket(){
	var deliveryOption = document.id('deliveryOption');
	var checkoutButton = document.id('checkoutButton');
	if ( deliveryOption && checkoutButton ){
		var handler = function(){
			var uri = new URI(checkoutButton.get('href'));
			uri.setData({
				kamECommerceAction: 'addItem',
				'kamItem-delivery-option': deliveryOption.get('value')
			}, true);
			checkoutButton.set('href', uri);
		};
		deliveryOption.addEvent('change', handler);
		handler();
	}
}
