
var YouBuy = {
  
  init: function()
  {
    if ($$('form[action="/you_buy"]')[0]) {
      YouBuy.init_form();
    }

    if ($$('body.listings.show')[0]) {
      YouBuy.init_show();
    }
    
    if ($$('#listings_show')[0]) {
      $('mortgage_settings').observe('submit', YouBuy.updateMortgageInShow);
      YouBuy.formatMortgageFields();
    }
    
    if ($$('#listings_index')[0]) {
      $('mortgage_settings').observe('submit', YouBuy.updateMortgageInListings);
      YouBuy.formatMortgageFields();
    }
    
    if (button = $$('#mortgage_button a')[0]) {
      button.observe('click', function(e)
      { 
        e.stop();
        $('tool_panel').addClassName('hidden');
        $('mortgage_settings').removeClassName('hidden');
      });
    }
    
    if (button = $$('#register_interest_button a')[0]) {
      button.observe('click', function(e)   /* actual functionality*/
      {
        e.stop();
        element = Event.element(e);  
        target = this.readAttribute('update_target');
        new Ajax.Updater(target, this.readAttribute('request_url'), { method: 'get' });  
        // $(target).toggleClassName("hidden");
        $("tool_panel").removeClassName("hidden");
        
        //hide the mortgage settings if visable
        $('mortgage_settings').addClassName('hidden');
        return false;
      });
    }

    if (field = $('mortgage_setting_down_payment')) {
      field.observe('focus', function(e)
      {
        $('mortgage_setting_percentage').addClassName("unused_field");
        $('mortgage_setting_down_payment').removeClassName("unused_field");            
        $('mortgage_setting_using_down_payment').value='true';
      });
    }

    if (field = $('mortgage_setting_percentage')) {                         
      field.observe('focus', function(e)
      {
        $('mortgage_setting_down_payment').addClassName("unused_field");
        $('mortgage_setting_percentage').removeClassName("unused_field");
        $('mortgage_setting_using_down_payment').value='false';
      });
    }
    
    YouBuy.observeOrderingButtons();
  },
  
  
  init_show: function()
  {
    // thumbnail rollover behaviour
    $$('#thumbnails a').each(function(link)
    {
      link.observe('mouseover', function(event)
      {
        img = link.down();
        path_parts = img.src.split('/');
        thumbnails_string_index = path_parts.indexOf('thumbnails');
        path_parts[thumbnails_string_index] = 'media';
        medium_src = path_parts.join('/');
        
        $('medium').update('<img src="'+medium_src+'" alt="'+img.alt+'"/>');
      });
    });
    
    // use hybrid map
    Global.map.map.setMapType(G_HYBRID_MAP);
  },
  
  
  // make postcode and area mutually exclusive
  //
  init_form: function()
  {
    $('y_finder_area_id').observe('change', function(event)
    {
      if ($F('y_finder_area_id')) {
        $('y_finder_postcode').selectedIndex = 0;
      }
    });
    
    $('y_finder_postcode').observe('change', function(event)
    {
      if ($F('y_finder_postcode')) {
        $('y_finder_area_id').selectedIndex = 0;
      }
    });
    
    if (field = $('filters_area_id')) {                         
      // $('filters_area_id').observe('change', function(event)
      field.observe('change', function(event)
      {
        if ($F('filters_area_id')) {
          $('filters_postcode').selectedIndex = 0;
        }
      });
    }
    
    if (field = $('filters_postcode')) {                         
      // $('filters_postcode').observe('change', function(event)
      field.observe('change', function(event)
      {
        if ($F('filters_postcode')) {
          $('filters_area_id').selectedIndex = 0;
        }
      });
    }
  },
  
  // event handler for mortgage settings in show its not exactly dry we should be able to do something like
  //  $$('.ajax_form').each( function(element) { update_target= element.readAttribute('href'); ... to add behaviour to all forms of a specific class
  // Which is easy in J query or lowpro
  //
  updateMortgageInShow: function(e)
  {
    if (e) {
      e.stop();
    }
    
    val = Mortgage.getValue('mortgage_setting_down_payment');
    $('mortgage_settings').request({
      method:     'post',
      parameters: { 'mortgage_setting[down_payment]':val },
      onSuccess:  function(transport) {
          $('mortgage').update(transport.responseText);
          YouBuy.formatMortgageFields();
          toggle_visibility("mortgage_settings");
        }
      });
  },
  
  
  updateMortgageInListings: function(e)
  {
    if (e) {
      e.stop();
    }
    
    val = Mortgage.getValue('mortgage_setting_down_payment');
    $('mortgage_settings').request({
      method:     'post',
      parameters: { 'mortgage_setting[down_payment]':val },
      onSuccess:  function(transport) {
          refresh_page();
        }
      });
  },
  
  
  formatMortgageFields: function()
  {
    val = Mortgage.getValue('mortgage_setting_down_payment');
    Mortgage.setValue('mortgage_setting_down_payment', val);         
    val = parseFloat($('mortgage_setting_term').value);
    $('mortgage_setting_term').value = val.toFixed(0);
    val = parseFloat($('mortgage_setting_interest_rate').value);
    $('mortgage_setting_interest_rate').value = val.toFixed(2);
  },
  
  
  observeOrderingButtons: function()
  {
    if ($('sort_by_price')) {
      $('sort_by_price').observe('click', function(e)
      { 
        if ($('sort_by_price').hasClassName('sort_ascending')) {
          $('y_finder_order').value = "pprice DESC";
        }
        else {
          $('y_finder_order').value = "pprice";
        }
        $('you_buy_search_form').submit();
      });
    };
    
    if ( $('sort_by_bedrooms')) {
      $('sort_by_bedrooms').observe('click', function(e)
      {
        if ($('sort_by_bedrooms').hasClassName('sort_ascending')) {
          $('y_finder_order').value = "pg5 DESC";
        }
        else {
          $('y_finder_order').value = "pg5";
        }
        $('you_buy_search_form').submit();
      });
    }; 
    
    if ( $('sort_by_title')) {
      $('sort_by_title').observe('click', function(e)
      {
        if ($('sort_by_title').hasClassName('sort_ascending')) {
          $('y_finder_order').value = "title DESC";
        }
        else {
          $('y_finder_order').value = "title";
        }
        $('you_buy_search_form').submit();
      });
    };
  }
};


function toggle_visibility(id)
{
  try {
    $(id).toggleClassName("hidden");
  }
  catch(e) {
    // alert('RJS error:\n\n' + e.toString()); // What idiot left this here in live code?
  }
}


function refresh_page()
{
  location.reload(true);
}
