/***  
	Copyright 2009, Poverty Stops Here
	Author:  Jeremy Akins
          functions to support PSH tshirt shopping cart
***/

window.onload=init;
function init() {
	// set to male colors by default
	var color = document.getElementById('color');
	if (document.all) { //IE
		color.outerHTML = '<select id="color" onchange="setShirtImage(this.value, document.getElementById(\'gender\').value);setSizeOptions(document.getElementById(\'gender\').value, this.value);">'+malecolors+'</select>';	
	}
	else {
		color.innerHTML = malecolors;
		color.onchange = function() {setShirtImage(this.value, document.getElementById('gender').value);setSizeOptions(document.getElementById('gender').value, this.value);};
	}

	// set size to male black by default
	setSizeOptions('male','black');
}

var malecolors = '<option value="black" selected>Black</option><option value="indigoblue">Indigo Blue</option><option value="forestgreen">Forest Green</option><option value="red">Red</option>';
var femalecolors = '<option value="black" selected>Black</option><option value="leafgreen">Leaf Green</option><option value="cardinalred">Cardinal Red</option><option value="red">Red</option>';

var itemID = 1;
var numItems = 0;
var shippingid;


// set the shirt image based on the color selection
function setShirtImage(color, gender) {
	document.getElementById('shirtimage').src = 'images/shirt-'+gender+color+'.png';
}


// show the appropriate colors based on gender selection 
function setColorOptions(gender) {
	if (gender=='male') {
		if (document.all)  // IE
			document.getElementById('color').outerHTML = '<select id="color" onchange="setShirtImage(this.value, document.getElementById(\'gender\').value);setSizeOptions(document.getElementById(\'gender\').value, this.value);">'+malecolors+'</select>';
		else {
			document.getElementById('color').innerHTML = malecolors;
			document.getElementById('color').onchange = function() { setShirtImage(this.value, document.getElementById('gender').value);setSizeOptions(document.getElementById('gender').value, this.value); };
		}
	}
	else { 
		if (document.all)
			document.getElementById('color').outerHTML = '<select id="color" onchange="setShirtImage(this.value, document.getElementById(\'gender\').value);setSizeOptions(document.getElementById(\'gender\').value, this.value);">'+femalecolors+'</select>';
		else {
			document.getElementById('color').innerHTML = femalecolors;
			document.getElementById('color').onchange = function() { setShirtImage(this.value, document.getElementById('gender').value);setSizeOptions(document.getElementById('gender').value, this.value); };
		}
	}
	setShirtImage(document.getElementById('color').value, gender);
}


// set the size option depending on gender and color selection
function setSizeOptions(gender, color) {
	if (color=='')
		color = 'black';
			
	var str = gender + color;
	var options;

	switch(str) {
		case "maleblack":
			options = maleblackSelect;
			break;
		case "maleindigoblue":
			options = maleindigoblueSelect;
			break;
		case "maleforestgreen":
			options = maleforestgreenSelect;
			break;
		case "malered":
			options = maleredSelect;
			break;
		case "femaleblack":
			options = femaleblackSelect;
			break;
		case "femalecardinalred":
			options = femalecardinalredSelect;
			break;
		case "femaleleafgreen":
			options = femaleleafgreenSelect;
			break;	
		case "femalered":
			options = femaleredSelect;
			break;
	}

	// set tshirt sizes
	if (document.all) //IE
		document.getElementById('tshirtsize').outerHTML = '<select id="tshirtsize">'+options+'</select>';
	else  document.getElementById('tshirtsize').innerHTML = options;
	
	// set sweatshirt sizes
	if (document.all) //IE
		document.getElementById('sweatshirtsize').outerHTML = '<select id="sweatshirtsize">'+sweatshirtSelect+'</select>';
	else  document.getElementById('sweatshirtsize').innerHTML = sweatshirtSelect;
}


// add/remove the $10 int'l shipping charge from the shopping cart
 function toggleShipping() {
	var check = document.getElementById('shippingcheck');

	if (check.checked) {	// user just checked the checkbox
		var cart = document.getElementById('carttable');
		if (document.all)	// IE
			cart = cart.getElementsByTagName('tbody')[0];

		// create a new row to add to the table
		var row = document.createElement('tr');
		row.id = itemID;
		shippingid = itemID; 	// save off id for this item

		// item description
		td = document.createElement('td');
		td.innerHTML = 'International shipping<input type="hidden" id="quantity_'+itemID+'" value="1"/><input type="hidden" id="item_name_'+itemID+'" value="International shipping"/>';
		row.appendChild(td); 

		itemID++;	// next id to use
		numItems++;
		document.getElementById('noitems').style.display = 'none';
		cart.appendChild(row);
		
		updateCartTotal();
	}
	else {		// user just unchecked the checkbox
		removeFromCart(shippingid);
	}
}


// add a shirt to the shopping cart
function addToCart(sweatshirt) {
	var cart = document.getElementById('carttable');
	if (cart.innerHTML.match('TBODY'))	// IE7 and earlier (and IE8 compatibility mode)
		cart = cart.getElementsByTagName('tbody')[0];
	
	var quantity, sizeSelect;
	if (sweatshirt) {
		quantity = document.getElementById('sweatshirtquantity').value;
		sizeSelect = document.getElementById('sweatshirtsize');
	}
	else {
		quantity = document.getElementById('tshirtquantity').value;
		sizeSelect = document.getElementById('tshirtsize');
	}
	
	if (!quantity.match(/\d+/)) {
		alert('Please enter a valid number in the quantity field.');
		return;
	}

	// update available quantity in list, make sure we have enough in stock
	var sizeOption = sizeSelect.options[sizeSelect.selectedIndex];
	var numAvailable = sizeOption.className;
	if (quantity > numAvailable) {
		if (numAvailable==0)
			alert('Sorry, we don\'t have any more of this size and color in stock right now!');
		else  alert('Sorry, we only have '+numAvailable+' in stock right now!');
		return;
	}
	else  sizeOption.className = numAvailable-quantity;

	var type, color, size, gender;
	if (sweatshirt) {
		type = ''; //document.getElementById('gender').value;
		color = 'Dark Heather Sweatshirt'; //getColorName(document.getElementById('color').value);
		size = document.getElementById('sweatshirtsize').value;
		gender = '';

		sweatshirtSelect=document.getElementById('sweatshirtsize').innerHTML;
	}
	else {
		type = document.getElementById('gender').value;
		color = getColorName(document.getElementById('color').value);
		size = document.getElementById('tshirtsize').value;
	
		if (type=='female')
			gender = "Women's";
		else if (type=='male') 
			gender = "Men's";
		else  gender = "Child's";

		var cmd = type + document.getElementById('color').value + 'Select=document.getElementById(\'tshirtsize\').innerHTML';
		eval(cmd);
	}
	
	// create a new row to add to the table
	var row = document.createElement('tr');
	row.id = itemID;
		
	// item description
	td = document.createElement('td');
	td.innerHTML = quantity + ' ' + gender + ' ' + size + ' ' + color + '<input type="hidden" id="quantity_'+itemID+'" value="'+quantity+'"/><input type="hidden" id="item_name_'+itemID+'" value="'+gender+' '+size+' '+color+'"/>';
	row.appendChild(td); 

	// removal link
	td = document.createElement('td');
	td.innerHTML = '<a href="#" onclick="removeFromCart('+itemID+'); return false;">remove</a>';
	td.style.textAlign = 'center';
	row.appendChild(td);

	itemID++;	// next id to use
	numItems++;
	document.getElementById('noitems').style.display = 'none';
	cart.appendChild(row);
	
	updateCartTotal();
}


// return name from color option value
function getColorName(color) {
	switch(color) {
		case 'black':
			return 'Black';
		case 'forestgreen':
			return 'Forest Green';
		case 'indigoblue':
			return 'Indigo Blue';
		case 'cardinalred':
			return 'Cardinal Red';
		case 'leafgreen':
			return 'Leaf Green';
		case 'red':
			return 'Red';
	}
	return '';
}


// remove an item from the shopping cart
function removeFromCart(id) {
	var item = document.getElementById(id);
	var table = item.parentNode;
	table.removeChild(item);

	if (--numItems==0)
		document.getElementById('noitems').style.display = 'block';

	updateCartTotal();
		
	// update quantity available
	var arr = item.innerHTML.split(' ');
	var quantity = parseInt(arr[0].replace(/<td>/i, ''));
	var gender = arr[1].replace(/wo/i, 'fe').replace(/men's/i, 'male');
	var size = arr[2];
	var color = (arr[3]+arr[4]).replace(/<input.*/i, '').toLowerCase();

	var select;
	if (color.match('heather'))
		select = sweatshirtSelect;
	else  eval('select = '+gender+color+'Select');
	var numavail, regexFind, regexReplace;

	if (document.all) {		// IE
		regexFind = new RegExp('.*class=(.*?) value='+size+'.*', 'i');
		regexReplace = new RegExp('class=(.*?) value='+size, 'i');
	}
	else  {
		regexFind = new RegExp('.*'+size+'" class="(.*?)".*', 'i');
		regexReplace = new RegExp(size+'" class=".*?"', 'i');
	}

	numavail = parseInt(select.replace(regexFind, '$1'));
	numavail += quantity;

	if (document.all)	// IE
		select = select.replace(regexReplace, 'class='+numavail+' value='+size);
	else
		select = select.replace(regexReplace, size+'" class="'+numavail+'"');

	if (color.match('heather'))		// sweatshirt
		sweatshirtSelect = select;
	else  eval(gender+color+'Select=select');

	// refresh size select in case the one removed comes from the currect selection
	setSizeOptions(document.getElementById('gender').value, document.getElementById('color').value);
}


// update shopping cart total - 1st shirt is $20, all others $10, free shipping
function updateCartTotal() {
	var amt = 0;

	var trs = document.getElementById('carttable').getElementsByTagName('tr');
	for (var i=0; i<trs.length; i++) {
		var quantity = document.getElementById('quantity_'+trs[i].id).value;
		if (trs[i].innerHTML.match(/Sweatshirt/))
			amt += 30*quantity;
		else if (amt==0)	// first shirt
			amt += 20 + (quantity-1)*10;
		else amt += quantity*10;
	}
	
	var total = document.getElementById('carttotal');
	total.innerHTML = total.innerHTML.replace(/\$.*/, '$'+amt);

	document.forms[0].amount.value = amt;
}


// jump to Paypal checkout
function checkout() {
	// add hidden input items for paypal shopping cart
	var ID = 1;
	var trs = document.getElementById('carttable').getElementsByTagName('tr');
	for (var i=0; i<trs.length; i++) {
		var itemName = document.getElementById('item_name_'+trs[i].id).value;
		var quantity = document.getElementById('quantity_'+trs[i].id).value;

		if (itemName.match(/sweatshirt/i))
			document.forms[0].innerHTML += '<input type="hidden"  name="quantity_'+ID+'" value="'+quantity+'"/><input type="hidden" name="amount_'+ID+'" value="30"/><input type="hidden" name="item_name_'+ID+'" value="'+itemName+'"/>';		

		else if (i==0) {	// first row - $20, or if buying more than 1 of this item, 1 at $20 and x-1 at $10,
			document.forms[0].innerHTML += '<input type="hidden"  name="quantity_'+ID+'" value="1"/><input type="hidden" name="amount_'+ID+'" value="20"/><input type="hidden" name="item_name_'+ID+'" value="'+itemName+'"/>';
			if (quantity>1)	{ // only first shirt is $20
				ID++;
				document.forms[0].innerHTML += '<input type="hidden"  name="quantity_'+ID+'" value="'+(quantity-1)+'"/><input type="hidden" name="amount_'+ID+'" value="10"/><input type="hidden" name="item_name_'+ID+'" value="'+itemName+'"/>';
			}
		}
		else {	// all other rows are $10
				document.forms[0].innerHTML += '<input type="hidden"  name="quantity_'+ID+'" value="'+quantity+'"/><input type="hidden" name="amount_'+ID+'" value="10"/><input type="hidden" name="item_name_'+ID+'" value="'+itemName+'"/>';		
		}
		ID++;
	}

	document.forms[0].submit();
}
