
var outdoorModelsSelected;

/*
 * --------------------------------------------------------------------
 * jQuery-Plugin - $.download - allows for simple get/post requests for files
 * by Scott Jehl, scott@filamentgroup.com
 * http://www.filamentgroup.com
 * reference article: http://www.filamentgroup.com/lab/jquery_plugin_for_requesting_ajax_like_file_downloads/
 * Copyright (c) 2008 Filament Group, Inc
 * Dual licensed under the MIT (filamentgroup.com/examples/mit-license.txt) and GPL (filamentgroup.com/examples/gpl-license.txt) licenses.
 * --------------------------------------------------------------------
 */
jQuery.download = function(url, data, method) {
  //url and data options required
  if( url && data ){ 
    //data can be string of parameters or array/object
    data = typeof data == 'string' ? data : jQuery.param(data);
    //split params into form inputs
    var inputs = '';
    $.each(data.split('&'), function(){ 
      var pair = this.split('=');
      inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />'; 
    });
    //send request
    $('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>').appendTo('body').submit().remove();
  }
};


var disabledCheckboxColor = '#dddddd';
var enabledCheckboxColor = '#777777';

jQuery.validator.messages.required = "";

jQuery.fn.input_for_label = function() {
  return $("#" + $(this).attr("for"));
}
jQuery.fn.disable = function(isDisabled) {
  isDisabled = (isDisabled != false);
  
  if (isDisabled) {
    this.
      attr("disabled", "disabled").
      addClass("disabled");
    if (this.is("option[selected]")) {
      this.parent("select").
      attr("selectedIndex", "0").
      change();
    }
    if (this.is("select")) {
      this.
        attr('selectedIndex', '0').
        change();
    }
  } else {
    this.
      removeAttr("disabled").
      removeClass("disabled");
  }

  if (this.is("fieldset")) {
    this.find("input, select").disable(isDisabled);
  }

  
  return this;
}

function exclusivelySelect(select_name, option) {
  $("#"+select_name+"_select option[text!='"+option+"']").disable();
  $("#"+select_name+"_select option[text='"+option+"']").disable(false).attr('selected', 'selected');
  $("#"+select_name+"_select").change();
}

function checkTabletArmOptions() {
  var aisle_end = $('#aisle_end_select');
  var aisle_end_selection = $('option:selected', aisle_end);
  var tablet_arm = $('#tablet_arm_select');
  $("option", tablet_arm).disable(false);

  // #7d
  if (/^(Bodiform Cast Iron End|Victorian Cast Iron End|Saenger Cast Iron End|136 Cast Iron End|#280 Solid Wood End|#165 Casing)$/.test($('#aisle_end_select option:selected').text())) {  
    $("option[text='Standard Tablet Arm'],"+
      "option[text='Oversized Tablet Arm'],"+
      "option[text='Laptop Tablet Arm']", tablet_arm).disable().removeAttr("selected");
  } else {
    $("option[text='Standard Tablet Arm - Middles only'],"+
      "option[text='Oversized Tablet Arm - Middles only'],"+
      "option[text='Laptop Tablet Arm - Middles Only']", tablet_arm).disable().removeAttr("selected");
  }
  tablet_arm.change();
}

function checkTabletArmEnabled() {
  if (outdoorModelsSelected // #7a
      || /^(Victorian|7M|Bodiform)$/.test($('#standard_type_select option:selected').text()) // #7b
      || /^Scroll Wood$/.test($('#armrest_select option:selected').text())
      || /^Scroll Wood Ends with Regular Wood Middles$/.test($('#armrest_select option:selected').text())
    ) {
    $('#tablet_arm_select').disable();
  } else {
    $('#tablet_arm_select').disable(false);
  }
}

function checkAisleLightEnabled() {
  if (outdoorModelsSelected) {
    $('#aisle_light_select').disable();
  } else {
    $('#aisle_light_select').disable(false);
  }
}

function checkPowerAndDataEnabled() {
  var power_and_data = $("label:contains('Power and Data')");

  if (outdoorModelsSelected
      || /^(7M|Bodiform|Victorian)$/.test($('#standard_type_select option:selected').text())) {
    power_and_data.css('color', disabledCheckboxColor).input_for_label().removeAttr('checked').disable();

  } else {
    power_and_data.css('color', enabledCheckboxColor).input_for_label().disable(false);
  }
}

function checkMountingRule() {
  var selection = $('#standard_type_select option:selected');
  var mounting = $('#mounting');
  var floor = $("label:contains('Floor Mount')", mounting);
  var riser = $("label:contains('Riser Mount')", mounting);
  var horiz = $("label:contains('Horizontal Beam and Pedestal Mount')", mounting);
  
  // #4a
  if (!/^Standard$/.test(selection.text())) {
    floor.css('color', disabledCheckboxColor).input_for_label().removeAttr('checked').disable();
    riser.css('color', disabledCheckboxColor).input_for_label().removeAttr('checked').disable();
    horiz.css('color', disabledCheckboxColor).input_for_label().removeAttr('checked').disable();
  } else {
    floor.css('color', enabledCheckboxColor).input_for_label().disable(false);
    riser.css('color', enabledCheckboxColor).input_for_label().disable(false);
    horiz.css('color', enabledCheckboxColor).input_for_label().disable(false);
  }

  // #5b
  var model = $('#model_select option:selected');
  if (outdoorModelsSelected) {
    horiz.css('color', disabledCheckboxColor).input_for_label().removeAttr('checked').disable();
  } 
}

function isOutdoorModelSelected() {
  return /^(Stellar 220 Outdoor|Stellar 224 Outdoor|Stellar 230 Outdoor)$/.test($('#model_select option:selected').text());
}

function checkPlasticArmrest() {
  var aisle_end_selection = $('#aisle_end_select option:selected').text();
  if ((!/^(None|-- Select One --)$/.test($('#tablet_arm_select option:selected').text())
       && /^(#225\/250 Rectangular Metal Frame|#350 Solid Wood End|#160 Tapered Metal Frame|#560 Laminate End|#351 Wood End)$/.test(aisle_end_selection))
      || /^(#280 Solid Wood End|Victorian Cast Iron End|Saenger Cast Iron End|Fox Cast Iron End|Bodiform Cast Iron End)$/.test(aisle_end_selection)) {
    $("#armrest_select option[text='Plastic']").disable();
  } else {
    if (!outdoorModelsSelected) {
      $("#armrest_select option[text='Plastic']").disable(false);
    }
  }
}

function checkScrollWoodArmrests() {
  var aisle_end_selection = $('#aisle_end_select option:selected').text();
  var armrest_select = $("#armrest_select");
  
  if (!/^(None|-- Select One --)$/.test($('#tablet_arm_select option:selected').text())  // 10b
       || /^Bodiform Cast Iron End$/.test(aisle_end_selection)) { // 10a
    $("option[text='Scroll Wood']", armrest_select).disable();
    $("option[text='Scroll Wood Ends with Regular Wood Middles']", armrest_select).disable(); //11b
    if($.browser.msie && $.browser.version < 8) {
      option_emulate(armrest_select.get(0));
    }
  } else {
    if (!outdoorModelsSelected) {
      $("option[text='Scroll Wood']", armrest_select).disable(false);
      $("option[text='Scroll Wood Ends with Regular Wood Middles']", armrest_select).disable(false);
      if($.browser.msie && $.browser.version < 8) {
        option_emulate(armrest_select.get(0));
      }
    }
  }
}

function checkWoodArmrestAisleLight() {
  var aisle_end_selection = $('#aisle_end_select option:selected').text();
  var armrest_selection = $("#armrest_select option:selected").text();
  var wood_armrest_aisle_light = $("#aisle_light_select option[text='Wood Armrest Aisle Light']");
  
  if (/^Plastic$/.test(armrest_selection)  // 13b
      || /^Bodiform Cast Iron End$/.test(aisle_end_selection)) { // 13a
    wood_armrest_aisle_light.disable();
  } else {
    if (!outdoorModelsSelected) {
      wood_armrest_aisle_light.disable(false);
    }
  }
}

function checkPlasticOutdoorArmrest() {
  var selection = $('#model_select option:selected');
  if (outdoorModelsSelected) {
    $("#armrest_select option[text='Plastic Outdoor']").disable(false);
    exclusivelySelect('armrest', 'Plastic Outdoor');
  } else {
    $("#armrest_select option").disable(false);
    $("#armrest_select option[text='Plastic Outdoor']").disable(); // #8
  }
}

function checkRSIDPs() {
  var seat = $('#seat_select option:selected').text();
  $("#row_and_seat_id_plates_select option[text!='None']").disable();

  if (/^(Standard Seat|Standard Seat with Wood Bottom|Fully Upholstered Seat|Fully Upholstered Seat with Wood Bottom)$/.test(seat)) {
    $("#row_and_seat_id_plates_select option[text='Stellar - Aluminum']").disable(false); // #14
    $("#row_and_seat_id_plates_select option[text='Stellar - Bronze Anodized']").disable(false); // #15
  }
  
  // #16
  if (/^Outdoor Seat$/.test(seat)) {
    $("#row_and_seat_id_plates_select option[text='Stellar Outdoor - Aluminum']").disable(false);
  }
  
  if (/^Majestic Seat$/.test(seat)) {
    $("#row_and_seat_id_plates_select option[text='Majestic - Aluminum']").disable(false); // #17
    $("#row_and_seat_id_plates_select option[text='Majestic - Bronze Anodized']").disable(false); // #18
  }
  $("#row_and_seat_id_plates_select option[text='-- Select One --']").disable(false);
  
}

function checkRowPlateRecessEnabled() {
  var rpr = $("label:contains('Row Plate Recess')");

  if (/^(Standard Wood|Wood Ends with Plastic Middles|Scroll Wood|Scroll Wood Ends with Regular Wood Middles)$/.test($('#armrest_select option:selected').text()) 
      && !/None/.test($("#row_and_seat_id_plates_select option:selected").text())) {
    rpr.css('color', enabledCheckboxColor).input_for_label().disable(false);
  } else {
    rpr.css('color', disabledCheckboxColor).input_for_label().removeAttr('checked').disable();
  }
}

function checkDonorPlateRecessEnabled() {
  var dpr = $("label:contains('Donor Plate Recess')");

  if (/^(Standard Wood|Scroll Wood|Scroll Wood Ends with Regular Wood Middles)$/.test($('#armrest_select option:selected').text()) 
      && !/None/.test($("#donor_plate_select option:selected").text())) {
    dpr.css('color', enabledCheckboxColor).input_for_label().disable(false);
  } else {
    dpr.css('color', disabledCheckboxColor).input_for_label().removeAttr('checked').disable();
  }
}

function checkConcealedFastenersEnabled() {
  if (/^(Stellar 216|Stellar 226|Stellar 286|Majestic Adams|Majestic Edwards|Majestic Lyric|Majestic Shubert|Majestic Ella|Majestic Victorian)$/.test($('#model_select option:selected').text())) {
    $("label:contains('Concealed Fasteners')").css('color', enabledCheckboxColor).input_for_label().disable(false);
  } else {
    $("label:contains('Concealed Fasteners')").css('color', disabledCheckboxColor).input_for_label().removeAttr('checked').disable();
  }
}

function checkLaminateBackEnabled() {
  if (/^(Stellar 206|Stellar 226|Stellar 270|Stellar 216|Stellar 286|Stellar 306)$/.test($('#model_select option:selected').text())) {
    $("label:contains('Laminate Back')").css('color', enabledCheckboxColor).input_for_label().disable(false);
  } else {
    $("label:contains('Laminate Back')").css('color', disabledCheckboxColor).input_for_label().removeAttr('checked').disable();
  }
}

function updateModelDetails() {
  var selected_model_id = $('#model_select option:selected').val();
  if(!selected_model_id) {
    $('#model_select + div.detail').empty().append("<p>Stellar gives architects a highly-customizable, stylish and tough-performing solution for auditoriums, theatres, lecture halls and sports venues. By choosing from a variety of seats, backs, aisle treatments, armrests and options, architects and designers can create the ideal seating solution for virtually any installation.</p>");
  } else {
    $.ajax({
      url: '/architectural/spec-builder/specbuilder/option_detail',
      data: {model: selected_model_id},
      type: 'POST',
      cache: false,
      success: function(response, status) {
        $('#model_select + div.detail').empty().append(response);
        //return false;
      }
    });
  }
}

function updateSeatDetails() {
  var selected_seat_id = $('#seat_select option:selected').val();
  if(!selected_seat_id) {
    $('#seat_select + div.detail').empty().append("<p>All Stellar&reg; models are available with painted steel, fully upholstered or wood seat bottoms Serpentine springs are used for comfort and cushion shift resistance along with automatic self-rise, three-quarter fold seat for easier entry and exit</p>");
  } else {
    $.ajax({
      url: '/architectural/spec-builder/specbuilder/option_detail',
      data: {seat: selected_seat_id},
      type: 'POST',
      cache: false,
      success: function(response) {
        $('#seat_select + div.detail').empty().append(response);
        //return false;
      }
    });
  }

}

function updateAisleEndDetails() {
  var selected_aisle_end_id = $('#aisle_end_select option:selected').val();
  if(!selected_aisle_end_id) {
    $('#aisle_end_select + div.detail').empty().append("<p>Available in a variety of wood, metal, plastic or upholstered end standards to suit every need, style and application. A variety of colors and finishes are offered. Styles are available for floor, riser or beam mount installation.</p>");
  } else {
    $.ajax({
      url: '/architectural/spec-builder/specbuilder/option_detail',
      data: {aisle_end: selected_aisle_end_id},
      type: 'POST',
      cache: false,
      success: function(response) {
        $('#aisle_end_select + div.detail').empty().append(response);
        //return false;
      }
    });
  }
}

downloadSpecs = function() {
  var formFields = $('#specs-form').serialize().replace(/%5B/g, '[').replace(/%5D/g, ']');
  $.download($("#specs-form").attr('action'), formFields);
  return false;
};

$(document).ready(function() {
    var isSafari = $.browser.safari;
          
    $('input#TBcancel').click(function(){
        tb_remove();
    });
    
    // graceful degredation
    $('#javascript_warning').hide();
      $('#fallback_submit').hide();
      $('#spec_submit_button').show();
        
    //////////////////////////////////////////////////////////////////////////////////////////
    // Conditions
    //

    // Page Load /////////////////////////////////////////////////////////////////////////////
    (function() {
      outdoorModelsSelected = isOutdoorModelSelected();
      checkRSIDPs(); // #14-18
      checkTabletArmEnabled();
      checkTabletArmOptions();
      checkMountingRule();
      checkPlasticOutdoorArmrest();
      checkRowPlateRecessEnabled(); // #20
      checkDonorPlateRecessEnabled(); // #21
      checkConcealedFastenersEnabled(); // #23
      checkLaminateBackEnabled(); // #24
      updateModelDetails();
      updateSeatDetails();
      updateAisleEndDetails();
    })();
    
    // Event Handlers /////////////////////////////////////////////////////////////////////////////
    $('#tablet_arm_select').change(function() {
      checkPlasticArmrest(); // #9a,b
      checkScrollWoodArmrests(); // #10b
    });

    var aisleEndChanged = function() {
      checkTabletArmOptions(); // #7d
      checkPlasticArmrest(); // #9a
      checkScrollWoodArmrests(); // #10a, #11
      checkWoodArmrestAisleLight(); // #13a
      updateAisleEndDetails();
    };

    var modelChanged = function() {
      outdoorModelsSelected = isOutdoorModelSelected();
      checkTabletArmEnabled();
      checkAisleLightEnabled(); // #12
      checkPlasticOutdoorArmrest();
      checkPowerAndDataEnabled(); // #22a
      checkConcealedFastenersEnabled(); // #23
      checkLaminateBackEnabled(); // #24
      checkMountingRule(); // #5b
      
      // #1
      $("#seat_select option").disable(false);
      
      // #4b
      $("#standard_type_select option").disable(false);
      
      // #6
      $("#aisle_end_select option").disable(false);
      
      // #19
      $("#donor_plate_select").disable(false);
      

      if (outdoorModelsSelected) {
        // #1
        exclusivelySelect('seat', 'Outdoor Seat');
        
        // #4b
        exclusivelySelect('standard_type', 'Standard');
        
        // #6
        exclusivelySelect('aisle_end', '136 Cast Iron End');

        // #19
        $("#donor_plate_select").disable();
      } else {
        var seat_select = $("#seat_select");
        $("option[text='Outdoor Seat']", seat_select).disable().removeAttr("selected");

      }
      updateModelDetails();
      updateSeatDetails();
      updateAisleEndDetails();
    };
    
    $('#model_select').change(modelChanged);
    $('#model_select').keyup(modelChanged);

    $('#aisle_end_select').change(aisleEndChanged);
    $('#aisle_end_select').keyup(aisleEndChanged);

    $("#mounting input").change(function() {
      checkMountingRule();
    });

    $('#armrest_select').change(function() {
      checkTabletArmEnabled(); //#7c
      checkRowPlateRecessEnabled(); // #20
      checkDonorPlateRecessEnabled(); // #21
      checkWoodArmrestAisleLight(); // #13b
    });

    $('#standard_type_select').change(function() {
      checkTabletArmEnabled(); // #7b
      checkMountingRule(); // #4a
      checkPowerAndDataEnabled(); // #22b
    });

    var seatChanged = function() {
      checkRSIDPs(); //#14-18
      updateSeatDetails();
      updateAisleEndDetails();
    };
    
    $("#seat_select").change(seatChanged);
    $("#seat_select").keyup(seatChanged);
    
    $("#row_and_seat_id_plates_select").change(function() {
      checkRowPlateRecessEnabled(); // #20
    });    

    $("#donor_plate_select").change(function() {
      checkDonorPlateRecessEnabled(); // #21
    });    

    // end Validations

    var valid = $("#specs-form").validate({
      errorPlacement: function(error, element) {
        element.parent().parent().children("span").addClass("validation_error");
        element.prev().addClass('validation_error');
      },
      invalidHandler: function(e, validator) {
        var errors = validator.numberOfInvalids();
        if (errors) {
          var message = errors == 1
            ? '1 required field remaining, highlighted red above.'
            : errors+' required fields remaining, highlighted red above.';
          $("div.error").html(message);
          $("div.error").show();
        } else {
          //$("div.error").html("");
          $("div.error").hide();
        }
      },  
      focusInvalid: false,
      onkeyup: false
    });
  
    $('#fallback_submit').click(function() {
      $('#specs-form .validation_error').removeClass('validation_error');
      var formIsValid = valid.form();
                                   
      if (!formIsValid) {
        return false;
      }
      valid.resetForm();
      
			$("div.error").hide();
      $('#spec_submit_button').blur();
      return false;
    });
                                
    $('#spec_submit_button').click(function () {
      $('#specs-form .validation_error').removeClass('validation_error');

      var formIsValid = valid.form();                             
      if (!formIsValid) {
        return false;
      }

      valid.resetForm();
			$("div.error").hide();
      $('#spec_submit_button').blur();

      if ($.browser.msie) {
        $('#specs-form').submit();
        window.setTimeout(function() {
          tb_show('', 'download.html?', null);
          return false;
        }, 500);
      } else {
        tb_show('', 'download.html?', null);
        window.setTimeout(function() {
          downloadSpecs();
          return false;
        }, 500);
      }
      return false;
    });
});

