Configurator = new function()
{
	var _goto = false;
	var _design = false;
	var _saved = false;
	
	this.install = function(element, module, cart) {
		$(element).click(function() {
			Configurator.showOverlay();
			Configurator.showSplashscreen();
			Configurator.addJavascript("module/" + module + "/controller");
			if(module == "drawerunits"){
				Controller.removeExtras();
			}
			if (cart) {
				//if loading a cart find the stage
				var strHref = $(this).attr("href");
				if ( strHref.indexOf("?") > -1 ){
					var strQueryString = strHref.substr(strHref.indexOf("?")+1);
					var qString = strQueryString.split("&");
					var mystage = qString[1].split("=");
					var stage = mystage[1];
				}
				cart = $(this).attr("rel");
				Configurator.moveSess(cart);
			}
			$.get("/configurator/module/" + module, function(data) {
				$(data).modal({
					close: false,
					opacity: 0,
					overlayId: 'configurator-overlay',
					containerId: 'configurator-' + module,
					onOpen: Configurator.open,
					onClose: Configurator.close,
					onShow: Configurator.show(cart, stage),
					close: true,
					closeHTML: '<div id="configurator-closer"><a title="Close Wardrobe Configurator">Close</a></div>'
				});
				$('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;
				});
			});
			return false;
		});
	}
	
	this.fire = function(module, design) {
		Configurator._goto = false;
		//Configurator.showOverlay();
		//Configurator.showSplashscreen();
		Configurator.addJavascript("module/" + module + "/controller");
		if(module == "drawerunits"){
			Controller.removeExtras();
		}
		$.get("/configurator/module/" + module, function(data) {
			var cart = false;
			var stage = false;
			if(design) {
				//Configurator.showOverlay();
				Configurator.showSplashscreen();
				//Configurator.getDesign(design);
				//alert(design);
				cart = true;
				stage = (module == "lunar") ? 5 : 4;
			}
			$(data).modal({
				close: false,
				opacity: 0,
				overlayId: 'configurator-overlay',
				containerId: 'configurator-' + module,
				onOpen: Configurator.open,
				onClose: Configurator.close,
				onShow: Configurator.show(cart, stage),
				close: true,
				closeHTML: '<div id="configurator-closer"><a title="Close Wardrobe Configurator">Close</a></div>'
			});
			$('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;
			});

		});
		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) {
		Configurator.executeActions(stage);
	}
		
	this.executeActions = function(stage) {
		$.getJSON("/configurator/process.php", { product: "getall" } , function(data) { 
			//width
			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 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));
			
			//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"> \
								<li class="wardrobe-door-split-panel"><input id="var-door-0-panel-0" type="hidden" name="var[panel][]" value="0" class="variable" /><input id="var-door-back-0-panel-0" 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> \
								<li class="wardrobe-door-split-panel"><input id="var-door-0-panel-1" type="hidden" name="var[panel][]" value="0" class="variable" /><input id="var-door-back-0-panel-1" 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> \
								<li class="wardrobe-door-split-panel"><input id="var-door-0-panel-2" type="hidden" name="var[panel][]" value="0" class="variable" /><input id="var-door-back-0-panel-2" 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> \
							</ul>');
						$("input.variable-back", parDoor).eq(0).attr("id", "var-door-back-" + a + "-panel-0").attr("name", "var[panel-back][" + a + "][]").val(splitPan2[0]);
						$("input.variable-back", parDoor).eq(1).attr("id", "var-door-back-" + a + "-panel-1").attr("name", "var[panel-back][" + a + "][]").val(splitPan2[1]);
						$("input.variable-back", parDoor).eq(2).attr("id", "var-door-back-" + a + "-panel-2").attr("name", "var[panel-back][" + a + "][]").val(splitPan2[2]);

						} else {
							$(parDoor).html(' \
							<ul title="Click door to select" class="wardrobe-door-inner"> \
								<li class="wardrobe-door-split-panel"><input id="var-door-0-panel-0" 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> \
								<li class="wardrobe-door-split-panel"><input id="var-door-0-panel-1" 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> \
								<li class="wardrobe-door-split-panel"><input id="var-door-0-panel-2" 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> \
							</ul>');
						
						}
						/*$("li.wardrobe-door-split-panel", parDoor).css("width", door_width - 1 - 8).css("height",  (door_height - 16)/3);
						$("span.wardrobe-door-inner", door).css("width", door_width - 1 - 10).css("height",  (door_height - 20)/3);*/
						$("span.wardrobe-door-selector", parDoor).css("padding", "0px");
						//$(door).removeClass("selected");
						//alert(splitPan[0]);
						//alert(splitPan[1]);
						//alert(splitPan[2]);
						$("input.variable", parDoor).eq(0).attr("id", "var-door-" + a + "-panel-0").attr("name", "var[panel][" + a + "][]").val(splitPan[0]);
						$("input.variable", parDoor).eq(1).attr("id", "var-door-" + a + "-panel-1").attr("name", "var[panel][" + a + "][]").val(splitPan[1]);
						$("input.variable", parDoor).eq(2).attr("id", "var-door-" + a + "-panel-2").attr("name", "var[panel][" + a + "][]").val(splitPan[2]);
					} 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);
			//Visuals.preview();
			//
		});

		
	}
	

	this.showOverlay = function() {
		$("body").append('<div id="configurator-overlay"></div>');
		$("#configurator-overlay").css("opacity", "0.9").fadeIn(200);
	}
	
	this.showSplashscreen = function() {
		$("body").append('<div id=\"configurator-splashscreen\"><p><h2>Now loading...</h2><p>Spaceslide Wardrobe Configurator</p></div>');
		$("#configurator-splashscreen").clearTypeFadeIn(200);
	}
	
	this.hideOverlay = function() {
		$("#configurator-overlay").fadeOut(200, function() {
			$("#configurator-overlay").remove();
		});
	}
	
	this.hideSplashscreen = function() {
		$("#configurator-splashscreen").clearTypeFadeOut(200, function() {
			$("#configurator-splashscreen").remove();
		});
	}
	
	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="content"> \
												</div> \
												<div class="footer"> \
													<a href="#" class="close"> \
														<img src="/configurator/images/closelabel.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 .content').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) {
		//$.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="content"> \
										</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";
				$('#facebox .content').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', (348 - ($('#facebox table').height()) / 2));
				$('#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="content" 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 .content");
						$("#facebox #configurator-visuals").css("position", "static");
						$("#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 .content").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 .content #distext").html('Email Address <input type="text" name="email" id="designemail" /><input type="button" value="Save" name="savedes" id="savedes" />').css("text-align","center").css("font-size", "9px");
							$('#facebox input#savedes').click(function() {
								var email = $("#facebox input#designemail").val();
								Configurator.designsaver(email, type, 0);
							});
							//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 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 == "titan") {
			$("ul#configurator-visual-doors li.wardrobe-door").each(function() {
				var doorindex = $("ul#configurator-visual-doors li.wardrobe-door").index(this);
				panel[doorindex] = new Array(3);
				var pan1 = $("input.variable", this).eq(0).val();
				var pan2 = $("input.variable", this).eq(1).val();
				var pan3 = $("input.variable", this).eq(2).val();
				panel[doorindex][0] = pan1;
				panel[doorindex][1] = pan2;
				panel[doorindex][2] = pan3;
			});
		} else 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<=2;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<=2;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, 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) {  
	 		Configurator._saved = true;
			if (data == "You specified an invalid email address") {
				Configurator._saved = false;
				if (place == 0) $('#facebox a.save_design').css("visibility", "visible");
				if (place == 1) {
					$("#des-saver a").css("display", "block").css("text-align", "center").html(" Try Again");
				}
			}
			if (place == 0) $("#facebox .content #distext").html(data).css("font-size", "12px");
			if(place == 1) $("#des-info").html(data).css("font-size", "9px");
	 	});
	}
	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(cart) Configurator.reinsert(stage);
	}
	
	this.close = function(dialog) {
		dialog.data.fadeOut(200, function() {
			dialog.container.fadeOut(200, function() {
				if(Configurator._goto == false) {
					Configurator.hideSplashscreen();
					Configurator.hideOverlay();
				}
				$.modal.close();
				if(Configurator._goto) {
					if(Configurator._goto == "homepage") {
						window.location = "http://www.spaceslide.co.uk";
						//window.location = "http://chris.headred.net";
					} else {
						Configurator.showOverlay();
						Configurator.fire(Configurator._goto, Configurator._design);
					}
				} else {
					location.reload();
				}
			});
		});
	}
	
	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.bind = function() {
		Controller.bind();
	}
	
	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;
	}
}