var slots;
var inputHidden_reserve_timeNotOk;
var inputHidden_reserve_timeNotOk_toolTip;
var inputHidden_reserve_timeOk;
var inputHidden_reserve_timeOk_toolTip;

$(document).ready(function() {
    // do stuff when DOM is ready
    $(".slotGroupNumber").each(function() {
        if (this.innerHTML == 0) {
            $(this).parents(":first").remove();
        } else {
            $(this).parents(":first").attr("rowspan", this.innerHTML);
        }
    });
    var rows = $(".timeTable tbody tr").length;
    var cols = $(".timeTable tbody tr:first td.timeTable_locked").length;
    $(".timeTable tbody tr:first td.timeTable_locked:first").attr("rowspan", rows);
    $(".timeTable tbody tr:first td.timeTable_locked:first").attr("colspan", cols);
    var text = $("#form1\\:inputHidden_lockedDayText").val();
    if($.browser.msie) {
        $(".timeTable tbody tr:first td.timeTable_locked").append("<div class='lockedTextIE'>" + text + "</div>");
    } else {
        $(".timeTable tbody tr:first td.timeTable_locked").append("<div class='lockedText'>" + text + "</div>");
    }
    $(".timeTable tbody tr:not(:first) td.timeTable_locked").remove();
    $(".timeTable tbody tr:first td.timeTable_locked:not(:first)").remove();
    $(".timeTable_normal:not(:has(a))").css("background-color", "#a6a8ab");
    $(".timeTable_locked").css("background-color", "#a6a8ab");

    $(function() {
        $('.datePick').datepicker({
            firstDay: 1,
            minDate:'01/01/2008',
            dateFormat: 'dd/mm/yy'
        });
    });
    
    setHiddenField = function(value) {
        $("#form1\\:inputHidden_selectedColumn")[0].value = value;
        return true;
    }

    $(".slotGroupInfo").qtip({
        show: {
            effect: function(offset) {
                $(this).slideDown(200); // "this" refers to the tooltip
            }
        },
        hide: {
            delay: 0
        },
        style: {
            classes: 'ui-tooltip-youtube small'
        },
        content: {
            text: 'Loading ...'
        },
        events: {
            render: function(event, api) {
                var hiddenId = event.originalEvent.currentTarget.id.replace("outputText","inputHidden");

                hiddenId = hiddenId.replace(/:/g, "\\:");
                var slotGroupId = $("#" + hiddenId)[0].innerHTML;
                SlotGroupService.getSlotGroupInfo(slotGroupId, {
                    callback: function(toolTip, api) {
                        if (!toolTip) {
                            api.set('content.text', "nothing loaded");
                        } else {
                            api.set('content.text', toolTip);
                        }
                        api.show();
                    },
                    callbackArg: api,
                    exceptionHandler: errorHandler
                });
            }
        },
        position: {
            viewport: $(window)
        }
    });
        
    slots = $("#form1\\:inputHidden_slots").val();
    inputHidden_reserve_timeNotOk = $("#form1\\:inputHidden_reserve_timeNotOk").text();
    inputHidden_reserve_timeOk = $("#form1\\:inputHidden_reserve_timeOk").text();
    inputHidden_reserve_timeNotOk_toolTip = $("#form1\\:inputHidden_reserve_timeNotOk_toolTip").text();
    inputHidden_reserve_timeOk_toolTip = $("#form1\\:inputHidden_reserve_timeOk_toolTip").text();
    if (slots && !isNaN(slots)) {
        slots = new Number(slots);
        // Remove one slot. It's the one under the button itself.
        slots--;
        $(".buttonGreenTimeTable").mouseover(function() {highlighTimeSlots(this)});
        $(".buttonGreenTimeTable").mouseout(function() {unHighlighTimeSlots(this)});
    }
});

highlighTimeSlots = function(cell) {
    var cellId = $(cell).attr("id");
    // form1:dataTable:9:fifthDayReservedActionCustomer
    var nextCollonIndex = cellId.indexOf(":",16);
    var currentRow = cellId.substring(16,nextCollonIndex);
    var suffix = cellId.substr(nextCollonIndex);
    var limit = new Number(currentRow) + slots;
    var isReserved = false;
    // Check if there is at least one reserved = class is 'buttonRedTimeTable' or there is no hyperlink and calculate the number of free slots
    var availableSlots = 0;
    for (var index = currentRow; index <= 24; index++) {
        var generatedId = "#form1\\:dataTable\\:" + index + "\\" + suffix ;
        if (!$(generatedId).length || $(generatedId).hasClass("buttonRedTimeTable")) {
            if (index <= limit) {
                isReserved = true;
            }
            break;
        } else {
            availableSlots++;
        }
    }
    var tooltip = $("#form1\\:dataTable\\:" + currentRow + "\\" + suffix ).data('qtip');
    var hours = ((availableSlots-1) * 30/60) | 0;
    var minutes = (availableSlots-1) * 30 - (hours*60);
    var time = "";
    if (hours > 0) {
        time += hours;
        if (hours > 1) {
            time += " hours "
        } else {
            time += " hour "
        }
    }
    if (minutes > 0) {
        time += minutes;
        if (minutes > 1) {
            time += " minutes"
        } else {
            time += " minute"
        }
    } 
    tooltip.set('content.text', inputHidden_reserve_timeOk_toolTip + " There is potential <span style='color:#A2D054; font-size:15px !important; font-weight:bold'>space for " + time + "</span> of treatment(s). Those 'gray' extra 30 minutes at the end are for maintenace space between treatments and you will NOT be charged for those.");
   
    for (var index = currentRow; index <= limit; index++) {
        var generatedId = "#form1\\:dataTable\\:" + index + "\\" + suffix ;
        if (isReserved) {
            $(generatedId).parent().addClass("highlightCellAlert");
            $(generatedId).addClass("buttonRedTimeTableAlert");
            $(generatedId).text(inputHidden_reserve_timeNotOk);
            tooltip = $("#form1\\:dataTable\\:" + currentRow + "\\" + suffix ).data('qtip');
            tooltip.set('content.text', inputHidden_reserve_timeNotOk_toolTip);
            var onClick;
            if ($(generatedId)[0]) {
                onClick = $(generatedId)[0].onclick;
                $(generatedId)[0].onclick=function() {return false;};
            }
            $(generatedId).data("temporary",onClick);
        } else {
            if (index < limit) {
                $(generatedId).parent().addClass("highlightCell");
            } else {
                $(generatedId).parent().addClass("highlightCellShade");
            }
        }

    }
}

unHighlighTimeSlots = function(cell) {
    var cellId = $(cell).attr("id");
    // form1:dataTable:9:fifthDayReservedActionCustomer
    var nextCollonIndex = cellId.indexOf(":",16);
    var currentRow = cellId.substring(16,nextCollonIndex);
    var suffix = cellId.substr(nextCollonIndex);
    var limit = new Number(currentRow) + slots;
    var isReserved = false;
    // Check if there is at least one reserved = class is 'buttonRedTimeTable' or there is no hyperlink
    for (var index = currentRow; index <= limit; index++) {
        var generatedId = "#form1\\:dataTable\\:" + index + "\\" + suffix ;
        if (!$(generatedId).length || $(generatedId).hasClass("buttonRedTimeTable")) {
            isReserved = true;
            break;
        }
    }
    for (var index = currentRow; index <= limit; index++) {
        var generatedId = "#form1\\:dataTable\\:" + index + "\\" + suffix;
        if (isReserved) {
            $(generatedId).parent().removeClass("highlightCellAlert");
            $(generatedId).removeClass("buttonRedTimeTableAlert");
            $(generatedId).text(inputHidden_reserve_timeOk)
            $("#tooltip h3").text(inputHidden_reserve_timeOk_toolTip);
            
            var onClick = $(generatedId).data("temporary");
            if ($(generatedId)[0]) {
                $(generatedId)[0].onclick = onClick;
            }
        } else {
            if (index < limit) {
                $(generatedId).parent().removeClass("highlightCell");
            } else {
                $(generatedId).parent().removeClass("highlightCellShade");
            }
        }
    }
}




errorHandler = function(exceptionMessage, exception) {
    alert(exceptionMessage + exception);
}


resetToolTip = function() {
    $("#tooltip")[0].innerHTML = "<h3>Some tooltip</h3><div class='body' style='display: none;'/><div class='url' style='display: none;'/></div>";
}
