 // 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', {}, '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);
        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;
  }
  
function createFamilyFriendsPromotionFor() {
	return { name: 'Friends and Family',
	  sail_ids: arguments,
	  toggle_class: 'friendsfamily',
	  category_message: 'Friends and Family',
	  overrides: true,
	  disclaimer_class: '',
	  marker: '*',
	  promo_color: valid_promo_colors.mamey,
	  content_generator: function () {
	    return ce('span', {}, this.marker + ' Friends & Family Eligible');
	  	}
	  };
}
Evt.onDOMReady(function () {     
    // Merchandising
//  SAMPLE
//    var promotions = [{
//      name: 'Free Upgrades and Onboard Credit',
//      marker: '*',
//      overrides: false,
//      toggle_class: 'freeupgrades',
//      sail_ids: [
//    1634212  
//      ],
//      content_generator: function () {
//        return ce('span', {}, 'Book Today! Free upgrades & onboard credit');
//      },
//      promo_color: valid_promo_colors.aguacate
//    }];
//    try {
//      if (ffpromo) { 
//        promotions.push(ffpromo); 
//      }
//    } catch (e) {
//      
//    }  	
    var promotions = [];

  	var promo_index = createPromoIndex(promotions);
     
    var el = Dom.get('cruise-consultant-image');
    if (el) {
        Evt.on(el, 'click', open_callback_window);
    }
    
    function links_for_promo(promo_ids) {
      return Fn.select(Dom.getElementsByClassName('selectCruise', 'a', 'travelOptions'), function (item) {    
        var match = item.href.match(/packageId=(\d{7})&/);
        return Fn.contains(promo_ids, parseInt(match[1]));
      });
    }

    function add_promo_content_to(links, promotion) {
      Fn.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/)) { 
  	  Fn.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);
    }         
});