// Javascript to run globally over every page of the application.
function initSportgenic(){
      
  // Use jQuery via jQuery(...)
  jQuery(document).ready(function(){
    
    // Login | Register panel in header
    // Expand Panel
  	$j("#open").click(function(){
  		$j("div#login-panel").slideDown("slow");
  	});	

  	// Collapse Panel
  	$j("#close").click(function(){
  		$j("div#login-panel").slideUp("slow");	
  	});		

  	// Switch buttons from "Log In | Register" to "Close Panel" on click
  	$j("#toggle a").click(function () {
  		$j("#toggle a").toggle();
  	});
    
  });   
  
  initMediaPropertiesSidebar();

  // Cart/campaign widget
  var campaignSelect = $('campaign_select_id');
  if(campaignSelect){
    campaignSelect.onchange = function(){
      new Ajax.Request('/cart/set_current/' + campaignSelect.value, {
        asynchronous: true,
        evalScripts: false,
        onSuccess: function(transport){
          $('cart-items-count').update(transport.responseText);
					if (controllerName == "cart") {
						document.location = "/cart/edit/" + campaignSelect.value;
					} else {
						document.location.reload(true)
					}
        }
      })
    }

    $('view-campaign-link').onclick = function(){
      document.location = '/cart/edit/' + campaignSelect.value;
      return false;
    }
  }
}

function roundCorners(){
  // Use jquery rounded corners for IE only (todo FF2)
  if (isIE()) {
    // Layout Style - round corners

  	jQuery('div.sidebar-box').corner({
  	  tl: { radius: 8 },
  	  tr: { radius: 8 },
  	  bl: { radius: 8 },
  	  br: { radius: 8 },
  	  antiAlias: true,
  	  autoPad: true,
  	  validTags: ["div"] });

    jQuery('div.content-box-1').corner({
  	  tl: false,
  	  tr: { radius: 20 },
  	  bl: false,
  	  br: false,
  	  antiAlias: true,
  	  autoPad: false,
  	  validTags: ["div"] });

    jQuery('div.content-box-2').corner({
  	  tl: false,
  	  tr: { radius: 20 },
  	  bl: false,
  	  br: false,
  	  antiAlias: true,
  	  autoPad: false,
  	  validTags: ["div"] });

  	jQuery('div#upcoming-events').corner({
  	  tl: { radius: 8 },
  	  tr: { radius: 8 },
  	  bl: { radius: 8 },
  	  br: { radius: 8 },
  	  antiAlias: true,
  	  autoPad: true,
  	  validTags: ["div"] });

    jQuery('div.builder_box').corner({
  	  tl: { radius: 8 },
  	  tr: { radius: 8 },
  	  bl: { radius: 8 },
  	  br: { radius: 8 },
  	  antiAlias: true,
  	  autoPad: true,
  	  validTags: ["div"] });

    jQuery('div.brand_media_type').corner({
  	  tl: { radius: 8 },
  	  tr: false,
  	  bl: false,
  	  br: false,
  	  antiAlias: true,
  	  autoPad: false,
  	  validTags: ["div"] });

  	jQuery('div#brand_setup').corner();
  	jQuery('div.media_type_icon').corner();
  }
}

function isIE(){
  var isIE=navigator.userAgent.toLowerCase().indexOf("msie")>-1;
  if (isIE){
    return true;
  } else {
    return false;
  }
}

// For any of the search forms, including the one on the main page.
function initSearchDateSelects(){
  $j(document).ready(function(){
    $j('#search_start_date').datepicker();
    $j('#search_end_date').datepicker();
  });
}

// Toggling for things like search filters and brand media types.
function initSidebarToggles(){
  var filterToggles = $$('div.filter-toggle');
  filterToggles.each(function(tog){
    var noExpand = 0;
    var link = tog.down('div.link a');
    if(link){
      tog.down('div.link a').onclick = function(){
        noExpand = 1;
      };
    }
    tog.onclick = function(){
      if(noExpand == 0){
        filterToggle(tog);
        filterToggles.each(function(filterTog){
          if (filterTog.up('li')) {
           document.cookie = filterTog.up('li').id + '=' + filterTog.hasClassName('on');
          }
        });
      }
    };
  });

  function filterToggle(div){
    if(div.hasClassName('on')){
      div.addClassName('off');
      div.removeClassName('on');
      div.siblings().last().hide();
      if($('media_properties_sidebar')){
        div.up().addClassName('off');
      }
    }else{
      div.addClassName('on');
      div.removeClassName('off');
      div.siblings().last().show();
      filterToggles.each(function(tog){
        if (div.up('li')) {
          var divID = div.up('li').id;
        } else {
          var divID = null;
        }
        if (tog.up('li')) {
          var togID = tog.up('li').id;
        } else {
          var togID = null;
        }
        if(divID != togID){
          tog.addClassName('off');
          tog.removeClassName('on');
          tog.siblings().last().hide();
        }
      });
      if($('media_properties_sidebar')){
        div.up().removeClassName('off');
      }
    }
  }
}

function initActiveFilterRemoves(){
  $$('a.active-filter-remove').each(function(link){
    link.onclick = function(){
      var span = link.up('span');
      var checkableType = span.id.split('_').first();
      var checkableID = span.id.split('_').last();
      $(checkableType + '_check_' + checkableID).checked = false;
      span.remove();
    }
  });
  $$('a.active-date-remove').each(function(link){
    link.onclick = function(){
      var span = link.up('span');
      var dateFieldID = span.id.split('_').first();
      $('search_' + dateFieldID + '_date').value = "";
      span.hide();
    }
  });
  [$$('a.active-filter-brand-remove'),
   $$('a.active-sidebar-filter-brand-remove')
  ].flatten().each(function(link){
    link.onclick = function(){
      var checkableID = link.up('span').id.split('_').last();
      $('brand_id_' + checkableID).remove(); // removes hidden field
      $('brand_id_active_' + checkableID).remove();
      $('brand_id_sidebar_active_' + checkableID).remove();
    }
  });
}

function initMediaPropertiesSidebar(){
  if($('media_properties_sidebar')){
    initSidebarToggles();
  }
}

// Sets up the search filter sidebar on main.index and searches controller
function initSearchSidebar(){
  initSidebarToggles();
  initActiveFilterRemoves();

  function toggleActiveSearchFilter(check){
    var checkableType = check.id.split('_').first();
    var checkableID = check.id.split('_').last();
    if(check.checked == true){
      $(check.up('li.head').id + '-active').childElements().last().insert({
        bottom : '<span class="active-filter-name" id="'
                 + checkableType + '_active_' + checkableID
                 + '">'
                 + check.adjacent('span')[0].innerHTML 
                 + ' <a href="#" class="active-filter-remove"></a></span> '
      });
      initActiveFilterRemoves();
    }else{
      var activeName = $(checkableType + '_active_' + checkableID);
      if(activeName){
        activeName.remove();
      }
    }
  }

  $$('div.checks input').each(function(check){
    // This is divided into two functions since IE has trouble with onchange
    if(isIE()){
      check.onclick = function(){ toggleActiveSearchFilter(check); }
    }else{
      check.onchange = function(){ toggleActiveSearchFilter(check); }
    }
  });

  // Enable/disable filters based on media types.
  var checkedMediaTypeIDs = [];
  $$('div#media-type-checks input').each(function(inp){
    if(inp.checked == true){
      checkedMediaTypeIDs.splice(0,0,inp.value);
    }
    inp.onclick = function(){
      if(isIE()){
        toggleActiveSearchFilter(inp);
      }
      if(inp.checked == true){
        checkedMediaTypeIDs.splice(0,0,inp.value);
      }else{
        checkedMediaTypeIDs.splice(checkedMediaTypeIDs.indexOf(inp.value),1);
      }
      // Perhaps add @page_script array to work with here, depending on
      // media types and what they need.
      // A good way would be to include the value as a variable, such as
      // magazineID = 3 or such, so we can adjust that in the controller
      // if necessary and not have to futz with js everytime something changes.
      // These follow "#{media_type.short_name.gsub(" ", "_").camelize(:lower)}ID"
      var bannerAdID = "1";
      var emailID = "4";

      if([bannerAdID, emailID].any(function(id){return checkedMediaTypeIDs.include(id)})){
        $('digital-ad-size').show();
      }else{
        $$('div#digital-ad-size-checks input').each(function(chk){
          if(chk.checked == true){
            $('digitaladsize_active_' + chk.value).remove();
            chk.checked = false;
          }
        });
        $('digital-ad-size').hide();
      }
    }
  });

  // Submits a saved search and all the parameters from the search filters
  var saveSearchForm = $('save-search');
  if(saveSearchForm){
    var saveSearchLink = $('save-searches-link');
    if (saveSearchLink) {
      saveSearchLink.onclick = function(){
        saveSearchLink.hide();
        $('saved-searches').show();
        return false;
      }
    }
  }

  initSearchDateSelects();

  var searchStartDate = $('search_start_date');
  var searchEndDate = $('search_end_date');
  var startDateActive = $('start_date_active');
  var endDateActive = $('end_date_active');
  
  if (searchStartDate) {
    searchStartDate.onchange = function(){
      startDateActive.update(searchStartDate.value + ' <a href="#" class="active-date-remove"></a></span>');
      startDateActive.show();
      initActiveFilterRemoves();
    }
  }
  if (searchEndDate) {
    searchEndDate.onchange = function(){
      endDateActive.update('&ndash; ' + searchEndDate.value + ' <a href="#" class="active-date-remove"></a></span>');
      endDateActive.show();
      initActiveFilterRemoves();
    }
  }

  $$('img.channel-info').each(function(img){
    img.onclick = function(){
      var channelID = img.id.split('_').last();
      var bubble = $('bubble_' + channelID);
      bubble.update(bubble.innerHTML.stripTags().gsub('edit', '').gsub('[\[\]]', ''));
      bubble.show();
      bubble.onmouseout = function(){
        bubble.hide();
      }
    }
  });

  // Media Property pulldown
  var mediaProperty = $('media_property');
  if(mediaProperty){
    var media_property_auto_completer = 
      new Ajax.Autocompleter(
        'media_property', 
        'media_property_auto_complete', 
        '/searches/auto_complete_for_media_property', {
          minChars: 2,
          afterUpdateElement: function(){
            var mediaPropertyValue = mediaProperty.value;
            new Ajax.Request('/searches/brand_complete?name=' + mediaPropertyValue, {
              asynchronous: true,
              evalScripts: false,
              onLoading: function(){
                mediaProperty.value = '';
              },
              onSuccess: function(transport){
                var brandID = transport.responseText;
                $('media-properties-active').childElements().last().insert({
                  bottom : '<span class="active-filter-name" id="brand_id_active_' + brandID + '">'
                           + mediaPropertyValue 
                           + ' <a href="#" class="active-filter-brand-remove"></a></span> '
                });

                inp = '<input id="brand_id_' + brandID
                + '" name="brand_ids[]" type="hidden" value="'
                + brandID + '" />'
                + '<span class="sidebar-media-property" id="brand_id_sidebar_active_' + brandID + '">'
                + '<a href="#" class="active-sidebar-filter-brand-remove"></a> '
                + mediaPropertyValue
                + '<br /></span>';
                mediaProperty.up('div').insert({ bottom: inp });
              },
              onComplete: function(){
                initActiveFilterRemoves();
              }
            });
          }
        }
      );
  }
  
  // refine search button in main index screen
  var refineSearch = $('refine-search');
  var sidebarSearch = $('sidebar-search-button');
  if(refineSearch){
    refineSearch.onclick = function(){
      $('filter-search').submit();
      return false;
    }
  }
  if(sidebarSearch){
    sidebarSearch.onclick = function(){
      $('filter-search').submit();
      return false;
    }
  }
}

function addToCartLinks(){
  $$('a.add-to-cart').each(function(link){
    link.onclick = function(){
      new Ajax.Request(link.getAttribute('url'), {
        asynchronous: true,
        evalScripts: true,
        onSuccess: function(transport){
          link.replace('<span>added</span>');
          $('cart-items-count').update(transport.responseText);
        }
      });
      return false;
    }
  });
}

function addToCartForm(){
	$('add_to_cart').value = 1;
	link = $('add-to-cart-link');
	link.replace('<span class="round added"><span>Added</span></span>');
	updateCartItem('contents-form');
	return false;
}

function changeMakeOfferButtons(disp){
  var makeOfferLink = $('make-offer-link');
  var makeOfferSidebarLink = $('make-offer-sidebar-link');
	if (!makeOfferLink || !makeOfferSidebarLink)
		return;
  if(disp == true){
    makeOfferLink.show();
    if(makeOfferSidebarLink){
      makeOfferSidebarLink.show();
    }
  }else{
    makeOfferLink.hide();
    if(makeOfferSidebarLink){
      makeOfferSidebarLink.hide();
    }
  }
}

function cartItemQuantityInit(){
  $$('select.dropdown-quantity').each(function(sel){
    sel.onchange = function(){
      updateCartItem($j(this).parents('form').attr('id'));
    }
  });
}

function updateCartItem(form_id){
  var form = $(form_id);
  new Ajax.Request(form.action, {
    asynchronous: true, 
    evalScripts: true, 
    parameters: Form.serialize(form),
    onSuccess: function(transport){
      var cartItem = transport.responseText.evalJSON();
			var suffix = (cartItem.itemID ? '-'+cartItem.itemID : "");
      $('cart-item-purchase-price' + suffix).update(cartItem.price);
			cart_items_count_elem = $('cart-items-count')
			cart_items_count_elem && cart_items_count_elem.update(cartItem.cart_size);
      if(controllerName == 'cart'){
				$('cart-item-li' + suffix).removeClassName('alert');
				$('grand-total-purchase-price').update(cartItem.cart_total); 
        if($('order-summary')){
          $('cart-sidebar-cart-total').update(cartItem.cart_total);
        }
        changeMakeOfferButtons(cartItem.make_an_offer_available);
				showMaxMessage(cartItem.show_max_message);
      }
      $('quantity' + suffix).value = cartItem.quantity;
      $('min-quantity' + suffix).update(cartItem.minQuantity);
      $('max-quantity' + suffix).update(cartItem.maxQuantity);
    }
  });
  return false;
}

function showMaxMessage(show) {
	$('max_message')[show ? 'show' : 'hide']();
	$j('#checkout-form button').attr("disabled", show)
}

// used by product and inventory builders

function builderTabs(){
  var tabs = $$('ul#bordered_tabs li');
	tabs.each(function(li){
		li.onclick = function(){
		  $('next_builder_action').value = li.innerHTML.strip().stripTags().toLowerCase().gsub(" ","_");
		  $('builder_form').submit();
		}
	});
}

function showFileUpload(){
  var uploads = $$('p.snapshots');
	uploads.each(function(p){
    p.show();
	});
}

// used for form validation

function validateString(field, msg, min, max) {
  if (!min) { min = 1 }
  if (!max) { max = 255 }
  if (!field.value || field.value.length < min || field.value.max > max) {
    alert(msg);
    field.focus();
    return false;
  }
  return true;
}

// used by products/packages builder

function addAllSportsToggle() {
  $$(".target_segment_sports").each(function(i){
    i.onclick = function(){   
      if (i.id == 'sport_all_sports') {
        $$(".target_segment_sports").each(function(i){
          i.checked = false;
        });
        $('sport_all_sports').checked = true;
      } else {
        $('sport_all_sports').checked = false;
      }
		}
  });
}

// Busy indicator
Ajax.Responders.register({
  onCreate: function() {
    if($('busy') && Ajax.activeRequestCount>0)
      Effect.Appear('busy',{duration:0.5,queue:'end'});
  },
  onComplete: function() {
    if($('busy') && Ajax.activeRequestCount==0)
      Effect.Fade('busy',{duration:0.5,queue:'end'});
  }
});

function datePickerInit() {
  $j("div.cart-item-datepicker").each(function() {
    
    // Determine if cart div has camaign id ext. Used when multiple carts are found on page
    var css_id_ext = '';
    if (this.id != '') css_id_ext = '-' + this.id;
    
    var startDateDisplay = $j('#start-date-display' + css_id_ext);
    var endDateDisplay = $j('#end-date-display' + css_id_ext);
    var startDate = $j('#start-date' + css_id_ext);
    var endDate = $j('#end-date' + css_id_ext);
    
    var minPurchaseDateString = $j('#min-purchase-date' + css_id_ext);
    var minYear = minPurchaseDateString.val().substr(0,4);
    var minMonth = parseInt(minPurchaseDateString.val().substr(5,2)) - 1;
    var minDay = minPurchaseDateString.val().substr(8,2);
    var minPurchaseDate = new Date(minYear,minMonth,minDay);
    
    // Set display field dates
    startDateDisplay.val(startDate.val().substr(5,2) +'/'+ startDate.val().substr(8,2) +'/'+ startDate.val().substr(2,2));
    endDateDisplay.val(endDate.val().substr(5,2) +'/'+ endDate.val().substr(8,2) +'/'+ endDate.val().substr(2,2));
        
    //Create start date picker
    startDateDisplay.datepicker({
      onSelect: function(dateText, inst) {
        validatePurchaseDates(css_id_ext);
        updateCartItem($j(this).parents('form').attr('id'));
       },
      minDate: minPurchaseDate,
      constrainInput: true,
      prevText: '',
      dateFormat: 'mm/dd/y',
      altField: '#start-date' + css_id_ext,
      altFormat: 'yy-mm-dd'
    });
    
    //Create end date picker
    endDateDisplay.datepicker({
      onSelect: function(dateText, inst) {
        validatePurchaseDates(css_id_ext);
        updateCartItem($j(this).parents('form').attr('id'));
       },
      minDate: minPurchaseDate,
      constrainInput: true,
      prevText: '',
      dateFormat: 'mm/dd/y',
      altField: '#end-date' + css_id_ext,
      altFormat: 'yy-mm-dd'
    });
    
   });
    
}

// Validate datepicker start and end dates
function validatePurchaseDates(css_id_ext) {
  var currentStartDateInput = $j('#start-date-display' + css_id_ext);
  var currentEndDateInput = $j('#end-date-display' + css_id_ext);
  
  var currentStartDate = currentStartDateInput.datepicker('getDate');
  var currentEndDate = currentEndDateInput.datepicker('getDate');
  
  if (currentStartDate >= currentEndDate) {
    currentStartDate.setDate(currentStartDate.getDate()+1);
    var currentDay = currentStartDate.getDate();
    if (currentDay < 10) currentDay = "0" + currentDay;
    var currentMonth = currentStartDate.getMonth() + 1;
    if (currentMonth < 10) currentMonth = "0" + currentMonth;
    var currentYear = currentStartDate.getFullYear();
    currentEndDateInput.val(currentMonth + '/' + currentDay +  '/' + currentYear.toString().substring(2,4));
    $j('#end-date' + css_id_ext).val(currentYear.toString().substring(0,4) + '-' + currentMonth + '-' + currentDay);
  }
}

// BEGIN: Creative Builder

var creativeBuilderApp;

function loadCreativeBuilder(flashvars) {
	var params = {
	  menu: "false"
	};
	var attributes = {
	  id: "creativebuilder",
	  name: "creativebuilder"
	};

	swfobject.embedSWF ( "/flash/creativebuilder.swf", "creativebuilder_div", "800", "600", "10", "/flash/expressInstall.swf", flashvars, params, attributes );
	swfobject.addLoadEvent(loadCreativeBuilderEventHandler);
}

function loadCreativeBuilderEventHandler() {
	creativeBuilderApp = swfobject.getObjectById("creativebuilder");
}

// END: Creative Builder

