/* General Field Utils */

var formFailedColor = "#FFD3D3";
var formPassedColor = "#D2FFCD";
var formEmptyColor = "#FFFFFF";
var formDisabledColor = "#CCCCCC";

function copyField(field1, field2, noErrorIfEmpty){
  field1 = $('[name=' + field1 + ']');
  field2 = $('[name=' + field2 + ']');

  if(trim(field1.val()).length > 0){
    field2.val(field1.val());
    field1.css('background-color',formPassedColor);
    field2.css('background-color',formPassedColor);
    return true;
  } else{
    if(!noErrorIfEmpty){
      field1.css('background-color',formFailedColor);
      return false;
    } else{
      return true;
    }
  }
}

/* User Fields */
function switchUserRegisterType(){
  if($("[name='userType']:checked").val() == 'owner'){
    $('#installerRegistrationMessage').hide();
    $('#ownerRegistrationMessage').show();
  } else{
    $('#ownerRegistrationMessage').hide();
    $('#installerRegistrationMessage').show();
  }
}

/* Owner Fields */
function changeOwnerType() {
  if($('[name=System_Owner_Type]').val() != 'Individual'){
    $('tr.business-group').show();
  } else{
    $('tr.business-group').hide();
  }
}

function changeOwnerPaymentMethod(){
  if($('[name=Payment_Method]').val() != 'Check'){
    $('tr.payment-method-group').show();
  } else{
    $('tr.payment-method-group').hide();
  }
}

function prepareOwnerForm(){
  if($('[name=system_owner_type]').val() != 'individual'){
    changeOwnerType();
  }

  if($('[name=Payment_Method]').val() == 'Check'){
    changeOwnerPaymentMethod();
  }
}

function validateCompany(){
  if($('[name=System_Owner_Type]').val() == 'Business/Not Profit'){
    if($('[name=Company_Name]').val().length == 0){
      $('[name=Company_Name]').css('background-color', formFailedColor);
      return false;
    } else{
      $('[name=Company_Name]').css('background-color', formPassedColor);
      return true;
    }
  } else{
    return true;
  }
}

function validateCompanyTitle(){
  if($('[name=System_Owner_Type]').val() == 'Business/Not Profit'){
    if($('[name=Company_Title]').val().length == 0){
      $('[name=Company_Title]').css('background-color', formFailedColor);
      return false;
    } else{
      $('[name=Company_Title]').css('background-color', formPassedColor);
      return true;
    }
  } else{
    return true;
  }
}

function validatePrefix(){
  copyField('Prefix','Payee_Prefix', true);
  return true;
}

function validateFirstName(copyChange){
  copyChange = typeof(copyChange) != 'undefined' ? copyChange : true;

  if(copyChange){
    return copyField('First_Name','Payee_First_Name');
  } else{
    if($('[name=First_Name]').val().length == 0 || $('[name=Payee_First_Name]').val().length == 0){
      if($('[name=First_Name]').val().length == 0){
        $('[name=First_Name]').css('background-color',formFailedColor);
      }
      if($('[name=Payee_First_Name]').val().length == 0){
        $('[name=Payee_First_Name]').css('background-color',formFailedColor);
      }
      return false;
    } else{
      return true;
    }
  }
}

function validateLastName(copyChange){
  copyChange = typeof(copyChange) != 'undefined' ? copyChange : true;

  if(copyChange){
    return copyField('Last_Name','Payee_Last_Name');
  } else{
    if($('[name=Last_Name]').val().length == 0 || $('[name=Payee_Last_Name]').val().length == 0){
      if($('[name=Last_Name]').val().length == 0){
        $('[name=Last_Name]').css('background-color',formFailedColor);
      }
      if($('[name=Payee_Last_Name]').val().length == 0){
        $('[name=Payee_Last_Name]').css('background-color',formFailedColor);
      }
      return false;
    } else{
      return true;
    }
  }
}

function validateEmail(){
  if(isValidEmail($('[name=Email_Address]').val())){
    $('[name=Email_Address]').css('background-color', formPassedColor);
    return true;
  } else{
    $('[name=Email_Address]').css('background-color', formFailedColor);
    return false;
  }
}

function validateConfirmEmail(){
  if($('[name=Email_Address]').val() == $('[name=Confirm_Email_Address]').val()){
    $('[name=Confirm_Email_Address]').css('background-color', formPassedColor);
    return true;
  } else{
    $('[name=Confirm_Email_Address]').css('background-color', formFailedColor);
    return false;
  }
}


function validateStreetAddress1(copyChange){
  copyChange = typeof(copyChange) != 'undefined' ? copyChange : true;

  if(copyChange){
    return copyField('Street_Address_1','Payee_Street_Address_1');
  } else{
    if($('[name=Street_Address_1]').val().length == 0 || $('[name=Payee_Street_Address_1]').val().length == 0){
      if($('[name=Street_Address_1]').val().length == 0){
        $('[name=Street_Address_1]').css('background-color',formFailedColor);
      }
      if($('[name=Payee_Street_Address_1]').val().length == 0){
        $('[name=Payee_Street_Address_1]').css('background-color',formFailedColor);
      }
      return false;
    } else{
      return true;
    }
  }
}

function validateStreetAddress2(){
  return copyField('Street_Address_2','Payee_Street_Address_2', true);
}

function validateCity(copyChange){
  copyChange = typeof(copyChange) != 'undefined' ? copyChange : true;

  if(copyChange){
    return copyField('City','Payee_City');
  } else{
    if($('[name=City]').val().length == 0 || $('[name=Payee_City]').val().length == 0){
      if($('[name=City]').val().length == 0){
        $('[name=City]').css('background-color',formFailedColor);
      }
      if($('[name=Payee_City]').val().length == 0){
        $('[name=Payee_City]').css('background-color',formFailedColor);
      }
      return false;
    } else{
      return true;
    }
  }
}

function validateState(copyChange){
  copyChange = typeof(copyChange) != 'undefined' ? copyChange : true;

  if(copyChange){
    return copyField('State','Payee_State');
  } else{
    if($('[name=State]').val().length == 0 || $('[name=Payee_State]').val().length == 0){
      if($('[name=State]').val().length == 0){
        $('[name=State]').css('background-color',formFailedColor);
      }
      if($('[name=Payee_State]').val().length == 0){
        $('[name=Payee_State]').css('background-color',formFailedColor);
      }
      return false;
    } else{
      return true;
    }
  }
}

function validateZip(copyChange){
  copyChange = typeof(copyChange) != 'undefined' ? copyChange : true;

  if(copyChange){
    return copyField('Zip','Payee_Zip');
  } else{
    if($('[name=Zip]').val().length == 0 || $('[name=Payee_Zip]').val().length == 0){
      if($('[name=Zip]').val().length == 0){
        $('[name=Zip]').css('background-color',formFailedColor);
      }
      if($('[name=Payee_Zip]').val().length == 0){
        $('[name=Payee_Zip]').css('background-color',formFailedColor);
      }
      return false;
    } else{
      return true;
    }
  }
}

function validatePrimaryPhone(){
  passed = true;
  phoneValues = [
    $('[name=Home_Phone_Number1]').val(),
    $('[name=Home_Phone_Number2]').val(),
    $('[name=Home_Phone_Number3]').val()
  ];

  $.each(
    phoneValues,
    function( intIndex, objValue ){
      id = intIndex + 1;
      if(isNumber(objValue) && (((intIndex < 2) && objValue.length == 3) || (intIndex == 2 && objValue.length == 4))){
        $('[name=Home_Phone_Number' + id + ']').css('background-color', formPassedColor);
      } else{
        $('[name=Home_Phone_Number' + id + ']').css('background-color', formFailedColor);
        passed = false;
      }
    }
  );

  return passed;
}

function validateMobilePhone(){
  passed = true;
  emptyCount = 0;
  phoneValues = [
    $('[name=Mobile_Phone_Number1]').val(),
    $('[name=Mobile_Phone_Number2]').val(),
    $('[name=Mobile_Phone_Number3]').val()
  ];

  $.each(
    phoneValues,
    function( intIndex, objValue ){
      if(isNumber(objValue) && (((intIndex < 2) && objValue.length == 3) || (intIndex == 2 && objValue.length == 4))){
        $('[name=Mobile_Phone_Number' + (intIndex + 1) + ']').css('background-color', formPassedColor);
      } else{
        $('[name=Mobile_Phone_Number' + (intIndex + 1) + ']').css('background-color', formFailedColor);
        passed = false;

        if(objValue.length == 0){
          emptyCount++;
        }
      }
    }
  );

  if(emptyCount == 3){ //since not mandatory, if empty, ignore
    passed = true;
    $.each(
      phoneValues,
      function( intIndex, objValue ){
        $('[name=Mobile_Phone_Number' + (intIndex + 1) + ']').css('background-color', formEmptyColor);
      }
    );
  }

  return passed;
}

function validateFax(){
  passed = true;
  emptyCount = 0;
  phoneValues = [
    $('[name=Fax_Number1]').val(),
    $('[name=Fax_Number2]').val(),
    $('[name=Fax_Number3]').val()
  ];

  $.each(
    phoneValues,
    function( intIndex, objValue ){
      if(isNumber(objValue) && (((intIndex < 2) && objValue.length == 3) || (intIndex == 2 && objValue.length == 4))){
        $('[name=Fax_Number' + (intIndex + 1) + ']').css('background-color', formPassedColor);
      } else{
        $('[name=Fax_Number' + (intIndex + 1) + ']').css('background-color', formFailedColor);
        passed = false;

        if(objValue.length == 0){
          emptyCount++;
        }
      }
    }
  );

  if(emptyCount == 3){ //since not mandatory, if empty, ignore
    passed = true;
    $.each(
      phoneValues,
      function( intIndex, objValue ){
        $('[name=Fax_Number' + (intIndex + 1) + ']').css('background-color', formEmptyColor);
      }
    );
  }

  return passed;
}

function validateUserForm(){
  var error = '<b>Error Messages:</b> <br>';
  var passed = true;

  if(!isValidEmail($('[name=email]').val())){
    $('[name=email]').css('background-color', formFailedColor);
    error += '- Please enter a valid email address<br>';
    passed = false;
  } else{
    $('[name=email]').css('background-color', formEmptyColor);
  }

  if($('[name=email]').val() != $('[name=confirmEmail]').val()){
    error += '- Email and confirmation email do not match<br>';
    passed = false;
  }

  if($('[name=password]').val().length < 5){
    $('[name=password]').css('background-color', formFailedColor);
    error += '- Please enter a password of at least 5 characters<br>';
    passed = false;
  } else{
    $('[name=password]').css('background-color', formEmptyColor);
  }

  if($('[name=password]').val() != $('[name=confirmPass]').val()){
    $('[name=password]').css('background-color', formFailedColor);
    $('[name=confirmPass]').css('background-color', formFailedColor);
    error += '- Password and confirmation password do not match<br>';
    passed = false;
  } else{
    $('[name=pass]').css('background-color', formEmptyColor);
    $('[name=confirmPass]').css('background-color', formEmptyColor);
  }

  if(passed){
    $('#message').hide();
  } else{
    $('#message').html(error);
    $('#message').removeClass('form-message-good').addClass('form-message-bad');
    $('#message').show();
  }

  return passed;
}

function validateBecomePartnerForm(){
  var error = '<b>Error Messages:</b> <br>';
  var passed = true;

  if($('[name=individualName]').val().length == 0){
    $('[name=individualName]').css('background-color', formFailedColor);
    error += '- Please provide your name<br>';
    passed = false;
  }
  else {
    $('[name=individualName]').css('background-color', formEmptyColor);
  }

  if($('[name=companyName]').val().length == 0){
    $('[name=companyName]').css('background-color', formFailedColor);
    error += '- Please provide the name of your company<br>';
    passed = false;
  }
  else {
    $('[name=companyName]').css('background-color', formEmptyColor);
  }

  if(!isValidPhone($('[name=phone]').val())){
    $('[name=phone]').css('background-color', formFailedColor);
    error += '- Please provide a valid phone number ( (XXX) XXX-XXXX )<br>';
    passed = false;
  } else{
    $('[name=phone]').css('background-color', formEmptyColor);
  }

  if(!isValidEmail($('[name=email]').val())){
    $('[name=email]').css('background-color', formFailedColor);
    error += '- Please enter a valid email address<br>';
    passed = false;
  } else{
    $('[name=email]').css('background-color', formEmptyColor);
  }

  if($('[name=email]').val() != $('[name=confirmEmail]').val()){
    $('[name=confirmEmail]').css('background-color', formFailedColor);
    error += '- Email and confirmation email do not match<br>';
    passed = false;
  }
  else {
    $('[name=confirmEmail]').css('background-color', formEmptyColor);
  }

  if($('[name=states]').val().length == 0){
    $('[name=states]').css('background-color', formFailedColor);
    error += '- Please provide a list of operating states<br>';
    passed = false;
  }
  else {
    $('[name=states]').css('background-color', formEmptyColor);
  }

  if(passed){
    $('#message').hide();
  } else{
    $('#message').html(error);
    $('#message').removeClass('form-message-good').addClass('form-message-bad');
    $('#message').show();
  }

  return passed;
}

function validateBecomeBuyerForm(){
  var error = '<b>Error Messages:</b> <br>';
  var passed = true;

  if(!isValidEmail($('[name=email]').val())){
    $('[name=email]').css('background-color', formFailedColor);
    error += '- Please enter a valid email address<br>';
    passed = false;
  } else{
    $('[name=email]').css('background-color', formEmptyColor);
  }

  if($('[name=email]').val() != $('[name=confirmEmail]').val()){
    error += '- Email and confirmation email do not match<br>';
    passed = false;
  }

  if($('[name=individualName]').val().length == 0){
    error += '- Name must not be blank<br>';
    passed = false;
  }

  if($('[name=companyName]').val().length == 0){
    error += '- Company Name must not be blank<br>';
    passed = false;
  }

  if(passed){
    $('#message').hide();
  } else{
    $('#message').html(error);
    $('#message').removeClass('form-message-good').addClass('form-message-bad');
    $('#message').show();
  }

  return passed;
}

function validateBecomeBuyerForm(){
  var error = '<b>Error Messages:</b> <br>';
  var passed = true;

  if(!isValidEmail($('[name=email]').val())){
    $('[name=email]').css('background-color', formFailedColor);
    error += '- Please enter a valid email address<br>';
    passed = false;
  } else{
    $('[name=email]').css('background-color', formEmptyColor);
  }

  if($('[name=email]').val() != $('[name=confirmEmail]').val()){
    error += '- Email and confirmation email do not match<br>';
    passed = false;
  }

  if($('[name=individualName]').val().length == 0){
    error += '- Name must not be blank<br>';
    passed = false;
  }

  if($('[name=companyName]').val().length == 0){
    error += '- Company Name must not be blank<br>';
    passed = false;
  }

  if(passed){
    $('#message').hide();
  } else{
    $('#message').html(error);
    $('#message').removeClass('form-message-good').addClass('form-message-bad');
    $('#message').show();
  }

  return passed;
}

function validateContactUsForm(){
  var error = '<b>Error Messages:</b> <br>';
  var passed = true;

  if(!isValidEmail($('[name=email]').val())){
    $('[name=email]').css('background-color', formFailedColor);
    error += '- Please enter a valid email address<br>';
    passed = false;
  } else{
    $('[name=email]').css('background-color', formEmptyColor);
  }

  if($('[name=First_Name]').val().length == 0 || $('[name=Last_Name]').val().length == 0){
    error += '- Name must not be blank<br>';
    passed = false;
  }

  if($('[name=phoneNumber]').val().length == 0){
    error += '- Phone number must not be blank<br>';
    passed = false;
  }

  if($('[name=State]').val().length == 0){
    error += '- State must not be blank<br>';
    passed = false;
  }

  if(passed){
    $('#message').hide();
  } else{
    $('#message').html(error);
    $('#message').removeClass('form-message-good').addClass('form-message-bad');
    $('#message').show();
  }

  return passed;
}

function validateInstallerForm(){
  return true;
}

function validateOwnerForm(){
  var error = '<b>Error Messages:</b> <br>';
  var passed = true;

  localPass1 = validateCompany();
  localPass2 = validateCompanyTitle();

  if(!localPass1 && !localPass2){
    error = error + '&nbsp;&nbsp;- You are missing a company name and/or position/title<br>';
    passed = false;
  }

  if($('[name=Skip_Email_Address]').val() != '1'){
    if(!validateEmail()){
      error = error + '&nbsp;&nbsp;- You did not enter a valid email address<br>';
      passed = false;
    }
  }

  localPass1 = validateFirstName(false);
  localPass2 = validateLastName(false);
  localPass3 = validateStreetAddress1(false);
  localPass4 = validateCity(false);

  if(!localPass1 || !localPass2 || !localPass3 || !localPass4){
    error = error + '&nbsp;&nbsp;- You are missing First Name, Last Name, Street Address 1 or City<br>';
    passed = false;
  }

  if(!validateState(false)){
    error = error+'&nbsp;&nbsp;- You are missing a State<br>';
    passed = false;
  }

  if(!validateZip(false)){
    error = error+'&nbsp;&nbsp;- Zip Code must be 5 digits<br>';
    passed = false;
  }

  if(!validatePrimaryPhone()){
    error = error + '&nbsp;&nbsp;- Phone must be 10 digits<br>';
    passed = false;
  }

  if(!validateMobilePhone()){
    error = error + '&nbsp;&nbsp;- Mobile Phone must be 10 digits, or empty<br>';
    passed = false;
  }

  if(!validateFax()){
    error = error + '&nbsp;&nbsp;- Fax Number must be 10 digits, or empty<br>';
    passed = false;
  }

  updateDiv = 'message';
  if(passed){
    $('#' + updateDiv).hide();
  } else{
    $('#' + updateDiv).html(error);
    $('#' + updateDiv).show();
    var targetOffset = $('#' + updateDiv).offset().top - 10;
    $('html,body').animate({scrollTop: targetOffset}, 'slow');
  }

  return passed;
}

/* System Fields */

// break this into 2 methods?
function changeSystemPaymentMethod(){
  var url = 'get-payment-methods-for-state-cb';

  var systemForm = $('#registerSystem');
  if( !systemForm.length ) return;

  var paymentMethodSelect = systemForm.find('[name="Payment_Method"]');
  var selectedPaymentMethod = paymentMethodSelect.val();
  var selectedState = systemForm.find('[name="System_State"]').val();
  var selectedSystemType = systemForm.find('[name="System_Type"]').val();
  $.get(
    url,
    systemForm.serialize(),
    function(data){
      paymentMethodSelect.find('option').remove();
      paymentMethodSelect.append('<option>');
      $(data).each( function(index, paymentMethod){

        var option = $('<option>' + paymentMethod.label  + '</option>')
          .attr('value', paymentMethod.value);

        if( paymentMethod.value == selectedPaymentMethod ){
          option.attr('selected', 'selected');
        }

        paymentMethodSelect.append(option);
      } );
    },
    'json'
  );
}

function validateSystemBehindMeter(skipPopup){
  if($('[name=Behind_the_Meter]').val() == '0'){
    if(!skipPopup){
      alert('We cannot register your system if it is not behind a meter. Please call the Sol Systems Team if you have any questions.');
    }
    return false;
  } else{
    return true;
  }
}

function toggleRowGroup(elem, rowGroup){
  if( $(elem).val() == '1' ){
    $('tr.' + rowGroup).show();
  }
  else {
    $('tr.' + rowGroup).hide();
  }

  validateSystemDocs();

}

function toggleRowGroup(elem, rowGroup, reverse){
  if( typeof(reverse) === 'undefined' ) reverse = false;

  if( !reverse ){
    if( $(elem).val() == '1' ){
      $('tr.' + rowGroup).show();
    }
    else {
      $('tr.' + rowGroup).hide();
    }
  }
  else {
    if( $(elem).val() == '0' ){
      $('tr.' + rowGroup).show();
    }
    else {
      $('tr.' + rowGroup).hide();
    }
  }

    validateSystemDocs();
}

function validateSystemDocs(){
  var stateId = parseInt($('[name=System_State]').val(), 10);

  //check pictures
  var requiresPhotoArray = [3, 10, 11, 14, 19, 5];//OH, KY, MI, IN, WV, PA
  var requiresPhoto = false;
  if(jQuery.inArray(stateId, requiresPhotoArray) !== -1){
    requiresPhoto = true;
  }

  //check business
  var requiresCOG = false;
  if( $('[name=Is_Business]').val() == '1'
      && jQuery.inArray( stateId, [6,8] ) !== -1 )
  {
    requiresCOG = true;
  }

  if( $('[name=System_Type]').val() == 'PV' ){
    //check interconnection
    var requiresInterconnectionArray = [4, 8, 14, 10, 6, 11, 7, 9, 3, 5, 2, 19]; //DE, DC, IN, KY, MD, MI, NJ, NC, OH, PA, VA, and WV
    var requiresInterconnection = false;
    if(jQuery.inArray(stateId, requiresInterconnectionArray) !== -1){
      requiresInterconnection = true;
    }

    //check MA
    var requiresMASRECArray = [13]; //MA
    var requiresMASREC = false;
    if(jQuery.inArray(stateId, requiresMASRECArray) !== -1){
      requiresMASREC = true;
    }

    //check NJ
    var requiresNjInspectionWaiver = false;
    var requiresNjInspectionApproval = false;

    if( stateId == 7 && $('[name=has_nj_inspection_waiver]').val() == 1 ){
      requiresNjInspectionWaiver = true;
    }

    if( stateId == 7 && $('[name=has_nj_inspection_approval]').val() == 1 ){
      requiresNjInspectionApproval = true;
    }
  }

  var requiresMdApprovedBuildingPermit = false;
  var requiresMdThermalFormAffidavit   = false;
  if( $('[name=System_Type]').val() == 'ST' ){
    if( stateId == 6 ){
      requiresMdApprovedBuildingPermit = true;
      requiresMdThermalFormAffidavit   = true;
    }
  }

  var requiresDcAuthToConductBusiness = false;
  if( stateId == 8 && $('[name=Is_Business]').val() == '1' ){
    requiresDcAuthToConductBusiness = true;
  }

  if( requiresCOG
    || requiresInterconnection
    || requiresPhoto
    || requiresMASREC
    || requiresNjInspectionWaiver
    || requiresNjInspectionApproval
    || requiresMdApprovedBuildingPermit
    || requiresMdThermalFormAffidavit
    || requiresDcAuthToConductBusiness )
  {
    $('#required-system-docs').show();

    if(requiresCOG){
      $('#doc-good-standing').show();
    } else{
      $('#doc-good-standing').hide();
    }

    if(requiresInterconnection){
      $('#doc-interconnection').show();
    } else{
      $('#doc-interconnection').hide();
    }

    if(requiresPhoto){
      $('#doc-picture-array').show();
      $('#doc-picture-meter').show();
    } else{
      $('#doc-picture-array').hide();
      $('#doc-picture-meter').hide();
    }

    if(requiresMASREC){
      $('#doc-MA-SREC-agreement').show();
    } else{
      $('#doc-MA-SREC-agreement').hide();
    }

    if( requiresNjInspectionWaiver ){
      $('#doc-nj-inspection-waiver').show();
    }
    else {
      $('#doc-nj-inspection-waiver').hide();
    }

    if( requiresNjInspectionApproval ){
      $('#doc-nj-inspection-approval').show();
    }
    else {
      $('#doc-nj-inspection-approval').hide();
    }

    if( requiresMdApprovedBuildingPermit ){
      $('#doc-md-approved-building-permit').show();
    }
    else {
      $('#doc-md-approved-building-permit').hide();
    }

    if( requiresMdThermalFormAffidavit ){
      $('#doc-md-thermal-form-affidavit').show();
    }
    else {
      $('#doc-md-thermal-form-affidavit').hide();
    }

    if( requiresDcAuthToConductBusiness ){
      $('#doc-dc-auth-conduct-business').show();
    }
    else {
      $('#doc-dc-auth-conduct-business').hide();
    }

  }
  else {
    $('#required-system-docs').hide();
  }
}

function changeColorOnChange(element){
  if($(element).val().length == 0){
    $(element).css('background-color', formEmptyColor);
  } else{
    $(element).css('background-color', formPassedColor);
  }
}

function eligibleforRetroactiveCredit( systemState ){
  if( $.inArray( systemState, [ '3','10','11','14','19' ] ) !== -1 ){
    return true;
  }

  return false;
}

// ST Meter and Remote Monitoring

function changeOimlMeterPresent(){
  if( trim($('[name=st_has_oiml_certified_meter]').val()) == '1' ){
    $('tr.system-st-oiml-meter-group').show();

    if( $('[name=st_remote_monitoring_access]') == '1' ){
      $('tr.st-remote-monitoring-group').show();
    }
    else {
      $('tr.st-remote-monitoring-group').hide();
    }
  }
  else {
    $('tr.system-st-oiml-meter-group').hide();
  }
}

// PV Meter and Remote Monitoring

function changeSolarMeterPresent(){
  if($('[name=Solar_Meter_Present]').val() == "1"){
    $('tr.meter-reading-group').show();
  }
  else {
    $('tr.meter-reading-group').hide();
  }
  changeRemoteMonitoring();
}

function changeRemoteMonitoring(){
  $('tr.remote-monitoring-group').hide();

  if( $('[name=Remote_Monitoring_Access]').val() == '1' ){
    // show platform selection
    if( $('[name=Solar_Meter_Present]').val() == '1' ){
      $('.remote-monitoring-connected-to-solar-meter').show();

      // handle remote monitoring not connected message correctly
      // note that we allow any kind of remote monitoring for de
      if( $('[name=Remote_Monitoring_Connected_To_Solar_Meter]').val() != '1'
          && $('[name=System_State]').val() != 4 ){
        // are we eligible for retroactive credit?
        if( eligibleforRetroactiveCredit( $('[name=System_State]').val() ) ){
          $('.retroactive-credit-1').show();
          $('.retroactive-credit-0').hide();
        }
        else {
          $('.retroactive-credit-0').show();
          $('.retroactive-credit-1').hide();
          return;
        }
      }
    }

    // display platform fields
    $('.remote-monitoring-platform').show();

    var group = $('[name=Remote_Monitoring_Platform]').val();

    // handle enphase correctly, it's a little more complex
    if( group == 'enphase' ){
      // if we can try to get retroactive credit, get all details
      if( eligibleforRetroactiveCredit( $('[name=System_State]').val() ) ){
        $('.remote-monitoring-platform-enphase-retro').show();
      }

      // if there's no solar meter, we can use enphase to report generation
      if( $('[name=Solar_Meter_Present]').val() == '0'
          || (
            $('[name=Solar_Meter_Present]').val() == '1'
            && $('[name=Remote_Monitoring_Connected_To_Solar_Meter]').val() == '1') )
      {
        $('.remote-monitoring-platform-enphase').show();
      }
    }
    else {
      $( '.remote-monitoring-platform-' + group ).show();
    }
  }
}

function changeUtilityCompany(elems){
  $(elems).parents('table').find('[name=Other_Utility_Company]').parents('tr').hide();

  $(elems).each( function(i, elem){
    if($(elem).val() == 'other'){
      $(elem).parents('table').find('[name=Other_Utility_Company]').parents('tr').show();
    }
  } );
}

function showAllFields(){
  $('tr').show();

  toggleRowGroup( $('[name=SameAddress]'), 'system-address-group', true );

  if($('[name=Installer_ID]').val() != '-1'){
    $('tr.system-installer-group').hide();
  }

  if($('[name=GATS_Registered]').val() != '1'){
    $('tr.GATS-group').hide();
  }

  if($('[name=PA_Sunshine_Recipient]').val() != '1'){
    $('tr.PA-sunshine-internal-group').hide();
  }

  if($('[name=Solar_Meter_Present]').val() != '1'){
    $('tr.meter-reading-group').hide();
  }

  if($('[name=adjustments]').val() != '1'){
    $('tr.adjustments-group').hide();
  }


  if($('[name=System_Type]').val() == 'PV'){
    $('tr.system-st-group').hide();
  }
  else if( $('[name=System_Type]').val() == 'ST' ) {
    $('tr.system-PV-group').hide();

    if( $('[name=st_is_og300_certified]').val() == '1'
        || trim($('[name=st_is_og300_certified]').val()) == '' )
    {
      $('tr.system-st-non-og300-group').hide();
    }
    else {
      $('tr.system-st-og300-group').hide();
    }

    /* Ugh, this is horrible... */
    /* Businesses in MD with OG300 aren't accepted */
    if( $('[name=Is_Business]').val() == '1'
        && $('[name=System_State]').val() == '6' )
    {
      $('tr.system-st-non-business-group').hide();
      $('tr.system-st-og300-group').hide();
      $('tr.system-st-non-og300-group').show();
    }
  }
  else {
    $('tr.system-st-group').hide();
    $('tr.system-PV-group').hide();
  }


  if( $('[name=Payment_Method]').val() != 'Upfront'
    && $('[name=Payment_Method]').val() != 'Upfront20' )
  {
    $('tr.upfront-group').hide();
  }


  $('.hide-unless-value-group').each( function( i, v ){
    if( trim($(v).find('input, select').first().val()) != '' ){
      $(v).show();
    }
    else {
      $(v).hide();
    }
  } );

  changeOimlMeterPresent();
  changeRemoteMonitoring();
  changeUtilityCompany( $('[name=Utility_Company]') );
  toggleNjFields();
  toggleDcGrandfatheredFields();
}

function toggleDcGrandfatheredFields(){
  $('.dc-grandfathered-group').hide();
  $('.dc-grandfathered-group').find( 'input, select, textarea' ).attr( 'disabled', true );

  var stateId = parseInt($('[name=System_State]').val(), 10);

  // No DC grandfathering for MA, DC systems
  if( jQuery.inArray( stateId, [ 8, 13 ] ) == -1){
    $('[name=dc_grandfathered_system_is_installed]').attr( 'disabled', false );
    $('[name=dc_grandfathered_system_is_installed]').parents('tr').show();
  }

  if( !$('[name=dc_grandfathered_system_is_installed]').attr( 'disabled' )
      && $('[name=dc_grandfathered_system_is_installed]').val() == '1' )
  {
    $('[name=dc_grandfathered_system_installed_before_deadline]').attr( 'disabled', false );
    $('[name=dc_grandfathered_system_installed_before_deadline]').parents('tr').show();
  }

  if( !$('[name=dc_grandfathered_system_installed_before_deadline]').attr( 'disabled' )
    && $('[name=dc_grandfathered_system_installed_before_deadline]').val() == '1' ){
    $('[name=dc_grandfathered_system_is_certified_in_dc]').attr( 'disabled', false );
    $('[name=dc_grandfathered_system_is_certified_in_dc]').parents('tr').show();
  }

  if( !$('[name=dc_grandfathered_system_is_certified_in_dc]').attr( 'disabled' )
    && $('[name=dc_grandfathered_system_is_certified_in_dc]').val() == '1' ){
    $('[name=dc_grandfathered_system_wants_grandfathered_pricing]').attr( 'disabled', false );
    $('[name=grandfathered_dc_cert_number]').attr( 'disabled', false );

    $('[name=dc_grandfathered_system_wants_grandfathered_pricing]').parents('tr').show();
    $('[name=grandfathered_dc_cert_number]').parents('tr').show();
  }
}

function toggleNjFields(){
  // NJ-specific fields
  $('tr.NJ-non-reip').hide();
  $('tr.NJ-has-cert').hide();
  $('tr.NJ-no-cert').hide();
  $('tr.NJ-no-waiver').hide();

  if($('[name=is_nj_reip_recipient]').val() == '1'){
    $('tr.NJ-non-reip').hide();
  }
  else if( $('[name=is_nj_reip_recipient]').val() == '0' ){
    $('tr.NJ-non-reip').show();
  }

  if($('[name=has_nj_cert_number]').val() == '1'){
    $('tr.NJ-has-cert').show();
    $('tr.NJ-no-cert').hide();
  }
  else if($('[name=has_nj_cert_number]').val() == '0'){
    $('tr.NJ-no-cert').show();
    $('tr.NJ-has-cert').hide();
  }

  if($('[name=has_nj_inspection_waiver]').val() == '0'){
    $('tr.NJ-no-waiver').show();
  }
  else {
    $('tr.NJ-no-waiver').hide();
  }
}

function changeSystemState(){
  showAllFields();
  stateId = parseInt($('[name=System_State]').val(), 10);

  //PA only sunshine info
  if(stateId != 5){
    $('tr.PA-sunshine-group').hide();
  }

  //NJ Omissions
  if(stateId == 7){
    $('tr.NJ-omission-group').hide();
  } else{
    $('tr.NJ-only-group').hide();
  }

  // MD-only fields
  if(stateId == 6){
    $('tr.MD-omission-group').hide();
  }
  else {
    $('tr.MD-only-group').hide();
  }

  //MA Includes and Omissions
  if(stateId == 13){
    $('tr.MA-omission-group').hide();

    if( trim($('[name=NEPOOL_GIS_Registered]').val()) != '1' ){
      $('tr.NEPOOL-group').hide();
    }

    if( trim($('[name=MA_CEC_Tracking_System_Registered]').val()) != '1' ){
      $('tr.MA-CEC-tracking-group').hide();
    }
  } else{
    $('tr.MA-include-group').hide();
  }

  // DE Includes and Omissions
  if(stateId == 4){
    $('.de-bonus-group').show();
  }
  else {
    $('.de-bonus-group').hide();
  }

  changeSystemPaymentMethod();
  changeSolarMeterPresent();
}

function validateStepRegistration(){
  streetPass = true;
  countyPass = true;
  installerPass = true;
  nameplatePass = true;
  paymentMethodPass = true;
  systemTypePass = true;

  if( trim($('[name=System_Type]').val()) == '' ){
    systemTypePass = false;
  }

  if( trim($('[name=Payment_Method]').val()) == '' ){
    paymentMethodPass = false;
  }

  if($('[name=System_Street_Address_1]').val().length == 0 ||
      $('[name=System_City]').val().length == 0 ||
      $('[name=System_State]').val().length == 0 ||
      $('[name=System_Zip_Code]').val().length == 0){
    streetPass = false;
  }

  if($('[name=System_County]').val().length == 0){
    countyPass = false;
  }

  if($('[name=Installer_ID]').val().length == 0 || $('[name=Installer_ID]').val() == "0" ||
    ($('[name=Installer_ID]').val() == "-1" && ($('[name=Installer_Company_Name]').val().length == 0 ||
    $('[name=Installer_Email]').val().length == 0 || $('[name=Installer_Phone_Number1]').val().length == 0 ||
    $('[name=Installer_Phone_Number2]').val().length == 0 || $('[name=Installer_Phone_Number3]').val().length == 0))){

    installerPass = false;
  }

  if( $('[name=System_Type]').val() == 'PV'
      && ( $('[name=Nameplate_Capacity]').val().length == 0
        || $('[name=Nameplate_Capacity]').val() == 0 ) )
  {
    nameplatePass = false;
  }

  if( $('[name=System_Type]').val() == 'ST'
      && $('[name=st_is_og300_certified]').val() == '1'
      && ( $('[name=st_annual_estimated_og300_output]').val().length == 0
        || $('[name=st_annual_estimated_og300_output]').val() == 0 ) )
  {
    nameplatePass = false;
  }

  if( $('[name=System_Type]').val() == 'ST'
      && $('[name=st_is_og300_certified]').val() != '1'
      && ( $('[name=st_annual_estimated_non_og300_output]').val().length == 0
        || $('[name=st_annual_estimated_non_og300_output]').val() == 0 ) )
  {
    nameplatePass = false;
  }

  if( $('[name=System_Type]').val() == 'ST'
      && trim($('[name=st_is_og300_certified]').val()) == ''
      && trim($('[name=st_is_og100_certified]').val()) == '' )
  {
    nameplatePass = false;
  }

  changeSystemState();

  /*  Reject systems that aren't OG300 or OG100
      Note that we may be hiding the input for OG300, so it could be blank
      But we don't want to alert on blank OG100s */
  if( $('[name=System_Type]').val() == 'ST'
      && trim($('[name=st_is_og300_certified]').val()) != '1'
      && trim($('[name=st_is_og100_certified]').val()) == '0' )
  {
    alert('Unfortunately, we cannot accept systems that are neither OG300 certified nor OG100 certified.');
    nameplatePass = false;
  }


  if( streetPass && countyPass && installerPass && nameplatePass && systemTypePass && paymentMethodPass ){
    $('#second-step-header').show();
    $('tbody#system-step-2').show();
    $('#form-actions').show();
    $('#step-2-text-before').hide();
    $('tr#extended-details-button').hide();
    $('#registration-tips ol li.step-2-tips').show();

    validateSystemDocs();

    // show/hide dc grandfathered fields as necessary
    toggleDcGrandfatheredFields();

    return true;
  }
  else {
    $('#second-step-header').show();
    $('tbody#system-step-2').hide();
    $('#form-actions').hide();
    $('#step-2-text-before').show();
    $('tr#extended-details-button').show();
    $('#registration-tips ol li.step-2-tips').show();

    // show/hide dc grandfathered fields as necessary
    toggleDcGrandfatheredFields();

    return false;
  }
}

function prepareSystemForm(){
  //set datepicker
  $('.datepicker').datepicker({dateFormat: 'yy-mm-dd'});
  validateStepRegistration();
}

/* Admin - specific */

function addSystemCertInfo(){
  systemId = $('[name=Curr_Cert_System_ID]').val();
  state = $('[name=Curr_Cert_State]').val();
  stateSubDate = $('[name=Curr_Sub_Date]').val();
  stateAppDate = $('[name=Curr_Iss_Date]').val();
  rtoSubDate = $('[name=Curr_rto_submitted_date]').val();
  rtoAppDate = $('[name=Curr_rto_approved_date]').val();
  certNumber = $('[name=Curr_Cert_Number]').val();
  fakeCertNum = $('[name=fakeCertNum]').val();
  sysText = $("#Curr_Cert_System_ID option[value='" + systemId + "']").text();

  if(systemId.length == 0 || state.length == 0){
    alert('You must select both a system and state');
  } else{
    newRow = '<tr id="cert-row-' + fakeCertNum + '"><td class="system-identity"><input type="hidden" id="' + fakeCertNum + '-id_System" name="' + fakeCertNum + '-id_System" value="' + systemId + '">';
    newRow += sysText + '</td>';
    newRow += '<td><input type="text" id="' + fakeCertNum + '-Cert_State" name="' + fakeCertNum + '-Cert_State" value="' + state + '"></td>';
    newRow += '<td><input type="text" id="' + fakeCertNum + '-Cert_Number" name="' + fakeCertNum + '-Cert_Number" value="' + certNumber + '"></td>';
    newRow += '<td><input class="datepicker" type="text" id="' + fakeCertNum + '-Sub_Date" name="' + fakeCertNum + '-Sub_Date" value="' + stateSubDate + '"></td>';
    newRow += '<td><input class="datepicker" type="text" id="' + fakeCertNum + '-Iss_Date" name="' + fakeCertNum + '-Iss_Date" value="' + stateAppDate + '"></td>';
    newRow += '<td><input class="datepicker" type="text" id="' + fakeCertNum + '-rto_submitted_date" name="' + fakeCertNum + '-rto_submitted_date" value="' + rtoSubDate + '"></td>';
    newRow += '<td><input class="datepicker" type="text" id="' + fakeCertNum + '-rto_approved_date" name="' + fakeCertNum + '-rto_approved_date" value="' + rtoAppDate + '"></td>';
    newRow += '<td><a href="#" onclick="removeSystemCertInfo(' + fakeCertNum + ');return false;">Delete</a></td></tr>';

    $(newRow).insertBefore('#cert-last-row');

    $('#bulk-certifications-table').tableHover({headCols: true, colClass: 'hover', cellClass: 'hovercell'});

    $(function() {
      $('.datepicker').datepicker({dateFormat: 'yy-mm-dd'});
    });

    fakeCertNum += 1;
    $('[name=fakeCertNum]').val(fakeCertNum);
  }
}

function removeSystemCertInfo(certNumber){
  $('#cert-row-' + certNumber).remove();
  $('[name=deletedCerts]').val($('[name=deletedCerts]').val() + certNumber + ',');
}



