// *******************************************************
//
// wbCommon
// Copyright 2008 Holodyn Corporation
//
// *******************************************************

// *******************************************************
// Trim Functions
// *******************************************************

if( typeof trim == 'undefined' ){
  var trim = function(stringToTrim) {
    if(!stringToTrim)return stringToTrim;
    return stringToTrim.replace(/^\s+|\s+$/g,"");
  }
}
if( typeof ltrim == 'undefined' ){
  var ltrim = function(stringToTrim) {
    if(!stringToTrim)return stringToTrim;
    return stringToTrim.replace(/^\s+/,"");
  }
}
if( typeof rtrim == 'undefined' ){
  var rtrim = function(stringToTrim) {
    if(!stringToTrim)return stringToTrim;
    return stringToTrim.replace(/\s+$/,"");
  }
}

// *******************************************************
// Add Event
// *******************************************************

if( typeof wbAddEvent == 'undefined' ){
  var wbAddEvent = function(oN,eF,cO){
    if(typeof oN!='string')return false;
    if(typeof eF=='function')eF=("'"+eF+"'").replace(/\n|\r/,' ').replace(/^\'.*?\{/,'').replace(/\}\'$/,'');
    if(eval('typeof '+(cO?'cO.'+oN:oN))!='function')return eval((cO?'cO.'+oN:oN)+'= function(e){ '+eF+' }');
    var oF=("'"+eval((cO?'cO.'+oN:oN))+"'").replace(/\n|\r/,' ').replace(/^\'.*?\{/,'').replace(/\}\'$/,'');
    return eval((cO?'cO.'+oN:oN)+'=function(e){'+eF+' '+oF+'}');
  };
}

// *******************************************************
// Delete Event
// *******************************************************

if( typeof wbDelEvent == 'undefined' ){
  var wbDelEvent = function(oN,eF,cO){
    if(typeof oN != 'string')return false;if(eval('typeof '+(cO?cO.call(oN):oN)) != 'function')return true;
    if(typeof eF=='function')eF=("'"+eF+"'").replace(/\n|\r/,' ').replace(/^\'.*?\{/,'').replace(/\}\'$/,'');
    var oD=("'"+eval((cO?cO.call(oN):oN))+"'").replace(/\n|\r/,' ').replace(/^\'.*?\{/,'').replace(/\}\'$/,'').replace(eF,'');
    if(oD.replace(/\s+/,'').length>0)return eval((cO?cO.call(oN):oN)+'=function(e){'+oD+'}');else return eval((cO?cO.call(oN):oN)+'=function(e){}');
  };
}

// *******************************************************
// Go Back
// *******************************************************

if( typeof goBack == 'undefined' ){
  var goBack = function(steps){
    history.back(steps);
  }
}

// *******************************************************
// Clean Number
// *******************************************************

if( typeof cleanNumber == 'undefined' ){
  var cleanNumber = function( input ) {
    if( input == undefined || trim(input) == '' )return input;
    return input.replace(/[^\d\.]+/g,'');
  }
}

// *******************************************************
// Check if Object is Array
// *******************************************************

if( typeof isArray == 'undefined' ){
  var isArray = function(obj) {
    if( obj == undefined )return false;
    if (obj.constructor.toString().indexOf('Array') >= 0)
      return true;
    return false;
  }
}

// *******************************************************
// Check if Value is in Array
// *******************************************************

if( typeof inArray == 'undefined' ){
  var inArray = function(val,set) {
    if( val == undefined || set == undefined )return false;
    var len = set.length;
    for ( var x = 0 ; x <= len ; x++ ) {
      if ( set[x] == val ) return true;
    }
    return false;
  }
}

// *******************************************************
// This code is in the public domain.
// Feel free to link back to http://jan.moesen.nu/
// source: http://jan.moesen.nu/code/javascript/sprintf-and-printf-in-javascript/
// *******************************************************

if( typeof sprintf == 'undefined' ){
  var sprintf = function() {
    if (!arguments || arguments.length < 1 || !RegExp) return;
    var str = arguments[0];
    var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
    var a = b = [], numSubstitutions = 0, numMatches = 0;
    while (a = re.exec(str)) {
      var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
      var pPrecision = a[5], pType = a[6], rightPart = a[7];
      numMatches++;
      if (pType == '%'){
        subst = '%';
      } else {
        numSubstitutions++;
        if (numSubstitutions >= arguments.length)
        {
          alert('Error! Not enough var arguments  = function(' + (arguments.length - 1) + ', excluding the string)\nfor the number of substitution parameters in string (' + numSubstitutions + ' so far).');
        }
        var param = arguments[numSubstitutions];
        var pad = '';
               if (pPad && pPad.substr(0,1) == "'") pad = leftpart.substr(1,1);
          else if (pPad) pad = pPad;
        var justifyRight = true;
               if (pJustify && pJustify === "-") justifyRight = false;
        var minLength = -1;
               if (pMinLength) minLength = parseInt(pMinLength);
        var precision = -1;
               if (pPrecision && pType == 'f') precision = parseInt(pPrecision.substring(1));
        var subst = param;
               if (pType == 'b') subst = parseInt(param).toString(2);
          else if (pType == 'c') subst = String.fromCharCode(parseInt(param));
          else if (pType == 'd') subst = parseInt(param) ? parseInt(param) : 0;
          else if (pType == 'u') subst = Math.abs(param);
          else if (pType == 'f') subst = (precision > -1) ? Math.round(parseFloat(param) * Math.pow(10, precision)) / Math.pow(10, precision): parseFloat(param);
          else if (pType == 'o') subst = parseInt(param).toString(8);
          else if (pType == 's') subst = param;
          else if (pType == 'x') subst = ('' + parseInt(param).toString(16)).toLowerCase();
          else if (pType == 'X') subst = ('' + parseInt(param).toString(16)).toUpperCase();
      }
      str = leftpart + subst + rightPart;
    }
    return str;
  }
}

// *******************************************************
// Parse URL into Variables
// *******************************************************

if( typeof parseVarStr == 'undefined' ){
  var parseVarStr = function( varStr ) {

    if (varStr.length == 0)
      return;

    var nPos = 0;
    var sChar = "";
    var sWord = "";
    var nMaxVars = 0;
    var sVarLine = "";
    var sName = new Array();
    var sValue = new Array();

    // Parse
    while (nPos < varStr.length) {
      sChar = varStr.substring(nPos, nPos + 1);
      if (sChar == "=") {
        sName[nMaxVars] = sWord;
        sWord = "";
      } else if (sChar == "&") {
        sValue[nMaxVars] = sWord;
        sWord = "";
        nMaxVars++;
      } else if (nPos == varStr.length - 1) {
        sWord += varStr.substring(nPos, nPos + 1);
        sValue[nMaxVars] = sWord;
        sWord = "";
        nMaxVars++;
      } else {
        sWord += sChar;
      }
      nPos++;
    }

    return new Array( sName, sValue );
  }
}

