// jsSQL Tools - jsSQL Framework related tools
//
//  - function formatField( aField , aType )
//  - function alignField( aType )
//  - functions *Pad( aField , aType )
//
// written in JavaScript1.2
//
// conceived and first realized by:
//
//    Federico Sasso
//    Via P.Nenni, 3/2
//    Genova - Italy
//    federicosasso@technologist.com
//
//
// Known issues:
//
// Versions:
// - rel 1.3 - Mar 2001 - Padding fuctions added
// - rel 1.2 - Dec 2000 - Support for new "Hyperlink" and "Image" data types
// - rel 1.1 - Oct 2000 - Support for new "e-mail" and "URL" data types
// - rel 1.0
//
////////////////////////////////////////////////////////////////////////////////////////


var FormatFields_ver = "rel 1.3"; // const
var FormatFields_EngineCompliance = "jsSQL Engine rel 1.2 compliant"; // const

//alert('formatfield.js loaded');


// returns a string with data field properly formatted upon its data type
function formatField( aField , aType )
{
 var ret_str='';
 switch (aType)
 {
  case "Percent":
    var aperc = '';
    var aperc_str = '';
    var it_dec=false;
    var achar;
    //I want jsSQL to keep the decimal place holder as the one used by user's tables
    //but parseFloat wants a dot ('.'), so I have to swap it
    for (var ac=0; ac<aField.length; ac++)
    {
     achar=aField.substring(ac,ac+1)
     if ( achar==',')
     {
      aperc+='.';
      it_dec=true;
     }
     else aperc+=achar;
    }
    aperc_str = ''+ parseFloat(aperc)*100 + '';
    if (it_dec) //uses semicolomn as decimal place holder
    {
     var copyofaperc_str=aperc_str;
     aperc_str='';
     for (var ac=0; ac<copyofaperc_str.length; ac++)
     {
      achar=copyofaperc_str.substring(ac,ac+1)
      if ( achar=='.')
         aperc_str+=',';
      else
         aperc_str+=achar;
     }                 
    }
    ret_str = aperc_str + '%';
    break;
  case "Hyperlink":
    ret_str = '<a href=\"' + aField + '\">' + aField + '</a>';
    break;
  case "Image":
    ret_str = '<img src=\"' + aField + '\" >';
    break;
  case "URL":
    ret_str = '<a href=\"' + aField + '\">' + aField + '</a>';
    break;
  case "e-mail":
    ret_str = '<a href=\"mailto:' + aField + '\">' + aField + '</a>';
    break;
  default:
    ret_str = aField;
 }
 return ret_str;
}

// returns a string with an alignment based on data type
function alignField( aType )
{
 switch (aType)
 {
  case "dd/mm/yyyy":
  case "mm/dd/yyyy":
  case "Percent":
  case "Boolean":
    aAlign="center";
    break;
  case "hh:nn:ss":
  case "hh:nn":
  case "Integer":
  case "Float":
    aAlign="right";
    break;
  case "String":
    aAlign="left";
    break;
  default: aAlign="left";
 }
 return aAlign;
}



// *Pad() functions, return a string padded with white spaces
function Pad(afield, atype, l)
{
 var res;
 if (l<4) l=4; //mininum width;
 var align=alignField(atype);
 switch (align)
 {
  case "right":
    res=LPad(afield, l);
    break;
  case "center":
    res=CPad(afield, l);
    break;
  case "left":
  default:
    res=RPad(afield, l);
 }
 return res;
}

function RPad(astr, l)
{
 var sl, i, res;
 sl=astr.length;
 if (sl>l)
 {
  res=astr.substr(0,l-2);
  res+="..";
 }
 else
 {
  res=astr;
  for (i=sl; i<l; i++) res+=" ";
 }
 return res;
}

function LPad(astr, l)
{
 var sl, i, res, tmp;
 sl=astr.length;
 if (sl>l)
 {
  res=astr.substr(0,l-2);
  res+="..";
 }
 else
 {
  tmp="";
  while (sl++<l) tmp+=" ";
  res=astr+tmp;
  res=tmp+astr;
 }
 return res;
}

function CPad(astr, l)
{
 var res="";
 var sl, i;
 var lft, rgt;
 sl=astr.length;
 if (sl>l)
 {
  res=astr.substr(0,l-2);
  res+="..";
 }
 else if (sl<l)
 {
  lft=parseInt((l-sl)/2);
  rgt=l-sl-lft;
  i=0;
  while (i++<lft) res+=" ";
  res+=astr;
  i=0;
  while (i++<rgt) res+=" ";
 }
 else res=astr;
 return res;
}

