var Garage = {
	current: null,
	init: function() {
		var data = {rnd:Math.round(Math.random() * 100000)};
		var vhclId = gup("vhclId");
		$.ajax({
			type: "GET",
			url: APP_CONTEXT + "/savedVehicleAction/listVehicles.do",
			dataType: "json",
			data: data,
			success: function(data, status) {
				var curVhcl = null;
				if(vhclId) $(data).each(function(pos, vhcl) {if(vhcl.id == vhclId) {curVhcl = vhcl;return false;}});
				// Default to first vehicle
				if(!curVhcl && data.length > 0) curVhcl = data[0];
				if(curVhcl) Garage.getVehicle(curVhcl);
				$(document).ready(function() {
					Garage.setGarageSizeLabel(data.length);
					var garageList = $("#savedVehicles")[0];
					$(data).each(function(pos, vhcl) {
						garageList.appendChild(Garage.createSavedVehicle(vhcl));
					});
					$("#savedVehicles li").hover(function() {$(this).addClass("hover");}, function() {$(this).removeClass("hover");});
					$("#confirmOverlay").jqm({modal:true,overlayClass:"jqmAlertOverlayBkg"});
				});
			},
			error: function(req, status) {
				var data;
				try {
					data = eval("(" + req.responseText + ")");
					
					var queryString = "?action=g";
					if(vhclId) queryString += "&vhclId=" + vhclId;
					if(data.exceptionType == 6) location.href = secure("/profile.html" + queryString);
					else exceptionAlertHandler(req);
				} catch(e) {
					exceptionAlertHandler(req);
				}
			}
		});
		$(function() {
			var gradients = ["#f4f4f4","#f1f1f1","#ededed","#e8e8e8","#e4e4e4","#dedede","#dadada","#d6d6d6"];
			$("#myGarageOptions ul li").eq(0).css({"background":gradients[0],"border-top":"solid 1px #ffffff"});
			$("#myGarageOptions ul li").each(function(pos, elem) {
				var index = (gradients.length > pos) ? pos : gradients.length - 1;
				$(elem).css("background", gradients[index]);
			});
			$("#myGarageViewThumb li").hover(Garage.hoverOverThumb, Garage.hoverOutThumb);
			$("#myGarageInfoNav li").click(Garage.changeTab);
			$("#saveDescriptions").jqm({modal:true});
			$(".saveClose").click(function(){$("#saveDescriptions").jqmHide();});
		});
	},
	hoverOverThumb: function(eventObj) {
		var index = $(this).indexOf() + 1;
		$("#myGarageViewHolder img").css("display", "none");
		$("#myGarageViewHolder img").eq(index).css("display", "block");
	},
	hoverOutThumb: function(eventObj) {
		$("#myGarageViewHolder img").css("display", "none");
		$("#myGarageViewHolder img").eq(0).css("display", "block");
	},
	changeTab: function(eventObj) {
		var tab = $(this);
		$("#myGarageInfoNav a").removeClass("active");
		tab.children("a").addClass("active");

		$("#myGarageInfoContainer").children("div").css("display","none");
		$("#myGarageInfoContainer").children("div").eq(tab.indexOf()).css("display","block");
	},
	createSavedVehicle: function(vhcl) {
		var grp = document.createElement("li");
		grp.id = "vhcl" + vhcl.id;
		
		var link = document.createElement("a");
		link.href = "/my-garage.html?vhclId=" + vhcl.id;
		link.onclick = function() {
			Garage.getVehicle(vhcl);
			return false;
		};
		grp.appendChild(link);

		var name = document.createElement("span");
		name.innerHTML = vhcl.name;
		link.appendChild(name);

		var w = 92;
		var h = 46;
		var options = {asPng:true,autoTrim:true,color:vhcl.color};
		if(true) {
			// Gets the appropriate color
			ImageBuilder.getColorizedImage(vhcl.acode, vhcl.image, w, h, options, function(image) {
				if(image) {
					var imageElem = document.createElement("img");
					imageElem.src = image;
					imageElem.width = w;
					imageElem.height = h;
					imageElem.className = "png";
					link.insertBefore(imageElem, name);
				}
			});
		} else {
			// Faster, but images won't have the selected color
			var imageElem = document.createElement("img");
			imageElem.src = ImageBuilder.buildUrl(vhcl.image, w, h, options);
			imageElem.width = w;
			imageElem.height = h;
			imageElem.className = "png";
			link.insertBefore(imageElem, name);
		}
		return grp;
	},
	getVehicle: function(vhcl) {
		/* TODO DELETE ME
		var vhcl;
		if (arguments.length > 1) vhcl = {id:id, acode:acode, stateSring:stateString, notes:null};
		else vhcl = arguments[0];
		*/
		// TODO Add loader
		var _this = this;
		// For some reason, IE likes the URL object over passing the data param in the get function
		var url = new Url(APP_CONTEXT + "/vehicleConfigurationAction/newCmd.do", {aCode:vhcl.acode,currentStateString:vhcl.stateString,isPaint:false});
		$.get(url.build(), null, function(xml) {
			var totals = VehicleXmlUtil.getTotals(xml);
			$("#baseMsrp").text("$" + formatCurrency(totals.base));
			$("#totalOptions").text("$" + formatCurrency(totals.options));
			$("#totalPackages").text("$" + formatCurrency(totals.packages));
			$("#totalPower").text("$" + formatCurrency(totals.power));
			var dest = (vhcl.destinationCharge) ? vhcl.destinationCharge : 0;
			$("#totalDestination").text("$" + formatCurrency(dest));
			$("#totalMsrp").text("$" + formatCurrency(eval(totals.total) + dest));
			
			$("#myGarageInfoPower").html(VehicleXmlUtil.getPowerOptionsHtml(xml, false));
			$("#myGarageInfoPackages").html(VehicleXmlUtil.getPackageOptionsHtml(xml, false));
			$("#myGarageInfoOptions").html(VehicleXmlUtil.getOptionsHtml(xml, false));
			_this.setNotes(vhcl.notes);
			
			// Set the text boxes
			$("#saveName")[0].value = vhcl.name;
			$("#saveNotes")[0].value = vhcl.notes;
		}, "xml");
		$.getJSON(APP_CONTEXT + "/vehicleSelectionAction/getTrimInformation.do", {aCodeList:vhcl.acode}, function(data) {
			var trim = data[0];
			// TBD Should this be handled differently?
			vhcl.destinationCharge = trim.destinationCharge;
			Garage.setCurrentVehicle(vhcl);
			$("#savedVehicleTitle").text("My " + trim.yearDesc + " " + trim.modelDesc + " " + trim.trimDesc + " " + trim.varDesc);
			
			var mainImg = $("#defaultView");
			var mainW = mainImg.attr("width");
			var mainH = mainImg.attr("height");
			ImageBuilder.getColorizedImage(vhcl.acode, vhcl.image, mainW, mainH, {asPng:true,autoTrim:true,color:vhcl.color}, function(image) {
				mainImg.attr("src", image);
			});
			/* TODO Need to handle different angles
			var angles = [101, 102, 103];
			$("#myGarageViewThumb img").each(function(pos, img) {
				ImageBuilder.getColorizedImage(vhcl.acode, trim.image, img.width, img.height, {asPng:true,autoTrim:true,angle:angles[pos]}, function(image) {
					img.src = image;
				});
			});
			$("#myGarageViewHolder img").each(function(pos, img) {
				if(pos > 0) {
					ImageBuilder.getColorizedImage(vhcl.acode, trim.image, img.width, img.height, {asPng:true,autoTrim:true,angle:angles[pos-1]}, function(image) {
						img.src = image;
					});
				}
			});
			 */
		});
	},
	setCurrentVehicle: function(vhcl) {
		Garage.current = vhcl;
		
		// Mark the current vehicle in the list of vehicles
		var id = "vhcl" + vhcl.id;
		var vhcls = $("#savedVehicles li");
		vhcls.removeClass("savedCurrent");
		vhcls.each(function(pos, elem) {
			if(elem.id == id) {
				$(elem).addClass("savedCurrent");
				return false;
			}
		});
		// Update links
		$(document).ready(function() {
			var bpUrl = new Url("/bp.html#summary", {savedVehicleId:vhcl.id,modelYearId:vhcl.modelYearId,aCode:vhcl.acode,currentStateString:vhcl.stateString});
			var sendParams = {savedVehicleId:vhcl.id,modelYearId:vhcl.modelYearId,acode:vhcl.acode,stateString:vhcl.stateString,prev:"g"};
			
			$("#editSavedVehicle")[0].href = bpUrl.build();
			var sendToLinks = $(".sendToLink");
			sendToLinks.each(function(pos, elem) {
				var url = new Url(elem.href);
				url.params = sendParams;
				elem.href = url.build();
			});
		});
	},
	confirmDelete: function() {
		$("#confirmOverlay").jqmShow();
		return false;
	},
	closeConfirm: function() {
		$("#confirmOverlay").jqmHide();
		return false;
	},
	deleteVehicle: function() {
		if(this.current && this.current.id) {
			var id = this.current.id;
			$.get(APP_CONTEXT + "/savedVehicleAction/delete.do?savedVehicle.id=" + id, null, function(resp) {
				var vhcl = $("#vhcl" + id);
				var vhcls = $("#savedVehicles li");
				var index = vhcl.indexOf();
				if(index > 0) index--;
				//if(index == vhcls.length - 1) index--;
				vhcl.remove();
				$("#savedVehicles li:eq(" + index + ") a").click();
				Garage.setGarageSizeLabel($("#savedVehicles li").length);
			});
		}
		this.closeConfirm();
		return false;
	},
	changeDescriptions: function(type) {
		var jelem = $("#saveDescriptions");
		var jform = $("#saveDescriptionsForm");
		jform.removeClass("name").removeClass("notes")
		jform.addClass(type);
		jelem.jqmShow();
		return false;
	},
	submitDescriptions: function() {
		var jelem = $("#saveDescriptions");
		var jform = $("#saveDescriptionsForm");
		var name = (jform.hasClass("name")) ? $("#saveName").attr("value") : null;
		var notes = (jform.hasClass("notes")) ? $("#saveNotes").attr("value") : null;
		var data = {};
		data["savedVehicle.id"] = this.current.id;
		if(name) data["savedVehicle.name"] = name;
		if(notes) data["savedVehicle.notes"] = notes;
		// TODO Disable buttons
		var _this = this;
		$.post(APP_CONTEXT + "/textAction/check.do", {phrases:[name, notes]}, function(checkData) {
			if(checkData.success) {
				$.get(APP_CONTEXT + "/savedVehicleAction/changeDescriptions.do", data, function(resp) {
					if(!name && !notes) name = $("#savedVehicleTitle").text().substring(8);
					if(name) $("#vhcl" + _this.current.id + " span").text(name);
					if(notes) _this.setNotes(notes);
					jelem.jqmHide();
					// TODO Enable buttons
				});
			} else {
				$("#alertContent").html("You have used inappropriate language in the name of your vehicle or your notes. Please remove any inappropriate words and save your vehicle again.");
				$("#alertOverlay").jqmShow();
				// TODO Enable buttons
			}
		}, "json");
		return false;
	},
	setGarageSizeLabel: function(size) {
		var sizeLabel;
		if(size == 1) sizeLabel = "1 Saved Vehicle";
		else if(size > 1) sizeLabel = size + " Saved Vehicles";
		else sizeLabel = "No Saved Vehicles";
		$("#garageSize").text(sizeLabel);
	},
	setNotes: function(notes) {
		if(!notes) notes = "<p class=\"noNotes\">[empty]<p>";
		else notes = TextUtils.htmlBreaks(TextUtils.escapeHtml(notes));
		$("#myGarageInfoNotes").html(notes);
	}
}
Garage.init();

function todo() {
	alert("Still need to do!");
}
