
String.prototype.trim = function() {
  a = this.replace(/^\s+/, '');
  return a.replace(/\s+$/, '');
}

function setNotValid(id) {
  document.getElementById(id).select();
  document.getElementById(id).style.color='red';    
}

function setValid(id) {
  document.getElementById(id).style.color='green';      
}

function isLeapYear(year) {
  if(year%4 == 0) {
	  if(year%100 != 0) {
		  return true;
		} else {
		  if(year%400 == 0)
			  return true;
		  else
			  return false;
	  }
  }
  return false;
}

function daysInMonth(year,month) {
  var days=31;
  switch(month) {
    case 4:
    case 6:
    case 9:
    case 11:
      days=30;
      break;
    case 2:
      days=28;
      if(isLeapYear(year)) days=29;
      break;
  }
  return days;
}

function isMatch(id,message,pattern) {
  src=document.getElementById(id).value.replace(/\ /g,"");
  document.getElementById(id).value=src;
  var regex = new RegExp(pattern);
  var valid=true;
  if(!regex.test(src)) {
    valid=false;
  }
  if(!valid) {
    setNotValid(id);
    alert(message);
  } else {
    setValid(id);
  }
  return valid;  
}

function isEmailAddress(id,message) {
  return isMatch(id,message,"^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$");
}

function isPhoneNumber(id, message) {
  return isMatch(id,message,"^(\\+31|0)[1-9]{1}[0-9]{8}$");
}

function isZipCode(id,message) {
  return isMatch(id,message,"^[1-9]{1}[0-9]{3}[a-zA-Z]{2}$");
}

function isUrl(id,message) {
  return isMatch(id,message,"^(http://)?([a-zA-Z0-9\\-]+\\.){1,3}([a-zA-Z]{2,4})/?$");
}

function isSame(id1,id2,message) {
  if(document.getElementById(id1).value==document.getElementById(id2).value) {
    return true;
  }
  alert(message);
  setNotValid(id1);
  setNotValid(id2);
  return false;
}

function isEmpty(id,message) {
  src=document.getElementById(id).value.trim();
  document.getElementById(id).value=src;
  if(src!='') {
    return false;
  }
  alert(message);
  setNotValid(id);
  return true;
}

function isValidDate(id,message) {
  src=document.getElementById(id).value;
  var wwwReg = /^([0-9]{4}-((0?[1-9])|(1[0-2]))-((0?[0-9])|([1-2][0-9])|(3[0-1])))?$/;
  var regex=new RegExp(wwwReg);
  var valid=true;
  if(regex.test(src)) {
    var parts=src.split('-');
    if(1*parts[2]>daysInMonth(1*parts[0],1*parts[1])) {
      valid=false;
    }
  } else {
    valid=false;
  }
  if(!valid) {
    setNotValid(id);
    alert(message);
  } else {
    setValid(id);
  }
  return valid;   
}

function isDateRange(date1,date2,message) {
  valid=true;
  ldate1=document.getElementById(date1).value.split('-');
  ldate2=document.getElementById(date2).value.split('-');
  ldate1=10000*ldate1[0]+100*ldate1[1]+1*ldate1[2];
  ldate2=10000*ldate2[0]+100*ldate2[1]+1*ldate2[2];
  if((ldate1>=ldate2)||(isNaN(ldate1)&&!isNaN(ldate2)) || (isNaN(ldate2)&&!isNaN(ldate1))) {
    valid=false;
  }
  if(!valid) {
    setNotValid(date1);
    setNotValid(date2);
    alert(message);
  }
  return valid;
}

function isPrice(id,message) {
  return isMatch(id,message,"^([0-9]|\\.|\\,)*$");
}

function isNumber(id,message) {
  valid=true;
  if(isNaN(document.getElementById(id).value)) {
    valid=false;
  }
  if(!valid) {
    setNotValid(id);
    alert(message);
  }
  return valid;  
}

function testBool(value,message) {
  valid=true;
  if(!value) {
    valid=false;
    alert(message);
  }
  return valid;  
}


