(function($) {
    $.alerts.close = {'href':'', 'onclick':''};
    $.alerts.hide_speed = null;
	$.alerts._show = function(title, msg, value, type, callback){

        $.alerts._hide();
        $.alerts._overlay('show');

        close_html = '';
        if ( $.alerts.close.href.length > 0 ||  $.alerts.close.onclick.length > 0)
        {
            close_html = '<div class="close"><a href="' +
                ($.alerts.close.href.length > 0?$.alerts.close.href:'javascript: void(0);') + '"' +
                ($.alerts.close.onclick.length > 0?' onClick="' + $.alerts.close.onclick + '"':'') +
                '><img src="/images/close_big.gif" alt="Закрыть" /></a></div>';
            $.alerts.close.href = '';
            $.alerts.close.onclick = '';
        }

        $("BODY").append(
            '<div class="framed" id="popup_container">' +
                '<div class="f_tt"></div>' +
                '<div class="f_r"><div class="f_rr"></div>' +
                    '<div class="f_b"><div class="f_bb"><div></div></div>' +
                        '<div class="f_l"><div class="f_ll"><div></div></div>' +
                            '<div class="f_c">' +
                                '<div style="width: 330px;">' +
                                    close_html +
                                    '<div id="popup_message"></div>' +
                                '</div>' +
                            '</div>' +
                        '</div>' +
                    '</div>' +
                '</div>' +
            '</div>');

        if( $.alerts.dialogClass ) $("#popup_container").addClass($.alerts.dialogClass);

        // IE6 Fix
        var pos = ($.browser.msie && parseInt($.browser.version) <= 6 ) ? 'absolute' : 'fixed';

        $("#popup_container").css({
            position: pos,
            zIndex: 99999,
            padding: 0,
            margin: 0
        });

        $("#popup_title").text(title);
        $("#popup_content").addClass(type);
        $("#popup_message").text(msg);
        $("#popup_message").html( $("#popup_message").text().replace(/\n/g, '<br />') );

        $("#popup_container").css({
//            minWidth: $("#popup_container").outerWidth(),
//            maxWidth: $("#popup_container").outerWidth()
        });

        $.alerts._reposition();
        $.alerts._maintainPosition(true);

        switch( type ) {
            case 'alert':
                $("#popup_message").after('<div id="popup_panel"><input type="button" value="' + $.alerts.okButton + '" id="popup_ok" /></div>');
                $("#popup_ok").click( function() {
                    $.alerts._hideEX();
                    callback(true);
                });
                $("#popup_ok").focus().keypress( function(e) {
                    if( e.keyCode == 13 || e.keyCode == 27 ) $("#popup_ok").trigger('click');
                });
            break;
            case 'confirm':
                $("#popup_message").after('<div id="popup_panel"><input type="button" value="' + $.alerts.okButton + '" id="popup_ok" /> <input type="button" value="' + $.alerts.cancelButton + '" id="popup_cancel" /></div>');
                $("#popup_ok").click( function() {
                    $.alerts._hideEX();
                    if( callback ) callback(true);
                });
                $("#popup_cancel").click( function() {
                    $.alerts._hideEX();
                    if( callback ) callback(false);
                });
                $("#popup_ok").focus();
                $("#popup_ok, #popup_cancel").keypress( function(e) {
                    if( e.keyCode == 13 ) $("#popup_ok").trigger('click');
                    if( e.keyCode == 27 ) $("#popup_cancel").trigger('click');
                });
            break;
            case 'prompt':
                $("#popup_message").append('<br /><input type="text" size="30" id="popup_prompt" />').after('<div id="popup_panel"><input type="button" value="' + $.alerts.okButton + '" id="popup_ok" /> <input type="button" value="' + $.alerts.cancelButton + '" id="popup_cancel" /></div>');
                $("#popup_prompt").width( $("#popup_message").width() );
                $("#popup_ok").click( function() {
                    var val = $("#popup_prompt").val();
                    $.alerts._hideEX();
                    if( callback ) callback( val );
                });
                $("#popup_cancel").click( function() {
                    $.alerts._hideEX();
                    if( callback ) callback( null );
                });
                $("#popup_prompt, #popup_ok, #popup_cancel").keypress( function(e) {
                    if( e.keyCode == 13 ) $("#popup_ok").trigger('click');
                    if( e.keyCode == 27 ) $("#popup_cancel").trigger('click');
                });
                if( value ) $("#popup_prompt").val(value);
                $("#popup_prompt").focus().select();
            break;
        }

        // Make draggable
        if( $.alerts.draggable ) {
            try {
                $("#popup_container").draggable({ handle: $("#popup_title") });
                $("#popup_title").css({ cursor: 'move' });
            } catch(e) { /* requires jQuery UI draggables */ }
        }
	};
    $.alerts._reposition = function() {
			// fix wrong window.height for opera/jquery combination
			var height = $.browser.opera && $.browser.version > "9.5" && $.fn.jquery <= "1.2.6" ? document.documentElement.clientHeight : $(window).height();
			var top = ((height / 2) - ($("#popup_container").outerHeight() / 2)) + $.alerts.verticalOffset;
			var left = (( $(window).width() / 2) - ($("#popup_container").outerWidth() / 2)) + $.alerts.horizontalOffset;
			if( top < 0 ) top = 0;
			if( left < 0 ) left = 0;
			/* fix non-decimal px problem */
			top = Math.floor(top)
			left=  Math.floor(left)
			// IE6 fix
			if( $.browser.msie && parseInt($.browser.version) <= 6 ) top = top + $(window).scrollTop();
			$("#popup_container").css({
				top: top + 'px',
				left: left + 'px'
			});
			$("#popup_overlay").height( $(document).height() );
    }
    $.alerts._hideEX = function()
    {
        if ($.alerts.hide_speed != null)
        {
            if
            (
                $.alerts.hide_speed == "slow" ||
                $.alerts.hide_speed == "normal" ||
                $.alerts.hide_speed == "fast"
            )
            {
                $('#popup_container').hide($.alerts.hide_speed, function(){
                    $.alerts._hide();
                });
                return true;
            }
        }
        $.alerts._hide();
    }

    $.alerts._config = function(params){
        if (params!= null && typeof(params) == 'object')
        {
            if (typeof(params.close_href) == 'string')
                $.alerts.close.href = params.close_href;
            if (typeof(params.hide_speed) == 'string')
                $.alerts.hide_speed = params.hide_speed;

            if (params.close == true)
                $.alerts.close.onclick = 'lvHideDWindow();';
            else if (typeof(params.close_onclick) == 'string')
                $.alerts.close.onclick = params.close_onclick;
            
            if (typeof(params.okButton) == 'string')
               $.alerts.okButton = params.okButton;
            if (typeof(params.cancelButton) == 'string')
               $.alerts.cancelButton = params.cancelButton;

        }
    }

	// Shortuct functions
	lvAlert = function(message, params, callback)
    {
        $.alerts._config(params);
		$.alerts.alert(message, null, callback);
	}

	lvConfirm = function(message, params,  callback)
    {
        $.alerts._config(params);
		$.alerts.confirm(message, null, callback);
	};

	lvPrompt = function(message, value, params, callback)
    {
        $.alerts._config(params);
		$.alerts.prompt(message, value, null, callback);
	};

	lvHideDWindow = function(speed)
    {
        if (typeof(speed) != 'undefined' && speed != null)
        {
            $.alerts.hide_speed = speed;
        }
        $.alerts._hideEX();
	}
})(jQuery);