/**
 * Called when user clicked VIEW-button.
 * Builds AJAX request. 
 */ 
function setView()
{
  var saleId = (mStoredSale!=null)?mStoredSale.SaleId:-1;
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: {'__ia': 'trySetView', 'sale_id': saleId, 'no_cache':(new Date()).getTime()},
    onSuccess: function(transport)
    {
      if (transport.getHeader('header-error')!=null) { showErrorDiv(transport.getHeader('header-error')); return; }
      if (transport.getHeader('cooni-redirect')!=null) { location.href = transport.getHeader('cooni-redirect'); return; }
      
      showInfoDiv(transport.responseText);
    }
  });
}
function reallySetView(pSaleId)
{
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: {'__ia': 'setView', 'sale_id': pSaleId, 'no_cache':(new Date()).getTime()},
    onSuccess: function(transport)
    {
      if (transport.getHeader('header-error')!=null) showErrorDiv(transport.getHeader('header-error'));
      else updateNumberViews4User();  // view set successful => update views for user..
    }
  });
}




/**
 * Called when user clicked EXTEND-VIEW-button.
 * Builds AJAX request.
 */ 
function extendView()
{
  var saleId = (mStoredSale!=null)?mStoredSale.SaleId:-1;
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: {'__ia': 'tryExtendView', 'sale_id': saleId, 'no_cache':(new Date()).getTime()},
    onSuccess: function(transport)
    {
      if (transport.getHeader('header-error')!=null) showErrorDiv(transport.getHeader('header-error'));
      else showInfoDiv(transport.responseText);
    }
  });
}
function reallyExtendView(pSaleId)
{
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: {'__ia': 'extendView', 'sale_id': pSaleId, 'no_cache':(new Date()).getTime()},
    onSuccess: function(transport)
    {
      if (transport.getHeader('header-error')!=null) showErrorDiv(transport.getHeader('header-error'));
      else updateNumberViews4User();  // extend view successful => update views for user..
    }
  });
}




/**
 * Called when user clicked BIDDING-button.
 * Builds AJAX request.
 */ 
function bidding()
{
  var saleId = (mStoredSale!=null)?mStoredSale.SaleId:-1;
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: {'__ia': 'bidding', 'sale_id': saleId, 'no_cache':(new Date()).getTime()},
    onSuccess: function(transport)
    {
      if (transport.getHeader('header-error')!=null) showErrorDiv(transport.getHeader('header-error'));
      else showInfoDiv(transport.responseText);
    }
  });
}
function activateBiddding(pSaleId)
{
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: {'__ia': 'activateBidding', 'sale_id': pSaleId, 'no_cache':(new Date()).getTime()},
    onSuccess: function(transport)
    {
      if (transport.getHeader('header-error')!=null) showErrorDiv(transport.getHeader('header-error'));
      else
      {
        updateNumberViews4User();             // bid4Sale successful => update views for user..
        showInfoDiv(transport.responseText);  // allow first bidding in seperate overlay..
      }
    }
  });
}
function sendBid4Sale(pSaleId, pAmount, pAmountCent)
{
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: {'__ia': 'sendBid', 'sale_id': pSaleId, 'amount': pAmount, 'amountCent':pAmountCent,  'no_cache':(new Date()).getTime()},
    onSuccess: function(transport)
    {
      if (transport.getHeader('header-error')!=null) showErrorDiv(transport.getHeader('header-error'));
      else hideInfoDiv(); // hide Info-DIV in order to see the new highest bid of the user..
    }
  });
}







/**
 * Called when the user clicks the link "Ohne Anmeldung per Telefon"
 */ 
function showPhonebox()
{
  var saleId = (mStoredSale!=null)?mStoredSale.SaleId:-1;
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: {'__ia': 'showPhonebox', 'sale_id': saleId, 'no_cache':(new Date()).getTime()},
    onSuccess: function(transport)
    {
      if (transport.getHeader('header-error')!=null) { showErrorDiv(transport.getHeader('header-error')); return; }
      
      var response = transport.responseText;
      if (response && response.length>0) showPhoneCodeDiv(response);
    }
  });
}


/**
 * Called when shown view-account might have changed 
 * for user. 
 * Uses AJAX request. 
 */ 
function updateNumberViews4User()
{
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: {'__ia': 'getViews', 'no_cache':(new Date()).getTime()},
    onSuccess: function(transport)
    {
      var response = transport.responseText;
      if (response && response.length>0 && $("number_views")) $("number_views").update(response);
    }
  });
}
/**
 * Used to pull current number of views for the user in background
 */ 
function startPeriodicViewUpdater()
{
  new Ajax.PeriodicalUpdater('number_views', '/Index',
  {
    method:'get',
    parameters: {'__ia': 'getViews'},
    asynchronous: true,
    frequency: 300, // update every 5 minutes
    decay: 1        // use no decay
  });
}



/**
 * Called when user clicked BUY-button.
 * Builds AJAX request.
 */ 
function buyProduct()
{
  var saleId = (mStoredSale!=null)?mStoredSale.SaleId:-1;
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: {'__ia': 'tryBuySale', 'sale_id': saleId, 'no_cache':(new Date()).getTime()},
    onSuccess: function(transport)
    {
      if (transport.getHeader('header-error')!=null) showErrorDiv(transport.getHeader('header-error'));
      else showInfoDiv(transport.responseText);
    }
  });
}
function reallyBuyProduct(pSaleId)
{
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: {'__ia': 'buySale', 'sale_id': pSaleId, 'no_cache':(new Date()).getTime()},
    onSuccess: function(transport)
    {
      if (transport.getHeader('header-error')!=null) showErrorDiv(transport.getHeader('header-error'));
      else
      {
        showInfoDiv(transport.responseText);
        updateNumberViews4User();  // buy successful => update views for user..
      }
    }
  });
}




/**
 * Called when user clicked BUY-NOW-button.
 * Builds AJAX request.
 */ 
function buyNowProduct()
{
  var saleId = (mStoredSale!=null)?mStoredSale.SaleId:-1;
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: {'__ia': 'tryBuyNowSale', 'sale_id': saleId, 'no_cache':(new Date()).getTime()},
    onSuccess: function(transport)
    {
      if (transport.getHeader('header-error')!=null) showErrorDiv(transport.getHeader('header-error'));
      else showInfoDiv(transport.responseText);
    }
  });
}
function reallyBuyNowProduct(pSaleId)
{
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: {'__ia': 'buyNowSale', 'sale_id': pSaleId, 'no_cache':(new Date()).getTime()},
    onSuccess: function(transport)
    {
      if (transport.getHeader('header-error')!=null) showErrorDiv(transport.getHeader('header-error'));
      else showInfoDiv(transport.responseText);
    }
  });
}



/**
 * Called when user clicked VOTE-button for a product.
 * Builds AJAX request.
 */
function voteProduct(productId)
{
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: { '__ia': 'vote', 'product_id': productId, 'ajax': '1', no_cache:(new Date()).getTime() },
    onSuccess: function(transport)
    {
      var response = transport.responseText;
      if (response && response.length>0) showErrorDiv(response);
    }
  });
}



/**
 * Used to start the period AJAX Updater which updates the MoTT in the
 * background. 
 */ 
function startPeriodicMottUpdater()
{
  // get MoTT at once
  new Ajax.Request('/Index',
  {
      method:'get',
      parameters: {'__ia':'mott', 'tlc_id':mTLC, 'no_cache':(new Date()).getTime()},
      asynchronous: true,
      onSuccess: function(transport)
      {
        if (gLastKnownMott == transport.responseText) return;
        gLastKnownMott = transport.responseText;
        $('mott_text').update(transport.responseText);
      }
  });
  
  // start pulling MoTT every 5 minutes:
  new PeriodicalExecuter(function(pe) 
  {
      new Ajax.Request('/Index',
      {
        method:'get',
        parameters: {'__ia':'mott', 'tlc_id':mTLC, 'no_cache':(new Date()).getTime()},
        asynchronous: true,
        onSuccess: function(transport)
        {
          if (gLastKnownMott == transport.responseText) return;
          gLastKnownMott = transport.responseText;
          $('mott_text').update(transport.responseText);
        }
      });
  }, 300);
}



/**
 * Called when a certain product should be observed..
 */ 
function observeProduct(productId)
{
  new Ajax.Request('/Index',
  {
    method:'get',
    parameters: {'__ia': 'observe', 'product_id': productId},
    onSuccess: function(transport)
    {
      var response = transport.responseText;
      if (response && response.length>0) showErrorDiv(response);
      else
      {
        // product is now observed => change the respective row accordingly:
        $('product_detail_observation_link_'+productId).hide();
        $('product_detail_observation_text_'+productId).show();
      }
    }
  });
}



/**
 * Used to reload the header via AJAX
 */ 
function updateHeaderAJAX()
{
  new Ajax.Updater('header_container', '/Index',
  {
    method:'get',
    parameters: {'__ia': 'header', 'no_cache':(new Date()).getTime()},
    asynchronous: true
  });
}



/**
 * Used to reload the billing and send address in my-cooni:
 */ 
function updateMyAddressesAJAX()
{
  new Ajax.Updater('my_address_send', '/Index',
  {
    method:'get',
    parameters: {'__ia': 'getSendAddress', 'no_cache':(new Date()).getTime()},
    asynchronous: true
  });
  
  new Ajax.Updater('my_address_billing', '/Index',
  {
    method:'get',
    parameters: {'__ia': 'getBillingAddress', 'no_cache':(new Date()).getTime()},
    asynchronous: true
  });
}

/**
 * Called by all my-fragments when errorJSON-String is provided
 */  
function setFeedback(errorString)
{
  var errorHash = $H(errorString.evalJSON());
  errorHash.each(function(pair)
  {
    $(pair.key).update(pair.value);
  });
}
/**
 * Called by all my-fragments before setting the error feedbacks
 */ 
function clearFeedback(idArray)
{
  idArray.each(function(s, index)
  {
    $(s).update("");
  });
}




/**
 * TLC Menu
 */
 // 5 is current max-number of top-menus that can be displayed ...
var mTLCMenuNumber = 5;
var mTLCMenuMouseIsOver = new Array(mTLCMenuNumber);
for (var i=0; i<mTLCMenuNumber; i++) mTLCMenuMouseIsOver[i] = false;
var mNumAdditionalTLCs = new Array(mTLCMenuNumber);

function TLCMenuAppear(groupId)
{
  var pos = $("header_tab_"+groupId).cumulativeOffset();
  if (groupId==1) pos.left-=196;
  $("header_tab_menu_"+groupId).style.left = (pos.left)+"px";
  $("header_tab_menu_"+groupId).style.top = (pos.top+30)+"px";
  
  $("header_tab_menu_"+groupId).appear( {duration: 0.5} );
  new Effect.Morph("header_tab_menu_"+groupId, {
    style: 'height:'+(mNumAdditionalTLCs[groupId]*23-8)+'px;',
    duration: 0.5
  });

  mTLCMenuMouseIsOver[groupId] = true;  // to prevent fading menu in IE if mouse if not moved during apparation of menu..  
  //window.setTimeout("_TLCTryHideMenu("+groupId+")", 1000);
  _TLCTryHideAllMenus();
}
function TLCMenuOver(groupId)
{
  for (var i=0; i<mTLCMenuNumber; i++) mTLCMenuMouseIsOver[i] = false;
  mTLCMenuMouseIsOver[groupId] = true;
}
function TLCMenuOut(groupId)
{
  mTLCMenuMouseIsOver[groupId] = false;
}
function _TLCTryHideAllMenus()
{
  var tryAgain = false;
  for (var i=0; i<mTLCMenuNumber; i++)
  {
    if (!mTLCMenuMouseIsOver[i]) _TLCMenuFade(i);
    else tryAgain = true;
  }
  if (tryAgain) window.setTimeout("_TLCTryHideAllMenus()", 500); // try again after half a second..
}
//function _TLCTryHideMenu(groupId)
//{
//  if (mTLCMenuMouseIsOver[groupId]) window.setTimeout("_TLCTryHideMenu("+groupId+")", 500); // try again after half a second..
//  else _TLCMenuFade(groupId);
//}
function _TLCMenuFade(groupId)
{
  $("header_tab_menu_"+groupId).fade( {duration: 0.5} );
  new Effect.Morph("header_tab_menu_"+groupId, {
    style: 'height:0px;',
    duration: 0.5
  });
}
