/********************************************************************/
/**** Copyright (c) 2007-2008 Webplus, Inc. All rights reserved. ****/
/********************************************************************/

/****
    | Description: javascript used everywhere
    |
    | CVS History:
    |   $Log: global_javascript.js,v $
    |   Revision 1.1  2009/09/17 22:07:25  int\jamesvg
    |   moved file
    |
    |   Revision 1.3  2008/03/31 22:21:51  jamesvg
    |   exempt var for table default attributes
    |
    |   Revision 1.2  2008/03/28 00:57:39  briankh
    |   changed getElementsByClassName to get it to work
    |
    |   Revision 1.1  2008/03/12 22:59:54  jamesvg
    |   new file
****/

/*************************/
/**  GENERIC functions  **/
/*************************/

// global object by id
// returns object
function $(objId) {
  return document.getElementById(objId);
}

// open in a new window/tab without current page jump
// takes a url string
// returns hard false, uses empty href in link
function go(url) {
  window.open(url);
  return false;
}

// finds all elements based on class name
// returns an array of objects
function getElementsByClassName(className,tag,node) {
  var arr_hasClass = new Array();
  if (tag == null) tag = '*';
  if (node == null) node = document;
  var elements = node.getElementsByTagName(tag);
  //  re = (^|\s)className(\s|$)
  var re = new RegExp('(^|\\s)' + className + '(\\s|$)');
  for (i = 0, j = 0; i < elements.length; i++) {
    if ( elements[i].className.match(re) ) {
      arr_hasClass[j] = elements[i];
      j++;
    }
  }
  return arr_hasClass;
}

// switch display states
function toggle(objId) {
  if($(objId).style.display != 'none') { hide(objId); } else { show(objId); }
  return;
}
function show(objId) { if($(objId)) $(objId).style.display = ''; return; }
function hide(objId) { if($(objId)) $(objId).style.display = 'none'; return; }

// set class attribute
// has an IE and ALL OTHERS condition
function setClass(objId,newClass) {
  objId.setAttribute((document.all ? "className" : "class"),newClass);
} // end setClass

/***************************/
/**  JS_ONLOAD functions  **/
/***************************/

// js_onload()
// runs at the end of template.wml, just before </body>
// place any immediate functions inside of js_onload()
function js_onload() {
  defaultTableAttributes();
} // end js_onload

// defaultTableAttributes()
// sets table cellpadding and cellspacing to zero
// has IE and ALL OTHERS condition
function defaultTableAttributes() {
  var tbl = document.getElementsByTagName('table');
  var exempt_class = 'defaultTableAttributes_exempt';
  var re = new RegExp('(^|\\s)' + exempt_class + '(\\s|$)');
  for (var k = 0; k < tbl.length; k++) {
    if( !tbl[k].className.match(exempt_class) ) {
      if(document.all) {
        /* IE */
        tbl[k].cellPadding = '0';
        tbl[k].cellSpacing = '0';
      } else {
        /* ALL OTHERS */
        tbl[k].setAttribute('cellpadding','0');
        tbl[k].setAttribute('cellspacing','0');
      }
    }
  }
} // end defaultTableAttributes

/************************/
/**  STRING FUNCTIONS  **/
/************************/

// string trim() spaces
// returns string
function trim(str) {
  str = str.replace(/^\s+/, '');
  return str.replace(/\s+$/, '');
}

// string left() and right() functions
// returns string
function left(str, n) {
  var return_val = '';
  if (n <= 0) return_val = '';
  else if (n > String(str).length) return_val = str;
  else return_val = String(str).substring(0,n);
  return return_val;
}
function right(str, n) {
  var return_val = '';
  if (n <= 0) return_val = '';
  else if (n > String(str).length) return_val = str;
  else return_val = String(str).substring(String(str).length, String(str).length - n);
  return return_val;
}

// string toupper() and tolower() functions
// returns string
function toUpper(str) {
  return str.toUpperCase();
}
function toLower(str) {
  return str.toLowerCase();
}

/**************************/
/**  VALIDATE functions  **/
/**************************/

// tests for numeric
// returns true if only digits are found
function isNumeric(num) {
  return num.match(/^\d+$/);
}

// tests for number
// slightly more robust than isNumeric()
// returns true for 123.34, -54.32, $987.54, .123, 4.321e+01
function isNumber(num) {
  return num.match(/^(?:(?:[+\-]?\$?)|(?:\$?[+\-]?))?(?:(?:\d{1,3}(?:(?:,\d{3})|(?:\d))*(?:\.(?:\d*|\d+[eE][+\-]\d+))?)|(?:\.\d+(?:[eE][+\-]\d+)?))$/);
}

// validate email address format, includes plus-sign
// returns bool
function validateEmail(str) {
  var return_val = true;
  var re = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  if( !str.match(re) ) return_val = false;
  return return_val;
}

// textareaCount() and textareaCap() functions
// returns bool if textarea has too many chars
// textareaCap() will also truncate the textarea.value to max allowed
function textareaCount(objId,max) {
  var return_val = true;
  var len = objId.value.replace(/[\u0391-\uffe5]/gi,"kk").length;
  if (len > max) return_val = false;
  return return_val;
}
function textareaCap(objId,max) {
  var return_val = textCount(objId,max);
  if (return_val) objId.value = objId.value.substr(0,max);
  return return_val;
}
