/*------------------------------------------------------*/
/* -formValidator bootstrap functions					*/
/*	Version 1.6											*/
/*------------------------------------------------------*/
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";
}
function checkIt(string)
{
	place = detect.indexOf(string) + 1;
	thestring = string;
	return place;
}
/*browser checks*/

function debugTrace(aMsg,isError)
{
	if (debugObj != null)
	{
		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();
	}
	else
	{
	    debugObj = null;
	}
	var aFrmCollection = document.forms;
	var aFormValidator = null;
	
	for (var i=0,aFrm;aFrm=aFrmCollection[i];i++)
	{
	    if (aElementHandler.getBooleanAttribute(aFrm,'p80fv:validateform') == true)
		{
			setScriptPath(aFrm);
			aFormValidator = new formValidator(aFrm.name,aFrm,validator);
			aFormValidator.initFromForm();
			debugTrace('Processed form <strong>'+aFrm.name+'</strong>');
			ValFrms[ValFrms.length] = aFormValidator;
			aElementHandler.attachOnSubmitFunction(aFrm,dispatchValidator);
		}
	}
	var aElementCollection = document.links;
	var aElm;
	for (i=0,aElm;aElm=aElementCollection[i];i++)
	{
	    if (aElementHandler.getNullableAttribute(aElm,'p80fv:issubmitfor') != null)
		{
			aElementHandler.attachOnClickFunction(aElm,linksubmit);
			debugTrace('Attached submit link for <strong>'+aElm.id+'</strong> link');
		}
	}
	aElementCollection = document.getElementsByTagName('input');
	for(i=0,aElm;aElm=aElementCollection[i];i++)
	{
	    if (aElementHandler.getBooleanAttribute(aElm,'p80fv:override') == true)
		{
		    aElementHandler.attachOnClickFunction(aElm,overrideValidation);
			debugTrace('Found override: <strong>'+aElm.name+'</strong>');
		}
	}
}

function overrideValidation()
{
	override = true;
	return true;
}

function setScriptPath(aForm)
{
	var aAttr = aElementHandler.getNullableAttribute(aForm,'p80fv:scriptpath');
	if (aAttr != null)
	{
		scriptpath = includeTrailingSlash(aAttr);
	}
}

function includeTrailingSlash(aPath)
{
	if (aPath.substr(aPath.length-1,1) != '/')
	{
		return aPath+'/';
	}
	return aPath;
}

function linksubmit(e)
{
    var aElm = aElementHandler.getFunctionCaller(e);
    if (aElm.tagName != 'A'){
		aElm = aElm.parentNode;
    }
	var aFrmName = aElm.getAttribute('p80fv:issubmitfor');
	var aForm = document.forms[aFrmName];
	if (dispatchValidator(aForm)){
		aForm.submit(); 
	}
    if (e.preventDefault){e.preventDefault();}
	return false;
}

function dispatchValidator(e)
{
	if (override == true)
	{
		return true;
	}
	var retval = false;
	var aElm = aElementHandler.getFunctionCaller(e);
	for (var i=0,aFrmVal;aFrmVal=ValFrms[i];i++)
	{
		if (aElm == aFrmVal.form)
		{
			retval = aFrmVal.validate();
			break;
		}
	}
	retval = ((retval == true) && (typeof(handleValidationSucces) == 'function')) ? handleValidationSucces(aFrmVal) : retval;
    if ((retval == false) && (e.preventDefault))
    {
        e.preventDefault();
    }
	return retval;
}

var valFuncCheck = new Object();
function loadDomain(domainName)
{
	if ((typeof(validator.validationFunctions[domainName]) != 'function') && (typeof(valFuncCheck[domainName]) == 'undefined'))
	{
	    if ((browser == "Safari") && (version == "125"))
	    {
		    var aElm = document.createElement('iframe');
		    aElm.src = scriptpath+domainName+'.htm';
		    aElm.style.display = 'none';
		    document.body.appendChild(aElm);
	    }
	    else
	    {
		    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] = true;
	}
}

function elementHandler(aName)
{
    this.getNullableAttribute = function(aElement,aAttrName)
    {
        return aElement.getAttribute(aAttrName);
    }
    
    this.getBooleanAttribute = function(aElement,aAttrName)
    {
        return (aElement.getAttribute(aAttrName) == "true") ? true : false;
    }
    
    this.getNumberAttribute = function(aElement,aAttrName)
    {
		var Retval = aElement.getAttribute(aAttrName);
		if (Retval != null)
		{
            if (isNaN(parseInt(Retval)))
            {
                debugTrace('Attribute value is not a number!',true);
                return null;
            }
		}
		return Retval;
    }
    
    this.attachOnSubmitFunction = function(aElement,aFunction)
    {
	    if (aElement.addEventListener) {
		    aElement.addEventListener("submit", aFunction, false);
	    }
	    else if (aElement.attachEvent) {
		    aElement.attachEvent("onsubmit", aFunction);
	    }
	    else if (typeof(aElement.onsubmit) == "function") {
		    var fnOld = aElement.onsubmit;
		    aElement.onsubmit = function(){
			    fnOld();
			    aFunction();
		    };
	    }
	    else {
		    aElement.onsubmit = aFunction;
	    }
    }
    
    this.attachOnClickFunction = function(aElement,aFunction)
    {
	    if (aElement.addEventListener) {
		    aElement.addEventListener("click", aFunction, false);
	    }
	    else if (window.attachEvent) {
		    aElement.attachEvent("onclick", aFunction);
	    }
	    else if (typeof(aElement.onclick) == "function") {
		    var fnOld = aElement.onclick;
		    aElement.onload = function(){
			    fnOld();
			    aFunction();
		    };
	    }
	    else {
		    aElement.onclick = aFunction;
	    }
    }
    
	this.attachOnFocusFunction = function(aElement,aFunction)
	{
		if (aElement.addEventListener) {
			aElement.addEventListener("focus", aFunction, false);
		}
		else if (aElement.attachEvent) {
			aElement.attachEvent("onfocus", aFunction);
		}
		else if (typeof aElement.onfocus == "function") {
			var fnOld = aElement.onfocus;
			aElement.onfocus = function(){
				fnOld();
				aFunction();
			};
		}
		else {
			aElement.onfocus = aFunction;
		}
	}
	
	this.attachOnBlurFunction = function(aElement,aFunction)
	{
		if (aElement.addEventListener) {
			aElement.addEventListener("blur", aFunction, false);
		}
		else if (aElement.attachEvent) {
			aElement.attachEvent("onblur", aFunction);
		}
		else if (typeof(aElement.onblur) == "function") {
			var fnOld = aElement.onblur;
			aElement.onblur = function(){
				fnOld();
				aFunction();
			};
		}
		else {
			aElement.onblur = aFunction;
		}
	}
    
    this.getFunctionCaller = function(e)
    {
	    if (!e)
	    {
		    return window.event.srcElement;
	    }
	    else
	    {
		    if (e.target)
		    {
			    return e.target;
		    }
		    else if (e.srcElement)
		    {
			    return e.srcElement;
		    }
		    else
		    {
			    return e;
		    }
	    }
    }
}
var aElementHandler = new elementHandler();