var bookingfieldlist = [
	{ xml: "targetname", dom: "targetname" },
	{ xml: "bookkey", dom: "bookkey" },
	{ xml: "requestid", dom: "requestid" },
	{ xml: "requestkey", dom: "requestkey" },
	{ xml: "quotekey", dom: "quotekey" },
	{ xml: "targetkey", dom: "targetid" }
];

var userbookingfieldlist = [
	{ xml: "targetname", dom: "ubd_targetname" },
	{ xml: "requestkey", dom: "ubd_requestkey" },
	{ xml: "requestid", dom: "ubd_requestid" },
	{ xml: "targetkey", dom: "ubd_targetkey" },
	{ xml: "sellerreasonkey", dom: "notbookedstatus" },
	{ xml: "feedbackkey", dom: "ubd_feedbackkey" }
							
];

function bookingSetTarget() {
	var fswin = window.open("/focussearch", "focussearch", "resizable,height=640,width=782,scrollbars");
	fswin.focus();
	fscallback = fsBookingButtons;
}

function fsBookingButtons() {
	return [ { title:"Select Resort", clickfunc: fsBookingSelect } ];
}

function fsBookingSelect(which){
	modules.bookings.update_target(which);
	return true;
}


modules.bookings = {
	views: {
		booking: { title: "View Bookings", headers: "bookings" },
		selbooking: { title: "Select Booking to Modify", headers: "bookings" },
		userbooking: { title: "View User Reported Bookings", headers: "userbookings" }
	},
	cutoff: {},
	init: function() {
		if(modules.bookings.bookrules) {
			for(var i=0; i < modules.bookings.bookrules.length; i++) {
				if(modules.bookings.bookrules[i].name && modules.bookings.bookrules[i].name == "cutoffdate") {
					modules.bookings.cutoff = modules.bookings.bookrules[i];
					break;
				}
			}
		}
		modules.bookings.loadstatus();
	},
	loadstatus: function() {
		
		$.ajax( { type: "GET", 
				url: "managebooking.cfc?method=status",
				cache: false,
				complete: modules.bookings.statusloaded} );
	},
	statusloaded: function(req) {
		var status= $(req.responseXML).find("status").text();
		var userreport = $(req.responseXML).find("userreport").text();
		var nstatus = parseInt(status, 10);
		var trend= parseInt($(req.responseXML).find("trend").text(),10);
		//alert(trend);
		var color = "white";
		if(nstatus >= 70)
			color = "green";
		else if(nstatus >= 45 && nstatus < 70)
			color = "yellow";
		else if(nstatus < 45)
			color = "red";
		if(!isNaN(nstatus)) {
			$("#bookstatuscolor").css("backgroundColor", color).show("normal");
		}
		if(trend < 0) {
			$("#booktrendarrow").attr({src:"/images/arrow_down.gif", title: "Trend Is Declining"}).show();
		} else if (trend > 0) {
			$("#booktrendarrow").attr({src:"/images/arrow_up.gif", title: "Trend Is Improving"}).show();
		} else {
			$("#booktrendarrow").hide();
		}
		$("#status").text(status);
		if(parseInt(userreport) != 0) {
			//$("#userreport").text(userreport);
			var a = document.createElement("a");
			$(a).text(userreport).attr( {href: "#", title: "Click to view user reported bookings."}).click(function(e) { modules.bookings.showuserbooking("userbooking"); e.preventDefault(); });
			$("#userreport").empty().append(a);
		} else 
			$("#userreport").text(userreport);
	},
	update_target: function (which) {
		
		$.ajax( {
			type: "POST",
			url: "listrequests.cfc?method=gettargetinfo&targetkey="+which,
			async: false,
			cache: false,
			success: function(req) {
				$("#managebooking #targetname").text($(req).find("target name").text());
				$("#managebooking #targetid").val(which);
			}
		} );
	},
	view_booking_keyhandler: function(in_key) {
	   switch (in_key.toLowerCase()) {
			case 'down':
			$('#bookinglist')[0].selectNext();
			return false;
		case 'up':
			$('#bookinglist')[0].selectNext(-1);
			return false;
		case 'enter':
			if($('#viewbooking')[0].currsrc.indexOf("select_booking_to_modify") != -1) {
				modules.bookings.closeviewwin();
			}
			modules.bookings.manage_booking($('#bookinglist')[0].getSelectedId(), "Manage Booking", '');
			return false;
		case 'esc':
			$('#viewbooking')[0].deactivate();
			$('#viewbooking')[0].currsrc = "";
			$('#bookinglist')[0].currview = "";
			$('#bookinglist')[0].lasturl = "";
			$('#viewbooking')[0].isopen = false;
			return false;
		default:
			return true;
	   }
	},
	closeviewwin: function() {
		$('#viewbooking')[0].currsrc = "";
		$('#bookinglist')[0].currview = "";
		$('#bookinglist')[0].lasturl = "";
		$('#viewbooking')[0].isopen = false;
		$('#viewbooking')[0].deactivate();
	},
	sortgrid: function(id, index, colname, thobj, griddiv) {
		
		var view = griddiv.currview;
		griddiv.setData([]);
		var url = griddiv.lasturl;
		var sortfield = id;
		if(griddiv.lastsort) {
			if(griddiv.lastsort.indexOf(sortfield) == 0 && !/desc$/i.test(griddiv.lastsort))
				sortfield += " desc";
		} 
		url += "&orderby=" + sortfield;
		griddiv.lastsort = sortfield;;
		modules.bookings.showbooking("", view, url);
	},
	showbooking: function(bookkeys, view, url, donefunc){
		if(!donefunc)
			var donefunc = null;
		else
			var donefunc = donefunc;
		var view = view;
		if(!url) {
			var url = "managebooking.cfc?method=get";
			if(bookkeys && bookkeys.length && typeof bookkeys == "object")
				url += "&bookkey=" + bookkeys.join(",");
			//cache the url for use in sorting
			$('#bookinglist')[0].lasturl = url
		}
		
		var view = view;
		if(typeof view == "undefined" || !view.length)
			view = "booking";
		
		var title = modules.bookings.views[view].title;
		if(!$('#viewbooking')[0].isopen) {
			$('#viewbooking')[0].activate({
			title:title, keyhandler:modules.bookings.view_booking_keyhandler});
			$('#viewbooking')[0].isopen = true;
		}
		
		$('#viewbooking')[0].currsrc = title.toLowerCase().replace(/ /g, "_");
		//lfjs.keypress.installhandler(modules.bookings.keypress);
		
		var bookinglist = $('#bookinglist')[0];
		bookinglist.empty();
		bookinglist.addRow("Loading", ["Loading..."], 
				{ fastadd: true	} );
		bookinglist.currview = view;
		
		if(modules.bookings.listcolumns && modules.bookings.listcolumns[modules.bookings.views[view].headers]) {
			var headers = modules.bookings.listcolumns[modules.bookings.views[view].headers];
			
			var setheaders = new Array();
			var setwidths = new Array();
			
			for (var i=0; i < headers.length; i++) {
				var title = "Click to sort by " + headers[i].label
				setheaders[i] = { name: headers[i].label, id: headers[i].alias, onclick: modules.bookings.sortgrid, title: title };
				if(headers[i].width)
					setwidths[i] = headers[i].width;
				else
					setwidths[i] = "";
			}
			bookinglist.setHeaders(setheaders);
			bookinglist.setColWidths(setwidths);
		} else {
			var setheaders = new Array();
			setheaders[0] = { name: "Seller" };
			setheaders[1] = { name: "Request ID" };
			setheaders[2] = { name: "Report Date" };
			setheaders[3] = { name: "Resort" };
			setheaders[4] = { name: "Arrival" };
			bookinglist.setHeaders(setheaders);
			bookinglist.setColWidths(["10%","20%","10%","50%","10%"]);
		}
		$.ajax( { type: "GET", 
				url: url,
				cache: false,
				success: function(req) { modules.bookings.loaded(req, view, donefunc) } } );
	},
	
	loaded: function(req, view, donefunc) {
		var view = view;
		if(!donefunc)
			var donefunc = modules.bookings.addGridDone;
			
		var bookinglist = $('#bookinglist')[0];
		bookinglist.empty();
		
		bookinglist.setData($(req).find('booking'), {
			insfunc: function(grid, row, which) { modules.bookings.addGrid(grid, row, which, view) }, 
			donefunc: donefunc
		});
	},
	
	addGrid: function(grid, rows, which, view) {
		var data = [];
		var fields = modules.bookings.listcolumns[modules.bookings.views[view].headers];
		for(var i=0; i < fields.length; i++) {
			if($(rows[which]).find(fields[i].alias).length) {
				var val = $(rows[which]).find(fields[i].alias + ":first").text();
				if(fields[i].fieldtype == "date") {
					val = lfjs.displayDate(new Date(val));
				} else if(fields[i].fieldtype == "datenotime") {
				
					val = lfjs.displayDate(new Date(val), "notime");
				} else if(fields[i].fieldtype == "boolean") {
					if(val == "" || val == 0)
						val = "No";
					else
						val = "Yes";
				} else if(fields[i].fieldtype == "number") {
					if(fields[i].defaultvalue && val == 0)
						val = fields[i].defaultvalue;
				}
				if(val == "")
					val = " ";
				data[data.length] = val;
			}
		}
		var id = 0;
		if($(rows[which]).find("feedbackkey:first").length)
			id = $(rows[which]).find("feedbackkey:first").text();
		else if($(rows[which]).find("bookkey:first").length)
			id = $(rows[which]).find("bookkey:first").text();
		else if($(rows[which]).find("requestkey:first").length)
			id = $(rows[which]).find("requestkey:first").text();
			
		return grid.addRow(id, data,
				{ ondblclick:function(){ lfjs.keypress.stuff('enter')}});
	},
	
	addGridDone: function(grid) {
		
	},
	addbooking: function() {
		var bookinfo = {
			targetname: $("input#ubd_targetname").val(),
			requestid: $("input#ubd_requestid").val(),
			requestkey: $("input#ubd_requestkey").val(),
			targetkey: $("input#ubd_targetkey").val(),
			quotekey: ""
		}
		if(bookdefpopulate && bookdefpopulate.length) {
			var custom = {};
			for(var i=0; i < bookdefpopulate.length; i++) {
				var curr = bookdefpopulate[i];
				var val = "";
				var dom = $("[id$='_" + curr.src + "']");
				switch (dom[0].nodeName.toLowerCase()) {
					case "select":
					case "input":
					case "textarea":
						val = dom[0].value;
						break;
					default:
						val = dom.text();
				}
				custom[curr.dest] = val;
			}
			bookinfo["customfields"] = custom;
		}
		modules.bookings.manage_booking('','Add New Booking',bookinfo);
		//$("#addbooking")[0].activate({title:"Report a New Booking",
		//		keyhandler:modules.bookings.addbooking_keyhandler});
	},
	addbooking_keyhandler: function(in_key) {
		switch (in_key.toLowerCase()) {
			case 'esc':
				$('#addbooking')[0].deactivate();
				return false;
		
		}
		return true;
	},
	manage_booking: function(which, title, bookinfo) {
		$.ajax( { type: "GET", 
			   url: "managebooking.cfc?method=getbucket",
			   cache: false,
			   success: function(req){
					var bucketstr = "";
					if($(req).find("error").length) {
						$("#bookerror").html("There was a problem loading your booking.<br>" + $(req).find("error:first").text()).slideDown("normal");
					} else {
						$(req).find("bucket").each(
							function(i){
								var id = $(this).children("bucketkey:first").text();
								var req = $(this).children("required:first").text();
								var hint = $(this).children("hint:first").text();
								var required = false;
								if(req == 1)
									required = true;
				
								bucketstr = bucketstr + '<tr><td align="right" class="label" width="300">' + 
									$(this).children("name:first").text() + ':</td><td class="tdright">' + 
									'<input name="bucket'+id+'" id="bucket'+id+'" type="text" class="textfield tf_small';
								if(required)
									bucketstr += ' required"> <span class="error">*</span>';
								else
									bucketstr += '">';
								bucketstr += '</td></tr>';
								if(hint != "") {
									bucketstr += '<tr><td align="right" class="label">Note: </td><td>' + hint + '</td></tr>';
								}
								bookingfieldlist.push({
									xml: "[bucketkey='"+id+"']", dom: "bucket"+id
								});
							}
						);
						$("#reportbooking").empty().append(bucketstr);
					}
				}
				} );
		
		Date.format = 'yyyy-mm-dd';
		var now = new Date();
		
		$('#managebooking .date-pick').datePicker().dpSetDisplayedMonth(now.getMonth(), now.getFullYear()).each(function() {
			var sel = $(this).dpGetSelected();
			if(sel && sel.length) {
				for(var i=0; i < sel.length; i++) 
					$(this).dpSetSelected(lfjs.displayDate(new Date(sel[i]), "%Y-%m-%d"), false, false);
			}
		});
		
		$("#bookerror").html("").hide();
		var win = $('#managebooking')[0];
		win.dbform = new lfjs.dbForm(bookingfieldlist);			// Clear fields
		
		win.activate({
		title:title, keyhandler:modules.bookings.manage_booking_keyhandler});
		
		if (bookinfo) {
			$("#targetname").text(bookinfo.targetname);
			$("#requestid").val(bookinfo.requestid);
			$("#quotekey").val(bookinfo.quotekey);
			$("#requestkey").val(bookinfo.requestkey);
			$("#targetid").val(bookinfo.targetkey);
			if(bookinfo.customfields) {
				for(var i in bookinfo.customfields)
					$("#" + i).val(bookinfo.customfields[i]);
			}
			$("#cancelbooking").addClass("invisible");
			if (bookinfo.requestid.indexOf('N/A') == 0) {
				$("#bookerror").html("This is a direct contact request which you have not established contact with.<br>Request ID has been stripped out.").show();
				$("#requestid").val('');
			}
		}
		
		if (which) {
			// Load special
			$.ajax( { type: "GET", 
					url: "managebooking.cfc?method=get&bookkey=" + which,
					cache: false,
					success: modules.bookings.bookingloaded} );
		}else{
			$("#managebooking input#bookkey").val("");
			$("#managebooking :input").attr("disabled",false);
			$('.date-pick').dpSetDisabled(false);
			$("#closebooking").val("Discard Changes");
			$("#savebooking").show();
			$("#cancelbooking").hide();	
			
		}
	},
	
	manage_booking_keyhandler: function(in_key) {
		switch (in_key.toLowerCase()) {
			case 'pgdn':
			case 'pgup':
				if ($('#managebooking')[0].dbform.hasChanges()){
					var returnval = confirm("Do you wish to save your changes?", "");
					if (returnval){
						savebooking();	
					}
				}
				$('#managebooking')[0].deactivate();
				$('#bookinglist')[0].selectNext(
						in_key.toLowerCase() == 'pgdn' ? 1 : -1 );
				lfjs.keypress.stuff('enter');
				return false;
			case 'ctrl+enter':
				savebooking();
				$('#managebooking')[0].deactivate();
				return false;
			case 'esc':
				$('#managebooking')[0].deactivate();
				return false;
		
		}
		return true;
	},
	
	bookingloaded: function(req) {
		var cutoffpast = false;
		var deleted = false;
		var alertstr = "";
		//check if there is a cutoff, and hide/disable fields accordingly if cutoff has passed
		if(modules.bookings.cutoff.detailkey && modules.bookings.cutoff.rule
		   && modules.bookings.cutoff.alert) {
			var val = $(req).find(modules.bookings.cutoff.detailkey + ":first").text();
			var rule =  modules.bookings.cutoff.rule.replace(/\%value\%/g, val);
			cutoffpast = eval(rule);
			alertstr = modules.bookings.cutoff.alert;
			//console.log(thisdate.getFullYear() + "-" + (thisdate.getMonth()+1) + "-" + thisdate.getDate());
		}
		if($(req).find("canceldate:first").length && $(req).find("canceldate:first").text() != "") {
			cutoffpast = true;
			alertstr = "This booking has been deleted.";
		}
			
		if(cutoffpast || deleted) {
			if(alertstr.length)
				$("#bookerror").html(alertstr).show();
			else
				$("#bookerror").html("").hide();
			$("#managebooking :input").attr("disabled",true).css( {"backgroundColor": "white", color: "black"});
			$('.date-pick').dpSetDisabled(true);
			$("#savebooking").hide();
			$("#closebooking").val("Close Window").attr("disabled", false);
			$("#cancelbooking").hide();	
		} else {
			$("#bookerror").html("").hide();
			$("#managebooking :input").attr("disabled",false);
			$('.date-pick').dpSetDisabled(false);
			$("#closebooking").val("Discard Changes");
			$("#savebooking").show();
			$("#cancelbooking").show();	
			
		}
		$('#managebooking')[0].dbform =
					new lfjs.dbForm(bookingfieldlist, $(req).find("booking")[0]);
	},
	/*
	closeviewwin: function(){
		lfjs.keypress.stuff('esc');
	},
	*/
	closeviewuserwin: function(){
		lfjs.keypress.stuff('esc');
	},
	closenewwin: function(){
		$('#managebooking')[0].deactivate();
	},

	closedetail: function(){
		$('#bookingdetail')[0].deactivate();
	},
	
	closesearchwin: function(){
		$("#findrequest")[0].deactivate();	
	},
	
	findrequest : function(){
		$("#findrequest")[0].activate(
			{title : "Search requests"}
		);
	},
	
	checkrequired: function() {
		var errors = [];
		$("#managebooking .required").each(function() {
			var value = ""
			switch (this.nodeName.toLowerCase()) {
				case "select":
				case "textarea":
				case "input":
					value = $(this).val();
					break;
				default:
					value = $(this).text();
			}
			if(value == "")
				errors[errors.length] = this.name;
		})
		return errors;
	},
	
	savebooking: function(){
		$("#bookerror").slideUp("fast");
		var err = modules.bookings.checkrequired();
		if(err.length)
			err = ["All required fields must be filled out."]
		if($("#managebooking #targetname").text() == "") {
			err[err.length] = "A " + application.instancename.toLowerCase() + " must be selected by clicking on the \"Search for " + application.instancename + "\" button.";	
		}
		var bucketvals = "";
		var currencyerror = false;
		$("#managebooking input[name^='bucket']").each(function(i){
				//validate currency
				if(!/^\$?\d{1,3}(,?\d{3})*(\.\d{1,2})?$/.test($(this).val()) && $(this).val() != "")
					currencyerror = true;
				bucketvals = bucketvals + $(this).attr("name") + "=" + $(this).val().replace(/\$/g, "") + "&";
		});
		
		if(currencyerror) {
			err[err.length] = "All reported costs must be in a valid currency format (i.e. 850.99).";
		}
		if(err.length) {
			$("#bookerror").html(err.join("<br>")).slideDown("normal");
			return;
		}
		lfjs.window.wait();
		
		var requestid = $("#requestid").val();
		var quotekey = $("#quotekey").val();
		var targetkey = $("#targetid").val();
		var requestkey = "";
		if(/.*\-([\d]*)$/.test(requestid)) 
			requestkey = requestid.replace(/.*\-([\d]*)$/, "$1");
		var postdata = {
					buckets: bucketvals,
					requestid: requestid,
					requestkey: requestkey,
					quotekey: quotekey,
					targetkey: targetkey
				};
		$("input[name^='bookcustom_']").each(function(i) {
			postdata[this.name.replace(/^bookcustom_/i, "")] = this.value;
		});
		bucketvals = bucketvals.replace(/\&$/, "");
		var method = "save";
		var bookkey = $("#managebooking input#bookkey").val();
		if(bookkey != "")
			method = "modify";
		var url = "managebooking.cfc?method=" + method;
		if($("#managebooking input#bookkey").val() != "")
			url += "&bookkey=" + $("#managebooking input#bookkey").val();
		if($('#managebooking')[0].dbform.hasChanges()) {
			$.ajax( {
					type: "POST",
					cache: false,
					async: true,
					url: url,
					data: postdata,
					success: function(req){
						lfjs.window.nowait();
						if($(req).find("error").length) {
							var errors = [];
							$(req).find("error").each(function(i) {
								errors[errors.length] = $(this).text();							   
							});
							$("#bookerror").html(errors.join("<br>")).slideDown("normal");
						} else {
							if($(req).find("status").length && $(req).find("status").text().toLowerCase() == "success") {
								$("#bookerror").hide();
								$("#managebooking input#bookkey").val("");
								$('#managebooking')[0].deactivate();
								modules.bookings.loadstatus();
								//if the manage booking window was launched from a request, reload the request
								if((typeof $('#viewbooking')[0].currsrc == "undefined" || $('#viewbooking')[0].currsrc == "") && $("#requestkey").val() != "" && $('#requestdetail')[0].isopen) {
									if(!$('#userbookingdetail')[0].isopen)
										modules.requests.loaddetail($("#requestkey").val())
								
									$("#requestdetail")[0].deactivate();
								} else if($('#viewbooking')[0].currsrc == "view_bookings") {
									if(method == "modify" && bookkey != "") {
										var done = function(grid) { grid.selectRow(bookkey) };
									} else {
										var done = function(grid) { grid.selectRow($(grid.tbody).children("tr:first")[0]) };
									}
									modules.bookings.showbooking(null, "booking", null, done);
								
								}
								//if they launched the manage booking window from a user reported booking, close that window and remove from user reported booking list
								if($('#userbookingdetail')[0].isopen) {
									var feedbackkey = $("#ubd_feedbackkey").val();
									$('#userbookingdetail')[0].deactivate();
									$('#userbookingdetail')[0].isopen = false;
									$("#userbookinglist")[0].removeRow(feedbackkey);
									
								}
							} else {
								$("#bookerror").html("There was a problem saving your booking.<br>Please submit your booking again").slideDown("normal");
							}
						}
						
					},
					error: function(req, err) {
					   lfjs.window.nowait();
						$("#bookerror").html("Error: " + err).slideDown("normal");
					}
				} ); 
		} else {
			$("#bookerror").hide();
			lfjs.window.nowait();
			lfjs.keypress.stuff('esc');
		}
		
	},	
	cancelbooking: function(){
		var bookkey = $("#managebooking input#bookkey").val();
		if(bookkey != "" && confirm("Delete this booking?")) {
			lfjs.window.wait();
			$.ajax( {type: "GET", 
					cache: false,
					url: "managebooking.cfc?method=cancel&bookkey=" +bookkey,
					
					success: function(req){
						lfjs.window.nowait();
						if($(req).find("error").length) {
							var errors = [];
							$(req).find("error").each(function(i) {
								errors[errors.length] = $(this).text();							   
							});
							$("#bookerror").html(errors.join("<br>")).slideDown("normal");
						} else {
							if($(req).find("status").length && $(req).find("status").text().toLowerCase() == "success") {
								$("#bookerror").hide();
								$("#managebooking input#bookkey").val("");
								//if the manage booking window was launched from a request, reload the request
								if((typeof $('#viewbooking')[0].currsrc == "undefined" || $('#viewbooking')[0].currsrc == "") && $("#requestkey").val() != "") {
									modules.requests.loaddetail($("#requestkey").val())
								
									$("#requestdetail")[0].deactivate();
								} else if($('#viewbooking')[0].currsrc == "view_bookings") {
									if(bookkey != "") {
										$('#bookinglist')[0].removeRow(bookkey);
									} else {
										modules.bookings.showbooking(null, "booking", null, done);
									}
								
								}
								$('#managebooking')[0].deactivate();
							} else {
								$("#bookerror").html("There was a problem deleting your booking.<br>Please submit your booking again").slideDown("normal");
							}
						}
						
					},
					error: function(req, err) {
					   lfjs.window.nowait();
						$("#bookerror").html("Error: " + err).slideDown("normal");
					}
			} );
		}
	},	
	statusdetail: function(){
		var bdwin = window.open("bookingstatus.cfm", "bookdetail", "resizable,height=640,width=560,scrollbars");
		bdwin.focus();
	},
	viewuserbooking_keyhandler: function(in_key) {
	   switch (in_key.toLowerCase()) {
			case 'down':
			$('#userbookinglist')[0].selectNext();
			return false;
		case 'up':
			$('#userbookinglist')[0].selectNext(-1);
			return false;
		case 'enter':
			modules.bookings.loaduserbookdetail($('#userbookinglist')[0].getSelectedId());
			return false;
		case 'esc':
			$('#viewuserbooking')[0].deactivate();
			return false;
		default:
			return true;
	   }
	},
	sortusergrid: function(id, index, colname, thobj, griddiv) {
		
		var view = griddiv.currview;
		griddiv.setData([]);
		var url = griddiv.lasturl;
		var sortfield = id;
		if(griddiv.lastsort) {
			if(griddiv.lastsort.indexOf(sortfield) == 0 && !/desc$/i.test(griddiv.lastsort))
				sortfield += " desc";
		} 
		url += "&orderby=" + sortfield;
		griddiv.lastsort = sortfield;;
		modules.bookings.showuserbooking(view, url);
	},
	showuserbooking: function(view, url){
		var view = view;
		
		if(!url) {
			var url = "managebooking.cfc?method=getuserbooks";
			//cache the url for use in sorting
			$('#userbookinglist')[0].lasturl = url
		}
		$.ajax( { type: "GET", 
				url: url,
				cache: false,
				success: function(req) { modules.bookings.userbookingloaded(req, view); }
			} );
	},
	
	userbookingloaded: function(req, view) {
		var view = view;
		if(typeof view == "undefined" || !view.length)
			view = "userbooking";
		
		var title = modules.bookings.views[view].title;
		
		$('#viewuserbooking')[0].activate({
		title:title, keyhandler:modules.bookings.viewuserbooking_keyhandler});
		
		var bookinglist = $('#userbookinglist')[0];
		bookinglist.empty();
		
		if(modules.bookings.listcolumns && modules.bookings.listcolumns[modules.bookings.views[view].headers]) {
			var headers = modules.bookings.listcolumns[modules.bookings.views[view].headers];
			
			var setheaders = new Array();
			var setwidths = new Array();
			
			for (var i=0; i < headers.length; i++) {
				var title = "Click to sort by " + headers[i].label
				setheaders[i] = { name: headers[i].label, id: headers[i].alias, onclick: modules.bookings.sortusergrid, title: title };
				if(headers[i].width)
					setwidths[i] = headers[i].width;
				else
					setwidths[i] = "";
			}
			bookinglist.setHeaders(setheaders);
			bookinglist.setColWidths(setwidths);
		} else {
			alert("No column definition found for " + view);
		}
		
		bookinglist.setData($(req).find('booking'), {
			insfunc: function(grid, row, which) { modules.bookings.addGrid(grid, row, which, view) }, 
			donefunc: modules.bookings.addGridDone
		});
	},
	userbookingdetail_keyhandler: function(in_key) {
	   switch (in_key.toLowerCase()) {
		case 'pgdn':
		case 'pgup':
			//savequote();	
			$('#userbookingdetail')[0].deactivate();
			if (in_key.toLowerCase() == 'pgdn') {
				$('#userbookinglist')[0].selectNext();
			} else {
				$('#userbookinglist')[0].selectNext(-1);
			}
			lfjs.keypress.stuff('ENTER');
			return false;
		case 'esc':
			$('#userbookingdetail')[0].deactivate();
			$('#userbookingdetail')[0].isopen = false;
			return false;
		case 'ctrl+enter':
			modules.bookings.saveuserbookingstatus();
			return false;
		default:
			return true;
	   }
	},
	loaduserbookdetail: function(feedbackkey) {
		$('#userbookingdetail')[0].dbform = new lfjs.dbForm(userbookingfieldlist);
		$("#userbookingdetailerror").html("").hide();
		$("#userbookingdetail")[0].activate({
		title:"User Reported Booking", keyhandler:modules.bookings.userbookingdetail_keyhandler});
		
		$('#userbookingdetail')[0].isopen = true;
		$.ajax( { type: "GET", 
				url: "managebooking.cfc?method=getuserbooks&feedbackkey=" + feedbackkey,
				cache: false,
				success: modules.bookings.userbookdetailloaded
			} );
	}, 
	userbookdetailloaded: function(req) {
		 
		$('#userbookingdetail')[0].dbform = new lfjs.dbForm(userbookingfieldlist, $(req).find("booking")[0]);
		$("#notbookedstatus")[0].selectedIndex = 0;
		$("#userbookingdetail td[fieldtype='email']").each(function(i) {
			var val = $(this).text();
			if(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}/i.test(val)) {
				$(this).html('<A href="mailto:' + val + '">' + val + '</A>');
			}														
		});
		$("#userbookingdetail td[fieldtype='requestlink']").each(function(i) {
			var val = $(this).text();
			if(/.*?\-?\d+$/i.test(val)) {
				var key = val.replace(/.*?\-?(\d+)$/, "$1");
				$(this).html('<A href="#" onclick="modules.requests.loaddetail(' + key + '); return false;">' + val + '</A>');
			}														
		});
	}, 
	saveuserbookingstatus: function() {
		var feedbackkey = $("#ubd_feedbackkey").val();
		$("#userbookingdetailerror").html("").hide();
		var errors = [];
		if(!feedbackkey || feedbackkey == "") {
			errors[errors.length] = "No Feedback ID found.";
		}
		var statuskey = $("#notbookedstatus").val();
		
		if(statuskey == "") {
			errors[errors.length] = "No Status Selected.";	
		}
		if(errors.length) {
			$("#userbookingdetailerror").html(errors.join("<br>")).show();
			return false;
		}
		
		lfjs.window.wait();
		$.ajax( { type: "POST", 
				url: "managebooking.cfc?method=saveuserbookstatus&feedbackkey=" + feedbackkey,
				cache: false,
				data: {
					feedbackkey: feedbackkey,
					statuskey: statuskey
				},
				success: function(req){
						lfjs.window.nowait();
						if($(req).find("error").length) {
							var errors = [];
							$(req).find("error").each(function(i) {
								errors[errors.length] = $(this).text();							   
							});
							$("#userbookingdetailerror").html(errors.join("<br>")).slideDown("normal");
						} else {
							if($(req).find("status").length && $(req).find("status").text().toLowerCase() == "success") {
								$("#userbookingdetailerror").hide();
								$("#input#ubd_feedbackkey").val("");
								$('#userbookingdetail')[0].deactivate();
								modules.bookings.loadstatus();
								
								$('#userbookingdetail')[0].isopen = false;
								$("#userbookinglist")[0].removeRow(feedbackkey);
									
							} else {
								$("#userbookingdetailerror").html("There was a problem saving your booking status.<br>Please submit your request again").slideDown("normal");
							}
						}
						
					},
					error: function(req, err) {
					   lfjs.window.nowait();
						$("#userbookingdetailerror").html("Error: " + err).slideDown("normal");
					}
			} );
	}
}
