$.extend($.ui.dialog.prototype, {
        'addbutton': function(buttonName, func) {
                var buttons = this.element.dialog('option', 'buttons');
                buttons[buttonName] = func;
                this.element.dialog('option', 'buttons', buttons);
        }
});

$.extend($.ui.dialog.prototype, {
        'removebutton': function(buttonName) {
                var buttons = this.element.dialog('option', 'buttons');
                delete buttons[buttonName];
                this.element.dialog('option', 'buttons', buttons);
        }
}); 

var ControleJanelas = {
	autoId 		: 0,
	
	janelas : [],
	janelasAtivas : 0,	
	barStatus	: false,
	
	elementAppend : 'body',	
	
	checkShowBar : function()
	{
		if(ControleJanelas.janelasAtivas > 0 && !ControleJanelas.barStatus)
		{
			$('#aix_controle_janela').show();
			$('#aix_controle_janela').effect('highlight');
			ControleJanelas.barStatus = true;
		}
		else if(ControleJanelas.janelasAtivas <= 0 && ControleJanelas.barStatus)
		{
			$('#aix_controle_janela').hide();
			ControleJanelas.barStatus = false;
		}
	},
	
	addWindow : function(titulo, corpo, options, id)
	{
		options = options || {};
		ControleJanelas.autoId++;		
		var id = id || 'janela'+ControleJanelas.autoId;
		
		var janela = new AIX_Window(id, titulo, corpo, options);
		janela.initialize();
		ControleJanelas.janelas[id] = janela;		

		return id;
	},
	
	addCrudWindow : function(options, id)
	{
		options = options || {};
		
		var janela = new AIX_CrudWindow(id, options);
		janela.initialize();
		ControleJanelas.janelas[id] = janela;		
				
		
		return id;
	},
	
	addAjaxWindow : function(titulo, url, options, data, callBack, id)
	{		
		options = options || {};
		data = data || '';
		callBack = callBack || function(){};
		ControleJanelas.autoId++;
		var id = id || 'janela'+ControleJanelas.autoId;				
		var janela = new AIX_AjaxWindow(id, titulo, url, options, data, callBack);
		janela.initialize();
		ControleJanelas.janelas[id] = janela;
		
		return id;
	}
};

//===================== CLASSE AIX_Window =====================================
function AIX_Window(id, titulo, corpo, options)
{
	//Atributos
	this.id = id;
	this.bar_id = 'jan_bar'+id;
	this.estado = '1';
	this.titulo = titulo;
	this.corpo = corpo || '';
	this.options = options || {};
	// Fim Atributos	
		
		
		
	//public function configureOptions
	this.configureOptions = function()
	{
		this.options['autoOpen'] = false;
		this.options['close'] = bind(this.destrutor, this);
		this.options['focus'] = bind(this.onFocus, this);
		
		if(!this.options['buttons']) 
			this.options['buttons'] = {};
		
		if(!this.options['naoexibirfechar'])
			this.options['naoexibirfechar'] = '';
		
		if(this.options['naoexibirfechar']==''){
			this.options['buttons']['Fechar']=function() { $(this).dialog("close"); };
		}	
		
		if(!this.options['naoexibirfechar']){
			if(!this.options['buttons']['Fechar'] && !this.options['buttons']['FECHAR'] && !this.options['buttons']['Sair'] && !this.options['buttons']['SAIR']){
				this.options['buttons']['Fechar']=function() { $(this).dialog("close"); };
			}	
		}	

	}
	
	this.addButton = function(nome, funcao)
	{
		var buttons = $('#'+this.id).dialog('option','buttons');
		buttons[nome] = funcao;
		$('#'+this.id).dialog('option','buttons', buttons);
		
	}
	
	//public function addBotaoMinimizar
	this.addBotaoMinimizar = function()
	{
		var minimizar = '<a href="javascript:;" class="aix_jan_minimizar ui-corner-all" role="button" unselectable="on" style="-moz-user-select: none;"><span class="ui-icon ui-icon-minus" unselectable="on" style="-moz-user-select: none;">close</span></a>';
		var id = this.id;
		$('#'+id).parent().children('.ui-dialog-titlebar').append(minimizar);
		$('#'+id).parent().children('.ui-dialog-titlebar').children('.aix_jan_minimizar').hover(function(){
			$(this).addClass('ui-state-hover');
			$(this).addClass('ui-state-focus');
		},function(){
			$(this).removeClass('ui-state-hover');
			$(this).removeClass('ui-state-focus');
		});
		$('#'+id).parent().children('.ui-dialog-titlebar').children('.aix_jan_minimizar').click(bind(this.minimizar, this));
	}
	//fim função addBotaoMinimizar
	
	this.minimizar = function()
	{
		$('#'+id).parent().effect('transfer',{to:'#'+this.bar_id, className: 'ui-effects-transfer'});
		$('#'+id).parent().hide();		
	}
	
	this.maximizar = function()
	{		
		$('#'+this.id).parent().show();
		$('#'+this.bar_id).effect('transfer',{to:'#'+this.id, className: 'ui-effects-transfer'}, 100, function(){});
		$('#'+this.id).dialog('moveToTop');		
	}
	
	this.showWindow = function()
	{
		$('#'+this.id).dialog('open');	
		 
		var maskHeight = $(window).height();   
		var maskWidth = $(window).width(); 
	   	var dialogTop =  (maskHeight) - ($('#'+this.id).parent().height());
	   	
	   	var rolagem = 0;  
	   	dialogTop = dialogTop/2;
	   	if(dialogTop < 0)
	   	{
	   		var dtop = $(document).scrollTop();
	   	}         
	   	else
	   	{
	   		var dtop = $(document).scrollTop()+dialogTop;
	   	}
	   	
	   	var dialogLeft = (maskWidth - $('#'+this.id).width()) /2;  
		$('#'+this.id).parent('.ui-dialog').css({'top':dtop,'left':dialogLeft});
			
	}
	
	this.addWindowBar = function()
	{
		var html = '<div id="'+this.bar_id+'" title="'+this.titulo+'" class="ui-widget-header aix_barra_janelas"><span style="float:left;" class="ui-icon ui-icon-newwin"></span><div class="aix_barra_janela_title"><nobr>'+this.titulo+'</nobr></div></div>';
		$('#aix_controle_janela').append(html);
		$('#'+this.bar_id).click(bind(this.maximizar, this));
		$('#'+this.bar_id).hover(function(){
			$(this).addClass('ui-state-highlight');
		},function(){
			$(this).removeClass('ui-state-highlight');
		});		
		ControleJanelas.janelasAtivas++;
		ControleJanelas.checkShowBar();
		$('#'+this.bar_id).tooltip({ 
		    track: false, 
		    delay: 300, 
		    showURL: false,
		    fade: 250,
		    opacity	: 0.75
		});	
	}		
	
	this.onFocus = function()
	{
		$('#'+this.bar_id).effect('highlight');
		$('.aix_barra_janelas').removeClass('ui-state-focus');
		$('#'+this.bar_id).addClass('ui-state-focus');
	}
}

AIX_Window.prototype.initialize = function()
{
	if(!$('#aix_controle_janela').get(0))
	{
		$('body').append('<div id="aix_controle_janela"></div>');
	}
	if(ControleJanelas.janelas[this.id])
	{
		$('#'+this.id).dialog('close');
	}
	
	if(!$('#'+this.id).get(0))
	{
		var window = '<div id="'+this.id+'" title="'+this.titulo+'">'+this.corpo+'</div>';
		$('body').append(window);
	}	
	
	this.configureOptions();
	$('#'+this.id).dialog(this.options);
	this.addBotaoMinimizar();
	this.showWindow();
	this.addWindowBar();
	this.onFocus();	
}

//destrutor
AIX_Window.prototype.destrutor = function()
{
	$('#'+this.id).remove();
	$('#'+this.bar_id).remove();
	ControleJanelas.janelasAtivas--;
	ControleJanelas.checkShowBar();
	ControleJanelas.janelas[this.id] = null;
}

// ================== FIM CLASSE AIX_Window =================================

// ============= CLASSE AIX_AjaxWindow extends AIX_Window ===================
function AIX_AjaxWindow(id, titulo, url, options, data, callback)
{
	this.url = url;
	this.data = data;
	this.callBack = callback;
	
	AIX_Window.call(this, id, titulo, '', options);
	
	
	this.centralizarjanela=function(){
		var maskHeight = $(window).height();   
		var maskWidth = $(window).width(); 
	   	var dialogTop =  (maskHeight) - ($('#'+this.id).parent().height());
	   	
	   	var rolagem = 0;  
	   	dialogTop = dialogTop/2;
	   	if(dialogTop < 0)
	   	{
	   		var dtop = $(document).scrollTop();
	   	}         
	   	else
	   	{
	   		var dtop = $(document).scrollTop()+dialogTop;
	   	}
	   	
	   	var dialogLeft = (maskWidth - $('#'+this.id).width()) /2;  
		$('#'+this.id).parent('.ui-dialog').css({'top':dtop,'left':dialogLeft});
	
	}
	
	this.load = function()
	{	
		if(typeof(this.data)=='string')
		{
			this.data += '&windowId=' + this.id;
			var tipo = 'string';
		}
		else
		{
			this.data.windowId = this.id;
			var tipo = 'json';
		}
		$('#'+this.id).html('<div class="msgCarregando">carregando...</div>');
		var funcao = function(response)
		{
			
			var html = response.html;
			$('#'+this.id).html(html);
			this.centralizarjanela();
			this.callBack(response);
			
		};	
		AjaxAIX.loadJSON(this.url, this.data, bind(funcao,this), tipo);
	}
}

AIX_AjaxWindow.prototype = new AIX_Window();
AIX_AjaxWindow.prototype.constructor = AIX_AjaxWindow;

AIX_AjaxWindow.prototype.initialize = function()
{
	bind(AIX_Window.prototype.initialize, this)();
	this.load();
}
// ======= FIM CLASSE AIX_AjaxWindow extends AIX_Window ===============

// ============= CLASSE AIX_CrudWindow extends AIX_Window ===================
function AIX_CrudWindow(id, options)
{
	AIX_Window.call(this, id, options.title, '', options);
	this.estado = 'I';
	
	this.load = function()
	{	
		$('#'+this.id).html('<div class="msgCarregando">carregando...</div>');
		var funcao = function(response)
		{
			var html = response.html;
			$('#'+this.id).html(html);
			this.callBack(response);
		};	
		AjaxAIX.loadJSON(this.url, this.data, bind(funcao,this));
	}
}

AIX_CrudWindow.prototype = new AIX_Window();
AIX_CrudWindow.prototype.constructor = AIX_CrudWindow;

AIX_CrudWindow.prototype.destrutor = function()
{
	$('#'+this.bar_id).hide();
	ControleJanelas.janelasAtivas--;
	ControleJanelas.checkShowBar();
	this.estado = 'F';
	//ControleJanelas.janelas[this.id] = null;
}

AIX_CrudWindow.prototype.reOpen = function()
{		
	this.maximizar();
	if(this.estado == 'F')
	{
		this.estado = 'I';
    $('#'+this.bar_id).show();
		ControleJanelas.janelasAtivas++;
		ControleJanelas.checkShowBar();
	}
}
// ======= FIM CLASSE AIX_AjaxWindow extends AIX_Window ===============

