var todaysDate = new Date();
var currentMonth = todaysDate.getMonth();
var currentYear = todaysDate.getFullYear();

var clearDiv = "<div class='clear'>&nbsp;</div>";


var isiPad = navigator.userAgent.match(/iPad/i) != null;

if((navigator.userAgent.match(/iPhone/i))||(navigator.userAgent.match(/iPod/i))){

}



$(document).ready(function() {
    bindMainClickEvent();
    Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoadedHandler);
    //initMisc($(document));
});

function bindMainClickEvent() {
    // main click event handler
    $(document).bind("click", function(e) {

        var targetElement = $(e.target);

        if (targetElement.is("#mapcontainer area") || targetElement.is("#mapcontainer div.provincebutton") || targetElement.parent().is("#mapcontainer div.provincebutton")) {

            // map lightbox populate/show

            var clonedUl;
            var clonedH3;
            var closeButton = "<div class='closebutton'>X</div>";

            if (targetElement.is("area")) {
                clonedUl = $(targetElement.attr("href")).find("ul").clone();
                clonedH3 = $(targetElement.attr("href")).find("h3").clone();
            } else if (targetElement.is("#mapcontainer div.provincebutton")) {
                clonedUl = targetElement.find("ul").clone();
                clonedH3 = targetElement.find("h3").clone();
            } else {
                clonedUl = targetElement.siblings("ul").clone();
                clonedH3 = targetElement.parent().find("h3").clone();
            }
            $("#maplightbox").html("");
            $("#maplightbox").append(closeButton, clonedH3, clonedUl)
            $("#maplightbox").show();
            $("div.modal:visible").hide();
            return false;
        } else if (targetElement.parent().is("#maplightbox") || targetElement.is("#maplightbox")) {

            // hide

            hideFloaters();
        } else if (targetElement.is("div.slide")) {

            // navigate to the slide url

            window.location = targetElement.attr("url");
        } else if (targetElement.parent().is("div.slide")) {

            // navigate to the slide url

            window.location = targetElement.parent().attr("url");
        } else if (targetElement.parent().is(".assetimagethumb a")) {

            // change main asset image

            $(".assetimagethumb").removeClass("active");
            targetElement.parent().parent().addClass("active");
            var imageURL = targetElement.parent().attr("href");
            loadImage(imageURL, "#mainimage");
            hideFloaters();
            return false;
        } else if (targetElement.is("#assetslidertabs div.tab a")) {

            // hides / shows sliders with tab clicks tabs

            $("#sliderone, #slidertwo").hide();
            $("#assetslidertabs div.tab.active").removeClass("active");
            targetElement.parent().addClass("active");
            var tabShow = targetElement.attr("href");
            $(tabShow).show(0, function() {
                $(".propertyslider").imageslider({
                    viewLength: 3
                });
            });
            hideFloaters();
            return false;
        } else if (targetElement.is("#tabcontainer div.tab a")) {

            // hides / shows panels with tab clicks tabs

            $("#images, #googlemap, #video, #virtualtour, #documents").hide();
            $("#tabcontainer div.tab.active").removeClass("active");
            targetElement.parent().addClass("active");
            var tabShow = targetElement.attr("href");
            $(tabShow).show();
            if (tabShow = "#googlemap") {
                createGoogleMap("#googlemapcontainer");
            }
            hideFloaters();
            return false;
        } else if (targetElement.is("a.signinbutton")) {

            // show modal specified in href

            showModal(targetElement.attr("href"))
            return false;
        } else if (targetElement.is("a.withmodal") || targetElement.parents().hasClass("withmodal")) {

            // show modal specified in href

            showModal(targetElement.attr("href") || targetElement.parents(".withmodal").attr("href"))
            return false;
        } else if (targetElement.is("#getstreetview")) {


        } else if (targetElement.is("div#dates p.highlighted")) {

            // calendar clicks

            var eventId = targetElement.attr("eventid");

            $("#eventList li a").each(function() {

                var spanId = $(this).find("span.eventid").text();

                if (spanId == eventId) {
                    eval($(this).attr("href"))
                }
            });



            hideFloaters();
        } else if (targetElement.is("a.readmore") || targetElement.parent().is("a.readmore")) {

            // shows extra content

            targetElement.parents(".toggleelements").find(".notshown").toggle();
            hideFloaters();
            return false;
        } else if (targetElement.is("div.days a.nextpreviousmonth")) {

            // generates calendars on next/previous button clicks

            if (targetElement.is("#nextmonth")) {
                currentMonth += 1;
                if (currentMonth >= 12) {
                    currentMonth = 0
                    currentYear = currentYear + 1
                }
                $("div#dates").calendar({
                    month: currentMonth,
                    year: currentYear,
                    clearElement: clearDiv,
                    onComplete: calendarComplete,
                    weeks: 6
                });
            } else {
                currentMonth -= 1;
                if (currentMonth <= -1) {
                    currentYear = currentYear - 1
                    currentMonth = 11;
                }

                $("div#dates").calendar({
                    month: currentMonth,
                    year: currentYear,
                    clearElement: clearDiv,
                    onComplete: calendarComplete,
                    weeks: 6
                });
            }
            hideFloaters();
            return false;
        } else if (targetElement.is("a.forgottenpassword")) {

            // shows the forgotten password fields

            targetElement.parents(".inputcontainer").find(".forgottenpasswordfield").toggle();
            return false;
        } else if (targetElement.is(".modal div.closebutton")) {

            // closes the modal popup

            targetElement.parents(".modal").hide();
        } else if (targetElement.parents("#googlemapthumbnail").length >= 1 || targetElement.is("#googlemapthumbnail")) {

            // shows a gmap modal

            $("#mapdirections").hide();
            showModal("ThisMapModalsID", false)
			$("#googlemapcontainer").attr("title", targetElement.attr("title") || targetElement.parents("#googlemapthumbnail").attr("title"))
            createGoogleMap("#googlemapcontainer")
            return false;
        } else if (targetElement.is("a.pageprint")) {

            // prints the specified print region

            window.print();
			return false;

        } else if (targetElement.parents().is(".modal")) {

            // dont hide yourself...

        } else if (targetElement.parents(".gmapthumb").length >= 1 || targetElement.is(".gmapthumb")) {

            // shows a gmap modal on the contact page

            $("#mapdirections").hide();

            showModal("ThisMapModalsID", false)
            $("#googlemapcontainer").attr("title", targetElement.attr("title") || targetElement.parents(".gmapthumb").attr("title"))
            createGoogleMap("#googlemapcontainer")
            return false;
        } else if (targetElement.is(".clientBack")) {

            history.back(-1);
            return false;

        } else if (targetElement.is(".registerform .submitbutton")) {
            
            //hide register form submit button on submit

            $(targetElement).css("display", "none");
            $("#imgRegisterSpinner").css("display", "inline");
		} else if(targetElement.is("h2.expanderheading")) {
			//$("h2.expanderheading").removeclass("opened");
			targetElement.toggleClass("opened")
			targetElement.parents("div.expander").find(".notshown").slideToggle();
        } else {

            // hide elements

            hideFloaters();
        }
    });
}

function initMisc(context)
{
	
	

    ///////////////////////////////////////////
    //START EVENT REGISTRATION MODAL HANDLERS//
    ///////////////////////////////////////////

    $(".btnEventRegisterSubmit", context).live('click', function() {
        $(".btnEventRegisterSubmit").hide();
        $(".imgEventRegisterSpinner").show();
        $(".pEventRegisterSending").show();
    });

    /////////////////////////////////////////
    //END EVENT REGISTRATION MODAL HANDLERS//
    /////////////////////////////////////////

	///////////////////////////////////////////////
	
	// init swap text fields
    $(".swaptextbox", context).live("focus", function() {
		if ($(this).hasClass("error")) {
			$(this).removeClass("error");
			$(this).val("");
		}
        if ($(this).val() == $(this).attr("title")) {
            $(this).val("");
        }
    });

    $(".swaptextbox", context).live("blur", function() {
        if ($(this).val() == "") {
            $(this).val($(this).attr("title"));
        }
    });

    $('.password-password', context).hide();

    $('.password-clear', context).live("focus", function() {
        $(this).hide();
        $(this).removeClass("error");
        $(this).next('.password-password').show().focus();
    });

    $('.password-password', context).live("blur", function() {
        if ($(this).val() == '') {
            $(this).prev('.password-clear').show();
            $(this).hide();
        }
    });
	////////////////////
	
	// truncate content section paragraphs

    $(".contentsection p", context).jTruncate({
		moreText: "Read more",  
        lessText: "Read less"
	});
	
	/////////////////////////////////
	
	// replaces select boxes with custom elements
	$("select", context).dropdown();
	/////////////////////////////////////////////
	
	// slider control
	$(".propertyslider", context).imageslider({
		viewLength:3
	});
	$("#assetimageslider", context).imageslider({
		viewLength:6
	});
	/////////////////
	
	// slideshow control
	$('#slideshow .slideshowmask', context).cycle({ 
		fx:     'fade', 
		timeout: 7500,
		pager: '#featurebuttons'
	});
	///////////////////
	
	// calendar control
	$("div#dates", context).calendar({
		month: currentMonth,
		year: currentYear,
		clearElement: clearDiv,
		onComplete: calendarComplete,
		weeks: 6
	});
	//////////////////
	
	// ui slider controls
	$(".slidercontainer .sliderelement", context).each(function() {
	    var initialValue = $(this).parents(".slidercontainer").find("input").val();
	    $(this).slider({
	        min: 0,
	        max: 4,
	        step: 1,
	        value: initialValue,
	        slide: function(event, ui) {
	            var targetSlider = $(event.target);
	            var parentElement = targetSlider.parents(".slidercontainer");
	            parentElement.find("input").val(ui.value);
	        }
	    });
	});
	///////////////////////////
	
	
	//I hate this function being so unclean.
	if($("div.mapbackground").length>0) {
		$(".provincebutton").each(function() {
			var elementId = $(this).attr("id");
			$(this).hover(function(){
				$("#mapcontainer area").each(function(){
					var href = $(this).attr("href").replace("#","")
					if (href==elementId) {
						$(this).mouseover();
						return;
					}
				});
			},function(){
				$("#mapcontainer area").mouseout();
			});
		});
		
		var lppos = "-330px";
		var nwpos = "-660px";
		var ncpos = "-990px";
		var fspos = "-1320px";
		var gtpos = "-1650px";
		var mppos = "-1980px";
		var wcpos = "-2310px";
		var ecpos = "-2640px";
		var knpos = "-2970px";
		
		$("area#lpshape").hover(function(){
			$(".mapbackground").css("background-position", "0 " + lppos);
		},
		function(){
			$(".mapbackground").css("background-position", "0 0");
		});
		
		$("area#nwshape").hover(function(){
			$(".mapbackground").css("background-position", "0 " + nwpos);
		},
		function(){
			$(".mapbackground").css("background-position", "0 0");
		});
		
		$("area#ncshape").hover(function(){
			$(".mapbackground").css("background-position", "0 " + ncpos);
		},
		function(){
			$(".mapbackground").css("background-position", "0 0");
		});
		
		$("area#fsshape").hover(function(){
			$(".mapbackground").css("background-position", "0 " + fspos);
		},
		function(){
			$(".mapbackground").css("background-position", "0 0");
		});
		
		$("area#gtshape").hover(function(){
			$(".mapbackground").css("background-position", "0 " + gtpos);
		},
		function(){
			$(".mapbackground").css("background-position", "0 0");
		});
		
		$("area#mpshape").hover(function(){
			$(".mapbackground").css("background-position", "0 " + mppos);
		},
		function(){
			$(".mapbackground").css("background-position", "0 0");
		});
		
		$("area#wcshape").hover(function(){
			$(".mapbackground").css("background-position", "0 " + wcpos);
		},
		function(){
			$(".mapbackground").css("background-position", "0 0");
		});
		
		$("area#ecshape").hover(function(){
			$(".mapbackground").css("background-position", "0 " + ecpos);
		},
		function(){
			$(".mapbackground").css("background-position", "0 0");
		});
		$("area#knshape").hover(function(){
			$(".mapbackground").css("background-position", "0 " + knpos);
		},
		function(){
			$(".mapbackground").css("background-position", "0 0");
		});
	}
	
}


//////////////////////////////////////////////////////////////////////////////////////////////////
//////////// closes open select boxes and map tooltips
//////////////////////////////////////////////////////////////////////////////////////////////////

function hideFloaters() {
	
	$("div.modal:visible").hide();
	$("div#maplightbox").hide();
	
}

//////////////////////////////////////////////////////////////////////////////////////////////////
//////////// calls helper functions for tooltips & event population - called when the calendar is finished rendering
//////////////////////////////////////////////////////////////////////////////////////////////////

function calendarComplete(month, year) {
	$("#monthname").text(Date.monthNames[month] + " " + year);
	highlightDays(month, year);
	$("div#dates p.highlighted").tooltip({
		offset: 3,
		beforeShowTooltip: populateTooltip,
		contentElement: "#tooltipcontent"
	});
}

//////////////////////////////////////////////////////////////////////////////////////////////////
//////////// creates the tooltips for the calendar event days on hover
//////////////////////////////////////////////////////////////////////////////////////////////////

function populateTooltip(obj) {
	$("#tooltipcontent").show();
	$("#tooltipcontent .tooltipcenter").html(" ")
	
	var tooltipDate = obj.text();
	
	$("ul#eventList li a").each(processDay)
	
	function processDay() {
		
		var dateText = $(this).find("p.date").text();
		var monthArray = dateText.split(" ");
		var dayToHighlight = monthArray[0];
		
		if (tooltipDate == dayToHighlight && monthArray[1] == Date.monthNames[currentMonth]) {
			if ($("#tooltipcontent .tooltipcenter #toolitipheader").length >= 1) {
				// do nothing since the heading exists
			} else {
				$("#tooltipcontent .tooltipcenter").append("<p id='toolitipheader'>"+tooltipDate+ " " +monthArray[1]+"</p>", clearDiv)
			}
			var childElements = $(this).children("p").not("p.date").clone();
			$("#tooltipcontent .tooltipcenter").append(childElements, clearDiv)
			if ($(this).is("ul#eventList li:last"))
			{
				$("#tooltipcontent .tooltipcenter p:last").addClass("last-item");
			}
		}
	}
}

//////////////////////////////////////////////////////////////////////////////////////////////////
//////////// processes the eventlist and populates the calendar with events
//////////////////////////////////////////////////////////////////////////////////////////////////

function highlightDays(month, year) {
	
	$("ul#eventList li a").each(processDay)
	
	function processDay() {
		
		var dateText = $(this).find("p.date").text();
		
		var monthArray = dateText.split(" ");
		var dayToHighlight = monthArray[0];
		var monthName = monthArray[1];
		var yearText = monthArray[2];
		
		if (Date.monthNames[month] == monthName && yearText == year) {
			var dayElement = $("div#dates p.current-month:eq("+(dayToHighlight-1)+")");
	
			var eventID = $(this).find("span.eventid").text();
			
			dayElement.addClass("highlighted").attr("eventid",eventID);
		}
	}
}

//////////////////////////////////////////////////////////////////////////////////////////////////
//////////// image loading for asset gallery with loading image
//////////////////////////////////////////////////////////////////////////////////////////////////

function loadImage(url, container) {
	$(container).html("<img src='images/img-loadinganimation.gif' width='32' height='32' id='loadinganimation'/>")
	
	var objImagePreloader = new Image();
	objImagePreloader.onload = function() {

	    $(container).html("<img src=" + url + " />");
	    objImagePreloader.onload = function() { };
	};
	objImagePreloader.src = url;
}

//////////////////////////////////////////////////////////////////////////////////////////////////
//////////// google maps create - with street view & directions
//////////////////////////////////////////////////////////////////////////////////////////////////

var gmap;
var directionDisplay;
var directionsService = new google.maps.DirectionsService();

function createGoogleMap(element, isthumbnail) 
{
	
	var panorama;
	
	$("#mapdirections").html("");
	
	var coords = $(element).attr("title").split(",");
	var latlng = new google.maps.LatLng(coords[0], coords[1])
	
	var normalMapOptions = {
		zoom: 15,
		center: latlng,
		mapTypeControl: false,
		mapTypeId: google.maps.MapTypeId.ROADMAP
    };
	
	var thumbMapOptions = {
		zoom: 15,
		center: latlng,
		draggable: false,
		disableDoubleClickZoom: true,
		scrollwheel: false,
		disableDefaultUI: true,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	}
	
	var mapOptions;
	
	// check if the map is suppose to be a thumbnail
	isthumbnail ? mapOptions = thumbMapOptions : mapOptions = normalMapOptions;

	gmap = new google.maps.Map(document.getElementById($(element).attr("id")), mapOptions);
	
	var marker = new google.maps.Marker({
		position: latlng, 
		map: gmap,
		clickable: false
	});
	 
	// bind event handler to getdirections button & init the directions service if the button exists on the page
	
	if($("#getdirections").length > 0 && isthumbnail == undefined) {
		directionsDisplay = new google.maps.DirectionsRenderer();
		directionsDisplay.setMap(gmap);	
		directionsDisplay.setPanel(document.getElementById("mapdirections"));
		$("#getdirections").bind("click", function() {
			$("#mapdirections").show();
			
			calcRoute();
			return false;
		});
	}

	function calcRoute() {
		var start = document.getElementById("fromlocation").value;
		var end = latlng;
		var request = {
			origin:start, 
			destination:end,
			travelMode: google.maps.DirectionsTravelMode.DRIVING
		};
		directionsService.route(request, function(result, status) {
			if (status == google.maps.DirectionsStatus.OK) {
				directionsDisplay.setDirections(result);
			}
		});
	}
	
	if ($("#getstreetview").length>= 1 && isthumbnail == undefined) {
		
		$("#getstreetview").val("Enable Street View");
		
		panorama = gmap.getStreetView();
		panorama.setPosition(latlng);
		panorama.setPov({
		  heading: 0,
		  zoom:1,
		  pitch:0
		});
		panorama.setVisible(false);
		
		$("#getstreetview").bind("click", function() {
			toggleStreetView()
			return false;
		});
		
		google.maps.event.addListener(panorama, 'visible_changed', function() {			
			var toggle = panorama.getVisible();
			if (toggle == false) {
				$("#getstreetview").val("Disable Street View")
			} else {
				$("#getstreetview").val("Enable Street View")
			}
		});
		
/*		google.maps.event.addListener(panorama, 'position_changed', function() {
			
			
			var currentCoords=latlng;
			var newCoords=panorama.getPosition();		
			
			var x1 = currentCoords.lat();
			var y1 = currentCoords.lng();
			
			var x2 = newCoords.lat();
			var y2 = newCoords.lng();
			
			
			
			var mag = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
			var sine = (y2 - y1) / mag;
			var cosine = (x2 - x1) / mag;
			
			console.log(mag);
			console.log(sine);
			console.log(cosine);
			
		});
*/	}
	
	function toggleStreetView() {
		var toggle = panorama.getVisible();
		if (toggle == false) {
			panorama.setVisible(true);
			$("#getstreetview").val("Disable Street View")
		} else {
			panorama.setVisible(false);
			$("#getstreetview").val("Enable Street View")
		}
	}
	
	
	 
	
}

//////////////////////////////////////////////////////////////////////////////////////////////////
//////////// flash video player 'constructor'
//////////////////////////////////////////////////////////////////////////////////////////////////

function VideoPlayer(container, width, height, backgroundImage, videourl) {
    $(container).media({
        width:width,
        height:height,   
        src: '/flash/VideoPlayer.swf',
        bgColor: "none",
        bgImage: backgroundImage,
        flashvars:{
            videoURL:videourl, 
            vWidth:width,
            vHeight:height
        },
        params: {
            wmode: "transparent"
        }
    });
}

//////////////////////////////////////////////////////////////////////////////////////////////////
//////////// Modal visibility/positioning
//////////////////////////////////////////////////////////////////////////////////////////////////

//$(window).resize(centerModal);



function centerModal(modalvar)
{
	var modal=$(modalvar)
	
	var height=modal.find(".modal-content").outerHeight();
	modal.find(".modal-center").css("height", height);
	
	var modalHeight=modal.height();
	var windowHeight=$(window).height();
	var windowScroll=$(window).scrollTop();
	var top = ((windowHeight-modalHeight)/2) + windowScroll;
	
	var modalWidth=modal.width();
	var windowWidth=$(window).width();
	
	var left=((windowWidth-modalWidth)/2)
	
	modal.css({"top":top, "left":left})
}







function hideModalReady(modalID) {
	$("#" + modalID).hide();
}

function requestModal(modalID) {
    showModal(modalID, true);
}

function showModalReady(modalID) {
    $("#" + modalID).show();
	centerModal("#"+modalID);
}

function showModal(modalID, dontWaitForCallback) {

    if (modalID) {
        var modal = $("#" + modalID);
        if (modal.attr("showCallBackId")) {
            $("#" + modal.attr("showCallBackId")).val("showModalReady('" + modalID + "')");
            if (modal.attr("hideCallBackId")) {
                $("#" + modal.attr("hideCallBackId")).val("hideModalReady('" + modalID + "')");
            }
            if (dontWaitForCallback) {
                showModalReady(modalID);
		
            }
			centerModal("#"+modalID);
        } else {
            modal.show();
			centerModal("#"+modalID);
        }
    }
}

function hideModal() {
	$(".modal").hide();
}

function pageLoadedHandler(sender, args) {
    var updatedPanels = args.get_panelsUpdated();
    for (i = 0; i < updatedPanels.length; i++) {
        initMisc($("#" + updatedPanels[i].id));
    }
}
