/* -- Variables --------------------- */	
// Ad Animation Rate
var AD_ANIMATION_RATE = "slow";

// Ad Animation Rate
var AD_WRAPPER_ID = "#wrapperAds";


/* -- Variables --------------------- */	
// Ad Is Open
var ad_is_open = false;

// Ad Is Animating
var ad_is_animating = false;

// Ad Current Id
var ad_current_id = "";

// Ad Data List
var ad_data = {};


/* -- Ready --------------------- */	
// JQuery Ready
jQuery(document).ready(setupPage);


/* -- Setup --------------------- */
// Setup Page when Ready
function setupPage() {
  // Nothing!
}


/* -- Ad Animation Methods --------------------- */
// Show Ad
function ad_show(id, asset, url) {
  // Set Ad is Animating Flag
  ad_is_animating = true;
  
  // Store id
  ad_current_id = id;
  
  // Store Data locally
  if (ad_data[id] == undefined) ad_data[id] = {id:id, asset:asset, url:url};
  
  // Show new Ad
  if (ad_is_open) {
    // Change Ad
    ad_change(id);
  } else {
    // Ad is now open
    ad_is_open = true;
    
    // Create Add
    ad_create(id);
    
    // Open Ad
    $(AD_WRAPPER_ID).slideDown(AD_ANIMATION_RATE, ad_animation_in_complete);
  }
}

// Change Ad
function ad_change(id) {
  // Get Visible Image
  var ad_visible_image = $(".ad_container:visible img").attr("src");
  
  // Stop function if its the SAME image
  if (ad_data[ad_current_id]["asset"] == ad_visible_image) return;
  
  // Fade & Hide Old Ad
  $(".ad_container:visible").fadeOut(AD_ANIMATION_RATE);
  
  // Show New Ad
  if ($(ad_get_id(id, true)).length == 0) {
    // Create Add
    ad_create(id, true);
  }
  
  // Fade In Ad
  $(ad_get_id(id, true)).fadeIn(AD_ANIMATION_RATE, ad_animation_in_complete)
}

// Hide Ad
function ad_hide() {
  // Close Ad
  $(AD_WRAPPER_ID).slideUp(AD_ANIMATION_RATE, ad_animation_out_complete); 
}

// Animation In Complete
function ad_animation_in_complete() {
  // Turn Animating Flag Off
  ad_is_animating = false;
}

// Animation Out Complete
function ad_animation_out_complete() {
  // Turn Animating Flag Off
  ad_is_animating = false;
  
  // Ad is not open
  ad_is_open = false;
  
  // Empty Ads
  $(AD_WRAPPER_ID).empty();
}


/* -- Ad Manipulation Methods --------------------- */
// Create Ad
function ad_create(id, hideContainer) {
  // Create Ad Container
  var ad_container = "<div id='"+ad_get_id(id, false)+"' class='ad_container ad_loading'>";
  ad_container    += "</div>";
  
  // Add To Wrapper
  $(AD_WRAPPER_ID).append(ad_container);
  
  // Create
  var ad_image = new Image();
  
  // Load New Ad
  $(ad_image).load(ad_load)
             .error(ad_error)
             .attr ('src',    ad_get_image(id))
             .attr ('width',  728)
             .attr ('height', 90)             
             .attr ('id',     id);
}

// Load Image
function ad_load() {
  // Ad ID
  var ad_id = $(this).attr("id");
  
  // Auto Hide Image
  $(this).hide();
    
  // Remove Loading & Add Image To HTML
  $(ad_get_id(ad_id, true)).removeClass('ad_loading')
                           .append(this);
  
  // Wrap Link around image
  $(this).wrap("<a href='"+ad_get_url(ad_id)+"' target='_blank' />");
  
  // Show Image
  $(this).fadeIn();
}

// Ad Load Error
function ad_error() {
  // Fail Message
  alert ("Doh!");
}

// Get Ad Id
function ad_get_id(id, withHash) {
  var output = "ad_" + id;
  return (withHash == true) ? "#" + output : output;
}

// Get Ad Image
function ad_get_image(id) {
  return ad_data[id]["asset"];
}

// Get Ad URL
function ad_get_url(id) {
  return ad_data[id]["url"];
}
