/**
* form validation
*/

var kamValidationErrors = new Array();

function validateFields(formId)
{
	var form = document.getElementById(formId);
	if(form!=null)
	{
		var labels = form.getElementsByTagName("label");
		for (var i = 0; i < labels.length; i++) 
		{
			if (labels[i].htmlFor != "") 
			{
				var element = document.getElementById(labels[i].htmlFor);
				if (element != null) 
				{
				    var controlType = "";
					var elementValue = "";
					
					//determine control type
					(element.tagName == "SELECT" || element.tagName == "TEXTAREA")? controlType = element.tagName.toLowerCase(): controlType = element.type.toLowerCase();
					
					// get the value
					( controlType == "select") ? elementValue=element.options[element.selectedIndex].value : elementValue=element.value;
					elementValue = elementValue.replace(/^\s+|\s+$/g, '');
										
					// check for required
					if (labels[i].className.indexOf("required")>-1) 
					{						
						var empty= false;
						if (controlType == "checkbox")
						{
							(!element.checked) ? empty = true : null;
						}
						else
						{
							(elementValue == "") ? empty = true : null;
						}
						(empty) ? kamGenerateFieldError(labels[i].htmlFor,labels[i].innerHTML,"is required") : null;
					}
					
					// check data types
					if (elementValue != "") 
					{
						// check email type
						if (labels[i].className.indexOf("data_type_email")>-1) 
						{
							(!kamIsEmailAddress(elementValue)) ? kamGenerateFieldError(labels[i].htmlFor,labels[i].innerHTML,"is not an email address") : null ;
						}
						// check integer type
						else if(labels[i].className.indexOf("data_type_integer")>-1)
						{
							(!kamIsInteger(elementValue)) ? kamGenerateFieldError(labels[i].htmlFor,labels[i].innerHTML,"is not a whole number") : null ;							
						}
						// check decimal type
						else if(labels[i].className.indexOf("data_type_decimal")>-1)
						{
							(!kamIsDecimal(elementValue)) ? kamGenerateFieldError(labels[i].htmlFor,labels[i].innerHTML,"is not a decimal number") : null ;							
						}
					}
                }
				else 
				{
					alert(labels[i].htmlFor + " not found in document");
				}
			}
		}
		
        // show the errors that have been generated
		if(kamValidationErrors.length)
		{
			var errorText = "There were the following errors:";
			for (var i = 0; i < kamValidationErrors.length; i++) 
			{
				errorText += "\n- "+kamValidationErrors[i].message;
			}
			alert(errorText);
			kamValidationErrors.length = 0;
			return false;
		}
	}
	else
	{
		alert("Validation of form failed, form is null");
		return false;
	}
	return true;
}

/* data types */

function kamIsEmailAddress(value)
{
	var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
	return emailPattern.test(value);
}

function kamIsInteger(value)
{
	return !(isNaN(value)||(value%1));
}

function kamIsDecimal(value)
{
	return !(isNaN(value));
}

/* end data types */
		
function kamRemoveTags(kamSourceString, kamTagName)
{
   var regexp= new RegExp ("<" + kamTagName + "[^.]*\/" + kamTagName + ">", "gi");
   return kamSourceString.replace(regexp,"").replace("  "," ");
}

function kamGenerateFieldError(fieldId,labelText,error)
{
    labelText = kamRemoveTags(labelText.replace(":", "").replace("*", ""), "span");
	error = labelText+" "+error;
	kamValidationErrors[kamValidationErrors.length] = { "id": fieldId, "message": error };
}

function kamSwapImage(id,newSrc)
{
   var img = document.getElementById(id);
   if( img!=null )
   {
	  if( img.tagName.toLowerCase()=="img" )
	  {
		 img.src = newSrc;  
	  }
	  else
	  {
	     alert("Error: element found but not expected type.");  
	  }
   }
   else
   {
     alert("Error: element not found.");  
   }
}

function kamShowEnlarged(id)
{
   var img = document.getElementById(id);
   if( img!=null )
   {
	  if( img.tagName.toLowerCase()=="img" )
	  {
		 window.open(img.src.replace('standard-','enlarged-'),"enlarged");
	  }
	  else
	  {
	     alert("Error: element found but not expected type.");  
	  }
   }
   else
   {
     alert("Error: element not found.");  
   }
}