/*
 *  Copyright 2005 Flight Path Creative L.L.C.
 *	$Date: 2010-09-22 09:55:34 -0400 (Wed, 22 Sep 2010) $
 *	$Revision: 412 $
 *	$URL: svn://10.0.1.100/general/Stuff/trunk/js/validator.js $
 */

function newXmlHttpRequest()
{
	var xmlHttpRequest;
	if(window.XMLHttpRequest)
	{
		xmlHttpRequest = new XMLHttpRequest();
	}
	else
	{
		try
		{
			xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try
			{
				xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(ee)
			{
				return null;
			}
		}
	}
	return xmlHttpRequest;
}

function validateForm(f)
{
	var finalMsg = "";
	var sfEls = {
		input: f.getElementsByTagName("input"),
		select: f.getElementsByTagName("select"),
		textarea: f.getElementsByTagName("textarea")
	};
	var oneSelectedIndex = new Array();
	for(var i in sfEls)
	{
		for(var j = 0; j < sfEls[i].length; j++)
		{
			var msg = "";
			var padded = " " + sfEls[i][j].className + " ";
	
			if(padded.indexOf(" notempty ") != -1)
			{
				if(sfEls[i][j].value == "")
					msg = "The field \"" + sfEls[i][j].attributes["title"].value + "\" must be filled out";
			}
			
			if(padded.indexOf(" oneselected ") != -1)
			{
				if(i == "select")
				{
					if(sfEls[i][j].value == "")
						msg = "You must select an option for \"" + sfEls[i][j].attributes["title"].value + "\"";
				}
				if(i == "input")
				{
					var found = false;
					for(var k = 0; k < oneSelectedIndex.length; k++)
					{
						if(oneSelectedIndex[k].name == sfEls[i][j].name)
						{
							oneSelectedIndex[k].checked += sfEls[i][j].checked ? 1 : 0;
							found = true;
							break;
						}
					}
					if(!found)
					{
						oneSelectedIndex[oneSelectedIndex.length] = {
							name: sfEls[i][j].name,
							title: sfEls[i][j].attributes["title"].value,
							checked: sfEls[i][j].checked ? 1 : 0,
							element: sfEls[i][j]
						};
					}
				}
			}
	
			if(msg.length)
			{
				if(finalMsg.length)
					finalMsg += "\n";
				else
					sfEls[i][j].focus();
				finalMsg += msg;
			}
		}
	}
	
	for(var k = 0; k < oneSelectedIndex.length; k++)
	{
		if(!oneSelectedIndex[k].checked)
		{
			if(finalMsg.length)
				finalMsg += "\n";
			else
				oneSelectedIndex[k].element.focus();
			finalMsg += "You must select an option for \"" + oneSelectedIndex[k].title + "\"";
		}
	}

	if(finalMsg.length)
	{
		alert(finalMsg);
		return false;
	}
	
	sfEls = f.getElementsByTagName("div");
	for(var i = 0; i < sfEls.length; i++)
	{
		var padded = " " + sfEls[i].className + " ";
		if(padded.indexOf(" captchavalid ") != -1)
		{
			var captcha;
			var hash;
			var elements = sfEls[i].getElementsByTagName("input");
			for(var j = 0; j < elements.length; j++)
			{
				if(elements[j].name == "captcha")
					captcha = elements[j].value;
				if(elements[j].name == "hash")
					hash = elements[j].value;
			}
			if(hash && captcha)
			{
				var xmlHttpRequest = newXmlHttpRequest();
				xmlHttpRequest.open("GET", "/userfiles/captcha/" + escape(hash) + "/" + escape(captcha) + ".xml?t=" + Math.random(), false);
				xmlHttpRequest.setRequestHeader("X-Requested-With", "XMLHttpRequest");
				xmlHttpRequest.send(null);
				if(xmlHttpRequest.status == 200 && xmlHttpRequest.responseXML)
				{
					for(var k = 0; k < xmlHttpRequest.responseXML.childNodes.length; k++)
					{
						if(xmlHttpRequest.responseXML.childNodes[k].nodeName == "xml" && xmlHttpRequest.responseXML.childNodes[k].firstChild && xmlHttpRequest.responseXML.childNodes[k].firstChild.nodeName == "message")
						{
							if(xmlHttpRequest.responseXML.childNodes[k].firstChild.firstChild.nodeValue != 'ok')
							{
								alert("Your CAPTCHA entry is not correct.\nTry again, or click the 'refresh' link to create a new image.");
								return false;
							}
						}
					}
				}
			}
		}
	}
		
	return true;
}

function refreshCaptcha(f)
{
	var captcha, hash, image;
	var elements = f.getElementsByTagName("input");
	for(var i = 0; i < elements.length; i++)
	{
		if(elements[i].name == "captcha")
			captcha = elements[i];
		if(elements[i].name == "hash")
			hash = elements[i];
	}
	elements = f.getElementsByTagName("img");
	if(elements.length)
		image = elements[0];
	if(!captcha || !hash || !image)
	{
		alert("Unable to refresh captcha");
		return false;
	}

	var xmlHttpRequest = newXmlHttpRequest();
	xmlHttpRequest.open("GET", "/userfiles/captcha/new.xml?t=" + Math.random(), false);
	xmlHttpRequest.setRequestHeader("X-Requested-With", "XMLHttpRequest");
	xmlHttpRequest.send(null);
	if(xmlHttpRequest.status == 200 && xmlHttpRequest.responseXML)
	{
		for(var k = 0; k < xmlHttpRequest.responseXML.childNodes.length; k++)
		{
			if(xmlHttpRequest.responseXML.childNodes[k].nodeName == "xml" && xmlHttpRequest.responseXML.childNodes[k].firstChild && xmlHttpRequest.responseXML.childNodes[k].firstChild.nodeName == "message")
			{
				if(xmlHttpRequest.responseXML.childNodes[k].firstChild.firstChild.nodeValue == 'ok' && xmlHttpRequest.responseXML.childNodes[k].childNodes[1].firstChild)
				{
					var newhash = xmlHttpRequest.responseXML.childNodes[k].childNodes[1].firstChild.nodeValue;
					hash.value = newhash;
					captcha.value = "";
					image.src = "./userfiles/captcha/" + escape(newhash) + ".jpg";
					return true;
				}
			}
		}
	}
	alert("Unable to refresh captcha");
	return false;
}
