
function validate_all(form)
{
	var validationTypes = new Array("required","numeric", "email", "zip", "phone" );
	var classResults = new Array();
	// REQUIRED
	classResults = getElementsByClass("validate_required");
	var isError = false;
	if (classResults.length>0)
	{
		for (var i=0; i<classResults.length; i++)
		{
			if (!validate_required(classResults[i].value))
			{
				isError = true;
				show_error_message(classResults[i]);
			} else {
				hide_error_message(classResults[i]);
			}
		}
	}
	// NUMERIC
	classResults = getElementsByClass("validate_numeric");
	if (classResults.length>0)
	{
		for (var i=0; i<classResults.length; i++)
		{
			if (!validate_numeric(classResults[i].value))
			{
				isError = true;
				show_error_message(classResults[i]);
			} else {
				hide_error_message(classResults[i]);
			}
		}
	}
	// EMAIL
	classResults = getElementsByClass("validate_email");
	if (classResults.length>0)
	{
		for (var i=0; i<classResults.length; i++)
		{
			if (!validate_email(classResults[i].value))
			{
				isError = true;
				show_error_message(classResults[i]);
			} else {
				hide_error_message(classResults[i]);
			}
		}
	}
	// ZIP
	classResults = getElementsByClass("validate_zip");
	if (classResults.length>0)
	{
		for (var i=0; i<classResults.length; i++)
		{
			if (!validate_zip(classResults[i].value))
			{
				isError = true;
				show_error_message(classResults[i]);
			} else {
				hide_error_message(classResults[i]);
			}
		}
	}
	// PHONE
	classResults = getElementsByClass("validate_phone");
	if (classResults.length>0)
	{
		for (var i=0; i<classResults.length; i++)
		{
			if (!validate_phone(classResults[i].value))
			{
				isError = true;
				show_error_message(classResults[i]);
			} else {
				hide_error_message(classResults[i]);
			}
		}
	}
	
	// RADIO REQUIRED //
	var radioQuestionAnswered = false;
	if (typeof(attrOptionList) != "undefined")
	{
		for (var i=0; i<attrOptionList.length; i++)
		{
			var radioEle=null;

			eval("radioEle = form.ContentObjectAttribute_data_option_value_"+attrOptionList[i]);

			if (radioEle){			
				if (!validate_radio_required(radioEle))
				{
				    isError = true;			    
				    SetElemStyleDisplay(attrOptionList[i]+"pleaseanswer","block");	
				    SetElemClassName(attrOptionList[i]+"optionlabel" , "option_text_error");
				    SetElemClassName(attrOptionList[i]+"optionsection" ,"option_error" );	
				} else {
				    radioQuestionAnswered = true;
				    SetElemStyleDisplay(attrOptionList[i]+"pleaseanswer", "none");		
				    SetElemClassName(attrOptionList[i]+"optionlabel" ,"option_text_answered");	
				    SetElemClassName(attrOptionList[i]+"optionsection",	"option_answered");		
				}
			}



		}
	}

	//Secondary RadiobuttonList Validation through	
	if (typeof(mw_RadioValidationList) != "undefined")
	{
		for (var i=0; i<mw_RadioValidationList.length; i++)
		{
			var radioelem=null;
			var radioelems = document.getElementsByName(mw_RadioValidationList[i]);
			if (radioelems && radioelems.length>0) radioelem= radioelems[0];						
			if (radioelems){			
				if (!validate_radio_required(radioelems))
				{
				    isError = true;			    
				    SetElemStyleDisplay(radioelem.name +"_pleaseanswer","block");	
				    SetElemClassName(radioelem.name +"_optionlabel" , "option_text_error");
				    SetElemClassName(radioelem.name +"_optionsection" ,"option_error" );	
				} else {
				    radioQuestionAnswered = true;
				    SetElemStyleDisplay(radioelem.name +"_pleaseanswer", "none");		
				    SetElemClassName(radioelem.name +"_optionlabel" ,"option_text_answered");	
				    SetElemClassName(radioelem.name +"_optionsection","option_answered");		
				}
			}

		}
	}


	// show top message
	if (isError) {
		if (radioQuestionAnswered) SetElemStyleDisplay("topValidationMsgAnswered","block");		   
		SetElemStyleDisplay("topValidationMsg","block");					    
		document.location.href="#top";
	}
	return (isError != true);
}

function SetElemStyleDisplay(strElemID, strDisplay)
{
    var elem= document.getElementById(strElemID);
    if (elem) elem.style.display=strDisplay;
}

function SetElemClassName(strElemID, strClassname)
{
    var elem= document.getElementById(strElemID);
    if (elem) elem.className=strClassname;
}

function AnswerQuestion(attr_id, ele)
{
        return;
	SetElemStyleDisplay(attr_id+"pleaseanswer" , "none");
	SetElemStyleDisplay(attr_id+"optionlabel" , "option_text_answered");
	SetElemStyleDisplay(attr_id+"optionsection" , "option_answered");           
        ele.onclick = null;
}

function show_error_message(ele)
{
	addClass(ele.parentNode, "option_error");
	SetElemStyleDisplay(ele.name + "_error","block");	
}

function hide_error_message(ele)
{
	removeClass(ele.parentNode, "option_error");
	SetElemStyleDisplay(ele.name + "_error","none");	
}
// you must set all base names in an array called requiredRadioNames
function validate_radio_required(radios)
{
	if (radios && radios.length)
	{
		for (var k=0; k<radios.length; k++)
		{

			if (radios[k].checked)
			{

			    // show answered questions message
	        	    SetElemStyleDisplay("topValidationMsgAnswered","block");                       
				return true;
			}
		}
	}	
	return false;
}

function GetRadioSelection(group) 
{ 
  for(var k=0;k<group.length;k++) { 
    if(group[k].checked) {  
       return group[k].value;
	}
  }
}

function validate_required(val)
{
	if (isSet(val) && val.trim() != "") {
		return true;
	}
	return false;
}

function validate_numeric(val) {
	if (isSet(val) && isNaN(val)) {
		return false;
	}
	return true;
}

function validate_min(val, min) {
	if (!isSet(val)) return false;
	return (val <= min);
}

function validate_max(val, max) {
	if (!isSet(val)) return false;
	return (val >= max);
}

// regular expressions from jsVal http://jsval.fantastic-bits.de/
function validate_zip(val) {
	if (!isSet(val)) return false;
	if (5 == val.length) {
		return((/^\d{5}$/).test(val));
	} else if (10 == val.length) {
		return((/^\d{5}(\-\d{4})?$/).test(val));
	}
	return false;
}

function validate_email(val) {
	if (!isSet(val)) return false;
	
	var tmp = new String(val);
	
	var testAtChar = tmp.indexOf('@');
	if(testAtChar == -1){return false;}
	var testPeriod = tmp.indexOf('.');
	if(testPeriod == -1){return false;}
/*	
    // block commented out and replaced with only a very basic test above, per BW request - PS
    
	// no double-periods - PS
	if(tmp.indexOf('..') != -1){return false;}
	// only 1 @ symbol, cannot be at start/end of email - PS
	var firstAt = tmp.indexOf('@');
	if(firstAt == -1){return false;}
	var lastAt = tmp.indexOf('@', firstAt + 1);
	if(lastAt != -1){return false;}
	var strContact = new String(tmp.substr(0, firstAt));
	var strDomain = new String(tmp.substr(firstAt + 1, tmp.length - firstAt - 1));
	
	// no leading nor trailing periods - PS
	if((strContact.length == 0) || (strDomain.length == 0)){return false;}
	if(strContact[0] == '.'){return false;}
	if(strContact[strContact.length - 1] == '.'){return false;}
	if(strDomain[0] == '.'){return false;}
	if(strDomain[strDomain.length - 1] == '.'){return false;}

    // : and other special chars not allowed, no punctuation marks other than - or . allowed in domain - PS
	if(!(/^[a-zA-Z0-9!#$%&'*+-\./=?^_`\{|\}~üöäßÄÖÜ]+$/).test(strContact)){return false;}
	// require TLD per BW - PS
	if(!(/^[a-zA-Z0-9üöäßÄÖÜ][a-zA-Z0-9-üöäßÄÖÜ]*[a-zA-Z0-9\.üöäßÄÖÜ]+\.[a-zA-Z]{2,}$/).test(strDomain)){return false;}
*/	
	return true;
// Old faulty regular expression used by the previous developer - PS
//	return((/^[a-zA-ZüöäßÄÖÜ]+([\.-]?[a-zA-ZüöäßÄÖÜ]+)*@[a-zA-ZüöäßÄÖÜ]+([\.-]?[a-zA-ZüöäßÄÖÜ]+)*(\.\w{2,5})+$/).test(val));
}

// regular expression from jsVal http://jsval.fantastic-bits.de/
// use the regex when you are ready to do better validation
function validate_phone(val) {
	if (!isSet(val)) return false;
	return (val.length >= 10);
	//return((/^1?[\-]?\(?\d{3}\)?[\-]?\d{3}[\-]?\d{4}$/).test(val));
}
function isSet(val)
{
	return (typeof(val) != "undefined");
}
// Modified from http://www.evolt.org/article/rating/17/24700/
function validate_credit_card(cardNumber, cardType)
{
  var isValid = false;
  var ccCheckRegExp = /[^\d ]/;
  isValid = !ccCheckRegExp.test(cardNumber);

  if (isValid)
  {
    var cardNumbersOnly = cardNumber.replace(/ /g,"");
    var cardNumberLength = cardNumbersOnly.length;
    var lengthIsValid = false;
    var prefixIsValid = false;
    var prefixRegExp;

    switch(cardType)
    {
      case "mastercard":
        lengthIsValid = (cardNumberLength == 16);
        prefixRegExp = /^5[1-5]/;
        break;

      case "visa":
        lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
        prefixRegExp = /^4/;
        break;

      case "amex":
        lengthIsValid = (cardNumberLength == 15);
        prefixRegExp = /^3(4|7)/;
        break;

      default:
        prefixRegExp = /^$/;
        alert("Card type not found");
    }

    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    isValid = prefixIsValid && lengthIsValid;
  }

  if (isValid)
  {
    var numberProduct;
    var numberProductDigitIndex;
    var checkSumTotal = 0;

    for (digitCounter = cardNumberLength - 1; 
      digitCounter >= 0; 
      digitCounter--)
    {
      checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
      digitCounter--;
      numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
      for (var productDigitCounter = 0;
        productDigitCounter < numberProduct.length; 
        productDigitCounter++)
      {
        checkSumTotal += 
          parseInt(numberProduct.charAt(productDigitCounter));
      }
    }

    isValid = (checkSumTotal % 10 == 0);
  }

  return isValid;
}

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}
