function trim(item) {
  item.value = item.value.replace(/^\s+|\s+$/g, '');
}

function upper(item) {
  item.value = item.value.toUpperCase();
}

function isChecked(item){
	if (item.checked){
		return true;
	}
	return false;
}

function validateMandatory (item){
  trim(item);
  if(item.value == ""){
    return false;
  }
  return true;
}

function checkFloat (item){
  var charvalue = "";
  var returnValue = "";
  var numValue;

	trim(item);
  if(item.value == ""){
    return;
  }
	
  for(var i=0;i<item.value.length;i++){
    charvalue = item.value.charAt(i);

    if(charvalue == ","){
      charvalue = ".";
    }

    if(charvalue != "." && charvalue != "0"){
			numValue = parseFloat(charvalue);
      if(isNaN(numValue)){
      	item.value = '';
        return;
      }
    }
    returnValue += charvalue;
  }
  item.value = parseFloat(returnValue);
}

function validateFloat (item){
	checkFloat(item);
  if(item.value == ""){
    return true;
  }

  if(isNaN(parseFloat(item.value))){
  	return false;
  }

  return true;
}

function validateYear (item){
  trim(item);

  if(item.value == ""){
  	return true;
  }
  if(item.value.length != 4 || isNaN(parseFloat(item.value))){
  	return false;
  }
  return true;
}

function validateSIFnr (item){
  trim(item);
  if(item.value == ""){
  	return true;
  }
  if(item.value == "ny medl"){  
  	return true;
  }
  upper(item);
  if(item.value.length != 12){
  	return false;
  }
  for(var i=0;i<item.value.length;i++){
    charvalue = item.value.charAt(i);
    if(i==0 && charvalue != "S") {
    	return false;
    }
    if(i==1 && charvalue != "E") {
    	return false;
    }
    if((i==2 || i==3 || i==4 || i==5) && charvalue != '0') {
    	return false;
    }
    if((i==6 || i==7 || i==8 || i==9 || i==10 || i==11) && 
       charvalue != '0' && charvalue != '1' && charvalue != '2' && 
       charvalue != '3' && charvalue != '4' && charvalue != '5' && 
       charvalue != '6' && charvalue != '7' && charvalue != '8' && charvalue != '9') {
    	return false;
    }
  }
  return true;
}

function validateLicenceNr (item){
	var code = "";
  trim(item);
  if(item.value == ""){
  	return true;
  }
  if(item.value == "ny medl"){  
  	return true;
  }
  upper(item);
  if(item.value.length != 12){
  	return false;
  }
  for(var i=0;i<item.value.length;i++){
    charvalue = item.value.charAt(i);
    if(i==0) {
   		code = charvalue;
    } 
    if(i==1) {
    	code = code + charvalue;
   		if(code != "AT" && code != "BE" && code != "CA" && code != "CH" &&
   			 code != "DE" && code != "DK" && code != "FI" && code != "FO" && 
   			 code != "FR" && code != "GB" && code != "IS" && code != "IT" && 
   			 code != "LU" && code != "NL" && code != "NO" && code != "SI" && code != "US") {
    		return false;
    	}
    }
    if((i==2 || i==3 || i==4 || i==5 || i==6 || i==7 || i==8 || i==9 || i==10 || i==11) && 
       charvalue != '0' && charvalue != '1' && charvalue != '2' && 
       charvalue != '3' && charvalue != '4' && charvalue != '5' && 
       charvalue != '6' && charvalue != '7' && charvalue != '8' && charvalue != '9') {
    	return false;
    }
  }
  return true;
}

function validateFEIFnr (item){
  trim(item);
  if(item.value == ""){
  	return true;
  }
  if(item.value.length != 12){
  	return false;
  }
  for(var i=0;i<item.value.length;i++){
    charvalue = item.value.charAt(i);
    if((i==2 || i==3 || i==4 || i==5 || i==6 || i==7 || i==8 || i==9 || i==10 || i==11) && 
       charvalue != '0' && charvalue != '1' && charvalue != '2' && 
       charvalue != '3' && charvalue != '4' && charvalue != '5' && 
       charvalue != '6' && charvalue != '7' && charvalue != '8' && charvalue != '9') {
    	return false;
    }
  }
  return true;
}



function isNumeric(parm) {
  var numb = '0123456789';
	if (parm == "") 
	  return true;
	for (i=0; i<parm.length; i++) {
		if (numb.indexOf(parm.charAt(i),0) == -1)
      return false;
  }
  return true;
}

var mth = new Array(' ','january','february','march','april','may','june','july','august','september','october','november','december');
var day = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

function validateDate(item) {
	trim(item);
	return validateDateValue(item.value);
}
function validateDateValue(fld) {
	var dd, mm, yy;

	if (fld == '') 
		return true;

	var d1 = fld.split('-');
  if(d1.length != 3) {
  	if(fld.length == 8) {
  		yy = fld.substr(0,4);
  		mm = fld.substr(4,2);
  		dd = fld.substr(6,2);
  	} else {
  		return false;
  	}
  } else {
		yy = d1[0];
		mm = d1[1]; 
 		dd = d1[2]; 
	}

  if (!isNumeric(dd)) 
    return false;
  if (!isNumeric(yy)) 
    return false;
  if (!isNumeric(mm)) 
    return false;

  dd = parseFloat(dd); 
  mm = parseFloat(mm); 
  yy = parseFloat(yy);
  if (yy < 100) 
    yy += 2000;
  if (yy < 1582 || yy > 4881) 
    return false;
  if (mm == 2 && (yy%400 == 0 || (yy%4 == 0 && yy%100 != 0)))
    day[mm-1]++;
  if (mm < 1 || mm > 12) 
    return false;
  if (dd < 1 || dd > day[mm-1]) 
    return false;

  return true;
}

function validateDateTime(item) {
	if (item.value.length == 19) {
		var datepart = item.value.substr(0,10);
		var spacepart = item.value.substr(10,1);
		var timepart = item.value.substr(11,8);

		if(validateDateValue(datepart)) {
			if(spacepart != ' ') {
				return false;
			}
			
			var t1 = timepart.split(':');
		  if(t1.length != 3) {
				return false;
		  }
		  
			hour = t1[0];
			minute = t1[1]; 
 			second = t1[2]; 
 			
		  hour = parseFloat(hour); 
		  minute = parseFloat(minute); 
		  second = parseFloat(second);
		  
		  if(hour < 0 || hour > 23) 
		  	return false;
		  if(minute < 0 || minute > 59) 
		  	return false;
		  if(second < 0 || second > 59) 
		  	return false;
		} else {
			return false;
		}
		return true;
	} else {
		return(validateDate(item));
	}
	
	return false;
}

function validateEmail (item) {
	var emailStr = item.value;
	if(emailStr=='') return true;
	var checkTLD=1;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=emailStr.match(emailPat);

	if (matchArray==null) {
		alert("E-postadressen verkar inte vara korrekt (kontrollera @ och .)");
		return false;
	}

	var user=matchArray[1];
	var domain=matchArray[2];

	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			alert("Användarnamnet i e-postadressen innehåller ogiltiga tecken.");
			return false;
   	}
	}

	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			alert("Domännamnet i e-postadressen innehåller ogiltiga tecken.");
			return false;
   	}
	}

	if (user.match(userPat)==null) {
		alert("Användarnamnet i e-postadressen verkar inte vara giltigt.");
		return false;
	}

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				alert("Mottagande IP adress i e-postadressen är ogiltig!");
				return false;
			}
		}
		return true;
	}

	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			alert("Domännamnet i e-postadressen verkar inte vara giltigt.");
			return false;
   	}
	}

	if (checkTLD && domArr[domArr.length-1].length!=2 && 
			domArr[domArr.length-1].search(knownDomsPat)==-1) {
		alert("E-postadressen måste sluta med en välkänd domän (com, org ...) eller med landskod som har två bokstäver.");
		return false;
	}

	if (len<2) {
		alert("E-postadressen saknar värdnamn!");
		return false;
	}

	return true;
}
