// Extra Methods for Array object
function m_indexOf(searchElement, fromIndex) {
  if (!fromIndex) fromIndex = 0;
  if (fromIndex < 0) fromIndex = this.length - 1 + fromIndex;
  if (fromIndex < 0) fromIndex = 0;
  if (fromIndex >= this.length) fromIndex = this.length - 1;
  for (var x = fromIndex; x < this.length; x++) if (this[x] === searchElement) return x;
  return -1;
}
if (!Array.indexOf) Array.prototype.indexOf = m_indexOf;

// Extra Methods for String object
function m_trim() {
  return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
}
if (!String.trim) String.prototype.trim = m_trim;

function m_toSentenceCase() {
  return this.substr(0,1).toUpperCase() + this.substr(1);
}
String.prototype.toSentenceCase = m_toSentenceCase;

function m_whitespace(replacement) {
  if (!replacement) replacement = "";
  var str = this.replace(/\r\n/gi, replacement);
  return str.replace(/[\f\n\r\t\v]/gi, replacement);
}
String.prototype.removeWhitespace = m_whitespace;

function m_tags(replacement) {
  if (!replacement) replacement = "";
  // remove script tags and their contents
  var re1 = /<script.*?>.*?<\/script>/gi;
  var str = this.replace(re1, replacement);
  // remove html tags but leave their contents
  var re2 = /<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>/gi;
  return str.replace(re2, replacement);
}
String.prototype.removeTags = m_tags;

function m_cookieVal(cname, key) {
  var cookie = unescape(this.toString());
  var cookies = cookie.split('; ');
  for (i=0; i<cookies.length; i++) {
    arr = cookies[i].split('=');
    if (arr[0] != cname) continue;
    if (arr[1].substring(0,2) != 'a:') continue;
    start = arr[1].indexOf('{') + 1;
    end = arr[1].indexOf(';}');
    values = arr[1].substring(start, end);
    arr = values.split(';');
    for (j=0; j<arr.length; j+=2) {
      if (arr[j].substring(arr[j].indexOf('"') + 1, arr[j].lastIndexOf('"')) == key)
        return arr[j+1].substring(arr[j+1].indexOf('"') + 1, arr[j+1].lastIndexOf('"'));
    }
  }
}
String.prototype.getCookieVal = m_cookieVal;

function m_numeric() {
  //if (this) alert("a == ''"); else alert("a == ?");
  //if (is_empty(this.toString)) alert("empty"); else alert("not empty");
  return (parseFloat(this) == this);
}
String.prototype.isNumeric = m_numeric;

function m_integer() {
  return (parseInt(this) == this);
}
String.prototype.isInteger = m_integer;

function m_alpha() {
  var RE = /[^a-zA-Z]/;
  return !RE.test(this);
}
String.prototype.isAlpha = m_alpha;

function m_validmail() {
  if (this.length == 0) return true;
  var ok = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[].@-_";
  for (i=0; i < this.length; i++) if (ok.indexOf(this.charAt(i)) < 0) return false;
  var suffix = this.substring(this.lastIndexOf(".")+1, this.length);
  switch (suffix.length) {
  case 2:
    var arrSuf = new Array('ac','ad','ae','af','ag','ai','al','am','an','ao','aq','ar','as','at','au','aw','az',
                           'ba','bb','bd','be','bf','bg','bh','bi','bj','bm','bn','bo','br','bs','bt','bv','bw','by','bz',
                           'ca','cc','cd','cf','cg','ch','ci','ck','cl','cm','cn','co','cr','cs','cu','cv','cx','cy','cz',
                           'de','dj','dk','dm','do','dz','ec','ee','eg','eh','er','es','et','eu','fi','fj','fk','fm','fo','fr',
                           'ga','gd','ge','gf','gg','gh','gi','gl','gm','gn','gp','gq','gr','gs','gt','gu','gw','gy',
                           'hk','hm','hn','hr','ht','hu','id','ie','il','im','in','io','iq','ir','is','it','je','jm','jo','jp',
                           'ke','kg','kh','ki','km','kn','kp','kr','kw','ky','kz','la','lb','lc','li','lk','lr','ls','lt','lu','lv','ly',
                           'ma','mc','md','mg','mh','mk','ml','mm','mn','mo','mp','mq','mr','ms','mt','mu','mv','mw','mx','my','mz',
                           'na','nc','ne','nf','ng','ni','nl','no','np','nr','nt','nu','nz','om',
                           'pa','pe','pf','pg','ph','pk','pl','pm','pn','pr','ps','pt','pw','py','qa','re','ro','ru','rw',
                           'sa','sb','sc','sd','se','sg','sh','si','sj','sk','sl','sm','sn','so','sr','st','sv','sy','sz',
                           'tc','td','tf','tg','th','tj','tk','tm','tn','to','tp','tr','tt','tv','tw','tz',
                           'ua','ug','uk','um','us','uy','uz','va','vc','ve','vg','vi','vn','vu','wf','ws','ye','yt','yu','za','zm','zw'); break;
  case 3: var arrSuf = new Array('biz','com','edu','gov','int','mil','net','org','pro'); break;
  case 4: var arrSuf = new Array('aero','coop','info','name'); break;
  case 6: var arrSuf = new Array('museum'); break;
  }
  if (!!!arrSuf) return false;
  for(i=0; i<arrSuf.length; i++) if (arrSuf[i] == suffix) {var exists = true; break;}
  if (!exists) return false;
  if (window.RegExp) {
    var reg1str = "(@.*@)|(\\.\\.)|(^\\.)|(^@)|(@$)|(\\.$)|(@\\.)";
    var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{"+suffix.length+"}|[0-9]{1,3})(\\]?)$";
    var re1 = new RegExp(reg1str);
    var re2 = new RegExp(reg2str);
    if (!re1.test(this) && re2.test(this)) /*if (!!arrSuf) for(i=0; i<arrSuf.length; i++) if (arrSuf[i] == suffix)*/ return true;
    return false;
  }
  else {
    if (this.indexOf("@") >= 0) return true;
    return false;
  }
}
String.prototype.isValidMail = m_validmail;
