Configurator = new function()
{
	var _goto = false;
	var _design = false;
	var _saved = false;
	var _warn_on_unload = "You have not saved your design yet.  If you continue, your design will be lost";
	this.install = function(module, cart, mystage) {
		//$(element).click(function() {
			Configurator.addJavascript("js/history");
			Configurator.addJavascript("module/" + module + "/controller-full");

			if(module == "drawerunits"){
				Controller.removeExtras();
			}
			if (cart) {
				//if loading a cart find the stage
				var stage = mystage;
				//cart = $(this).attr("rel");
				Configurator.moveSess(cart);

			}
			$.get("/configurator/module/" + module, function(data) {


				$("#configurator-page").html(data);

				if(cart) {
					//stage = (module == "lunar" || module == "orion") ? 5 : 4;
					if(typeof Controller.reinsert=='function') {
						Controller.reinsert(stage);
					} else {
						Configurator.reinsert(stage);
					}
				}

				$('a[rel*=facebox]').click(function() {
					Configurator.facebox($(this).attr("href"));
					return false;
				});
				$('a[rel*=supersize]').click(function() {
					$("img", this).attr("src", "/configurator/images/loading.gif");
					setTimeout('Configurator.supersize("'+module+'")', 1);

					return false;
				});
				Configurator.bind();
			});

			return false;
	}


	this.fire = function(module, design) {
		Configurator.addJavascript("js/history");
		Configurator.addJavascript("module/" + module + "/controller-full");
		if(module == "drawerunits"){
			Controller.removeExtras();
		}
		$.get("/configurator/module/" + module, function(data) {
			var cart = false;
			var stage = false;
			$("#configurator-page").html(data);
			if(design) {
				stage = (module == "lunar" || module == "orion") ? 3 : 4;
				if(typeof Controller.reinsert=='function') {
					Controller.reinsert(stage);
				} else {
					Configurator.reinsert(stage);
				}
			}
			$('a[rel*=facebox]').click(function() {
				Configurator.facebox($(this).attr("href"));
				return false;
			});
			$('a[rel*=supersize]').click(function() {
				$("img", this).attr("src", "/configurator/images/loading.gif");
				setTimeout('Configurator.supersize("'+module+'")', 1);
				return false;
			});
			Configurator.bind();

		});
		return false;
	}

	this.moveSess = function(cart) {
		$.get("/configurator/process.php", { product: "movesess", mycart: cart});
	}
	this.getDesign = function(design) {
		//alert("here");
		$.get("/configurator/process.php", { product: "getdesign", mydesign: design}, function(data) { return data });
	}

	this.reinsert = function(stage) {
		//alert(stage);
		Configurator.executeActions(stage);
	}

	this.storageRecommend = function() {
		var freespace = 2500;
		var cyberpace = 2500;
		var comet = 2500;
		var apollogents = 1800;
		var apolloladies = 1800;
		var apollokids = 1800;
		var width = Dimensions.getWidth();
		//var f1 = (Math.floor(width/freespace) > 0) ? Math.floor(width/freespace) : 1;
		//var c1 = (Math.floor(width/cyberpace) > 0) ? Math.floor(width/cyberpace) : 1;
		var f1 = (Math.floor(width/freespace) > 0) ? Math.floor(width/freespace) : 1;
		var c1 = (width < 2400) ? 1 : 2;
		var c2 = (Math.floor(width/comet) > 0) ? Math.floor(width/comet) : 1;
		var a1 = (Math.floor(width/apollogents) > 0) ? Math.floor(width/apollogents) : 1;
		var a2 = (Math.floor(width/apolloladies) > 0) ? Math.floor(width/apolloladies) : 1;
		var a3 = (Math.floor(width/apollokids) > 0) ? Math.floor(width/apollokids) : 1;
		if (width >= 2400) {
			$(".configurator-swatch-tabs li").eq(1).hide();
			//$("#storage-options .configurator-swatch-content li").eq(1).hide();
		} else {
			$(".configurator-swatch-tabs li").eq(1).show();
		}
		$(".storage-desc span.width").html(width);
		$(".storage-desc span#f1-qty").html(f1);
		$(".storage-desc input[name=qty_storage_freespace]").val(f1);

		$(".storage-desc span#c1-qty").html(c1);
		$("#storage-options .storage-desc input[name=qty_storage_cyberspace]").val(c1);

		$("#storage-options .storage-desc span#c2-qty").html(c2);
		$("#storage-options .storage-desc input[name=qty_storage_comet]").val(c2);

		$("#storage-options .storage-desc span#a1-qty").html(a1);
		$("#storage-options .storage-desc input[name=qty_storage_apollomen]").val(a1);

		$("#storage-options .storage-desc span#a2-qty").html(a2);
		$("#storage-options .storage-desc input[name=qty_storage_apollowomen]").val(a2);

		$("#storage-options .storage-desc span#a3-qty").html(a3);
		$("#storage-options .storage-desc input[name=qty_storage_apollokids]").val(a3);

	}

	this.executeActions = function(stage) {
		$.getJSON("/configurator/process.php", { product: "getall" } , function(data) {
			//width
			if(data) {
				var width = data.width;
				var height = data.height;
				var type = data.code;
				var carcass = data.carcass;
				var singletrack = data.singletrack;
				var doubletrack = data.doubletrack;
				var red = data.reducers;
				var frame = data.frame;
				var fineline = data.fineline;
				var doorconfig = parseInt(data.doorconfig);
				var obars = data.orientalbarsall;
				var endpanel = data.endpanel;
				var expanels = data.extras.endpanels;
				var exliners = data.extras.liners;
				var install = data.installation;
				//dimensions
				$("input#var-single-trackset").val(singletrack);
				$("input#var-double-trackset").val(doubletrack);
				Dimensions.setWidth(width);
				Dimensions.setHeight(height);
				if(type && type != "0") {
					$("select#var-dimensions").val(type);
					$("input#var-carcass").val(carcass);
					Dimensions.returnSize(type)
					Dimensions.setAmountDoors(Dimensions.returnDoors(type));
				} else {
					//reducers
					$("input#var-dimensions-width").val(width);
					$("input#var-dimensions-height").val(height);
					$("select#var-dimensions-reducers option[value='"+red+"']").attr('selected', 'selected');
				}
				Visuals.setDimensions(Dimensions.getValidWidth(), Dimensions.getValidHeight());
				//frame
				$("input#var-frame").val(frame);
				var styleId = $("input#var-frame").attr("id");
				Configurator.setVar("var-frame", 0, Configurator.getVar(styleId, 0));
				Configurator.setVar("var-frame", 1, Configurator.getVar(styleId, 1));
				//alert(data.fineline);
				$("input#configurator-fineline").attr("checked", fineline);

				//doors

				Visuals.setDoors(doorconfig);
				$("#configurator-doorconfigs input[value='"+doorconfig+"']").attr("checked", "checked");
				if(obars == 1) {
					$("input#configurator-oriental-bars-all").attr("checked", "checked");
				}
				Visuals.presizeDoors();
				for (var a = 0; a<doorconfig; a++) {
					if (data.doors) {
						var cuDoor = data.doors[a];
						var splitPan = cuDoor.split(",");
						//alert(cuDoor.length);
						if(splitPan.length >= 3) {
							//alert("here");
							var parDoor = $("#configurator-visual-wardrobe ul#configurator-visual-doors li.wardrobe-door").eq(a);
							//alert(door);
							var door_width = $(parDoor).width();
							//alert(door_width);
							var door_height = $(parDoor).height();
							//alert(door_height);
							if(data.doorsback) {
								var cuDoor2 = data.doorsback[a];
								var splitPan2 = cuDoor2.split(",");



								$(parDoor).html('<ul title="Click door to select" class="wardrobe-door-inner"> </ul>');
								for(var i=0; i<splitPan.length; i++) {
									$("ul", parDoor).append('<li class="wardrobe-door-split-panel"><input id="var-door-0-panel-'+i+'" type="hidden" name="var[panel][]" value="0" class="variable" /><input id="var-door-back-0-panel-'+i+'" type="hidden" name="var[panel-back][]" value="0" class="variable-back" /><span class="wardrobe-door-frame"><span class="wardrobe-door-selector"><span class="wardrobe-door-inner"></span></span></span></li>');
									$("input.variable-back", parDoor).eq(i).attr("id", "var-door-back-" + a + "-panel-" + i).attr("name", "var[panel-back][" + a + "][]").val(splitPan2[i]);
									$("input.variable", parDoor).eq(i).attr("id", "var-door-" + a + "-panel-" + i).attr("name", "var[panel][" + a + "][]").val(splitPan[i]);
								}



							} else {

								$(parDoor).html('<ul title="Click door to select" class="wardrobe-door-inner"> </ul>');
								for(var i=0; i<splitPan.length; i++) {
									$("ul", parDoor).append('<li class="wardrobe-door-split-panel"><input id="var-door-0-panel-'+i+'" type="hidden" name="var[panel][]" value="0" class="variable" /><span class="wardrobe-door-frame"><span class="wardrobe-door-selector"><span class="wardrobe-door-inner"></span></span></span></li>');
									$("input.variable", parDoor).eq(i).attr("id", "var-door-" + a + "-panel-" + i).attr("name", "var[panel][" + a + "][]").val(splitPan[i]);
								}
							}
							$("span.wardrobe-door-selector", parDoor).css("padding", "0px");
						} else {
							//if (var _values = $("input#" + id).val().split(";");
							var parDoor = $("#configurator-visual-wardrobe ul#configurator-visual-doors li.wardrobe-door").eq(a);
							$("input.variable", parDoor).val(cuDoor);
							if(data.doorsback) {
								var cuDoor2 = data.doorsback[a];
								$("input.variable-back", parDoor).val(cuDoor2);
							}
						}
					} else if(data.panel) {
						var cuDoor = data.panel[a];
						var parDoor = $("#configurator-visual-wardrobe ul#configurator-visual-doors li.wardrobe-door").eq(a);
						$("input.variable", parDoor).eq(0).val(cuDoor[0]);
						$("input.variable", parDoor).eq(1).val(cuDoor[1]);
						$("input.variable", parDoor).eq(2).val(cuDoor[2]);

					}
					Visuals.previewDoor(a);
					//Visuals.previewOrientalBars(a);
				}
				//all oriental bars selected
				//endpanel
				$("input#var-endpanel").val(endpanel);
				Configurator.setVar("var-endpanel", 0, endpanel);
				$("#configurator-swatch-endpanels .configurator-swatch-content .configurator-swatch-content-panel ul li input[value='"+endpanel+"']").parent().addClass("selected");

				//installation
				$("#configurator-installation input[value='"+install+"']").attr("checked", "checked");

				//extras
				$("input#var-extra-endpanels").val(expanels);
				$("input#var-extra-liners").val(exliners);
				//Visuals.previewDoors();

				Controller.info();
				Controller.price();
				setTimeout("Controller.goToStage("+stage+")", 1);
				//for(i=1;i<=stage;i++){
					//setTimeout("Controller.goToStage("+i+")", 1);

				//}
				//setTimeout("Controller.doNext()", 1);
				//setTimeout("Controller.doPrev();
				setTimeout("Visuals.preview()", 2);
				//Visuals.preview();
				//
			}
		});


	}


	this.facebox = function(href) {
				$.get(href, function(data) {
					$("#facebox").remove();
					$("#configurator").prepend('\
						<div id="facebox" style=""> \
							<div class="popup"> \
								<table> \
									<tbody> \
										<tr> \
											<td class="tl"/><td class="b"/><td class="tr"/> \
										</tr> \
										<tr> \
											<td class="b"/> \
											<td class="body"> \
												<div class="footer"> \
													<a href="#" class="close"> \
														<img src="/configurator/images/closelabel.gif" title="close" class="close_image" /> \
													</a> \
												</div> \
												<div class="contentz"> \
												</div> \
											</td> \
											<td class="b"/> \
										</tr> \
										<tr> \
											<td class="bl"/><td class="b"/><td class="br"/> \
										</tr> \
									</tbody> \
								</table> \
							</div> \
						</div>');
						$('#facebox .contentz').append(data);
						$('#facebox').css('left', (467 - ($('#facebox table').width()) / 2));
						$('#facebox').css('top', (298 - ($('#facebox table').height()) / 2));

						$("#facebox .close").unbind('click');
						$('#facebox .close').click(function() {
							$("#facebox").remove();
							return false;
						});
						$(document).bind('keydown.facebox', function(e) {
							if (e.keyCode == 27) $("#facebox").remove();
							return true
						})

					});

	}

	this.popbox = function(href, myw, myh, top) {
		//$.get(href, function(data) {
			var postop = (top) ? top : 28;
			$("#facebox").remove();
			$("#configurator").prepend('\
				<div id="facebox" style=""> \
					<div class="popup"> \
						<table> \
							<tbody> \
								<tr> \
									<td class="tl"/><td class="b"/><td class="tr"/> \
								</tr> \
								<tr> \
									<td class="b"/> \
									<td class="body"> \
										<div class="contentz"> \
										</div> \
									</td> \
									<td class="b"/> \
								</tr> \
								<tr> \
									<td class="bl"/><td class="b"/><td class="br"/> \
								</tr> \
							</tbody> \
						</table> \
					</div> \
				</div>');
				$('#facebox .body').css("width", myw+"px");
				$('#facebox table').css("width", (myw+40)+"px").css("height", (myh+40)+"px");
				if(href == "/configurator/css/images/door/38/200/200") href = "/configurator/css/images/visual/doors/38.jpg";
				if(href == "/configurator/css/images/door/36/200/200") href = "/configurator/css/images/visual/doors/36.jpg";
				if(href == "/configurator/css/images/door/41/200/200") href = "/configurator/css/images/visual/doors/41.jpg";
				$('#facebox .contentz').css("width", myw+"px").css("height", myh+"px").css("background", "url("+href+") no-repeat center");
				$('#facebox').css('left', (317 - ($('#facebox table').width()) / 2)).css('top', postop+'px');
				$('#facebox .close').click(function() {
					$("#facebox").remove();
					return false;
				});
				$(document).bind('keydown.facebox', function(e) {
					if (e.keyCode == 27) $("#facebox").remove();
					return true
				})
	}

	this.supersize = function(type) {
				//$.get(href, function(data) {
					$("#configurator-closer").hide();
					$("a[rel*=supersize] img").attr("src", "/configurator/images/but-magnify.gif");
					//$("a[rel*=supersize]").html('<img src="/configurator/images/but-magnify.gif" alt="Magnify" border="0" />');
					$("#facebox").remove();
					$("#configurator").prepend('\
						<div id="facebox" style="z-index: 2002"> \
							<div class="popup"> \
								<table> \
									<tbody> \
										<tr> \
											<td class="tl"/><td class="b"/><td class="tr"/> \
										</tr> \
										<tr> \
											<td class="b"/> \
											<td class="body"> \
												<div class="contentz" style="height: 500px; position: relative;"> \
												</div> \
												<div class="footer"> \
													<a href="#" class="close" style="float: left; padding-left: 8px; padding-right: 10px;"> \
														<img src="/configurator/images/but-back.gif" title="close" class="close_image" /> \
													</a> \
													<a href="#" class="save_design" style="float: left; padding-left: 20px; padding-right: 8px;"> \
														<img src="/configurator/images/but-design.gif" title="Save Design" /> \
													</a> \
													<div style="background: url(/configurator/images/price-box.gif); float: left; padding-left: 10px; padding-right: 10px;" class="closez"> \
														<div id="the-price" style="width: 222px; height: 47px; text-align: center; line-height: 47px; font-size: 27px; font-weight: bold; color: white;">&nbsp;</div> \
													</div> \
													<a href="#" class="close" id="supercheck" style="float: left; padding-left: 8px;"> \
														<img src="/configurator/images/but-checkout.gif" title="close" class="close_image" /> \
													</a> \
												</div> \
											</td> \
											<td class="b"/> \
										</tr> \
										<tr> \
											<td class="bl"/><td class="b"/><td class="br"/> \
										</tr> \
									</tbody> \
								</table> \
							</div> \
						</div>');
						$('#facebox .body').css("width", "934px").css("background", "#e5e5e5 url(/configurator/images/supersize.gif) no-repeat center").css("height", "595px");
						$('#facebox table').css("width", "974px");

						$('#facebox').css('left', (467 - ($('#facebox table').width()) / 2)).css('top', (298 - ($('#facebox table').height()) / 2)-1);
						$("#facebox .footer").css("border-top", "none").css("padding-right", "18px");



						//$("#configurator-visual-wardrobe").clone().appendTo("#facebox .content");
						$("#configurator-visuals").clone().appendTo("#facebox .contentz");
						$("#facebox #configurator-visuals").css("position", "static").show();
						$("#facebox #configurator-visuals #configurator-visual").css("left", "59%").css("top", "44%");
						$("#the-price").html($("#costz").text()+'<span style="font-size: 12px"> inc VAT</span>');

						$("#facebox .contentz").append('<div id="distext" style="font-weight: normal;" class="title"><strong>DISCLAIMER:</strong> Images and Colours may differ slightly from those shown, images are for reference only. All products shown in the configurator can be enhanced or modified at any time as systems are constantly improving.<br /><br /><strong>COLOUR ACCURACY:</strong> We have taken great care to present our products, in digital form, as true to actual colour as possible. However, computer monitors vary widely, and one colour may not appear identical from one monitor to the next. Samples are available by request.</div>');
						if (Configurator._saved) {
							$("#facebox a.save_design").css("visibility", "hidden");
						}

						//$("#facebox .content").append("<div style='clear:both;'></div>");
						//$('#facebox .content').append(data);


						$("#facebox .close").unbind('click');
						$('#facebox .close').click(function() {
							$("#facebox").remove();
							$("#configurator-closer").show();
							return false;
						});

						$("#facebox #supercheck").unbind('click');
						$('#facebox #supercheck').click(function() {
							Controller.alerts(true);
							//alert("getstage is 4");
							if(Controller.checkStage() == "5") {
								$("form#configurator-form").submit();
							}
							return false;
						});
						$('#facebox a.save_design').click(function() {
							//$.get("/configurator/process.php", { product: 'savedesign', email: 'bascule@graffiti.net' } );
							$(this).css("visibility", "hidden");
							$("#facebox .contentz #distext").html('Email Address <br /><input type="text" name="email" id="designemail" /><input type="button" value="Save" name="savedes" id="savedes" />').css("text-align","center").css({
								fontSize: "9px",
								left: "206px",
								top: "510px",
								width: "auto"
							});
							$('#facebox input#savedes').click(function() {
								var email = $("#facebox input#designemail").val();
								if($.isFunction(Controller.designsaver)){
									Controller.designsaver(email, type, 0);
								} else {
									Configurator.designsaver(email, type, 0);
								}
								$("#facebox .contentz #distext").css({
									bottom:"0px",
									top:"398px",
									left:"190px",
									width:"730px"
								});
							});
							//var email = 'bascule@graffiti.net';

							return false;
						});
						Supersize.bind();
						Supersize.presize();
						$(document).bind('keydown.facebox', function(e) {
							if (e.keyCode == 27) {
							$("#facebox").remove();
							$("#configurator-closer").show();
							}
							return true
						})

					//});

	}
	this.designsaver = function(myemail, type, place) {
		var width = Dimensions.getWidth();
		var height = Dimensions.getHeight();
		var reducers = $("select#var-dimensions-reducers option:selected").val();
		reducers = (Configurator.isset(reducers)) ? reducers : 0;

		var fineline = ($("input#configurator-fineline").attr("checked")) ? true : false;

		var frame = Configurator.getVar("var-frame", 0)+";"+Configurator.getVar("var-frame", 1);
		if (type == "lunar") {
			var carcass = Configurator.getVar("var-carcass", 0);
			var dimtype = $("select#var-dimensions").val();
		} else {
			var carcass = 0;
			var dimtype = 0;
		}
/*$.each("input", function() {
      alert($(this).attr("id"));
    });*/


		var doors = new Array();
		var doorsback = new Array();
		var panel = new Array();
		var doorconfig = $("#configurator-doorconfigs input:checked").val();
		doorconfig = (Configurator.isset(doorconfig)) ? doorconfig : 0;
		if (type == "lunar") {
			var a = 0;
			$("ul#configurator-visual-doors li.wardrobe-door").each(function() {
					var splitP = $(this).children().children("li").length;
					if (splitP == 0) {
						var valz = $("input.variable", this).val();
						//alert("d: "+valz);
						doors.push(valz);
					} else {
						panels = new Array();
						for (i=0;i<splitP;i++) {
							panel = $("li.wardrobe-door-split-panel", this).eq(i);
							var valz = $("input.variable", panel).val();

							panels.push(valz);
						}
						//alert("p: "+panels);
						doors.push(panels);
					}
			});

		} else if (type == "orion") {
			var singletrack = Configurator.getVar("var-single-trackset", 0);
			var doubletrack = Configurator.getVar("var-double-trackset", 0);
			var a = 0;
			$("ul#configurator-visual-doors li.wardrobe-door").each(function() {
					var splitP = $(this).children().children("li").length;
					if (splitP == 0) {
						var valz = $("input.variable", this).val();
						var valz2 = $("input.variable-back", this).val();

						//alert("d: "+valz);
						doors.push(valz);
						doorsback.push(valz2);
					} else {
						panels = new Array();
						panelsback = new Array();
						for (i=0;i<splitP;i++) {
							panel = $("li.wardrobe-door-split-panel", this).eq(i);
							var valz = $("input.variable", panel).val();
							var valz2 = $("input.variable-back", panel).val();

							panels.push(valz);
							panelsback.push(valz2);
						}
						//alert("p: "+panels);
						doors.push(panels);
						doorsback.push(panelsback);
					}
			});

		} else {
			$("ul#configurator-visual-doors li.wardrobe-door input.variable").each(function() {
				doors.push($(this).val());
			});
		}
		if (type == "lunar") doorconfig = doors.length;
		var orientalbarsall = ($("input#configurator-oriental-bars-all").is(":checked")) ? 1 : 0;
		var installation = $("#configurator-installation input:checked").val();
		installation = (Configurator.isset(installation)) ? installation : '';

		var endpanel = Configurator.getVar("var-endpanel", 0);



		var extra_endpanels = Configurator.getVar("var-extra-endpanels", 0);
		var extra_liners = Configurator.getVar("var-extra-liners", 0);
		//$("#ordercost span.amount").load("price.php", { product: 'galaxy', width: width, height: height, reducers: reducers, frame: frame, 'doors[]': doors, doorconfig: doorconfig, installation: installation, endpanel: endpanel, 'extra-endpanels': extra_endpanels, 'extra-liners': extra_liners });
		$.get("/configurator/process.php", { product: 'savedesign', email: myemail, type: type, fineline: fineline, width: width, singletrack: singletrack, doubletrack: doubletrack, height: height, orientalbarsall: orientalbarsall, reducers: reducers, frame: frame, carcass: carcass, code: dimtype, 'doors[]': doors, 'doorsback[]': doorsback, 'panel[]': panel, doorconfig: doorconfig, installation: installation, endpanel: endpanel, 'extra-endpanels': extra_endpanels, 'extra-liners': extra_liners }, function(data) {
			Controller._saved = true;
			if (data == 'You specified an invalid email address. <a href="">Try again.</a>') {
				Controller._saved = false;
			}
			$("#des-info").hide();
			$("#des-message").html(data).show();
	 	});
	}
	this.open = function(dialog) {
		dialog.container.clearTypeFadeIn(100, function() {
			dialog.data.clearTypeFadeIn(100, function() {
				Configurator.bind();
				Configurator.hideSplashscreen();
			});
		});
	}

	this.show = function(cart, stage) {
		//alert("s1.3: "+stage+" ; c: "+cart);
		if(typeof Controller.reinsert=='function') {
			if(cart) Controller.reinsert(stage);
		} else {
			if(cart) Configurator.reinsert(stage);
		}
	}

	this.getVarArray = function(id) {
		//alert("getVarArray(" + id + ")");
		var _values = $("input#" + id).val().split(";");
		for(var i = 0; i < _values.length; i++) {
			_values[i] = this.URLDecode(_values[i]);
		}
		return _values;
	}

	this.getVar = function(id, index) {
		var _values = this.getVarArray(id);
		return _values[index];
	}

	this.setVar = function(id, index, value) {
		var _values = this.getVarArray(id);
		_values[index] = value + '';
		for(var i = 0; i < _values.length; i++) {
			_values[i] = this.URLEncode(_values[i]);
		}
		$("input#" + id).val(_values.join(";"));
	}

	this.checkExit = function() {
		//alert("here at least");
		return _warn_on_unload;
	}
	this.allowSubmit = function() {
		_warn_on_unload = "";
	}



this.bind = function() {
	/*$.history.init(function(url) {
		Configurator.doFilter(url == "" ? "" : url);
	});*/

		window.onbeforeunload = function () {
			var warn = Configurator.checkExit();
			if(warn !== "") {
				return warn;
			}
			//return _warn_on_unload;
		}
		$('#configurator-form').find('input').keypress(function(e){
			if ( e.which == 13 ) {
				$(this).next().focus();  //Use whatever selector necessary to focus the 'next' input
				return false;
			}
		});

		Controller.bind();
		this.bindStorage();
	}

	this.addStylesheet = function(url) {
		$("head").append("<link rel=\"stylesheet\" type=\"text/css\" href=\"/configurator/" + url + ".css\" />");
	}

	this.addJavascript = function(url) {
		$("head").append("<script type=\"text/javascript\" src=\"/configurator/" + url + ".js\"></script>");
	}

	this.isset = function(val) {
		return typeof val != "undefined";
	}

	this.URLEncode = function(value)
	{
		// The Javascript escape and unescape functions do not correspond
		// with what browsers actually do...
		var SAFECHARS = "0123456789" +					// Numeric
						"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
						"abcdefghijklmnopqrstuvwxyz" +
						"-_.!~*'()";					// RFC2396 Mark characters
		var HEX = "0123456789ABCDEF";

		var plaintext = value;
		var encodedtext = "";
		for (var i = 0; i < plaintext.length; i++ ) {
			var ch = plaintext.charAt(i);
		    if (ch == " ") {
			    encodedtext += "+";				// x-www-urlencoded, rather than %20
			} else if (SAFECHARS.indexOf(ch) != -1) {
			    encodedtext += ch;
			} else {
			    var charCode = ch.charCodeAt(0);
				if (charCode > 255) {
					encodedtext += "+";
				} else {
					encodedtext += "%";
					encodedtext += HEX.charAt((charCode >> 4) & 0xF);
					encodedtext += HEX.charAt(charCode & 0xF);
				}
			}
		} // for
		return encodedtext;
	}

	this.URLDecode = function(value)
	{
	   // Replace + with ' '
	   // Replace %xx with equivalent character
	   // Put [ERROR] in output if %xx is invalid.
	   var HEXCHARS = "0123456789ABCDEFabcdef";
	   var encodedtext = value;
	   var plaintext = "";
	   var i = 0;
	   while (i < encodedtext.length) {
	       var ch = encodedtext.charAt(i);
		   if (ch == "+") {
		       plaintext += " ";
			   i++;
		   } else if (ch == "%") {
				if (i < (encodedtext.length-2)
						&& HEXCHARS.indexOf(encodedtext.charAt(i+1)) != -1
						&& HEXCHARS.indexOf(encodedtext.charAt(i+2)) != -1 ) {
					plaintext += unescape( encodedtext.substr(i,3) );
					i += 3;
				} else {
					plaintext += " ";
					i++;
				}
			} else {
			   plaintext += ch;
			   i++;
			}
		} // while
		return plaintext;
	}

	this.storageResize = function(index) {
		var myIndex = (index) ? index : 0;
		var storageHeight = $("#storage-options .configurator-swatch-content .configurator-swatch-content-panel").eq(myIndex).height();
		$(".application-nav-duplicate").css("top", storageHeight + 318 + "px");
		$("div#configurator-swatches").css({marginTop:"0px", marginBottom:storageHeight+"px"});
	}

	$("#no-storage input").live("click", function() {
		if($(this).is(':checked')) {
			$("#storage-options ul.configurator-swatch-tabs").hide();
			$("#storage-options div.configurator-swatch-content").hide();
			$.get("/configurator/functions.php", { action: "clearStorage" });
			Controller.info();
			Controller.price();
		} else {
			$("#storage-options ul.configurator-swatch-tabs").show();
			$("#storage-options div.configurator-swatch-content").show();
		}
	});


	this.bindStorage = function() {
		var base = $("#storage-options .configurator-swatch-content");
		//$("input[type=radio]", base).hide();
		$("label", base).live("click", function() {
			$("label", base).css("background", "none");
			$(this).css("background-color", "#d9d9d9");
			$("input", this).attr("checked", true);
		});

		$("input#add_storage_freespace").unbind('click');
		$("input#add_storage_freespace").live("click", function() {
			var here = $("input[name=color_storage_freespace]:checked", base).parent();
			var colour = $("span", here).text();
			var code = $("input[name=color_storage_freespace]:checked", base).val();
			var qty = $("input[name=qty_storage_freespace]", base).val();
			$.get("/configurator/functions.php", { action: "addStorage", type: "Freespace", colour: colour, code: code, qty: qty });
			Controller.info();
			Controller.price();
			return false;
		});


		$("input#add_storage_cyberspace").unbind('click');
		$("input#add_storage_cyberspace").live("click", function() {
			var here = $("input[name=color_storage_cyberspace]:checked", base).parent();
			var colour = $("span", here).text();
			var code = $("input[name=color_storage_cyberspace]:checked", base).val();
			var qty = $("input[name=qty_storage_cyberspace]", base).val();
			$.get("/configurator/functions.php", { action: "addStorage", type: "Cyberspace", colour: colour, code: code, qty: qty });
			Controller.info();
			Controller.price();
			return false;
		});


		$("input#add_storage_comet").unbind('click');
		$("input#add_storage_comet").live("click", function() {
			var here = $("input[name=color_storage_comet]:checked", base).parent();
			var colour = $("span", here).text();
			var code = $("input[name=color_storage_comet]:checked", base).val();
			var qty = $("input[name=qty_storage_comet]", base).val();
			$.get("/configurator/functions.php", { action: "addStorage", type: "Comet", colour: colour, code: code, qty: qty });
			Controller.info();
			Controller.price();
			return false;
		});


		$("input#add_storage_apollomen").unbind('click');
		$("input#add_storage_apollomen").live("click", function() {
			var here = $("input[name=color_storage_apollomen]:checked", base).parent();
			var colour = $("span", here).text();
			var code = $("input[name=color_storage_apollomen]:checked", base).val();
			var qty = $("input[name=qty_storage_apollomen]", base).val();
			$.get("/configurator/functions.php", { action: "addStorage", type: "Apollo Gentlemen", colour: colour, code: code, qty: qty });
			Controller.info();
			Controller.price();
			return false;
		});

		$("input#add_storage_apollowomen").unbind('click');
		$("input#add_storage_apollowomen").live("click", function() {
			var here = $("input[name=color_storage_apollowomen]:checked", base).parent();
			var colour = $("span", here).text();
			var code = $("input[name=color_storage_apollowomen]:checked", base).val();
			var qty = $("input[name=qty_storage_apollowomen]", base).val();
			$.get("/configurator/functions.php", { action: "addStorage", type: "Apollo Women", colour: colour, code: code, qty: qty });
			Controller.info();
			Controller.price();
			return false;
		});


		$("input#add_storage_apollokids").unbind('click');
		$("input#add_storage_apollokids").live("click", function() {
			var here = $("input[name=color_storage_apollokids]:checked", base).parent();
			var colour = $("span", here).text();
			var code = $("input[name=color_storage_apollokids]:checked", base).val();
			var qty = $("input[name=qty_storage_apollokids]", base).val();
			$.get("/configurator/functions.php", { action: "addStorage", type: "Apollo Children", colour: colour, code: code, qty: qty });
			Controller.info();
			Controller.price();
			return false;
		});


		/*$("a.apollo-select").unbind('click').css("backgroundPosition", "0 0");
		$("a.apollo-select").hover(function() {
				if($(this).not(".apolloactive")) {
				$(this).stop().animate({
					backgroundPosition: "0 -21px"
				}, 500);
				}
		}, function() {
			if($(this).not(".apolloactive")) {
				$(this).stop().animate({
					backgroundPosition: "0 0"
				}, 500);
			}
		});*/
		$("a.apollo-select").live("click", function() {
			$("div.apollo-range").hide();
			$("a.apollo-select").removeClass("apolloactive");
			var here = $(this).attr("title");
			$("#"+here).show();
			$(this).addClass("apolloactive");
			Configurator.storageResize(3);  // Adds margin-bottom to swatches to push page down as storage is absolutely positioned
			return false;
		});

		$("a.remove-storage").unbind('click');
		$("a.remove-storage").live("click", function() {
			var id = $(this).attr("id");
			$.get("/configurator/functions.php", { action: "removeStorage", id: id });
			Controller.info();
			Controller.price();
			return false;
		});


	}


	this.buildUrl = function(url){
		var mydata;
		var width = Dimensions.getWidth();
		var height = Dimensions.getHeight();
		var reducers = $("select#var-dimensions-reducers option:selected").val();
		reducers = (Configurator.isset(reducers)) ? reducers : 0;
		var fineline = ($("input#configurator-fineline").attr("checked")) ? true : false;
		var frame = Configurator.getVar("var-frame", 0)+";"+Configurator.getVar("var-frame", 1);
		var doors = new Array();
		var panel = new Array();
		var doorconfig = $("#configurator-doorconfigs input:checked").val();
		doorconfig = (Configurator.isset(doorconfig)) ? doorconfig : 0;
		var a = 0;
		$("ul#configurator-visual-doors li.wardrobe-door").each(function() {
				var splitP = $(this).children().children("li").length;
				if (splitP == 0) {
					var valz = $("input.variable", this).val();
					doors.push(valz);
				} else {
					var count = splitP;
					panels = new Array();
					for (i=0;i<count;i++) {
						panel = $("li.wardrobe-door-split-panel", this).eq(i);
						var valz = $("input.variable", panel).val();
						panels.push(valz);
					}
					doors.push(panels);
				}
		});
		var orientalbarsall = ($("input#configurator-oriental-bars-all").is(":checked")) ? 1 : 0;
		var installation = $("#configurator-installation input:checked").val();
		installation = (Configurator.isset(installation)) ? installation : '';
		var endpanel = Configurator.getVar("var-endpanel", 0);
		var extra_endpanels = Configurator.getVar("var-extra-endpanels", 0);
		var extra_liners = Configurator.getVar("var-extra-liners", 0);
		//$("#ordercost span.amount").load("price.php", { product: 'galaxy', width: width, height: height, reducers: reducers, frame: frame, 'doors[]': doors, doorconfig: doorconfig, installation: installation, endpanel: endpanel, 'extra-endpanels': extra_endpanels, 'extra-liners': extra_liners });
	  $.get("/configurator/process.php", { product: 'encode', fineline: fineline, width: width, height: height, orientalbarsall: orientalbarsall, reducers: reducers, frame: frame, 'doors[]': doors, 'panel[]': panel, doorconfig: doorconfig, installation: installation, endpanel: endpanel, 'extra-endpanels': extra_endpanels, 'extra-liners': extra_liners }, function(data) {

			//var url = base + '?stage=' + stage + '&url='+data;

		});
	  //var str = '&fineline='+fineline+'&width='+width+'&height='+height;
	}

	this.doFilter = function(url){
		//var myhash = location.hash;
		var myhash = url.split("&hash=");
		var stage = myhash[0].split("stage=");

		$.get("/configurator/process.php", { product: 'backdesign', url: myhash[1] }, function(data) {
			//alert(url);
			Controller.executeActions(stage[0]);
		});
	}


}
