var svm = {
	domInit : function() {
		this.overlay.buildAjaxOverlays();
		this.buildDateInputs($(".dateInput"));
		
		if (window.location.pathname == "/") {
			$(".bottomContent").prepend("<a class='newsletterFloat' href='http://pages.email.visitmesquite.com/page.aspx?QS=2e4c31a3756cb94095c791a05f0cb29103a1931892edee138e3987d875dc0b04'><img src='/includes/images/shell/newsletterSignup.png'></a>");
		}
	},
	windowInit : function() {
	},
	settings : {
		controllerURL : "/includes/cfcs/controller/controller.cfm",
		loading : $("<div class='loading'><span>Loading...</span></div>")
	},
	buildDateInputs : function(nodes) {
		nodes.dateinput({
			format: 'mm/dd/yyyy',
			trigger : true
		});
	}
};

svm.overlay = {
	buildAjaxOverlays : function() {
		$("body").append("<div id='jtOverlay'></div>");
		this.buildAjaxOverlay($(".jtOverlayLink"));
	},
	buildAjaxOverlay : function(nodes) {
		nodes.each(function() {
			$(this).attr("rel", "#jtOverlay");
		});
		nodes.overlay({
			mask : "#444",
			onBeforeLoad : function() {
				var overlay = $("#jtOverlay");
				if(overlay.children(".content").length > 0) {
					overlay.children(".content").remove();	
				}
				
				overlay.css("width", this.getTrigger().attr('data-width') + "px");
				
				var content = $("<div class='content'></div>");
				
				content.load(this.getTrigger().attr("href"));
				overlay.append(content);
			},
			closeOnClick : false
		});
	}
}

svm.headerImages = {
	init : function() {	
		var self = this;
		
		this.root = $(".headerImages");
		
		this.root.find(".jWindow").scrollable({
			next : ".jNext",
			prev : ".jPrev"	,
			circular : true,
			items : ".primaryImage"
		}).autoscroll({ 
			autoplay : true,
			interval : 5000,
			autopause : false
		});
		
		this.api = this.root.find(".jWindow").data("scrollable");
		
		this.root.find(".jNext").click(function() {
			self.api.stop();
		});
		
		this.root.find(".jPrev").click(function() {
			self.api.stop();
		});
		
		this.root.find(".slideToggle").bind("click", this.slideToggle);
		this.root.find(".slideImage").bind("click", this.imageClick);
	},
	slideToggle : function() {
		var current = svm.headerImages.root.find(".slideOut").position().top;
		var nextTop = 0;
			
		if (current == 270) {
			var nextTop = 400;
		} else if (current == 400) {
			var nextTop = 270;	
		}
			
		if (nextTop == 0) {
			return false;	
		}
			
		svm.headerImages.root.find(".slideToggle").toggleClass("active");	
		svm.headerImages.root.find(".slideOut").animate({ top : nextTop });
	},
	imageClick : function() {
		svm.headerImages.api.seekTo($(this).attr("data-index"));
		svm.headerImages.api.stop();	
	}
}

svm.misc = {
	setSameHeight : function(nodes) {
		var tallest = nodes.eq(1).height();
		for (var i = 0; i < nodes.length; i++) {
			if (nodes.eq(i).height() > tallest) {
				tallest = nodes.eq(i).height();	
			}
		}
		nodes.height(tallest);	
	}
}

svm.listings = {
	getJackData : function(listingids, callback, start, end) {
		var dateParts = '';
		var sdate = new Date();
		var edate = new Date();
		
		if (typeof(start) == "string") {
			dateParts = start.split('-');
			if (dateParts.length == 3) {
				sdate = new Date(dateParts[0], (dateParts[1] - 1), dateParts[2]);
			}
		}
		
		if (typeof(end) == "string") {
			dateParts = end.split('-');
			if (dateParts.length == 3) {
				edate = new Date(dateParts[0], (dateParts[1] - 1), dateParts[2]);
			}
		}
		
		var sday = sdate.getDate();
		var smonth = sdate.getMonth() + 1;
		var syear = sdate.getFullYear();
		
		var eday = edate.getDate();
		var emonth = edate.getMonth() + 1;
		var eyear = edate.getFullYear();
		$.get("/includes/cfcs/controller/controller.cfm?object=jackObj&action=getData&returnType=json", { listingids : listingids, startDate : syear + "-" + smonth + "-" + sday, endDate : eyear + "-" + emonth + "-" + eday }, function(data) {
			if (typeof(callback) == "function") {
				callback(data.data);
			}
		}, "json");
	},
	processJack : function(data) {
		for(var i in data) {
			var node = $(".lsItem[data-recid=" + i	+ "]");
			var sum = 0;
			var total = 0;
			var average = 0;
			
			for(var k in data[i]) {
				if (data[i][k] > 0) {
					sum += data[i][k];
					total++;
				}
			}
			
			if (total > 0) {
				average = sum / total;	
			}
			
			if (average > 0) {
				var bigPrice = Math.floor(average);
				var smallPrice = data[i][k] - Math.floor(average);
				smallPrice = smallPrice.toFixed(2);
				smallPrice = smallPrice.replace(/.*?\./, "");
				node.find(".lsPriceText").html(bigPrice);
				node.find(".lsCents").html(smallPrice);
			} else {
				node.find(".lsPriceText").html("SOLD");
				node.find(".sup").remove();
			}
		}
	},
	submitBookDirect : function(node) {
		var href = $(node).attr("href");
		var form = $(node).closest("form");
		var start = form.find("input").eq(0).data("dateinput").getValue("yyyy-mm-dd");
		var end = form.find("input").eq(1).data("dateinput").getValue("yyyy-mm-dd");
		
		var newHref = svlv.misc.replaceUrlVar(href, "sDate", start);
		newHref = svlv.misc.replaceUrlVar(newHref, "eDate", end);
		
		$(node).attr("href", newHref);
	}
};

var svlv = {
	settings : {
		controllerURL : "/includes/cfcs/controller/controller.cfm",
		loading : jQuery("<div class='loading'><img src='/includes/images/shell/ajax-loader.gif'/><span>Loading...</span></div>"),
		backgrounds : [],
		backgroundThemeId : 1,
		breadcrumb : [],
		useBread : true
	},
	buildAjaxOverlays : function() {
		jQuery("body").append("<div id='svlvOverlay'></div>");
		this.buildAjaxOverlay(jQuery(".svlvOverlayLink"));
	},
	buildAjaxOverlay : function(nodes, extraClass) {
		nodes.overlay({
			mask : "#444",
			onBeforeLoad : function() {
				var overlay = jQuery("#svlvOverlay");
				
				if (typeof sv != 'undefined' && typeof sv.siteID != 'undefined') {
					overlay.addClass('site'+sv.siteID);
				}
				
				if (typeof extraClass != 'undefined') {
					overlay.addClass(extraClass);
				}
				
				if(overlay.children(".content").length > 0) {
					overlay.children(".content").remove();	
				}
				
				if (this.getTrigger().attr("data-width")) {
					overlay.css("width", this.getTrigger().attr('data-width') + "px");
				} else {
					overlay.css("width", "auto");	
				}
				
				var content = jQuery("<div class='content'></div>");
				
				content.load(this.getTrigger().attr("href"));
				overlay.append(content);
			},
			closeOnClick : false,
			fixed : false
		});
	},
	centerOverlay : function(node) {
		node.css("left", (jQuery(window).width() - node.width()) / 2);
		node.css("top", (jQuery(window).height() - node.height()) / 2);
	}
};

svlv.overlayCalendar = {
	init : function() {
		$("#jtOverlay .viewRates h2").addClass("tradeGothic");
		$("#jtOverlay .viewDayHeader").addClass("tradeGothic");
		$("#jtOverlay .viewRatesTopRightTitle").remove();
		$("#jtOverlay .viewArrow").html("");
		$("#jtOverlay .bookingMini .redArrow").html("");
		svm.buildDateInputs($(".viewRatesTopRight .dateInput"));
		this.selectDate($(".viewCalendar .viewDay.hasData").eq(0).attr("data-date"));
		$(".viewWindow").scrollable({
			onSeek : function() {
				var self = this;
				if (this.getIndex() == this.getSize() - 1) {
					var items = this.getItems();
					var current = items.eq(this.getIndex());
					
					var data = current.attr('data-date');
					var dateParts = data.split("-");
					
					var newDate = new Date(dateParts[0], dateParts[1], 1);
					var dateString = newDate.getFullYear() + "-" + (newDate.getMonth() + 1) + "-" + newDate.getDate();
					$(".viewCalendars").append(svm.settings.loading);
					$.get(svm.settings.controllerURL, { object : "listingDetailObj", action : "calendarBottom", startdate : dateString, listingid : $(".viewRates").attr("data-listingid") }, function(data) {
						var newContent = $(data);
						$(".loading").detach();
						$(".viewCalendars").append(newContent);
						self.seekTo(self.getIndex());
						svlv.overlayCalendar.adjustHeight();
					});
				}
			},
			next : ".viewRight",
			prev : ".viewLeft"
		});
		this.adjustHeight();
	},
	adjustHeight : function() {
		var topHeight = $(".viewCalendarContainer").height();
		$(".viewCalendarContainer").each(function() {
			if ($(this).height() > topHeight) {
				topHeight = $(this).height();	
			}
		});
		$(".viewWindow").height(topHeight);
	},
	selectDate : function(dateString) {
		var start = $(".viewCalendar .viewDay.start");
		var finish = $(".viewCalendar .viewDay.finish");
		var newNode = $(".viewDay.hasData[data-date=" + dateString + "]");
		var allNodes = $(".viewDay").not(".notactive");
		
		if (start.length == 0) {
			$(".viewRatesTopRight .dateInput").eq(0).val(dateString);
			$(".viewRatesTopRight .dateInput").eq(1).val(dateString);
			newNode.addClass("selected").addClass("start");
		} else if (start.length == 1 && finish.length == 0 && newNode.get(0) != start.get(0)) {
			var startPos = $.inArray(start.get(0), allNodes);
			var endPos = $.inArray(newNode.get(0), allNodes);
			
			if (endPos < startPos) {
				start.removeClass("selected").removeClass("start");
				return this.selectDate(dateString);	
			}
			
			for(var i = startPos; i < endPos; i++) {
				if (allNodes.eq(i).hasClass("hasData")) {
					allNodes.eq(i).addClass("selected");	
				} else {
					alert('Invalid date range, day in between does not have available rooms');
					allNodes.removeClass("selected");
					start.addClass("selected");
					return false;
				}
			}
			
			$(".viewRatesTopRight .dateInput").eq(1).val(dateString);
			newNode.addClass("selected").addClass("finish");	
		} else if (newNode.get(0) == start.get(0) && finish.length == 0) {
			allNodes.removeClass("finish").removeClass("selected").removeClass("start");
			this.selectDate("");
		} else {
			allNodes.removeClass("finish").removeClass("selected").removeClass("start");
			this.selectDate(dateString);
		}
	},
	selectNode : function(node) {
		this.selectDate(node.attr("data-date"));
	}
};

svlv.google = {
	isMapVisible : function() {
		return $(".mapHolder .gmapBox").is(":visible");
	},
	toggleMap : function() {
		if (this.isMapVisible()) {
			this.hideMap();	
		} else {
			this.showMap();	
		}
	},
	showMap : function() {
		$(".mapHolder .gmapBox").show();
		initWidgetMap();
	},
	hideMap : function() {
		$(".mapHolder .gmapBox").hide();
	},
	goToPlacemark : function(num) {
		if (!this.isMapVisible()) {
			this.showMap();	
		}
		
		$(".mapHolder").get(0).scrollIntoView();
		for(var i in placemarks) {
			placemark = placemarks[i][num];
		}
		
		placemark.marker.openInfoWindowHtml(placemark.marker.myInfoHTML);
	}
}

svlv.misc = {
	replaceUrlVar : function(url, name, value) {
		var reg = new RegExp(name + "=.*?(&.*)?$");
		var newUrl = url.replace(reg, name + "=" + value + "$1");
		return newUrl;
	},
	getHashVar : function(name) {
		var myReg = new RegExp(name + "=([\\w-]+)", "i");
		var myurl = window.location.href;
		var data = myurl.match(myReg);
		
		if (data == null) {
			return 	"";
		} else {
			return data[1];	
		}
	}
};

$(function() {
	svm.domInit();
});

$(window).load(function() {
	svm.windowInit();
});

jQuery(function() {
	svlv.buildAjaxOverlays();
});




