/*------------------------------------------------------*/
/* -formValidator bootstrap functions					*/
/*	Version 1.5											*/
/*------------------------------------------------------*/
var scriptpath = "js/";
var override = false;
/*browser checks (thank you http://www.quirksmode.org/js/detect.html !!)*/
var detect = navigator.userAgent.toLowerCase();
var OS,browser,version,total,thestring;

if (checkIt('konqueror'))
{
	browser = "Konqueror";
	OS = "Linux";
}
else if (checkIt('safari')) browser = "Safari"
else if (checkIt('omniweb')) browser = "OmniWeb"
else if (checkIt('opera')) browser = "Opera"
else if (checkIt('webtv')) browser = "WebTV";
else if (checkIt('icab')) browser = "iCab"
else if (checkIt('msie')) browser = "Internet Explorer"
else if (!checkIt('compatible'))
{
	browser = "Netscape Navigator"
	version = detect.charAt(8);
}
else browser = "An unknown browser";

if (!version) version = detect.charAt(place + thestring.length);

if (!OS)
{
	if (checkIt('linux')) OS = "Linux";
	else if (checkIt('x11')) OS = "Unix";
	else if (checkIt('mac')) OS = "Mac"
	else if (checkIt('win')) OS = "Windows"
	else OS = "an unknown operating system";
}

/*browser checks*/

function debugTrace(aMsg,isError)
{
	if (typeof(debugObj) != 'undefined')
	{
		debugObj.trace(aMsg,isError);
	}
}

function addLoadEvent(fn)
{
	if (window.addEventListener) {
		window.addEventListener("load", fn, false);
	}
	else if (document.addEventListener) {
		document.addEventListener("load", fn, false);
	}
	else if (window.attachEvent) {
		window.attachEvent("onload", fn);
	}
	else if (typeof(window.onload) == "function") {
		var fnOld = window.onload;
		window.onload = function(){
			fnOld();
			fn();
		};
	}
	else {
		window.onload = fn;
	}
}

var ValFrms = new Array();
var validator = new validationObject('TheJudge');
addLoadEvent(bootFormValidator);

function bootFormValidator()
{
	if (typeof(debugObj) != 'undefined')
	{
		debugObj.initialise();
	}
	var aFrmCollection = document.forms;
	var aFormValidator = null;

	for (var i=0,aFrm;aFrm=aFrmCollection[i];i++)
	{
		if (aFrm.getAttribute('p80fv:validateform') == 'true')
		{
			findScriptPathAttribute(aFrm);
			aFormValidator = new formValidator(aFrm.name,aFrm,validator);
			aFormValidator.initFromForm();
			debugTrace('Processed form <strong>'+aFrm.name+'</strong>');
			ValFrms[ValFrms.length] = aFormValidator;
			aFrm.onsubmit = dispatchValidator;
		}
	}
	var aLnkCollection = document.links;
	var aElm;
	for (i=0,aElm;aElm=aLnkCollection[i];i++)
	{
		if (aElm.getAttribute('p80fv:issubmitfor') != null)
		{
			attachSubmitFunction(aElm,linksubmit);
			debugTrace('Attached submit link for <strong>'+aElm.text+'</strong> link');
		}
	}
	var aInputCollection = document.getElementsByTagName('input');
	for(i=0,aElm;aElm=aInputCollection[i];i++)
	{
		if (aElm.getAttribute("p80fv:override") == "true")
		{
			attachOverrideFunction(aElm);
			debugTrace('Found override: <strong>'+aElm.name+'</strong>');
		}
	}
}

function overrideValidation()
{
	override = true;
	return true;
}

function attachOverrideFunction(aElm)
{
	var fn = overrideValidation;
	if (aElm.addEventListener) {
		aElm.addEventListener("click", fn, false);
	}
	else if (window.attachEvent) {
		aElm.attachEvent("onclick", fn);
	}
	else if (typeof(aElm.onclick) == "function") {
		var fnOld = aElm.onclick;
		aElm.onclick = function(){
			fnOld();
			fn();
		};
	}
	else {
		aElm.onclick = fn;
	}
}

function findScriptPathAttribute(aForm)
{
	var aAttr = aForm.getAttribute('p80fv:scriptpath');
	if (aAttr != null)
	{
		scriptpath = includeTrailingSlash(aAttr);
	}
}

function includeTrailingSlash(aPath)
{
	if (aPath.substr(aPath.length-1,1) != '/')
	{
		return aPath+'/';
	}
	return aPath;
}

function attachSubmitFunction(aElm,fn)
{
	if (aElm.addEventListener) {
		aElm.addEventListener("click", fn, false);
	}
	else if (window.attachEvent) {
		aElm.attachEvent("onclick", fn);
	}
	else if (typeof(aElm.onclick) == "function") {
		var fnOld = aELm.onclick;
		aElm.onload = function(){
			fnOld();
			fn();
		};
	}
	else {
		aElm.onclick = fn;
	}
}

function linksubmit(e)
{
	var aElm = null;
	if (!e)
	{
		aElm = window.event.srcElement;
	}
	else
	{
		if (e.target)
		{
			aElm = e.target;
		}
		else if (e.srcElement)
		{
			aElm = e.srcElement;
		}
		else
		{
			aElm = e;
		}
	}
	var aFrmName = aElm.getAttribute('p80fv:issubmitfor');
	var aForm = document.forms[aFrmName];

	if (dispatchValidator(aForm))
	{
		aForm.submit();
	}
	return false;
}


function attachOnSubmitEvent(aForm)
{
	var fn = dispatchValidator;
	if (aForm.addEventListener) {
		aForm.addEventListener("submit", fn, false);
	}
	else if (aForm.attachEvent) {
		aForm.attachEvent("onsubmit", fn);
	}
	else if (typeof(aForm.onsubmit) == "function") {
		var fnOld = aForm.onsubmit;
		aForm.onsubmit = function(){
			fnOld();
			fn();
		};
	}
	else {
		aForm.onsubmit = fn;
	}
}


function dispatchValidator(e)
{
	if (override == true)
	{
		return true;
	}
	var aElm = null;
	var retval = false;
	if (!e)
	{
		aElm = window.event.srcElement;
	}
	else
	{
		if (e.target)
		{
			aElm = e.target;
		}
		else if (e.srcElement)
		{
			aElm = e.srcElement;
		}
		else
		{
			aElm = e;
		}
	}
	for (var i=0,aFrmVal;aFrmVal=ValFrms[i];i++)
	{
		if (aElm == aFrmVal.form)
		{
			retval = aFrmVal.validate();
			break;
		}
	}
	if ((retval == true) && (typeof(handleValidationSucces) == 'function'))
	{
		retval = handleValidationSucces(aFrmVal);
	}
	return retval;
}

var valFuncCheck = new Object();
function loadDomain(domainName)
{
	if ((typeof(validator.validationFunctions[domainName]) != 'function') && (typeof(valFuncCheck[domainName]) == 'undefined'))
	{
		var aElm = document.createElement('script');
		aElm.src = scriptpath+domainName+'.js';
		aElm.setAttribute('type', 'text/javascript');
		aElm.setAttribute('language', 'JavaScript');
		document.body.appendChild(aElm);
		valFuncCheck[domainName] = '0';
	}
}

function checkIt(string)
{
	place = detect.indexOf(string) + 1;
	thestring = string;
	return place;
}