var alertMsg = "Too Long";
var doubleByteAlert = "Single Byte Characters Only";
var singleKanaAlert = "Only half-width Katakana is allowed.";

function fieldLimit(field)
{
  maxBytes = field.getAttribute("maxlength");

  theinput=document.getElementById("theinput");
  value=field.value;

  bytes = 0;
  content = "";

  for (i=0;i<value.length;i++){
    var nChar = value.charCodeAt(i)
    if (nChar>256) {
      bytes+=2;
    } else {
      bytes+=1;
    }
    lastContent = content;
    //content = content + value[i];
    content = content + value.substr(i,1);
    // If content is too long, then use last content
    if ( bytes == maxBytes )
    {
      field.value = content;
      return;
    }
    else if ( bytes > maxBytes )
    {
      field.value = lastContent;
      return;
    }
  }
}

function fieldLimitAlrt(field)
{
  maxBytes = field.getAttribute("maxlength");

  theinput=document.getElementById("theinput");
  value=field.value;

  name = field.name;
  // Check for single-width katakana
  /*
  if ( name == 'katakana_lastname' || 
       name == 'katakana_firstname' || 
       name == 'katakana_middlename' || 
       name == 'katakana_mailing_address3' || 
       name == 'katakana_shipping_address3' || 
       name == 'katakana_kit_address3' || 
       name == 'katakana_fee_address3' || 
       name == 'katakana_autoship_address3' 
  ) { isSingleKatakana(field); }
  if (  
       name == 'cc_number' || 
       name == 'mainphone' || 
       name == 'cellphone' || 
       name == 'workphone' || 
       name == 'fax'
  ) { hasDoubleByte(field); }
  */

  bytes = 0;
  content = "";

  for (i=0;i<value.length;i++){
    var nChar = value.charCodeAt(i)
    if (nChar>256) {
      bytes+=2;
    } else {
      bytes+=1;
    }
    lastContent = content;
    //content = content + value[i];
    content = content + value.substr(i,1);
    // If content is too long, then use last content
    var tooLong = false;
    if ( bytes == maxBytes )
    {
      field.value = content;
    }
    else if ( bytes > maxBytes )
    {
      field.value = lastContent;
      tooLong = true;
    }
    if ( tooLong ) {
       alert(alertMsg);
       return;
    }
  }
}

function validateLength(value,max)
{
  // Get the length
  bytes = 0;
  for (i=0;i<value.length;i++){
    var nChar = value.charCodeAt(i)
    if (nChar>256) {
      bytes+=2;
    } else {
      bytes+=1;
    }
  }
  if ( bytes > max )
    return false;
  else
    return true;
}

function hasDoubleByte(field) {
  value = field.value;

  var content = "";
  var isDb = false;
  for (i=0;i<value.length;i++){
    var nChar = value.charCodeAt(i)
    if (nChar>256) {
      isDb = true;
    } else {
      content = content + value.substr(i,1);
    }
  }
  field.value = content;
  if ( isDb == true ) 
      alert(doubleByteAlert);
}

function isSingleKatakana(field) {
  value = field.value;

  var content = "";
  var isSingle = true;
  for (i=0;i<value.length;i++){
    var nChar = value.charCodeAt(i)
    if ( (nChar>=0xFF00 && nChar<=0xFFFE) || (nChar>=0x0030 && nChar <= 0x0039) ) {
      content = content + value.substr(i,1);
    } else {
      isSingle = false;
    }
  }
  field.value = content;
  if ( isSingle == false ) 
      alert(singleKanaAlert);
}
