// Copyright 2007 Holodyn Corporation

// Load / Redirect Page
function loadPage( url ){
  if( url != '' )document.location=url;
}

// New Window
function newWindow(url, width, height) {
  if( url.length )
    window.open( url, 'new_window', 'scrollbars=1,width='+width+',height='+height );
  return false;
}

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

// Submit Form to Previous Step
function loadPreviousForm(form_id,step){
  var form = document.forms[form_id];
  form.step = step; form.submit();
  return false;
}

// Validate & Submit
function checkAll( mO, form_id, regEx ){
  var form = document.forms[form_id];
  if( mO.flag == 1 )
    mO.flag = 0;
  else
    mO.flag = 1;
  for(i=0; i<form.elements.length; i++)
    if( form.elements[i].type == 'checkbox' )
      form.elements[i].checked = mO.flag;
}

// Validate & Submit
function submitForm(form_id, act, skip_check){
  var form = document.forms[form_id];
  if(!act)act = form.act.value;
  if( act.match(/delete$/) != null ){
    if(!confirm('Are you sure you wish to delete this Record?'))
      return false;
  } else if( !skip_check ) {
    if( act.match(/cancel$/) == null ){
      if( window.formValidate )
        for(var i=0;i < formValidate.length;i++){
          if( form[ formValidate[i][0] ].type == 'checkbox' ) {
            if( formValidate[i][1] != form[ formValidate[i][0] ].checked ){
              alert( formValidate[i][2] );
              return false;
            }
          } else {
            var check = trim(form[ formValidate[i][0] ].value);
            if( check.match(formValidate[i][1]) == null ) {
              alert( formValidate[i][2] );
              return false;
            }
          }
        }
    }
  }
  form.act.value=act;
  updateFormAction( form );
  form.submit();
  return false;
}

// Update Form
function updateFormAction( form ){
  if( form.option && form.act && form.Itemid ){
    if( form.act.match(/index\.php$/) ){
      form.act += '?option='+form.option.value+'&act='+form.act.value+'&Itemid='+form.Itemid.value;
    } else if( form.act.match(/index\.php\?/) ) {
      form.act = form.act.replace(/index\.php\?.*$/,'index.php?option='+form.option.value+'&act='+form.act.value+'&Itemid='+form.Itemid.value);
    }
  }
}

// Clean Number
function cleanNumber( input ) {
  var myChar, i, b, temp = ''; input = String( input );
  var Nums = new Array('0','1','2','3','4','5','6','7','8','9','.');
  for (var i=0; i < input.length; i++) {
    myChar = input.substring(i,i+1);
    for (var b=0; b < Nums.length; b++)
      if (myChar == Nums[b]) temp += myChar;
  }
  return temp;
}

// Validate Email Address
function checkEmail( myObj ){
  var str=trim(myObj.value);
  var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
  if (!filter.test(str)) {
    alert("Please input a valid email address!");
    myObj.focus();
    return false
  } else
    return true;
};


// Copy Email to Url Field
function copyEmailToURL( form_id, myObj, url_field ){
  eval("var myField = document.getElementById(form_id)."+url_field);
  if( myField )
    if( trim(myField.value) == '' ){
      myField.value = myObj.value.replace( /^.*\@/, '' );
      formatURL( myField );
    }
}

// Format Phone Field
function formatPhone( myObj ) {
  var temp = myObj.value.replace(/\-|\s|\.|\(|\)/g,'');
  if( temp.match( /\d{10}/ ) ) {
    var NewVal = ''; var c = 0;
    for (var i=0; i < temp.length; i++) {
      if (i == 0) { NewVal = "("; };
      if (i == 3) { NewVal = NewVal + ") "; };
      if (i == 6) { NewVal = NewVal + "-"; };
      if (i == 10) { NewVal = NewVal + " "; };
      NewVal = NewVal + temp.substring(i,i+1);
    };
    myObj.focus();
    myObj.value = NewVal;
  }
  return true;
};

// Format URL Field
function formatURL( myObj ){
  var value = trim(myObj.value);
  if( value.length ){
    if( value.match( /^\w+$/ ) != null )
      value = value+'.com';
    if( value.match( /\// ) == null )
      value = value+'/';
    if( value.match( /^\w{3,4}\:/ ) == null )
      if( value.match( /^\w+\.\w+\// ) != null )
        value = 'www.'+value;
    if( value.match( /^\w{3,4}\:/ ) == null )
      value = 'http://'+value;
    if( value.match( /\w{3,4}\:\/\/.*\// ) == null )
      value = value+'/';
    // if( value.match( /\.com$|\.org$|\.net$|\.us$/ ) != null )
    //   value = value+'/';
  }
  myObj.value = value;
}

// Format Date Field
function formatDate( myObj, format ){
  var value = trim(myObj.value);
  if( value.length ){
    if( value.match( /^\d{4,6}/ ) != null ){ //mmddyyyy
      if( value.length > 6 )
        value = value.replace( /(\d{2})(\d{2})(\d{4})/, "$3-$1-$2" );
      else
        value = value.replace( /(\d{2})(\d{2})(\d{2})/, "20$3-$1-$2" );
    } else if( value.match( /\d{2}.\d{2}.\d{4}/ ) != null ){ //mm-dd-yyyy
      value = value.replace( /(\d{2}).(\d{2}).(\d{4})/, "$3-$1-$2" );
    } else if( value.match( /\d{1,2}.\d{1,2}.\d{4}/ ) != null ){ //m-d-yyyy
      value = value.replace( /(\d{1,2}).(\d{1,2}).(\d{4})/, "$3-$1-$2" );
    } else if( value.match( /\d{1,2}.\d{1,2}.\d{2}/ ) != null ){ //m-d-yy
      value = value.replace( /(\d{1,2}).(\d{1,2}).(\d{2})/, "20$3-$1-$2" );
    } else {
      alert("Please Correct the Date Format:\n  yyyy-mm-dd\n  mm-dd-yyyy\n  m-d-yy");
      myObj.focus();
    }
  }
  myObj.value = value;
}

// Format Price
function formatPrice( myObj ) {
  myObj.value = formatPrice_val( myObj.value );
}

// Format Price Val
function formatPrice_val( val ){
  val = cleanNumber( val );
  var pre = val; var post = "00";
  for (var i=(val.length-1); i >= 0; i=i-1) {
    if (val.substring(i,i+1) == '.') {
      pre = val.substring(0,i);
      if (i > (val.length-3))
        post = val.substring(i+1,val.length) + "0";
      else
        post = val.substring(i+1,i+3);
    }
  }
  var NewVal = ''; var c = 0;
  for (var i=(pre.length-1); i >= 0; i=i-1) {
    if (c > 2) { NewVal = "," + NewVal; c = 0; };
    NewVal = pre.substring(i,i+1) + NewVal; c++;
  }
  // NewVal = "$" + NewVal + ( post > 0 ? "." + post : '' );
  return NewVal + (post>0? "."+post:'.00');
}

// Get Select List Box Text
function getSelectedIndexText( form_id, field_id ) {
  return document.forms[ form_id ][ field_id ].options[ document.forms[ form_id ][ field_id ].selectedIndex ].text;
}

// Get Select List Box Value
function getSelectedIndexValue( form_id, field_id ) {
  return document.forms[ form_id ][ field_id ].options[ document.forms[ form_id ][ field_id ].selectedIndex ].value;
}

// Filter Select List Box
// ----------------------------------------------------
var filterSelectListOpt = Array();
var filterSelectListBox = Array();
function filterSelectList( myObj, filter_str ){
  if( filterSelectListOpt[ myObj.id ] == null )
    filterSelectListOpt[ myObj.id ] = myObj.options[ myObj.selectedIndex ].value;
  if( !filterSelectListBox[ myObj.id ] ){
    filterSelectListBox[ myObj.id ] = Array();
    for( var i=0; i < myObj.options.length; i++ )
      filterSelectListBox[ myObj.id ][i] = myObj.options[i];
  }
  while( myObj.options.length ) myObj.options[0] = null;
  var newSelectList = Array(), sIndex = 0;
  for( var i=0; i < filterSelectListBox[ myObj.id ].length; i++ )
    if( filterSelectListBox[ myObj.id ][ i ].text.match( filter_str ) )
      newSelectList.push( filterSelectListBox[ myObj.id ][ i ] );
  for( var i=0; i < newSelectList.length; i++ ){
    myObj.options[i] = newSelectList[i];
    if( myObj.options[i].value == filterSelectListOpt[ myObj.id ] )
      sIndex = i;
  }
  myObj.options.selectedIndex = sIndex;
}

// Get Selected Value
// ----------------------------------------------------
function select_value( myID ){
  var mObj = document.getElementById( myID );
  return mObj.options[mObj.selectedIndex].value;
}

// Get Selected Value List
// ----------------------------------------------------
function select_value_list( myID ){
  return get_select_list( myID, false );
}

// Get Selected Value List
// ----------------------------------------------------
function get_select_list( myID, getAll ){
  var mObj = document.getElementById( myID );
  var mVal = ''; var found = 0;
  for( var i=0; i < mObj.options.length; i++ ){
    if( mObj.options[i].selected || getAll ){
      if( found ) mVal += ',';
      mVal += mObj.options[i].value;
      found++;
    }
  }
  return mVal;
}

// Delete Item(s) from Select List
// ----------------------------------------------------
function select_del( myID ){
  var mObj = document.getElementById( myID );
  for( var i=0; i < mObj.options.length; i++ )
    if( mObj.options[i].selected ){
      mObj.remove( i );
      i--;
    }
}

// Copy Selected Items to Select List
// ----------------------------------------------------
function select_add( fromID, destID ){
  var fObj = document.getElementById( fromID );
  var dObj = document.getElementById( destID );
  for( var i=0; i < fObj.options.length; i++ )
    if( fObj.options[i].selected && (fObj.options[i].value != '') )
      dObj.options[dObj.options.length] = new Option(fObj.options[i].text,fObj.options[i].value);
  select_sort( destID );
}

// Sort Items in Select List - Remove Duplicates
// ----------------------------------------------------
function select_sort( myID ){
  var list = Array();
  var mObj = document.getElementById( myID );
  for( var i=0; i < mObj.options.length; i++ )
    list[i] = mObj.options[i].text + ':|:' + mObj.options[i].value;
  for( var i=0; i < list.length; i++ )
    mObj.remove(0);
  list.sort();
  var last, count = 0;
  for( var i=0; i < list.length; i++ ){
    if( (list[i] != '') && (list[i] != last) ){
      text = list[i].replace( /\:\|\:.*$/, '' );
      value = list[i].replace( /^.*\:\|\:/, '' );
      mObj.options[count++] = new Option(text,value);
    }
    last = list[i];
  }
}

// Limit Input Length in TextArea Objects
// ----------------------------------------------------
function limitInput(fieldObj,maxChars,reportField,outPut) {
  var result = true;
  if (fieldObj.value.length >= maxChars) {
    fieldObj.value = fieldObj.value.substring(0,maxChars);
    result = false;
  }
  if (reportField != '')
    document.getElementById(reportField).innerHTML = sprintf(outPut,(maxChars - fieldObj.value.length));
  if (window.event) window.event.returnValue = result;
  return result;
}

// Copy Object Contents to Clipboard
// ----------------------------------------------------
function copyToCB( myObj ){
  myObj.select();
  if(document.all){
    txt=myObj.createTextRange();
    txt.execCommand("Copy");
  } else {
    alert('Right Click on the Highlighted Text and Select COPY');
  }
}

// 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/
// ----------------------------------------------------
function sprintf() {
  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 function arguments (' + (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
// ----------------------------------------------------
function parseVarStr( 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 );
}

