function showReportIssue(){
	//first reset the form to make sure there's no old data
	resetReportIssueForm();
	document.getElementById('reportIssueWindow').style.display='block';
	focusReportIssueField();
}

Array.prototype.exist = function(search){
	for (var i=0; i<this.length; i++)
		if (this[i] == search) return true;
	
	return false;
}

function sendToServerForReportIssueValidation(){
	var validationString = '';
	document.getElementById('reportIssuePleaseWait').style.visibility = 'visible';
	var f = $('reportIssueForm');
	validationString = Form.serialize(f);
	new Ajax.Request('validate/ReportIssue',
	{
		method:'post',
		parameters: validationString,
		onSuccess: function(response){
			var validation = response.responseText.evalJSON();
			document.getElementById('reportIssuePleaseWait').style.visibility = 'hidden';
			if (validation.success){ //if this is true, it means there were no errors
				reportIssueSubmit(); //submit the form
			} else if (validation.errors){
				for (var e=0;e<validation.errors.length;e++){
					var validators = new Object;
					validators.name = validation.errors[e].field;
					validators.message = validation.errors[e].errorCode;
					reportIssueValidation(document.getElementById(validation.errors[e].field),validators,validation.errors[e].errorCode);
				}
			} else if (validation.error){
				openResponseMsgWin(validation);
				document.getElementById('reportIssueWindow').style.display='none';
			}
		},
		onFailure: function() {
			//TODO: should be logged
			resetReportIssueForm();
			openMsgWin(); },
		asynchronous: false
	});	
}

function validateReportIssuePage(){
	var validationErrors = new Array();
	//do the validation for the page and add result to array
	validationErrors[0] = tmt.validator.validateField(document.getElementById('reportIssueText'),'reportIssueValidation');
	//if there's a 'true' in the array, it means we have an error
	if (validationErrors.exist(true)){
		return true;
	}
	sendToServerForReportIssueValidation();
}

function focusReportIssueField(){
	var fieldID = 'reportIssueText';
	try {
		document.getElementById(fieldID).focus();
	}
	catch (err){}
}

function reportIssueSubmit(){
	document.getElementById('reportIssuePleaseWait').style.visibility = 'visible';
	var formParams = $('reportIssueForm').serialize(true);
	new Ajax.Request('execute/ReportIssue',
	{
		method:'post',
		parameters: formParams,
		onSuccess: function(transport){
			var validation = transport.responseText.evalJSON();
			if (validation.success){ //issue submitted successfully
				openMsgWin('ISSUE_SENT');
				resetReportIssueForm();
			}
		},
		onFailure: function() {
			//TODO: is it even possible to get here (if the backend returns a generic error?)
			//TODO: this should probably be logged
			resetReportIssueForm();
			openMsgWin();
		},
		asynchronous: false
	});	
}

function resetReportIssueForm(){
	document.getElementById('reportIssueWindow').style.display='none';
	document.getElementById('reportIssuePleaseWait').style.visibility = 'hidden';
	//reset form fields
	document.reportIssueForm.reset();
	//replace this with a loop if we ever get more fields on this page
	reportIssueValidation(document.reportIssueForm.elements[0]);
}

function reportIssueValidation(formNode, validators, errorCode){
	if (validators){
		document.getElementById(validators.name + 'Label').style.backgroundColor="#FF0000";
		document.getElementById(validators.name + 'Label').style.color="#FFFFFF";
		document.getElementById(validators.name + 'Help').style.color = "#CC0000";
		document.getElementById(validators.name + 'Help').innerHTML = getReportIssueValidationMsg(validators, errorCode);
	} else {
		document.getElementById(formNode.name + 'Label').style.backgroundColor="#FFFFFF";
		document.getElementById(formNode.name + 'Label').style.color="#000000";
		document.getElementById(formNode.name + 'Help').style.color = "#999999";
		document.getElementById(formNode.name + 'Help').innerHTML = getReportIssueValidationMsg(formNode,'inlineHelp');
	}
}

function getReportIssueValidationMsg(field,msgType){
	var fieldName = field.name;
	var validationMsg = '';
	var inlineHelp = '';
	switch(fieldName){
	case 'reportIssueText':
		validationMsg = 'Please enter some text.';
		break;
	default:
		validationMsg = 'Error!';
	}
	var returnMsg = (msgType=='inlineHelp') ? inlineHelp : validationMsg;		
	return returnMsg;
}

