var Site = {
    
    start: function(){
        if($('.neighborhoodMap').length){ Site.neighborhoodMap(); }
        if($('.schoolsMap').length){ Site.schoolsMap(); }
        if($('.lifestyleMap').length){ Site.lifestyleMap(); }
        if($('.listingsMap').length){ Site.listingsMap("all"); }
        if($('.zoningMap').length){ Site.zoningMap(); }
        if($('.fancybox').length){ Site.fancybox(); }
        if($('.sparkline').length || $('.sparkline-small').length){ Site.graph(); }
        if($('.tip').length){ Site.tooltip(); }
        if($('#advanced-search').length){ Site.advancedSearch(); }
        if($('#slideshow').length){ Site.slideshow(); }
        if($('#map_canvas').length){ Site.enlargeLink(); }
        if($('#neighbourhood_navigation li').length){ Site.nav(); }
        if($('#calctable').length){ Site.calc(); }
    },
    
    calc: function(){
        $('input[name^=value]').bind('keyup', Site.recalc);
        Site.recalc();
    },
    
    recalc: function(){
        var value = Number($.trim($('input[name^=value]').val().replace(/,/g,'')));
        if(isNaN(value)){
            $('input[name^=value]').val(0);
            $('#payment').html(0);
            $('#refund').html(0);
        }else{
            var payment = parseFloat(value*0.001125).toFixed(2);
            var refund = parseFloat(payment);
			refund += 150.00;
            refund = parseFloat(refund).toFixed(2);
            $('#payment').html(payment.toLocaleString());
            $('#refund').html(refund.toLocaleString());
        }
    },
    
    nav: function(){
        
        var el, leftPos, newWidth, nav = $("#neighbourhood_navigation");
            
        nav.append('<li id="ml"></li>');

        var ml = $("#ml");

        ml
            .width($(".selected").width())
            .height(nav.height()-20)
            .css("top", 10)
            .css("left", $(".selected a").position().left)
            .data("origLeft", $(".selected a").position().left)
            .data("origWidth", ml.width());

        $("#neighbourhood_navigation li").find("a").hover(function() {
            leftPos = $(this).position().left;
            newWidth = $(this).parent().width();
            ml.stop().animate({
                left: leftPos+"px",
                width: newWidth+"px"
            });
        }, function() {
            ml.stop().animate({
                left: ml.data("origLeft"),
                width: ml.data("origWidth")
            });   
        });
    },
    
    enlargeLink: function(){
        /** $('<span id="enlarge-map" style="clear: both; float: right; cursor: pointer; font-weight: bold">enlarge</span>').appendTo($('#mapside')); **/
		$('<span id="enlarge-map" style="clear: both; float: right; cursor: pointer; font-weight: bold">enlarge</span>').appendTo($('#mapenlarge')); 
        $('#enlarge-map').click(function(){
            $('#mapside').height(570);
            var map = $("#mapside").addClass('largemap');
            $('#enlarge-map').css('display','none');
            $.fancybox({
                'autoDimensions'	: false,
                'autoScale'         : false,
                'width'         	: 802,
                'height'            : 570,
    			'scrolling'         : 'no',
    			'content'           : map,
    			'onCleanup'           : function(){
    			    $('#mapside').height('auto');
    			    map.removeClass('largemap');
    			    map.insertAfter('#text');
    			    $('#enlarge-map').css('display','inline');
    			}
            });
        })
    },
    
    tooltip: function(){
        // create custom animation algorithm for jQuery called "bouncy"
        $.easing.bouncy = function (x, t, b, c, d) {
            var s = 1.70158;
            if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
            return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
        }

        // create custom tooltip effect for jQuery Tooltip
        $.tools.tooltip.addEffect("bouncy",

        	// opening animation
        	function(done) {
        		this.getTip().animate({top: '+=15'}, 500, 'bouncy', done).show();
        	},

        	// closing animation
        	function(done) {
        		this.getTip().animate({top: '-=15'}, 500, 'bouncy', function()  {
        			$(this).hide();
        			done.call();
        		});
        	}
        );
        $(".tip[title]").tooltip({
            effect: 'bouncy'
        });
    },
    
    slideshow: function(){
        $('#slideshow').cycle({
    		fx: 'fade'
    	});
    },
    
    advancedSearch: function(){
        //checkboxes
        $('.checkall').click(function () {
        	$(this).siblings('ul').find(':checkbox').attr('checked', this.checked);
        });
        $('.checkall').siblings('ul').find(':checkbox').click(function(){
            //nearly died trying to get this. Could probably be cleaner (without adding classes to html?)
            if($(this).attr('checked')==false){ $(this).closest('ul').closest('li').find('.checkall').attr('checked',false) }
        })
		
		$("#tip5").fancybox({
				'scrolling'		: 'no',
				'titleShow'		: false,
				'onClosed'		: function() {
					alert('Refresh the map');
				}
			});	 
			
        //search
        var centre_longitude = $('#centre_longitude').text();
        var centre_latitude = $('#centre_latitude').text();
        var city_id = $('#city_id').text();
        var mkrs = [];
        var items = [];
        $('#advanced-search').submit(function(e) {
            e.preventDefault();
            //$('#query').css('display','none');
            $('#search-results').css('display','none');
            $('#search-fail').css('display','none');
			
            $.ajax({
                type: "GET",
            	url: "/data/search-json.php?city_id="+city_id+"&time="+Math.floor(Math.random()*11987909),
            	data: $('#advanced-search').serialize(),
            	dataType: "json",
            	async: false,
            	success: function(json) {
					$('#div_options').css('display','none');
					document.showhide.src = "images/options_dn.gif" ;
					
            	    $.fsoverlay.show('<div style="background: #fff; padding: 20px 40px; border: 1px solid #cacaca; text-align: center"><h3>Searching...</h3><img src="/images/icons/ajax-loader.gif" /></div>',function(){
            	        if($(json).length>0){
            	            $(json).each(function(i) {
                                var marker = $(this);
                                info = '<p><strong>'+marker.attr("street_number")+' '+marker.attr("street_name")+' '+marker.attr("street_type")+' '+marker.attr("street_direction")+'</strong><br />';
                                var suites = marker.attr('suites');
                                if(suites){
                                    $(suites).each(function(){
                                        info += '<ul>';
                                        info+= $(this).attr("suite") != '' ? '<li>#'+$(this).attr("suite")+'</li>' : '';
                                        info+= '<li>Picture: '+$(this).attr('picture')+'</li><li>Category: '+$(this).attr('category')+'</li><li>Style: '+$(this).attr('xstyle')+'</li></ul><hr />'; //<li>Agent: <a href="/'+$(this).attr('directory_agent_name')+'">'+$(this).attr("agent_name")+'</a>,  '+$(this).attr("agent_company")+'</li>
                                    })
                                }
                                info += '</p>';
                                mkrs[i] = {
                                    latitude: marker.attr("latitude"),
                                    longitude: marker.attr("longitude"),
                                    info: info,
                                    icon: {
                                        image: '/images/icons/icon_map_house.png',
                                        iconSize: '32,38'
                                    }
                                };
                            });
                            $.fsoverlay.hide();
                            $('#search-results').css('display','block');
                            $('#advanced-search-map').googleMaps({
                                latitude: centre_latitude,
                                longitude: centre_longitude,
                                depth: 12,
                                markers: mkrs,
                                scroll: false
                            });
                            $.scrollTo($('#search-results'), 800);
                            $("body").css("overflow", "auto");
                            $("#advanced-search-map").css("width", "960px");
                            $("#advanced-search-map").css("height", "600px");
            	        }else{
            	            $.fsoverlay.hide();
                            $("body").css("overflow", "auto");
                            $('#search-fail').css('display','block');
            	        }
            	        
            	    },{ 'bgcolor' : '#ffffff', 'fadein' : 300, 'fadeout' : 300 });
            	}
            });
            if($.query.get('lat') && $.query.get('lng') && $.query.get('address')){
                m = {
                    latitude: $.query.get('lat'),
                    longitude: $.query.get('lng'),
                    info: '<p>'+$.query.get('address')+'</p>'
                };
                mkrs.push(m);
            }
        });
    },
    
    graph: function(){
        $('.sparkline').each(function() {
            if($(this).text() != "Not yet rated"){
                var myvalue = $(this).text().split(",");
                myvalue[1] = 100-myvalue[0];
                $(this).sparkline(myvalue, {type: 'pie', height: 60, sliceColors: ['#6DBF62','#EDEDED']});
                $(this).append();
            };
        });
        $('.sparkline-small').each(function() {
            if($(this).text() != "Not yet rated"){
                var myvalue = $(this).text().split(",");
                myvalue[1] = 100-myvalue[0];
                $(this).sparkline(myvalue, {type: 'pie', height: 30, sliceColors: ['#6DBF62','#EDEDED']});
                $(this).append();
            };
        });
    },
    
    checkAll: function(name) {
        $("input[name="+name+"][type=checkbox]:not([disabled=disabled])").attr('checked', true);
    },
    
    mapAddress: function(){
        var url = location.pathname;
        $('#map_canvas').googleMaps({
            markers: {
                latitude: 	url.lat,
                longitude:  url.lng
            }
        });
    },
    
    fancybox: function(){
        $('a.fancybox').fancybox();
    },
    
    zoningMap: function(){
        var centre_longitude = $('#map_canvas').children('#centre_longitude').text();
        var centre_latitude = $('#map_canvas').children('#centre_latitude').text();
        var neighbourhood_id = $('#map_canvas').children('#neighborhood_id').text();
        var city_id = $('#map_canvas').children('#city_id').text();
        var pts = [];
        var mkrs = [];
        $.ajax({
            type: "GET",
        	url: "/data/zoning-property-taxes-xml.php?city_id="+city_id+"&time="+Math.floor(Math.random()*11987909),
        	dataType: "xml",
        	async: false,
        	success: function(xml) {
                $(xml).find("marker").each(function(i) {
                    var marker = $(this);
                    mkrs[i] = {
                        latitude: marker.attr("lat"),
                        longitude: marker.attr("lng"),
                        info: '<div style="width: 300px"><p><strong>'+marker.attr("project")+'</strong><br />Location: '+marker.attr("location")+'</p><p>'+marker.attr("desc")+'</p><strong>Application Date:</strong> '+marker.attr("applicationdate")+'<br /><strong>Application Status:</strong> '+marker.attr("applicationstatus")+'<br /><br />View Zoning information in <a href="'+marker.attr("url")+'">'+marker.attr("neighborhood")+'</a>',
                        icon: {
                            image: marker.attr("icon"),
                            iconSize: '38,35'
                        }
                    };
                });
        	}
        });
        if($.query.get('lat') && $.query.get('lng') && $.query.get('address')){
            m = {
                latitude: $.query.get('lat'),
                longitude: $.query.get('lng'),
                info: '<p>'+$.query.get('address')+'</p>'
            };
            mkrs.push(m);
        }
        $.ajax({
            type: "GET",
        	url: "/data/xml-nboundaries.php?neighborhood_id="+neighbourhood_id+"&time="+Math.floor(Math.random()*11987909),
        	dataType: "xml",
        	async: false,
        	success: function(xml) { 
                $(xml).find("point").each(function(i) {
                    var point = $(this);
                    pts[i] = {
                        latitude: point.attr("latitude"),
                        longitude: point.attr("longitude")
                    };
                });
        	}
        });
        $('#map_canvas').googleMaps({
            latitude: centre_latitude,
            longitude: centre_longitude,
            polyline: {
                points: pts,
                color: '#ff0000',
                pixels: 5
            },
            markers: mkrs,
            scroll: false
        });
    },
    
    schoolsMap: function(){
        var centre_longitude = $('#map_canvas').children('#centre_longitude').text();
        var centre_latitude = $('#map_canvas').children('#centre_latitude').text();
        var neighbourhood_id = $('#map_canvas').children('#neighborhood_id').text();
        var city_id = $('#map_canvas').children('#city_id').text();
        var pts = [];
        var mkrs = [];
        $.ajax({
            type: "GET",
        	url: "/data/schools-xml.php?city_id="+city_id+"&time="+Math.floor(Math.random()*11987909),
        	dataType: "xml",
        	async: false,
        	success: function(xml) {
                $(xml).find("marker").each(function(i) {
                    var marker = $(this);
                    mkrs[i] = {
                        latitude: marker.attr("lat"),
                        longitude: marker.attr("lng"),
                        info: '<div id="gmap"><strong>'+marker.attr("name")+'</strong><br />'+marker.attr("address")+'<br />'+marker.attr("city")+', '+marker.attr("province")+' '+marker.attr("postal")+'<br />'+marker.attr("phone")+'<br /><a href="'+marker.attr("website")+'" target=_blank>'+marker.attr("website")+'</a><br />View Schools in <a href="/'+ marker.attr("directorytownname") +'/' + marker.attr("directoryneighborhoodname") +'/schools" >'+ marker.attr("neighborhood") + '</a></div>' ,
                        icon: {
                            image: marker.attr("icon"),
                            iconSize: '38,35'
                        }
                    };
                });
        	}
        });
        if($.query.get('lat') && $.query.get('lng') && $.query.get('address')){
            m = {
                latitude: $.query.get('lat'),
                longitude: $.query.get('lng'),
                info: '<p>'+$.query.get('address')+'</p>'
            };
            mkrs.push(m);
        }
        $.ajax({
            type: "GET",
        	url: "/data/xml-nboundaries.php?neighborhood_id="+neighbourhood_id+"&time="+Math.floor(Math.random()*11987909),
        	dataType: "xml",
        	async: false,
        	success: function(xml) { 
                $(xml).find("point").each(function(i) {
                    var point = $(this);
                    pts[i] = {
                        latitude: point.attr("latitude"),
                        longitude: point.attr("longitude")
                    };
                });
        	}
        });
        $('#map_canvas').googleMaps({
            latitude: centre_latitude,
            longitude: centre_longitude,
            markers: mkrs,
            polyline: {
                points: pts,
                color: '#ff0000',
                pixels: 5
            },
            scroll: false
        });
    },
    
    listingsMap: function(category){
        $("#get-attached").click(function(){
            Site.listingsMap("Attached");
        })
        $("#get-semidetached").click(function(){
            Site.listingsMap("Semi Detached");
        })
        $("#get-house").click(function(){
            Site.listingsMap("House");
        })

        var centre_longitude = $('#map_coordinates').children('#centre_longitude').text();
        var centre_latitude = $('#map_coordinates').children('#centre_latitude').text();
        var neighbourhood_id = $('#map_coordinates').children('#neighborhood_id').text();
        var city_id = $('#map_canvas').children('#city_id').text();
        var pts = [];
        var mkrs = [];
        $.ajax({
            type: "GET",
        	url: "/data/listings-json.php?neighbourhood_id="+neighbourhood_id+"&category="+category+"&time="+Math.floor(Math.random()*11987909),
        	dataType: "json",
        	async: false,
        	success: function(json) {
        	    if($(json).length>0){
    	            $(json).each(function(i) {
                        var marker = $(this);
                        info = "<div style=\"width: 300px\">";
                    info += $(this).attr("picture") != '' ? '<img src="/images/listings/'+$(this).attr("picture")+'" style="float: left; margin: 0 10px 5px 0" />' : '';
                        info += '<p><strong>'+marker.attr("street_number")+' '+marker.attr("street_name")+' '+marker.attr("street_type")+' '+marker.attr("street_direction")+'</strong><br />';
                        var suites = marker.attr('suites');
                        if(suites){
                            $(suites).each(function(){
								link_val =  marker.attr('link'); ;
								
								if( link_val == null ) {
									link = '';
								}
								else{
									link = '<li>Link: <a href="'+ link_val + '">' + link_val + '</a></li>';	
								}
								
                                info += '<ul>';
                                info+= $(this).attr("suite") != '' ? '<li>#'+$(this).attr("suite")+'</li>' : '';
                                info+= '<li>Category: '+$(this).attr('category')+'</li><li>Style: '+$(this).attr('xstyle')+'</li>';
								//info += '<li>Agent: <a href="/'+$(this).attr('directory_agent_name')+'">'+$(this).attr("agent_name")+'</a>,  '+$(this).attr("agent_company")+'</li>';
								info += link + '</ul><hr />';
                                icon = "";
                                if($(this).attr('category')=="Attached"){ icon = "blue"; }else if($(this).attr('category')=="Semi Detached"){ icon = "green"; }else{ icon = "red"; }
                            })
                        }
                        info += '</p></div>';
                        mkrs[i] = {
                            latitude: marker.attr("latitude"),
                            longitude: marker.attr("longitude"),
                            info: info,
                            icon: {
                                image: '/images/icons/'+icon+'.png',
                                iconSize: '32,38'
                            }
                        };
                    });
    	        }else{
    	            $.fsoverlay.hide();
                    $("body").css("overflow", "auto");
                    $('#search-fail').css('display','block');
    	        }
        	}
        });
        
        if($.query.get('lat') && $.query.get('lng') && $.query.get('address')){
            m = {
                latitude: $.query.get('lat'),
                longitude: $.query.get('lng'),
                info: '<p>'+$.query.get('address')+'</p>'
            };
            mkrs.push(m);
        }
        $.ajax({
            type: "GET",
        	url: "/data/xml-nboundaries.php?neighborhood_id="+neighbourhood_id+"&time="+Math.floor(Math.random()*11987909),
        	dataType: "xml",
        	async: false,
        	success: function(xml) { 
                $(xml).find("point").each(function(i) {
                    var point = $(this);
                    pts[i] = {
                        latitude: point.attr("latitude"),
                        longitude: point.attr("longitude")
                    };
                });
        	}
        });
        $('#map_canvas').googleMaps({
            latitude: centre_latitude,
            longitude: centre_longitude,
            markers: mkrs,
            polyline: {
                points: pts,
                color: '#ff0000',
                pixels: 5
            },
            scroll: false
        });
    },
    
    lifestyleMap: function(){
        var centre_longitude = $('#map_canvas').children('#centre_longitude').text();
        var centre_latitude = $('#map_canvas').children('#centre_latitude').text();
        var neighbourhood_id = $('#map_canvas').children('#neighborhood_id').text();
        var city_id = $('#map_canvas').children('#city_id').text();
        var pts = [];
        var mkrs = [];
        if($.query.get('lat') && $.query.get('lng') && $.query.get('address')){
            m = {
                latitude: $.query.get('lat'),
                longitude: $.query.get('lng'),
                info: '<p>'+$.query.get('address')+'</p>'
            };
            mkrs.push(m);
        }
        $.ajax({
            type: "GET",
        	url: "/data/xml-nboundaries.php?neighborhood_id="+neighbourhood_id+"&time="+Math.floor(Math.random()*11987909),
        	dataType: "xml",
        	async: true,
        	success: function(xml) { 
                $(xml).find("point").each(function(i) {
                    var point = $(this);
                    pts[i] = {
                        latitude: point.attr("latitude"),
                        longitude: point.attr("longitude")
                    };
                });
                $('#map_canvas').googleMaps({
                    latitude: centre_latitude,
                    longitude: centre_longitude,
                    layer: 'org.wikipedia.en',
                    polyline: {
                        points: pts,
                        color: '#ff0000',
                        pixels: 5
                    },
                    scroll: false,
                    feed: "http://api.flickr.com/services/feeds/geo/?g=34427469219@N01&lang=en-us&format=rss_200"
                });
        	}
        });
    },
    
    neighborhoodMap: function(){
        var centre_longitude = $('#map_canvas').children('#centre_longitude').text();
        var centre_latitude = $('#map_canvas').children('#centre_latitude').text();
        var neighbourhood_id = $('#map_canvas').children('#neighborhood_id').text();
        var pts = [];
        $.ajax({
            type: "GET",
        	url: "/data/xml-nboundaries.php?neighborhood_id="+neighbourhood_id+"&time="+Math.floor(Math.random()*11987909),
        	dataType: "xml",
        	async: false,
        	success: function(xml) {
                $(xml).find("point").each(function(i) {
                    var point = $(this);
                    pts[i] = {
                        latitude: point.attr("latitude"),
                        longitude: point.attr("longitude")
                    };
                    
                });
        	}
        });
        if($.query.get('lat') && $.query.get('lng') && $.query.get('address')){
            $('#map_canvas').googleMaps({
                latitude: centre_latitude,
                longitude: centre_longitude,
                markers: {
                    latitude: $.query.get('lat'),
                    longitude: $.query.get('lng'),
                    info: '<p>'+$.query.get('address')+'</p>',
                    icon: {
                        image: '/images/icons/icon_map_house.png',
                        iconSize: '32,38'
                    }
                },
                polyline: {
                    points: pts,
                    color: '#ff0000',
                    pixels: 5
                }
            });
        }else{
            $('#map_canvas').googleMaps({
                latitude: centre_latitude,
                longitude: centre_longitude,
                polyline: {
                    points: pts,
                    color: '#ff0000',
                    pixels: 5
                },
                scroll: false
            });
        }
    }
}

$(document).ready(function() { 
    Site.start();
});

if($.googleMaps){
    $.googleMaps.mapPolyLine = function(options){

        var points = options.points;
        var pts = [];
        for (i=0; i<points.length; i++) {
    	    pts[i] = $.googleMaps.mapLatLong(points[i].latitude, points[i].longitude);
    	}

    	return new GPolyline(
    	    pts, 
    		options.color, 
    		options.pixels
    	);

    }

    $.googleMaps.mapMarkersOptions = function(icon) {
    	//Define an icon
    	var gIcon = new GIcon(G_DEFAULT_ICON);	
    	if ( icon.image ) 
    		// Define Icons Image
    		gIcon.image = icon.image;
    	if ( icon.shadow )
    		// Define Icons Shadow
    		gIcon.shadow = icon.shadow;
    	if ( icon.iconSize )
    		// Define Icons Size
    		var arr = icon.iconSize.split(',')
    		gIcon.iconSize = new GSize(arr[0],arr[1]);
    	if ( icon.shadowSize )
    		// Define Icons Shadow Size
    		gIcon.shadowSize = new GSize(icon.shadowSize);
    	if ( icon.iconAnchor )
    		// Define Icons Anchor
    		gIcon.iconAnchor = new GPoint(icon.iconAnchor);
    	if ( icon.infoWindowAnchor )
    		// Define Icons Info Window Anchor
    		gIcon.infoWindowAnchor = new GPoint(icon.infoWindowAnchor);
    	if ( icon.dragCrossImage ) 
    		// Define Drag Cross Icon Image
    		gIcon.dragCrossImage = icon.dragCrossImage;
    	if ( icon.dragCrossSize )
    		// Define Drag Cross Icon Size
    		gIcon.dragCrossSize = new GSize(icon.dragCrossSize);
    	if ( icon.dragCrossAnchor )
    		// Define Drag Cross Icon Anchor
    		gIcon.dragCrossAnchor = new GPoint(icon.dragCrossAnchor);
    	if ( icon.maxHeight )
    		// Define Icons Max Height
    		gIcon.maxHeight = icon.maxHeight;
    	if ( icon.PrintImage )
    		// Define Print Image
    		gIcon.PrintImage = icon.PrintImage;
    	if ( icon.mozPrintImage )
    		// Define Moz Print Image
    		gIcon.mozPrintImage = icon.mozPrintImage;
    	if ( icon.PrintShadow )
    		// Define Print Shadow
    		gIcon.PrintShadow = icon.PrintShadow;
    	if ( icon.transparent )
    		// Define Transparent
    		gIcon.transparent = icon.transparent;
    	return gIcon;
    }

    $.googleMaps.mapMarkers = function(center, markers){
        if(typeof(markers.length) == 'undefined'){
        	markers = [markers];
    	}
    	var j = 0;
    	for ( i = 0; i<markers.length; i++) {
    		var gIcon = null;
    		if(markers[i].icon){
    			gIcon = $.googleMaps.mapMarkersOptions(markers[i].icon);
    		}

    		if ( markers[i].geocode ) {
    			var geocoder = new GClientGeocoder();
    			geocoder.getLatLng(markers[i].geocode, function(center) {										
    				if (!center) 
    					alert(address + " not found");
    				else 
    					$.googleMaps.marker[i] = new GMarker(center, {draggable: markers[i].draggable, icon: gIcon});
    			});
    		} else if ( markers[i].latitude && markers[i].longitude ) {
    			// Latitude & Longitude Center Point
    			center = $.googleMaps.mapLatLong(markers[i].latitude, markers[i].longitude);
    			$.googleMaps.marker[i] = new GMarker(center, {draggable: markers[i].draggable, icon: gIcon});
    		}
    		$.googleMaps.gMap.addOverlay($.googleMaps.marker[i]);
    		if ( markers[i].info ) {
    			$.googleMaps.marker[i].bindInfoWindowHtml(markers[i].info.toString(),{maxWidth:240});
    		}
    	}
    }
}

