// js main file
var DomReadyFuncs = new Object;
DomReadyFuncs.nop = function(){ };
var baseUrl = '';
var baseSiteUrl = '';

function onDocumentReady()
{
  $.each( DomReadyFuncs, function( i, val )
  {
    val();
  });
}

$( document ).ready( onDocumentReady );

function handleAjaxError( xhr, text, e )
{
  alert( 'An unexpected error occured while handling your request! Please try again later.' );
  $( "form input[type=submit]" ).removeAttr( "disabled" );
}

function defaultSuccessHandler( data, text )
{
  if( data.redirect )
  {
    window.location.href = data.redirect;
    return;
  }
  else if( data.reload )
  {
    if( window.location.reload ) window.location.reload(true);
    else window.history.go(0); //window.location.href = window.location.href.replace( /#.*/g, "" );
    return;
  }
  else
  {
    if( data.alert )
    {
      alert( 'hey' + data.alert );
    }
    if( data.errors )
    {
      var newhtml = '';
      /*$.each( data.errors, function( i, val )
             {
               newhtml += '<li>' + val + '</li>';
             });*/
      newhtml +=  data.errors;
      $( '#form-errors' ).html( newhtml );
      $( '#form-errors-wrapper' ).fadeOut("fast", function() { $( '#form-errors-wrapper' ).fadeIn("slow") } );
      window.scroll( 0,0 );
    }
    else
    {
      $( '#form-errors-wrapper' ).css( "display", "none" );
    }
    
    if( data.call )
    {
      eval( data.call + '(data.callParams)' );
    }
    
    if( data.innerReplaces )
    {
      var rep;
      $.each( data.innerReplaces, function( i, val )
      {
        rep = val.takeInner ? $( val.value ).html() : val.value;
        $( val.selector ).html( rep );
      });
    }
    
    if( data.eval )
    {
      eval( data.eval );
    }
  }
  
  $( "form input[type=submit]" ).removeAttr( "disabled" );
}


function doAjax( url, data, pSucessHandler, method )
{
  $( "form input[type=submit]" ).attr( "disabled", "disabled" );
  
  $.ajax(
    {
      type: method || "POST",
      dataType: "json",
      url: url,
      data: data,
      success: pSucessHandler || defaultSuccessHandler,
      error: handleAjaxError
    }
  );
}

function submitToAjax( form )
{
  var url = form.attributes.action.value;
  var data = $( form ).serialize();
  
  doAjax( url, data );
}

DomReadyFuncs.setFormsSubmitHandler = function()
{
  $( "form[action*=actions/]" ).bind("submit", function(e)
								 {
								   e.returnValue = false;
								   e.cancelable = true;
								   
								   return false;
								 }
								 );
  
  $( "form.input-form[action*=actions/] input[type=submit]" ).bind("click", function(e)
								 {
								   e.returnValue = false;
								   e.cancelable = true;
                                   var src = e.target != undefined ? e.target : e.srcElement;
								   var form = src.form;
								   submitToAjax( form );
								   
                                   return false;
								 }
								 );
}

DomReadyFuncs.setAlternateListStyles = function()
{
  $( '.alternate-list' ).children( ':odd' ).addClass( 'odd-item' );
}


function sendAddSearchNotification()
{
  var form = $( 'form[name=browse_housing_listings]' ).get(0);
  if( !form ) return false;
  
  var url = form.attributes.action.value.replace( /actions\/.*/, 'actions/process_trigger_add_search_notification' );
  var data = $( form ).serialize();
  
  doAjax( url, data );
  return false;
}

function goTo( url )
{
  window.location.href = url;
}

function sendSwitchPreferedTab()
{
  if( !confirm( "Are you sure you want to make this tab your preferred?" ) ) return;
  doAjax( baseSiteUrl + "/actions/process_switch_preferred_tab" );
}

function sendDeactivateListing( id )
{
  if( !confirm( "Are you sure you want to deactivate this post?" ) ) return;
  doAjax( baseSiteUrl + "/actions/process_deactivate_listing", "id=" + id );
}

function sendRemoveListingImage( id )
{
  if( !confirm( "Are you sure you want to remove this picture?" ) ) return;
  doAjax( baseSiteUrl + "/actions/process_remove_listing_image", "id=" + id );
}

function sendActivateListing( id )
{
  if( !confirm( "Are you sure you want to activate this post?" ) ) return;
  doAjax( baseSiteUrl + "/actions/process_deactivate_listing", "id=" + id );
}

function sendDeactivateSearchNotification( id )
{
  if( !confirm( "Are you sure you want to turn off this notification?" ) ) return;
  doAjax( baseSiteUrl + "/actions/process_deactivate_search_notification", "id=" + id );
}

function sendActivateSearchNotification( id )
{
  if( !confirm( "Are you sure you want to turn on this notification?" ) ) return;
  doAjax( baseSiteUrl + "/actions/process_activate_search_notification", "id=" + id );
}

function sendStarListing( id )
{
  if( !confirm( "Are you sure you want to add this post to your Favourites?" ) ) return;
  doAjax( baseSiteUrl + "/actions/process_star_listing", "id=" + id );
}

function sendUnstarListing( id )
{
  if( !confirm( "Are you sure you want to remove this post from your Favourites?" ) ) return;
  doAjax( baseSiteUrl + "/actions/process_unstar_listing", "id=" + id );
}

function ajaxPage( link, holder, url, callback )
{
  ajaxLoad( holder, url, {}, callback );
}

function ajaxLoad( holder, url, post, callback )
{
  $( holder ).load( url, post, callback );
}

function loadBrowseResults()
{
  $( "form input[type=submit]" ).attr( "disabled", "disabled" );
  
  var data = $( 'form#browse_housing_listingsForm' ).serializeArray();
  
  var url = $( 'form#browse_housing_listingsForm' ).attr( 'action' );
  if( data )
  {
    ajaxLoad( 'div#browse-posts', url, data, function(){ DomReadyFuncs.setAlternateListStyles(); DomReadyFuncs.lightBoxPostImages(); $( "form input[type=submit]" ).removeAttr( "disabled" ); } );
  }
}

function loadBrowseTenantRatingsResult()
{
  $( "form input[type=submit]" ).attr( "disabled", "disabled" );
  
  var data = $( 'form#browse_tenant_ratingsForm' ).serializeArray();
  
  var url = $( 'form#browse_tenant_ratingsForm' ).attr( 'action' );
  if( data )
  {
    ajaxLoad( 'div#browse-tenants', url, data, tenantRatingsLoadPageCallback );
  }
}

DomReadyFuncs.lightBoxPostImages = function()
{
  var blocks = $( '.post-pictures' );
  
  $.each( blocks, function( i, val )
  {
    $( val ).children('img').lightBox();
  });
}

function listingsLoadPageCallback()
{
  DomReadyFuncs.setAlternateListStyles();
  DomReadyFuncs.lightBoxPostImages();
}

function tenantRatingsLoadPageCallback(text, status, xhr)
{
  if( status != 'success' )
  {
    handleAjaxError(xhr, text, null);
  }
  else
  {
    DomReadyFuncs.setAlternateListStyles();
    $( "form input[type=submit]" ).removeAttr( "disabled" );
  }
}

function expandText(linkObj)
{
  $(linkObj).addClass('hidden');
  $(linkObj).next('span:eq(0)').removeClass('hidden');
  $(linkObj).nextAll('a:eq(0)').removeClass('hidden');
}

function contractText(linkObj)
{
  $(linkObj).addClass('hidden');
  $(linkObj).prev('span:eq(0)').addClass('hidden');
  $(linkObj).prevAll('a:eq(0)').removeClass('hidden');
}

