if(!window.Question){
	window.Question = {

		category: null,
		isCreatingQuestion: false,
		isCreatingReply: false,

		initDetail: function(saveSuccess, id){
			Consulte.setBackOptions({
				url:window.contextPath+"/question/detail.action",
				hadBanner:true,
				parameters:{
					id: id
				}
			});

			if(String(saveSuccess).toLowerCase() == "true"){
				$("saveSuccessMessage").show();
			}

			Consulte.loadPrompt("question-relatedContent");
		},
			
		initList: function(){
			Consulte.setBackOptions({
				url: window.contextPath+"/question/result.action",
				parameters:{ returnToList:true, "filter.noReplies":false },
				hadBanner:true
			});
			if($("questionResultAll")){
				$("questionResultAll").hide();
				if(this.category != null){
					$("questionResultAll").show();
				}
			}

			var keywords = $("search.keywords");
			if(keywords != null){
				Event.observe(keywords, "focus", function(){
					keywords.__old_value = keywords.value;
				});
				Event.observe(keywords, "keyup", function(){
					if(keywords.__old_value != keywords.value){
						$("formModified").innerHTML = Bundle.getMessage('message.form.has.changed');
					}
				});
			}
			Consulte.clearPrompt();
		},

		initNewQuestion: function(){
			this.isCreatingQuestion = true;
			Event.observe($("label.question.notIdentifyCustomer"), "click", function(event){
				var value = $("question.notIdentifyCustomer").checked;
				$("question.notIdentifyCustomer").checked = !(String(value).toLowerCase() == "true");
				$(event).stopPropagation();
			}.bindAsEventListener(this));

			this.bindNewQuestionCategory();
			Event.observe("question.category.name", "blur", this.checkCategory.bind(this));
		},

		reset:function(){
			if($("search.keywords") != null){
				$("search.keywords").value = "";
			}
			$("questionFilterForm.keywords").value = "";
			$("questionFilterForm.order").value = "";
			$("questionFilterForm.categoryId").value = "";
			$("questionFilterForm.approvalPending").value = "false";
			$("questionFilterForm.noReplies").value = "false";
		},
		
		listByOrder:function(order){
			$("questionFilterForm.order").value = order;
			this.list(false, true);
		},
		
		listByCategory:function(categoryId){
			this.reset();
			$("questionFilterForm.userId").value = "";
			$("questionFilterForm.categoryId").value = categoryId;
			if($("listType") != null){
				$("listType").value = "4";
			}
			var parameters = Form.serialize($("questionFilterForm"), {hash:true});
			if($("listType") == null){
				parameters["listType"] = 4;
			}	
			new Ajax.Request(contextPath + "/question/listByCategory.action", {
				parameters:parameters,
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						this.category = Consulte.getHeaderAsJSON(response, "X-Question-Category").name;
						Consulte.setBackOptions({parameters:{categoryName:this.category}});
						$("content").innerHTML = response.responseText;
					}
				}.bind(this)
			});
		},
		
		listByUser:function(flag){
			this.reset();
			if(flag != null && flag == "myreplies")
				 $("listType").value = "6";
			else $("listType").value = "2";
			var parameters = Form.serialize($("questionFilterForm"), {hash:true});
			new Ajax.Request(contextPath + "/question/listByUser.action", {
				requestHeaders: { "X-Consulte-Save-URL":window.contextPath + "/question/list.action?callListByUser=true" },
				parameters:parameters,
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						var isSplash = Consulte.getHeaderAsJSON(response, "X-Consulte-SplashScreen");
						if(isSplash != null && isSplash == true){
							$("content").innerHTML = response.responseText;
						}else{
							$("resultSearch").innerHTML = response.responseText;
							$("formModified").innerHTML = "";
						}
					}
				}
			});
		},
		
		listByKeyword:function(flag){
			$("questionFilterForm.userId").value = "";
			$("questionFilterForm.categoryId").value = "";
			$("questionFilterForm.order").value = "";
			$("questionFilterForm.approvalPending").value = "false";
			$("questionFilterForm.noReplies").value = "false";
			if(flag != null && flag == "same")
				 $("listType").value = "1";
			else $("listType").value = "5";
			if($("search.keywords") != null){
				$("questionFilterForm.keywords").value = $("search.keywords").value;
			}
			this.list();
		},
		
		listByApprovalPending:function(){
			this.reset();
			$("listType").value = "3";
			var parameters = Form.serialize($("questionFilterForm"), {hash:true});
			new Ajax.Request(contextPath + "/question/listApprovalPending.action", {
				parameters:parameters,
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						$("resultSearch").innerHTML = response.responseText;
						$("formModified").innerHTML = "";
					}
				}.bind(this)
			});
		},
		
		listMyReplies:function(){
			this.listByUser("myreplies");
		},
		
		listNoReplies:function(){
			this.reset();
			$("listType").value = "7";
			$("questionFilterForm.userId").value = "";
			var parameters = Form.serialize($("questionFilterForm"), {hash:true});
			new Ajax.Request(contextPath + "/question/listNoReplies.action", {
				parameters:parameters,
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						$("resultSearch").innerHTML = response.responseText;
						$("formModified").innerHTML = "";
					}
				}
			});
		},
		
		listAll:function(){
			$("questionFilterForm.userId").value = "";
			$("questionFilterForm.categoryId").value = "";
			$("questionFilterForm.order").value = "";
			$("questionFilterForm.approvalPending").value = "false";
			$("questionFilterForm.noReplies").value = "false";
			$("listType").value = "0";
			this.list();
		},

		list:function(saveSuccess, ignoreCreating){
			this.category = null;
			var parameters = Form.serialize($("questionFilterForm"), {hash:true});
			new Ajax.Request(contextPath + "/question/result.action", {
				parameters:parameters,
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						$("resultSearch").innerHTML = response.responseText;
						if(saveSuccess){
							$("topMessage").show();
							$("saveSuccessMessage").show();
						}
						if(this.isCreatingQuestion){
							$("questionButtons").hide();
							if(!ignoreCreating){
								this._completeSaveProcess();
							}
						}else{
							$("formModified").innerHTML = "";
						}
					}
				}.bind(this)
			});
		},
		
		listReplies:function(){
			var parameters = Form.serialize($("replyFilterForm"), {hash:true});
			new Ajax.Request(contextPath + "/question/replies.action", {
				parameters:parameters,
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						$("questionRepliesTD").innerHTML = response.responseText;
					}
				}.bind(this)
			});
		},
		
		listRepliesByOrder:function(order){
			$("replyFilterForm.order").value = order;
			this.listReplies();
		},
		
		newQuestion:function(){
			new Ajax.Request(contextPath + "/question/newQuestion.action", {
				requestHeaders: { "X-Consulte-Save-URL":window.contextPath + "/question/list.action?callNewQuestion=true" },
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						$("content").innerHTML = response.responseText;
						Consulte.toggleDimmer("dimmerCover", true);
					}
				}
			});
		},

		saveNewQuestion: function(){
			if(this.validateQuestion()){
				$("questionFilterForm.keywords").value = $("question.keywords").value;
				this.listByKeyword("same");
			}
		},

		_completeSaveProcess: function(){
			var resultCount = parseInt($("resultCount").innerHTML.strip(), 10);
			if(resultCount == 0){
				$("resultSearch").innerHTML = "";
			}

			if(resultCount == 0 || !Consulte.showConfirmMessage(Bundle.getMessage("message.question.similar"))){
				this._confirmSaveNewQuestion();
			}
		},

		_confirmSaveNewQuestion: function(){
			if(this.validateQuestion() && Consulte.showConfirmMessage(Bundle.getMessage("message.question.save.warning"))){
				var parameters = Form.serialize($("questionForm"), {hash:true});
				parameters["question.displayCustomerName"] = !(String(parameters["question.notIdentifyCustomer"]).toLowerCase() == "true")
				delete parameters["question.notIdentifyCustomer"];

				new Ajax.Request(contextPath + "/question/save.action", {
					parameters:parameters,
					onComplete:function(response){
						if(Consulte.hasError(response) == false){
							$("content").innerHTML = response.responseText;
							Consulte.toggleDimmer("dimmerCover", false);
							$("topMessage").show();
							$("saveSuccessMessage").show();
							this.isCreatingQuestion = false;
						}
					}.bind(this)
				});
			}
		},

		validateQuestion: function(){
			try{
				Consulte.mandatory("question.title", "label.question");
				Consulte.mandatory("question.keywords", "label.keywords");
				Consulte.mandatory("question.category.id", "label.category");
				return true;
			}catch(e){
				if(e != Consulte.$error) throw e;
				return false;
			}
		},

		cancelNewQuestion: function(){
			if(Consulte.showConfirmMessage(Bundle.getMessage("message.cancel.process"))){
				new Ajax.Request(contextPath + "/question/cancel.action", {
					onComplete:function(response){
						if(Consulte.hasError(response) == false){
							$("content").innerHTML = response.responseText;
							Consulte.toggleDimmer("dimmerCover", false);
							this.isCreatingQuestion = false;
						}
					}.bind(this)
				});
			}
		},

		listCategories:function(){
			jQuery($("question.category.name")).showAll();
		},

		checkCategory: function(){
			jQuery($("question.category.name")).search();
		},

		bindNewQuestionCategory: function(){
			var categoryName = $("question.category.name");
			jQuery(categoryName).autocomplete(categories, {
                minChars: 1,
                delay: 100,
                width: categoryName.getWidth(),
                max: categories.length,
                selectFirst: true,
                matchContains: true,
                autoFill: false,
                formatItem: function(row, i, max) {
                    return row.name;
                },
                formatMatch: function(row, i, max) {
                    return row.name.replaceSpecialChars() + " " + row.name;
                },
                formatResult: function(row) {
                    return row.name;
                }
            }).result(function(event, item) {
                $("question.category.id").value = (item != null) ? item.id: "";
            });
		},

		newReply:function(questionId){
			new Ajax.Request(contextPath + "/question/newReply.action", {
				parameters:{"replyForm.questionId": questionId},
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						$("content").innerHTML = response.responseText;
						Consulte.toggleDimmer("dimmerCover", true);
						this.isCreatingReply = true;
					}
				}.bind(this)
			});
		},

		ownerDetail: function(ownerId){
			if(this.isCreatingReply){
				Consulte.showErrorMessage(Bundle.getMessage("message.cancel.information"));
			}else{
				SearchOwner.details(ownerId);
			}
		},

		saveReply: function(){
			if(this.validateReply() &&
			   Consulte.showConfirmMessage(Bundle.getMessage("message.save.warning", "txt.reply.capitalized"))){
				// Seta o aviso de sucesso para a tela de Detalhes de Pergunta:
				Consulte.setBackOptions({parameters:{saveSuccess:true}}, 1);

				new Ajax.Request(contextPath + "/question/saveReply.action", {
					parameters:Form.serialize($("replyForm")),
					onComplete:function(response){
						if(Consulte.hasError(response) == false){
							Consulte.toggleDimmer("dimmerCover", false);
							this.isCreatingReply = false;
							// Volta para o detalhe:
							Consulte.back();
						}
					}.bind(this)
				});
			}
		},

		validateReply: function(){
			try{
				Consulte.mandatory("replyForm.body", Bundle.getMessage("txt.my.reply"));
				return true;
			}catch(e){
				if(e != Consulte.$error) throw e;
				return false;
			}
		},

		cancelReply: function(){
			if(Consulte.showConfirmMessage(Bundle.getMessage("message.cancel.process"))){
				Consulte.toggleDimmer("dimmerCover", false);
				this.isCreatingReply = false;
				if(!Consulte.back()){
					this.showDetail($F("replyForm.questionId"), true);
				}
			}
		},

		nextQuestion: function(id){
			new Ajax.Request(contextPath + "/question/nextQuestion.action", {
				parameters:{id:id},
				onComplete:function(response){
					if(Consulte.hasError(response) == false){
						var text = response.responseText.strip();
						if(String.isEmpty(text)){
							$("nextQuestionTD").hide();
						}else{
							$("content").innerHTML = text;
						}
					}
				}.bind(this)
			});
		},

		showDetail:function(id, isAjax, replyOrder){
			if(isAjax){
				new Ajax.Request(contextPath + "/question/detail.action", {
					parameters:{id:id, replyOrder:replyOrder},
					onComplete:function(response){
						if(Consulte.hasError(response) == false){
							if(this.isCreatingQuestion){
								this.showLightBoxDetail(response.responseText.strip());
							}else{
								$("content").innerHTML = response.responseText;
							}
						}
					}.bind(this)
				});
			}else{
				$("questionCoverForm").action = contextPath + "/question/showDetail.action";
				$("questionCoverForm").method = "get";
				$("questionCoverForm").appendChild(new Element("input", { type:"hidden", name:"id", value:id }));
				$("questionCoverForm").submit();
			}
		},

		showLightBoxDetail: function(msgStr){
			var lightBox = new LightBox(msgStr, {transform:true});
			lightBox.show();
		},

		cancelEvaluateQuestion:function(questionId){
			$A($("evaluationForm_question_"+questionId).getElements()).each(function(element){
				if(element.checked){
					element.checked = false;
				}
			});
			$("avaliar_div_question_"+questionId).hide();
		},
		
		toggleDisapproval:function(display){
			if(display){
				Consulte.toggleDimmer("dimmerCover", true);
				$("showIcons").hide();
				$("disapproveForm").show();
				$("showDisapproveFormButtons").show();
			}else{
				$("showDisapproveFormButtons").hide();
				$("disapproveForm").hide();
				$("showIcons").show();
				Consulte.toggleDimmer("dimmerCover", false);
			}
		},
		
		cancelDisapproval:function(){
			if(Consulte.showConfirmMessage(Bundle.getMessage("message.cancel.process"))){
				this.toggleDisapproval(false);
			}
		},
			
		approve:function(questionId, isApproved){
			if(isApproved){
				if(Consulte.showConfirmMessage(Bundle.getMessage("message.question.approval"))){
					new Ajax.Request(contextPath + "/question/approve.action", {
						parameters:{id:questionId, approve:true},
						onComplete:function(response){
							if(Consulte.hasError(response) == false){
								alert(response.responseText.strip());
								this.doBack();
							}
						}.bind(this)
					});
				}
			}else{
				try{
					Consulte.mandatory("disapprovalText", "label.disapproval.text");
					if(Consulte.showConfirmMessage(Bundle.getMessage("message.question.disapproval"))){
						new Ajax.Request(contextPath + "/question/approve.action", {
							parameters:{id:questionId, approve:false, disapprovalText:$("disapprovalText").value},
							onComplete:function(response){
								if(Consulte.hasError(response) == false){
									alert(response.responseText.strip());
									this.doBack();
									Consulte.toggleDimmer("dimmerCover", false);
								}
							}.bind(this)
						});
					}
				}catch(e){
					if(e != Consulte.$error) throw e;
				}
			}
		},
		
		evaluate:function(questionId){
			var grade = null;
			$A($("evaluationForm_question_"+questionId).getElements()).each(function(element){
				if(element.checked){
					grade = element.value;
					throw $break;
				}
			});

			if(grade == null){
				alert(Bundle.getMessage("message.grade.required", Bundle.getMessage("txt.question.capitalized")));
			}else{
				new Ajax.Request(contextPath + "/question/evaluate.action", {
					parameters:{id:questionId, grade:grade},
					onComplete:function(response){
						if(Consulte.hasError(response) == false){
							$("evalDiv_question_"+questionId).innerHTML = Bundle.getMessage("message.thanks.evaluation");
							var grade = parseInt(response.responseText, 10);
							$("evaluation_question_"+questionId).descendants().each(function(divStar, i){
								divStar = $(divStar);
								divStar.removeClassName("star_gold_middle");
								divStar.removeClassName("star_gray_middle");
								var klass = (i < grade) ? "star_gold_middle": "star_gray_middle";
								divStar.addClassName(klass);
							});
							$($("evaluation_question_"+questionId).parentNode).title = "";
						}
					}
				});
			}
		},

		cancelEvaluateReply:function(replyId){
			$A($("evaluationForm_reply_"+replyId).getElements()).each(function(element){
				if(element.checked){
					element.checked = false;
				}
			});
			$("avaliar_div_reply_"+replyId).hide();
		},

		evaluateReply:function(replyId){
			var grade = null;
			$A($("evaluationForm_reply_"+replyId).getElements()).each(function(element){
				if(element.checked){
					grade = element.value;
					throw $break;
				}
			});

			if(grade == null){
				alert(Bundle.getMessage("message.grade.required", Bundle.getMessage("txt.reply.capitalized")));
			}else{
				new Ajax.Request(contextPath + "/question/evaluateReply.action", {
					parameters:{replyId:replyId, grade:grade},
					onComplete:function(response){
						if(Consulte.hasError(response) == false){
							$("evalDiv_reply_"+replyId).innerHTML = Bundle.getMessage("message.thanks.evaluation");
							var grade = parseInt(response.responseText, 10);
							$("evaluation_reply_"+replyId).descendants().each(function(divStar, i){
								divStar = $(divStar);
								divStar.removeClassName("star_gold_small");
								divStar.removeClassName("star_gray_small");
								var klass = (i < grade) ? "star_gold_small": "star_gray_small";
								divStar.addClassName(klass);
							});
							$($("evaluation_reply_"+replyId).parentNode).title = "";
						}
					}
				});
			}
		},
		
		toggleListOrder:function(){
			var obj = $("ordenar_div");
			var arrow = $("img_ordenar");

			if(obj.visible()){
				obj.hide();
				arrow.className = "img_mostrar";
			}else{
				obj.show();
				arrow.className = "img_esconder";
			}
		},

		doBack: function(){
			if(!Consulte.back()){
				Consulte.toggleDimmer("dimmerCover", true);
				Processing.show();
				window.location = window.contextPath + "/question/main.action";
			}
		},

		truncate: function(){
			Consulte.truncateText($("questionCoverForm").select("div.trunca"), 160);
		},

		getContentEmail:function(){
			return Consulte.getContentEmail("txt.question.subject");
		}

	};
}