﻿
function applyFormBlockFocusBehaviour(selector) {
    $(selector).find(':input').focus(function() {
        $(document).find('.curFocus').removeClass('curFocus');
        $(this).closest('.formRow').addClass('curFocus');
    });
    $(selector).find(':input').blur(function() {
        $(this).closest('.formRow').removeClass('curFocus');
    }); 
}

function applyDateInputBehaviour(selector, args) {
    $(selector).datepicker({
        showOn: 'button',
        buttonImage: args.imgPath,
        buttonImageOnly: true,
        dateFormat: 'd MM yy',
        constrainInput: false,
        showAnim: 'slideDown',
        changeMonth: true,
        changeYear: true,
        monthNames: args.monthNames,
        monthNamesShort: args.monthNamesShort,
        dayNames: args.dayNames,
        dayNamesShort: args.dayNamesShort,
        dayNamesMin: args.dayNamesMin,
        minDate: args.minDate,
        yearRange: args.yearRange
    });

    $(selector).keyup(function (event) {
        switch (event.keyCode) {
            case 9:
            case 13:
            case 27:
            case 33:
            case 34:
            case 35:
            case 36:
            case 37:
            case 38:
            case 39:
            case 40:
                break;
            default: $(selector).datepicker('hide');
        }
        switch (event.keyCode) {
            case 13:
                if ($('.ui-datepicker').css('display') != 'block') {
                    var gotValidDate = false;
                    var newDate = '';
                    var supportedFormats = new Array('d MM yy', 'd M yy', 'd-mm-yy', 'd/mm/yy', 'yy-mm-dd', 'yy/mm/dd');
                    var counter = 0;

                    while (counter < supportedFormats.length && !gotValidDate) {
                        try {
                            var format = supportedFormats[counter];
                            var theDate = $(this).val().toLowerCase();
                            for (var c = 0; c < theDate.length; c++) {                                
                                if (theDate[c] >= 'a' && theDate[c] <= 'z') {
                                    theDate = theDate.substring(0, c) + theDate[c].toUpperCase() + theDate.substring(c + 1);                                    
                                    break;
                                }
                            }
                            newDate = $.datepicker.parseDate(format, theDate);
                            if (newDate.getFullYear() > 1000 && newDate.getFullYear() < (new Date().getFullYear() + 1000)) {
                                gotValidDate = true;
                            }
                        }
                        catch (e) { }
                        counter++;
                    }
                    if (gotValidDate) {
                        $(this).datepicker('setDate', newDate);
                    }
                }

        }
    });
    $(selector).blur(function (event) {

        if ($('.ui-datepicker').css('display') != 'block') {
            var gotValidDate = false;
            var newDate = '';
            var supportedFormats = new Array('d MM yy', 'd M yy', 'd-mm-yy', 'd/mm/yy', 'yy-mm-dd', 'yy/mm/dd');
            var counter = 0;

            while (counter < supportedFormats.length && !gotValidDate) {
                try {
                    var format = supportedFormats[counter];
                    var theDate = $(this).val().toLowerCase();
                    for (var c = 0; c < theDate.length; c++) {

                        if (theDate[c] >= 'a' && theDate[c] <= 'z') {
                            theDate = theDate.substring(0, c) + theDate[c].toUpperCase() + theDate.substring(c + 1);                            
                            break;
                        }
                    }


                    newDate = $.datepicker.parseDate(format, theDate);
                    if (newDate.getFullYear() > 1000 && newDate.getFullYear() < (new Date().getFullYear() + 1000)) {
                        gotValidDate = true;
                    }
                }
                catch (e) { }
                counter++;
            }
            if (gotValidDate) {
                $(this).datepicker('setDate', newDate);
            }
        }

    });
}

function applyViewSubMenuBehaviour(optionSelector, subMenuSelector) {
    $(optionSelector).click(function() {
        $('.pageViewMenuOptionsContainer_subMenu').css('display', 'none');
        $('.pageViewMenuOptionWithSub_selected').removeClass('pageViewMenuOptionWithSub_selected');
        $(this).closest('li').addClass('pageViewMenuOptionWithSub_selected');
        $(subMenuSelector).css('display', 'block');
        $(subMenuSelector).css('top', $(this).offset().top);
        $(subMenuSelector).css('left', $(this).offset().left + $(this).outerWidth() + 2);
        return false;
    });
}

function applyViewMenuCloseBehaviour() {
    $(document).click(function() {
        if ($(this).closest('.pageViewMenuOptionsContainer').length == 0) {
            $('.pageViewMenuHeader_selected').removeClass('pageViewMenuHeader_selected');
            $('.pageViewMenuOptionWithSub_selected').removeClass('pageViewMenuOptionWithSub_selected');
            $('.pageViewMenuOptionsContainer').css('display', 'none');
        }
    });
}

function applyViewMenuHeaderArrowBehaviour(selector) {
    $(selector).click(
        function() {
            var boxId = this.id.replace('pageViewMenuHeaderArrow_', 'pageViewMenuHeader_');
            var optsId = this.id.replace('pageViewMenuHeaderArrow_', 'pageViewMenuOptionsContainer_');

            var box = $('#' + boxId);
            var opts = $('#' + optsId);

            if (opts.css('display') != 'block') {

                $('.pageViewMenuHeader_selected').removeClass('pageViewMenuHeader_selected');
                $('.pageViewMenuOptionsContainer').css('display', 'none');

                box.addClass('pageViewMenuHeader_selected');

                var o = box.offset();
                opts.css('top', o.top + box.outerHeight());
                opts.css('left', o.left);

                if (opts.outerWidth() + 10 < box.outerWidth()) {
                    opts.css('width', box.outerWidth() + 10);
                }

                opts.css('display', 'block');

                return false;
            }
            return true;
        });
}

function applyIconRowBehaviour(selector) {
    $(selector).hover(
        function() {
            $(this).find('img').animate({ height: '100%', width: '100%' }, 500);
        },
        function() {
            $(this).find('img').animate({ height: '85%', width: '85%' }, 250);
        }
    );
    $(selector).click(
        function() {
            window.open($(this).find('a').attr('href'), '_self');
        }
    );
}

function loadAjaxContent(containerId, url) {
    if ($("#" + containerId).length == 1) {
        loadAjaxPrep(containerId);
        $("#" + containerId).load(url);
    }
}

function loadAjaxPrep(containerId) {
    hideNonBlockMessages();
    applyBlockOverlay(getClosestBlockId(containerId));
}

function hideNonBlockMessages() {
    $('#pageMessages .actionMessageContainer').parent().slideUp();
}

function getClosestBlockId(id) {

    var o = $("#" + id).closest("div.pageBlockContent");
    if (o.length > 0)
        return o[0].id.replace("_pageBlock", "");
    return "";    
}

function applyBlockOverlay(blockId) {
    var contentSelector = "#" + blockId + "_pageBlock";
    var overlaySelector = "#" + blockId + "_pageBlockOverlay";
    var loadingSelector = "#" + blockId + "_pageBlockLoading";

    var contentHeight = $(contentSelector).outerHeight();
    var loadingHeight = $(loadingSelector).outerHeight();

    if (loadingHeight + 20 > contentHeight) {
        $(contentSelector).height(loadingHeight + 10);
    }

    var heightDiff = $(contentSelector).outerHeight() - $(overlaySelector).outerHeight();
    var widthDiff = $(contentSelector).outerWidth() - $(overlaySelector).outerWidth();

    var newOverlayHeight = $(overlaySelector).height() + heightDiff;
    var newOverlayWidth = $(overlaySelector).width() + widthDiff;

    $(overlaySelector).css("height", newOverlayHeight);
    $(overlaySelector).css("width", newOverlayWidth);
        
    $(overlaySelector).css("display", "block");
    $(loadingSelector).css("display", "block");
}

function removeBlockOverlay(blockId) {
    var contentSelector = "#" + blockId + "_pageBlock";
    var overlaySelector = "#" + blockId + "_pageBlockOverlay";
    var loadingSelector = "#" + blockId + "_pageBlockLoading";
    $(overlaySelector).css("display", "none");
    $(loadingSelector).css("display", "none");
    $(contentSelector).css('height','auto');
}





function getEventTarget(evt) {
    if (evt.target)
        return evt.target;
    else
        return evt.srcElement;
}

function toggleGridRow(evt) {

    var target = getEventTarget(evt);

    var selectRow = false;
    var oRow = $(target).closest("table.gridTable tr");
    var oInput = $(oRow).find("td.selector input");

    switch (target.tagName.toLowerCase()) {
        case "a":
            break;
        case "input":
            if (oInput.length > 0) {
                if (oInput[0] == target) {
                    selectRow = true;
                }
            }
            break;
        default:
            selectRow = true;
    }

    if (selectRow) {
        if (oInput.length > 0) {
            if (oInput[0] != target) {
                if (oInput.attr("checked")) {
                    oInput.attr("checked", false);
                }
                else {
                    oInput.attr("checked", true);
                }
            }
        }

        var oCount = $(oRow).closest("div.pageBlockContent").find("div.selectedRows span.value");

        if (oInput.attr("checked")) {
            $(oRow).find("td.evenRow, td.oddRow").addClass("selected");
            oCount.html(parseInt(oCount.html()) + 1);
            
            if (oInput.attr("type") == "radio") {
                $(oRow).siblings().find("td.evenRow, td.oddRow").removeClass("selected");
            }
        }
        else {
            $(oRow).find("td.evenRow, td.oddRow").removeClass("selected");
            oCount.html(parseInt(oCount.html()) - 1);
        }
    }
}
