var defaultInputValues = {"ask-question-input":"","name-input":"Your name","twitter-id-input":"Your Twitter ID (optional)"};
var askQuestionRequiredInputIds = ["ask-question-input","name-input"];
var askQuestionInputIds = ["ask-question-input","name-input","twitter-id-input"];
var askQuestionOptional = ["twitter-id-input"];
var askQuestionRequriedFeedback = {"ask-question-input":"You didn't enter a question","name-input":"You need to tell me your name"};

$(document).ready(function(){

	// set up auto complete
	initAutoComplete();
	// set up ask question functionality
	initAskQuestion();

});

/**
 * Add ask question functionality 
 * @return
 */
function initAskQuestion(){
	// add focus select all
	$("#ask-question-input").focus(function () {
		this.select();
	});
	
	// remove default content on focus
	$("#name-input").focus(function () {
		if(this.value==defaultInputValues[this.id]) {
			this.value= "";
		}
	});
	
	// replace content with default value if field is left blank
	$("#name-input").focusout(function () {
		if(this.value=="") {
			this.value = defaultInputValues[this.id];
		}
	});	
	
	// remove default content on focus
	$("#twitter-id-input").focus(function () {
		if(this.value==defaultInputValues[this.id]) {
			this.value= "";
		}
	});
	
	// replace content with default value if field is left blank
	$("#twitter-id-input").focusout(function () {
		if(this.value=="") {
			this.value = defaultInputValues[this.id];
		}
	});
	
	//add click event for ask question submission
	$('#ask-question-submit').click(function() {
		submitAskQuestion();
	});
	
	// hide ask question feedback
	$('#ask-question-feedback').hide();
}


function submitAskQuestion(){
	
	// check all fields are complete
	var feedbackItems = [];
	$.each(askQuestionRequiredInputIds, function(index, value) {

		// remove style to input
		$("#" + value).removeClass('errorInput');
		
		if($("#" + value).val()==""||$("#" + value).val()==defaultInputValues[value]) {
			feedbackItems.push(askQuestionRequriedFeedback[value]);
			
			// error style to input
			$("#" + value).addClass('errorInput');
		}
	});
	
	if(feedbackItems.length){
		// update feedback string
		var feedback = ""; 
		$.each(feedbackItems, function(index, value) {
			feedback +=  value + ".<br />";
		});
		
		// update feedback div
		$('#ask-question-feedback').html("").html(feedback).fadeIn('fast');
		
	} else {
		
		// check question hasn't been asked
		goodToSubmit = true;
		$.each(questions, function(index, value) {
			if(questions[index]['question'].toLowerCase()==$('#ask-question-input').val().toLowerCase().replace('?','')){
				// update feedback div and highlight field
				$("#ask-question-input").addClass('errorInput');
				$('#ask-question-feedback').html("").html("Sorry, that question has already been asked.").fadeIn('fast');
				goodToSubmit = false;
			}
		});
				
		if(goodToSubmit) {
			// final check before submission
			$('#ask-question-feedback').html("").html("Submitting your details...").fadeIn('fast');
		
			// submit the question
			// build data string
			var submitData = "requestType=askQuestion&";
			$.each(askQuestionInputIds, function(index, value) {
				//set to "" if defualt input value is submitted
				$submittedValue = ($("#" + value).val()==defaultInputValues[value]) ? "" : $("#" + value).val() ;
				//remove question marks
				$submittedValue = $submittedValue.replace('?','');
				submitData += value + "=" + $submittedValue + "&";
			});
			
			//alert(submitData);
			
			$.ajax({
				type: "POST",
				url: "requests.php",
				data: submitData,
				success: function(){
					submissionComplete();
				}
			});

		}
	}	
}

function clearSubmitwarnings() {
	//update field classes
	$.each(askQuestionInputIds, function(index, value) {
		$("#" + value).removeClass('errorInput');
	});
	// update feedback div
	$('#ask-question-feedback').html("");
}


function submissionComplete() {

	// on ask out complete function
	var askQuestionOut = function() {
		
			// show thankyou message
			$('#ask-poly-thankyou').show();

			// hide form
			$('#ask-poly-form').hide();
			
			$('#ask-poly').animate({
			    top: [0, 'easeout']
			}, 500);
			
			// add click animation
			$('#ask-poly-thanks-close').click(function(event) {
				$('#ask-poly').animate({top:-200},{
				    duration: 300,
				    complete: askQuestionThankyouOut
				});
				return false;
			});
			
	};
	
	// on ask out complete function
	var askQuestionThankyouOut = function() {
		$('#ask-poly-coa').animate({top:0},{
		    duration: 500,
		    complete: resetAskForm()
		});
		
	};
	
	// animate out
	$('#ask-poly').animate({top:-200},{
	    duration: 500,
	    complete: askQuestionOut
	});
	

	// reset ask question form values
	
	 resetAskForm();
}

function resetAskForm() {

	// revert form values to default	
	$.each(askQuestionInputIds, function(index, value) {	
		$("#" + value).val(defaultInputValues[value]);
		
	});
	
	// hide thankyou message
	$('#ask-poly-thankyou').hide();

	// show form
	$('#ask-poly-form').show();
	
	// remove any feedback
	$('#ask-question-feedback').html("");
	
}

function truncate(str, limit) {
	if(str.length<=limit){
		return str;
	}
	var bits, i;
	bits = str.split('');
	if (bits.length > limit) {
		for (i = bits.length - 1; i > -1; --i) {
			if (i > limit) {
				bits.length = i;
			}
			else if (' ' === bits[i]) {
				bits.length = i;
				break;
			}
		}
		bits.push('...');
	}
	return bits.join('');
};


function initAutoComplete(){
	
	var questionStatusMap = {"live":"Vote now","queued":"In queue","archived":"See result"};
	$("#ask-question-input").autocomplete(questions, {
		max: 3,
		width: 370,
		matchContains: "word",
		selectFirst: false,
		autoFill: false,
		highlightItem: false,
		matchContains: true,
		formatItem: function(row, i, max) {

			clearSubmitwarnings();
		
			var wrapperClass = (row.status=="queued") ? "noLink":"link";
			
			var format = "<div class=\"" + wrapperClass + "\">";
			
			format += "<div class=\"ac_results_left\">";
			format +=  truncate(row.question,55);
			format += "</div>";
		
			format += "<div class=\"ac_results_right\">";
			format += questionStatusMap[row.status];
			format += "</div>";
			
			format += "</div>";
			
			return format;
		},
		formatResult: function(data) {
			
			return " ";
			//return data.question;
		}
		}).result(function(event, item) {
						
			if(item.status=="archived") {
				//alert(item.id + " is an archive item " + item.status);
				location.href = "#archive_" + item.id;
				updateStates("archive");
				
				//alert("#archive_" + item.id + " .archive-highlight");
				
				$("#archive_" + item.id + " .archive-highlight")
				.fadeIn('fast')
				.animate({opacity: 1.0}, 1000)
				.fadeOut('slow', function() {
					$(this).css("opacity","")
					.css("display","");
				});
				
				$('#ask-question-input').val(""); //clearAutoFill();
				return false;
			}
			if(item.status=="live") {
				//alert(item.id + " is an live item " + item.status);
				location.href = "#";
				updateStates("video");
				$('#ask-question-input').val(""); //clearAutoFill();
				return false;
			}
		});
}
