/**
 * ListingDetails JQuery Plugin
 *	usage: used on the listing details page
 *	dependencies: jquery, flot (with pie charting)
 */
(function() {
	var listingDetailsAjaxRequest = null;
	var listingInfoAjaxRequest = null;
	var highlightedDetailsSummaryTab = null;
	var highlightedDetailsTab = null;
	this.carousel = null;

	$.listingDetails = function() {}
	
	$.initListingDetailsSlideshow = function(othStatus) {
		try{
			if(othStatus != null){
				if(othStatus == "1"){
					$(".mainPhoto").before("<div class=\"listingStatus_overlayIncrease\"></div>");
				}else if(othStatus == "2"){
					$(".mainPhoto").before("<div class=\"listingStatus_overlayDecrease\"></div>");
				}else if(othStatus == "3"){
					$(".mainPhoto").before("<div class=\"listingStatus_overlayNew\"></div>");
				}
			}
		
			var self = this;
			
			if(self.carousel != null){
				$(window).unbind("resize"); // need to unbind jCarousel's window bind or IE will throw errors
				self.carousel = null;
			}
			
			self.picIndex = 1;
			self.freezeEvents = false;
			
			// Get number of pictures
			self.totalPics = 0;
			$("#thumbnailsList li").each(function(){
				self.totalPics++;
			});
			
			self.visiblePics = 5;

			self.carousel = $("#thumbnailsArea").jcarousel({
				buttonPrevHTML: "<div class=\"thumbnailsArea_leftArrow photoNavPrev\" alt=\"Previous\"><a rel=\"me\"><span>Previous</span></a></div>",
				buttonNextHTML: "<div class=\"thumbnailsArea_rightArrow photoNavNext\" alt=\"Next\"><a rel=\"me\"><span>Next</span></a></div>",
				size: self.totalPics,
				visible: self.visiblePics,
				itemFirstInCallback: function(c, li, index, state){
					self.picFirstIndex = index;
					self.freezeEvents = false;
				},
				itemLastInCallback: function(c, li, index, state){
					self.picLastIndex = index;
					self.freezeEvents = false;
				},
				initCallback: function(c, cStatus){
					$(document).ready(function(){
						//highlight first pic since it is being displayed
						$("li[jcarouselindex='1']").find("img").addClass("selected");
						
						$("#thumbnailsList li").click(function(){
							self.picIndex = parseInt($(this).attr("jcarouselindex"));
							$("#mainPhoto").find("img:first").attr("src", $(this).find("img").attr("src"));
							$("#picDesc").html($(this).find("img").attr("alt"));
							$("#thumbnailsList li a img").removeClass("selected");
							$(this).find("img").addClass("selected");
							return false;
						});
						
						$("#prevPic img").click(function(event){
							if(!self.freezeEvents){
								if(self.picIndex > 1){
									self.freezeEvents = true;
									self.picIndex = self.picIndex - 1;
									$("#mainPhoto").find("img:first").attr("src", $("#thumbnailsList li[jcarouselindex='" + self.picIndex + "']").find("img").attr("src"));
									$("#picDesc").html($("#thumbnailsList li[jcarouselindex='" + self.picIndex + "']").find("img").attr("alt"));
									$("#thumbnailsList li a img").removeClass("selected");
									$("#thumbnailsList li[jcarouselindex='" + self.picIndex + "']").find("img").addClass("selected");
									if(self.picIndex < self.picFirstIndex || self.picIndex > self.picLastIndex){
										c.scroll(self.picIndex);
									}else{
										self.freezeEvents = false;
									}
								}
							}
							return false;
						});
						
						$("#nextPic img").click(function(event){
							if(!self.freezeEvents){
								if(self.picIndex < self.totalPics){
									self.freezeEvents = true;
									self.picIndex = self.picIndex + 1;
									$("#mainPhoto").find("img:first").attr("src", $("#thumbnailsList li[jcarouselindex='" + self.picIndex + "']").find("img").attr("src"));
									$("#picDesc").html($("#thumbnailsList li[jcarouselindex='" + self.picIndex + "']").find("img").attr("alt"));
									$("#thumbnailsList li a img").removeClass("selected");
									$("#thumbnailsList li[jcarouselindex='" + self.picIndex + "']").find("img").addClass("selected");
									if(self.picIndex > self.picLastIndex){
										//stepping is based on the first visible pic's index
										c.scroll((self.picIndex - self.picLastIndex) + self.picFirstIndex);
									}else if(self.picIndex < self.picFirstIndex){
										c.scroll(self.picIndex);
									}else{
										self.freezeEvents = false;
									}
								}
							}
							return false;
						});
						
						$(".photoOptionsDescription").click(function(){
							$("#picDesc").slideToggle();
							/*
							alert("Index - " + self.picIndex +
								  "\nLeft Index - " + self.picFirstIndex +
								  "\nRight Index - " + self.picLastIndex +
								  "\nFreeze Events - " + self.freezeEvents);
							*/
						});
						
						$(".photoOptionsEnlarge").click(function(){
							var photoEnlarged = $("#mainPhoto").clone();
							$(photoEnlarged).find("#mainPhoto_buttons").remove();
							$(photoEnlarged).find("#picDesc").css("color", "white").css("background-color", "black").css("display", "block");
							$.blockUI({
								message: photoEnlarged,
								css: {
									top:  ($(window).height() - 480) /2 + 'px', 
									left: ($(window).width() - 640) /2 + 'px', 
									width: '640px',
									border: '0'
								},
								onBlock: function(){
									$(".blockOverlay").click(function(){
										$(".blockOverlay").unbind("click");
										$.unblockUI();
									});
								}
							});
						});
					});
				},
				scroll: 4
			});
		}catch(ex){
			alert(ex.message);
		}
		
		return false;
	}

	/** This function displays a slide show for a specified listing
	  *
	  * @param listNum listing to grab slideshow for
	  * @param secId section id for the listing summary
	  */
	$.displayListingDetailsSlideshow = function(listNum, secId){
		$("#listingTabsOverlay").block({message: "<b>Loading Slideshow...</b>"});

		// abort any pending requests
		if(listingDetailsAjaxRequest){
			listingDetailsAjaxRequest.abort();
		}

		//Get Search Options here & construct query string
		listingDetailsAjaxRequest = $.ajax({
			type: "GET",
			url: "listings?pathway=6&listingNumber="+listNum+"&slideshow=true",
			dataType: "html",
			error: function(data, error){
				alert("Error: displayListingDetailsSlideshow(): " + error + " " + data);
			},
			success: function(data){
				$("#listingTabsModule").html(data);
			},
			complete: function (XMLHttpRequest, textStatus) {
				setTimeout("$(\"#listingTabsOverlay\").unblock()", 500);
			}
		});
	}

	/** This function displays the virtual tours for a specified listing
	  * TODO: Ensure this works
	  * @param listNum listing to grab virtual tour for
	  */
	$.displayListingDetailsVTours = function(listNum){
		// add the maps DOM element
		$("#listingTabsOverlay").block({message: '<b>Loading Virtual Tours...</b>'});

		// abort any pending requests
		if(listingDetailsAjaxRequest){
			listingDetailsAjaxRequest.abort();
		}

		listingDetailsAjaxRequest = $.ajax({
			type: "GET",
			url: "listings?pathway=6&type=results&listingNumber="+listNum+"&vrTours=true",
			dataType: "html",
			error: function(data, error){
				alert("Error: displayListingDetailsVTours(): " + error + " " + data);
			},
			success: function(data){
				$("#listingTabsModule").html(data);
			},
			complete: function (XMLHttpRequest, textStatus) {
				setTimeout("$(\"#listingTabsOverlay\").unblock()", 500);
			}
		});
	}
	
	
	$.displayListingDetailsVTour = function(listNum, self){
		$('.tourFrame').attr('src', 'listings?pathway=6&type=results&tourNum=' + listNum + '&vrTour=true');
		$('#mainTourDesc').html($(self).find('img').attr('alt'));
		$(self).blur();
		return false;
	}

	/** This function displays a map for the listing.
	  *
	  * @param lat lattitude for the map
	  * @param lng longitude for the map
	  */
	$.displayListingDetailsMap = function(lat, lng){
		$("#listingTabsOverlay").block({message: '<b>Loading Map...</b>'});
	
		// abort any pending requests
		if(listingDetailsAjaxRequest){
			listingDetailsAjaxRequest.abort();
		}

		// empty the content panel
		$("#listingTabsModule").empty();

		// add the maps DOM element
		$("#listingTabsModule").html('<div class="mapWrap"><div id="listingDetailsMap" style="width: 646px; height: 485px"></div></div>');
		//$("#listingTabsModule").html('<div class="mapWrap"><div id="listingDetailsMap" style="width: 644px; height: 397px"></div></div>');

		// do the map magic
		var map = new GMap2($("#listingDetailsMap").get(0));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(lat, lng),15);
		var point = new GLatLng(lat, lng);
		map.addOverlay(new GMarker(point));
		
		// add map unload to document unload function
		$(document).unload(function(){
			GUnload();
		});
		
		setTimeout("$(\"#listingTabsOverlay\").unblock()", 500);
		
		return false;
	}
	
	/** This function displays the listing media files for a specified listing
	 *  DEPRICATED
	 * @param listNum listing to grab media for
	 */
	$.displayListingMedia = function(listNum){
		// add the maps DOM element
		$("#listingTabsOverlay").block({message:'<b>Loading Media List...</b>'});

		// abort any pending requests
		if(listingDetailsAjaxRequest){
			listingDetailsAjaxRequest.abort();
		}

		listingDetailsAjaxRequest = $.ajax({
			type: "GET",
			url: "listings",
			data: "pathway=6&type=results&listingNumber="+listNum+"&media=true",
			dataType: "html",
			error: function(data, error){
				alert("Error: listingDetails.displayListingMedia(): " + error + " " + data.statusText());
			},
			success: function(data){
				$("#topSec_cnt").html(data);
			},
			complete: function(XMLHttpRequest, textStatus){
				setTimeout("$(\"#listingTabsOverlay\").unblock()", 500);
			}
		});
		return false;
	}

	/** DEPRECATED FOR NEW DETAILS VIEW - This function displays the summary for a listing
	  * DEPRICATED: View will hide information instead of call database for info already grabbed on load...
	  * @param listNum identifier for the listing
	  * @param pressed the button that was pressed
	  */
	$.displayListingSummary = function(listNum, pressed){
		// set the currently highlighted tab in case we need to rollback
		var self = this;
		this.highlightedDetailsTab = $("#detailsSectionTabs li.select a").get(0);
		
		// highlight this tab
		$.formatListingDetailsTabs(pressed);

		// put loading message 
		$("#botSec_cnt").html('<div align="center" style="vertical-align:middle;">Loading Listing Summary...</div>');
	
		// stop AJAX request if necessary
		if(self.listingDetailsAjaxRequest){
			self.listingDetailsAjaxRequest.abort();
		}
			
		//Get Search Options here & construct query string
		self.listingDetailsAjaxRequest = $.vIPAjax({
			type: "GET",
			url: "listings?pathway=6&summary=true&listingNumber="+listNum,
			error: function(data, error){
				alert("Error - displayListingSummary(): error = " + error + ", data = " + data);
			},
			success: function(data){
				try{
					$("#botSec_cnt").empty().html(data);
				}catch(ex){
					alert("Error: displayListingStatistics() [SUCCESS]: " + ex);
				}
			}
		}, function(){
			// rollback the operation
			$(self.highlightedDetailsTab).click();
		});

		return false;
	}
	
	//tab click events
	
	/** This function sets a specified button to a 'selected' format.
	  *
	  * @param pressed dom object whose parent should be set as selected
	  */
	$.details_tabSelect = function(clickedTab){
		if(this.carousel != null){
			$(window).unbind("resize");
			this.carousel = null;
		}
	
		$('.horizontalTabs ul li').removeClass("select");
		$(clickedTab).parent().addClass("select");
	}
				
	/** This function displays the statistics for a listing
	  *
	  * @param listNum identifier for the listing
	  * @param init whether or not this was called on page load
	  */
	$.showListingStatistics = function(listNum, init){
		// set the currently highlighted tab in case we need to rollback
		var self = this;

		// stop AJAX request if necessary
		if(listingDetailsAjaxRequest){
			listingDetailsAjaxRequest.abort();
		}
		
		//Get Search Options here & construct query string
		listingDetailsAjaxRequest = $.vIPAjax({
			type: "GET",
			url: "listings?pathway=6&statistics=true&listingNumber="+listNum,
			dataType: "html",
			hideVIPRegistration: init,
			error: function(data, error){
				alert("Error: displayListingStatistics(): " + error + " " + data);
			},
			success: function(data){
				$("#listingDetailsStats").html(data);
			},
			complete: function (XMLHttpRequest, textStatus) {
				//$.graphDaysOnMarket(daysOnMarket.MLSStatsDOMs, $('#daysOnMarket'));
				//$.graphPrices(listingPrices.MLSStatsPrices, $('#prices'));
				//$.graphListedVersusSold(listedVersusSold.MLSStatsListedVersusSold, $('#listedVersusSold'));
			}
		});
		return false;
	}
	
	/** This function displays the mortgage calculator  legacy, now mortgage calculator become the part (tab) of the rpm qualifier
	  *
	  * @param listprice price of the listing
	  * @param tax annual tax on the listing
	  * @param cFees monthly condo fees
	  */
	$.showMortgageCalc = function(listPrice, tax, cFees, listingNumber, tab){
		if(listingInfoAjaxRequest){
			listingInfoAjaxRequest.abort();
		}

		if($("#rpmCalcDialog").length == 0){
			$("body").append("<div id=\"rpmCalcDialog\" title=\"Mortgage Center\" style=\"display:none;\"></div>");
		}
		
		listingInfoAjaxRequest = $.ajax({
			type: "GET",
			url: "listings",
			data: "pathway=6&calculator=true&selectedTabId=" + tab + "&listPrice=" + listPrice + "&propTax=" + tax + "&conFees=" + cFees + "&listingNumber=" + listingNumber,
			error: function(data, error){
				alert("Error: showMortgageCalc(): " + error + " " + data);
			},
			success: function(data){
				if($("#rpmCalcDialog").length > 0){
					$("#rpmCalcDialog").html(data);
					$("#rpmCalcDialog").dialog({
						modal:true,
						zIndex:133,
						width:750,
						//height:600,
						height:"auto",
						position: ["center", "top"],
						open:function(e, ui){
							$(".ui-widget-overlay").bind("click", function(){
								$(".ui-widget-overlay").unbind("click");
								$("#rpmCalcDialog").dialog("close");
							});
						},
						close:function(e, ui){
							$("#rpmCalcDialog").dialog("destroy");
							$(".mortDialog").remove();
						}
					}).parents(".ui-dialog:eq(0)").wrap("<div class=\"mortDialog\"></div>"); 
				}
			}
		});
		return false;
	}
	
	//TODO
	$.showPrintView = function(){
	
	}
	
})();// close ListingDetails