// Javascript code for results form entry validation

function VC_AddResult(elem)
{
	VC_AddOrRemoveResult(elem,false);
}


function VC_RemoveResult(elem)
{
	VC_AddOrRemoveResult(elem,true);
}


function VC_AddOrRemoveResult(elem,doRemove)
{
	var rowElem=jQuery(elem).parent().parent();
	var rowElemId=jQuery(rowElem).attr('id');
	var rowNum=parseInt(rowElemId.substring(10)); // Skip 'VC_result_' to get to row number

//	alert('VC_AddOrRemoveResult() doRemove='+doRemove+', rowElemId='+rowElemId+', rowNum='+rowNum);

	var	dataObj=
	{
		VC_challenge: document.getElementById('VC_challenge').value,
		VC_numSplitChallengeVariants: document.getElementById('VC_numSplitChallengeVariants').value
	};

	dataObj[doRemove ? '__removeResult__' : '__addResult__']=true;

	// Fill associative array with shared input name/values
	var sharedInputs=[];
	jQuery('#VC_sharedInput :input[name^="VC_"]').each(function() {
//		alert(this.name+'_shared='+this.value);
		sharedInputs[this.name]=this.value;
		});

	// Fill associative array with 'form' input name/values
	var VC_elems=[];
	rowElem.find(':input[name^="VC_"]').each(function() {
//		alert(this.name+'='+this.value);
		VC_elems[this.name]=this;
		// Shared fields should not be overriden by hidden fields (applicable to rows that were deleted then restored)
		if (jQuery(this).is(':visible') || !sharedInputs[this.name])
			dataObj[this.name]=this.value;
		});

	// Copy shared fields for empty input fields
	for (var sharedInputName in sharedInputs)
	{
		if (!dataObj[sharedInputName])
		{
			dataObj[sharedInputName]=sharedInputs[sharedInputName];

			// Write value back to (hidden) input field (so can be restored if gets deleted, or retrieved when emailing results)
			VC_elems[sharedInputName].value=sharedInputs[sharedInputName];
		}
	}

	// Fetch site url that was stored by the server PHP get_bloginfo('url') code into a hidden form field
	var siteUrl=document.getElementById('VC_siteUrl').value;

	jQuery.ajax({
		url: siteUrl+'/wp-content/plugins/vws_wassp/vws_wassp.php',
		cache: false,
		type: 'GET',		// Must use GET because POST doesn't setup url query string from data!
		data: dataObj,
		dataType: 'html',	// Type of data returned by server
		success: function(data,textStatus)
		{
//			alert('Success! '+textStatus);
			var scoreIdx=data.indexOf(',')+1;
			var statusMsgIdx=data.indexOf(',',scoreIdx)+1;
			var statusMsg=data.substring(statusMsgIdx);

			var statusCode=parseInt(data);
			var scoreId=parseInt(data.substring(scoreIdx));

//			alert('scoreIdx='+scoreIdx+' statusMsgIdx='+statusMsgIdx);
//			alert('statusMsg='+statusMsg);
//			alert('statusCode='+statusCode+' scoreId='+scoreId);

			if (statusCode==0)
			{
				if (!doRemove)
				{
					jQuery(elem).
						attr('onclick','').							// Clear 'obtrusive' onclick attribute
						unbind('click').							// Remove all currently bound click functions so won't have multiple handlers
						click(function(){VC_RemoveResult(this);}).	// Replace with unobtrusive method
						children('img').
						attr('src',siteUrl+'/wp-content/plugins/vws_wassp/images/remove.gif').
						attr('alt','Delete Result').
						attr('title','Delete Result');

					rowElem.removeClass('deleted new');

					// Insert new row at end of table if 'this' is the last row
					if (rowElemId==rowElem.parent().find('tr:last').attr('id'))
						VC_NewScoreRow(rowElem,rowNum+1);

					// Update Score Id as new row record would have been added to the database
					rowElem.find(':input[name="VC_score_id"]').attr("value",scoreId);
				}
				else
				{
					jQuery(elem).
						attr('onclick','').							// Clear 'obtrusive' onclick attribute
						unbind('click').							// Remove all currently bound click functions so won't have multiple handlers
						click(function(){VC_AddResult(this);}).		// Replace with unobtrusive method
						children('img').
						attr('src',siteUrl+'/wp-content/plugins/vws_wassp/images/add.gif').
						attr('alt','Restore Result').
						attr('title','Restore Result');

					rowElem.addClass('deleted');

					// Remove Score Id as new row record now deleted
					rowElem.find(':input[name="VC_score_id"]').attr("value","");
				}

				rowElem.removeClass('error');
			}
			else
			{
				// Error
				rowElem.addClass('error');
				alert('Error: '+statusMsg);
			}

//			jQuery('#VC_formStatus').html(statusMsg);
		},
		error: function(XMLHttpRequesttextStatus,textStatus,errorThrown)
		{
			alert(textStatus+' -- '+XMLHttpRequesttextStatus.status);
			jQuery("#VC_formStatus").html("AJAX Error: (wrong call URL?)");
		}
	});
}


function VC_EmailResults(elem,fromName,fromEmail,toName,toEmail,resultsFilename)
{
	jQuery("#VC_emailResults").hide();
	jQuery("#VC_emailResultsStatus").css('color','#f73').html("Emailing Results...").fadeIn(1000);

	var headings="",resultsGroups=[],sortField="VC_school";

	jQuery('tr#VC_resultHeadings').each(function() {
		var delim="";
		jQuery(this).find('th:visible').each(function() {
			if (!jQuery(this).hasClass(sortField) && this.innerHTML!="")	// Ignore last empty heading column and the sort field
			{
				headings+=delim + this.innerHTML;
				delim=", ";
			}
			});
		});

	jQuery('tr.VC_result').not('.new').not('.deleted').each(function() {	// Ignore new (to be inputted) or deleted result rows
		var delim="",row="",sortGroup="";
		jQuery(this).find(':input[name^="VC_"]').each(function() {
			if (this.name==sortField)
				sortGroup=this.value;
			else if (jQuery(this).is(":visible"))
			{
				var value;
				var options=this.getElementsByTagName("option");
				if (options.length)	// This will be an empty array if no options found for element
				{
					// Find option text for its value (have to search through array values for this)
					for (optionKey in options)
					{
						if (options[optionKey].value==this.value)
						{
							value=options[optionKey].text;
							break;
						}
					}
				}
				else
				{
					if (this.name=="VC_pupil")
						value='"' + this.value + '"';
					else
						value=this.value;
				}
				row+=delim + value;
				delim=", ";
			}
			});
			row+="\n";
			if (!resultsGroups[sortGroup])
				resultsGroups[sortGroup]=row;
			else
				resultsGroups[sortGroup]+=row;
		});

	var text="";
	for (var resultsGroupKey in resultsGroups)
	{
		text+="School, " + resultsGroupKey + "\n\n";
		text+=headings + "\n";
		text+=resultsGroups[resultsGroupKey];
		text+="\n\n";
	}

//	alert(fromName+", "+fromEmail+", "+toName+", "+toEmail+", "+resultsFilename);
//	alert(text);
//	toEmail='harvey.stroud@gmail.com';

	// Fetch site url that was stored by the server PHP get_bloginfo('url') code into a hidden form field
	var siteUrl=document.getElementById('VC_siteUrl').value;

	var	dataObj=
	{
		__emailResults__: true,
		results: text,
		emailFromName: fromName,
		emailFromEmail: fromEmail,
		emailToName: toName,
		emailToAddress: toEmail,
		emailResultsFilename: resultsFilename,
	};

	jQuery.ajax({
		url: siteUrl+'/wp-content/plugins/vws_wassp/vws_wassp.php',
		cache: false,
		type: 'GET',			// Must use GET because POST doesn't setup url query string from data!
		data: dataObj,
		dataType: 'html',	// Type of data returned by server
		success: function(data,textStatus)
		{
			var scoreIdx=data.indexOf(',')+1;
			var statusMsgIdx=data.indexOf(',',scoreIdx)+1;
			var statusMsg=data.substring(statusMsgIdx);

			var statusCode=parseInt(data);
			var scoreId=parseInt(data.substring(scoreIdx));

			setTimeout(function() {jQuery("#VC_emailResultsStatus").css("color",statusCode ? "#d00" : "#0a0").html(statusMsg).hide().fadeIn(1000);},1000);
			setTimeout(function() {jQuery("#VC_emailResultsStatus").hide(); jQuery("#VC_emailResults").fadeIn(1000);},5000);
		},
		error: function(XMLHttpRequesttextStatus,textStatus,errorThrown)
		{
			alert(textStatus+' -- '+XMLHttpRequesttextStatus.status);
			jQuery("#VC_emailResultsStatus").css("color","#d00").html("AJAX Error: (wrong call URL?)").hide().fadeIn(1000);
		}
	});
}


function VC_ValidateInputField_str(elem)
{
}


function VC_ValidateInputField_date(elem)
{
}


function VC_ValidateInputField_flt(elem)
{
	var tdElem=jQuery(elem).parent().parent();
	var rowElem=tdElem.parent();
	var rowElemId=jQuery(rowElem).attr('id');
	var rowNum=parseInt(rowElemId.substring(10)); // Skip 'VC_result_' to get to row number

//	alert('VC_ValidateResult() rowElemId='+rowElemId+', rowNum='+rowNum);

	var totalScoreElem=rowElem.find(':input[name^="VC_total_score"]').first();

	if (totalScoreElem)
	{
		var total=0;
		rowElem.find(':input[name^="VC_challenge_variant"]').each(function() {var score=parseFloat(this.value); if (!isNaN(score)) total+=score;});
		totalScoreElem.val(total);
	}
}


function VC_InputFieldAltered_str(elem)
{
}


function VC_InputFieldAltered_date(elem)
{
}


function VC_InputFieldAltered_flt(elem)
{
	var rowElem=jQuery(elem).parent().parent().parent();
	var rowElemId=jQuery(rowElem).attr('id');
	var rowNum=parseInt(rowElemId.substring(10)); // Skip 'VC_result_' to get to row number

//	alert('VC_ValidateResult() rowElemId='+rowElemId+', rowNum='+rowNum);
}

