function trim(stringToTrim) {
    return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
    return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
    return stringToTrim.replace(/\s+$/,"");
}

function isValidID(aString)
  {
    if (aString.length <  6) return false;
    if (aString.length > 20) return false;
    for (i=0; i<aString.length; i++)
      {
        if (! ((aString.charAt(i) == '_')                             ||
               (aString.charAt(i) >= 'a' && aString.charAt(i) <= 'z') ||
               (aString.charAt(i) >= 'A' && aString.charAt(i) <= 'Z') ||
               (aString.charAt(i) >= '0' && aString.charAt(i) <= '9')) )
          return false;
      }
    return true;
  }

function isValidPW(aString)
  {
    if (aString.length <  6) return false;
    if (aString.length > 20) return false;
    var digits=0;
    for (i=0; i<aString.length; i++)
      {
        if (! ((aString.charAt(i) >= 'a' && aString.charAt(i) <= 'z') ||
               (aString.charAt(i) >= 'A' && aString.charAt(i) <= 'Z') ||
               (aString.charAt(i) >= '0' && aString.charAt(i) <= '9')) )
          return false;
        if (aString.charAt(i) >= '0' && aString.charAt(i) <= '9') digits++;
      }
    if (digits < 1)  return false;
    return true;
  }

function isValidAffiliateID(aString)
  {
    if (aString.length <  6) return false;
    if (aString.length > 30) return false;
    var digits=0;
    for (i=0; i<aString.length; i++)
      {
        if (! ((aString.charAt(i) >= 'a' && aString.charAt(i) <= 'z') ||
               (aString.charAt(i) >= '0' && aString.charAt(i) <= '9') ||
               (aString.charAt(i) == '_'))  )
          return false;
      }
    return true;
  }

function stripl(aString)
  {
    var newString = "";
    for (i=0; i<aString.length; i++)
      {
        if (aString.charAt(i) != ' ')
          {
            for (j=i; j<aString.length; j++)
              newString=newString+aString.charAt(j);
            return(newString);
          }
      }
    return(newString);
  }

function stript(aString)
  {
    var newString = "";
    var len = aString.length;
    for (i=aString.length-1; i>=0; i--)
      {
        if (aString.charAt(i) == ' ')
          len--;
        else
          {
            for (j=0; j<len; j++)
              newString=newString+aString.charAt(j);
            return(newString);
          }
      }
    return(newString);
  }

function striplt(aString)
  {
    var newString;
    newString = stripl(aString);
    newString = stript(newString);
    return(newString);
  }


function stripa(aString)
{
  var newString = "";
  for (i=0; i<aString.length; i++)
    {
      if (aString.charAt(i) != ' ')
        {
          newString=newString+aString.charAt(i);
        }
    }
  return(newString);
}


function stripWhiteSpace(aString)
{
  var newString = "";
  for (i=0; i<aString.length; i++)
    {
      if (aString.charAt(i) != ' '  &&
          aString.charAt(i) != '\r' &&
          aString.charAt(i) != '\n' &&
          aString.charAt(i) != '\t')
        {
          newString=newString+aString.charAt(i);
        }
    }
  return(newString);
}

function startsWith(source, aString, case_sensitive)
  {
    var src;
    var str;
    if (case_sensitive)
      {
        src = source;
        str = aString;
      }
    else
      {
        src = source.toLowerCase();
        str = aString.toLowerCase();
      }
    if (str.length > src.length)
      return false;
    if (str == src)
      return true;
    if (src.substring(0,str.length) == str)
      return true;
    return false;
  }


function endsWith(source, aString, case_sensitive)
  {
    var src;
    var str;
    if (case_sensitive)
      {
        src = source;
        str = aString;
      }
    else
      {
        src = source.toLowerCase();
        str = aString.toLowerCase();
      }
    if (str.length > src.length)
      return false;
    if (str == src)
      return true;
    var pos = src.length - str.length;
    if (src.substring(pos) == str)
      return true;
    return false;
  }


function padTo(s,len)
  {
    var temp=s;
    if (s.length < len)
      {
        var n = len - s.length;
        for (var i=0; i<n; i++)
         temp=temp+" ";
      }
    return temp;
  }


function countDigits(aString)
{
  var count=0;
  for (i=0; i<aString.length; i++)
    {
      if (aString.charAt(i) >= '0' && aString.charAt(i) <= '9')
        {
          count++;
        }
    }
  return(count);
}


function getDigits(aString)
{
  var newString = "";
  for (i=0; i<aString.length; i++)
    {
      if (aString.charAt(i) >= '0' && aString.charAt(i) <= '9')
        {
          newString=newString+aString.charAt(i);
        }
    }
  return(newString);
}

function isAlphabetic(aString)
{
  for (i=0; i<aString.length; i++)
    {
      if (! ((aString.charAt(i) >= 'a' && aString.charAt(i) <= 'z') ||
             (aString.charAt(i) >= 'A' && aString.charAt(i) <= 'Z')) )
        return false;
    }
  return true;
}

function isAlphanumeric(aString)
{
  for (i=0; i<aString.length; i++)
    {
      if (! ((aString.charAt(i) >= 'a' && aString.charAt(i) <= 'z') ||
             (aString.charAt(i) >= 'A' && aString.charAt(i) <= 'Z') ||
             (aString.charAt(i) >= '0' && aString.charAt(i) <= '9')) )
        return false;
    }
  return true;
}

function isNumeric(aString)
{
  for (i=0; i<aString.length; i++)
    {
      if (! (aString.charAt(i) >= '0' && aString.charAt(i) <= '9') )
        return false;
    }
  return true;
}

function getNumber(aString)
 {
   var num=0;
   var newString = "";
   for (i=0; i<aString.length; i++)
     {
       if (aString.charAt(i) >= '0' && aString.charAt(i) <= '9')
         {
           newString=newString+aString.charAt(i);
         }
       else
         break;
     }

   for (i=newString.length-1, j=1; i>=0; i--, j*=10)
     {
       num += (j * asNumber(newString.charAt(i)));
     }
   return(num);
 }

function asNumber(aChar)
 {
   return(aChar - '0');
 }


function isValidEmailAddress(email)
  {
    return verify_email(email);

//  if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(email))
//    {
//      return (true)
//    }
//  return (false)
  }


function isValidEmail(email)
  {
    return verify_email(email);

//    var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
//    if (filter.test(email))
//       return true;
//    return false;
  }


function verify_email(email)
 {
   var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;                               // not valid
   var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,4})(\]?)$/;  // valid
   if (!reg1.test(email) && reg2.test(email))
     {
       return true;
     }
   return false;
 }


function ShowFormVariables(theForm)
  {
    msg="";
    for (var i=0; i<theForm.elements.length; i++)
      {
        msg += padTo("NAME: "+theForm.elements[i].name,  30);
        msg += padTo("TYPE: "+theForm.elements[i].type,  30);
        msg += "VALUE: "+theForm.elements[i].value;
        msg += "TEXT: "+theForm.elements[i].text;
        msg += "\n";
      }
    alert(msg);
    return;
  }

function launchPopup(url,pagetitle,args)
  {
    var winHandle = top.open(url,pagetitle,args);

//    winHandle=window.open(url,"AutoProspector",
//       'width='+wWidth+',height='+wHeight+',top='+topmargin+',left='+leftmargin+
//       ',scrollbars=yes,location=yes,directories=no,status=yes,menubar=no,toolbar=yes,resizable=yes');

    if (winHandle != null)
      {
        if (winHandle.opener == null) winHandle.opener = self;
      }
    return winHandle;
  }


function openPopupWindow(url,top,left,width,height)
  {
    if (url.indexOf('?') >= 0)
       url=url+"&pwin=1";
    else
       url=url+"?pwin=1";
    winHandle=launchPopup(url,"AutoProspector",
       'width='+width+',height='+height+',top='+top+',left='+left+
       ',scrollbars=yes,location=yes,directories=no,status=yes,menubar=no,toolbar=yes,resizable=yes');
    if (winHandle.opener == null) winHandle.opener = self;
  }


function displayPopupWindow(url,top,left,width,height)
  {
    var winHandle=launchPopup(url,"MemberWebsite",
       'width='+width+',height='+height+',top='+top+',left='+left+
       ',scrollbars=yes,location=yes,directories=no,status=yes,menubar=no,toolbar=yes,resizable=yes');
    if (winHandle.opener == null) winHandle.opener = self;
  }






//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//
// JSON / AJAX Handlers
//
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//
//----------------------------------------------------------
// GENERIC Function to Make the Service Request, decode
// the response, and invoke the supplied callback with standard
// form:  (status,  data,  message)
//----------------------------------------------------------
function invokeService(url, method, content, callbackFunction)
  {
    // alert("URL: "+url);
    var requestData=null;

// ------------------------------- INCLUDE ONLY IF YOU WANT TO ACTUALLY SEND JSON UP TO SERVER
//  if (content != null)
//    {
//      requestData = dojo.json.serialize(content);
//      content=null;
//    }
// -------------------------------

    var request = {
                   url:         url,
                   method:      method,
                   content:     content,
                   // preventCache: true,
                   handler:
                      function(type, data, evt) {
                           // alert("Type="+type+"  Data="+data+"  Evt="+evt);
                           if (type == 'error')
                             alert('Error Occurred: ' + url);
                           else
                            {
                               var response = dojo.json.evalJson(data);
                               var responseStatus =  parseInt(response.status);

                               var responseData=null;
                               if (responseStatus==0)
                                  responseData=response.data;

                               var responseMessage=null;
                               if (response.message)
                                  responseMessage=response.message;

                               callbackFunction(responseStatus, responseData, responseMessage);
                             }
                      }
                }

    if (requestData != null)
       {
         request.postContent = requestData;
         request.contentType = "application/json";
       }

    dojo.io.bind(request);
  }




//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//
// Arbitrary Program Invocation
//
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//
//----------------------------------------------------------
// GENERIC Function to invoke an Arbitrary Program
//----------------------------------------------------------
function invokeProgram(url, method, content, callbackFunction)
  {
    // alert("URL: "+url);
    var requestData=null;
    var request = {
                   url:         url,
                   method:      method,
                   content:     content,
                   // preventCache: true,
                   handler:
                      function(type, data, evt) {
                           // alert("Type="+type+"  Data="+data+"  Evt="+evt);
                           if (type == 'error')
                             alert('Error Occurred: ' + url);
                           else
                            {
                               var responseStatus = 0;
                               var responseData   = data;
                               var responseMessage= null;

                               callbackFunction(responseStatus, responseData, responseMessage);
                             }
                      }
                }

    if (requestData != null)
       {
         request.postContent = requestData;
         request.contentType = "application/json";
       }

    dojo.io.bind(request);
  }
