﻿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 convertToSlug(Text) {
    var slug = $('.slug');
    if (slug.val().length > 0) {
        return;
    }
    slug.val(Text.toLowerCase().replace(/[^\w ]+/g, '').replace(/ +/g, '-'));
}

function editToggle() {
    $("div.edit").hover(function () {
        $(this).find(".onedit").css({ 'visibility': 'visible' }); //Show delete icon on hover
    }, function () {
        $(this).find(".onedit").css({ 'visibility': 'hidden' }); //Hide delete icon on hover out
    });
}

function initHelpTip() {
    $('.helptip').qtip({
        position: {
            corner: {
                target: 'bottomMiddle',
                tooltip: 'topRight'
            }
        },
        style: {
            name: 'cream',
            border: {
                width: 5,
                radius: 8
            },
            padding: 5,
            textAlign: 'center',
            tip: true
        }

    });
}

function ajaxDownload(url) {
//    var download = $('#ajax-download');
//    if (download.length == 0) {
//        download = $('<div id="ajax-download"><img src="/images/ajax-download.gif" alt="Downloading..." />Starting Download</div>').appendTo('body');
//    }

//    download.slideDown();
    jQuery('<form action="' + url + '" method="POST"></form>').appendTo('body').submit().remove();
//    setTimeout(function () { download.slideUp(); }, 1500);
}

function initAjaxDownload() {
    $('a.downloadfile').click(function () {
        ajaxDownload($(this).attr('href'));
        return false;
    });
}

function initColorbox(sel) {
    $(sel).colorbox({ width: 625, height: 575, iframe: true });
}

function searchFor(keywords) {
    if (keywords.length == 0) {
        alert('Please enter your search keywords');
        return false;
    }

    window.location = '/search/' + escape(keywords);
    return false;
}

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());
}

function removePageTemplate(template) {
    var answer = confirm('Are you sure you want to delete this section?');

    if (answer) {
        var parms = [
            {
                id: "pagetemplatepk",
                value: JSON.stringify(template)
            }
        ];
        callWebService("PageService.asmx", "RemovePageTemplate", parms, removePageTemplate_Success, handleError, template);
    }
}

function removePageTemplate_Success(result, template) {
    $('#section_' + template).remove();
}

function deletePage(pagepk) {
    var answer = confirm('Are you sure you want to delete this page?');

    if (!answer) {
        return false;
    }

    var parms = [
        {
            id: "pagepk",
            value: JSON.stringify(pagepk)
        }
    ];
    
    callWebService("PageService.asmx", "DeletePage", parms, deletePage_Success, handleError, pagepk);
    
    return true;
}

function deletePage_Success(result, pagepk) {
    $('#menupage_' + pagepk).remove();
}

function updatePageName(pagepk, name) {
    var parms = [
        {
            id: "pagepk",
            value: JSON.stringify(pagepk)
        },
        {
            id: "name",
            value: JSON.stringify(name)
        }
    ];
    callWebService("PageService.asmx", "UpdatePageName", parms, updatePageName_Success, handleError, pagepk);
}

function updatePageName_Success(result, pagepk) {
    
}

function updatePageTemplateSequence(template) {
    var parms = [
        {
            id: "values",
            value: JSON.stringify($(template).sortable('toArray'))
        }
    ];
    callWebService("PageService.asmx", "UpdatePageTemplateSequence", parms, updatePageTemplateSequence_Success, handleError);
}

function updatePageTemplateSequence_Success(result) {

}

function updatePageSequence(pages) {
    var pagefk = null;

    var id = $(pages).attr('id').split('_');

    if (id.length > 1 && id[1].length > 0) {
        pagefk = id[1];
    }

    //alert(pagefk + " :: " + $(pages).sortable('toArray'));

    var parms = [
        {
            id: "PageFK",
            value: JSON.stringify(pagefk)
        },
        {
            id: "pages",
            value: JSON.stringify($(pages).sortable('toArray'))
        }
    ];
    callWebService("PageService.asmx", "UpdatePageSequence", parms, updatePageSequence_Success, handleError);
}

function updatePageSequence_Success(result) {

}

/* Contact */

function sendContactForm(pagetemplatepk) {

    var message = "";

    $('#contactform_' + pagetemplatepk + ' :input').each(function (idx, item) {
        if (item.type != "button")
            message += item.id + ":  " + item.value + "<br>";
    });

    var parms = [
        {
            id: "pagetemplatepk",
            value: JSON.stringify(pagetemplatepk)
        },
        {
            id: "message",
            value: JSON.stringify(message)
        }
    ];

    callWebService("ContactFormService.asmx", "SendEmail", parms, sendContactForm_Success, handleError, pagetemplatepk);
}

function sendContactForm_Success(result, pagetemplatepk) {
    // Clear fields
    clearContactForm();

    // Set a success message on the page
    $("#message").css("visibility", "visible");
    $("#message").css("display", "inline");
}

function clearContactForm() {

    $(':input', '#form1')
    .not(':button, :submit, :reset:, :hidden')
    .val('')
    .removeAttr('checked')
    .removeAttr('selected');
}

/* Calendar */

function getCalendarEvents(pagetemplatepk, start, end, callback) {
    var parms = [
        {
            id: "pagetemplatepk",
            value: JSON.stringify(pagetemplatepk)
        },
        {
            id: "startDate",
            value: JSON.stringify(start)
        },
        {
            id: "endDate",
            value: JSON.stringify(end)
        }
    ];
    callWebService("CalendarService.asmx", "CalendarEventsForPageTemplate", parms, getCalendarEvents_Success, handleError, callback);
}

function getCalendarEvents_Success(result, callback) {
    callback(result);
}

function addEventToCalendar(pagetemplatepk, date, allDay, jsEvent, view) {
    $.fn.colorbox({ href: '/Event.aspx?pagetemplatepk=' + pagetemplatepk + '&eventpk=0&sdate=' + date, width: 625, height: 575, iframe:true });
}

function editCalendarEvent(pagetemplatepk, event, jsEvent, view) {
    $.fn.colorbox({ href: '/Event.aspx?eventpk=' + event.id.split('_')[1] + '&sdate=' + event.start, width: 625, height: 575, iframe: true });
}

function moveEvent(pagetemplatepk, event, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui, view) {
    var parms = [
        {
            id: "eventpk",
            value: JSON.stringify(event.id.split('_')[1])
        },
        {
            id: "days",
            value: JSON.stringify(dayDelta)
        }
    ];
    callWebService("CalendarService.asmx", "MoveEventByDays", parms, null, error_revert, revertFunc);
}

function error_revert(result, revert) {
    if (revert) {
        revert();
    }
}

function refreshCalendar(pagetemplatepk) {
    $('#calendar_' + pagetemplatepk).fullCalendar('refetchEvents');
}

/* Blog functions */

function addComment(postpk) {
    var author = $('#commentauthor_' + postpk).val();
    var body = $('#commentbody_' + postpk).val();
    var captcha = $('#commentcaptcha_' + postpk).val();

    if (body.length == 0) {
        alert('Please enter text for your comment');
        return;
    }

    var parms = [
        {
            id: "postpk",
            value: JSON.stringify(postpk)
        },
        {
            id: "author",
            value: JSON.stringify(author)
        },
        {
            id: "body",
            value: JSON.stringify(body)
        },
        {
            id: "captcha",
            value: JSON.stringify(captcha)
        }
    ];
    callWebService("BlogService.asmx", "AddCommentToPost", parms, addComment_Success, handleError, postpk);
}

function addComment_Success(result, postpk) {
    $('#postcomments_' + postpk).append('<div>' + result.Body + '</div>');
}

function deleteComment(commentpk) {
    var answer = confirm('Are you sure you want to delete this comment?');

    if (!answer) {
        return;
    }

    var parms = [
        {
            id: "commentpk",
            value: JSON.stringify(commentpk)
        }
    ];
    callWebService("BlogService.asmx", "DeleteCommentFromPost", parms, deleteComment_Success, handleError, commentpk);
}

function deleteComment_Success(result, commentpk) {
    $('#comment_' + commentpk).remove();
}

/* 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) {
    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);
    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();
}