var errorTitle = comm_msg001;
var dateError = shipperRef_msg001 + shipperRef_msg002;
var srefError = comm_msg039 + shipperRef_Msg003;
var accountError = validAcc_msg001 + "." + comm_msg019 + persind_msg004;
var fromName="from";
var toName="to";
var shipref_dirty=true;
var maxDaysAllo = 120;
var today = new Date();
var monOptArr = new Array();

  addValidateMethod( "todate", "validateDate", "makeError", shipperRef_msg005 );
  addValidateMethod( "fromdate", "validateDate", "makeError", shipperRef_Msg004 );

  addElementType( "shipperReference", true, shipperRef_Msg003);
  addElementType( "fromDayValue", false, shipperRef_Msg006, "fromdate");
  addElementType( "toDayValue", false, shipperRef_msg007, "todate");
  addElementType( "accountNumber", false, persind_msg004, "account");

function selectDates(theform)
{
  if( typeof( theform ) == "undefined" ) theform = document.forms[0];
  populateDates(theform);

  firstToYear   = theform.elements[toName+'YearValue'].options[0].value;
  firstFromYear = theform.elements[fromName+'YearValue'].options[0].value;
  if(shipreftoDayValue() !="")
  {
    toDay = shipreftoDayValue()-1;
    theform.elements[toName+'DayValue'].options[toDay].selected = "true"
  }
  else
  {
    toDay = today.getDate()-1;
    theform.elements[toName+'DayValue'].options[toDay].selected = "true"
  }
  if(shipreftoMonthValue() !="")
  {
    toMonth = monOptArr[shipreftoMonthValue()];
    theform.elements[toName+'MonthValue'].options[toMonth].selected = "true"
  }
  else
  {
     toMonth = today.getMonth();
     theform.elements[toName+'MonthValue'].options[4].selected = "true"
  }
  if(shipreftoYearValue() !="")
  {
    toYear = shipreftoYearValue() - firstToYear;
    theform.elements[toName+'YearValue'].options[toYear].selected = "true"
  }
  else
  {
    toYear = today.getFullYear()-firstToYear;
    theform.elements[toName+'YearValue'].options[toYear].selected = "true"
  }
  if(shipreffromDayValue() !="")
  {
    fromDay = shipreffromDayValue()-1;
    theform.elements[fromName+'DayValue'].options[fromDay].selected = "true"
  }
  else
  {
    fromDay = today.getDate()-1;
    theform.elements[fromName+'DayValue'].options[fromDay].selected = "true"
  }
  if(shipreffromMonthValue() !="")
  {
    toMonth = monOptArr[shipreffromMonthValue()];
    theform.elements[fromName+'MonthValue'].options[toMonth].selected = "true"
  }
  else
  {
    fromMonth = today.getMonth();
    theform.elements[fromName+'MonthValue'].options[4].selected = "true"
  }
  
  if(shipreffromYearValue() !="")
  {
    fromYear = shipreffromYearValue() - firstFromYear;
    theform.elements[fromName+'YearValue'].options[fromYear].selected = "true"
  }
  else
  {
    fromYear = today.getFullYear()-firstFromYear;
    theform.elements[fromName+'YearValue'].options[fromYear].selected = "true"
  }
}

function clearForm( theform )
{
 selectDates( theform );
 theform.countryCodeIndex.value="0";
 theform.countryCode.selectedIndex=0;
 theform.accountNumber.value="";
 theform.shipperReference.value="";
}

function validateDate(fieldVal, fieldRef)
{
  var dayRef, monRef, yearRef;
  var theform = document.forms["shipment"]
  var montharr = new Array();
  montharr['01'] = 31;
  montharr['02'] = 28;
  montharr['03'] = 31;
  montharr['04'] = 30;
  montharr['05'] = 31;
  montharr['06'] = 30;
  montharr['07'] = 31;
  montharr['08'] = 31;
  montharr['09'] = 30;
  montharr['10'] = 31;
  montharr['11'] = 30;
  montharr['12'] = 31;
  var prefix = fieldRef.name
  strErrMess = ""
  prefix = prefix.substring(0,prefix.indexOf("Day"))
  
  dayRef  = theform.elements[prefix + "DayValue"]
  monRef  = theform.elements[prefix + "MonthValue"]
  yearRef = theform.elements[prefix + "YearValue"]
  yearVal = parseInt(yearRef.options[yearRef.selectedIndex].value);
  if ((yearVal % 400 == 0) || ( yearVal % 4 == 0 && yearVal % 100 != 0 ))
  {
    montharr[1] = 29
  }

  if (parseInt(dayRef.options[dayRef.selectedIndex].value) > montharr[monRef.options[monRef.selectedIndex].value])
  {
      strErrMess = shipperRef_Msg001;
      return false;
  }
  return compDates(theform, fieldRef );
}

function compDates(theform, fieldRef )
{
  elems = theform.elements;
  var toDayVal     = elems["toDayValue"].selectedIndex;
  var toMonthVal   = elems["toMonthValue"].options[elems["toMonthValue"].selectedIndex].value;
  var toYearVal    = elems["toYearValue"].options[elems["toYearValue"].selectedIndex].value;
  var fromDayVal   = elems["fromDayValue"].selectedIndex;
  var fromMonthVal = elems["fromMonthValue"].options[elems["fromMonthValue"].selectedIndex].value;
  var fromYearVal  = elems["fromYearValue"].options[elems["fromYearValue"].selectedIndex].value;

  var dateFrom = new Date(fromYearVal, fromMonthVal-1, fromDayVal+1);
  var dateTo   = new Date(toYearVal, toMonthVal-1, toDayVal+1);
  var thisDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());
  var difference = dateTo - dateFrom;
  var noOfDays   = difference/86400000;

  if (fieldRef != "undefined" && fieldRef.name == "fromDayValue")
  {
    if ( noOfDays < 0 )
    {
      strErrMess = shipperRef_Msg001;
      return false;
    }
    if ( noOfDays > maxDaysAllo )
    {
      strErrMess = shipperRef_msg008;
      return false;
    }
  }
  else
  {
    if ( (thisDate - dateTo) < 0 )
    {
      strErrMess = shipperRef_msg009;
      return false;
    }
  }
  return true;
}

function setupCookie(thisForm)
{
  shipref_setCookie(
  thisForm.fromDayValue.options[thisForm.fromDayValue.selectedIndex].value,
  thisForm.fromMonthValue.options[thisForm.fromMonthValue.selectedIndex].value,
  thisForm.fromYearValue.options[thisForm.fromYearValue.selectedIndex].value,
  thisForm.toDayValue.options[thisForm.toDayValue.selectedIndex].value,
  thisForm.toMonthValue.options[thisForm.toMonthValue.selectedIndex].value,
  thisForm.toYearValue.options[thisForm.toYearValue.selectedIndex].value);
}

function shipref_setCookie(fromDayValue,fromMonthValue,fromYearValue,toDayValue,toMonthValue,toYearValue)
{
  shipref_fromDayValue = fromDayValue;
  shipref_fromMonthValue  = fromMonthValue;
  shipref_fromYearValue  = fromYearValue;
  shipref_toDayValue = toDayValue;
  shipref_toMonthValue = toMonthValue;
  shipref_toYearValue = toYearValue;
  expdate = new Date ();
  FixCookieDate (expdate);
  expdate.setTime (expdate.getTime() + (31536000));
  cookieVal = shipref_fromDayValue + "!" + shipref_fromMonthValue + "!" + shipref_fromYearValue + "!" +
              shipref_toDayValue + "!" + shipref_toMonthValue + "!" + shipref_toYearValue;
  SetCookie("shipRefDetails", cookieVal,expdate,'/');

  shipref_dirty = false;
}

function shipreffromDayValue()
{
  if (shipref_dirty) shipref_readCookie();
  return shipref_fromDayValue;
}

function shipreffromMonthValue()
{
  if (shipref_dirty) shipref_readCookie();
  return shipref_fromMonthValue;
}

function shipreffromYearValue()
{
  if (shipref_dirty) shipref_readCookie();
  return shipref_fromYearValue;
}

function shipreftoDayValue()
{
  if (shipref_dirty) shipref_readCookie();
  return shipref_toDayValue;
}

function shipreftoMonthValue()
{
  if (shipref_dirty) shipref_readCookie();
  return shipref_toMonthValue;
}

function shipreftoYearValue()
{
  if (shipref_dirty) shipref_readCookie();
  return shipref_toYearValue;
}

function shipref_readCookie()
{
  cook = GetCookie('shipRefDetails');
  if(cook!=null)
  {
    details = cook.split('!');
    shipref_fromDayValue = ( ( details[0] ) ? details[0] : "" );
    shipref_fromMonthValue = ( ( details[1] ) ? details[1] : "" );
    shipref_fromYearValue = ( ( details[2] ) ? details[2] : "" );
    shipref_toDayValue = ( ( details[3] ) ? details[3] : "" );
    shipref_toMonthValue = ( ( details[4] ) ? details[4] : "" );
    shipref_toYearValue = ( ( details[5] ) ? details[5] : "" );
  }
  else
    {
        shipref_fromDayValue = "";
        shipref_fromMonthValue = "";
        shipref_fromYearValue = "";
        shipref_toDayValue = "";
        shipref_toMonthValue = "";
        shipref_toYearValue = "";
    }
    shipref_dirty = false;
}

function shipperForm(formRef)
{
    if (validateForm('shipment'))
    {
       setupCookie(formRef);
       return true;
    }
    return false;
}
function populateDates(formRef)
{
  elms = formRef.elements;
  date = today.getDate()-1;
  month = today.getMonth();
  year  = today.getFullYear();
  var yearOpts;
  var count = 0;
  var yearCount = 0;
  var dayCount = 0;
  var dispMonth = new Array();
  month > 3 ? yearOpts = 0 : yearOpts = 1;

  for( j = 1 ; j <= 31 ; j++ )
  {
    dayOpt = properDate(j);
    elms['fromDayValue'].options[dayCount] = new Option( dayOpt );
    elms['fromDayValue'].options[dayCount].value = dayOpt;
    elms['toDayValue'].options[dayCount] = new Option( dayOpt );
    elms['toDayValue'].options[dayCount].value = dayOpt;
    dayCount++;
  }

  if ( month >= 4 )
  {
    for ( i = month - 4; i <= month ; i++ )
    {
      monOpt = properDate(i+1);
      monOptArr[monOpt] = count;
      elms['fromMonthValue'].options[count] = new Option( monOpt );
      elms['fromMonthValue'].options[count].value = monOpt;

      elms['toMonthValue'].options[count] = new Option( monOpt );
      elms['toMonthValue'].options[count].value = monOpt;
      count++;
    }
  }
  else
  {
    for ( j = 8 + month ; j <= 11 ; j++ )
    {
      monOpt = properDate(j+1);
      monOptArr[monOpt] = count;
      elms['fromMonthValue'].options[count] = new Option( monOpt );
      elms['fromMonthValue'].options[count].value = monOpt;

      elms['toMonthValue'].options[count] = new Option( monOpt );
      elms['toMonthValue'].options[count].value = monOpt;
      count++;
    }
    for ( j = 0; j <= month ; j++ )
    {
      monOpt = properDate(j+1);
      monOptArr[monOpt] = count;
      elms['fromMonthValue'].options[count] = new Option( monOpt );
      elms['fromMonthValue'].options[count].value = monOpt;

      elms['toMonthValue'].options[count] = new Option( monOpt );
      elms['toMonthValue'].options[count].value = monOpt;
      count++;
    }
  }
  for( j = yearOpts ; j >= 0 ; j-- )
  {
    elms['fromYearValue'].options[yearCount] = new Option( year - j );
    elms['fromYearValue'].options[yearCount].value = year - j;

    elms['toYearValue'].options[yearCount] = new Option( year - j );
    elms['toYearValue'].options[yearCount].value = year - j;
    yearCount++;
  }
}

function properDate(j)
{
  j < 10 ? j = "0" + j : j;
  return j;
}
