// add trim function to String prototype

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

// form validation utils

function trimAndValidate(obj, name) {
  if (!obj) { return true; }
  obj.value = obj.value.trim();
  if (obj.value == '') {
    if (name != '') {
      alert('Please enter the ' + name + '!');
      obj.focus();
    }
    return false;
  }
  return true;
}

function getKeyCode(e) {
  var k;
  if (!e) { 
      e = window.event;
    }

//      opera.postError(e.keyCode + ", " + e.charCode);
    
  if (e.charCode == 0 || e.which == 0) { return 0; } // FF control key
  k = e.keyCode; 
  if (k==0) {
    k = e.charCode; 
  }
  return k;
}

function checkNoSpace(e, obj) {
  var k = getKeyCode(e);
  if (k == 0) { return true; }
  return (k != 32);
}

function checkNumeric(e, obj, isint, decPlaces, addChars) {
  var k = getKeyCode(e);
  if (k == 0) { return true; }
  var b = false;
  if ((k > 47 && k < 58) || (!isint && k == 46)) {
    b = true;
    if (!isint && obj.value.indexOf('.') > -1) {
      if (k == 46) {
        b = false;
      } else if (decPlaces > 0) {

        var curPos = getCursorPosition(obj);
        var decPos = obj.value.indexOf('.');

        b = (decPos == -1 || curPos <= decPos || (obj.value.length <= decPos + decPlaces));

        //obj.value.length <= obj.value.indexOf('.') + decPlaces;
      }
    }
  }
  if (typeof addChars != "undefined") {
    for (var i=0; !b && i<addChars.length; i++) {
      b = k == addChars.charCodeAt(i);
    }
  }
  return (b); 
}

function getCursorPosition(obj) {
  var curPos = 0;
  if (document.all != null) { // IE cannot find cursor position easily
    var org = obj.value;
    var sel = document.selection.createRange().duplicate();
    sel.text = '#';
    curPos = obj.value.indexOf('#');
    sel.moveStart("character", -1)
    sel.text = '';   
  } else {
   curPos = obj.selectionStart;     
  }
  return curPos;
}

function checkDate(e, obj) { 
  return checkNumeric(e, obj, true, 0, '/');
}    

function testDateString(s){
    var v, r, re;   
    v = null;
    re = /^((0?[1-9])|([1-2][0-9]|3[0-1]))\/((0?[1-9])|(1[0-2]))\/((\d{2})|(\d{4}))$/g;
    r = s.match(re);               
    if (r) {
      var ay = s.split('/');
      var dt = new Date(ay[2], ay[1] - 1, ay[0]);
      if (ay[2].length == 2) {
        var cent = Math.floor(dt.getFullYear() / 100);
        ay[2] = cent + ay[2];
      }
      if (dt.getDate() == ay[0] && dt.getMonth() == ay[1] - 1 && dt.getFullYear() == ay[2]) {
        v = dt;
      }
    }
    return v;
}

function testEmailString(s){
  var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return filter.test(s);
}

function validateDate(oSrc, args) {
	args.IsValid = (testDateString(args.Value) != null);
}

function escapeHTML (str)
{
   var div = document.createElement('div');
   var text = document.createTextNode(str);
   div.appendChild(text);
   return div.innerHTML;
}
