/*
 * Minerva Information Systems Ltd - form instrumentation.
 * Relies on the functionality provided by jQuery 1.2.6 and blockUI 2 - thanks to the developers of those code libraries and plugins
 * Forms need to be generated with the Minerva PHP form field library
 */
 function limitTextArea(objId, limit) {
  with (document){ if (getElementById){
    var obj = getElementById(objId);} 
	if (obj)
	{
		if (obj.value.length > limit)
		{
			obj.value = obj.value.substring(0, limit);
		}
	}
  }
}
function fileOnChange(event){
	var fileID = event.target.id;
	var isCompleted;
	var searchName;
	var uploadMessage;
	var clearLink;
	isCompleted = (jQuery.trim(event.target.value).length > 0);
	if ($(event.target).hasClass("mandatory"))
	{
		checkObject[fileID][1] = isCompleted;
		if (isCompleted)
		{
			canSubmit();
		}
		else
		{
			disableSubmit();
		}
	}
	if (isCompleted)
	{
		searchName = "#"+fileID+"RadioActionFile";
		clearLink = fileID+"ClearFileField";
		uploadMessage = 'File to be uploaded: '+event.target.value+'<br /><a href="#" id="'+clearLink+'" >Clear</a>';
	}
	else
	{
		searchName = "#"+fileID+"RadioActionNoAction";
		uploadMessage = "";
	}
	$(searchName+":radio").each(function(){
		this.checked=true;	
	})
	$("#"+fileID+"UploadDisplay").html(uploadMessage);
	if (clearLink)
	{
		$("#"+clearLink).click(function(event){clearFileField(event)});
	}
}
function replaceFileField(fileID){
	sourceInput = $("#"+fileID);
	newID = sourceInput.attr("id");
	newClass = sourceInput.attr("class");
	htmlText = '<input type="file" name="'+newID+'" id="'+newID+'" class="'+newClass+'" />';
	placeholderID="maryhadalittlelamb"+Date.UTC();
	$("#"+fileID).after('<div id="'+placeholderID+'"></div>').remove();
	$("#"+placeholderID).after(htmlText).remove();
	$("#"+fileID).change(function(event){fileOnChange(event)}).change();
}
function clearFileField(event){
	var htmlText;
	event.preventDefault();
	fileID = event.target.id.substring(0, event.target.id.indexOf("ClearFileField"));
	replaceFileField(fileID);
	return false;
}
function fileRadioGroupClick(event){
	var foundIndex;
	var doDeletion=false;
	foundIndex = event.target.id.indexOf("RadioActionNoAction");
	if (foundIndex == -1)
	{
		foundIndex = event.target.id.indexOf("RadioActionDelete");
		doDeletion = true;
	}
	if (foundIndex > -1)
	{
		fileID = event.target.id.substring(0, foundIndex);
		replaceFileField(fileID);
		if (doDeletion)
		{
			event.target.checked=true;
		}
	}
}
function selectOnChange(event){
	var isCompleted;
	isCompleted = ((event.target.value !== "0") && (jQuery.trim(event.target.value).length > 0));
	if ($(event.target).hasClass("mandatory"))
	{
		checkObject[event.target.id][1] = isCompleted;
		if (isCompleted)
		{
			canSubmit();
		}		
		else
		{
			disableSubmit();
		}
	}
}
function textOnChange(event){
	var isCompleted;
	isCompleted = (jQuery.trim(event.target.value).length > 0);
	if ($(event.target).hasClass("mandatory"))
	{
		checkObject[event.target.id][1] = isCompleted;
		if (isCompleted)
		{
			canSubmit();
		}		
		else
		{
			disableSubmit();
		}
	}
}
function checkboxOnChange(event){
	var isCompleted;
	var checklistID;
	checklistID = event.target.id;
	checklistID = checklistID.substring(0, 10);
	isCompleted = event.target.checked;
	if (!isCompleted)
	{
		isCompleted = checkChecklist(checklistID);
	}
	if ($(event.target).hasClass("mandatory"))
	{
		checkObject[checklistID][1] = isCompleted;
		canSubmit();
	}
}
var checkObject = new Object();
function submitForm(eventObject){
	var imgsrc;
	var loadmessage;
	imgsrc = '<img src="images/busy.gif" width="25" height="25" alt="" />';
	loadmessage = imgsrc+"&nbsp;&nbsp;&nbsp;Please wait: saving form...";
	$.blockUI({ css: { backgroundColor: '#f00', color: '#fff'}, message: loadmessage });
	return false;
}
function checkChecklist(checklist){
	return ($("#row"+checklist+" :checkbox:checked").size()>0);
}
function disableSubmit(){
	$("#submitstatus").html("You have not yet completed all the necessary fields on this form.  Please check all those marked with *.");
	$("#formSubmit").each(function(){this.disabled = true});
}
function canSubmit(){
	for (prop in checkObject)
	{
		if ((checkObject[prop] instanceof Array) && (checkObject[prop][1]===false))
		{
			disableSubmit();
			return false;
		}
	}
	$("#submitstatus").html("Congratulations: you have completed all the necessary fields and can now save and submit this form.");
	$("#formSubmit").each(function(){this.disabled = false});
	return true;
}
function setupForm(){
	var propName;
	var propType;
	var propCompleted;
	$(".mandatory:text,textarea.mandatory,.mandatory:password").change(function(event){textOnChange(event)}).keyup(function(event){textOnChange(event)})
	.blur(function(event){textOnChange(event)})
	.each(function(){
			propName = this.id;
			propType = "text";
			propCompleted = (jQuery.trim(this.value).length > 0);
			checkObject[propName]= [propType, propCompleted];
		});
	$(".mandatory:checkbox").click(function(event){checkboxOnChange(event)}).each(function(){
			propName = this.id.substring(0,10);
			propType = "checklist";
			propCompleted = false;
			checkObject[propName] = [propType, propCompleted];
		});
	$("select.mandatory").change(function(event){selectOnChange(event)}).each(function(){
			propName = this.id;
			propType = "select";
			propCompleted = ((this.value !== "0") && (jQuery.trim(this.value) > ""));
			checkObject[propName] = [propType, propCompleted];
		});
	$(":file.mandatory").each(function(){
			propName = this.id;
			propType = "file";
			propCompleted = ((this.value !== "0") && (jQuery.trim(this.value) > ""));
			checkObject[propName] = [propType, propCompleted];
		});
	$(":file").change(function(event){fileOnChange(event)});
	$(':radio[value="NoAction"],:radio[value="Delete"]').click(function(event){fileRadioGroupClick(event)});
	$("#formSubmit").click(function(event){submitForm(event)});
	for (propName in checkObject){
		if ((checkObject[propName] instanceof Array) && (checkObject[propName][0]=="checklist"))
		{
			checkObject[propName][1] = checkChecklist(propName);
		}
	}
	canSubmit();
}
$(document).ready(function (){
	setupForm();
});
