/*
	Required script: findDOM.js
*/

/*
	general validation scripts 
	example use: see demo.firstlineestate.com

*/

var val_debug=false;
function focusFormField(formField){
	//alert("hallo");
	//alert(formField.id);
	formField.style.background="#FFFFCC";
	formField.focus();
}
function valform(){
	alertmsg ="FORM VALIDATION STARTS\n";
	result = false;
	
	if(arguments[1]==1){
	validate_fields =val_fields;
	}
	
	for(i=0;i<validate_fields.length;i++){
		
		 result = validate_form_fields(i);
		 
		 if(result == false){
			 	return result;
			 	break;
		 }
	}


	//alert(alertmsg);
	if(val_debug==true){
		alert("debugging");
		result=false;
	}
//	alert(result);
	
	return result;
	
}

function validate_form_fields(fieldnum){
	var message="";

	var fieldId = validate_fields[fieldnum]['id'];
	var msg  = validate_fields[fieldnum]['message'];
	var formField = findDOM(fieldId);
	formField.style.background="#FFFFFF";
	//alert("HOI"+formField);
	
	message += formField;
	
	if(formField == null){
		message = "You are trying to validate a field that does not exist on this page!\n\n[ " + 
								fieldnum + " - " +  fieldId + "]";
		alert(message);
		return false;
	}

	var fieldLabel = validate_fields[fieldnum]['label']
	var fieldValue = formField.value;

	
	if(validate_fields[fieldnum]['required'] == 1){

		result =  validRequired(formField,fieldLabel,msg);
		//alert(result);
		if(result == false){
			return result;
		}
		message += validate_fields[fieldnum]['required'];
		
		//message += validRequired(formField,fieldLabel);
	}
	

	//validate_fields[fieldnum]['required_if']
	
	/*
	NB! test_if og andre *_if virker bare hvs id refererer til en sjekkboks..
*/
	if ((validate_fields[fieldnum]['required_if'] != undefined) ){
		
		if(formField.checked){
		
			var formFieldIf = findDOM(validate_fields[fieldnum]['required_if']);
		
			result =  validRequired(formFieldIf,validate_fields[fieldnum]['label_if'],validate_fields[fieldnum]['msg_if']);
		
			if(result == false){
				return result;
			}
		message += validate_fields[fieldnum]['required'];
	}
	}

	
		switch (validate_fields[fieldnum]['test']){
 			case 'digits':
 				result =  allDigits(fieldValue);
 				message += " alldgits";
 				break;
 			case 'charset':
 				//inValidCharSet(str,charset);
 				break;
 			case 'email':
 				//result = isEmailAddr(email);
 				result = validEmail(formField,fieldLabel);
 				
 				break;
 			case 'passwords':
 				//pwCheck(formField1,formField2);
 				break;
 			case 'date':
 				message += " valid date";
 				result =  validDate(formField,fieldLabel);
 				
 				break;
 			case 'checkbox':
 				result =  validCheckbox(formField,fieldLabel);
 				break;
 				
 			case 'minmax':
 				//ok 23.03.2007 13:29
 				result= validIntMinMax(formField,fieldLabel,validate_fields[fieldnum]['required'],validate_fields[fieldnum]['min'],validate_fields[fieldnum]['max']);
	 			break;
	 			
	 		case 'url':
	 			result= validURL(formField,fieldLabel);
 			case 'number':
 				//validNum(formField,fieldLabel,minV,maxV);
 				break;
 			case 'select':
 				//validSelect(formField,fieldLabel,required);
 				//valSelectBox(fieldName, fieldLabel )
 				break;
 			case 'select_integer':
 				//validSelectInt(formField,fieldLabel,required);
 				break;
 			default:
 				break;
 	}
 	


	//alert(result+"\n" + fieldnum + "\n " +message);
 	//return "\n" + fieldnum + " " +message;
 	//return false;
 return result;
}

/* validation scripts */
function isEmailAddr(email)
{
  var result = false;
  var theStr = new String(email);
  var index = theStr.indexOf("@");
  if (index > 0)
  {
    var pindex = theStr.indexOf(".",index);
    if ((pindex > index+1) && (theStr.length > pindex+1))
	result = true;
  }
  return result;
}

function isURL(url)
{
  var result = true;
  var theStr = new String(url);
	var v = new RegExp();
	v.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");
	if (!v.test(url)) {
      result=false;
 	}
	
	return result;

}

function validRequired(formField,fieldLabel,msg)
{
	if(typeof msg=="undefined"){msg = "";}
	var result = true;
	//alert(formField);

	if (formField.value == "")
	{
		alert('Please enter a value for the "' + fieldLabel +'" field.\n\n' + msg);
		focusFormField(formField);
		result = false;
	}

	return result;
}
function validSelect(formField,fieldLabel) {
	selValue=" ";
	iControlLength = formField.length
    bolSelected = false;
    for (count=0;count<iControlLength;count++){
         if(formField[count].checked){
                   bolSelected = true;
				   selValue=formField[count].value;
                   break;
         }
    }
    if(! bolSelected){
         alert("Please select one option from " + fieldLabel + "!");
         return false;
    }else{
         //alert("You selected" + selValue);
         return true;
    }

}

function valSelectBox(fieldName, fieldLabel ) {
	//alert(fieldName);
	myValue = fieldName.options[fieldName.selectedIndex].value;

	fieldValue   = fieldName.options[fieldName.selectedIndex].value;
   // selected   = fieldName.selectedIndex;
    //fieldValue = document.forms[0][fieldName].options[selected].value;

    if( fieldValue == "" ) {
        alert( "'" + fieldLabel +  "' - Select one of the options." );
		 return false;
	} else{
		 return true;
	}
}

function validSelectInt(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result)
 	{
 		var num = parseInt(formField.value);
 		if (isNaN(num))
 		{
 			alert('Please make a selection from the "' + fieldLabel +'" list. (' + formField.value + ')');


			result = false;
		}
	}

	return result;
}


function pwCheck(formField1,formField2) {

	var result=true;

	if ( formField1.value != formField2.value ) {
		alert("The passwords does not match. Try again.");
		formField1.focus();
		result=false
	}

	return result;
}


function allDigits(str)
{
	return inValidCharSet(str,"0123456789");
}

function inValidCharSet(str,charset)
{
	var result = true;
	//alert(str + " " +charset);
	// Note: doesn't use regular expressions to avoid early Mac browser bugs
	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0)
		{
			result = false;
			break;
		}

	return result;
}

function validEmail(formField,fieldLabel)
{
	var result = true;

	if (result && ((formField.value.length < 3) || !isEmailAddr(formField.value)) )
	{
		alert("Please enter a complete email address in the form: yourname@yourdomain.com");
		focusFormField(formField);
		result = false;
	}

  return result;

}

function validURL(formField,fieldLabel)
{
	var result = true;

	if (result && ((formField.value.length < 3) || !isURL(formField.value)) )
	{
		alert("Please enter a complete URL address in the form: http://www.yourdomain.com");
		focusFormField(formField);
		result = false;
	}

  return result;

}

function validNum(formField,fieldLabel,required,minV,maxV)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result)
 	{
 		if (!allDigits(formField.value))
 		{
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			focusFormField(formField);
			result = false;
		}else{
			if(!minV && !maxV){

			}else{
				if(allDigits(minV) && allDigits(maxV)){
						if((minV>formField.value) || (maxV<formField.value)){
							alert('Please enter a valid number in the "' +fieldLabel + '" field.');
							result=false;
						}

				}else{
					alert('Please check the value you have entered for the "' +fieldLabel + '" field.');
					result=false;
				}
			}
		}
	}

	return result;
}


function validInt(formField,fieldLabel,required)
{
	//alert(formField.name + " " + formField.value);
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result)
 	{
 		var num = parseInt(formField.value);
 		if (isNaN(num))
 		{
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			//focusFormField(formField);

			result = false;
		}
	}

	return result;
}


function validDate(formField,fieldLabel,dFormat)
{
	if(typeof dFormat=="undefined"){
		dFormat = "DD.MM.YYYY";
		
	}
	//defaults	
	splitVal = ".";
	dateparts = new Array(0,1,2);
	//dateparts:rekkefølge på ([day],[month],[year])
	
	switch(dFormat){
		case "DD.MM.YYYY":
			//is default, do nothing
			break;
		case " YYYY-MM-DD":
			//is default, do nothing
			splitval = "-";
			dateparts = (2,1,0);
			break;			
		default:
		//dformat="DD.MM.YYYY"
			break;
	
	}
	

	var result = true;

		//var elems = formField.value.split("/");
		var elems = formField.value.split(splitVal);

 		result = (elems.length == 3); // should be three components

 		if (result)
 		{
 			
 			var month = parseInt(elems[dateparts[1]],10);
  		var day = parseInt(elems[dateparts[0]],10);
 			var year = parseInt(elems[dateparts[2]]);
			
			
			result = allDigits(elems[dateparts[1]]) && (month > 0) && (month < 13) &&
					 allDigits(elems[dateparts[0]]) && (day > 0) && (day < 32) &&
					 allDigits(elems[dateparts[2]]) && ((elems[dateparts[2]].length == 2) || (elems[dateparts[2]].length == 4));
 		}

  		if (!result)
 		{
 			alert('Please enter a date in the format '+ dFormat +' for the "' + fieldLabel +'" field.');
			focusFormField(formField);
		}
	
//alert(result);
	return result;
}


function validIntMinMax(formField,fieldLabel,required,myMin,myMax)
{
	//alert(formField,fieldLabel,required,myMin,myMax);
	var result = true;


	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result)
 	{
 		var num = parseInt(formField.value);
 		if (isNaN(num))
 		{
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			focusFormField(formField);

			result = false;
		}else{
			if(num<myMin){
 				alert('Please enter a number higher than or equal to ' +myMin + ' for the "' + fieldLabel +'" field.');
				focusFormField(formField);
				result = false;
			}
			//alert(num +" " + myMax);
			if(num>myMax){
				alert('Please enter a number below  or equal to' +myMax + '  for the "' + fieldLabel +'" field.');
				focusFormField(formField);
				result = false;
			}
		}

	}

	return result;
}


function validCheckbox(formField,fieldLabel) {
		//alert(formField);
    if(!formField.checked){
         alert("Please confirm by checking " + fieldLabel + "!");
         return false;
    }else{
        return true;
    }

}