﻿var flgEventSaveInProgress = false;
var flgEventAddInProgress = false;
var flgCancelNewEventInProgress = false;
var flgCancelEditExistingEventInProgress = false;
var flgCallMobileCalendarWithSpecificDateInProgress = false;
var callbackArgs = null;
var flgIsDayView = false;

Enums.MobileCallbackTypes =
{
    eOther: 0,
    eMobileCalendarCallback: 1,
    eMobileEventViewerCallback: 2,
    eMobileCalendarCallbackDayView: 3
};

function test(event, ui) {
    alert('testing');
}

function getCalWidget(iTripID) {
    var tripCalWidgetReturn = null;
    if (tripCalendar_Cache.length > 0) {
        $.each(tripCalendar_Cache, function (i, tripCalWidget) {
            if (tripCalWidget.iTripId == iTripID) {
                tripCalWidgetReturn = tripCalWidget.item;
                return false;
            }
        });
    }
    return tripCalWidgetReturn;
}

function IsUrlContainedInCache(url) {
    var flgReturn = false;
        
    $.each($.mobile.urlHistory.stack, function (i, page) {
        if (page.url == url) {
            flgReturn = true;
            return false;
        }
    });

    return flgReturn;
}

function getCurrentDate(iTripID) {
    var date = null;
    var tripCalWidget = getCalWidget(iTripID);
    if (tripCalWidget != null) {
        date = tripCalWidget.options.currentDate;
    }
    return date;
}

function ChangePageNewEvent(iTripID, flgIsDayView) {
    var tripCalWidget = getCalWidget(iTripID);
    var sCurrentSelectedDate = getCurrentDate(iTripID);
    //var formattedDate = tripCalWidget.element.weekCalendar("formatDate", sCurrentSelectedDate, "m/d/Y");
    //Ticket #34 UBS 10/21/2011: Commented the above line. We need to initialize weekCalendar before we can access its publi methods.
    var formattedDate = "";
    var eCallbackType = Enums.MobileCallbackTypes.eMobileCalendarCallback;

    //Begin - Ticket #34 UBS 10/21/2011:
    tripCalWidget("initializeWeekCalendarForMobile");
    formattedDate = tripCalWidget.element.weekCalendar("formatDate", sCurrentSelectedDate, "m/d/Y");
    //End-Ticket #34 UBS 10/21/2011:

    if (flgIsDayView) {
        eCallbackType = Enums.MobileCallbackTypes.eMobileCalendarCallbackDayView;
    }

    var callbackArgs = {
        "eCallbackType": eCallbackType,
        "iTripID": iTripID,
        "currentDate": sCurrentSelectedDate, 
        "jsonTrip": tripCalWidget.options.jsonTrip };

    $.mobile.changePage("/Trip/MobileTripCalendarEditEvent?iTripId=" + iTripID + "&iPlanID=0&sDate=" + formattedDate,
                        'slide',
                        false,
                        false);

    $.mobile.activePage.data("newEventCallbackArgs", callbackArgs);
}

function ChangePageLoadCalendarFromEventViewer(iTripID, iPlanID) {
    var tripCalWidget = getCalWidget(iTripID);
    var sCurrentSelectedDate = getCurrentDate(iTripID);
    var formattedDate = tripCalWidget.element.weekCalendar("formatDate", sCurrentSelectedDate, "m/d/Y");
    var eCallbackType = Enums.MobileCallbackTypes.eMobileCalendarCallback;

    if (flgIsDayView) {
        eCallbackType = Enums.MobileCallbackTypes.eMobileCalendarCallbackDayView;
    }

    var callbackArgs = {
        "eCallbackType": eCallbackType,
        "iTripID": iTripID,
        "currentDate": sCurrentSelectedDate,
        "jsonTrip": tripCalWidget.options.jsonTrip
    };

    //$.mobile.pageContainer.jqmData("loadCalendarFromEventViewerCallbackArgs", callbackArgs);

    $.mobile.changePage("/Trip/MobileTripCalendar?iTripId=" + iTripID,
                        'slide',
                        true,
                        false);

    $.mobile.activePage.data("loadCalendarFromEventViewerCallbackArgs", callbackArgs);
    //Ticket #34 UBS 10/24/2011: Upgraded to version 1.0 RC2
    //$.mobile.pageContainer.jqmData("loadCalendarFromEventViewerCallbackArgs", callbackArgs);
    //$.mobile.activePage.jqmData("loadCalendarFromEventViewerCallbackArgs", callbackArgs);
}

function ChangePageCancelEditExistingEvent(iTripID, iPlanID, sKey, flgIsMobileDayView) {
    var tripCalWidget = getCalWidget(iTripID);
    var sCurrentSelectedDate = getCurrentDate(iTripID);
    var formattedDate = tripCalWidget.element.weekCalendar("formatDate", sCurrentSelectedDate, "m/d/Y");
    var eCallbackType = Enums.MobileCallbackTypes.eMobileEventViewerCallback;

    //alert('flgIsMobileDayView = ' + flgIsMobileDayView);
    //if (flgIsMobileDayView) {
    //    eCallbackType = Enums.MobileCallbackTypes.eMobileCalendarCallbackDayView;
    //}

    var callbackArgs = {
        "eCallbackType": eCallbackType,
        "iTripID": iTripID,
        "iPlanID": iPlanID,
        "currentDate": sCurrentSelectedDate, 
        "jsonTrip": tripCalWidget.options.jsonTrip };

        if (!flgIsMobileDayView) {
            $.mobile.changePage("/Trip/MobileTripCalendarViewEvent?iTripId=" + iTripID + "&iPlanId=" + iPlanID + "&key=" + sKey,
                        'slide',
                        true,
                        false);
        } else {
            $.mobile.changePage("#/Trip/MobileTripCalendarDayViewEvent?iTripId=" + iTripID + "&iPlanId=" + iPlanID + "&key=" + sKey + "&flgIsMobileDayView=" + flgIsMobileDayView,
                        'slide',
                        true,
                        false);        
        }

    $.mobile.activePage.data("cancelExistingEventCallbackArgs", callbackArgs);
}

function ChangePageCancelNewEvent(iTripID) {
    var tripCalWidget = getCalWidget(iTripID);
    var sCurrentSelectedDate = getCurrentDate(iTripID);
    var formattedDate = tripCalWidget.element.weekCalendar("formatDate", sCurrentSelectedDate, "m/d/Y");
    var eCallbackType = Enums.MobileCallbackTypes.eMobileCalendarCallback;

    if (flgIsDayView) {
        eCallbackType = Enums.MobileCallbackTypes.eMobileCalendarCallbackDayView;
    }

    var callbackArgs = {
        "eCallbackType": eCallbackType,
        "iTripID": iTripID,
        "currentDate": sCurrentSelectedDate, 
        "jsonTrip": tripCalWidget.options.jsonTrip };

    $.mobile.changePage("/Trip/MobileTripCalendar?iTripId=" + iTripID,
                        'slide',
                        true,
                        false);

    $.mobile.activePage.data("cancelNewEventCallbackArgs", callbackArgs);
}

function CallbackEventEditorForNewEvent(iTripID) {
    alert('inside mobileMisc.js CallbackEventEditorForNewEvent');
    $("#event_editor_0").trigger("callback", $("#datepicker_" + iTripID).data("callbackArgs"));
}

function CallbackEventEditorForNewEvent_Handler(iPlanID) {
    alert('inside mobileMisc.js CallbackEventEditorForNewEvent_Handler');
    alert('inside hanlder iplanid = ' + iPlanID);
    //$("#event_editor_0").trigger("callback", $("#datepicker_" + iTripID).data("callbackArgs"));
}

function LoadCalendarNewEvent(tripCalWidget, jsonPlan) {
    if (tripCalWidget != null) {
        tripCalWidget.options.eventNew(jsonPlan, null, tripCalWidget);
    }
    else {
        $.post("/Trip/MobileTripCalendar",
                        { "iTripID": jsonPlan.iTripID },
                        function (data) {
                            alert('done');
                        },
                        "html");
    }
}

function LoadEventEditor(tripCalWidget, jsonPlan, flgIsDayView) {
    if (tripCalWidget != null) {
        tripCalWidget.options.eventClick(jsonPlan, null, tripCalWidget, flgIsDayView);
    }
    else {
        $.post("/Trip/MobileTripCalendar",
                        { "iTripID": jsonPlan.iTripID },
                        function (data) {
                            alert('done');
                        },
                        "html");    
    }
}

function LoadEventViewer(tripCalWidget, eventViewContainerID, args, sCustomID) {
    var jsonPlanObj = "";

    $.post("/Search/GetTripPlan",
            args,
            function (data) {
                jsonPlanObj = data;
                if (tripCalWidget != null) {
                    tripCalWidget.loadMobileEventViewer(jsonPlanObj, eventViewContainerID, sCustomID);
                }
                else {
                    $.post("/Trip/MobileTripCalendar",
                    { "iTripID": jsonPlanObj.iTripID },
                    function (data) {
                        alert('done');
                    },
                    "html");
                }                    
            },
            "json");
}

function SaveEvent(tripCalWidget, jsonPlan) {
    if (tripCalWidget != null) {
        //tripCalWidget.saveMobileEvent(jsonPlan);
        tripCalWidget.saveMobileEvent(jsonPlan, flgIsDayView);
    }
}

function DeleteEvent(tripCalWidget, jsonPlan) {
    if (tripCalWidget != null) {
        //tripCalWidget.deleteMobileEvent(jsonPlan);
        tripCalWidget.deleteMobileEvent(jsonPlan, flgIsDayView);
    }
}

(function ($, undefined) {

    //cache previous datepicker ui method
    var prevDp = $.fn.datepicker;

    //rewrite datepicker
    $.fn.datepicker = function (options) {

        var dp = this;

        //call cached datepicker plugin
        prevDp.call(this, options);

        //extend with some dom manipulation to update the markup for jQM
        //call immediately
        function updateDatepicker() {
            $(".ui-datepicker-header", dp).addClass("ui-body-c").removeClass("ui-corner-all");
            $(".ui-datepicker-prev, .ui-datepicker-next", dp).attr("href", "#");
            $(".ui-datepicker-prev", dp).buttonMarkup({ iconpos: "notext", icon: "arrow-l", shadow: true, corners: true });
            $(".ui-datepicker-next", dp).buttonMarkup({ iconpos: "notext", icon: "arrow-r", shadow: true, corners: true });
            $(".ui-datepicker-calendar th", dp).addClass("ui-bar-c");
            $(".ui-datepicker-calendar td", dp).addClass("ui-body-c");
            $(".ui-datepicker-calendar a", dp).buttonMarkup({ corners: false, shadow: false });
            $(".ui-datepicker-calendar a.ui-state-active", dp).addClass("ui-btn-active"); // selected date
            $(".ui-datepicker-calendar a.ui-state-highlight", dp).addClass("ui-btn-up-e"); // today"s date
            $(".ui-datepicker-calendar .ui-btn", dp).each(function () {
                var el = $(this);
                // remove extra button markup - necessary for date value to be interpreted correctly
                el.html(el.find(".ui-btn-text").text());
            });
        };

        //update now
        updateDatepicker();

        // and on click
        $(dp).click(updateDatepicker);

        //return jqm obj 
        return this;
    };

    //bind to pagecreate to automatically enhance date inputs	
    $(".ui-page").live("pagecreate", function () {
        $("input[type='date'], input[data-type='date']").each(function () {
            $(this).after($("<div />").datepicker({ altField: "#" + $(this).attr("id"), showOtherMonths: false }));
        });
    });

    $(document).bind("mobileinit", function(){
        $.extend(  $.mobile , {
                    touchOverflowEnabled: true
        });
    });
})(jQuery);
