(function($) {

$.fn = $.extend($.fn, {
    piDialogWrapForm: function(wrapSelector) {
        return this.map(function(index, dialog) {
            var formID = dialog.id + "_form";
            $(dialog).appendTo(document.body)
                .find(wrapSelector)
                .wrap('<form id="' + formID + '" action="#"><' + '/form>');
            return $('#' + formID, dialog)[0];
        });
    }
});

$.pi = $.extend($.pi, {
    dialogOptions: function(options) {
        return $.extend({
            autoOpen: false,
            modal: true,
            resizable: false,
            autoResize: true,
            open: function() {
                $this = $(this);
                if (!options.noDefaultButton)
                    $.pi.setDefaultDialogButton($this, 'button');
                var i = $this.find('input, select').not('input[type="hidden"]').not(':hidden');
                if (i.length) 
                    $(i[0]).focus();
                var buttons = $this.parents('.ui-dialog:first').find('.ui-dialog-buttonpane');
                if (buttons.length)
                {
                    $this.css({
                        "height": ($this.height() - buttons.outerHeight() - 3) + 'px'
                    });
                }
                if (options.onOpen)
                    options.onOpen.call(this);
            },
            overlay: { 
                opacity: 0.7, 
                background: "black" 
            }
        }, options);
    },
    validateOptions: function(options) {
        return $.extend({
            valgroup: 'default',
            meta: 'v',
            errorPlacement: function(error, element) {
                var tde = element.parents('div.ed:eq(0)');
                if (tde.length)
                    tde = tde.parent();
                else
                    tde = element.parents('.e:eq(0)');

                var tdv = tde.parent().find('td.v:eq(0)');
                if (tdv.length)
                    error.appendTo(tdv);
                else {
                    error.clone().appendTo(tde.find('div.vm:eq(0)'));
                    error.appendTo(tde.find('div.vx:eq(0)'));
                }
            },
            success: function(label) {
                label.html('&nbsp;').addClass('checked');
                var tde = label.parents('div.vx:eq(0)');
                if (tde.length)
                    tde = tde.parent();
                else
                    tde = label.parents('.e:eq(0)');
                tde.find('div.vm label.error').html('').addClass('checked');
            }        
        }, options);
    },
    ajaxSubmitValidatedPopup: function(dialog, options) {
        var dialogForm = dialog.find('form');
        if (!dialogForm.length || $.data(dialogForm[0], 'submitting'))
            return;
        $.data(dialogForm[0], 'submitting', true);
        var dialogValidator = $.data(dialogForm[0], 'validator');
        var endSubmit = function() {
            $.pi.blockUndo();
            $.data(dialogForm[0], 'submitting', false);
            if (!options.ajaxCallOnly)
                dialogValidator.valgroupSettings().abortHandler = null;
        };
        
        options = $.pi.ajaxOptions($.extend({
            type: options.ajaxCallOnly ? 'GET' : 'POST',
            valgroup: 'default',
            baseZ: 2000,
            ajaxCallOnly: false,
            proceed: function(response) {
                if (options.beforeClose)
                    options.beforeClose();
                dialog.dialog('close');
                if (options.afterClose)
                    options.afterClose();
            },
            cleanup: endSubmit
        }, options));
        
        $.pi.blockTrans({baseZ: options.baseZ});
        
        if (!options.ajaxCallOnly) {
            dialogValidator.valgroup = options.valgroup;
            dialogValidator.valgroupSettings().abortHandler = endSubmit;
            dialogValidator.valgroupSettings().submitHandler = function() {
                dialogForm.ajaxSubmit(options);
            }
            dialogForm.trigger('submit');
        }
        else {
            if (options.beforeSubmit)
                options.beforeSubmit();
            $.ajax(options);
        }
    },
    iframeDialog: function(options) {
        var doc;
        var e = $('<div><iframe></iframe></div>');        
        var settings = $.extend({
            autoOpen: true,
            modal: true,
            width: '60%',
            height: '60%',
            title: $.pi.localTexts.ajaxErrorDialogTitle,
            open: function() {
                doc = e.find('iframe').css({
                    border: 'none', 
                    width: e.width(),
                    height: e.height()})[0].contentDocument;
                doc.open();
                doc.write(settings.html);
                doc.close(); 
            },
            close: function() {
                doc.open();
                doc.write('');
                doc.close();
                e.dialog("destroy").html('');
            }
        }, options);
        e.dialog(settings);
    },
    lightBoxOptions: function(options) {
        var root = $.pi.resolveUrl('~/js/jquery/images/lightbox-');
        return $.extend({
            imageLoading: root + 'ico-loading.gif',
            imageBtnPrev: root + 'btn-prev.gif',
            imageBtnNext: root + 'btn-next.gif',
            imageBtnClose: root + 'btn-close.gif',
            imageBlank: root + 'blank.gif'
        }, options);
    },
    popupEditDialog: function(options) {
        var e = $('<div><iframe></iframe></div>');
        var settings = $.extend({
            autoOpen: true,
            modal: true,
            width: '60%',
            height: '60%',
            resizable: false,
            title: '',
            open: function() {
                var f = e.find('iframe').css({
                    border: 'none',
                    width: e.width(),
                    height: e.height()
                }).attr('src', options.url);
                var $c = $(f[0].contentDocument);
                $c.ready(function() {
                });
                window.closePopupEditDialog = function() {
                }
            },
            close: function() {
                window.closePopupEditDialog = null;
            }
        }, options);
        e.dialog(settings);
    },
    tinyMCEOptions: function(options) {
        return $.extend({
            width: '400px',
            height: '250px',
        inline_styles : true,
            content_css: '../css/tinymce_content.css',
            entity_encoding: 'raw',
            mode: 'exact',
            onchange_callback: function(inst) { },
            strict_loading_mode: 'true',
            paste_remove_styles: false,
            paste_remove_spans: false,
            plugins: "style,table,advhr,advimage,advlink,preview,media,searchreplace," +
                "print,contextmenu,paste,nonbreaking,insertdatetime,inlinepopups,fullscreen",
            theme: "advanced",
            theme_advanced_toolbar_location: "top",
            theme_advanced_toolbar_align: "left",
            theme_advanced_buttons1: 
                "newdocument,|,search,replace,|,undo,redo,|,cut,copy,paste,pastetext,pasteword,|,code,cleanup,visualaid,|," +
                "link,unlink,anchor,|,charmap,nonbreaking,insertdate,inserttime,advhdr,|,image,media,",
            theme_advanced_buttons2:
                "justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist,|,sub,sup,|,outdent,indent,|,tablecontrols",
            theme_advanced_buttons3:
                "bold,italic,underline,strikethrough,|,styleprops,removeformat,|,forecolor,backcolor,|," +
                "fontselect,fontsizeselect,formatselect,|,fullscreen",
            extended_valid_elements:
                "a[name|href|target|title|onclick]," +
                "img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name]," +
                "hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]"
        }, options);
    },
    datePullDowns: function(year, month, day) {
        var y = year[0];
        y.options[0] = new Option("--", "");
        var currentYear = new Date().getFullYear();        
        for (var i = currentYear - 18; i >= currentYear - 99; i--)
          y.options[y.options.length] = new Option(i, i);
        var m = month[0];
        m.options[0] = new Option("--", "");
        for (var i = 1; i <= 12; i++)
          m.options[m.options.length] = new Option(i, i);
        var d = day[0];
        d.options[0] = new Option("--", "");
        for (var i = 1; i <= 31; i++)
          d.options[d.options.length] = new Option(i, i); 
    },
    setDefaultButton: function(container, buttonSelector) {
        container.keypress(function (e) {   
            if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
                var button = $(buttonSelector, this);
                if (button.length) {
                    $(button[0]).click();
                    return false;   
                }
            }
        });
    },
    setDefaultDialogButton: function(container, buttonSelector) {
        $.pi.setDefaultButton(container.parent().parent(), '.ui-dialog-buttonpane ' + buttonSelector);
    }
});

})(jQuery);
