//
//  Shared Library
//
//  Author:   Giles Mullen
//  Date:     5/5/2000
//  Updated:  09/06/2001
//
//  Requires: CS00_Lib_English
//

function CS_isCharIn( c, seps )
{
  var ret = false;
  var i;
  for (i = 0; i < seps.length; i++) {
    if (seps.charAt( i ) == c) {
      ret = true;
      break;
    }
  }
  return ret;
}

CS_REGEXPLITS = "/\\.*+?|()[]{}^$ ";
function CS_EscapeRegExpLiterals( s )
{
  var ret = "";
  var i;
  for (i = 0; i < s.length; i++) {
    if (CS_isCharIn( s.charAt( i ), CS_REGEXPLITS ))
      ret += "\\";
    ret += s.charAt( i );
  }
  return ret;
}

function CS_ParseInt( str )
{
  if (typeof( str ) == "number")
    return str;
  var ret = str.replace( /^0*(\d)/, "$1" );
  if (ret == "")
    ret = "0";
  ret = parseInt( ret );
  return ret;
}

function CS_ParseIntEx( str )
{
  if (typeof( str ) == "string" && str != "")
    return CS_ParseInt( str );
  if (typeof( str ) == "number")
    return str;
}

function CS_NumberForceLengthPrepend( num, length )
{
  if (num == null)
    num = 0;
  var ret = "";
  var ter = "";
  var tmp = num.toString();
  var i = 0;
  for (i = 0; i < length; i++) {
    if (i >= tmp.length) {
      ter += "0";
    } else {
      ter += tmp.charAt( tmp.length - i - 1 );
    }
  }
  for (i = 0; i < ter.length; i++) 
    ret += ter.charAt( ter.length - i - 1);
  return ret;
}

function CS_NumberForceLengthAppend( num, length )
{
  var ret = "";
  var tmp = num.toString();
  var i = 0;
  if (tmp.length < length) {
    ret = tmp;
    for (i = 0; i < length - tmp.length; i++)
      ret += "0";
  } else {
    ret = tmp.slice( 0, length );
  }
  return ret;
}

function CS_Round( num, dp )
{
  var fudge = Math.pow(10, dp);
  var sg = num >= 0 ? 1 : -1;
  
  if (this.util) {
    // this branch can be removed once we are confident in the non-PDF-specific branch
    if (dp < 0)
      return 0;
    var fmt = "%." + dp + "f";
    var sg = num >= 0 ? 1 : -1;
    var s = util.printf( fmt, num * sg );
    var ret = parseFloat( s );
    return ret * sg;
  } else {
    num *= sg;
    num *= fudge;
    num = Math.round(num);
    num /= fudge;
    return num *= sg;
  }
}

function CS_CharFilter( string, filter )
{
  if (filter == null)
    return true;
  var t = "[^" + filter + "]";
  var pattern = new RegExp( t );
  return !pattern.test( string );  
}

function CS_ObjectProperties( obj, bVal )
{
  var names = "";
  for (var i in obj) {
    names += typeof( obj[ i ] ) + " " + i;
    if (bVal)
      names += " = " + obj[ i ];
    names += "\n";
  }
  return names;
}

// replaces the first instance of "%s" with the passed in string
var CS_DLRSGN   = "<dlrsgn>";
var CS_DLRSGNRX = /<dlrsgn>/g;
function CS_InsertString( srcStr, insStr )
{
  //
  //  Here's a fun little hack.  '$' is a special character for the
  //  replacement string.  Documentation say use '\\$' do get a 
  //  literal '$'.  Doesn't work.  '$' seems to work by itself as long
  //  there isn't a number immediately following it.  Thus . . .
  //
  var p = /\%s/;
  var ds = /\$/g;
  var rpl = insStr.replace( ds, CS_DLRSGN );
  var ret = srcStr.replace( p, rpl );
      ret = ret.replace( CS_DLRSGNRX, "$" ); 
  return ret;
}

// non-printf-using substitue for util.printf( "%." + p + "f", n );
// does NOT handle any rounding, only chops
function CS_Dec_Chop( numb, places )
{
  if (places<0)
    return 0;
    
  var numbStr = numb.toString();
  var decLoc = numbStr.indexOf(".");
  if (places==0) {
    if (decLoc==-1)
      return numbStr;
    else
      return numbStr.substr(0, decLoc);
  } else {
    if (decLoc==-1) {
      numbStr += ".";
      decLoc = numbStr.length - 1;
    }
    
    // make sure there's enough existing digits
    for( var idx=0; idx < places; idx++)
      numbStr += "0";
    
    return numbStr.substr( 0, decLoc + places + 1 );
  }
}

function CS_FormatMessage( msg ) {
  // takes format string in the form "... %1 ... %2 ... %3"
  // replaces with additional parameters
  // NOTE: won't work with more than 9 replacements
  var args = CS_FormatMessage.arguments;
  var rx = new RegExp();
  var result = msg;
  for ( var idx=1; idx < args.length; idx++) {
    rx.compile( "%" + idx, "g" );
    result = result.replace( rx, args[idx] );
  }
  return result;
}

