//############### validation objects

var theForm;
var splitter = "ajrsplt"
var currObject;
var currStatment;
var FormNameFieldnameInit = "label$00000000$alerten";
var inputObjectArray = new Array();
var BitstringLength = 10;

var bgRequired = "#cc3333";
var bgError = "#cc3333";
var bgDefault = "#ffffff";

function ObjInputs(name,longname,fieldObj,value,label,bitstring,type,message,validated){
	this.name = name;
	this.longname = longname;
	this.fieldObj = fieldObj;
	this.value = value;
	this.label = label;
	this.bitstring = bitstring;
	this.type = type;
	this.message = message;
	this.validated = validated
	this.isRequired = false;
}

function SplitString(str){
	varArray = str.split(splitter)
	return varArray;

}
function InitFields(){
	// 
	theForm = arguments[0];
	if(arguments.length == 1){
		//alert('og der sendes ingen validering '+ theForm);
		document.forms[theForm].submit();
	}
	
	//****************************************************************************//	
	//** Create 'ObjInputs' objects and store them in global 'inputObjectArray' **//
	//** The form field names is passed on as arguments 
	//** Object properties are defined by parsing the corresponding init variable
	//****************************************************************************//
	for(i=1;i<arguments.length;i++){
		
		tempObj = new ObjInputs();
		tempObj.name = arguments[i];
		tempObj.fieldObj = eval('document.'+arguments[0]+'.'+arguments[i]);
		tempObj.longname = arguments[0]+arguments[i];
		
		tempType = eval('document.'+arguments[0]+'.'+arguments[i]+'.type');
			if(tempType =="undefined" || tempType == "" || tempType== null){
				tempObj.type = 'radio';
			}
			else{
				tempObj.type = eval('document.'+arguments[0]+'.'+arguments[i]+'.type');
			}		
		tempObj.validated = true;
		tempObj.value = tempObj.fieldObj.value;
		varInit = eval(tempObj.longname +'Init')
		SplitString(varInit,'Init');
		tempObj.label = varArray[0];
		tempObj.bitstring = varArray[1];
		tempObj.message = varArray[2];
		inputObjectArray[i-1] = tempObj;
	}
	getValidationFunctions();
}

function createVariables(str,varExt){
	tempvar = eval(str+varExt);
	return tempvar;
}

function getValidationFunctions(){
	currObject = 0;
	AlertString =""	
		
	//************************************************************************//
	//** Loop through all objects in inputObjectArray and validate each one **// 	
	
	for(j=0;j<inputObjectArray.length;j++){
		
		// If text,textarea or password
		if(inputObjectArray[currObject].type == 'text' || inputObjectArray[currObject].type == 'textarea' || inputObjectArray[currObject].type  == 'password'){
		
			tempStr = inputObjectArray[j].bitstring;
			for(i=0;i<tempStr.length;i++)
				{
					if(tempStr.charAt(i)!="0")
					{
						currStatment = i;
						validationSwitch();
					}
					if ( inputObjectArray[j].validated == false )
					{
						break; // Der er ingen grund til at validere et ugyldigt element flere gange - der findes kun en alert-besked!
					}
				}
				
		}
		else
		{
				if(inputObjectArray[currObject].type == 'undefined' || document.forms[theForm].elements[inputObjectArray[currObject].name][0].type == 'radio'){
					currStatment = document.forms[theForm].elements[inputObjectArray[currObject].name][0].type
					getNonTextfieldvalidation();
				}
				else{
					currStatment = inputObjectArray[currObject].type;
					getNonTextfieldvalidation();
				}
			}
			
			currObject++;
	}
		
		changeStyle();
		createAlertString();
		submitForm();
}

function changeStyle(){
	ns4 = (document.layers)? true:false
	ie4 = (document.all)? true:false
	var fieldsOriginalClassName = new Array();
	var classCount = 0;
	for(i=0;i<inputObjectArray.length;i++){
		var firstBit = inputObjectArray[i].bitstring.charAt(0);
		if(!inputObjectArray[i].validated){	
			if((ajrIs.ie4 || ajrIs.ie5) && firstBit == 1  && inputObjectArray[i].type!= 'radio'){
			
				fieldsOriginalClassName[classCount] = inputObjectArray[i].fieldObj.className
				//alert(inputObjectArray[i].fieldObj.name+' '+inputObjectArray[i].fieldObj.style.backgroundColor + ' trace 1')
				inputObjectArray[i].fieldObj.style.background=bgRequired;
				//inputObjectArray[i].fieldObj.className = "RequiredFormfields";
			}
			else{
				if((ajrIs.ie4 || ajrIs.ie5) && firstBit == 0 ){
				
					fieldsOriginalClassName[classCount] = inputObjectArray[i].fieldObj.className
					//alert(inputObjectArray[i].fieldObj.name+' '+inputObjectArray[i].fieldObj.className + ' trace 2')
					inputObjectArray[i].fieldObj.style.background=bgError;
					//inputObjectArray[i].fieldObj.className = "wrongFormatFormfields";
				}
			}
		}
		else{
			if((ajrIs.ie4 || ajrIs.ie5) && inputObjectArray[i].type!= 'radio'){
			
				fieldsOriginalClassName[classCount] = inputObjectArray[i].fieldObj.className;
				inputObjectArray[i].fieldObj.style.background= '';
				inputObjectArray[i].fieldObj.className = fieldsOriginalClassName[classCount].toString(); 
				//alert(inputObjectArray[i].fieldObj.name+' '+inputObjectArray[i].fieldObj.className + ' trace 3')
				
					//inputObjectArray[i].fieldObj.style.background= bgDefault;
					//inputObjectArray[i].fieldObj.className = "DefaulFormfields";
				}
		}
		classCount++;
	}
}
function createAlertString(){
	var alertMe = true;
	var alertStringen = "";
	for(i=0;i<inputObjectArray.length;i++){
		//alert( inputObjectArray[i].name + ' ' + inputObjectArray[i].validated );
		if(!inputObjectArray[i].validated){
			alertMe = false;
			alertStringen += inputObjectArray[i].message +'\n'
		}
		else{
			//alertMe = true;
		}
	}
	if(!alertMe){
	alert(alertStringen);
	}
}

function submitForm(){
var sendMe = false;
	for(i=0 ; i<inputObjectArray.length ; i++){
		//alert(inputObjectArray[i].isRequired + ' ' +inputObjectArray[i].name)
		if(!inputObjectArray[i].validated){
			sendMe = false;
			break;
		}
		else{
			sendMe = true;
		}
	}
	if(sendMe){
		//alert('og der sendes '+ theForm);
		document.forms[theForm].submit();
	}
}

//########### validation switch
function validationSwitch(){

switch (currStatment){

	case 0 :
		requiredField();
	break;
	
	case 1 :
		isValidEmail();
	break;
	
	case 2 :
		isNumber();
	break;
	n
	case 3 :
		isNotNumber();
	break;
	
	case 4 :
		ValidateIntervals();
	break;
	
	case 5 :
		inputLength();
	break;
	
	case 6 :
		CheckMask();
	break;
	
	case 7 :
		CheckPreMadeMask();
	break;
	
	case 8 :
		CheckPasswordFields();
	break;
	
	case 9 :
		//alert('statements 9')
	break;
	
	default : 
		//alert('statements default')
}
}

function getNonTextfieldvalidation(){
	
	switch (currStatment){
	
		case "select-one" :
			CheckDropdown();
		break;
		
		case "select-multiple" :
			alert(currStatment)
		break;
		
		case "radio" :
			validateRadioButtons()
			//alert(currStatment + 'hurea');
			//CheckRadioButtons();		 
		break;
		
		case "checkbox" :
			 alert(currStatment)
		break;

		case "file" :
			alert(currStatment)
		break;
		
		case "hidden" :
			alert(currStatment)
		break;
		
		default:
			//alert('ha ha the end is near')
		
	}
}

//########### validation functions

function requiredField(){
	var str=inputObjectArray[currObject].value;
	inputObjectArray[currObject].isRequired = true;
	
		if(str == null || str ==''){
			inputObjectArray[currObject].validated = false;
			isValid = false;
		}
		else{
			inputObjectArray[currObject].validated = true;
		}

}

function isValidEmailOld(){
	var str=inputObjectArray[currObject].value;
	var filter=/^.+@.+\..{2,3}$/
	if (filter.test(str)){
			inputObjectArray[currObject].validated = true;
		}
	else{
		inputObjectArray[currObject].validated = false;
		}
// if input is NOT required, but if there is input it most be validated 
		if(!inputObjectArray[currObject].isRequired && str == ''){
			inputObjectArray[currObject].validated = true;
		}
}

function isValidEmail(){
	var str=inputObjectArray[currObject].value;
	inputObjectArray[currObject].validated = emailCheck(str); 
}

function isNumber(){
	var str=inputObjectArray[currObject].value;
		if(isNaN(str)){
			inputObjectArray[currObject].validated = false;
		}
		else{
			inputObjectArray[currObject].validated = true;			
		}
// if input is NOT required, but if there is input it most be validated 
		if(inputObjectArray[currObject].isRequired && str == ''){
			inputObjectArray[currObject].validated = false;
		}
}

function isNotNumber(){
	isString = true;
	var str=inputObjectArray[currObject].value;
	for(ii=0;ii<str.length;ii++){
		if(!isNaN(str)){
			isString = false;
		}	
	}
	if(!isString){
		inputObjectArray[currObject].validated = false;
	}
	else{
		inputObjectArray[currObject].validated = true;
	}
// if input is NOT required, but if there is input it most be validated 
		if(!inputObjectArray[currObject].isRequired && str == ''){
			inputObjectArray[currObject].validated = true;
		}
}

function MaxLength(){
	
	var actuVar = createVariables(inputObjectArray[currObject].longname,'Length');
	var str=inputObjectArray[currObject].value;
		if(str.length > actuVar){
			inputObjectArray[currObject].validated = false;
		}
		else{
			inputObjectArray[currObject].validated = true;
		}
// if input is NOT required, but if there is input it most be validated 
		if(!inputObjectArray[currObject].isRequired && str == ''){
			inputObjectArray[currObject].validated = true;
		}
}

function MinLength(){

	var actuVar = createVariables(inputObjectArray[currObject].longname,'Length');
	var str=inputObjectArray[currObject].value;
		if(str.length < actuVar){
			inputObjectArray[currObject].validated = false;
		}
		else{
			inputObjectArray[currObject].validated = true;
		}
// if input is NOT required, but if there is input it most be validated 
		if(!inputObjectArray[currObject].isRequired && str == ''){
			inputObjectArray[currObject].validated = true;
		}
}

function specificLength(){
	var actuVar = createVariables(inputObjectArray[currObject].longname,'Length');
	var str=inputObjectArray[currObject].value;
		if(str.length != actuVar ){
			inputObjectArray[currObject].validated = false;
		}
		else{
			inputObjectArray[currObject].validated = true;
		}
// if input is NOT required, but if there is input it most be validated 
		if(!inputObjectArray[currObject].isRequired && str == ''){
			inputObjectArray[currObject].validated = true;
		}

}

function inputLength(){
	var actuVar = createVariables(inputObjectArray[currObject].longname,'Criteria');
	if(actuVar== 3){
		specificLength();
	}
	if(actuVar== 1){
		MinLength();
	}
	if(actuVar== 2){
		MaxLength();
	}
}

function CheckPasswordFields(){
	var passwordArray = new Array();
	var passes=0;
		for(ii=0;ii<inputObjectArray.length;ii++){
		
			if(inputObjectArray[ii].type== 'password'){
				passwordArray[passes]=inputObjectArray[ii].value;
				passes++;
				} 
		}
	if(passwordArray.length==2){
		if(passwordArray[0] == passwordArray[1]){
			inputObjectArray[currObject].validated = true;
		}
		else{
			inputObjectArray[currObject].validated = false;
		}
	}
}

function CheckPreMadeMask(){
	var str=inputObjectArray[currObject].value;
	var actuVar = createVariables(inputObjectArray[currObject].longname,'Mask');
	var filter = new RegExp(actuVar)
	//alert(filter)
		if (filter.test(str)){
			inputObjectArray[currObject].validated = true;
		}
		else{
			inputObjectArray[currObject].validated = false;
		}
// if input is NOT required, but if there is input it most be validated 
		if(!inputObjectArray[currObject].isRequired && str == ''){
			inputObjectArray[currObject].validated = true;
		}
}

function CheckMask(){
	
	
	var str=inputObjectArray[currObject].value;
	var strMask = createVariables(inputObjectArray[currObject].longname,'Mask');
	
	var arrMask = strMask.split(';')

	for(k=0;k<arrMask.length;k++){

		createMask(arrMask[k]);

		var filter = new RegExp(ValidationMask)
		if (filter.test(str)){
			inputObjectArray[currObject].validated = true
			break;
		}
		else{
			inputObjectArray[currObject].validated = false;
		}
	}	

// if input is NOT required, but if there is input it most be validated 
		if(!inputObjectArray[currObject].isRequired && str == ''){
			inputObjectArray[currObject].validated = true;
		}
}


function createMask(strMask){
			var startPos = '';
			var endPos ='';
			var actuVar = createVariables(inputObjectArray[currObject].longname,'ContainmentPos');
			containment = actuVar;
				if(containment == 1){
					startPos = "^";
					endPos = '';
					
				}
				if(containment == 2){
					startPos = '';
					endPos = '$';
					
				}
				if(containment == 3){
					startPos = '';
					endPos = '';
					
				}
				if(containment == 4){
					startPos = '^';
					endPos = '$';
					
				}
				
			actuVar = strMask; // createVariables(inputObjectArray[currObject].longname,'Mask');
			tempfilter = startPos;
			
			for(jj=0;jj<actuVar.length;jj++){
			
				if (actuVar.charAt(jj)=="#" ||actuVar.charAt(jj)=="%" || actuVar.charAt(jj)=="*" || actuVar.charAt(jj)=="/"  || actuVar.charAt(jj)==" "  || actuVar.charAt(jj)=="+"){
					
					switch (actuVar.charAt(jj)){

						case "#" :
							tempfilter +="\\d"
						break;
					
						case "%" :
							tempfilter +="\\D"
						break;
					
						case "*" :
								tempfilter +="."
						break;
						
						case "/" :
								tempfilter +="\\/"
						break;
						
						case "." :
								tempfilter +="\\."
						break;
						
						case " " :
								tempfilter +="\\w"
						break;
						
						case "+" :
								tempfilter +="\\+"
						break;
					
						default:	
							alert('øv bøv')				
					}	
				}
				else{
					tempfilter +=actuVar.charAt(jj);		
				}
			}
			tempfilter += endPos;
			ValidationMask = tempfilter;
			//alert(ValidationMask);
		}
		
function ValidateIntervals(){
	var actuVar = createVariables(inputObjectArray[currObject].longname,'Interval');
	var RangeArray = actuVar.split("$")
	//alert(RangeArray +' '+inputObjectArray[currObject].name)
	var str = parseFloat(inputObjectArray[currObject].value);
	
	for(jj=0;jj<RangeArray.length;jj=jj+2){
		if(str >= RangeArray[jj] && str <=RangeArray[jj+1]){
			inRange = true;
			break;
		}
		else{
			inRange = false;
		}
	}
	
	if(inRange){
		inputObjectArray[currObject].validated = true;
	}
	else{
		inputObjectArray[currObject].validated = false;
	}
	//if str == NaN convert str to empty string
	if(isNaN(str)){
		str = '';
	}
	// if input is NOT required, but if there is input it most be validated 
		if(!inputObjectArray[currObject].isRequired && str == ''){
			inputObjectArray[currObject].validated = true;
		}
}



function CheckDropdown(){
	
	theDropdown = inputObjectArray[currObject].fieldObj;
		if(theDropdown.options[0].selected == true){
			inputObjectArray[currObject].validated = false;
		}
		else{
			inputObjectArray[currObject].validated = true;
		}
}


function validateRadioButtons(){
	var actuVar = createVariables(inputObjectArray[currObject].longname,'Toselect');

	if(actuVar == 'unspecified'){
		for(i=0;i<document.forms[theForm].elements[inputObjectArray[currObject].name].length;i++){
			if (document.forms[theForm].elements[inputObjectArray[currObject].name][i].checked){
				inputObjectArray[currObject].validated = true;
				break;
			}
			else{
				inputObjectArray[currObject].validated = false;
			}
		}
	}
	else{
		for(i=0;i<document.forms[theForm].elements[inputObjectArray[currObject].name].length;i++){
			if (document.forms[theForm].elements[inputObjectArray[currObject].name][i].checked==1 && document.forms[theForm].elements[inputObjectArray[currObject].name][i].value==actuVar){
				inputObjectArray[currObject].validated = true;
				break;
			}
			else{
				inputObjectArray[currObject].validated = false;
			}
		}
	}
}

