if(window.Message == null){
window.Message = {

		initList: function(){
			Consulte.toggleBanner(true);
			Consulte.setBackOptions({
				url:window.contextPath+"/message/list.action",
				hadBanner:true
			});
			Event.observe(window, "load", function(){
				Consulte.copyModuleName();
			});
			Consulte.clearPrompt();
		},

		initDetail: function(id){
			//Consulte.toggleBanner(false);
			Event.observe(window, "load", function(){
				Consulte.copyModuleName();
			});
			if(id == null){
				Consulte.enableGlossary();
			}
			if(!Prototype.Browser.IE){
				$("content").select("fieldset").invoke("setStyle", "-moz-border-radius:5px; border: 1px solid #CFCFCF;");
			}
		},

		initNew: function(){
			Consulte.toggleBanner(false);
			Consulte.toggleDimmer("dimmerCover", true);

			if(tinyMCE){
				tinyMCE.init({
					theme : "advanced",
					mode : "exact",
					elements : "message.content",
					plugins : "fullscreen,paste",
					theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist,|,outdent,indent",
					theme_advanced_buttons2 : "formatselect,|,fullscreen",
					theme_advanced_buttons3 : "",
					theme_advanced_toolbar_location : "top", 
					theme_advanced_toolbar_align : "left", 
					theme_advanced_resizing : false,
					paste_auto_cleanup_on_paste : true,
					paste_strip_class_attributes : "all",
					apply_source_formatting : false,
					paste_block_drop : true,
			        paste_preprocess : function(pl, o) {
						o.content = o.content.unescapeHTML();
			        },
					debug : false
				});
			}

			$("messageForm").focusFirstElement();

			Event.observe(window, "load", function(){
				Consulte.copyModuleName();
			});
			Consulte.enableGlossary();
		},

		newMessage: function(){
			new Ajax.Request(contextPath + "/message/new.action", {
				parameters:{
					"message.owner.id": $F("filter.ownerId")
				},
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						$("content").innerHTML = response.responseText;
					}
				}
			});
		},

		selectRecipients: function(){
			new Ajax.Request(contextPath +"/message/customerSelection.action", {
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						this.customerSelectionLB = new LightBox(response.responseText, {
							title:Bundle.getMessage("txt.message.select.recipients.to.message"),
							position:"scroll",
							onClose: this.cancelCustomers.bind(this, true)
						});
						this.customerSelectionLB.show();
						this.resultRecipients = [];

						this.selectedRecipients = $A($F("message.recipients.json").evalJSON());
						this._refreshCombo($("customers.selected"), this.selectedRecipients);
						
						var wpJSON = $A($F("owner.workingPlaces.json").evalJSON());

						Consulte.bindAutocomplete({
							data: this.getHealthInsuranceOwner(wpJSON),
							field: "customerFilter.healthInsuranceName",
							id: "customerFilter.healthInsuranceId"
						});
						Consulte.bindAutocomplete({
							data: wpJSON,
							field: "customerFilter.workingPlaceName",
							id: "customerFilter.workingPlaceId"
						});

						Mask.numberField($("customerFilter.scheduleDateBegin"), Mask.DATE);
						Calendar.bindToField("customerFilter.scheduleDateBegin");
						Mask.numberField($("customerFilter.scheduleDateEnd"), Mask.DATE);
						Calendar.bindToField("customerFilter.scheduleDateEnd");

						Consulte.toggleDimmer("dimmerCover", false);
					}
				}.bind(this)
			});
		},
		
		getHealthInsuranceOwner: function(wpJSON){
			var hiOwner = new Array();
			
			for(var i = 0; i < wpJSON.length; i++){
				list:
				for(var j = 0; j < wpJSON[i].healthInsurances.length; j++){
					if(hiOwner.length > 0){
						for(var k = 0; k < hiOwner.length; k++){
							if(wpJSON[i].healthInsurances[j].id == hiOwner[k].id)
								continue list;
						}
					}
					if(wpJSON[i].healthInsurances[j].active == true){
						hiOwner.push(wpJSON[i].healthInsurances[j]);
					}
				}
			}
			
			hiOwner.sort(function(rec1, rec2){
				var a = rec1.name, b = rec2.name;
				return a < b ? -1 : a > b ? 1 : 0;
			});
			return hiOwner;
		},

		cancelCustomers: function(fromLB){
			Consulte.toggleDimmer("dimmerCover", true);
			if(!fromLB){
				this.customerSelectionLB.close();
			}
			this.customerSelectionLB = null;
			this.selectedRecipients = null;
		},

		confirmCustomers: function(){
			if($("customers.selected").options.length == 0){
				Consulte.showErrorMessage(Bundle.getMessage("message.message.mandatory.recipients"));
				return;
			}

			new Ajax.Request(window.contextPath+"/message/showRecipients.action", {
				parameters:{
					allRecipients: this.selectedRecipients.toJSON()
				},
				onComplete: function(response){
					$("recipientsContainer").innerHTML = response.responseText;
					this.cancelCustomers();
				}.bind(this)
			});
		},

		listCustomers: function(){
			var parameters = $("customerSelectionFilterForm").serialize({hash:true});
			if(String.isNotEmpty(parameters["customerFilter.scheduleDateBegin"])){
				parameters["customerFilter.scheduleDateBegin"] = Date.parse_DDMMYYYY(parameters["customerFilter.scheduleDateBegin"]).getTime();
			}
			if(String.isNotEmpty(parameters["customerFilter.scheduleDateEnd"])){
				parameters["customerFilter.scheduleDateEnd"] = Date.parse_DDMMYYYY(parameters["customerFilter.scheduleDateEnd"]).getTime();
			}

			new Ajax.Request(contextPath +"/message/listCustomers.action", {
				parameters: parameters,
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						this.resultRecipients = $A(response.responseJSON);
						this._refreshCombo($("customers.result"), this.resultRecipients);
					}
				}.bind(this),
				consulteOptions:{
					processing:{
						fullScreen: true
					}
				}
			}); 
		},

		_refreshCombo: function(combo, data){
			combo.options.length = 0;
			data.each(function(rec){
				var opt = new Option(rec.name, rec.id);
				try{
					combo.add(opt, null);
				}catch(e){
					combo.add(opt);
				}
			});
		},

		moveCustomer: function(option, direction){
			var originList, destList, originCombo, destCombo;
			if(direction == "right"){
				originList = this.resultRecipients;
				originCombo = $("customers.result");
				destList = this.selectedRecipients;
				destCombo = $("customers.selected");
			}else{
				originList = this.selectedRecipients;
				originCombo = $("customers.selected");
				destList = this.resultRecipients;
				destCombo = $("customers.result");
			}

			if(option == "all"){
				originList.each(function(rec){
					destList.push(rec);
				});
				originList.clear();
			}else{
				for(var options=originCombo.options, length=options.length, i=0; i < length; i++){
					var opt = options[i];
					if(opt.selected){
						var rec = this._removeById(originList, opt.value);
						if(rec != null){
							destList.push(rec);
						}
					}
				}
			}

			this._removeRepeatedEntries(destList);
			destList.sort(function(rec1, rec2){
				var a = rec1.name, b = rec2.name;
				return a < b ? -1 : a > b ? 1 : 0;
			});
			this._refreshCombo($("customers.result"), this.resultRecipients);
			this._refreshCombo($("customers.selected"), this.selectedRecipients);
		},

		_removeById: function(list, id){
			var object = null, index;
			list.each(function(obj, i){
				if(obj.id == id){
					object = obj;
					index = i;
					throw $break;
				}
			});
			if(object != null){
				list.splice(index, 1);
			}
			return object;
		},

		_removeRepeatedEntries: function(list){
			var set = $H();
			for(var l=list.length, i=l-1; i >= 0; i--){
				var elem = list[i];
				if(set.get(elem.id) != null){
					list.splice(i, 1);
				}else{
					set.set(elem.id, true);
				}
			}
		},

		step1: function(){
			new Ajax.Request(contextPath + "/message/step1.action", {
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						$("content").innerHTML = response.responseText;
					}
				}.bind(this)
			});
		},

		step2: function(){
			if(this.validateMandatoryFields()){
				var parameters = Form.serialize($("messageForm"), {hash:true});
				parameters["message.content"] = tinyMCE.get("message.content").getContent();

				new Ajax.Request(contextPath + "/message/step2.action", {
					parameters:parameters,
					onComplete:function(response){
						if(Consulte.hasError(response) == false){
							$("content").innerHTML = response.responseText;
						}
					}.bind(this)
				});
			}
		},

		save: function(){
			if(Consulte.showConfirmMessage(Bundle.getMessage("message.message.are.you.sure.send"))){
				new Ajax.Request(contextPath + "/message/save.action", {
					onComplete:function(response){
						if(Consulte.hasError(response) == false){
							Consulte.toggleDimmer("dimmerCover", false);
							var numRecipients = Consulte.getHeaderAsJSON(response, "X-Consulte-Num-Recipients");
							this.list.bind(this, numRecipients).defer();
						}
					}.bind(this)
				});
			}
		},

		validateMandatoryFields: function(){
			try{
				Consulte.mandatory("message.subject", "label.subject");

				//verifica se foi digitado um texto
				tinyMCE.triggerSave();
				if(tinyMCE.get("message.content").getContent() == ""){
					Consulte.showInfoMessage(Bundle.getMessage("message.mandatory.info"));
					Consulte.showErrorMessage(Bundle.getMessage("message.mandatory.field", "label.text"));
					throw Consulte.$error;
				}

				return true;
			}catch(e){
				if(e != Consulte.$error) throw e;
				return false;
			}
		},

		cancel: function(){
			if(Consulte.showConfirmMessage(Bundle.getMessage("message.cancel.process"))){
				new Ajax.Request(contextPath + "/message/cancel.action", {
					onComplete:function(response){
						if(Consulte.hasError(response) == false){
							Consulte.toggleDimmer("dimmerCover", false);
							this.list.bind(this).defer();
						}
					}.bind(this)
				});
			}
		},

		list: function(saveSuccessNum){
			var form = $("messageFilterForm"), parameters = {};
			if(form != null){ // Quando vem do 'save' ou 'cancel' não tem form:
				parameters = Form.serialize(form, {hash:true});
			}

			new Ajax.Request(contextPath + "/message/list.action", {
				parameters:parameters,
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						$("content").innerHTML = response.responseText;
						if(saveSuccessNum != null){
							$("txtMessage").innerHTML = Bundle.getMessage("message.message.saved.sent.to.N.customers", saveSuccessNum);
							$("topMessage").show();
							$("saveSuccessMessage").show();
						}
					}
				}
			});
		},

		showDetail: function(id){
			var parameters = {};
			if(id != null){
				parameters.id = id;
			}
			new Ajax.Request(contextPath + "/message/detail.action", {
				parameters:parameters,
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						$("content").innerHTML = response.responseText;
					}
				}
			});
			
			
		},

		truncate: function(){
			Consulte.truncateText($("content").select("p.trunca"), 250);
		}
};
}

