/**
 * @author ezdermam
 */
var MIN_NUM_ANSWER = 2;
var MAX_NUM_ANSWER = 10;
var MSG_SUBMIT_SUCCESS = "Thanks! Your poll was submitted. Once it's approved, it will show up on UPD as a poll everyone else can pick! ";
var MSG_MIN_ANSWERS = "You can't have fewer than 2 answers.";
var MSG_MAX_ANSWERS = "You can't have more than 10 answers.";
var MSG_NO_QUESTION = "Please enter a question.";
var MSG_NO_ANSWERS = "Please enter at least 2 answers.";
var ERROR_SUBMIT_POLL = "Error submitting a poll. Please try again later.";
var POLL_DELIMITER = escape("~");

function doPollSubmit(){
	var data = getPoll();
	
	if (isValid(data)) {
		UPICKDAILY.utils.loader.show();
		data.answersdata = getGdcAnswersData(data.answers);

		// gdc is performing a redirect after success -- convert it to an xml blob and pass by "xml" param...
		data = {cid:data.cid, xml:getGdcXml(data.cid, data)};
	
	
		try { // Catch browser security exceptions.
			$.ajax({
				type: "GET",
				url: URL_SUBMIT_POLL,
				data: data,
				dataType:"jsonp",
				success:handleSubmitPoll,
				error:handleSubmitPollErrors
			});
		} catch(error) {
			handleSubmitPollErrors(error);
		}
	
		toggleButton('submit', false);
	}
	return false;
}




function deleteAnswer(answer){
	if($(".answersSubmit li").length > MIN_NUM_ANSWER){
		$(answer).remove();

	}else{
		UPICKDAILY.utils.message.show("Attention", MSG_MIN_ANSWERS);
	}
	
}

function addAnswer(after){
	if ($(".answersSubmit li").length < MAX_NUM_ANSWER) {
		$(after).after(constructAnswerDiv());
	}else{
		UPICKDAILY.utils.message.show("Attention", MSG_MAX_ANSWERS);
	}
}

function constructAnswerDiv(){
	var str ='';
	str = "<li>" 
        				+  "<input class='field' type='text' name='answer' value='' />"
						+  " <input id='add' type='Button' value='' onclick='addAnswer(this.parentNode)'/> "
						+  "<input id='delete' type='Button' value='' onclick='deleteAnswer(this.parentNode)'/>"
						+"</li>";
	return str;
}



function handleSubmitPoll(){
	doLog("submit success");
	UPICKDAILY.utils.loader.hide();
	UPICKDAILY.utils.message.show("Message", MSG_SUBMIT_SUCCESS);
	clearPoll();
	toggleButton('submit', true);
	pageNameAppend("poll_submitted");
}


function handleSubmitPollErrors(error){
	doLog(error);
	UPICKDAILY.utils.message.show("Attention", error);
}

function getPoll(){
	var _question = "";
	var _answers = [];
	_question = $("#question").attr("value");
	_answers = getAnswers();

	return {
		cid: $("#cid").attr("value"),
		type: "updPoll",
		question: _question,
		answers: _answers,
		workflow_stages: $("#workflow_stages").attr("value"),
		workflow_name: $("#workflow_name").attr("value"),
		status_url: $("#status_url").attr("value"),
		suspend_url: $("#suspend_url").attr("value"),
		resume_url: $("#resume_url").attr("value"),
		publish_url: $("#publish_url").attr("value"),
		membername: $("#membername").attr("value")
	}
}




function getAnswers(){
	var answers = [];
	var arrTextField = [];
	var arrTextField = $("input[name=answer]");
	for (i = 0; i< arrTextField.length; i++){
		if(arrTextField[i].value!=""){
			answers.push(arrTextField[i].value);
		}	
	}

	return answers;	
}


/*
	Utility to submit xml into the GDC without incurring an html redirect to a "successURL"
	Shouldn't need to wrap this in xml. Inquire about a fix.
*/
function getGdcXml(id, obj) {
	var gdc = "<answers collectionID=\""+id+"\">";
	for(var key in obj) {
		gdc += "<answer tag=\""+ key +"\">"+ obj[key] +"</answer>";
	}
	gdc += "</answers>";
	return gdc;
}


function getGdcAnswersData(answers){
	var strAnswers = "";
	for(i=0; i< answers.length; i++){
		strAnswers+=answers[i];
		if(i!=(answers.length-1)){
			strAnswers+=POLL_DELIMITER;
		}
	}
	return strAnswers;
}


function isValid(data){
	var errorMsg ="";
	var valid = true;
	
	if(data.question ==""){
		valid = false;
		errorMsg += MSG_NO_QUESTION+"\n";
	}
	if(data.answers.length<2){
		valid = false;
		errorMsg += MSG_NO_ANSWERS+"\n";
	}
	
	if(!valid){
		UPICKDAILY.utils.message.show("Error", errorMsg);
	}
	return valid;
}


function clearPoll(){
	var _question = "";
	var _answers = [];
	$("#question").attr("value","");
	$(".answersSubmit ul").empty();
	initPollSubmit();
	
}
function initPollSubmit() {
	doLog("init poll submit");
	for(i=0; i< MIN_NUM_ANSWER ; i++){
		$(".answersSubmit ul").append(constructAnswerDiv());
	}		
}

$(document).ready(initPollSubmit);