// $Id: dataEntry.js 2799 2008-09-17 14:23:00Z chrisr $ 
// data entry js

window.initialiseDataEntry = function(){
	vForm = document.getElementById("updateForm");
	if(!vForm)
		vForm = document.getElementById("editPageForm");
	if(vForm)
	{
		vInputList = vForm.getElementsByTagName("input");
		for(i=0; i < vInputList.length; i++)
		{
			if(vInputList[i].className == "datetime")
				vInputList[i].onblur = vInputList[i].validate = validateDatetime;
		}
		vForm.validateDateTime = validateForm;
	}
	
	if((document.getElementById("updateForm") || document.getElementById("editPageForm") || document.getElementById("insertForm")) 
			&& document.getElementById("VisibleFrom"))
		initialiaseNotYetForm();	
}

function validateForm()
{
	vInputList = this.getElementsByTagName("input");
	for(i=0; i < vInputList.length; i++)
	{
		if(vInputList[i].className == "datetime" && !vInputList[i].validate())
			return false;
	}
	return true;
}

function validateDatetime()
{
	vValid = true;
	
	if(this.value == "Not yet")
		return true;

	vMatches = this.value.match(/\b(\d{1,2})\b/g);
	if(vMatches && vMatches.length == 5)
	{
		vDate = new Date(2000+Number(vMatches[2]), Number(vMatches[1])-1, vMatches[0], vMatches[3], vMatches[4]);
		
		if(vDate.getDate() != vMatches[0] || vDate.getMonth() != Number(vMatches[1])-1 
			|| vDate.getFullYear() != 2000+Number(vMatches[2])  
			|| vDate.getHours() != vMatches[3] || vDate.getMinutes() != vMatches[4]	)
		{
			vValid = false;
		}						
		else this.value = pad(vDate.getDate()) + "/" + pad(vDate.getMonth()+1) + "/" + pad(vDate.getFullYear() - 2000) 
				+ " " + pad(vDate.getHours()) + ":" + pad(vDate.getMinutes());		
	}
	
	if(!this.value.match(/^[0-3][0-9]\/[01][0-9]\/[0-9]{2} [012][0-9]:[0-5][0-9]$/))
		vValid = false;
	if(vValid)
	{
		if(this.parentNode.className == "error")
		{
			this.parentNode.className = "";		
			if(this.nextSibling)
			{
				if(this.formatNote && this.nextSibling.firstChild)
				{
					this.nextSibling.firstChild.nodeValue = this.formatNote;
					this.nextSibling.className = "formatNote";
				}
				else this.parentNode.removeChild(this.nextSibling);
			}
		}
		if(document.getElementById("neverButton"))
			document.getElementById("neverButton").disabled = false;
		return true;
	}
	if(!this.nextSibling)
	{
		vSpan = document.createElement("span");	
		this.parentNode.appendChild(vSpan);
	}
	else 
		vSpan = this.nextSibling;

	if(vSpan.className != "errorMessage")
	{
		this.formatNote = vSpan.firstChild.nodeValue;
		vSpan.className = "errorMessage";	
	}
	this.parentNode.className = "error";
	if(!vSpan.firstChild)
		vSpan.appendChild(document.createTextNode());

	vSpan.firstChild.nodeValue = "You have entered an invalid date. Please use the format: 'dd/mm/yy hh:mm'";
	return false;
}


function initialiaseNotYetForm()
{
	vVisibleFrom = document.getElementById("VisibleFrom");
	
	vDiv = document.createElement("div");
	vDiv.innerHTML = "<span>&nbsp;</span>"; // slight hack here	
	vInput = document.createElement("input");
	vInput.type = "checkbox";	
	vInput.name = "VisibleFrom_datetime";
	vInput.value = "Not yet";
	
	vInput.id = "notYet";
	vDiv.appendChild(vInput);
	vLabel = document.createElement("label");
	vLabel.appendChild(document.createTextNode("or not yet:"));
	vLabel.htmlFor = vInput.id;
	vDiv.insertBefore(vLabel, vInput);
	vInput.onclick = vInput.onchange = notYet;
	
	vVisibleFrom.form.getElementsByTagName("fieldset")[0].insertBefore(vDiv, vVisibleFrom.parentNode.nextSibling);
	if(vVisibleFrom.value == "Not yet")
	{
		vVisibleFrom.disabled = true;
		vInput.checked = true;
	}	
}

function notYet()
{
	vVisibleFrom = document.getElementById("VisibleFrom");
	if(this.checked)
	{
		if(vVisibleFrom.value != "Not yet")
		{
			this.oldValue = vVisibleFrom.value;
			vVisibleFrom.value = "Not yet";
		}
		vVisibleFrom.disabled = true;
	}
	else
	{
		if(this.oldValue)
			vVisibleFrom.value = this.oldValue;
		else
		{
			vDate = new Date();
			vVisibleFrom.value = 
				pad(vDate.getDate()) + "/" + pad(vDate.getMonth()+1) + "/" + pad(vDate.getFullYear() - 2000) 
				+ " " + pad(vDate.getHours()) + ":" + pad(vDate.getMinutes());
		}
		vVisibleFrom.disabled = false;
	}
}
