/*
 ************************************************************
 * Replaces default CF validation.                          *
 ************************************************************
 * Relies on the following document conventions:            *
 *  1: For every field "X" there also exist:                *
 *     - span with id of "errorIcon_X"                      * 
 *     - div with id of "errorMessage_X"                    *
 *                                                          *
 *  2: The calling page defines the following CSS classes:  *
 *     - "errorIcon" : The errorIcon's default (off) style  *
 *     - "errorIconShow" : Icon's error (on) style          *
 *     - "errorMessage" : The message's default (off) style *
 *     - "errorMessageShow" : Message's error (on) style    *
 ************************************************************
 * Created for (n)genius media on 1/31/2006.                *
 * Original Author : Dusty Kline                            *
 ************************************************************
 */
 
 
// 8.3 -> 10, 10.3 -> 11.3
// 6 -> 7.3, 9 -> 11.3

/*

  Purpose: Handles validation errors. Called by CF's native validation JavaScript.
  function ngmOnError(HTMLElement, HTMLElement, Object, String)

*/

var Validator = 
{

Activate : function(frm)
			{
				if(typeof frm == 'string') frm = document.getElementById(frm);
				if(!frm || !frm.elements) return;
				if(typeof gForm == 'undefined') gForm = frm;
				
				frm.isActivated = true;
				
				frm.cfOnSubmit = frm.onsubmit;
				frm.onsubmit = null;
				frm.onsubmit = function(e) { e = e || window.event; Validator.SubmitPrep(gForm); if(!gForm.cfOnSubmit(e)) { alert('Please fix the form fields marked with a red " ! "'); if(typeof e.returnValue != 'undefined') e.returnValue = false; if(typeof e.preventDefault != 'undefined') e.preventDefault(); if(typeof e.cancel != 'undefined') e.cancel = true; return false; }};
			},

IsActive : function(frm)
			{
				return (frm.isActivated == true);
			},

SubmitPrep : function(frm)
			{
				frm.submitting = true;
			},

OnError : function(frm, elmt, val, msg)
			{
				// Validation errors are ignored until the form is activated.
				if(!Validator.IsActive(frm)) return;
				
				if(typeof elmt == 'string')
				{
					elmt = frm.elements[elmt] || document.getElementById(elmt);
				}
				
				if(!elmt || !(elmt.id || elmt.name)) return;
				
				if( typeof elmt.warnLevel == 'undefined' ) elmt.warnLevel = 0;
				
				var showIcon = true;
				var showMessage = true;
				elmt.warnLevel++;
				
				if(typeof _CF_error_fields[elmt] == 'undefined')
				{
					_CF_error_fields[elmt] = msg;
				}
				
				if(showIcon) Validator.ShowIcon(elmt, msg);
				if(showMessage) Validator.ShowMessage(elmt, msg);
			},

HideErrors : function(elmt)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;
				
				var iconName = elmt.id || elmt.name;

				var icon = document.getElementById('errorIcon_' + iconName);
				var msg = document.getElementById('errorMessage_' + iconName);
				
				if(icon && icon.className.indexOf('errorIconShow') > -1) icon.className = icon.className.replace('errorIconShow', 'errorIcon');
				if(msg && msg.className.indexOf('errorMessageShow') > -1) msg.className = msg.className.replace('errorMessageShow', 'errorMessage');
			},
			
Reset : function()
			{
				for(elmt in _CF_error_fields)
				{
					Validator.HideErrors(elmt);					
				}
			},
			
ShowIcon : function(elmt, messageText)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;
				
				var iconName = elmt.id || elmt.name;
				var icon = document.getElementById('errorIcon_' + iconName);
				if(icon && icon.className.indexOf('errorIcon') > -1 &&  icon.className.indexOf('errorIconShow') == -1)
				{
					icon.className = icon.className.replace('errorIcon', 'errorIconShow');
					if(icon.firstChild.nodeName == 'IMG')
					{
						icon.firstChild.alt = messageText;
						icon.firstChild.title = messageText;
					}
				}
			},
			
ShowMessage : function(elmt, messageText)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;
				
				var iconName = elmt.id || elmt.name;
				var msg = document.getElementById('errorMessage_' + iconName);
				if(msg && msg.className.indexOf('errorMessage') > -1 && msg.className.indexOf('errorMessageShow') == -1)
				{
					msg.className = msg.className.replace('errorMessage', 'errorMessageShow');
					while(msg.childNodes.length > 0)
					{
						msg.removeChild(childNodes[0]);
					}
					msg.appendChild(document.createTextNode(messageText));
				}
			},

cfHasValue : function(elmt)
			{
				var valType = 'TEXT';
				if(elmt.nodeName == 'SELECT') valType = 'SELECT';
				if(elmt.type.toUpperCase() == 'RADIO') valType = 'RADIO';
				if(elmt.type.toUpperCase() == 'CHECKBOX') valType = 'CHECKBOX';
				
				return _CF_hasValue(elmt, valType, true);
			},

Required : function(frm, elmt, val, message)
			{
				if(!Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				Validator.HideErrors(elmt);
				return true;
			},

CheckDate : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;	
				if(elmt.className.indexOf('cfrequired') > -1 && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checkdate(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},
			
CheckUsdate : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checkdate(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},

CheckEurodate : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checkeurodate(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},
			
CheckTime : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checktime(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},

CheckFloat : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checknumber(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},

CheckNumeric : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checknumber(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},

CheckInteger : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checkinteger(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},

CheckRange : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(elmt.rangeMin && elmt.rangeMax)
				{
					if(_CF_checkrange(elmt.value, elmt.rangeMin, elmt.rangeMax, required))
					{
						Validator.HideErrors(elmt);
						return true;
					}
					else
					{
						if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
						return false;
					}
				}
				else
				{
					return true;
				}
			},
			
CheckTelephone : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checkphone(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},

CheckBoolean : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checkBoolean(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},
		
CheckZipcode : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checkzip(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},

CheckCreditcard : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checkcreditcard(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},

CheckSsn : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checkssn(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},

CheckSocial_security_number : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checkssn(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},

CheckEmail : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checkEmail(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},

CheckUrl : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checkURL(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},

CheckGuid : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checkGUID(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},

CheckUuid : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(_CF_checkUUID(elmt.value, required))
				{
					Validator.HideErrors(elmt);
					return true;
				}
				else
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
			},

CheckRegex : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(elmt.regex)
				{
					if(_CF_checkregex(elmt.value, elmt.regex, required))
					{
						Validator.HideErrors(elmt);
						return true;
					}
					else
					{
						if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
						return false;
					}
				}
				else
				{
					return true;
				}
			},

CheckRegular_expression : function(frm, elmt, val, message)
			{
				if(!elmt || !(elmt.id || elmt.name)) return;

				var required = (elmt.className.indexOf('cfrequired') > -1);
				if(required && !Validator.cfHasValue(elmt))
				{
					if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
					return false;
				}
				
				if(elmt.regex)
				{
					if(_CF_checkregex(elmt.value, elmt.regex, required))
					{
						Validator.HideErrors(elmt);
						return true;
					}
					else
					{
						if(arguments.length == 4) Validator.OnError(frm, elmt, val, message);
						return false;
					}
				}
				else
				{
					return true;
				}
			}
};
