window.GetObj = function(id){return document.getElementById(id);}

dojo.provide("ecnext.manta.companyqa.CompanyQAController");

dojo.require("ecnext.JsonService");
dojo.require("ecnext.manta.ScreennamePopupController");

dojo.declare("ecnext.manta.companyqa.CompanyQAController", null , {
	widgets: null,
	jsonService: null,
	customerJsonService: null,
	screennameController: null,
	cid: '',
	subId: '',
	
	constructor: function(kwArgs) {
		this.subId= 'subId' in kwArgs ? kwArgs.subId : '';
		this.screennameController = new ecnext.manta.ScreennamePopupController();

		this.widgets = {
			myQuestionForm: dojo.byId('my-question-form'),
			myQuestionCharsRemaining: dojo.byId('question-chars-remaining'),
			myQuestionSubjectCharsRemaining: dojo.byId('subject-chars-remaining'),
			myQuestionOthercatCharsRemaining: dojo.byId('othercat-chars-remaining'),
			newQuestionsContainer: dojo.byId('new-questions-container'),
			questionCategoriesContainer: dojo.byId('categories-container'),
			questionThankyou: dojo.byId('question-ty-container'),

			recentQuestionsContainer: dojo.byId('recent-questions-container')
		};

		this.jsonService = new ecnext.JsonService({uri: '/api/companyqa'});
		this.customerJsonService = new ecnext.JsonService({uri: '/api/customer'});
	},

	createWidgets: function(kwArgs) {
		this.cid = kwArgs.cid;
		this.screennameController.createWidgets(kwArgs);
		this.listen();
		this.updateQuestionFormState();
	},
	
	listen: function() {
		if (this.widgets.myQuestionForm) {
			/* use for category selection instead of submit
			dojo.connect(this.widgets.myQuestionForm.continue_button,
				"onclick", dojo.hitch(this, "showQuestionCategories"));
			dojo.connect(this.widgets.myQuestionForm.question_submit,
				"onclick", dojo.hitch(this, "submitQuestion"));
			*/

			dojo.connect(this.widgets.myQuestionForm.continue_button,
				"onclick", dojo.hitch(this, "submitQuestion"));

			dojo.connect(this.widgets.myQuestionForm.question,
				"onkeyup", dojo.hitch(this, "updateQuestionFormState"));
			dojo.connect(this.widgets.myQuestionForm.subject,
				"onfocus", dojo.hitch(this, "updateQuestionFormState"));
			dojo.connect(this.widgets.myQuestionForm.subject,
				"onkeyup", dojo.hitch(this, "updateQuestionFormState"));
			dojo.connect(this.widgets.myQuestionForm.othercat,
				"onkeyup", dojo.hitch(this, "updateQuestionFormState"));

			dojo.subscribe("ecnext-screenname-popup-success", this, "_continueOnScreennameSuccess");

			var radios = this.widgets.myQuestionForm.category;
			for (i=0; i<radios.length; ++i) {
				var r = radios[i];
				dojo.connect(r, "onchange", dojo.hitch(this, "updateQuestionFormState"));
			}
		}

		dojo.subscribe("ecnext-companyqa-view-answers", dojo.hitch(this, "viewAnswers"));

		this.listenAnswerForms();
	},

	listenAnswerForms: function() {
		for (var i=0; i<document.forms.length; ++i) {
			var node = document.forms[i];
			if(node.id.length){
				if (node.id.match(/answer-form-[^0]/)) {
					this.listenAnswerForm(node);
				}
			}
		}
	},

	listenAnswerForm: function(answerFormNode) {
		var _this = this;
		dojo.connect(answerFormNode.show_answer_form,
			"onclick", function (event) {_this.showAnswerFields(event, answerFormNode)});
		dojo.connect(answerFormNode.answer_submit,
			"onclick", function (event) {_this.submitAnswer(event, answerFormNode)});
		dojo.connect(answerFormNode.answer,
			"onkeyup", function (event) {_this.updateAnswerFormState(event, answerFormNode)});
		this.updateAnswerFormState(null, answerFormNode);
	},

	viewAnswers: function(kwArgs) {
		//console.dir({kwArgs:kwArgs});
		var questionId = kwArgs.args.questionId;
		var existingAnswersContainer = dojo.byId('existing-answers-container-' + questionId);
		var showExistingAnswersContainer = dojo.byId('show-existing-answers-container-' + questionId);

		existingAnswersContainer.style.display = '';
		showExistingAnswersContainer.style.display = 'none';
	},

	showAnswerFields: function(event, formNode) {
		var questionId = formNode.question_id.value;
		var fieldsContainer = dojo.byId('answer-fields-container-' + questionId);
		var existingAnswersContainer = dojo.byId('existing-answers-container-' + questionId);
		var showExistingAnswersContainer = dojo.byId('show-existing-answers-container-' + questionId);

		fieldsContainer.style.display = '';
		existingAnswersContainer.style.display = '';
		formNode.show_answer_form.style.display = 'none';
		if (showExistingAnswersContainer) {
			showExistingAnswersContainer.style.display = 'none';
		}
	},

	hideAnswerFields: function(event, formNode) {
		var questionId = formNode.question_id.value;
		var fieldsContainer = dojo.byId('answer-fields-container-' + questionId);
		var existingAnswersContainer = dojo.byId('existing-answers-container-' + questionId);
		var showExistingAnswersContainer = dojo.byId('show-existing-answers-container-' + questionId);

		fieldsContainer.style.display = 'none';
		//existingAnswersContainer.style.display = '';
		formNode.show_answer_form.style.display = '';
		if (showExistingAnswersContainer) {
			showExistingAnswersContainer.style.display = '';
		}
	},

	updateQuestionFormState: function(event) {
		var widgets = this.widgets;
		var formNode = widgets.myQuestionForm;

		default_subjval=formNode.default_subjval.value;
		subjval=formNode.subject.value;

		this.updateCharsRemaining(formNode.question, widgets.myQuestionCharsRemaining, 400);
		if(subjval!=default_subjval){
			this.updateCharsRemaining(formNode.subject, widgets.myQuestionSubjectCharsRemaining, 125);
		}
		this.updateCharsRemaining(formNode.othercat, widgets.myQuestionOthercatCharsRemaining, 40);
		
		if(widgets.myQuestionSubjectCharsRemaining.innerHTML=="0"){
			GetObj('subject-chars').className="subject-chars-remaining-maroon"
		} else {
			GetObj('subject-chars').className="subject-chars-remaining"
		}
		
		charleft=widgets.myQuestionCharsRemaining.innerHTML
		if(charleft=="0"){
			GetObj('question-chars').className="question-chars-remaining-maroon"
		} else {
			GetObj('question-chars').className="question-chars-remaining"
		}
		charleft=charleft*1
		if(charleft > 200) {
			GetObj('question').className="question-field"
		} else if(charleft <= 200) {
			GetObj('question').className="question-field-expanded"
		}
		var questionCategory = ecnext.getRadio(formNode.category);

		qval=formNode.question.value; 
		sval=formNode.subject.value; 
		qval=qval.replace(/^\s+|\s+$/g,"");
		sval=sval.replace(/^\s+|\s+$/g,"");
		
		var disabledValue = false;

		// || !formNode.question.value.length || qval=="" || (!widgets.questionCategoriesContainer.style.display && !questionCategory)
		if (!formNode.subject.value.length || sval=="" || sval==default_subjval) {
			disabledValue = true; 
			this.updateCharsRemaining('', widgets.myQuestionSubjectCharsRemaining, 125);
		}

		/*
		var disableOthercat = true;
		if (questionCategory == 'OTHER') {var disableOthercat = false;}
		*/

		formNode.question_submit.disabled = disabledValue;
		formNode.continue_button.disabled = disabledValue;
		// formNode.othercat.disabled = disableOthercat;
	},

	updateCharsRemaining: function(txt, countContainerNode, maxChars) {
		if (txt == null || txt.value == null) { return; }
		var charsRemaining = maxChars - txt.value.length;
		if (charsRemaining < 0) {
			//txt.value = txt.value.substring(0, maxChars);
			this.reflowTextarea(txt, maxChars);
			charsRemaining = 0;
		}
		countContainerNode.innerHTML = charsRemaining;
	},

	reflowTextarea: function(el, max) {
		var st = el.scrollTop;
		var ss = el.selectionStart;
		var minus = el.value.length - max;
		var a = el.value.substring(0, ss);
		var b = el.value.substring(ss);
		if (a.length >= minus) {
			a = a.substring(0, a.length - minus);
		}
		else {
			minus = minus - a.length;
			a = "";
			b = b.substring(0, b.length - minus);
		}
		el.value = a + b;
		el.scrollTop = st;
		el.selectionStart = a.length;
		el.selectionEnd = a.length;
	},

	updateAnswerFormState: function(event, formNode) {
		answerField=formNode.answer
		var charsRemaining = 800 - answerField.value.length;
		if (charsRemaining < 0) {
			this.reflowTextarea(answerField, 800);
			//var st = answerField.scrollTop;
			//answerField.value = answerField.value.substring(0, 800);
			//answerField.scrollTop = st;
			charsRemaining = 0;
		}
		
		var quID=formNode.question_id.value;
		var charsRemainingNode = dojo.byId('answer-chars-remaining-' + quID);
		charsRemainingNode.innerHTML = charsRemaining;

		answerCharsNode=GetObj('answer-chars-' + quID);
		if(charsRemaining=="0"){
			answerCharsNode.className="answer-chars-remaining-maroon";
		} else {
			answerCharsNode.className="answer-chars-remaining";
		}
	
		charsRemaining=charsRemaining*1
		if(charsRemaining > 500) {
			answerField.className="answer-field";
		} else if(charsRemaining <= 500) {
			answerField.className="answer-field-expanded";
		}

		ansval=answerField.value;
		ansval=ansval.replace(/^\s+|\s+$/g,"");
		
		var disabledValue = false;
		if (!formNode.answer.value.length || ansval=="") {
			disabledValue = true;
		}
		formNode.answer_submit.disabled = disabledValue;
	},

	submitQuestion: function(event) {
		if (this.subId) {
			var screenname = this.getScreenname();
			var confirmed = this.screennameController.hasConfirmedEmail();
			if (screenname) {
				this._submitQuestion();
			}
			else {
				//this.screennameController.setAuxMsgData({questionId: formNode.question_id.value});
				this.addScreenname(dojo.hitch(this, "_submitQuestion"),
					event, {positionCallback: mkPositionLeftCb(300)});
			}
		}
		else {
			var questionTxt = this.widgets.myQuestionForm.question.value;
			var questionMuns = this.widgets.myQuestionForm.muns.value;
			var questionSubject = this.widgets.myQuestionForm.subject.value;
			// var questionCategory = ecnext.getRadio(this.widgets.myQuestionForm.category);
			// var categoryDetail = this.widgets.myQuestionForm.othercat.value;
			this._redirectToLogin(
				'/api/companyqa?action=addQuestion&txt=' + encodeURIComponent(questionTxt)
					+ '&subject=' + encodeURIComponent(questionSubject)
					// + '&category=' + encodeURIComponent(questionCategory)
					// + '&categoryDetail=' + encodeURIComponent(categoryDetail)
					+ '&targetId=' + encodeURIComponent(questionMuns),
				'question');
		}
	},

	showQuestionCategories: function() {
		this.widgets.myQuestionForm.continue_button.style.display = 'none';
		this.widgets.questionCategoriesContainer.style.display = '';
		this.updateQuestionFormState();
	},

	_submitQuestion: function() {
		var prevSubmitValue = this.widgets.myQuestionForm.question_submit.value;
		this.widgets.myQuestionForm.question_submit.value = 'Saving...';
		this.widgets.myQuestionForm.question_submit.disabled = true;

		var questionTxt = this.widgets.myQuestionForm.question.value;
		var questionMuns = this.widgets.myQuestionForm.muns.value;
		var questionSubject = this.widgets.myQuestionForm.subject.value;
		var questionCategoryNode = ecnext.getSelectedRadioNode(this.widgets.myQuestionForm.category);
		if (questionCategoryNode) {
			var questionCategory = questionCategoryNode.value;
		}
		var categoryDetail = this.widgets.myQuestionForm.othercat.value;
		var dResult = this.jsonService.sendMessage({
			msg: {
				action: 'addQuestion',
				txt: questionTxt,
				targetId: questionMuns,
				subject: questionSubject,
				category: questionCategory,
				categoryDetail: categoryDetail,
				fmt: 'default'
			}
		});

		var _this = this;
		var widgets = this.widgets;
		var questionTxtNode = this.widgets.myQuestionTxt;
		dResult.addBoth(function(response) {
			widgets.myQuestionForm.question_submit.value = prevSubmitValue;
			widgets.myQuestionForm.question_submit.disabled = false;
			return response;
		});
		dResult.addCallback(function(result) {
			widgets.myQuestionForm.question.value = '';
			widgets.myQuestionForm.subject.value = '';
			widgets.myQuestionForm.othercat.value = '';
			_this.widgets.myQuestionForm.continue_button.style.display = '';
			_this.widgets.questionCategoriesContainer.style.display = 'none';
			if (questionCategoryNode) {
				questionCategoryNode.checked = false;
			}

			widgets.questionThankyou.innerHTML = result.html['default']['ty'];
			hide('question-form');
			show('question-ty-container');
			
			if (result.activated_date) {
				var newQuestion = document.createElement('div');
				newQuestion.innerHTML = result.html['default'].question;
				var nqc = widgets.newQuestionsContainer;
				nqc.appendChild(newQuestion);
				widgets.recentQuestionsContainer.style.display = '';

				_this.listenAnswerForm(dojo.byId('answer-form-' + result.id));
			}

			_this.updateQuestionFormState(null);

			return result;
		});
		dResult.addErrback(function(error) {
			alert("there was an error submitting your question");
			return error;
		});
	},

	submitAnswer: function(event, formNode) {
		if (this.subId) {
			var screenname = this.getScreenname();
			var confirmed = this.screennameController.hasConfirmedEmail();
			if (screenname) {
				this._submitAnswer(formNode);
			}
			else {
				var _this = this;
				this.screennameController.setAuxMsgData({questionId: formNode.question_id.value});

				this.addScreenname(function () {_this._submitAnswer(formNode)},
					event, {positionCallback: mkPositionLeftCb(300)});
			}
		}
		else {
			var answerTxt = formNode.answer.value;
			var questionId = formNode.question_id.value;
			this._redirectToLogin(
				'/api/companyqa?action=addAnswer&txt='
				+ encodeURIComponent(answerTxt)
				+ '&questionId=' + encodeURIComponent(questionId),
				'answer');
		}
	},

	_submitAnswer: function(formNode) {
		var answerTxt = formNode.answer.value;
		var questionId = formNode.question_id.value;

		var prevSubmitValue = formNode.answer_submit.value;
		formNode.answer_submit.value = 'Saving...';
		formNode.answer_submit.disabled = true;

		var dResult = this.jsonService.sendMessage({
			msg: {
				action: 'addAnswer',
				txt: answerTxt,
				questionId: questionId,
				fmt: 'default'
			}
		});

		var _this = this;
		dResult.addBoth(function(response) {
			formNode.answer_submit.value = prevSubmitValue;
			formNode.answer_submit.disabled = false;
			return response;
		});

		dResult.addCallback(function(result) {
			formNode.answer.value = '';

			if (result.activated_date) {
				var newAnswer = document.createElement('div');
				newAnswer.innerHTML = result.html['default'].answer;
				var nc = dojo.byId('new-answers-container-' + result.question_id);
				nc.appendChild(newAnswer);
			}
			else {
				var tyNode = dojo.byId('answer-ty-container-' + result.question_id);
				tyNode.innerHTML = result.html['default']['ty'];
			}

			_this.updateAnswerFormState(null, formNode);

			_this.hideAnswerFields(null, formNode);

			return result;
		});

		dResult.addErrback(function(error) {
			alert("there was an error submitting your comment");
			return error;
		});

		return dResult;
	},

	getScreenname: function() {
		return this.screennameController.getScreenname();
	},

	_continueOnScreennameSuccess: function() {
		this._addScreennameContinuation();
	},

	_addScreennameContinuation: null,
	addScreenname: function(continuation, event, showTooltipArgs) {
		this._addScreennameContinuation = continuation;
		this.screennameController.showPopup(event, showTooltipArgs);
	},

	_redirectToLogin: function(rld, redirectType) {
		var finalDestination = window.location.href;

		var paramPrefix = '?';
		if (finalDestination.match(/\?/)) {
			paramPrefix = '&';
		}
		if (!finalDestination.match(/tab=companyqa/)) {
			finalDestination += paramPrefix + 'tab=companyqa';
		}

		rld += "&redirectTo=" + encodeURIComponent(finalDestination);

		var newLocation = "/member/register/?rl=companyqa" + redirectType + "&cid=" + encodeURIComponent(this.cid) + "&alertdesttype=companyqa&rld=" + encodeURIComponent(rld) + "&allowRedirectMunge=1";

		window.location = newLocation;
	},

	zLastFunction: function() {}
});

function goTab(id){
	initTabs();activate_tab(0,'company-multi-page-'+id,id);
}
function refreshCompanyQATab(params) {
	params = params || {};
	var queryStr = document.location.search;
	queryStr = queryStr.replace(/^\?/, '');
	var query = dojo.queryToObject(queryStr);
	dojo.mixin(query, params);
	query['tab'] = 'companyqa';
	queryStr = dojo.objectToQuery(query);
	var href = document.location.href;
	href = href.replace(/\?.*/, '');
	href += '?' + queryStr;
	document.location.replace(href);
}

function GetObj(id){return document.getElementById(id);}

function CheckSubj(OnOff){
	F=document.getElementById('my-question-form');
	def_subj_val=F.default_subjval.value;
	subj=F.subject;
	var subjval=subj.value;
	if(OnOff==1){
		if(subjval==def_subj_val){subj.value='';subj.style.color='black';}
	}	else {
		if(subjval==''){
			subj.value=def_subj_val;subj.style.color='#A4A4A4';
		}
	}
}

function HideHelp(){
	ids="companyqa-example-questions-popup,companyqa-guidelines-popup";
	idsArr=ids.split(",");
	for (x=0; x<idsArr.length; x++){
		obj=GetObj(idsArr[x]);
		if(obj){if(obj.style.display==""){obj.style.display="none"}}
	}
}
function ExampleQs(){
	inc="CompanyQA/example_questions_popup.tt"; divid="companyqa-example-questions-popup"; qs=""
	DivPopup(inc,divid,qs)
}
function Guidelines(){
	inc="CompanyQA/guidelines_popup.tt"; divid="companyqa-guidelines-popup"; qs=""
	DivPopup(inc,divid,qs)
}

function Mark(obj,QorA,ID){
	if (confirm('You are marking this '+QorA+' for possible removal.')){
		//alert('submitting as Inappropriate: '+QorA+'='+ID)
		jsonReq = new ecnext.JsonService({uri:'/api/companyqa'});
		if(QorA=='question'){
			var dResult = jsonReq.sendMessage({msg: {action:'flagQuestion',id:ID} });
		} else { //answer
			var dResult = jsonReq.sendMessage({msg: {action:'flagAnswer',id:ID} });
		}
		dResult.addCallback(function(result) {
			return result;
		});
		dResult.addErrback(function(error) {
			//alert(error)
			return error;
		});
		obj.innerHTML="Flagged"
		obj.onclick=""
		obj.className="grey"
	}
}

