﻿jQuery.fn.itemCount = function () {

    return $(this).children("option").length;

}

jQuery.fn.addOption = function (value, text) {

    var dropDown = $(this);
    dropDown.append($("<option></option>").val(value).html(text));

}

jQuery.fn.clearOptions = function (keepFirst) {

    var dropDown = $(this);
    if (keepFirst) {
        dropDown.children("option").not(dropDown.children("option").eq(0)).remove();
    }
    else {
        dropDown.children("option").remove();
    }

}

jQuery.fn.populateDropdown = function (items) {

    var dropDown = $(this);

    dropDown.clearOptions(true);

    var i = 0;
    for (i = 0; i < items.length; i++) {
        dropDown.addOption(items[i].id, items[i].caption);
    }
}

jQuery.fn.hasAttr = function (attribute) {

    var attr = $(this).attr(attribute);

    // For some browsers, `attr` is undefined; for others,
    // `attr` is false.  Check for both.
    if (typeof attr !== 'undefined' && attr !== false) {
        return false;
    }
    else {
        return true;
    }

}

jQuery.fn.closeDialog = function () {

    var trigger = $(this);

    var data = trigger.metadata();
    var dialogId = data.dialogid;

    var dialogContainer = parent.$("#" + dialogId);
    if (dialogContainer.length > 0) {
        dialogContainer.dialog("close");
        dialogContainer.remove();
    }

}

jQuery.fn.openDialog = function (isModal, modalColor) {

    var link = $(this);

    var data = link.metadata();
    var url = data.url;
    var width = data.width;
    var height = data.height;
    var title = data.title;
    var id = data.guid;
    var showLogo = data.showlogo;

    var dialogContainer = $("#" + id);
    if (dialogContainer.length > 0) {

        dialogContainer.dialog("open");

    }
    else {

        var form = $("form");

        dialogContainer = $("<div></div>");
        dialogContainer.attr("class", "dialog-container");
        dialogContainer.attr("id", id);

        var iframe = $("<iframe></iframe>");
        iframe.attr("src", url);
        iframe.attr("width", width);
        iframe.attr("height", height);
        iframe.attr("frameborder", "0");
        iframe.css("border", "0px");
        iframe.css("margin", "0px");
        iframe.css("padding", "0px");
        iframe.attr("scrolling", "auto");
        iframe.attr("allowtransparency", "true");

        iframe.appendTo(dialogContainer);

        dialogContainer.appendTo(form);
        dialogContainer.resizeDialog();

        dialogContainer.dialog({
            modal: isModal,
            width: width,
            height: height,
            resizable: false,
            draggable: true,
            dialogClass: 'dialog-shadow',
            close: function (event, ui) { $(this).remove(); },
            title: title
        });

    }

    if (isModal) {
        var overlay = $("div.ui-widget-overlay");
        if (overlay.length > 0) {
            overlay.css({ "background-color": modalColor, "opacity": 0.7 });
        }
    }

    var titleBar = dialogContainer.parents("div.ui-dialog").find("div.ui-dialog-titlebar");
    if (showLogo) {
        titleBar.addClass("ui-dialog-titlebar-logo");
    }
    else {
        titleBar.removeClass("ui-dialog-titlebar-logo");
    }

}

jQuery.fn.resizeDialog = function () {

    var dialogContainer = $(this);

    var iframe = dialogContainer.find("iframe");

    var windowHeight = $(window).height() - 100;
    var newHeight = windowHeight;

    try {
        iframe.load(function () {
            var iframeBody = iframe.contents().find("body");
            if (iframeBody.length > 0) {
                var docHeight = iframeBody.height();
                newHeight = docHeight;
                if (windowHeight < docHeight) newHeight = windowHeight;
            }
            //alert("new-inner:" + newHeight + ", docheight: " + docHeight + ", windowheight: " + windowHeight);

            dialogContainer.dialog().css({ height: newHeight + "px" });
            dialogContainer.dialog("option", "position", "center");
            iframe.attr("height", newHeight);
        });
    } catch (err) {
        newHeight = windowHeight;
    }

}

jQuery.fn.errorHighlight = function (isError) {

    var fieldWrapper = $(this);
    if (fieldWrapper.is("select")) fieldWrapper = fieldWrapper.parents("span.rounded-select-field, span.rounded-select-field-error");
    if (fieldWrapper.is("input")) fieldWrapper = fieldWrapper.parents("span.rounded-textfield, span.rounded-textfield-error");

    if (fieldWrapper.length == 1 && fieldWrapper.is("span")) {

        var isDropDown = fieldWrapper.find("select").length == 1;

        var cssClass = isDropDown ? "rounded-select-field" : "rounded-textfield";
        var cssClassError = cssClass + "-error";

        if (isError) {
            fieldWrapper.removeClass(cssClass);
            fieldWrapper.addClass(cssClassError);
        }
        else {
            fieldWrapper.removeClass(cssClassError);
            fieldWrapper.addClass(cssClass);
        }
    }
}

