﻿/*
serviceProxy creates short hand for webservice calls.
*/
function serviceProxy(serviceUrl) {
    var me = this;
    this.serviceUrl = serviceUrl;

    this.invoke = function(method, data, callback, error, bare) {
        // convert object to JSON
        var json = JSON2.stringify(data);
        // build method URL based on base service path
        var url = me.serviceUrl + method;

        $.ajax({
            url: url,
            data: json,
            type: 'POST',
            processData: false,
            contentType: 'application/json',
            timeout: 1000,
            dataType: 'json',
            success: function(result) {
                // if no callback defined, do nothing
                if (!callback) return;
                // if object returned is the result, use it
                if (bare) {
                    callback(result);
                    return;
                }
                // wrapped message contains top object node - strip it off
                for (var property in result) {
                    callback(result[property]);
                    break;
                }
            },
            error: function(xhr) {
                // if no error callback defined, do nothing
                if (!error) return;
                // if error message set
                if (xhr.responseText) {
                    // parse message
                    var err = JSON2.parse(xhr.responseText);
                    // send error message on
                    if (err) {
                        error(err);
                    } else {
                        error({ Message: 'Unknown server error' });
                    }
                }
            }
        });
    }
}


function EnsureNumeric(e) {
    if (window.event) // IE
    {
        key = e.keyCode
    }
    else if (e.which) // Netscape/Firefox/Opera
    {
        key = e.which
    }

    if (key == 13) {
        return true;
    }
    else if (key == 8 || key == 43) {
        return true;
    }
    else if (key < 48 || key > 57) {
        return false;
    }

    
    return true;
}


var isOpen = false;
function goClick() {
    if (isOpen) {
        $("#blog").animate({ top: "-53px", height: "33px" }, { queue: false, duration: 1200 });
        $("#blog").attr("style", "background-image:url(/Images/blogTag.png)");
        isOpen = false;
    }
    else {
        var ulList = $("#blogContent ul")
        if (ulList.html() == undefined) {
            GetBlogPosts();
        }


        //var imgURL = "";
        $("#blog").animate({ top: "-260px", height: "243px" }, { queue: false, duration: 1200 });
        $("#blog").attr("style", "background-image:url(/Images/blogTagUp.png)");
        isOpen = true;
    }
}

function GetBlogPosts() {
    var parms = {
        getCount: 2
    };
    var proxy = new serviceProxy('/WebServices/blog.asmx/');
    proxy.invoke('GetBlogPreviews', parms, LoadBlogPosts, pageError);
}

function LoadBlogPosts(res) {
    if (res.length == 0) return;
    $("#blogContent").html(res);
}
function pageError()
{ }

var isNN = (navigator.appName.indexOf("Netscape") != -1);

function autoTab(input, len, e) {
    var keyCode = (isNN) ? e.which : e.keyCode;
    var filter = (isNN) ? [0, 8, 9] : [0, 8, 9, 16, 17, 18, 37, 38, 39, 40, 46];
    if (input.value.length >= len && !containsElement(filter, keyCode)) {
        input.value = input.value.slice(0, len);
        input.form[(getIndex(input) + 1) % input.form.length].focus();
    }

    function containsElement(arr, ele) {
        var found = false, index = 0;
        while (!found && index < arr.length)
            if (arr[index] == ele)
            found = true;
        else
            index++;
        return found;
    }

    function getIndex(input) {
        var index = -1, i = 0, found = false;
        while (i < input.form.length && index == -1)
            if (input.form[i] == input) index = i;
        else i++;
        return index;
    }
    return true;
}


function RenderMap(xmlLocations) {

    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map_canvas"));
        map.setCenter(new GLatLng(36.012376, -100.438477), 4);
        map.setUIToDefault();
        map.disableScrollWheelZoom();

        var baseIcon = new GIcon(G_DEFAULT_ICON);
        function createMarker(point, xml) {
            var marker = new GMarker(point);
            GEvent.addListener(marker, "click", function() {
                marker.openInfoWindowHtml(renderHTML(xml));
            });
            return marker;
        }

        //Use for each on normal occations. Not expecting many items in loop.
        $(xmlLocations).find('location').each(function() {
            //console.log($(this).find('lat').text());
            var latlng = new GLatLng($(this).find('lat').text(), $(this).find('long').text());
            map.addOverlay(createMarker(latlng, this));


        });
    }
}

function renderHTML(xml) {
    var img = $(xml).find('img').text()
    var title = $(xml).find('title').text()
    var desc = $(xml).find('desc').text()
    var address = $(xml).find('address').text()
    var city = $(xml).find('city').text()
    var state = $(xml).find('state').text()
    var zip = $(xml).find('zip').text()
    var phone = $(xml).find('phone').text()

    var sb = '';

    sb += (img.length !== 0) ? "<img src=\"" + img + " \" height=\"150\" /> <br />" : '';
    sb += (title.length !== 0) ? title + "<br />" : '';
    sb += (desc.length !== 0) ? desc + "<br />" : '';
    sb += (address.length !== 0) ? address + "<br />" : '';

    sb += (city.length !== 0) ? city + ", " : '';
    sb += (state.length !== 0) ? state + " " : '';
    sb += (zip.length !== 0) ? zip + "<br />" : '';
    sb += (phone.length !== 0) ? "Phone: " + phone + "<br /><br />" : '';

    //console.log(sb);
    return sb;
}
