
//
// Miscellaneous general purpose functions.
//
// $Id: misc.js,v 1.3 2006/12/07 19:42:23 giza Exp $
//

function safemailto(addr,site,tld,cover,classN)
{
  document.write('<a class=' + "'"+ classN + "' " + 'href=\"mai'+'lto:'
    +addr+ '&#64;' + site + '&#46;' + tld + '\">'
    +cover + '</a>');
}

// randomize list.
// Given list of numbers 0 to N.  Return a randomized
// list of M of them.
function shuffleList(n,m) {
  var newArray = [];
  var lcv = 0;
  while (lcv <= n)  {
    newArray.push(lcv);
    lcv = lcv + 1;
  }
  newArray = miscShuffle(newArray);

  var numItemsInArray = newArray.length;
  if (m > numItemsInArray){
    m = numItemsInArray;
  }

  var finalArray = [];
  lcv = 0;
  while (lcv < m) {
    finalArray.push(newArray[lcv]);
    lcv = lcv + 1;
  }
  return finalArray;
}


//
// randomize an array
//
function miscShuffle(myArray) {
  var i = myArray.length;
  if ( i == 0 ) return false;
  while ( --i ) {
     var j = Math.floor( Math.random() * ( i + 1 ) );
     var tempi = myArray[i];
     var tempj = myArray[j];
     myArray[i] = tempj;
     myArray[j] = tempi;
   }
  return myArray;
}

//
// Convenience to quickly set same class on set of objects.
//
function setClassListById(lst, cName) {
  for (var i = 0; i < lst.length; i++ ) {
    setClassById(lst[i], cName);
  }
}

//
function setClassById(itm, cName) {
  var p = getObj(itm);
  if (!p) {
    alert("Unable to get " + itm) + " within setClassById";
    return;
  }
  p.className = cName;
}

function upperFirstChar(s) {
  return s.substring(0,1).toUpperCase() + s.substring(1);
}

// pad string s to length of l by inserting character p at left.
function padLeftStr(l,p,s) {
  while (s.length < l) {
    s = p + s;
  }
  return s;
}

// Return array of MM DD YYYY
function getDateAsArray() {
   var today = new Date();
   return new Array(padLeftStr(2,"0",(today.getMonth()+1) + ''),
                    padLeftStr(2,"0",today.getDate() + ''),                    
                    today.getFullYear() + '');
}

//
function prettyMonth(mm) {
  if ("01" == mm) { return "jan"; }
  if ("02" == mm) { return "feb"; }
  if ("03" == mm) { return "mar"; }
  if ("04" == mm) { return "apr"; }
  if ("05" == mm) { return "may"; }
  if ("06" == mm) { return "jun"; }
  if ("07" == mm) { return "jul"; }
  if ("08" == mm) { return "aug"; }
  if ("09" == mm) { return "sep"; }
  if ("10" == mm) { return "oct"; }
  if ("11" == mm) { return "nov"; }
  if ("12" == mm) { return "dec"; }
  return mm;
}

//
function getObj(objId) {
  var obj;
  if (document.getElementById) {
    obj = document.getElementById(objId);
  } else if (document.layers) {
    obj = document.objId;
  } else {
    obj = document.all.objId;
  }
  return obj;
}

/*
  Locate an object by its id and return handle to its
  style.
*/
function getObjStyle(divId) {
  var obj;

  if (document.getElementById)    // DOM3 = IE5, NS6
  {
    if (null == document.getElementById(divId)) {
      return null;
    }
    obj = document.getElementById(divId).style;
  }
  else if (document.layers) // Netscape 4
  {
    obj = document.divId;
  }
  else // IE 4
  {
    if (null == document.all.divId) {
      return null;
    }
    obj = document.all.divId.style;
  }
  return obj;
}

//
function setDivText(divid, txt) {
  var obj = getObj(divid);
  if (! obj) {
    alert("obj is null " + divid);
  }	
  obj.innerHTML = txt;
}

//
function getDivText(divid) {
  var obj = getObj(divid);
  return obj.innerHTML;
}


//
function appendDivText(divid, txt) {
  var obj = getObj(divid);
  obj.innerHTML += txt;
}

//
function prependDivText(divid, txt) {
  var obj = getObj(divid);
  obj.innerHTML = txt + obj.innerHTML;;
}


// return random number between 0 and M
function randM(m) {
  var rnd_no = Math.round(m * Math.random());
  return rnd_no;
}

//
function randomString(strArray) {
  var l = strArray.length;
  var rnd_no = randM(l-1);
  return(strArray[rnd_no]);
}



/*
*/
function hideDivById(divId) {
  var id1 = getObjStyle(divId);
  if(null == id1) {
    alert("unable to get div " + divId);
  }
  id1.visibility='hidden';
  id1.display='none';
}

//
// wrapper for hideDivById. works on entire list of id.
//
function hideDivListById(lst) {
  if (!lst || (0 == lst.length)){
    return;
  }
  for (var i = 0; i < lst.length; i++) {
    hideDivById(lst[i]);
  }
  return;
}

//
function unhideDivListById(lst) {
  for (var i = 0; i < lst.length; i++) {
    unhideDivById(lst[i]);
  }
}

/*
*/
function unhideDivById(divId) {
  var id1 = getObjStyle(divId);
  if(null == id1) {
    alert("unable to get div " + divId);
  }
  id1.visibility='visible';
  id1.display='block';
}


/*
*/
function findPosX(obj){
  var curleft = 0;
  if (obj.offsetParent)  {
    while (obj.offsetParent) {
      curleft += obj.offsetLeft
      obj = obj.offsetParent;
    }
  }
  else if (obj.x) {
    curleft += obj.x;
  }
  return curleft;
}

function findPosY(obj)
{
    var curtop = 0;
    if (obj.offsetParent)
    {
        while (obj.offsetParent)
        {
            curtop += obj.offsetTop
            obj = obj.offsetParent;
        }
    }
    else if (obj.y)
    curtop += obj.y;
    return curtop;
}

//
//
//
function trim(strText) {
  // this will get rid of leading spaces
  while (strText.substring(0,1) == ' ')
    strText = strText.substring(1, strText.length);

  // this will get rid of trailing spaces
  while (strText.substring(strText.length-1,strText.length) == ' ')
    strText = strText.substring(0, strText.length-1);

  return strText;
}

//
// return T if this string holds N integers.
// eg: "2323452323" holds 10 integers.
//
function nInts(n, str) {
  if ((null == str) || (n != str.length)) {
    return false;
  }
  var myChar;
  var myInt;
  for (i = 0; i < n; i++ ) {
    myChar= str.charAt(i);
    myInt = parseInt(myChar);
    if (isNaN(myInt)) {
      return false;
    }
  }
  return true;
}

