function auto_form(form_type) {
  ensure_modal_link('Callback', form_url_for(form_type));      
  if (!has_seen_shadowbox()) {
    create_shadowbox();
    set_shadowbox_expiration();
  }
}

function auto_signup_form() {
  auto_form('signup');	
}

function auto_callback_form() {
  auto_form('callback');
}

// Merchandising  
  function choose_color(promotion) {
    return promotion.promo_color ? promotion.promo_color : valid_promo_colors.limon;
  }  
  
  function sailing_links() {    
    return Dom.getElementsBy(function (el) {
      return Dom.hasClass(el.parentNode, 'cruiseDates') && el.href.match(/packageId=(\d+)$/);
    }, 'A', Dom.get('cruiseSearchForm'));
  }
          
  function highlight(link, promo) {
    if (Dom.hasClass(link, 'promo') && !promo.overrrides) { return; }
    Dom.addClass(link, 'promo');
    Dom.addClass(link, promo.toggle_class);
    link.innerHTML = promo.marker + link.innerHTML;
    link.style.backgroundColor = choose_color(promo);
  }
  
  function display_legend(link, promotion) {
    if (!Dom.hasClass(link.parentNode.parentNode, promotion.toggle_class)) {
      Dom.addClass(link.parentNode.parentNode, promotion.toggle_class);                               
      Dom.getElementsByClassName('roomPrices', 'span', link.parentNode.parentNode, function (sp) { 
        var div = Dom.getFirstChildBy(link.parentNode.parentNode, function (el) {
          return el.tagName == 'DIV' && Dom.hasClass(el, 'availablePromos');
        });
        if (!div) {
          div = ce('div', {'style': 'clear: both;'});
          Dom.addClass(div, 'availablePromos');
          var hdg = ce('h4', {}, '<br/>Available Promotions:', div);                    
          link.parentNode.parentNode.appendChild(div);
        }                          	            
        var genel = promotion.content_generator();
        genel.style.background = choose_color(promotion);
        Dom.addClass(genel, promotion.toggle_class);
        Dom.addClass(genel, 'promo');            
        div.appendChild(genel);
		genel.innerHTML = promotion.marker + genel.innerHTML;
        div.innerHTML += '&nbsp;';
      }); 
    }
  }
  
  function merchandise(links, promo_index) {    
    for (var l = 0; l < links.length; l++) {  
      var current_link = links[l];      
      var sail_id = current_link.href.match(/packageId=(\d+)$/)[1];
      var applicable_promos = promo_index[sail_id];        
      if (!applicable_promos) { continue; }
      for (var x = 0; x < applicable_promos.length; x++) {
        highlight(current_link, applicable_promos[x]);
        display_legend(current_link, applicable_promos[x]);
      }
    }
  }
  
  function createPromoIndex(promos) {
    var idx = {};  
    for (var p = 0; p < promos.length; p++) {
      var current_promo = promos[p];    
      for (var i = 0; i < current_promo.sail_ids.length; i++) {
        var current_pkgid = current_promo.sail_ids[i];      
        if (!idx[current_pkgid]) {
          idx[current_pkgid] = [current_promo];
        } 
        else {
          idx[current_pkgid].push(current_promo);
        }      
      }    
    }
    return idx;
  }


  Evt.onDOMReady(function () {            
    // Merchandising
    var promotions = [

{
		name: 'Up-to 6-category upgrade free',
		marker: '&#8224;',
		overrides: true,
		toggle_class: 'Sun',
		sail_ids: [
],
		promo_color: valid_promo_colors.mamey,
		content_generator: function () {
	      return ce('span', {}, 'Up-to 6-category upgrade free');
	    }
   	}];
    
    try {
      if (ffpromo) { 
        promotions.push(ffpromo); 
      }
    } catch (e) {
      
    }  	
  	var promo_index = createPromoIndex(promotions);
      
    // HACK: Eliminate double submit of omni-present Cruise Search form  
    if (Dom.get('bookingSearch')) {
      Dom.get('bookingSearch').method = 'get';
    }    
	  
    // HACK: Make cruise chick open callback window
    if (document.location.href.match(/cruisesearch\/cruisesearch\.html/) ||
        document.location.href.match(/booking\/cruisedetails\.html/)) { 
      var el = Dom.get('cruiseConsultantSearching300');
      if (!el) {
        el = Dom.get('cruiseConsultantSearchingDetail300');
      }
      if (el) {
        Evt.on(el, 'click', open_callback_window);
      }    
    }         
  
    // HACK: Make cruise chick open callback window
    if (document.location.href.match(/\/cbooking\//)) {
      var callback_img = Dom.getFirstChildBy(Dom.get('contentright'), function(node) { 
        return Dom.hasClass(node, 'cruiseConsultantBeta');
      });
      Evt.on(callback_img, 'click', open_callback_window);
    }       
    
   
    function links_for_promo(promo_ids) {
      return YAHOO.util.Functional.select(Dom.getElementsByClassName('selectCruise', 'a', 'travelOptions'), function (item) {    
        var match = item.href.match(/packageId=(\d{7})&/);
        return YAHOO.util.Functional.contains(promo_ids, parseInt(match[1]));
      });
    }

    function add_promo_content_to(links, promotion) {
      YAHOO.util.Functional.each(links, function (link) {
        var row = link.parentNode.parentNode;
        var promo_cell = Dom.getLastChildBy(row, function (child) {return child.tagName == 'TD';});
        var promo_para = Dom.getLastChildBy(promo_cell, function (child) {return child.tagName == 'P';});    
        if (promo_para.innerHTML.match(/\S+/)) {
          promo_para.innerHTML += '<br />'; 
        }
        promo_para.appendChild(promotion.content_generator());    
      });
    }    	      
  	
  	if (document.location.href.match(/booking\/cruisedetails\.html/)) { 
  	  YAHOO.util.Functional.each(promotions, function (promotion) {
  	    var links = links_for_promo(promotion.sail_ids); 
  	    add_promo_content_to(links, promotion); 
  	  }); 
  	} 

  	if (document.location.href.match(/cruisesearch\/cruisesearch\.html/)) {   	  
  	  merchandise(sailing_links(), promo_index);
    }              

	//HACK: redefine the link for the main image on the distination 
	//landing page for Caribbean to open the callback popup
	if (document.location.href.match(/destination\/details.html\?destinationCode=CARIBBEAN/i)) {
	  Dom.getElementsBy(
	    function (el) {
		return el.href.match(/callback\?ref=CARIBBEAN/i);
	    }, 'A',	Dom.get('contentcenter'), 
	    function (el) {
      	Evt.on(el, 'click', function (e) {
	      open_callback_window(e);
      	});
	    }
	  );    
	}

  });
  
  Evt.on(window, 'load', function () {                    
    // HACK: Show different phone number for Friends and Family
    if (Dom.get('ffAgencyId')) {      
	    if (Dom.get('cruiseConsultantSearching300')) {
		    Dom.get('cruiseConsultantSearching300').src = '/csimages/942/712/FF_helpNumber_1.jpg';
	    }
	    
	    if (Dom.get('cruiseConsultantSearchingDetail300')) {
		    Dom.get('cruiseConsultantSearchingDetail300').src = '/csimages/942/712/FF_helpNumber_1.jpg';
	    }
	    
	    if (Dom.getElementsByClassName('cruiseConsultantBeta') && 0 < Dom.getElementsByClassName('cruiseConsultantBeta').length) {
		    Dom.getElementsByClassName('cruiseConsultantBeta')[0].src = '/csimages/815/590/FF_helpNumber_2.jpg';
	    }
    }
    
    // Temporary place for auto-modal until next deployment
    if (!document.location.href.match(/agent/i) && 
		(document.location.href.match(/Sky2008/i) ||
		document.location.href.match(/cruisesearch/i) ||
		document.location.href.match(/MexicanRivieraStar/i) ||
		document.location.href.match(/HawaiiPOA/i) ||
		document.location.href.match(/BahamasSky/i) ||
		document.location.href.match(/Promo/i) ||
        document.location.href.match(/Cruises/i) ||	
        document.location.href.match(/WhiteHotDeals/i) ||	
		document.location.href.match(/BestOffer/i) ||
		document.location.href.match(/RevBan/i) ||		
		((document.location.href.match(/WLCN/i)) && !(document.location.href.match(/CLIA_WLCN/i))))){
      auto_signup_form();
    } 
  });

