﻿/// <reference path="jquery-1.7.1-vsdoc.js" />
/// <reference path="jquery.tmpl.js" />

var handleSendEmail = function () { };
var handleGMap = function () { };
var site = { summary: [], gdata: [{ gps: { Zoom: 0, Latitude: 0, Longitude: 0 }, title: "", html: "", icon: ""}] };

String.prototype.Encode = function () {
    if (this === null) throw new TypeError();
    return this.replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A');
}

$(document).ready(function () {

    $.template("opt", '<option>${$item.data}</option>');

    var register = $("#register");
    if (register.is('form')) {
        register.submit(function () {
            var n = $("#Name").val();
            var e = $("#Email").val();
            var p = $("#Telephone").removeAttr("name").val();
            var t = $("#RequestType").removeAttr("name").val();
            var m = $("#Message").val();
            $("#Body").val($("#tbody").tmpl({ n: n, e: e, p: p, t: t, m: m }).text());
        });
    }

    //home filter functionality
    var shfilter = $("#shfilter");
    if (shfilter.is('form')) {
        site.fields = {
            m: $("input[name=m]"), //Market
            t: $("#t"), //Property Type
            d: $("#d") //Location
        };

        var g = function (n) {
            $.ajax(
            {
                url: "/odata.svc/" + n.toUpperCase(),
                data: {
                    m: "'" + site.fields.m.filter(":checked").val().Encode() + "'",
                    t: "'" + site.fields.t.val().Encode() + "'"
                },
                headers: { accept: 'application/json' },
                success: function (data) {
                    var t = site.fields[n];
                    t.find("option[value!='']").remove();
                    $.tmpl("opt", data.d).appendTo(t);
                    t.change();
                }
            }
            );
        }
        site.fields.t.change(function () { g("d"); });
        site.fields.m.change(function () { g("t"); }).filter(":checked").change();
    }

    var filter = $("#filter");
    if (filter.is('form')) {
        site.fields = {
            m: $("#m"), //Market
            t: $("#t"), //Property Type
            d: $("#d") //Location
        };

        site.fields.m.val(site.fields.m.attr("data-old"));

        var g = function (n) {
            $.ajax(
            {
                url: "/odata.svc/" + n.toUpperCase(),
                data: {
                    m: "'" + site.fields.m.val().Encode() + "'",
                    t: "'" + site.fields.t.val().Encode() + "'",
                    d: "'" + site.fields.d.val().Encode() + "'"
                },
                headers: { accept: 'application/json' },
                success: function (data) {
                    var t = site.fields[n];
                    t.find("option[value!='']").remove();
                    $.tmpl("opt", data.d).appendTo(t);
                    t.val(t.attr("data-old"));
                    t.change();
                }
            }
            );
        }
        var r = function (e) {
            e.attr("data-old", e.val());
        }

        site.fields.d.change(function () { r($(this)); });
        site.fields.t.change(function () { r($(this)); g("d"); });
        site.fields.m.change(function () { g("t"); }).change();
    }

    $('aside select').customStyle();

    $('aside input[type="radio"]').ezMark({ radioCls: 'unselected', selectedCls: 'selected' });

    handleSendEmail = function (data) {
        $('#answer').text(data.r ? "Message sent. Thanks for contacting us!" : "Incorrect email.");
    }

    var gmap = $("#gmap");
    if (gmap.is('div')) {
        handleGMap = function () {
            var bounds = new google.maps.LatLngBounds();
            var opt = {
                mapTypeId: google.maps.MapTypeId.ROADMAP
            }
            var map = new google.maps.Map(gmap.get(0), opt);
            $.each(site.gdata, function (i, e) {
                bounds.extend(new google.maps.LatLng(e.gps.Latitude, e.gps.Longitude));
                var infowindow = new google.maps.InfoWindow({
                    content: e.html
                });
                var marker = new google.maps.Marker({
                    position: new google.maps.LatLng(e.gps.Latitude, e.gps.Longitude),
                    map: map,
                    //icon: e.icon,
                    title: e.title
                });
                google.maps.event.addListener(marker, 'click', function () { infowindow.open(map, marker); });
            });

            if (site.gdata.length == 1) {
                map.setZoom(site.gdata[0].gps.Zoom);
                map.setCenter(bounds.getCenter());
            }
            else {
                map.fitBounds(bounds);
            }

        };
        $.getScript("http://maps.google.com/maps/api/js?sensor=false&callback=handleGMap&region=IE");
    }

    var zoom = $(".photoZoom").find('a');
    if (zoom.is('a')) {
        $(".photoThumbs").find('a').click(function () {
            zoom.find('img').attr("src", $(this).attr("href"));
            zoom.attr('href', $(this).attr("full"));
            return false;
        });
    }
});
