﻿/*
File: format.js
Description: A collection of client-side formatting routines
Created: Jan 11, 2008
Revision History:
  - Created by Brett Mair
  - Addedd Phone, Decimal, Integer & Email formatting routines.
*/

/* 
Key Code Mappings;

              BackSpace: 8
               SpaceBar: 32
        Top Numbers 0-9: 48 -> 57
*Numeric Keypad Numbers: 96 -> 105
                 Hyphen: 189, 109*
          Parenthesis(): 57+Shift, 48+Shift
             Arrow Keys: Left=37, Up=38, Right=39, Down=40
                 Insert: 45
                 Delete: 46
                   Home: 36
                    End: 35
                   PgUp: 33
                 PgDown: 34
*/

function hkdNumber() {
  var iKey = parseFloat(event.keyCode);
  var bShift = event.shiftKey;
  var bAlt = event.altKey;   
  var bCtrl = event.ctrlKey;
  var bResult = false;
  
  switch (iKey) {
    
    case 88: //Cut Operation 
    case 67: //Copy Operation 
    case 86: //Paste Operation
      if (bCtrl) { 
        bResult = true;
      } else {
        bResult = false;
      }
    case 37: //Arrow Keys: Left=37, Up=38, Right=39, Down=40
    case 38:
    case 39:
    case 40:
    case 8: //Backspace
    case 9: //Tab
      bResult = true;
      break;
    case 45:
    case 46:
    case 36:
    case 35:
      bResult = true;
      break;
    case 48:
    case 49:
    case 50:
    case 51:
    case 52:
    case 53:
    case 54:
    case 55:
    case 56:
    case 57:    
    case 96:
    case 97:
    case 98:
    case 99:
    case 100:
    case 101:
    case 102:
    case 103:
    case 104:
    case 105:
      //Top Numbers 0-9(48-57), Numeric KeyPad Numbers 0-9(96-105)
      if (bShift || bAlt) { //Parenthesis
        bResult = false;
      } else {
        bResult = true;
      }
      break;
    case 48 - 57: 
      //Top Numbers 0-9(48-57), Numeric KeyPad Numbers 0-9(96-105)
      if (bShift || bAlt) { //Parenthesis
        bResult = false;
      } else {
        bResult = true;
      }
      break;
    default:
      bResult = false;
      break;
  } 
  /*            
  window.status = ('bResult=' + bResult + ' - ' + 
    'event.keyCode=' + event.keyCode + ' - ' +
    'event.shiftKey=' + event.shiftKey + ' - ' + 
    'event.ctrlKey=' + event.ctrlKey + ' - ' + 
    'event.altKey=' + event.altKey);
  */
  return bResult;
}

function fmtPhone(o) {
  var s = o.value;
  var res = '';
  var sValid = '0123456789';
  
  try {
    for (var i=0; i<s.length; i++) {
      if (sValid.indexOf(s.charAt(i)) != -1) {
        res += s.charAt(i);
      }
    }
    if (res.length == 7) {
      o.value = res.substring(0,3) + '-' + res.substring(3);
    } else if (res.length == 10) {
      o.value = '(' + res.substring(0,3) + ') ' + res.substring(3,6) + '-' + res.substring(6,10);
    } else {
      o.value = res;
    }
  } catch(ex) {
    alert(ex.Message)
  }
  return;
}

function fmtInteger(o) {
  var s = o.value;
  var res = '';
  var sValid = '0123456789';
  try {
    for (var i=0; i<s.length; i++) {
      if (sValid.indexOf(s.charAt(i)) != -1) {
        res += s.charAt(i);
      }
    }
    o.value = res;
  } catch(ex) {
    alert(ex.Message)
  }
  return;
}

function fmtNumber(o,d) {
  var s = o.value;
  var res = '';
  var sValid = '0123456789';
  try {
    for (var i=0; i<s.length; i++) {
      if (sValid.indexOf(s.charAt(i)) != -1) {
        res += s.charAt(i);
      }
    }
    if (res != '') {
      var n = Math.Round(parseFloat(res) * Math.pow(10,d)) / Math.pow(10,d); 
      res = n;
    }
    o.value = res;
  } catch(ex) {
    alert(ex.Message)
  }
  return;
}

//sets the value all to lower case. No validation occurrs.
function fmtEmail(o) {
  o.value = o.value.toLowerCase();
}
