﻿var mControlPrefix = "OE";
var mRowPrefix = "rowOEMScheduler";
var mUid;
var mBaseUrl;

function OpenEntryModuleSchedulerInit() { mList = new Array(); mUid = 0; mBaseUrl = $("input:hidden[id*='adx_baseurl']").val() + "images/"; }

/*****************************************************************************
OCCURRENCE SCHEDULE TABLE CREATION
*****************************************************************************/
function InsertRow(prInsertAt, prUID) {
    $("#" + mRowPrefix + prInsertAt).before(CreateItemRow(prUID));
    JQueryBindEvents($("#" + mRowPrefix + prUID));
}

function RemoveRow(prUID) {
    hideErrorMessage("adx_dateerror"); /*make sure errors are not shown*/
    if ($("tr[id*='" + mRowPrefix + "']").length > 1) {
        JQueryUnbindEvents($("#" + mRowPrefix + prUID));
        $("#" + mRowPrefix + prUID).remove();
    }
    else {
        showErrorMessage("adx_dateerror", "You cannot delete the last occurrence in your schedule.");
    }
}

function SaveAllRows() {
    var lAllSchd = "";
    /*Bind events to all new rows created*/
    $.each($("tr[id*='" + mRowPrefix + "']"), function() {
        var lSD = $("input:text[id*='StartDate']", $(this)).attr("value");
        var lED = $("input:text[id*='EndDate']", $(this)).attr("value");
        var lST = $("input:text[id*='StartTime']", $(this)).attr("value");
        var lET = $("input:text[id*='EndTime']", $(this)).attr("value");
        var lAD = $("input:checkbox[id*='iA']", $(this)).attr("checked");
        if (lSD != null && lED != null) {
            if (lAD) { lST = ""; lET = ""; }
            lAllSchd = lAllSchd + "|" + lSD + "," + lED + "," + lST + "," + lET + "," + lAD;
        }
    });
    $("#adx_entireschedule").val((lAllSchd == "") ? "" : lAllSchd.substr(1))
}

function InitOEMScheduler(prDates, prDuration, prStartTime, prEndTime, prAllDay) {
    /*Reinit OEM Scheduler Variables*/
    OpenEntryModuleSchedulerInit();

    /*Unbind any old events and clear any old data*/
    JQueryUnbindAllEvents();
    $("#divOEMScheduler").children().remove();
         
    /*Create the initial table row(s)*/
    var tblSchd = document.createElement("table");
    var tblSchdBody = document.createElement("tbody");
    tblSchd.appendChild(tblSchdBody);
    $("#divOEMScheduler").append(tblSchd);

    /*Durations*/
    var lMilliseconds = prDuration;
    var lSeconds = lMilliseconds / 1000;
    var lMinutes = lSeconds / 60;
    var lHours = lMinutes / 60;
    var lDays = lHours / 24; 
    
    /*Add all the initail dates created*/
    for (var i = 0; i < prDates.length; i++) {
        /*Add the row, then init the row*/
        tblSchdBody.appendChild(CreateItemRow(mUid)); mUid++;
    }
    
    /*Init data for all the rows*/
    for (var i = 0; i < prDates.length; i++) {
        var lRow = $("#" + mRowPrefix + i.toString());
        $("input:text[id*='StartDate']", lRow).attr("value", GetLocalDateString(prDates[i]));
        $("input:text[id*='EndDate']", lRow).attr("value", GetLocalDateString(AddDays(prDates[i], lDays)));
        $("input:text[id*='StartTime']", lRow).attr("value", GetTimeString(prStartTime));
        $("input:text[id*='EndTime']", lRow).attr("value", GetTimeString(prEndTime));
        $("input:checkbox[id*='iA']", lRow).attr("checked", (prAllDay == "Y") ? true : false);
        AllDayOccurrence(i.toString(), (prAllDay == "Y") ? true : false);
    }

    /*Bind events to all new rows created*/
    JQueryBindEvents($("tr[id*='" + mRowPrefix + "']"));
}

function AddDays(prDate, prDays) {
    return GetLocalDate(prDate.getFullYear(), prDate.getMonth(), prDate.getDate() + prDays, 0, 0);
}

function CreateItemRow(prUID) {
    var lRow = document.createElement("tr");
    lRow.setAttribute("id", mRowPrefix + prUID);

    /* ADD / DELETE */
    var aA = CreateAnchor("javascript:", "Add", "aA", prUID);
    var sP = document.createElement("span"); sP.innerHTML = "&nbsp;/&nbsp;";
    var aD = CreateAnchor("javascript:", "Delete", "aD", prUID);
    lRow.appendChild(CreateCell(aA, sP, aD));
  
    /* CHECKBOX */
    var iC = CreateInput("checkbox", "iC", prUID); lRow.appendChild(CreateCell(iC));
    /* STARTDATE */
    var iSD = CreateInput("text", "StartDate", prUID); lRow.appendChild(CreateCell(iSD));
    /* STARTDATE ICON */
    var imgSD = CreateImg("imgStartDate", prUID); lRow.appendChild(CreateCell(imgSD));
    /* ENDDATE */
    var iED = CreateInput("text", "EndDate", prUID); lRow.appendChild(CreateCell(iED));
    /* ENDDATE ICON */
    var imgSD = CreateImg("imgEndDate", prUID); lRow.appendChild(CreateCell(imgSD));
    /* STARTTIME */
    var iST = CreateInput("text", "StartTime", prUID); lRow.appendChild(CreateCell(iST));
    /* ENDTIME */
    var iET = CreateInput("text", "EndTime", prUID); lRow.appendChild(CreateCell(iET));
    /* ALLDAY */
    var iA = CreateInput("checkbox", "iA", prUID);
    var iAsP = document.createElement("span"); iAsP.innerHTML = "All Day";
    lRow.appendChild(CreateCell(iA, iAsP));
        
    return lRow;
}

function CreateImg(pvId, prUID) {
    var lImg = document.createElement("img");
    lImg.setAttribute("id", GetId(pvId, prUID));
    lImg.setAttribute("src", mBaseUrl + "calendar.gif");
    return lImg;
}
function CreateInput(prType, pvId, prUID) {
    var lIpt = document.createElement("input");
    lIpt.setAttribute("id", GetId(pvId, prUID));
    lIpt.setAttribute("type", prType);
    return lIpt;
}
function CreateAnchor(prHref, prInnerHTML, prId, prUID) {
    var lAnc = document.createElement("a");
    lAnc.setAttribute("id", GetId(prId, prUID));
    lAnc.setAttribute("href", prHref);
    lAnc.innerHTML = prInnerHTML;
    return lAnc;
}
function CreateCell() {   
    var lCell = document.createElement("td");
    for (i = 0; i < arguments.length; i++) { lCell.appendChild(arguments[i]); }
    return lCell;
}
function GetId(prCtrlId, prUID) {
    return mControlPrefix + "_" + prCtrlId + "_" + prUID;
}

/*****************************************************************************
OCCURRENCE SCHEDULE EVENT ASSIGNMENTS & REMOVAL
*****************************************************************************/
function JQueryBindEvents(prJQueryRow) {
    /*ADD - EVENT*/
    $("a[id*='_aA_']", prJQueryRow).click(function() { AddItem(RemoveNonNums(($(this).attr("id")))); });    
    
    /*DELETE - EVENT*/
    $("a[id*='_aD_']", prJQueryRow).click(function() { DeleteItem(RemoveNonNums(($(this).attr("id")))); });
    
    /*ALL DAY CHECKBOX*/
    $("input:checkbox[id*='_iA_']", prJQueryRow).click(function() { AllDayOccurrence(RemoveNonNums($(this).attr("id")), $(this).attr("checked")); });

    /*START DATE ICON*/
    $("img[id*='_imgStartDate_']").click(function() {
        var lCId = String($(this).attr("id")).replace("img", "");
        initSGrid(lCId, lCId.replace("Start", "End"));
        /*Try to hide*/try { disposeTimePicker(); } catch (Error) { }
        return false;
    });
    
    /*START DATE*/
    $("input:text[id*='_StartDate_']").keypress(function(e) {
        if (e.which == 13) {
            var lCId = String($(this).attr("id"));
            disposeDatePicker();
            validateControls(lCId, lCId, lCId.replace("Start", "End"));
            validateTimes(lCId.replace("Date", "Time"));
        }
    }).change(function() {
        var lCId = String($(this).attr("id"));
        validateControls(lCId, lCId, lCId.replace("Start", "End"));
        validateTimes(lCId.replace("Date", "Time")); return false;
    }).attr("autocomplete", "off"); /*Disable autocomplete*/

    /*END DATE ICON*/
    $("img[id*='_imgEndDate_']").click(function() {
        var lCId = String($(this).attr("id")).replace("img", "");
        initEGrid(lCId, lCId.replace("End", "Start"));
        /*Try to hide*/try { disposeTimePicker(); } catch (Error) { }
        return false;
    });

    /*END DATE*/
    $("input:text[id*='_EndDate_']").keypress(function(e) {
        if (e.which == 13) {
            var lCId = String($(this).attr("id"));
            disposeDatePicker();
            validateControls(lCId, lCId.replace("End", "Start"), lCId);
            validateTimes(lCId.replace("Date", "Time"));
        }
    }).change(function() {
        var lCId = String($(this).attr("id"));
        validateControls(lCId, lCId.replace("End", "Start"), lCId);
        validateTimes(lCId.replace("Date", "Time")); return false;
    }).attr("autocomplete", "off"); /*Disable autocomplete*/

    /*START TIME*/
    $("input:text[id*='_StartTime_']").click(function() {
        createTimePicker($(this).attr("value"), $(this).attr("id"));
        disposeDatePicker();
    }).keypress(function(e) {
        if (e.which == 13) { validateTimes($(this).attr("id")); return false; }
    }).change(function() {
        validateTimes($(this).attr("id"));
    }).attr("autocomplete", "off"); /*Disable autocomplete*/

    /*END TIME*/
    $("input:text[id*='_EndTime_']").click(function() {
        createDurationPicker($(this).attr("value"), $(this).attr("id"));
        disposeDatePicker(); return false;
    }).keypress(function(e) {
        if (e.which == 13) { validateTimes($(this).attr("id")); }
    }).change(function() {
        validateTimes($(this).attr("id"));
    }).attr("autocomplete", "off"); /*Disable autocomplete*/

    $("input:text", prJQueryRow).addClass("text60");
}

function JQueryUnbindEvents(prJQueryRow) { $("a", prJQueryRow).unbind(); $("input", prJQueryRow).unbind(); }
function JQueryUnbindAllEvents() { $.each($("tr[id*='" + mRowPrefix + "']"), function() { JQueryBindEvents($(this)); }); }

/*****************************************************************************
OCCURRENCE SCHEDULE EVENT HANDLERS (add, delete, all day)
*****************************************************************************/
function AddItem(prUID) {
    var lUID = parseInt(mUid); mUid++;
    /*INSERT NEW ITEM*/ InsertRow(prUID, lUID);
}
function DeleteItem(prUID) {
    /*REMOVE ITEM*/ RemoveRow(prUID);
}
function AllDayOccurrence(prUID, prChecked) {
    var lRow = $("#" + mRowPrefix + prUID);
    if (prChecked) { $("input:text[id*='Time']", lRow).attr("disabled", prChecked); }
    else { $("input:text[id*='Time']", lRow).removeAttr("disabled"); }
}