  var csa = {     cert:"CSA (Canada)",
              products:[
                         {name:"DFP", grade:[ {name:"SHG", options:"RF"}
                                            , {name:"SEL", options:"F"}
                                            , {name:"SEL TF", options:"F"}
                                            , {name:"G1S", options:"S"}
                                            , {name:"GS2", options:"S"}
                                            , {name:"NON-OVERLAID CONCRETE FORM", options:"OC"}
                                            ]
                         }
                        ,{name:"CSP", grade:[ {name:"SHG", options:"RF"}
                                            , {name:"SEL", options:"F"}
                                            , {name:"NON-OVERLAID CONCRETE FORM", options:"OC"}
                                            ]
                         }
                        ,{name:"Poplar/Aspen", grade:[ {name:"SHG", options:"RF"}
                                                     , {name:"SEL", options:"F"}
                                                     , {name:"INDUSTRIAL - 2 SIDES", options:"S"}
                                                     ]
                         }
                        ,{name:"Overlaid", grade:[ {name:"MDO 1 SIDE PAINT GRADE", options:""}
                                                 , {name:"MDO 2 SIDE PAINT GRADE", options:""}
                                                 , {name:"MDO 1 SIDE CONCRETE FORM", options:"AOC"}
                                                 , {name:"MDO 2 SIDE CONCRETE FORM", options:"AOC"}
                                                 ]
                         }
                       ]
            };

  var usa = {     cert:"PS1-07 (United States)",
              products:[
                         {name:"Douglas Fir", grade:[ {name:"Underlayment", options:"F"}
                                                    , {name:"C-C PLUGGED", options:"F"}
                                                    , {name:"C-D PLUGGED", options:"F"}
                                                    , {name:"C-C", options:"RF"}
                                                    , {name:"C-D", options:"RF"}
                                                    , {name:"B-B", options:""}
                                                    , {name:"B-C", options:""}
                                                    , {name:"B-B CONCRETE FORM", options:"OC"}
                                                    , {name:"B-C MDO", options:"SAO"}
                                                    , {name:"B-B MDO", options:"SAO"}
                                                    , {name:"Struc 1 C-C", options:"RF"}
                                                    , {name:"Struc 1 C-C Plugged", options:"RF"}
                                                    , {name:"A-C", options:"S"}
                                                    ]
                         }
                        ,{name:"SPF", grade:[ {name:"Underlayment", options:"F"}
                                            , {name:"C-C PLUGGED", options:"F"}
                                            , {name:"C-D PLUGGED", options:"F"}
                                            , {name:"C-C", options:"RF"}
                                            , {name:"C-D", options:"RF"}
                                            , {name:"B-B", options:""}
                                            , {name:"B-C", options:""}
                                            , {name:"B-B CONCRETE FORM", options:"OC"}
                                            ]
                         }
                        ,{name:"Poplar/Aspen", grade:[ {name:"Underlayment", options:"F"}
                                                     , {name:"C-C PLUGGED", options:"F"}
                                                     , {name:"C-D PLUGGED", options:"F"}
                                                     , {name:"C-C", options:"RF"}
                                                     , {name:"C-D", options:"RF"}
                                                     , {name:"B-B", options:""}
                                                     , {name:"B-C", options:""}
                                                     ]
                         }
                       ]
            };

  var japan = {     cert:"JAS (Japan)",
                products:[
                           {name:"DFP", grade:[ {name:"C-C", options:"RF"}
                                              ]
                           }
                          ,{name:"CSP", grade:[ {name:"C-C", options:"RF"}
                                              ]
                           }
                         ]
              };

  var europe = {     cert:"CE-EN 13986 (Europe)",
                 products:[
                            {name:"DFP", grade:[ {name:"SHG", options:"RF"}
                                               , {name:"SEL", options:"F"}
                                               , {name:"SEL TF", options:"F"}
                                               , {name:"G1S", options:"S"}
                                               , {name:"GS2", options:"S"}
                                               , {name:"NON-OVERLAID CONCRETE FORM", options:"OC"}
                                               ]
                            }
                           ,{name:"CSP", grade:[ {name:"SHG", options:"RF"}
                                               , {name:"SEL", options:"F"}
                                               , {name:"NON-OVERLAID CONCRETE FORM", options:"OC"}
                                               ]
                            }
                           ,{name:"Poplar/Aspen", grade:[ {name:"SHG", options:"RF"}
                                                        , {name:"SEL", options:"F"}
                                                        , {name:"INDUSTRIAL - 2 SIDES", options:""}
                                                        ]
                            }
                           ,{name:"Overlaid", grade:[ {name:"MDO 1 SIDE PAINT GRADE", options:""}
                                                    , {name:"MDO 2 SIDE PAINT GRADE", options:""}
                                                    , {name:"MDO 1 SIDE CONCRETE FORM", options:"AOC"}
                                                    , {name:"MDO 2 SIDE CONCRETE FORM", options:"AOC"}
                                                    ]
                            }
                          ]
            };

  var germany = {     cert:"DIN 68705 (Germany)",
                  products:[
                             {name:"DFP", grade:[ {name:"SHG", options:"RF"}
                                                , {name:"SEL", options:"F"}
                                                , {name:"SEL TF", options:"F"}
                                                , {name:"G1S", options:"S"}
                                                , {name:"GS2", options:"S"}
                                                ]
                             }
                            ,{name:"CSP", grade:[ {name:"SHG", options:"RF"}
                                                , {name:"SEL", options:"F"}
                                                ]
                             }
                           ]
                };

  var thickness = null;

  // options 'A' is special_thick_01
  var thicknessM = {
                    sanded:{ grade:"Sanded"
                            ,t_g:[
                                   {thickness:6,qnty:120}
                                 , {thickness:8,qnty:90}
                                 , {thickness:11,qnty:70}
                                 , {thickness:14,qnty:55}
                                 , {thickness:17,qnty:45}
                                 , {thickness:19,qnty:40}
                                 , {thickness:21,qnty:35}
                                 , {thickness:24,qnty:30}
                                 , {thickness:27,qnty:26}
                                 , {thickness:30,qnty:34}
                                 ]
                         }
                 ,unsanded:{ grade:"Unsanded"
                              ,t_g:[
                                     {thickness:7.5,qnty:100}
                                   , {thickness:9.5,qnty:80}
                                   , {thickness:11,qnty:70}
                                   , {thickness:12.5,qnty:60}
                                   , {thickness:15.5,qnty:50}
                                   , {thickness:18.5,qnty:40}
                                   , {thickness:20.5,qnty:35}
                                   , {thickness:22.5,qnty:35}
                                   , {thickness:25.5,qnty:30}
                                   , {thickness:28.5,qnty:26}
                                   , {thickness:31.5,qnty:25}
                                   ]
                           }
                 ,special_thick_01:{ grade:"Unsanded"
                              ,t_g:[
                                     {thickness:7.5,qnty:100}
                                   , {thickness:9.5,qnty:80}
                                   , {thickness:11,qnty:70}
                                   , {thickness:12.5,qnty:60}
                                   , {thickness:15.5,qnty:50}
                                   , {thickness:17,qnty:45}
                                   , {thickness:18.5,qnty:40}
                                   , {thickness:19,qnty:40}
                                   , {thickness:20.5,qnty:35}
                                   , {thickness:22.5,qnty:35}
                                   , {thickness:25.5,qnty:30}
                                   , {thickness:28.5,qnty:26}
                                   , {thickness:31.5,qnty:25}
                                   ]
                           }
                  }
                  ;
  var thicknessI = {
                    sanded:{ grade:"Sanded"
                            ,t_g:[
                                     {thickness:'1/4"',qnty:120}
                                   , {thickness:'5/16"',qnty:90}
                                   , {thickness:'7/16"',qnty:70}
                                   , {thickness:'1/2"',qnty:60}
                                   , {thickness:'9/16"',qnty:55}
                                   , {thickness:'11/16"',qnty:45}
                                   , {thickness:'3/4"',qnty:40}
                                   , {thickness:'13/16"',qnty:35}
                                   , {thickness:'15/16"',qnty:30}
                                   , {thickness:'1 1/16"',qnty:26}
                                   , {thickness:'1 3/16"',qnty:34}
                                 ]
                         }
                 ,unsanded:{ grade:"Unsanded"
                              ,t_g:[
                                     {thickness:'5/16"',qnty:100}
                                   , {thickness:'3/8"',qnty:80}
                                   , {thickness:'7/16"',qnty:70}
                                   , {thickness:'1/2"',qnty:60}
                                   , {thickness:'19/32"',qnty:50}
                                   , {thickness:'5/8"',qnty:50}
                                   , {thickness:'23/32"',qnty:40}
                                   , {thickness:'3/4"',qnty:40}
                                   , {thickness:'13/16"',qnty:35}
                                   , {thickness:'7/8"',qnty:35}
                                   , {thickness:'1"',qnty:30}
                                   , {thickness:'1 1/8"',qnty:26}
                                   , {thickness:'1 1/4"',qnty:25}
                                   ]
                           }
                 ,special_thick_01:{ grade:"Unsanded"
                              ,t_g:[
                                     {thickness:'5/16"',qnty:100}
                                   , {thickness:'3/8"',qnty:80}
                                   , {thickness:'7/16"',qnty:70}
                                   , {thickness:'1/2"',qnty:60}
                                   , {thickness:'19/32"',qnty:50}
                                   , {thickness:'5/8"',qnty:50}
                                   , {thickness:'11/16"',qnty:45}
                                   , {thickness:'23/32"',qnty:40}
                                   , {thickness:'3/4"',qnty:40}
                                   , {thickness:'13/16"',qnty:35}
                                   , {thickness:'7/8"',qnty:35}
                                   , {thickness:'1"',qnty:30}
                                   , {thickness:'1 1/8"',qnty:26}
                                   , {thickness:'1 1/4"',qnty:25}
                                   ]
                           }
                  }
                  ;



  /*
  sanded:  6, 8, 11, 14, 17, 19, 21, 24, 27, 30
  unsanded:  7.5, 9.5, 11, 12.5, 15.5, 18.5, 20.5, 22.5, 25.5, 28.5, 31.5
  */

  var plywoods = [ csa, usa, japan, europe, germany ];
  var plywood = null;

  function initMe()
  {
    certChanged( document.plyw.m_cert )
  }

  function initOptions( optObj )
  {

      //alert( typeof optObj );
      //alert( optObj.name );

      var optCount = optObj.options.length;

      // Clear options list--have to do it in reverse to work!
      for( var i=optCount-1; i >= 1; i-- )
      {
          optObj.options[ i ] = null;
      }

      if( optObj.name == 'm_prod' )
      {
          var prodInput = document.plyw.prod_name;
          prodInput.value = null;
      }
      else if( optObj.name == 'm_grade' )
      {
          var gradeInput = document.plyw.grade_name;
          gradeInput.value = null;
      }
      else if( optObj.name == 'm_thick' )
      {
          var thickInput = document.plyw.thick_name;
          thickInput.value = null;
      }
  }

var globalCertName = null;

  function certChanged( cert )
  {
      var prod = document.plyw.m_prod;
      var grade = document.plyw.m_grade;
      var thick = document.plyw.m_thick;
      var opt = document.plyw.n_opt;

      // If no cert then obviously clear everything else
      if( ! cert.value )
      {
        var certInput = document.plyw.cert_name;
        certInput.value = null;

        initOptions( prod )
        initOptions( grade )
        initOptions( thick )
        initOptions( opt )
        initSPL();

        return;
      }

      var ind = 1;

      // It has changed so reset all
      initOptions( prod );
      initOptions( grade )
      initOptions( thick )
      initOptions( opt )
      initSPL();

      plywood = plywoods[ cert.value ];

      var certInput = document.plyw.cert_name;
      certInput.value = plywood.cert;

	globalCertName = plywood.cert;
	if( globalCertName == 'PS1-07 (United States)' )
	{
		thickness = thicknessI;
	}
	else
	{
		thickness = thicknessM;
	}

      // Populate products
      for( var i=0; i < plywood.products.length; i++ )
      {
        var optCount = prod.options.length;
        var anOption = new Option();

        anOption.text = plywood.products[ i ].name;
        anOption.value = i;

        prod.options[ optCount ] = anOption;
      }
  }

  function prodChanged( prod )
  {
      var grade = document.plyw.m_grade;
      var thick = document.plyw.m_thick;
      var opt = document.plyw.n_opt;

      if( ! prod.value )
      {
          var prodInput = document.plyw.prod_name;
          prodInput.value = null;

          initOptions( grade );
          initOptions( thick );
          initOptions( opt )
          initSPL();

          return;
      }

      var prodVal = plywood.products[ prod.value ];
      if( !  prodVal )
      {
          alert( 'No products defined!' );

          return;
      }

      var prodInput = document.plyw.prod_name;
      prodInput.value = prodVal.name;

      initOptions( grade );
      initOptions( thick );
      initOptions( opt );
      initSPL();

      // Populate grade
      for( var i=0; i < plywood.products[ prod.value ].grade.length; i++ )
      {
        var optCount = grade.options.length;
        var anOption = new Option();

        anOption.text = plywood.products[ prod.value ].grade[ i ].name;
        anOption.value = i;

        grade.options[ optCount ] = anOption;
      }
  }

  var thickness2 = null;

  function gradeChanged( grade )
  {
      var thick = document.plyw.m_thick;
      var opt = document.plyw.n_opt;

      if( ! grade.value )
      {
          var gradeInput = document.plyw.grade_name;
          gradeInput.value = null;

          initOptions( thick );
          initOptions( opt );
          initSPL();

          return;
      }

      var prodVal = plywood.products[ document.plyw.m_prod.value ];
      var gradeVal = prodVal.grade[ grade.value ];
      if( !  gradeVal )
      {
          alert( 'No grades defined!' );

          return;
      }

      var gradeInput = document.plyw.grade_name;
      gradeInput.value = gradeVal.name;

      initOptions( thick );
      initOptions( opt );
      initSPL();

      var options = gradeVal.options;

      var thickOptions = null;

      // Now depending on the option display corresponding thicknesss
      if( options.indexOf( 'S' ) != -1 )
      {
          thickOptions = thickness.sanded.t_g;
          thickness2 = thickness.sanded.t_g;
      }
      else if( options.indexOf( 'A' ) != -1 )
      {
          thickOptions = thickness.special_thick_01.t_g;
          thickness2 = thickness.special_thick_01.t_g;
      }
      else
      {
          thickOptions = thickness.unsanded.t_g;
          thickness2 = thickness.unsanded.t_g;
      }

      // Populate thick
      for( var i=0; i < thickOptions.length; i++ )
      {
        var optCount = thick.options.length;
        var anOption = new Option();

        anOption.text = thickOptions[ i ].thickness;
        //anOption.value = thickOptions[ i ].thickness;
        anOption.value = i;

        thick.options[ optCount ] = anOption;
      }

      // Populate options as well
      gradeChanged2( grade );
  }

  function gradeChanged2( grade )
  {
      var opt = document.plyw.n_opt;

      if( ! grade.value )
      {
          initOptions( opt );

          return;
      }

      var prodVal = plywood.products[ document.plyw.m_prod.value ];
      var gradeVal = prodVal.grade[ grade.value ];
      if( !  gradeVal )
      {
          alert( 'No grades defined!' );

          return;
      }

      initOptions( opt );

      var options = gradeVal.options;

      var thick = document.plyw.m_thick;
      var thickValue = null;
      
      // Check a thickness value was selected
      if( thick.value )
      {
        //alert( thick.value );

        thickValue = thickness2[ thick.value ].thickness;
      }

      //alert( thickValue );

      for( var i=0; i < options.length; i++ )
      {
        var anOpt = options.substring( i, i+1 );
        var optText = null;

        if( anOpt == 'O' )
        {
            optText = 'Oiled and Edge sealed';
        }
        else if( anOpt == 'R' )
        {
            //0630 org optText = 'Easy T&G Roof';

            if( thick && ( thickValue == 11 || thickValue == 12.5 ) )
            {
                optText = 'Easy T&G Roof';
            }
        }
        else if( anOpt == 'F' )
        {
            //0630 org optText = 'Easy T&G Floor';
            if( thick && ( thickValue >= 15.5 ) )
            {
                optText = 'Easy T&G Floor';
            }
        }

        if( optText )
        {
            var optCount = opt.options.length;
            var anOption = new Option();

            anOption.text = optText;
            anOption.value = optText;

            opt.options[ optCount ] = anOption;
        }
      }

      optText = 'Sizes other than 4x8 feet';
      var optCount = opt.options.length;
      var anOption = new Option();

      anOption.text = optText;
      anOption.value = optText;

      opt.options[ optCount ] = anOption;
  }

  function initSPL()
  {
      var spl = document.getElementById( 'spl' );

      //spl.innerHTML = '__';
      spl.innerHTML = '';

      var splInput = document.plyw.spl_name;
      splInput.value = null;
  }

  function thickChanged( thick )
  {
      if( ! thick.value )
      {
          var thickInput = document.plyw.thick_name;
          thickInput.value = null;

          initSPL();

          return;
      }

      var spl = document.getElementById( 'spl' );
      var qnty = thickness2[ thick.value ].qnty;

      spl.innerHTML = '(' + qnty + ' sheets per bundle for the selected product)';
spl.style.display = "block";
      var splInput = document.plyw.spl_name;
      splInput.value = qnty;

      var thickInput = document.plyw.thick_name;
      thickInput.value = thickness2[ thick.value ].thickness;

      var grade = document.plyw.m_grade;

      // Change options depending on selected thickness
      gradeChanged2( grade );
  }

  function optionChanged( option )
  {
    //alert( option.name + ' ' + option.value );
    var optVal = option.value;
    var otherSize = document.getElementById( 'other_size' );

    if( optVal.indexOf( 'other than 4x8' ) != -1 )
    {
        otherSize.innerHTML = '<label>Size</label><input name="m_other_size" type="text"><span id="m_other_size_er">*Required</span>';
    }
    else
    {
        otherSize.innerHTML = '';
    }
  }

  var submitString = null;

  function setSubmit( submitStr )
  {
      submitString = submitStr;
      //alert( submitString );
  }

  function frm_gotvl_val( aform )
  {
    //var erMsg = "<span class='red2'>Required field</span>";
    var erMsg = "Required field";
    //var erMsg = "";

    var len = aform.elements.length;
    //Xvar len = aform.childNodes.length;

    var valid = true;

    //var submitVal = aform.Submit[1].value;

    //alert( submitVal );
    //alert( !(submitVal == 'Add To Cart') );
    //alert( aform.Submit ); // [object NodeList]
    //if( submitVal != 'Add To Cart' )

    var qnty = document.getElementById( 'pse_er' );

    if( submitString == 'Check-Out' )
    {

        //alert( 'totalQty ' + totalQty );

        //:IMPORTANT totalQty is defined by dynamic code; e.g. php
        if( totalQty < 20 )
        {
            qnty.innerHTML = "*Total order quantity must be 20 or more.";

            return false;
        }

        return true;
    }
    else if( submitString != 'Add To Cart' )
    {
        qnty.innerHTML = "";
        return true;
    }
    else
    {
        qnty.innerHTML = "";
    }

//alert( len );
    for( var i = 0; i < len; i++ )
    {
      var elem = aform.elements[ i ];
      //Xvar elem = aform.childNodes[ i ];
      //alert( elem );
      //alert( typeof elem );
      //alert( elem.nodeName );
      //alert( elem.nodeType );

      //if( elem instanceof HTMLFieldSetElement )
      //if( elem instanceof HTMLFieldSetElement || elem.nodeName == 'FIELDSET' )
      //if(  elem.nodeName == 'FIELDSET' || elem instanceof HTMLFieldSetElement )
      if(  elem.nodeName == 'FIELDSET' )
      {
        //alert( 'continuing' );
        continue;
      }
      if( i == 5 )
      {
      //break;
      }
      var name = elem.name;
      //Xvar name = elem.nodeName;
      var man = name.indexOf( 'm_' );
//alert( 'name ' + name );
      if( man == 0 )
      {
        if( ! elem.value )
        {
          //document.getElementById( name + '_er' ).innerHTML = erMsg;
          document.getElementById( name + '_er' ).style.display = "block";
          valid = false;
        }
        else
        {
          if( document.getElementById( name + '_er' ).innerHTML != '' ) // so that it does not "move" in IE!!!
          {
            document.getElementById( name + '_er' ).innerHTML = '';
          }
        }

      }
    }

        /*
        if( document.plyw.m_quantity.value < 1 )
        {
          document.getElementById( 'm_quantity_er' ).innerHTML = "Must be greater than 0";
          valid = false;
        }
        */


        // Ignore trailing character strings; e.g. 200 sheets ==> 200
        if( document.plyw.m_quantity.value.length > 0 )
        {
          var inStr = document.plyw.m_quantity.value;
          var trimmed = inStr.replace(/^\s+|\s+$/g, '') ;
          var quantity = 0;
          var errorMsg;
          var validQnty = true;

          if( isNaN( parseInt( trimmed ) ) )
          {
            errorMsg = "Invalid number";
            valid = false;
            validQnty = valid;
          }
          else if( ! isNumeric( trimmed ) )
          {
            errorMsg = "Please enter numbers only";
            valid = false;
            validQnty = valid;
          }
          else if( quantity = parseInt( trimmed ) <= 0 )
          {
            errorMsg = "Please specify quantity greater than zero (0)";
            valid = false;
            validQnty = valid;
          }

          if( ! validQnty )
          {
            document.getElementById( 'm_quantity_er' ).innerHTML = errorMsg;
            document.getElementById( 'm_quantity_er' ).style.display = "block";
          }
        }
        else
        {
          document.getElementById( 'm_quantity_er' ).style.display = "none";
        }


    if( valid )
    {
      //aform.submit();
      return true;
    }
    else
    {
      //return true;
      return false;
    }
  }

  //  check for valid numeric strings	
  function isNumeric( strString )
  {
    var strValidChars = "0123456789";
    var strChar;
    var blnResult = true;

    if( strString.length == 0 ) return false;

    //  test strString consists of valid characters listed above
    for( i = 0; i < strString.length && blnResult; i++ )
    {
      strChar = strString.charAt( i );
      if( strValidChars.indexOf( strChar ) == -1 )
      {
        blnResult = false;
      }
    }

    return blnResult;
  }

