/* Built in Functions

 parseInt();
 parseFloat();

 var Dt = new Date();
 alert(Dt.getFullYear());

*/

function isNull(parm)
{
  if(parm.length==0 || parm.length=='')
  {
    return true;
  }
  else
  {
    return false;
  }
}

function zeroIfNull(parm)
{
  if(isNull(parm))
  {
    return 0;
  }
  else
  {
    return parm;
  }
}

function isNum(argv)
{
  if((isNaN(argv)))
  {
    return false;
  }
  else
  {
    return true;
  }
}

function isDate(m, d, yyyy)
{

  month = m;
  day = d;
  year = yyyy;

  if(isNaN(month) || isNaN(day) || isNaN(year))
  {
    return false;
  }
  
  if (month < 1 || month > 12)
  {
    return false;
  }

  if (day < 1 || day > 31)
  {
    return false;
  }

  if ((month==4 || month==6 || month==9 || month==11) && day==31)
  {
    return false;
  }

  if (month == 2)
  {
    var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));

    if (day>29 || (day==29 && !isleap))
    {
      return false;
    }

  }
  return true;
}

function isPhone(pn)
{
    tpn = '';
    for(n=0;n<pn.length;n++)
    {
      if(pn.charAt(n) >= '0' && pn.charAt(n) <= '9')
      {
        tpn = tpn + pn.charAt(n);
      }
    }
    if(tpn.length == 10)
    {
      return tpn;
    }
    else
    {
      return false;
    }
}

function formatPhone(pn)
{
  return pn.substring(0,3) + '-' + pn.substring(3,6) + '-' + pn.substring(6,10);
}

function checkEMail(pEmailValue)
{
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (filter.test(pEmailValue)) 
	{
		return pEmailValue
	}
	else 
	{
		return false
	}
}

function isPostalCode(pc)
{
  pc = pc.toUpperCase();
  
  
    tpc = '';
    for(n=0;n<pc.length;n++)
    {
      if((pc.charAt(n) >= '0' && pc.charAt(n) <=9) || (pc.charAt(n) >= 'A' && pc.charAt(n) <='Z'))
      {
        tpc = tpc + pc.charAt(n);
      }
    }
    if(tpc.length == 6)
    {
      for(l=0;l<6;l+=2)
      {
        if(tpc.charAt(l) < 'A' || tpc.charAt(l) > 'Z')
        {
          return false;
        }
        if(tpc.charAt(l+1) < '0' || tpc.charAt(l+1) > '9')
        {
          return false;
        }
      }
      return tpc.substring(0,3) + ' ' + tpc.substring(3,6);
    }
    else
    {
      return false;
    }
  
}

function formatDecimal(num,pl)
{
  snum = num * 100;
  snum = Math.round(snum);
  snum = snum / 100;

  snum = snum + '';
  zeros = '0000000000';

  if(snum.indexOf('.') == -1)
  {
    snum = snum + '.';
  }

  snum = snum + zeros;
  snum = snum.substring(0, snum.indexOf('.') + pl+1);

  if(snum.charAt(0) == '.')
  {
    snum = '0' + snum;
  }

  return snum;
}

function isSIN(num)
{

  snum = '';
  template = '121212121';
  d = '';
  sd = 0;

  for(x=0;x<num.length;x++)
  {
    if((num.charAt(x) >= '0') && (num.charAt(x) <= '9'))
    {
      snum = snum + num.charAt(x);
    }
  }
  
  if(snum.length != 9)
  {
    return false;
  }

  for(x=0;x<snum.length;x++)
  {
    d = snum.charAt(x) * template.charAt(x);

    if(d > 9)
    {
      d = d + '';
      d = (d.charAt(0)*1) + (d.charAt(1)*1);
    }
    sd = sd + (d * 1);
  }

  if(sd % 10 == 0)
  {
    return snum.substring(0,3) + ' ' + snum.substring(3,6) + ' ' + snum.substring(6,9);
  }
  else
  {
    return false;
  }
}

function omitSpaces(s)
{
  ns = '';
  for(x=0; x<s.length;x++)
  {
    if(s.charAt(x) != ' ')
    {
      ns = ns + s.charAt(x);
    }
  }
  return ns;
}

function trim(s)
{
  ns = '';
  strbeg = 0;
  strend = 0;  


  for(strbeg=0;strbeg<s.length;strbeg++)
  {
    if(s.charAt(strbeg) != ' ')
    {
      break;
    }
  }

  for(strend=s.length-1;strend>=0;strend--)
  {
    if(s.charAt(strend) != ' ')
    {
      break;
    }
  }

  if(strend > -1)
  {
    ns = s.substring(strbeg,strend+1);
  }
  else
  {
    ns = '';
  }

  return ns;
}

function getAge(tdMonth, tdDay, tdYear, month, day, year)
{
  AgeYears = tdYear - year;

  if(((day > tdDay) && (month == tdMonth)) || (month > tdMonth))
  {
    AgeYears --;
  }
  return AgeYears;
}

function validateLegalAge(ProvinceID, Age)
{
  pla = new Array(13);

  pla[0] = '-';
  pla[1] = 18; // AB
  pla[2] = 19; // BC
  pla[3] = 18; // PE
  pla[4] = 18; // MB
  pla[5] = 19; // NF
  pla[6] = 19; // NB
  pla[7] = 19; // NS
  pla[8] = 19; // NVT
  pla[9] = 18; // ON
  pla[10] = 18; // QC
  pla[11] = 18; // SK
  pla[12] = 19; // NWT
  pla[13] = 19; // YT

  if(pla[ProvinceID] > Age)
  {
    return false;
  }
  else
  {
    return true;
  }
}

function validateProvincePostal(ProvinceID, PostalCode)
{
  ppc = new Array(13);

  ppc[0] = '-';
  ppc[1] = 'T';     // AB
  ppc[2] = 'V';     // BC
  ppc[3] = 'C';     // PE
  ppc[4] = 'R';     // MB
  ppc[5] = 'A';     // NF
  ppc[6] = 'E';     // NB
  ppc[7] = 'B';     // NS
  ppc[8] = 'X';     // NVT
  ppc[9] = 'KLMNP'; // ON
  ppc[10] = 'GHJ';   // QC
  ppc[11] = 'S';     // SK
  ppc[12] = 'X';     // NWT
  ppc[13] = 'Y';     // YT

  tc = PostalCode.charAt(0);

  if(ppc[ProvinceID].indexOf(tc) >= 0)
  {
    return true;
  }
  else
  {
    return false;
  }
}

function isVIN(invin)
{

  var i      = 0;             // array index for init
  var x      = 0;             // loop var for init
  var y      = 0;             // inner loop var for init
  var s      = 0;             // start value for inner init loop
  var v      = '';            // working storage for computed vin character value
  var c      = '';             // working storage for each vin character
  var result = 0;
  var sum    = 0;             // Check Sum
  var valu   = new Array(23); // Value Table
  var weight = new Array(18); // Weight Table

  vin = invin;
 //vin = '1M8GDM9AXKP042788';

  if(vin.length !=17)
  {
    return false;
  }

// Initialize Value Table
  
  valu[0] = 'A:1';
  valu[1] = 'B:2';
  valu[2] = 'C:3';
  valu[3] = 'D:4';
  valu[4] = 'E:5';
  valu[5] = 'F:6';
  valu[6] = 'G:7';
  valu[7] = 'H:8';
  valu[8] = 'J:1';
  valu[9] = 'K:2';
  valu[10] = 'L:3';
  valu[11] = 'M:4';
  valu[12] = 'N:5';
  valu[13] = 'O:6';
  valu[14] = 'P:7';
  valu[15] = 'R:9';
  valu[16] = 'S:2';
  valu[17] = 'T:3';
  valu[18] = 'U:4';
  valu[19] = 'V:5';
  valu[20] = 'W:6';
  valu[21] = 'X:7';
  valu[22] = 'Y:8';
  valu[23] = 'Z:9';

// Initialize Weight Table
  
  weight[1] = 8;
  weight[2] = 7;
  weight[3] = 6;
  weight[4] = 5;
  weight[5] = 4;
  weight[6] = 3;
  weight[7] = 2;
  weight[8] = 10;
  weight[9] = 0;
  weight[10] = 9;
  weight[11] = 8;
  weight[12] = 7;
  weight[13] = 6;
  weight[14] = 5;
  weight[15] = 4;
  weight[16] = 3;
  weight[17] = 2;

// Loop through each digit, extract from tables, and build sum

  for(x=1;x<18;x++)
  {
    c = vin.charAt(x-1).toUpperCase();
    v = 0;
    if(c.charCodeAt(0) < 65)
    {
      v = c;
    }
    else
    {
      for(vi=0;vi<valu.length;vi++)
      {
        va = valu[vi].split(':');
        if(c == va[0])
        {
          v = va[1];
        }
      }
    }
    sum = sum + weight[x] * v;
  }
  result = sum % 11 // Take remainder of sum / 11;

// Test Check Sum digit

  if(((result == 10) && (vin.charAt(8) == "X")) || (vin.charAt(8) == result))
  {
    return true;
  }
  else
  {
    return false;
  }
}

function hasDigits(st)
{
  var nums = '0123456789';
  var s = 0;
  var n = 0;

  for(s=0;s<st.length;s++)
  {
    for(n=0;n<nums.length;n++)
    {
      if(st.charAt(s) == nums.charAt(n))
      {
        return true;
      } 
    }
  }
  return false;
}

function dateAdd(DatePart, Units, StrDate)
{
	var ODATE = new Date(StrDate);

	Units = parseInt(Units);

	if(isNaN(ODATE) || isNaN(Units))
	{
		return false;
	}

	DayOfMonth = ODATE.getDate();

	switch(DatePart)
	{
	case 'y':
		ODATE.setYear(ODATE.getYear() + (Units * 1));
		break;
	case 'm':

		ODATE.setMonth(ODATE.getMonth() + (Units * 1));



		break;
	case 'd':
		ODATE.setDate(ODATE.getDate() + (Units * 1));
		break;		
	
	default:

		return false;
	}

	if(DatePart == 'm' || DatePart == 'y')
	{
		if(ODATE.getDate() != DayOfMonth)
		{
			ODATE.setDate(0);
		}
	}

	return ODATE;
}