﻿/* jquery utility functions */

function ui2_submitForm_jquery(elementWrapper) {
    ui2_findEnclosingForm_jquery(elementWrapper).submit();
}

function ui2_submitAjaxForm_jquery(elementWrapper, ajaxControlTag, replaceID) {
    var waitWindow = $('#ajaxWait');
    if (waitWindow) {
        waitWindow.jqmShow();
    }

    ui2_tooltip_hide_jquery();
    //    $('#'+replaceID).fadeTo(1, 0.2);
    $('*').unbind();

    ui2_findEnclosingForm_jquery(elementWrapper).ajaxSubmit(
        {
            url: ui2_findEnclosingForm_jquery(elementWrapper).attr("action") + '?_ajaxtarget=' + ajaxControlTag + '&_ajaxrequest=true',
            target: $('#' + replaceID),
            complete: function() {
                //                $('#'+replaceID).fadeTo('normal', 1);
                if (waitWindow) {
                    waitWindow.jqmHide();
                }
            }
        }
    );
}

function ui2_submitFormWithInformationCopy_jquery(elementWrapper, informationElementID, sourceElementID) {
    $("#" + informationElementID).val($("#" + sourceElementID).val());
    ui2_submitForm_jquery(elementWrapper);
}

function ui2_submitFormWithInformation_jquery(elementWrapper, informationElementID, information) {
    $("#" + informationElementID).val(information);
    ui2_submitForm_jquery(elementWrapper);
}

function ui2_submitFormForExport_jquery(elementWrapper, informationElementID, information) {

    var originalTarget = ui2_findEnclosingForm_jquery(elementWrapper).attr("target");
    if (originalTarget == "_self")  // If the form's target is _self, change the target to blank else exports wont work
    {
        ui2_findEnclosingForm_jquery(elementWrapper).attr("target", "_blank");
    }
    ui2_submitFormWithInformation_jquery(elementWrapper, informationElementID, information);
    $('#' + informationElementID + '').val("");  //reset the hidden input value so that it doesnt get re-submitted on the next submit
    if (originalTarget != "") // reset the original target if a target was found
    {
        ui2_findEnclosingForm_jquery(elementWrapper).attr("target", originalTarget);
    }
}

function ui2_submitAjaxFormWithInformation_jquery(elementWrapper, informationElementID, information, ajaxControlTag, replaceID) {
    $("#" + informationElementID).val(information);
    ui2_submitAjaxForm_jquery(elementWrapper, ajaxControlTag, replaceID);
}

function ui2_findEnclosingElement_jquery(elementWrapper, tagName) {
    return elementWrapper.parents(tagName + ":first");
}

function ui2_findEnclosingForm_jquery(elementWrapper) {
    return ui2_findEnclosingElement_jquery(elementWrapper, "FORM");
}

function ui2_toggleDropDown_jquery(elementWrapper, toToggleID, dropDownBelowID) {

    var dropDownBelowWrapper = $('#' + dropDownBelowID);
    var dropDownWrapper = $('#' + toToggleID);
    var dropDownBelowPosition = dropDownBelowWrapper.position();
    var left = dropDownBelowPosition.left;
    var dropDownWrapperWidth = dropDownWrapper.outerWidth();
    var windowWidth = $('body').width();
    var top = dropDownBelowWrapper.outerHeight() + dropDownBelowPosition.top;

    // IFRAME 'Shim' for IE6, allows dropdowns to be 'ontop' of windowed controls (such as <select>'s)
    if ($.browser.msie && parseInt($.browser.version) < 7 && $(dropDownWrapper).html().toString().search(/IFRAME/) == -1) {
        //show the 'drop down menu' off screen to be able to get it's real height/width
        $(dropDownWrapper).css("left", "-1000px");
        $(dropDownWrapper).show();
        var height = $(dropDownWrapper).height();
        var width = $(dropDownWrapper).width();
        //If theres an apply button (column selection popup) within the dropdown extend height of iframe to include it
        if ($('#' + toToggleID + '  div.column_selector_apply_button_container').html() != null) {
            height = height + $('#' + toToggleID + '  div.column_selector_apply_button_container').height()
                               + parseInt($('#' + toToggleID + '  div.column_selector_apply_button_container').css("margin"))
                               + parseInt($('#' + toToggleID + '  div.column_selector_apply_button_container').css("padding"))
                               + 2; //allow for borders
        }
        //Hide the dropdown again as we no longer need it. .toggle() will re-show it in the correct position later
        $(dropDownWrapper).hide();
        //create the IFRAME shim, and append it to the dropdown
        var iFrameShim = '<iframe style="WIDTH:' + width + ';HEIGHT:' + height + ';DISPLAY: block; FILTER: mask();POSITION: absolute;TOP: 0px; LEFT:0px; Z-INDEX:-1;" src="javascript:false;" ></iframe>';
        $(dropDownWrapper).append(iFrameShim);
    }

    dropDownWrapper.css("top", top + "px");
    dropDownWrapper.css("left", left + "px");

    //-- now work out if the div is to the right of the window, and if it is adjust it.    
    var dropDownOffset = dropDownBelowWrapper.offset();
    if (dropDownOffset.left + dropDownWrapperWidth > windowWidth) {
        left += (windowWidth - (dropDownOffset.left + dropDownWrapperWidth));
        dropDownWrapper.css("left", left + "px");
    }
    dropDownWrapper.toggle("normal");
}

function isPositioned(elementWrapper) {
    var positioned = false;
    if ((elementWrapper.css("position") == 'relative') || (elementWrapper.css("position") == 'absolute')) {
        positioned = true;
    }
    return positioned;
}


function toggleEnumerationDropDown_jquery(elementWrapper, toToggleID, dropDownBelowID, textElementID, checkboxname) {
    ui2_toggleDropDown_jquery(elementWrapper, toToggleID, dropDownBelowID);
    setEnumerationDropDownDescription_jquery(elementWrapper, toToggleID, dropDownBelowID, textElementID, checkboxname);
}

function hideEnumerationDropDownOnExternalClick_jquery(elementWrapper, dropDownID, dropDownBelowID, textElementID, checkboxname) {
    var divToCheck = $('#' + dropDownID);
    if ((elementWrapper.parents('#' + dropDownID).length == 0) &&
		    (elementWrapper[0] != divToCheck[0]) &&
		    (divToCheck.is(':visible'))) {
        divToCheck.hide();
        setEnumerationDropDownDescription_jquery(elementWrapper, dropDownID, dropDownBelowID, textElementID, checkboxname);
    }

}

function setEnumerationDropDownDescription_jquery(elementWrapper, toToggleID, dropDownBelowID, textElementID, checkboxname) {
    var checkedBoxes = $('input[name=' + checkboxname + ']:checked');
    var allBoxes = $('input[name=' + checkboxname + ']');
    var firstCheckedBox = $('input[name=' + checkboxname + ']:checked:first');
    var firstCheckedBoxParent = $(firstCheckedBox.parent());
    var selectionCount = checkedBoxes.size();

    var text = firstCheckedBoxParent.attr('innerText');
    if (!text) {
        text = firstCheckedBoxParent.attr('textContent');
    }

    if (selectionCount == allBoxes.size()) {
        buttonText = "All selected";
    }
    else if (selectionCount == 1) {
        buttonText = text;
    }
    else {
        buttonText = selectionCount.toString() + " selected";
    }
    $('#' + textElementID).attr('innerHTML', buttonText);
}

function toggleFlexibleTextFilterValue2Div_jquery(selectControlWrapper, value2DivId) {
    if (selectControlWrapper.val() == 32) /* 32 is the enum value for between */
    {
        $('#' + value2DivId).show();
    }
    else {
        $('#' + value2DivId).hide();
    }
}


function toggleFlexibleDateFilterValue1Div_jquery(selectControlWrapper, value1DivId) {
    if (selectControlWrapper.val() >= 128) /* 128 and above are the enums value for Today, Tomorrow etc. */
    {
        $('#' + value1DivId).hide();
    }
    else {
        $('#' + value1DivId).show();
    }
}

function toggleFlexibleDateFilterValue2Div_jquery(selectControlWrapper, value2DivId) {
    if (selectControlWrapper.val() == 32) /* 32 is the enum value for between */
    {
        $('#' + value2DivId).show();
    }
    else {
        $('#' + value2DivId).hide();
    }
}

function ui2_togglePane(eventElementWrapper) {
    eventElementWrapper.parent().siblings('div.panebody').toggle();
}

function ui2_toggleSimplePane(eventElementWrapper) {
    eventElementWrapper.parent().siblings('span.simple_pane_body').toggle();
    eventElementWrapper.toggleClass("simple_pane_titlebar_button_shown");
    eventElementWrapper.toggleClass("simple_pane_titlebar_button_collapsed");

    if (eventElementWrapper.parent().siblings('span.simple_pane_body').is(":hidden")) {
        eventElementWrapper.siblings('.panestate').val('collapsed');
    }
    else {
        eventElementWrapper.siblings('.panestate').val('shown');
    }
}

function ui2_HideOnExternalClick(elementWrapper, divID) {
    var divToCheck = $('#' + divID);
    if ((elementWrapper.parents('#' + divID).length == 0) &&
		    (elementWrapper[0] != divToCheck[0]) &&
		    (divToCheck.is(':visible'))) {
        divToCheck.hide();
    }
}


function toggleFlexibleIntFilterValue1Div_jquery(selectControlWrapper, value1DivId) {
    if (selectControlWrapper.val() >= 128) /* 128 and above are the enums value for Today, Tomorrow etc. */
    {
        $('#' + value1DivId).hide();
    }
    else {
        $('#' + value1DivId).show();
    }
}

function toggleFlexibleIntFilterValue2Div_jquery(selectControlWrapper, value2DivId) {
    if (selectControlWrapper.val() == 32) /* 32 is the enum value for between */
    {
        $('#' + value2DivId).show();
    }
    else {
        $('#' + value2DivId).hide();
    }
}

function ui2_EnumeratorFilterToggleOptions(elementWrapper, parentid) {
    var CheckboxCollection = $('#' + parentid + ' input[type=checkbox]');

    if (elementWrapper.val() == '__any__') {
        if (elementWrapper.attr('checked') == true) {
            CheckboxCollection.attr('checked', true);
        }
        else {
            CheckboxCollection.attr('checked', false);
        }
    }
    else {
        if (elementWrapper.attr('checked') == false) {
            CheckboxCollection.each(function() {
                if ($(this).val() == '__any__') {
                    $(this).attr('checked', false);
                }
            })
        }
    }

}
function ui2_tooltip_show_jquery(eventElementWrapper, tooltipText) {
    xOffset = 5;
    yOffset = 25;

    ui2_tooltip_show_and_position_jquery(eventElementWrapper, tooltipText, xOffset, yOffset);
}

function ui2_tooltip_show_and_position_jquery(eventElementWrapper, tooltipText, xOffset, yOffset) {
    $("body").append("<div id='tooltip'><div>" + tooltipText + "</div></div>");

    //only require visible part of screen
    var BodyWidth = $("#body").width() - $(window).scrollLeft();
    var xPaddingAllowance = 15;
    var yPaddingAllowance = 15;

    var WindowHeight = $(window).height();
    var WindowWidth = $(window).width();
    var WindowScrollTop = $(window).scrollTop();

    var TooltipWidth = $("#tooltip").width() + xPaddingAllowance;
    var TooltipHeight = $("#tooltip").height();
    var FullTooltipHeight = TooltipHeight + yOffset + yPaddingAllowance;

    /* Check that we're not going to fall off the right edge of the screen */
    if (BodyWidth > 0) {
        XOverhang = (eventElementWrapper.pageX + xOffset + TooltipWidth + xPaddingAllowance) - BodyWidth;
    }
    else {
        XOverhang = (eventElementWrapper.pageX + xOffset + TooltipWidth + xPaddingAllowance) - WindowWidth;  // work around for popup windows
    }
    if (XOverhang > 0) {
        xOffset -= XOverhang;
    }

    /* Check that we're not going to fall off the left edge of the screen */
    XOverhang = eventElementWrapper.pageX + xOffset - xPaddingAllowance;
    if (XOverhang < 0) {
        xOffset -= XOverhang;
    }

    /* Check we're within the confines of the top and bottom of the available screen */
    var YOverHang = (eventElementWrapper.pageY - (WindowHeight + WindowScrollTop)) + FullTooltipHeight;

    if (YOverHang > 0) {
        //move the tip above the mouse
        yOffset -= yOffset + FullTooltipHeight;
    }

    /*Only block display when we have the room to do so - give it a margin of double the  padding allowance to be sure*/
    if (WindowWidth > (TooltipWidth + (xPaddingAllowance * 2))) {
        $("#tooltip").css("white-space", "nowrap");
    }
    else {
        $("#tooltip").css("width", WindowWidth - (xPaddingAllowance * 2) + "px");
    }

    // IFRAME 'Shim' for IE6, allows tooltips to be 'ontop' of windowed controls (such as <select>'s)
    if ($.browser.msie && parseInt($.browser.version) < 7) {
        //Get the actual hight and width of the tooltip div so iframe shim's size can be exactly matched to it.
        //Also add 2px to each to allow for -1px TOP and LEFT positioning of iframe to account for border's
        var shimHeight = $("#tooltip").height() + parseInt($("#tooltip").css("padding-top")) + parseInt($("#tooltip").css("padding-bottom")) + 2;
        var shimWidth = $("#tooltip").width() + parseInt($("#tooltip").css("padding-left")) + parseInt($("#tooltip").css("padding-right")) + 2;
        var iFrameShim = '<iframe id="tooltipShim" style="WIDTH:' + shimWidth + 'px; HEIGHT:' + shimHeight + 'px; TOP:-1px; LEFT:-1px; DISPLAY: block; FILTER: mask();POSITION: absolute;Z-INDEX:-1;" src="javascript:false;" ></iframe>';
        $("#tooltip").append(iFrameShim);
    }

    $("#tooltip").css("top", eventElementWrapper.pageY + yOffset + "px")
                 .css("left", eventElementWrapper.pageX + xOffset + "px")
                 .fadeIn("fast");
}

function ui2_tooltip_hide_jquery() {
    $("#tooltip").remove();
    if ($("#tooltipShim #tooltipShim")) {
        $("#tooltipShim").remove();
    }
    /*$("#tooltipdebug").remove();*/
}

function togglePartialDateFilterValue1Div_jquery(selectControlWrapper, value1DivId) {
    if (selectControlWrapper.val() >= 128) /* 128 and above are the enums value for Today, Tomorrow etc. */
    {
        $('#' + value1DivId).hide();
    }
    else {
        $('#' + value1DivId).show();
    }
}

function togglePartialDateFilterValue2Div_jquery(selectControlWrapper, value2DivId) {
    if (selectControlWrapper.val() == 32) /* 32 is the enum value for between */
    {
        $('#' + value2DivId).show();
    }
    else {
        $('#' + value2DivId).hide();
    }
}

function calculateYearWithCutoff(selectControlWrapper, cutoffValue) {

    var yearValue = parseInt(selectControlWrapper.val(), 10);

    if (yearValue > 0 && yearValue < 100) {
        if (yearValue > cutoffValue) {
            selectControlWrapper.val(1900 + yearValue);
        } else {
            selectControlWrapper.val(2000 + yearValue);
        }
    }
}

function ManageEnumerationSingleSelectCheckbox(AlteredCheckbox, allowsnull) {
    // Select all other checked boxes with the same name as the control
    var checkedBoxes = $('input[name=' + AlteredCheckbox.name + ']:checked');

    if (checkedBoxes.length == 0 && !AlteredCheckbox.checked && !allowsnull) {
        //
        //  Reselect/tick the checkbox being altered when
        //      . There are no checkboxes selected
        //      . The control triggering the function is not selected
        //      . AllowsNull is false
        //
        //  This prevents the user from de-selecting all the boxes when the control doesn't allow nulls
        //
        AlteredCheckbox.checked = true;
    }
    else {
        checkedBoxes.each(
        function() {
            if (AlteredCheckbox != this) {
                // Untick the box
                this.checked = false;
            }
        }
        );
    }
}


// START - GPLOneToManyFieldControl Scripts
var OneToManyReloadingPage = false;

function OneToMany_MoveItem(RemoveButtonWrapper, HiddenTagListGroup) {
    var o = RemoveButtonWrapper.parents('.one_to_many_item_container');
    var l = $('#' + HiddenTagListGroup).each
                    (
                        function(n) {
                            if (this.value != '') this.value += ',';
                            this.value += o.attr('id');
                        }
                    );
    o.attr('DeletedItem', 'true');
    o.parent().hide();
}

function OnetoMany_AddItem(elementWrapper, HiddenFieldGroupDivID) {
    var firstHidden;
    //Unhide the first hidden one_to_many_single_row span that isn't a Deleted Item
    for (i = 0; i < $('#' + HiddenFieldGroupDivID).children().length; i++) {
        if ($($('#' + HiddenFieldGroupDivID).children()[i]).css('display') == "none") {
            if ($($('#' + HiddenFieldGroupDivID).children()[i]).find('span[DeletedItem]').length == 0) {
                firstHidden = i;
                break;
            }
        }
    }
    if (firstHidden != null) {
        $($('#' + HiddenFieldGroupDivID).children()[firstHidden]).show();
        $($($('#' + HiddenFieldGroupDivID).children()[firstHidden]).children('input')[0]).val('true');
    } else {
        var l = $('#' + elementWrapper).val('clicked');
        OneToManyReloadingPage = true;
        $('#forcepageexitalerts').val("1");
        ui2_submitForm_jquery(l);
    }
}
// END - GPLOneToManyFieldControl Scripts