document.observe('dom:loaded',function(){
	setupZoom();

  // Setup error'ed inputs so that they lose error state onfocus
  $$(".fieldWithErrors input, .fieldWithErrors select").each(function(error_field){
		error_field.observe('change',function(event){
			// Default to dataset wrapper, but change just in case it's in a radioset or checkset
			var set_type = 'data';
			if (Event.element(event).type == 'checkbox') {
				set_type = 'check';
			} else if (Event.element(event).type == 'radio') {
				set_type = 'radio';
			}
			// Have to go up and then down because label siblings can also be wrapped in fieldWithError
			Event.element(event).up('.'+set_type+'set').select('.fieldWithErrors').invoke('addClassName','fieldWithErrorsFixed').invoke('removeClassName','fieldWithErrors');
			Event.element(event).up('.'+set_type+'set').select('.fieldErrorMessage').each(function(error){ new Effect.DropOut(error); });
		});
  });

	// Check all inputs for title attribute and apply live labeling
	$$('input[title]').each(function(i){
		i.useLabel(i.title);
	});

});

Event.observe(window,'load',function(){
	position_dirt();
});

Event.observe(window,'resize',function(){
	position_dirt();
});

Element.addMethods({
	setLabel: function(element,message) {
		element = $(element);
		if ($F(element).empty()) { element.addClassName("quiet").value = message; }
		return element;
	},
	clearLabel: function(element,message) {
		element = $(element);
		if ($F(element) == message || $F(element).empty()) { element.removeClassName("quiet").clear(); }
		return element;
	},
	checkLabel: function(element,message) {
		element = $(element);
		if ($F(element) != message) { element.removeClassName("quiet"); }
		return element;
	},
	useLabel: function(element,message) {
		element = $(element);
		element.setLabel(message);
		element.observe('focus',function(event){ Event.element(event).clearLabel(message).activate(); });
		element.observe('blur',function(event){ Event.element(event).setLabel(message); });
		return element;
	},
  toggleSpinner: function(element){
    element = $(element);
		spinner = $(element.id + '_spinner');
		if (spinner.visible()) {
			spinner.hide();
		} else {
			spinner.show();
		}
    return element;
  },
  toggleIndicators: function(element){
    element = $(element);
		element.select('.use_indicator').invoke('update','<img src="/images/icons/indicator.gif" width="21" height="5" alt="Please wait..." />');
    return element;
  }
});

function position_dirt() {
	var window_dimensions = document.viewport.getDimensions();
	var copyright_wrapper = $('copyright_wrapper');
	if(copyright_wrapper) {
		var dirt_top = copyright_wrapper.cumulativeOffset().top + copyright_wrapper.getHeight();
		if (window_dimensions.height > dirt_top) {
			$('dirt').show().setStyle({
				height: (window_dimensions.height - dirt_top) + 'px',
				width: window_dimensions.width > 950 ? '100%' : '950px'
			});
		} else {
			$('dirt').hide();
		}
	}
}

function news_fader(oldNews) {
	var breakingNews = oldNews.next('a') ? oldNews.next('a') : $('news_ticker').down('a');
	new Effect.Fade(oldNews,{
		afterFinish: function(){
			new Effect.Appear(breakingNews,{
				afterFinish: function(){ setTimeout(function(){news_fader(breakingNews);}, 4000); }
			});
		}
	});
}

function toggle_sitemap(target) {
	new Effect.toggle('sitemap_wrapper','blind');
	$(target).toggleClassName('sitemap_open');
	$(target).toggleClassName('sitemap_closed');
	target.innerHTML = (target.innerHTML == 'Open Sitemap') ? 'Close Sitemap' : 'Open Sitemap';
}

function checking_gift_card_balance() {
	$('gift_card_balance').removeClassName('error_quiet').removeClassName('success_quiet').addClassName('disabled').update('Checking&hellip;');
}

function show_random_animation(animation_name,animation_width,animation_height) {
	animation_path = "animations/" + animation_name;
	animation_class = "animation_" + animation_name;
	render_flash(animation_name,animation_path,animation_width,animation_height,"random_animation");
	$('random_animation').addClassName(animation_class);
}

function render_flash(id,path,width,height,target) {
	if (!path.match(/^\//)) path = '/flash/'+ path
	var flash = '';
	flash += '<div><object type="application/x-shockwave-flash" data="' + path + '.swf" width="' + width + '" height="' + height + '" id="' + id + '">';
	flash += '	<param name="movie" value="' + path + '.swf" />';
	flash += '	<param name="allowScriptAcess" value="sameDomain" />';
	flash += '	<param name="quality" value="best" />';
	flash += '	<param name="wmode" value="transparent" />';
	flash += '	<param name="salign" value="TL" />';
	flash += '	<param name="FlashVars" value="playerMode=embedded" />';
	flash += '</object></div>';
	$(target).update(flash);
}

function activateCreditCard(target) {
	['american_express','visa','master','discover'].each(function(card){
	  $("cc_"+card).writeAttribute("src","/images/icons/cc_"+card+"_off.png");
		$("order_card_type_"+card).checked = false;
	});
	$("cvv_explanation_4front").hide();
	$("cvv_explanation_3back").hide();
  switch (target) {
    case 'american_express':
      $("cc_american_express").writeAttribute("src","/images/icons/cc_american_express.png");
			$("cvv_explanation_4front").show();
			$("order_card_type_american_express").checked = true;
      break;
    case 'visa':
      $("cc_visa").writeAttribute("src","/images/icons/cc_visa.png");
			$("cvv_explanation_3back").show();
			$("order_card_type_visa").checked = true;
      break;
    case 'master':
      $("cc_master").writeAttribute("src","/images/icons/cc_master.png");
			$("cvv_explanation_3back").show();
			$("order_card_type_master").checked = true;
      break;
    case 'discover':
      $("cc_discover").writeAttribute("src","/images/icons/cc_discover.png");
			$("cvv_explanation_3back").show();
			$("order_card_type_discover").checked = true;
      break;
  }
}

function determineCreditCard() {
  card_number = parseInt($F('order_card_number').substr(0,1));
  switch (card_number) {
    case 3:
			card_type = 'american_express';
      break;
    case 4:
			card_type = 'visa';
      break;
    case 5:
			card_type = 'master';
      break;
    case 6:
			card_type = 'discover';
      break;
  }
	activateCreditCard(card_type);
}

function copyAddress(from,to) {
	$('order_' + to + '_first_name').value = $F('order_' + from + '_first_name');
	$('order_' + to + '_last_name').value = $F('order_' + from + '_last_name');
	$('order_' + to + '_first_name').checkLabel('First name');
	$('order_' + to + '_last_name').checkLabel('Last name');
	$(to + '_address_phone').value = $F(from + '_address_phone');
	$(to + '_address_address_line_1').value = $F(from + '_address_address_line_1');
	$(to + '_address_address_line_2').value = $F(from + '_address_address_line_2');
	$(to + '_address_city').value = $F(from + '_address_city');
	$(to + '_address_state').value = $F(from + '_address_state');
	$(to + '_address_postal_code').value = $F(from + '_address_postal_code');
	$(to + '_address_country').value = $F(from + '_address_country');
	
	if ($F('order_email').empty()) {
		if (!$('order_email_note')) {
			$('order_email').insert({'after': ' <span id="order_email_note" class="fieldnote">Don\'t forget an email address!</span>'});
			new Effect.Highlight('order_email_note');
		}
	} else if ($('order_email_note')) { $('order_email_note').remove(); }
	
}

// Enable/disable selectable shipping methods based on selected Shipping Country
function toggleDomesticAndInternationalOptions() {
  var shipping_country = $F('shipping_address_country');
	$('order_shipping_methods').select('input[type=radio]').each(function(method){
		if ((shipping_country == 'US' && method.id.match(/international/i)) || (shipping_country != 'US' && !method.id.match(/international/i))) {
			if (method.checked === true) { method.checked = false; }
			$(method.id + '_price').update();
			method.disable();
		} else {
			method.enable();
		}
	});
}

// Show estimated shipping prices in shipping method labels
function updateShippingPrices(shipping_prices) {
	$('order_shipping_methods').select('input[type=radio], select').each(function(method){
		if (shipping_prices[method.value]) {
			method.enable();
			$(method.id + '_price').update(shipping_prices[method.value]);
		} else {
			method.disable();
			if (method.checked === true) method.checked = false;
			$(method.id + '_price').update();
		}
		// var shipping_price = shipping_prices[method.value] ? shipping_prices[method.value] : '';
		// $(method.id + '_price').update(shipping_price);
	});
}

// When you select a new shipping method, update the cart price and total with new amount
function updateCartShippingAndTotal(shipping,tax,total) {
	$('tax').update(tax);
	$('shipping').update(shipping);
	$('total','final_total').invoke('update',total);
}

function openPopup(target,link) {
  link = $(link);
  target = $(target);

  target_started_visible = target.visible();
  closePopups();
  if (target_started_visible) return false;

  offset_left = link.offsetWidth;
  offset_top = -(target.getHeight() / 3);
  link.addClassName('popup_trigger_active');
  target.show().clonePosition(link,{
    setWidth: false,
    setHeight: false,
    offsetLeft: offset_left,
    offsetTop: offset_top
  });

	popup_overhang = link.cumulativeOffset()[0] + target.offsetWidth - 925
	if (popup_overhang > 0) {
		target.style.width = '20em';
	}

}

function closePopups() {
  $$('.popup_trigger_active').invoke('removeClassName','popup_trigger_active');
  $$('.popup_wrapper').each(function(popup){
    if (popup.visible()) Effect.DropOut(popup);
  });
}

/**
 * javascript pagination for assessment results per James' request
 */
assessmentResultsPage = null;
assessmentResultsNumPages = null;
assessmentResultsNumItems = null;
assessmentResultsItemsPerPage = null

function assessmentResultsInitPagination(numItems, itemsPerPage)
{
	assessmentResultsItemsPerPage = itemsPerPage;
	assessmentResultsNumPages = Math.floor(numItems / itemsPerPage) + ((numItems % itemsPerPage) == 0 ? 0 : 1);
	assessmentResultsNumItems = numItems;
	assessmentResultsGotoPage(1);
}

function assessmentResultsPrev()
{
	assessmentResultsGotoPage(assessmentResultsPage - 1);
}

function assessmentResultsGotoPage(pg)
{
	var total = assessmentResultsNumPages;
	if (pg < 1) pg = 1;
	if (pg >= total) pg = total;
	assessmentResultsPage = pg;

	$('pagination_prev_top').style.visibility = (pg == 1) ? 'hidden' : 'visible';
	$('pagination_next_top').style.visibility = (pg == total) ? 'hidden' : 'visible';
	$('pagination_prev_bottom').style.visibility = (pg == 1) ? 'hidden' : 'visible';
	$('pagination_next_bottom').style.visibility = (pg == total) ? 'hidden' : 'visible';

	for (var i=1; i<=assessmentResultsNumItems; i++)
	{
	    if (pg == Math.ceil(i/assessmentResultsItemsPerPage))
		{
			$('assessment_results_item_'+i).style.display = '';
	    }
		else
		{
			$('assessment_results_item_'+i).style.display = 'none';
		}
	}

	for (var i=1; i<=assessmentResultsNumPages; i++)
	{
		$('pagination_page_'+i+'_top').style.fontWeight = 'normal';
		$('pagination_page_'+i+'_bottom').style.fontWeight = 'normal';
    }
	$('pagination_page_'+pg+'_top').style.fontWeight = 'bold';
	$('pagination_page_'+pg+'_bottom').style.fontWeight = 'bold';

	//go back to top of page
	window.scrollTo(0,0);
}

function assessmentResultsNext()
{
	assessmentResultsGotoPage(assessmentResultsPage + 1);
}

function toggleSelectAddress(identifier) {
	if($("select_address_" + identifier).value == "new") {
		$("save_new_address_" + identifier + "_wrapper").show();
	} else {
		$("save_new_address_" + identifier + "_wrapper").hide();
	}
}

function toggleNewAddressTitle(identifier, clicked) {
	if($("save_new_address_" + identifier).checked) {
		$("new_address_" + identifier + "_title").enable();

		// We only want to focus on the field if this is from a click,
		// and not during page load.
		if(clicked) {
			$("new_address_" + identifier + "_title").activate();
		}
	} else {
		$("new_address_" + identifier + "_title").disable();
	}
}

function check_all(id, checked)
{
	var checkboxes = $$('#'+id+' input[type="checkbox"]');
	for (var i=0; i<checkboxes.length; i++)
	{
		checkboxes[i].checked = checked
	}
}
