﻿function log(msg) {
    if (window.console != null) {
        window.console.log(msg);
    }
}

function ClickOnEnter(e, button) {
    if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
        button.click();
        return false;
    }

    return true;
}

function ajaxDownload(url) {
    $('#ajax-download').slideDown();
    jQuery('<form action="' + url + '" method="POST"></form>').appendTo('body').submit().remove();
    setTimeout(function () { $('#ajax-download').slideUp(); }, 1500);
}

function initColorbox(sel) {
    $(sel).colorbox({ width: 625, height: 575, iframe: true });
}

var scripts = new Array();
var scriptstatus = new Array();

function getScriptOnce(script, callback) {
    var pos = $.inArray(script, scripts);

    if (callback) {
        if (pos >= 0) {
            if (scriptstatus[pos] == false) {
                setTimeout(function () { getScriptOnce(script, callback); }, 200);
                return;
            }
            callback();
            return;
        }
    }

    pos = scripts.push(script) - 1;
    scriptstatus.push(false);

    $.getScript(script, function () { if (callback) { callback(); } scriptstatus[pos] = true; });
}

function callWebService(service, method, parms, success, failure, context) {
    var data = "{";
    var sep = "";

    for (var i in parms) {
        data += sep + "'" + parms[i].id + "':" + parms[i].value;
        sep = ",";
    }

    data += "}";

    $.ajax({
        type: "POST",
        url: "/services/" + service + "/" + method,
        data: data,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
                    if (success == null) {
                        return;
                    }
                    var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
                    success(dateFix(data), context);
                },
        failure: function (response) {
            if (failure == null) {
                return;
            }
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            failure(data, context);
        }
    });
}

function dateFix(obj) 
{
    if (obj === null) {
        return obj;
    }

    // ASP.NET JSON date?
    if (typeof obj === "string") {
        var match = obj.match(/^\/Date\((-?\d+)\)\/$/);

        // nope, regular string
        if (!match) {
            return obj;
        }

        // yup, JSON-serialized DateTime
        return new Date(parseInt(match[1]));
    }
    // string or number

    if (typeof obj !== "object") {
        return obj;
    }
    // array or object

    jQuery.each(obj, function (key, val) {
        obj[key] = dateFix(val);
    });

    return obj;
}

function handleError(error, userContext) {
    alert('We apologize, an error occurred: ' + error.get_message());
}

/* Map functions */

var maps = new Array();
var directions = new Array();
var geocoder = null;
var directionsService = null;
var mapsloaded = false;

function loadMaps() {
    if (mapsloaded == false) {
        google.load("maps", "3", { other_params: "sensor=false" });
        mapsloaded = true;
    }
}
function initializeMap(key, address, zoom, directions) {
    var latlng = new google.maps.LatLng(-34.397, 150.644);
    var myOptions = {
        zoom: zoom,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    maps[key] = new google.maps.Map(document.getElementById("map_" + key), myOptions);

    if(directions)
    {
        directions[key] = new google.maps.DirectionsRenderer();
        directions[key].setMap(maps[key]);
        directions[key].setPanel(document.getElementById("directions_" + key));
    }
    if (address) {
        showProp(maps[key], address, zoom);
    }
}
function showProp(map, address, zoom) {
    zoom = zoom || 13;
    //map.clearOverlays();
    if (geocoder == null) {
        geocoder = new google.maps.Geocoder();
    }
    if (geocoder) {
        geocoder.geocode({ 'address': address }, function (results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                map.setCenter(results[0].geometry.location);
                map.setZoom(zoom)
                var marker = new google.maps.Marker({
                    map: map,
                    position: results[0].geometry.location
                });
            } else {
                alert("Geocode was not successful for the following reason: " + status);
            }
        });
    }
}
function getDirections(key, start, end) {
    var request = {
        origin: start,
        destination: end,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
    };
    if (directionsService == null) {
        directionsService = new google.maps.DirectionsService();
    }
    directionsService.route(request, function (response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directions[key].setDirections(response);
        }
    });
}
function toggleDirections(key) {
    $('#getdir_' + key).toggle();
    //maps[key].checkResize();
    google.maps.event.trigger(maps[key], 'resize');
    $('#toaddr_' + key).focus();
}

function hashForPage(scrollTop) {
    var url = location.href;
    var hash = "";

    if (url.indexOf('#') > 0) {
        hash = url.substring(url.indexOf('#') + 1);
    }
    
    if (scrollTop && hash.length > 0) {
        setTimeout(function () { $('body').scrollTop(0); }, 1);
    }

    return hash;
}