
	/*
	 * Copyright (c) 2000-2002 by the Daimler Chrysler Consult Graz GmbH. 
	 * Dr. Aunerstrasse 21, 8074 Raaba, Austria.
	 * All rights reserved. 
	 *
	 * This software is the confidential and proprietary information of Daimler 
	 * Chrysler Consult Graz, GmbH. ("Confidential Information"). You shall not
	 * disclose such Confidential Information and shall use it only in
	 * accordance with the terms of the license agreement you entered into
	 * with DCCG.
	 *
	 * This software is provided "AS IS," without a warranty of any kind. ALL
	 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
	 * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
	 * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. DCCG AND ITS LICENSORS SHALL NOT BE
	 * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
	 * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL DCCG OR ITS
	 * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
	 * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
	 * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
	 * OR INABILITY TO USE SOFTWARE, EVEN IF DCCG HAS BEEN ADVISED OF THE
	 * POSSIBILITY OF SUCH DAMAGES.
	 *
	 */

	/*
	*  Validate CDA Form:
	*  - check if fields are empty for radiobuttons, checkboxes, textfields, textareas
	*  - check for valid values in textfields and textareas (length, date format, email and number)
	*    VALIDATION TYPES: LENGTH, DATEDE, DATEEN, MAIL, NUMBER
	*/

	function checkForm(formName) {
		
		if (formName=='') {
			formName="C2CAUTOFORM";
		}
		checkEncoding(formName);
		strError='';
		var manFieldsArray = new Array();
		images=document.images; 
		z=0;
		for ( k=0; k<images.length; k++ ) {
			anImage=images[k]; 
			
			imageName=anImage.name;
			if ( imageName.substr(0,9)=='MANDATORY' ) { 
			  	imageLen=imageName.length;  
			  	mandatoryField=imageName.substr(10,imageLen);  
			  	manFieldsArray[z]=mandatoryField; 
			  	z++;
			}
		}
		for (j=0; j<manFieldsArray.length;j++ ) {
		 	mandatoryField=manFieldsArray[j]; 
		  	imageLen=mandatoryField.length;  
		 	var docForms=document.getElementsByTagName("FORM");
		 	for (f=0; f<docForms.length;f++ ) {
		 		if (docForms[f].name==formName) {
				 	formElements = docForms[f];
				 	break;
		 		}
		 	}
		 	posTypeEnd = mandatoryField.indexOf('_');
		 	mandatoryFieldType = mandatoryField.substr(0,posTypeEnd);
		 	// radiobuttons
		 	if (mandatoryFieldType=='RADIO') {
		 		mandatoryField=mandatoryField.substr(posTypeEnd+1,imageLen);  
			 	mandatoryObject=formElements[mandatoryField];  
				inputChecked = false;
			 	if (mandatoryObject.length>1) {
					for ( r=0; r<mandatoryObject.length; r++ ) {
						objRadio = mandatoryObject[r];
						if (objRadio.checked) { inputChecked = true; } 
					}
			 	} else {
					if (mandatoryObject.checked) { inputChecked = true; } 
			 	}
				if (!inputChecked) { strError+=mandatoryField+'\n'; }
			// checkbox
			} else if (mandatoryFieldType=='CHECKBOX') {
		 		// set fieldname
		 		mandatoryField=mandatoryField.substr(posTypeEnd+1,imageLen);  
			 	// set object
				inputChecked = false;
			 	for (c=0;c<formElements.length;c++) {
			 		mandatoryFieldName = mandatoryField + '_' + c;
				 	objCheckbox=formElements[mandatoryFieldName]; 
			 		if (objCheckbox!=undefined) {
			 			if (objCheckbox.checked) { inputChecked = true; } 
			 		} else { break; }
			 	}
				if (!inputChecked) { 
					strError+=mandatoryField+'\n';
				}
		 	// TEXTAREA or TEXTFIELD
		 	} else if (mandatoryFieldType=='TEXTAREA' || mandatoryFieldType=='TEXT') {
		 		mandatoryField=mandatoryField.substr(posTypeEnd+1,imageLen); 
		 		posValidationEnd = mandatoryField.indexOf('_');
			 	mandatoryFieldValidation = mandatoryField.substr(0,posValidationEnd);
			 	
				switch (mandatoryFieldValidation) {
					case "NONE": {
					 	mandatoryField=mandatoryField.substr(posValidationEnd+1,imageLen);
					 	mandatoryObject=formElements[mandatoryField];  
					 	mandfieldValue=mandatoryObject.value;
						mandfieldValue=trimValue(mandfieldValue);
						if (mandfieldValue=='') { 
							strError+=mandatoryObject.name+'\n';
						}
						break;
					}
					case "LENGTH": {
					 	mandatoryField=mandatoryField.substr(posValidationEnd+1,imageLen);
					 	
					 	// min. length of value (is 0 if empty)
					 	posMinLvlEnd = mandatoryField.indexOf('_');
					 	mandatoryFieldMinLvl = mandatoryField.substr(0,posMinLvlEnd);
						mandatoryField=mandatoryField.substr(posMinLvlEnd+1,imageLen);

					 	mandatoryObject=formElements[mandatoryField];  
					 	mandfieldValue=mandatoryObject.value;
						mandfieldValue=trimValue(mandfieldValue);
						if (mandfieldValue=='') { 
							strError+=mandatoryObject.name+'('+mandatoryFieldMinLvl+')\n';
						} else if (mandfieldValue.length<mandatoryFieldMinLvl) {
							strError+=mandatoryObject.name+'('+mandatoryFieldMinLvl+')\n';
						}
						break;
					}
					case "DATEDE": {
					 	mandatoryField=mandatoryField.substr(posValidationEnd+1,imageLen);
					 	mandatoryObject=formElements[mandatoryField];  
					 	mandfieldValue=mandatoryObject.value;
						mandfieldValue=trimValue(mandfieldValue);
						if (mandfieldValue=='') { 
							strError+=mandatoryObject.name+' (dd.mm.yyyy)\n';
						} else {
							datestring = mandfieldValue;
							var day;var month;var year;
							isDate = true;
							cal = new Array(31,29,31,30,31,30,31,31,30,31,30,31);
							if (datestring != "") {
								day = datestring.substring(0,2);
								month = datestring.substring(3,5);
								year = datestring.substring(6,datestring.length);
								point1 = datestring.substring(2,3);
								point2 = datestring.substring(5,6);
								if (point1 != '.' || point2 != '.') { isDate=false; }
								if (datestring.length != 10) {
									isDate=false;
								} else {
									if (year > 1900 && year < 2300 && month < 13 && month > 0 && day < 32 && day > 0) {
										if (cal[eval(month)-1] < day && eval(month)!=2) {
											isDate=false;
										} else {
											if (year%4 && day > 28 && eval(month)==2) {
												isDate=false;
											} else { if (day > 29 && eval(month)==2) { isDate=false; } }
										}
									} else { isDate=false; }
								}
							} else { isDate=false; }
							if (isDate==false) { strError+=mandatoryObject.name+' (dd.mm.yyyy)\n'; }
						}
						break;
					}
					case "DATEEN": {
					 	mandatoryField=mandatoryField.substr(posValidationEnd+1,imageLen);
					 	mandatoryObject=formElements[mandatoryField];  
					 	mandfieldValue=mandatoryObject.value;
						mandfieldValue=trimValue(mandfieldValue);
						if (mandfieldValue=='') { 
							strError+=mandatoryObject.name+' (mm/dd/yyyy)\n';
						} else {
							datestring = mandfieldValue;
							var day;var month;var year;
							isDate = true;
							cal = new Array(31,29,31,30,31,30,31,31,30,31,30,31);
							if (datestring != "") {
								month = datestring.substring(0,2);
								day = datestring.substring(3,5);
								year = datestring.substring(6,datestring.length);
								point1 = datestring.substring(2,3);
								point2 = datestring.substring(5,6);
								if (point1 != '/' || point2 != '/') { isDate=false; }
								if (datestring.length != 10) {
									isDate=false;
								} else {
									if (year > 1900 && year < 2300 && month < 13 && month > 0 && day < 32 && day > 0) {
										if (cal[eval(month)-1] < day && eval(month)!=2) {
											isDate=false;
										} else {
											if (year%4 && day > 28 && eval(month)==2) {
												isDate=false;
											} else { if (day > 29 && eval(month)==2) { isDate=false; } }
										}
									} else { isDate=false; }
								}
							} else { isDate=false; }
							if (isDate==false) { strError+=mandatoryObject.name+' (mm/dd/yyyy)\n'; }
						}
						break;
					}
					case "MAIL": {
					 	mandatoryField=mandatoryField.substr(posValidationEnd+1,imageLen);
					 	mandatoryObject=formElements[mandatoryField];  
					 	mandfieldValue=mandatoryObject.value;
						mandfieldValue=trimValue(mandfieldValue);
						if (mandfieldValue=='') { 
							strError+=mandatoryObject.name+'\n';
						} else if (!checkEmail(mandfieldValue)) {
							strError+=mandatoryObject.name+'\n';
						}
						break;
					}
					case "NUMBER": {
					 	mandatoryField=mandatoryField.substr(posValidationEnd+1,imageLen);
					 	mandatoryObject=formElements[mandatoryField];  
					 	mandfieldValue=mandatoryObject.value;
						mandfieldValue=trimValue(mandfieldValue);
						if (mandfieldValue=='') { 
							strError+=mandatoryObject.name+'\n';
						} else if (isNaN(mandfieldValue)) {
							strError+=mandatoryObject.name+'\n';
						}
						break;
					}
					default : {
					 	mandatoryObject=formElements[mandatoryField];  
					 	mandfieldValue=mandatoryObject.value;
						mandfieldValue=trimValue(mandfieldValue);
						if (mandfieldValue=='') { 
							strError+=mandatoryObject.name+'\n';
						}
					}
				}
		 	}
		} 
		strError=strError.replace(/prefixname/g,"");
		return strError;
	 }
	 
	function checkEmail( email ) {
		emailValid = true;
		if ((email.indexOf("@")==-1) || (email.indexOf(" ")!=-1) || (email.indexOf(".")==-1) || (email==". ")) {
			emailValid = false;
		} else if (checkBraces(email)) {
			emailValid = false;
		} else  {
			mailstring1 = email;
			mailstring = mailstring1.split("@");
			if (mailstring[1] == '') { 
				len = 0;
			} else {				    
				mailstring = mailstring[1];					
				mailstring = mailstring.split(".");
				if ( typeof(mailstring[1])!='undefined' ) { 
					len = mailstring[1].length; 
				} else { 
					len = 0; 
				}
				if ( (mailstring[1] == '') || (len<2) || (len>3) ) {
					emailValid = false;
				} 								 				
			}	
		}
		return emailValid;
	}
	
	function checkBraces(String) {
		var Match=String.match(/[{} ]/)
		if (Match!=null) {
			return true;
		}	
	} 

	function trimValue(inputString) {
	   var retValue = inputString;
	   var ch = retValue.substring(0, 1);
	   while (ch == " ") { // Check for spaces at the beginning of the string
	      retValue = retValue.substring(1, retValue.length);
	      ch = retValue.substring(0, 1);
	   }
	   ch = retValue.substring(retValue.length-1, retValue.length);
	   while (ch == " ") { // Check for spaces at the end of the string
	      retValue = retValue.substring(0, retValue.length-1);
	      ch = retValue.substring(retValue.length-1, retValue.length);
	   }
	   return retValue;
   }
   
   /** Stellt das Encoding des Formulars,wenn dieses ein File Attachment beinhaltet
      auf form-data     
      Wenn es eines enthält, wird die Action umgestellt auf http://.... 
      Beides IE Workarounds.
 **/ 
function checkEncoding(fName) {
 formObject = document.forms.item(fName);
 fElements=formObject.elements; 
 hasFileInput=false;
  for (j=0; j<fElements.length;j++ ) {
	   anElement=fElements.item(j);
	   tName='';
	   try {
	   tName=anElement.tagName;
	   }
	   catch ( Error ) {
	   tName='';
	   }
	   tName=tName.toUpperCase();
	   if (tName!='INPUT' ) continue;
	   eType=anElement.type;
	   eType=eType.toUpperCase();
	   if (eType=='FILE' ) {
	    hasFileInput=true;
	    break;
	   }	   
	   } 

	// IE Workarounds, Umsetzen der Action und Method für Formulare mit File Attachment //	
	 if (hasFileInput) {
	  formObject.encoding='multipart/form-data';	
	  var fActionInput = formObject.elements.item('FORM_ACTION_FILE');
	  formObject.action=fActionInput.value;
	}
}