
function Chocolate() {};

Chocolate.setCollapsedBuyButton = function(selectId, buyButtonId, buyButtonIndex) {
	var buyButton = document.getElementById(buyButtonId);
	buyButton.style.display = 'none';
	
	var option = document.getElementById(selectId).options[buyButtonIndex];
	option.value = buyButtonId;
}

Chocolate.changeCollapsedBuyButton = function(selectId) {
	var selectElement = document.getElementById(selectId);

	// hide all the buy buttons
	for (var i = 0; i < selectElement.options.length; i++) {
		var buyButton = document.getElementById(selectElement.options[i].value);
		buyButton.style.display = 'none';
	}
	
	// show the selected buy button
	var option = selectElement.options[selectElement.selectedIndex];
	var buyButton = document.getElementById(option.value);
	buyButton.style.display = 'block';
}

Chocolate.openWindowWithPost = function(url, target, options) {
	var form = document.createElement('form');
	document.documentElement.appendChild(form);
	var queryIndex = url.indexOf('?');
	if (queryIndex >= 0) {
		var parameterMap = Chocolate.parseQueryString(url.substring(queryIndex));
		for (name in parameterMap) {
			var values = parameterMap[name];
			for (var i = 0; i < values.length; i++) {
				var input = document.createElement('input');
				input.name = name;
				input.value = values[i];
				input.type = 'hidden';
				form.appendChild(input);
			}
		}
		
		url = url.substring(0, queryIndex);
	}
	
	form.onsubmit = 'window.open("", "' + target + '", "' + options + '"); return false;';
	form.action = url;
	form.method = 'POST';
	form.style.display = 'none';
	
	setTimeout(function() { form.submit(); }, 10);
}

/*
 * Returns a parameter map - key = String -> Value = Array of Strings
 */
Chocolate.parseQueryString = function(queryString) {
	if (queryString == null) {
	  queryString = '';
	}
    
  if (queryString.length > 0 && queryString.charAt(0) == '?'.charAt(0)) {
    queryString = queryString.substring(1);
  }

  var parameterMap = new Object();
  var nameValuePairs = queryString.split('&');
  for (var i = 0; i < nameValuePairs.length; i++) {
    var nameValuePair = nameValuePairs[i];
    if (nameValuePair.length == 0) {
      continue;
    }
    
    var name;
    var value;
    
    var equalsIndex = nameValuePair.indexOf('=');
    if (equalsIndex >= 0) {
      name = nameValuePair.substring(0, equalsIndex);
      value = nameValuePair.substring(equalsIndex + 1);
    }
    else {
      name = nameValuePair;
      value = '';
    }
    
    // decode
    name = unescape(name);
    value = unescape(value);
    
    // add name/value to map
    var values = parameterMap[name];
    if (! values) {
      values = new Array();
	    parameterMap[name] = values;
    }
    values.push(value);
  }
  
  return parameterMap;
}

Chocolate.showPopupWindow = function(url, height, width) {
  if (! (height > 0)) {
    height = 500;
  }
  if (! (width > 0)) {
    width = 400;
  }
  
	var left = (screen.width - width) / 2;
	var top = (screen.height - height) / 2;
  var settings = 'top=' + top + ',left=' + left + ',scrollbars=yes,menubar=no,height=' + height + ',width=' + width + ',resizable=yes,toolbar=no,location=no,status=no';
  var win = window.open(url, 'chocopopup', settings);
  win.focus();
}


Chocolate.showGalleryImage = function(url, description, photographer) {
	var img = document.getElementById('galleryImageFull');
	if (img) {
		img.src = url;
		img.title = photographer;
	}
	var desc = document.getElementById('galleryImageDescription');
	if (desc) {
		desc.innerHTML = description;
	}
}

Chocolate.showCartWindow = function(url) {
	var targetName = '_self';//'paypal';
	var windowSettings = '';//'width=780,height=600,toolbar=0';
	Chocolate.openWindowWithPost(url, targetName, windowSettings); 
}

Chocolate._getPaypalCartUrl = function(paypalServerUrl, paypalAccount, paypalIpnUrl,
		sessionId, successUrl, cancelUrl, continueText) {
	var customParameterMap = new Object();
	customParameterMap['session'] = new Array(sessionId);
	var customValue = Chocolate._getCustomParameterValueString(customParameterMap);
	
	var url = paypalServerUrl + 
		'/cgi-bin/webscr?' + 
		'&cmd=_cart' +
		'&notify_url=' + escape(paypalIpnUrl) + 
		'&business=' + escape(paypalAccount) + 
		'&return=' + escape(successUrl) +
		'&cancel_return=' + escape(cancelUrl) +
		'&shopping_url=' + escape(cancelUrl) +
		'&cbt=' + escape(continueText) +
		'&rm=1' +
		'&custom=' + customValue;
	
	return url;
}

Chocolate.showCart = function(paypalServerUrl, paypalAccount, paypalIpnUrl,
		sessionId, successUrl, cancelUrl, continueText) {
	var url = Chocolate._getPaypalCartUrl(paypalServerUrl, paypalAccount, paypalIpnUrl,
		sessionId, successUrl, cancelUrl, continueText);
	url += '&display=1';
	Chocolate.showCartWindow(url);
}

Chocolate.addToCart = function(paypalServerUrl, paypalAccount, paypalIpnUrl, 
		sessionId, successUrl, cancelUrl, continueText, name, id, amount) {
	Chocolate._addToCart(paypalServerUrl, paypalAccount, paypalIpnUrl, 
		sessionId, successUrl, cancelUrl, continueText, name, id, amount,
		null, null, null, null);
}

Chocolate._addToCart = function(paypalServerUrl, paypalAccount, paypalIpnUrl, 
		sessionId, successUrl, cancelUrl, continueText, name, id, amount,
		optionalName0, optionalValue0, optionalName1, optionalValue1) {
	var url = Chocolate._getPaypalCartUrl(paypalServerUrl, paypalAccount, paypalIpnUrl,
		sessionId, successUrl, cancelUrl, continueText);
	url +=
		'&add=1' +
		'&item_name=' + escape(name) +
		'&item_number=' + escape(id) +
		'&amount=' + escape(amount) +
		'&no_shipping=2' +
		'&no_note=1' +
		'&currency_code=USD' +
		'&lc=US' +
		'&bn=PP-ShopCartBF';
		
	if (optionalName0) {
		url += '&on0=' + escape(optionalName0);
		if (optionalValue0) {
			url += '&os0=' + escape(optionalValue0);
		}
	}
	
	if (optionalName1) {
		url += '&on1=' + escape(optionalName1);
		if (optionalValue1) {
			url += '&os1=' + escape(optionalValue1);
		}
	}

	Chocolate.showCartWindow(url);
}

 /**
  * Paypal parameters are URL encoded as a query string into the "custom" hidden variable.
  * This will be escaped to ensure its size is not too large.
  */
Chocolate._getCustomParameterValueString = function(parameterMap) {
  var value = '';
	for (key in parameterMap) {
	  var values = parameterMap[key];
		for (var i = 0; i < values.length; i++) {
			value += '&' + escape(key) + '=' + escape(values[i]);
		}
	}
	value = escape(value);
	
	if (value.length > 256) {
		alert('Unable to encode paypal parameter map, too much data');
		throw 'Unable to encode paypal parameter map, too much data';
	}
	
	return value;
}

$(document).ready(function() {
	Chocolate.setupArrow();
	
	Chocolate.setupVideomatic();
});

Chocolate.setupVideomatic = function() {
	$('.videomatic').show()
		.wrapInner('<div class="videomaticContent"></div>')
		.prepend('<a class="videomaticLink">Watch Video!</a>');
	$('.videomaticLink').click(function() {
		$('.videomaticContent').slideDown('normal');
	});
}

Chocolate.setupArrow = function() {
	var offset = $('#headerImage').offset();
	$('area').each(function() {
		$(this).mouseover(function(e) {
			var buttonCoords = e.target.coords.split(',');
			var buttonLeft = parseInt(buttonCoords[0]);
			var buttonBottom = parseInt(buttonCoords[3]);
			var buttonWidth = parseInt(buttonCoords[2]) - buttonLeft;
			var left = offset.left + buttonLeft + (buttonWidth / 2) - $('#arrow').width();
			var top = offset.top + buttonBottom + 2;
			$('#arrow').show().css('top', top + 'px').css('left', left + 'px');
		});
		$(this).mouseout(function() {
			$('#arrow').hide();
		});
	});
}
