// JavaScript Document
/**
 * 2007-01-18  SM 
 *
 * Aufgerufen wird die Formularüberprüfung mit checkForm(form_name,lang,editorArray)
 * Die Felder werden gemäss alt Attribut geprüft r = required, d = datum, e = email, n = nummer
 * Ausnahme sind Textfelder und Selects, dort muss in der id  _r stehen, damit sie überprüft werden
 * HTML Editor wird in Textaera geschrieben
 * Called is the form checking with checkForm(form_name,lang,editorArray)
 * The fields are check accoring to there alt attributes r = required, d = date, e = email, n = number
 * Execptions are textareas and selects, there the id must contain _r, that they are checked
 * phpEditor is written into textarea 
 *
 * @version 0.2.2
 * @author Stefan Malär
 */
var language_array = new Array();
language_array['error_message'] = new Array();
language_array['error_message']['de'] = 'Eingabe-Fehler:\n';
language_array['error_message']['en'] = 'Input error:\n';
language_array['fill_in'] = new Array();
language_array['fill_in']['de'] = ': Bitte ausfüllen!\n';
language_array['fill_in']['en'] = ': Please fill out!\n';
language_array['wrong_format'] = new Array();
language_array['wrong_format']['de'] = ': Das Format ist nicht korrekt!\n';
language_array['wrong_format']['en'] = ': The format is not correct!\n';
language_array['fill_in_check'] = new Array();
language_array['fill_in_check']['de'] = ': Bitte aktivieren!\n';
language_array['fill_in_check']['en'] = ': Please check!\n';



Array.prototype.inArray = function(search_term) {
  var i = this.length;
  if (i > 0) {
	 do {
		if (this[i] === search_term) {
		   return true;
		}
	 } while (i--);
  }
  return false;
}

/* Check the contents of a form
*
*@param form_name Name of the form
*@param lang Language
*
*@return boolean True if check successful
*/
function checkForm(form_name, lang,editorArray) {
 var error_message = language_array['error_message'][lang];
 var error = false;
 var first_error = 999;
 var focus_on;

 if(editorArray){
 	console.log('mit array');
	try{	
			for ( keyVar in editorArray ) {
				if(document.getElementById(editorArray[keyVar]+'_viewMode').firstChild.nodeValue == 1)
				{
	  		 	var iHTML_current = document.getElementById(editorArray[keyVar]).contentWindow.document.body.innerHTML;	
				try{iHTML_current = editor2html(iHTML_current);}
				catch(try_error){ 	iHTML_current = iHTML_current.replace(/&?l?t?;?<img src=..{0,30}\/admin\/images\/php.gif. ?\/?><!-- <\?php/gi,"<?php");
												iHTML_current = iHTML_current.replace(/\?> -->&?g?t?;?/gi,"?>"); }
					if(iHTML_current == '<br>') {
						 iHTML_current = '';
					}
				document.getElementById(editorArray[keyVar] + '_text').value = iHTML_current;
	  			console.log(document.getElementById(editorArray[keyVar] + '_text').value);
				}		
	 	}
	}catch(error_try){console.error(error_try);}
}  
 // Obligatorisch Felder auf Schwarz setzten
    for(var i = 0; i < document.getElementsByTagName("td").length; i++){
        	if(document.getElementsByTagName("td")[i].style.color == 'rgb(255, 0, 0)'){
    			document.getElementsByTagName("td")[i].style.color = '#000000';
    		}
    }
    for(var i = 0; i < document.getElementsByTagName("span").length; i++){
    		if(document.getElementsByTagName("span")[i].style.color == 'rgb(255, 0, 0)'){
    			document.getElementsByTagName("span")[i].style.color = '#000000';
    		}
    }
        for(var i = 0; i < document.getElementsByTagName("div").length; i++){
    		if(document.getElementsByTagName("div")[i].style.color == 'rgb(255, 0, 0)'){
    			document.getElementsByTagName("div")[i].style.color = '#000000';
    		}
    }
        for(var i = 0; i < document.getElementsByTagName("p").length; i++){
        	if(document.getElementsByTagName("p")[i].style.color == 'rgb(255, 0, 0)'){
    			document.getElementsByTagName("p")[i].style.color = '#000000';
    		}
    }
    for(var i = 0; i < document.getElementsByTagName("label").length; i++){
        	if(document.getElementsByTagName("label")[i].style.color == 'rgb(255, 0, 0)'){
    			document.getElementsByTagName("label")[i].style.color = '#000000';
    		}
    }


for(var i = 0; i < document.forms[form_name].elements.length; i++){

    var current_element = document.forms[form_name].elements[i];
	var type_exclude = new Array('submit','textarea','select-one');
	
	//alert(current_element.type+ '  '+current_element.alt);
	if(!type_exclude.inArray(current_element.type) && current_element.alt)
	{
		//alert(current_element.type);
		if(current_element.type == "radio")
		{
			if(current_element.alt.indexOf('r') > -1)
			{
				var radios = document.forms[form_name].elements[current_element.name]
				k = 0;
				for(h = 0; h < radios.length; h++)
				{
				  if (radios[h].checked)
				  {
					k++;
				  }
				}
				if(k == 0)
				{
				  	error = true;
				  	try{
				  	if(document.getElementById(current_element.id + '_text').firstChild.nodeValue == null) {
						if(document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue == null){
							error_message += document.getElementById(current_element.id + '_text').childNodes[1].nodeValue + language_array['fill_in'][lang];
						}	
						else{	
				  			error_message += document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue + language_array['fill_in'][lang];
				  		}	
					}
						else{
							error_message += document.getElementById(current_element.id + '_text').firstChild.nodeValue + language_array['fill_in'][lang];
						}				
						}catch(error_try){error_message += current_element.name + language_array['fill_in'][lang];}
					try{document.getElementById(current_element.id + '_text').style.color = '#FF0000';}catch(error_try){}
					if(i < first_error) {first_error = i; focus_on = current_element;}
				}
				i = i + radios.length - 1;
				
			}//end if(current_element.alt.indexOf('r') > -1)	
		}//end if(current_element.type == "radio")			
		else if(current_element.type == "checkbox")
		{
			if(current_element.alt.indexOf('r') > -1)
			{
				if (!current_element.checked)
				{
				  	error = true;
				  	try{
				  	if(document.getElementById(current_element.id + '_text').firstChild.nodeValue == null) {
						if(document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue == null){
							error_message += document.getElementById(current_element.id + '_text').childNodes[1].nodeValue + language_array['fill_in_check'][lang];
						}	
						else{	
				  			error_message += document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue + language_array['fill_in_check'][lang];
				  		}	
					}
					else{
						error_message += document.getElementById(current_element.id + '_text').firstChild.nodeValue + language_array['fill_in_check'][lang];
					}
						}catch(error_try){error_message += current_element.name + language_array['fill_in_check'][lang];}
					try{document.getElementById(current_element.id + '_text').style.color = '#FF0000';}catch(error_try){}
					if(i < first_error) {first_error = i; focus_on = current_element;}
				}
			}//end if(current_element.alt.indexOf('r') > -1)	
		}//end else if(current_element.type == "checkbox")
		else
		{
			if (current_element.value == '')			
			{
				if(current_element.alt.indexOf('r') > -1)
				{
					error = true;
				    	try{
				  	if(document.getElementById(current_element.id + '_text').firstChild.nodeValue == null) {
						if(document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue == null){
							error_message += document.getElementById(current_element.id + '_text').childNodes[1].nodeValue + language_array['fill_in'][lang];
						}	
						else{	
				  			error_message += document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue + language_array['fill_in'][lang];
				  		}	
					}
						else{
							error_message += document.getElementById(current_element.id + '_text').firstChild.nodeValue + language_array['fill_in'][lang];
						}
						}catch(error_try){error_message += current_element.name + language_array['fill_in'][lang];}
					try{document.getElementById(current_element.id + '_text').style.color = '#FF0000';}catch(error_try){}
					if(i < first_error) {first_error = i; focus_on = current_element;}
				}
			}
			else
			{
				if(current_element.alt.indexOf('n') > -1)
				{
					if(!check_number(current_element.value))
					{
						error = true;
						try{
				  	if(document.getElementById(current_element.id + '_text').firstChild.nodeValue == null) {
						if(document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue == null){
							error_message += document.getElementById(current_element.id + '_text').childNodes[1].nodeValue + language_array['wrong_format'][lang];
						}	
						else{	
				  			error_message += document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue + language_array['wrong_format'][lang];
				  		}	
					}
						else{
							error_message += document.getElementById(current_element.id + '_text').firstChild.nodeValue + language_array['wrong_format'][lang];
						}
						}catch(error_try){error_message += current_element.name + language_array['fill_in'][lang];}
					try{document.getElementById(current_element.id + '_text').style.color = '#FF0000';}catch(error_try){}
						if(i < first_error) {first_error = i; focus_on = current_element;}
					}
				}
				else if(current_element.alt.indexOf('d') > -1)
				{
					if(!check_date(current_element.value))
					{
						error = true;
						try{
				  	if(document.getElementById(current_element.id + '_text').firstChild.nodeValue == null) {
						if(document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue == null){
							error_message += document.getElementById(current_element.id + '_text').childNodes[1].nodeValue + language_array['wrong_format'][lang];
						}	
						else{	
				  			error_message += document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue + language_array['wrong_format'][lang];
				  		}	
					}
						else{
							error_message += document.getElementById(current_element.id + '_text').firstChild.nodeValue + language_array['wrong_format'][lang];
						}						
						}catch(error_try){error_message += current_element.name + language_array['fill_in'][lang];}
					    try{document.getElementById(current_element.id + '_text').style.color = '#FF0000';}catch(error_try){}
						if(i < first_error) {first_error = i; focus_on = current_element;}
					}
				}
				else if(current_element.alt.indexOf('e') > -1)
				{
					if(!check_email(current_element.value))
					{
						error = true;
						try{
				  	if(document.getElementById(current_element.id + '_text').firstChild.nodeValue == null) {
						if(document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue == null){
							error_message += document.getElementById(current_element.id + '_text').childNodes[1].nodeValue + language_array['wrong_format'][lang];
						}	
						else{	
				  			error_message += document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue + language_array['wrong_format'][lang];
				  		}	
					}
						else{
							error_message += document.getElementById(current_element.id + '_text').firstChild.nodeValue + language_array['wrong_format'][lang];
						}						
						}catch(error_try){error_message += current_element.name + language_array['fill_in'][lang];}
					    try{document.getElementById(current_element.id + '_text').style.color = '#FF0000';}catch(error_try){}
						if(i < first_error) {first_error = i; focus_on = current_element;}
					}
				}
			}		
		}//end else	
	}//if(!type_exclude.inArray(current_element.type))
	else if (current_element.type == 'textarea')
	{
	//alert(current_element.type+ '  '+current_element.id+'  '+current_element.value);
				if(current_element.id.indexOf('_r') > -1)
				{
					if(current_element.value == '')
					{
						error = true;
						try{
				  	if(document.getElementById(current_element.id + '_text').firstChild.nodeValue == null) {
						if(document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue == null){
							error_message += document.getElementById(current_element.id + '_text').childNodes[1].nodeValue + language_array['fill_in'][lang];
						}	
						else{	
				  			error_message += document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue + language_array['fill_in'][lang];
				  		}	
					}
						else{
							error_message += document.getElementById(current_element.id + '_text').firstChild.nodeValue + language_array['fill_in'][lang];
						}
						}catch(error_try){error_message += current_element.name + language_array['fill_in'][lang];}
					    try{document.getElementById(current_element.id + '_text').style.color = '#FF0000';}catch(error_try){}
						if(i < first_error) {first_error = i; focus_on = current_element;}
					}
				}
	}		
		else if (current_element.type == 'select-one')
	{
	//alert(current_element.type+ '  '+current_element.id+'  '+current_element.value);
				if(current_element.id.indexOf('_r') > -1)
				{
					if(current_element.value == '')
					{
						error = true;
						try{
				  	if(document.getElementById(current_element.id + '_text').firstChild.nodeValue == null) {
						if(document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue == null){
							error_message += document.getElementById(current_element.id + '_text').childNodes[1].nodeValue + language_array['fill_in'][lang];
						}	
						else{	
				  			error_message += document.getElementById(current_element.id + '_text').firstChild.firstChild.nodeValue + language_array['fill_in'][lang];
				  		}	
					}
						else{
							error_message += document.getElementById(current_element.id + '_text').firstChild.nodeValue + language_array['fill_in'][lang];
						}
						}catch(error_try){error_message += current_element.name + language_array['fill_in'][lang];}
					    try{document.getElementById(current_element.id + '_text').style.color = '#FF0000';}catch(error_try){}
						if(i < first_error) {first_error = i; focus_on = current_element;}
					}
				}
	}				
}//for(var i = 0; i < document.forms[form_name].elements.length; i++)



	if(error)
	{		
		alert(error_message);
  		focus_on.focus();
		return false;
	}
	else
	{
		//alert('no error');
		return true;
	}
}
 /* Ueberpruefen des Name-Feldes auf Inhalt
 if (document.formular.name.value == '') {
  error = true;
  error_message += "- Bitte Name angeben!\n";
  document.getElementById("name").style.color = '#FF0000';
  if(1 < first_error) {first_error = 1; focus_on = document.formular.name;}
 }
*/ 
 


/* Check if a string is valid email address
*
*@param email string String to be checked
*
*@return boolean True if string is a valid email address
*/
function check_email(email)
{
	var mailUser   = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
	var mailDomain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
		var regExp     = "^" + mailUser + "\@" + mailDomain + "$";
		var regExpObj  = new RegExp(regExp);
	if (regExpObj.test(email))
	{
		return true;
	}
	else
	{
		return false;
	}
}

/* Check if a string is valid email address
*
*@param number string String to be checked
*
*@return boolean True if string is a number
*/
function check_number(number)
{
	var regExp    = /^-?[0-9]+(,[0-9]+|.[0-9]+)?$/gi;
	var regExpObj = new RegExp(regExp);
	
	if (regExpObj.test(number))
	{
		return true;
	}
	else
	{
	  return false;
	}
}

/* Check if a string is valid date
*
*@param date string String to be checked
*
*@return boolean True if string is a valid date
*/
function check_date(date)
{
   	var regExp = /^((19|20|21)\d{2})-(0[0-9]|1[0-2])-(0[0-9]|[12][0-9]|3[01]) ?$/;
	var regExpObj = new RegExp(regExp);
	
	if (regExpObj.test(date))
	{
		return true;
	}
	else
	{
	  return false;
	}
}