/* 
 * Author: Chris Wheeler of Hayden Digital
 */

var windowselector;
var blindselector;
var swatchbasket;

$(function() {
	
	$('body').ajaxStart(function() {
		$(this).addClass('isloading');
		$('.hideonajax').hide();
		$('.ajax-status').fadeIn()
		
	});

	$('body').ajaxStop(function() {
		$(this).removeClass('isloading');
		$('.ajax-status').hide()
		$('.hideonajax').show();
	});
			

	// SWATCH BASKET
	
	swatchbasket = {

		blindcolourlist: $('#blindselector div.blindcolourselector ul.blindcolours'),
			
		swatches: {
			swatchcount: 		0,
			swatchcolours: 		[false, false, false, false, false],
			readytoorder: 		false
			
		},
						
		init: function() {

			$('#swatchbasket a').css('opacity', '0.2');

			$('#swatchbasket a').click(function() {
				if (swatchbasket.swatches.swatchcount > 0) {
					var url = "/swatches/?colours=";
					$(swatchbasket.swatches.swatchcolours).each(function(index, item) {
						var swatchcolour = this;
						if(swatchcolour != false) {
							url += this + "X";	
						}
					});
					// Remove final , from url, and redirect
					location.href=url.substring(0, url.length-1);;
				}
				return false;
			});
			
			$('#swatchbasket').droppable({
				activeClass: "droptarget",
				activate: function(event, ui) {
					var duplicate = false;
					$(swatchbasket.swatches.swatchcolours).each(function() {
						if (this == $(ui.draggable).data('blindcolour').code) {
							duplicate = true;
						}
					});
					if (swatchbasket.swatches.swatchcount >= 5) {
						$(this).find("h3").html("Basket Full");
					} else if (duplicate) {
						$(this).find("h3").html("Duplicate");
					} else {
						$(this).find("h3").html("Drop here!");
						$(this).find("h3, p").stop().animate({'background-color':'#D6EAD6'}, 'slow');
					}
				},
				deactivate: function(event, ui) {
					$(this).find("h3").html("Free Swatches");
					$(this).find("h3, p").stop().animate({'background-color':'#EEEEEE'}, 'slow');
				},
				drop: function(event, ui) {
					swatchbasket.addswatch($(ui.draggable).data('blindcolour').code);
				}
			});
						
			
		},
		
		addswatch: function(colourcode) {
			var duplicate = false;
			$(swatchbasket.swatches.swatchcolours).each(function() {
				if (this == colourcode) {
					duplicate = true;
				}
			});
			if (swatchbasket.swatches.swatchcount < 5 && !duplicate) {
				swatchbasket.swatches.swatchcolours[swatchbasket.swatches.swatchcount] = colourcode;
				swatchbasket.swatches.swatchcount += 1; 
				swatchbasket.update();
			}
		},
		
		removeswatch: function(colourcode) {
			var i = 0;
			$(swatchbasket.swatches.swatchcolours).each(function() {
				var swatchcolour = this;
				if ((swatchcolour + '') == (colourcode + '')) {
					swatchbasket.swatches.swatchcolours[i] = false;
					swatchbasket.swatches.swatchcount -= 1; 
					swatchbasket.update();
				}
				i++;
			});
		},
		
		update:function() {
			// Reorder swatch array
			var newswatchcolours = [false, false, false, false, false];
			var i = 0;
			$(swatchbasket.swatches.swatchcolours).each(function() {
				var swatchcolour = this;
				if (swatchcolour != false) {
					newswatchcolours[i] = swatchcolour;
					i++;
				}
			});
			swatchbasket.swatches.swatchcolours = newswatchcolours;
			// Update count
			swatchbasket.swatches.swatchcount = i;
			// Loop through swatches and populate list
			var i = 0;
			$(swatchbasket.swatches.swatchcolours).each(function() {
				$('#swatchbasket ul li').eq(i).unbind('click');
				var swatchcolour = this;
				if (swatchcolour != false) {
					$('#swatchbasket ul li').eq(i).css('background-image', "url('/template/theme/loftblinds/image/blindselector/blindcolour/" + swatchcolour + ".jpg')");
					$('#swatchbasket ul li').eq(i).html('');
					$('#swatchbasket ul li').eq(i).unbind('click');
					$('#swatchbasket ul li').eq(i).click(function() {
						swatchbasket.removeswatch(swatchcolour);
					});
				} else {
					$('#swatchbasket ul li').eq(i).css('background-image', 'none');
					$('#swatchbasket ul li').eq(i).html(i+1);
				}
				i++;
			});
			// Toggle order button
			if (swatchbasket.swatches.swatchcount > 0) {
				$('#swatchbasket a').stop().animate({'opacity':1});
			} else {
				$('#swatchbasket a').stop().animate({'opacity':0.2});
			}
		}
		
	};

	swatchbasket.init();	
	
	// WINDOW SELECTOR
	
	windowselector = {

		windowdata: 		false,
		windowtypelist: 	$('#windowtypelist'),
		windowsizelist: 	$('#windowsizelist'),
		windowtypechoice: 	$('#windowtypechoice'),
		windowsizechoice: 	$('#windowsizechoice'),
		notselected: 		$('#windowselector div.notselected'),
		proceed: 			$('#windowselector div.proceed'),
		gobutton: 			$('#windowselector input.continue.go'),

		init: function(windowdata) {
			
			windowselector.windowdata = windowdata;
					
			// Click event for window type questionmark
			$('> p', windowselector.windowtypechoice).live('click', function() {
				windowselector.showtypechoices();
			});
			// Click event for window type choice
			$('a', windowselector.windowtypelist).live('click', function() {
				windowselector.pickwindowtype($(this).text());
			});
			
			// Click event for window size questionmark
			$('> p', windowselector.windowsizechoice).live('click', function() {
				windowselector.showsizechoices();
			});
			// Click event for window size choice			
			$('a', windowselector.windowsizelist).live('click', function() {
				windowselector.pickwindowsize($(this).text());
			});
			
			// Cancel click
			$('body').click(function(e) {
				if (e.target.nodeName != 'UL') {
					windowselector.hidechoices();
				}
			});

			//windowselector.showproceed(); // For testing
			
		},
		
		showtypechoices: function() {
			windowselector.notselected.hide();
			windowselector.proceed.hide();
			windowselector.gobutton.hide();
			windowselector.windowsizechoice.removeClass('selected');
			windowselector.windowtypechoice.addClass('selected');
			windowselector.windowsizelist.hide();
			windowselector.windowtypelist.show();
			$('div.videofallback *').hide();
		},
	
		showsizechoices: function() {
			if ($('#windowtypefield').val() == '') {
				windowselector.showtypechoices();
			} else {
				windowselector.notselected.hide();
				windowselector.proceed.hide();
				windowselector.gobutton.hide();
				windowselector.windowtypechoice.removeClass('selected');
				windowselector.windowsizechoice.addClass('selected');
				windowselector.windowtypelist.hide();
				windowselector.windowsizelist.show();
			}
			$('div.videofallback *').hide();
		},
		
		hidechoices: function() {
			windowselector.windowtypelist.hide();
			windowselector.windowsizelist.hide();
			$('div.videofallback *').show();
		},
		
		pickwindowtype: function(windowtype) {

			$('p', windowselector.windowsizechoice).text('?');
			$('#windowsizefield').val('');
			
			windowselector.windowtypechoice.removeClass('selected');
			windowselector.windowsizechoice.addClass('selected');
			windowselector.windowtypelist.hide();
			// Un-comment to auto switch to size list on type slection (could be confusing with double-clicks)
//			windowselector.windowsizelist.show();
			
			$('p', windowselector.windowtypechoice).text(windowtype);
			$('#windowtypefield').val(windowtype);

			var windowsizes = false;

			$(windowselector.windowdata).each(function() {
				if (this.code == windowtype) {
					windowsizes = this.sizes;
				}
			});
			
			$(windowselector.windowsizelist).empty();
			
			if ($(windowsizes).length == 1) {
			
				// Select the single value
				windowselector.pickwindowsize(windowsizes[0].code);
				
			} else {
				
				// Split into columns of 11,
				var itemnumber = 0;
				var listitemnumber = 0;
				var toplistitem = $('<li></li>');			
				var sublist = $('<ul></ul>');
				var lastagecode = false;
				$(windowsizes).each(function() {
					if (listitemnumber == 11 || (lastagecode && this.agecode != lastagecode)) {
						toplistitem.append(sublist);
						windowselector.windowsizelist.append(toplistitem);
						toplistitem = $('<li></li>');
						sublist = $('<ul></ul>');
						listitemnumber = 0;
					}
					var listitem = $('<li><a href="#">' + this.code + '</a></li>');
					sublist.append(listitem);
					lastagecode = this.agecode;
					listitemnumber++;
					itemnumber++;
				});
				if (listitemnumber) {
					toplistitem.append(sublist);
					windowselector.windowsizelist.append(toplistitem);
				}

			}

		},
		
		pickwindowsize: function(windowsize) {
			windowselector.windowsizelist.hide();
			windowselector.windowsizechoice.removeClass('selected');			
			$('p', windowselector.windowsizechoice).text(windowsize);
			$('#windowsizefield').val(windowsize);
			if($('#windowsizefield').val() && $('#windowsizefield').val()) {
				windowselector.showproceed();
			}
		},
		
		showproceed:function() {
			if ($.browser.msie) {
				windowselector.notselected.hide();
				windowselector.proceed.show();
				windowselector.gobutton.show();
			} else {
				$('.notselected').stop().fadeOut('fast', function() {
					windowselector.proceed.stop().fadeIn('slow');
					windowselector.gobutton.stop().fadeIn('slow');
				});
			}
		}, 
		
		hideproceed: function() {
			if ($.browser.msie) {
				windowselector.proceed.hide();
				windowselector.gobutton.hide();
				windowselector.notselected.show();
			} else {
				windowselector.gobutton.stop().fadeOut('fast');
				windowselector.proceed.stop().fadeOut('fast', function() {
					windowselector.notselected.stop().fadeIn('fast');
				});
			}
		}
		
	};
		
	// BLIND SELECTOR

	blindselector = {

		windowdata: 				false,
		admin: 						false,
		hasloaded: 					false,
		firstload: 					true,
		morevisible: 				false,
		defaultblindtypeid: 		1,
		multidiscount:		 		0,
		currentcolourcode: 			false,
		summary: 					$('#blindselector div.summary'),
		windowtypelist: 			$('#blindselector #windowtypelist'),
		windowsizelist: 			$('#blindselector #windowsizelist'),
		windowfinish: 				$('#blindselector div.windowfinish'),
		windowfinishinput: 			$('#blindselector #windowfinishwhiteline'),
		blind: 						$('#blindselector div.blindtypeselector div.information div.blind'),
		blindframe: 				$('#blindselector div.blindtypeselector div.information div.blindframe'),
		blindframeupvc: 			$('#blindselector div.blindtypeselector div.information div.blindframe.upvc'),
		blindpullupvc: 				$('#blindselector div.blindtypeselector div.information div.blind div.pull.upvc'),
		blindframeupvcwhiteline: 	$('#blindselector div.blindtypeselector div.information div.blindframe.whiteline'),
		blindcolourarea: 			$('#blindselector div.blindcolourarea'),
		blindcolourselector: 		$('#blindselector div.blindcolourselector'),
		blindcolourlist: 			$('#blindselector div.blindcolourselector ul.blindcolours'),
		colours: 					$('#blindselector div.blindcolourselector ul.blindcolours li'),
		pattern: 					$('#blindselector div.blindtypeselector div.information div.blind div.pattern'),
		blindtypeheading: 			$('#blindselector div.blindtypeheading'),
		blindtypeselector: 			$('#blindselector div.blindtypeselector'),
		blindtypes: 				$('#blindselector div.blindtypebutton'),
		products: 					$('#blindselector div.productbutton'),
		morediv: 					$('#blindselector div.blindtypeselector div.blindtype > div > div.more'),
		morearea: 					$('#blindselector div.morearea'),
		message: 					$('#blindselector div.blindtypeselector div.message'),
		increase: 					$('#blindselector div.summary a.increase'),
		decrease: 					$('#blindselector div.summary a.decrease'),
		basketadd: 					$('#blindselector div.summary div.basketadd'),
		
		builder: {
			blindtypeid: false,
			windowcode: false,
			windowsize: "???",
			whiteline: false,
			blindcode: false,
			blindname: false,
			blindcolourcode: false,
			blindcolourname: false,
			price: false,
			productid: false,
			stock: 0,
			quantity: 1,
			discount: 0,
			totalprice: false,
			readytoadd: false,
			checkready: function() {
//				console.log(blindselector.builder);
				if (blindselector.builder.windowcode 
					&& blindselector.builder.windowsize != "???"
					&& blindselector.builder.blindcode
					&& blindselector.builder.blindcolourcode
					&& blindselector.builder.price
					&& blindselector.builder.productid
					&& blindselector.builder.quantity
					) {
					blindselector.builder.readytoadd = true;
					blindselector.basketadd.stop().animate({'opacity':1});
				} else {
					blindselector.builder.readytoadd = false;
					blindselector.basketadd.stop().css({'opacity':0.2});
				}
				return blindselector.builder.readytoadd;
			},
			updatesummary: function() {
				// Calculate price
				blindselector.builder.totalprice = blindselector.builder.price * blindselector.builder.quantity;
				// Multi Blind Discount
				if (blindselector.builder.blindcolourcode != "***" && blindselector.builder.quantity > 1) {
					blindselector.builder.totalprice = blindselector.builder.totalprice - (blindselector.multidiscount * (blindselector.builder.quantity -1));
				}
				
				// Blind Type
				$('div.blindcode span.code', blindselector.summary).html(blindselector.builder.blindcode);
				$('div.blindcode span.name', blindselector.summary).html(blindselector.builder.blindname);
				// Colour
				if (blindselector.builder.blindcolourcode) {
					$('div.blindcolourcode span.code', blindselector.summary).html(blindselector.builder.blindcolourcode);
					$('div.blindcolourcode span.name', blindselector.summary).html(blindselector.builder.blindcolourname);
				} else {
					$('div.blindcolourcode span.code', blindselector.summary).html('---');
					$('div.blindcolourcode span.name', blindselector.summary).html('---');
				}
				// Quantity
				$('div.blindquantity span.quantity', blindselector.summary).html(blindselector.builder.quantity);
				// Price
				if (blindselector.builder.totalprice > 0) {
					$('div.blindprice span.price', blindselector.summary).html('&pound;' + blindselector.builder.totalprice.toFixed(2));
				} else {
					$('div.blindprice span.price', blindselector.summary).html('---');
				}
				if (blindselector.builder.blindcolourcode) {
					document.title = blindselector.builder.windowsize + ' ' + blindselector.builder.blindcode + ' ' + blindselector.builder.blindcolourcode + ' / ' + blindselector.builder.blindname + ' ' + blindselector.builder.blindcolourname;
				}
				blindselector.builder.checkready();
			},			
			reset: function() {
				blindselector.builder.blindcode = false;
				blindselector.builder.blindname = false;
				blindselector.builder.blindcolourcode = false;
				blindselector.builder.blindcolourname = false;
				blindselector.builder.price = false;
				blindselector.builder.productid = false;
				blindselector.builder.stock = 0;
				blindselector.builder.quantity = 1;
				blindselector.builder.totalprice = false;
			}
		},
		
		swatches: {
			swatchcount: 0,
			swatchcolours: [false, false, false, false, false],
			readytoorder: false
			
		},
						
		init: function(windowdata, defaultwindowcode, defaultwindowsizecode, admin, multidiscount) {
			
			$('#content').css('background-color', '#ffffff');
			
			blindselector.admin = admin;
			blindselector.multidiscount = multidiscount;
			blindselector.windowdata = windowdata;
			blindselector.defaultwindowcode = defaultwindowcode;
			blindselector.defaultwindowsizecode = defaultwindowsizecode;
			
			var i = 0;
			blindselector.windowtypelist.empty();
			var option = $('<option>???</option>');
			option.data('windowdataindex', false);
			blindselector.windowtypelist.append(option);
			$(blindselector.windowdata).each(function() {
				var option = $('<option>' + this['code'] + '</option>');
				option.data('windowdataindex', i);
				blindselector.windowtypelist.append(option);
				i++;
			});
			blindselector.windowtypelist.live('change', function() {
				blindselector.pickwindowtype($('option:selected', this).data('windowdataindex'));
			});
			blindselector.windowsizelist.live('change', function() {
				blindselector.pickwindowsizecode(false, $('option:selected', this).val());
			});
			blindselector.colours.live('click', function() {
				$('.selected', blindselector.blindcolourselector).removeClass('selected');
				$(this).addClass('selected');
				blindselector.pickcolour($(this));
			});
			blindselector.blindtypes.live('click', function() {
				var pickedblindtypeid = $(this).attr('id').replace('blindtypeid-', '');
				$('.selected', blindselector.blindblindtypeselector).removeClass('selected');
				$('.ingroup').removeClass('ingroup');
				$(this).addClass('selected');
				$('.' + $(this).attr('class').match(/group\-.+?\b/)).addClass('ingroup');
				$('.selected', blindselector.blindcolourselector).removeClass('selected');
				blindselector.slideblindup(function() {				
					blindselector.pickblindtype(pickedblindtypeid, false);
				});
			});
			blindselector.products.live('click', function() {
				var pickedproductid = $(this).attr('id').replace('product-', '');
				$('.selected', blindselector.blindblindtypeselector).removeClass('selected');
				$('.ingroup').removeClass('ingroup');
				$(this).addClass('selected');
				$('.' + $(this).attr('class').match(/group\-.+?\b/)).addClass('ingroup');
				$('.selected', blindselector.blindcolourselector).removeClass('selected');
				blindselector.slideblindup(function() {				
					blindselector.pickproduct(pickedproductid);
				});
			});
			blindselector.morediv.live('click', function() {
				if (blindselector.morevisible) {
					blindselector.morearea.slideUp('slow');
					blindselector.morevisible = false;
				} else {
					$('.selected', blindselector.blindblindtypeselector).removeClass('selected');
					$('.ingroup').removeClass('ingroup');
					$(this).addClass('selected');
					$('.' + $(this).attr('class').match(/group\-.+?\b/)).addClass('ingroup');
					$('.selected', blindselector.blindcolourselector).removeClass('selected');
					blindselector.morearea.stop().slideDown('slow');
					blindselector.morevisible = true;
				}
			});
			blindselector.windowfinishinput.live('change', function() {
				if ($(this).is(':checked')) {
					blindselector.builder.whiteline = true;
					blindselector.blindframeupvcwhiteline.fadeIn('fast');
					blindselector.blindpullupvc.fadeIn('fast');
				} else {
					blindselector.builder.whiteline = false;
					blindselector.blindframeupvcwhiteline.fadeOut('fast');
					blindselector.blindpullupvc.fadeOut('fast');
				}
				blindselector.slideblindup(function() {
					blindselector.pickblindtype(blindselector.builder.blindtypeid, blindselector.builder.whiteline);
				});
			});
			blindselector.basketadd.click(function() {
				blindselector.addtobasket();
			});

			// Default Window
			blindselector.pickwindowcode(blindselector.defaultwindowcode);
			blindselector.pickwindowsizecode(blindselector.defaultwindowcode, blindselector.defaultwindowsizecode);
			
			// Default to Blind
			blindselector.pickblindtype(blindselector.defaultblindtypeid, blindselector.builder.whiteline);
			$('#blindtypeid-' + blindselector.defaultblindtypeid).addClass('selected');
			$('.' + $($('#blindtypeid-' + blindselector.defaultblindtypeid)).attr('class').match(/group\-.+?\b/)).addClass('ingroup');
			
			blindselector.builder.quantity = 1;
			blindselector.increase.click(function() {
				if (blindselector.builder.quantity < 100) {
					blindselector.builder.quantity += 1;
					blindselector.builder.updatesummary();
				}
			});
			blindselector.decrease.click(function() {
				if (blindselector.builder.quantity > 1) {
					blindselector.builder.quantity -= 1;
					blindselector.builder.updatesummary();
				}
			});
			
		},
		
		slideblindup: function(callback) {
			blindselector.blind.animate({'height': 10, 'opacity':1}, 100, 'swing', callback);
		},

		slideblinddown: function(callback) {
			blindselector.blind.animate({'height': 200, 'opacity':1}, 500, 'swing', callback);
		},

		pickwindowcode: function(windowcode) {
			// Wrapper for pickwindowtype for selection by code
			var windowtypeindex = 0;			
			var i = 0;
			$(blindselector.windowdata).each(function() {
				if (this['code'].toLowerCase() == windowcode.toLowerCase()) {
					windowtypeindex = i;
				}
				i++;
			});
			$('#windowtypelist option:selected').attr('selected', false);
			$('#windowtypelist option::nth-child(' + (windowtypeindex + 2) + ')').attr('selected', 'selected');
			blindselector.pickwindowtype(windowtypeindex);
		},

		pickwindowtype: function(windowtypeindex, callback) {
			blindselector.slideblindup();
			blindselector.builder.windowcode = blindselector.windowdata[windowtypeindex].code;
			blindselector.builder.windowsize = '???';
			if (windowtypeindex !== false) {
				var windowsizes = blindselector.windowdata[windowtypeindex].sizes;
				var whitelineavailable = blindselector.windowdata[windowtypeindex].whitelineavailable;
			}
			if (windowtypeindex !== false && whitelineavailable == '1') {
				blindselector.blindframeupvc.fadeIn('fast');
				blindselector.windowfinish.fadeIn('fast');
			} else {
				blindselector.blindframeupvc.fadeOut('fast');
				blindselector.blindframeupvcwhiteline.fadeOut('fast');
				$('#windowfinishwhiteline').attr('checked', false);
				blindselector.builder.whiteline = false;
				blindselector.windowfinish.fadeOut('fast');
			}
			blindselector.windowsizelist.empty();
			var option = $('<option>???</option>');
			blindselector.windowsizelist.append(option);
			$(windowsizes).each(function() {
				var option = $('<option>' + this + '</option>');
				blindselector.windowsizelist.append(option);
			});
		},
		
		pickwindowsizecode: function(windowcode, windowsizecode) {
			blindselector.builder.windowsize = windowsizecode;
			if (windowcode) {
				var windowsizecodeindex = 0;			
				$(blindselector.windowdata).each(function() {
					if (this['code'].toLowerCase() == windowcode.toLowerCase()) {
						var i = 0;
						$(this['sizes']).each(function() {
							if (this.toLowerCase() == windowsizecode.toLowerCase()) {
								windowsizecodeindex = i;
							}
							i++;
						});
					}
				});
				$('#windowsizelist option:selected').attr('selected', false);
				$('#windowsizelist option::nth-child(' + (windowsizecodeindex + 2) + ')').attr('selected', 'selected');
			} else {
				blindselector.pickblindtype(blindselector.builder.blindtypeid, blindselector.builder.whiteline);
			}
		},
	
		pickblindtype: function(blindtypeid, whiteline) {
			blindselector.builder.blindtypeid = blindtypeid;
			blindselector.blindcolourlist.stop().animate({opacity:0}, 'fast', false, function() {			
				// Send Ajax request
				$.ajax({
					url: '/ajax/blindselector.php',
					data: 'mode=changeblindtype&blindtypeid=' + blindselector.builder.blindtypeid + '&windowcode=' + blindselector.builder.windowcode + '&windowsize=' + blindselector.builder.windowsize + '&whiteline=' + (blindselector.builder.whiteline ? 1 : 0),
//					data: 'mode=changeblindtype&blindtypeid=' + blindselector.builder.blindtypeid + '&windowsize=' + blindselector.builder.windowsize + '&whiteline=' + (blindselector.builder.whiteline ? 1 : 0),
					success: function(xml) {
						switch ($("status", xml).text()) {
							case '0':
								// Error
								alert($("message", xml).text());
								break;
							case '1':
								blindselector.builder.reset();
								blindselector.builder.blindcode = $("blindtype", xml).attr('code');
								blindselector.builder.blindname = $("blindtype", xml).attr('name');
								// Remove old colours
								$('li', blindselector.blindcolourlist).remove();
								// Add New Colours
								var numcolours = $("blindcolour", xml).length;
								$("blindcolour", xml).each(function() {
									var listitem = $('<li></li>');
									listitem.data("blindcolour", {
										"blindcolourid":$(this).attr('blindcolourid'), 
										"name":$(this).attr('name'),
										"swatch":$(this).attr('swatch'),
										"stock":$(this).attr('stock'),
										"price":$(this).attr('price'),
										"productid":$(this).attr('productid'),
										"code":$(this).attr('code'), 
										"texture":$(this).attr('texture')
									});
									listitem.css('background-image', "url('/template/theme/loftblinds/image/blindselector/blindcolour/" + $(this).attr('code') + ".jpg')");
									listitem.append($('<div class="handle"></div>'));
									if ($(this).attr('stock') > 0) {
										if (blindselector.admin == '1') { 
											listitem.append($('<p class="nextday">' + $(this).attr('stock') + ' in stock</p>'));
										} else {
											listitem.append($('<p class="nextday">Next Day</p>'));
										}
									}
									blindselector.blindcolourlist.append(listitem);
									listitem.draggable({
										'containment':blindselector.blindcolourarea,
										'cursor':'crosshair',
										'cursorAt':{'top':30,'left':38},
										'delay':100,
										'helper':'clone',
										'opacity':0.5,
										'revert':'invalid'
									});
								});
								// Fade In
								blindselector.blindcolourlist.animate({opacity:1}, 'fast');
								if (!blindselector.hasloaded) {
									// Loading screen still in place, so remove 
									$('#loadingoverlay').stop().animate({'margin-top':'0'}, 2000, function() {
										$('#loadingoverlay').css('background-image', 'none');
										$('#loadingoverlay').animate({'opacity':'0'}, 1000, function() {
											$('#loadingoverlay').hide();
										});
									});
									blindselector.hasloaded = true;
								}
								$('div.blindinfo > p.blindinfoextra', blindselector.blind).remove();
								$('p.blindinfoname', blindselector.blind).html($('div.blindtypebutton.selected > p.productname').html());
								if ($('div.blindtypebutton.selected p.moreinfo').html() != null) {
									$('div.blindinfo', blindselector.blind).append('<p class="blindinfoextra">' + $('div.blindtypebutton.selected p.moreinfo').html() + '</p>');								
								}
								if ($('div.blindtypebutton.selected p.fitting').html() != null) {
									$('div.blindinfo', blindselector.blind).append('<p class="blindinfoextra">' + $('div.blindtypebutton.selected p.fitting').html() + '</p>');
								}
								if (blindselector.pickcolourcode(blindselector.currentcolourcode)) {
									// Blind colour shown
									// Pickcolourcode updates summary
								} else {
									blindselector.showmessage('mblindtype');
									blindselector.builder.updatesummary();
								}
								break;
							default:
								alert('Something went wrong: ' + $("message", xml).text(), 'Message');
								callback();
								break;
						}
					},
					error: function(xml, type) {
						alert('The blind builder was unable to comminicate with the Loft Blinds web server - Please check your internet connection and try again.');
					}
				});
			});
		},
		
		pickproduct: function(productid) {
			blindselector.builder.productid = productid;
			// Send Ajax request
			$.ajax({
				url: '/ajax/blindselector.php',
				data: 'mode=getproduct&productid=' + blindselector.builder.productid,
				success: function(xml) {
					switch ($("status", xml).text()) {
						case '0':
							// Error
							alert($("message", xml).text());
							break;
						case '1':
							$('p.blindinfoname', blindselector.blind).html('');
							$('div.blindinfo > p.blindinfoextra', blindselector.blind).remove();
							blindselector.builder.reset();
							blindselector.builder.blindcode = "***";
							blindselector.builder.blindcolourcode = "***";
							blindselector.builder.updatesummary();
							// Fade Out
							$("product", xml).each(function() {
								$('p.blindinfoname', blindselector.blind).html($(this).attr("name"));
								// Update Summary
								blindselector.builder.blindname = $(this).attr("name"); 
								blindselector.builder.blindcolourname = $(this).attr("name"); 
								blindselector.builder.price = $(this).attr("price");
								blindselector.builder.productid = $(this).attr("productid");
								blindselector.builder.updatesummary();
								// Fade In
								blindselector.hidemessages();
								blindselector.slideblinddown();
							});
							break;
						default:
							alert('Something went wrong: ' + $("message", xml).text(), 'Message');
							callback();
							break;
					}
				},
				error: function(xml, type) {
					alert('Error.');
				}
			});
		},		
		
		
		pickcolourcode: function(colourcode) {
			// Wrapper for pickcolour to select by code
			var match = 0
			if (colourcode) {
				$('li', blindselector.blindcolourlist).each(function () {
				if ($(this).data("blindcolour").code == colourcode) {
					match = 1;
					blindselector.pickcolour($(this));
				}
			});
			}
			return match;
		},
		
		pickcolour: function(listitem) {
			if (blindselector.builder.blindcolourcode != listitem.data("blindcolour").code) {
				blindselector.hidemessages();
				blindselector.blind.stop();
				blindselector.currentcolourcode = listitem.data("blindcolour").code;
				blindselector.slideblindup(function() {
					// Update Builder
					blindselector.builder.blindcolourname = listitem.data("blindcolour").name + '<br />' + listitem.data("blindcolour").texture;
					blindselector.builder.blindcolourcode = listitem.data("blindcolour").code;
					blindselector.builder.price = listitem.data("blindcolour").price; 
					blindselector.builder.stock = listitem.data("blindcolour").stock; 
					blindselector.builder.productid = listitem.data("blindcolour").productid; 
					// Update Summary			
					blindselector.builder.updatesummary();
					// Show preview
					blindselector.pattern.css('background-image', listitem.css('background-image'));
					blindselector.slideblinddown();				
				});
			}
		},
			
		showmessage: function(classname) {
			blindselector.hidemessages(function() {
				blindselector.blind.stop();
				blindselector.slideblindup(function() {
					blindselector.pattern.css('background-image', "url('/template/theme/loftblinds/image/blindselector/blank.png')");
					blindselector.slideblinddown(function() {
						$('p.' + classname, blindselector.message).show().stop().animate({opacity:1}, 'fast');
					});
				});
			});
		},
		
		hidemessages: function(callback) {
			$('p', blindselector.message).stop().animate({opacity:0}, 'fast', false, callback).hide();
		},
		
		addtobasket: function() {
			if (blindselector.builder.readytoadd) {
				blindselector.basketadd.stop().animate({'opacity':0.2});
				$('#microbasket').stop().animate({'background-color':'#D6EAD6'}, 'slow', function() {
					$('#microbasket').animate({'background-color':'#EEEEEE'}, 'slow');
				});
				$.ajax({
					url: '/ajax/basket.php',
					data: 'mode=additem' 
						+ '&productid=' + blindselector.builder.productid 
						+ '&customerblindtypecode=' + blindselector.builder.blindcode
						+ '&customerwindowsizecode=' + blindselector.builder.windowsize
						+ '&customerwindowtypecode=' + blindselector.builder.windowcode
						+ '&quantity=' + blindselector.builder.quantity,
					success: function(xml) {
						switch ($("status", xml).text()) {
							case '0':
								alert($("message", xml).text(), 'Error');
								break;
							case '1':
								var bodyhtml = $("body", xml).text();
								$('#basket').html(bodyhtml);
								var microbaskethtml = $("microbasket", xml).text();
								$('#microbasket').html(microbaskethtml);
								break;
							default:
								alert('Unexpected Response: ' + $("message", xml).text(), 'Message');
								break;
						}
						blindselector.basketadd.animate({'opacity':0.2}, 2000, function() {
							blindselector.basketadd.animate({'opacity':1});
						});
					},
					error: function(xml, type) {
						alert('There was an error establishing a connection with the server, or the server did not respond as expected. Please check your internet connection and try again.', 'Communication Error (' + type + ')');
						blindselector.basketadd.animate({'opacity':1});
					}
				});
			}
		}
		
	};

	// BASKET
	
	var basket = {
		
		init: function() {
			// bind to quantity input
			$('input.basketitemquantity').live('change', function() {
				basket.changequantity($('input[name*="productid"]', $(this).parent()).val(), $('input[name*="basketitemquantity"]', $(this).parent()).val(), $('input[name*="customerblindtypecode"]', $(this).parent()).val(), $('input[name*="customerwindowsizecode"]', $(this).parent()).val(), $('input[name*="customerwindowtypecode"]', $(this).parent()).val());
				return false;
			});
			// bind to remove product
			$('a.basketremoveitembutton').live('click', function() {
				basket.removeproduct($(this).attr('class').match(/productid\-.+?\b/).toString().replace('productid-', ''));
				return false;
			});
			
		},
		
		removeproduct: function(productid) {
			$.ajax({
				url: '/ajax/basket.php',
				data: 'mode=removeproduct' 
					+ '&productid=' + productid,
				success: function(xml) {
					switch ($("status", xml).text()) {
						case '0':
							alert($("message", xml).text(), 'Error');
							break;
						case '1':
							var bodyhtml = $("body", xml).text();
							$('#basket').html(bodyhtml);
							var microbaskethtml = $("microbasket", xml).text();
							$('#microbasket').html(microbaskethtml);
							break;
						default:
							alert('Unexpected Response: ' + $("message", xml).text(), 'Message');
							break;
					}
				},
				error: function(xml, type) {
					alert('There was an error establishing a connection with the server, or the server did not respond as expected. Please check your internet connection and try again.', 'Communication Error (' + type + ')');
				}
			});	
		},
			
		changequantity: function(productid, quantity, customerblindtypecode, customerwindowsizecode, customerwindowtypecode) {
			$.ajax({
				url: '/ajax/basket.php',
				data: 'mode=changequantity' 
					+ '&productid=' + productid 
					+ '&customerblindtypecode=' + customerblindtypecode
					+ '&customerwindowsizecode=' + customerwindowsizecode
					+ '&customerwindowtypecode=' + customerwindowtypecode
					+ '&quantity=' + quantity,
				success: function(xml) {
					switch ($("status", xml).text()) {
						case '0':
							alert($("message", xml).text(), 'Error');
							break;
						case '1':
							var bodyhtml = $("body", xml).text();
							$('#basket').html(bodyhtml);
							var microbaskethtml = $("microbasket", xml).text();
							$('#microbasket').html(microbaskethtml);
							break;
						default:
							alert('Unexpected Response: ' + $("message", xml).text(), 'Message');
							break;
					}
				},
				error: function(xml, type) {
					alert('There was an error establishing a connection with the server, or the server did not respond as expected. Please check your internet connection and try again.', 'Communication Error (' + type + ')');
				}
			});	
		}
		
	};

	basket.init();

	// ADDRESS
	
	var address = {
			
		init: function(fieldsetclass) {
		
			var fsc = $('fieldset.address.' + fieldsetclass);
		
			// Setup billing address
			if($('input.billingmatchdelivery').is(":checked")) {
				$('div.billingaddress').hide();
			}
			$('input.billingmatchdelivery').live('click', function() {
				if($(this).is(":checked")) {
					$('.billingaddress').hide();
				} else {
					$('.billingaddress').show();
				}
			});

			// add address finder if addressstge is manual
			if ($('input.addressstage', fsc).val() == 'manual') {
				// add postcode finders
				$('div.manualentry', fsc).hide();
				$('div.postcodefinder', fsc).show();
				$('input.addressstage', fsc).val('auto1');
			}
			
			if ($('input.addressudprn', fsc).val()) {
				$('div.manualentry', fsc).hide();
			}
			
			// bind to address search buttons
			$('input.postcodelookup', fsc).live('click', function() {
				var postcode = $('input[name*="postcodefinder"]', fsc).val();
				if (postcode.length > 4) {
					// Hide postcode box
					$('div.postcodefinder', fsc).hide();
					address.find(postcode, fieldsetclass);
				} else {
					alert('Please enter your full postcode.');
				}
				return false;
			});
			
			// display the selected address
			$('input.addressselector', fsc).live('click', function() {
				var addressudprn = $(this).val();
				address.showaddress($(this).val(), $('label', $(this).parent()).html(), fieldsetclass);
			});
			
			// reset address finder
			$('a.editpostcode', fsc).live('click', function() {
				$(this).parent().remove();
				$('a.manualentry.notlisted', fsc).parent().remove();
				$('div.addresslist', fsc).hide();
				$('div.manualentry', fsc).hide();	
				$('div.postcodefinder', fsc).show();	
				$('input.addressstage', fsc).val('auto1');
				return false;
			});
			
			// choose manual entry
			$('fieldset.address.' + fieldsetclass + ' a.manualentry').live('click', function() {
				$(this).parent().remove();
				$('div.postcodefinder', fsc).hide();
				$('p.information.notlisted', fsc).remove();
				$('p.information.changeaddress', fsc).remove();
				$('div.addresslist', fsc).hide();
				$('div.manualentry', fsc).show();
				$('input.addressstage', fsc).val('manual');
				fsc.prepend($('<p class="information changeaddress"><a href="#" class="editpostcode">Change address</a></p>'));
				return false;
			});
			
			// prevent pressing enter on postcode field from submitting form
			$('input.postcodefinder', fsc).live('keypress', function(e) {
				if (e.keyCode == 13) {
					$('input.postcodelookup', fsc).click();
					return false;
				}
			});
			
		},
		
		find: function(postcode, fieldsetclass) {
			
			var fsc = $('fieldset.address.' + fieldsetclass);
			
			// Send request for addresses
			$('p.addressmessage', fsc).remove();
			fsc.addClass('ajaxtrigger');
			$.ajax({
				url: '/ajax/address.php',
				data: 'mode=find&postcode=' + postcode,
				success: function(xml) {
					switch ($("status", xml).text()) {
						case '0':
							// Addresses not found
							// Show message
							$('div.postcodefinder', fsc).prepend($('<p class="information addressmessage">No addresses found.</p>'));
							// Show postcode box
							$('div.postcodefinder', fsc).show();
							// Display link to enter address manually
							break;
						case '1':
							// Addresses found
							// Remove old address items
							$('div.addresslist', fsc).remove();
							// Dislay Addresses
							var addresslistcontainer = $('<div class="addresslist"></div>');
							var addresslist = $('<ul class="addresslist"></ul>');
							addresslistcontainer.append(addresslist);
							addresslistcontainer.css('display', 'none');
							fsc.append(addresslistcontainer);
							fsc.append($('<p class="information"><a href="#" class="manualentry notlisted">My address is not listed</a></p>'));;
							addresslistcontainer.show();
							var i = 1;
							$("address", xml).each(function() {
								var addresslistitem = $('<li class="addresschoice"><input type="radio" name="' + fieldsetclass + 'addressudprn" value="' + $('id', this).text() + '" id="' + fieldsetclass + 'address' + i + '" class="addressselector"><label for="' + fieldsetclass + 'address' + i + '">' + $('streetaddress', this).text() + '<span class="area">, ' + $('place', this).text() + '</span></label></li>');
								addresslist.append(addresslistitem);
								addresslistcontainer.scrollTop(0);
								i++;
							});
							// Display link to edit postcode
							fsc.prepend($('<p class="information changeaddress"><a href="#" class="editpostcode">Change address</a></p>'));
							$('input.addressstage', fsc).val('auto2');
							break;
						default:
							alert('Unexpected Response: ' + $("message", xml).text(), 'Message');
							break;
					}
				},
				error: function(xml, type) {
					alert('Error - unable to load address list.');
					// Lookup error
					// Display form to enter address manually
					
				}
			});
		},
		
		showaddress: function(addressudprn, addresslabel, fieldsetclass) {
			
			var fsc = $('fieldset.address.' + fieldsetclass);
			
			// Cleanup address fieldset
			$('div.postcodefinder', fsc).hide();
			$('div.addresslist', fsc).remove();
			$('a.manualentry', fsc).parent().remove();
			$('a.editpostcode', fsc).parent().remove();
			$('p.information.notlisted', fsc).remove();
			// Show address
			var addressradiocontainer = $('<div class="addressselection"></div>');
			var addressradio = $('<p class="address"><input id="' + fieldsetclass + 'address" type="hidden" name="' + fieldsetclass + 'addressudprn" value="' + addressudprn + '">' + addresslabel + '. <a href="#" class="editpostcode">Change</a></p>')
			addressradiocontainer.append(addressradio);
			fsc.append(addressradiocontainer);
			$('input.addressstage', fsc).val('auto3');
		}
		
	}

//	address.init('delivery');
//	address.init('billing');
	
//	When disabled...
//	Setup billing address
	if($('input.billingmatchdelivery').is(":checked")) {
		$('div.billingaddress').hide();
	}
	$('div.manualentry').show();

	$('input.billingmatchdelivery').live('click', function() {
		if($(this).is(":checked")) {
			$('div.billingaddress').hide();
		} else {
			$('div.billingaddress').show();
		}
	});
	
	// PAGE WIDTH

	var pagewidth = {
			
		init: function() {
			$(window).resize(function() {
				pagewidth.check();
			});
			pagewidth.check();
		},
			
		check: function() {
			if ($('body').width() <= 1000) {
				$('body').addClass('smallscreen');
			} else {
				$('body').removeClass('smallscreen');
			}
		}
		
	};
	
	pagewidth.init();
		
	// Slideshows
	
	var hdslideshow = {
			
		slides: $('ul.slideshow li'),
		numslides: $('ul.slideshow li').length,
		currentslide: 0,
			
		init: function () {
			if (hdslideshow.numslides > 1) {
				hdslideshow.slides.css({'opacity':0, 'z-index':1});
				hdslideshow.next(false); 
				setInterval(function() { hdslideshow.next(true); },	4000);				
			}
		},
		
		next: function(crossfade) {
			var csn = hdslideshow.currentslide;
			var nsn = (csn == hdslideshow.numslides ? 1 : csn + 1);
			var cs = hdslideshow.slides.eq(csn-1);
			var ns = hdslideshow.slides.eq(nsn-1);
			cs.css({'z-index':1});
			ns.css({'z-index':2});
			if (crossfade) {
				ns.animate({'opacity':1}, 1000, function() {
					cs.css({'opacity':0});	
				});
			} else {
				ns.css({'opacity':1});
				cs.css({'opacity':0});
			}
			hdslideshow.currentslide = nsn;
		}
			
	}
		
	hdslideshow.init();
	
	// Other
	
	$("#control").bind('dblclick', function() {
		$("#control").fadeOut();
		return false;
	});
	
	$('.clickable').click(function() {
		location.href = $('a', this).attr('href');
	}).css('cursor', 'pointer');	
	
	$('.proceed').click(function() {
		$(this).parent().submit();
	}).css('cursor', 'pointer');	

	$('div.testimonials.basket').vTicker({
		speed: 2000,
		pause: 30000,
		showItems: 1,
		animation: 'fade',
		mousePause: true,
		height: 0,
		direction: 'up'
		});

	$('div.testimonials.main').vTicker({
		speed: 1000,
		pause: 5000,
		showItems: 0,
		mousePause: false,
		height: 600,
		direction: 'down'
	});

	$.ajaxSetup({
		type: 'POST',
		cache: false
	});
	
	$("body").ajaxStart(function () {
		$('body').addClass('loading');
	});
	
	$("body").ajaxStop(function () {
		$('body').removeClass('loading');
		$('.ajaxtrigger').removeClass('ajaxtrigger');
	});
	
	$('.help[title]').tooltip({
		'position':'bottom center',
		'tipClass':'tooltipbottom',
		'delay':0
	});
	$('.helptop[title]').tooltip({
		'position':'top center',
		'tipClass':'tooltiptop',
		'delay':0
	});
	
	Shadowbox.init({skipSetup: true});
	
	$('a.popup.info').live('click', function() {
		var type = $(this).attr('class').match(/blindtype\-.+?\b/).toString().replace('blindtype-', '');
	    Shadowbox.open({
	        content:    '/blindinfo.php?i=' + type,
	        player:     "iframe",
	        title:      "Blind Information",
	        height:     480,
	        width:      800,
	        options: 	{overlayOpacity:0.75}
	    });
	    return false;
	});

	$('a.popup.fitting.video').live('click', function() {
		var type = $(this).attr('class').match(/blindtype\-.+?\b/).toString().replace('blindtype-', '');
		Shadowbox.open({
			content:    '/template/theme/loftblinds/video/' + type + '.flv',
			player:     "flv",
	        height:     480,
	        width:      640,
			title:      "Blind Installation Video",
			options: 	{overlayOpacity:0.75}
		});
		return false;
	});
	$('a.popup.fitting.pdf').live('click', function() {
		var type = $(this).attr('class').match(/blindtype\-.+?\b/).toString().replace('blindtype-', '');
		window.open('/template/theme/loftblinds/pdf/' + type + '.pdf');
		return false;
	});
	
	$('#header a.velux img').css({'opacity':0});
	veluxgenuine = false;
	function veluxCrossFade() {
		if (veluxgenuine) {
			$('#header a.velux img').stop().animate({'opacity':0},1500,function() {
				$('#header a.velux img').stop().animate({'opacity':0},1000,function() {
					veluxCrossFade();
				});
			});
			veluxgenuine = false;
		} else {
			$('#header a.velux img').stop().animate({'opacity':1},1500,function() {
				$('#header a.velux img').stop().animate({'opacity':1},1000,function() {
					veluxCrossFade();
				});
			});
			veluxgenuine = true;
		}
	}
	setInterval(function() {
		$('#header a.velux img').animate({'opacity':1},1500,function() {
			$('#header a.velux img').animate({'opacity':1},1000,function() {
				$('#header a.velux img').animate({'opacity':0},1500);
			});
		});
	}, 5000);
	
});
