// JavaScript Document

function JRI_FormatNumber(expr, decplaces) {
	var str = "" + Math.round(eval(expr) * Math.pow(10, decplaces))
	while ( str.length <= decplaces )
	{
		str = "0" + str;
	}
	var decpoint = str.length - decplaces;
	var strFNum = (decplaces > 0)? str.substring(0,decpoint) + "." + str.substring(decpoint, str.length):str.substring(0,decpoint);	
	return strFNum;
}

function JRI_Dollarize(expr) {
 return "$" + JRI_FormatNumber(expr, 2)
}
//-----------------------------------------------------
//  Shopping Cart functions and variables
var orderTotal = 0;   // Total value of order
var numItems = 0;
var beadList;
beadList = new Array();

function readCartFromCookie() {
	var strOrder = readCookie("myCart");
	
	if (strOrder != "") {
		var items = String(strOrder).split("|");
		
		for (var i=0; i < items.length; i+=6) {
			beadList[ numItems ] = new Array();
			beadList[ numItems ].descrip = items[i];
			beadList[ numItems ].qty = parseInt(items[i+1]);
			beadList[ numItems ].color = items[i+2];
			beadList[ numItems ].ptext = items[i+3];
			beadList[ numItems ].pval = parseFloat(items[i+4]);
			beadList[ numItems ].ptotal = parseFloat(items[i+5]);
			numItems++;
		}	
	}
	calcOrderTotal();
	refreshViewCart();
	displayCartItems();
}

function writeCartToCookie() {
	var strOrder = "";

	for (var i=0; i < beadList.length; i++) {
		if (i > 0)strOrder += "|"
		strOrder += "" + beadList[ i ].descrip + "|";
		strOrder += "" + beadList[ i ].qty  + "|";
		strOrder += "" + beadList[ i ].color + "|";
		strOrder += "" + beadList[ i ].ptext + "|";
		strOrder += "" + beadList[ i ].pval + "|";
		strOrder += "" + beadList[ i ].ptotal;
	}	
	writeCookie("myCart", strOrder, 72);
}

function displayCartItems() {
	var strHTML = "";
	var node = document.getElementById("cartItems");
	
	if (node) {
		strHTML	+= '<table width="100%" border="0" align="center" cellpadding="3" cellspacing="1">';
		strHTML	+= '		<tr bgcolor="#CCFF99">';
		strHTML	+= '			<th align="center" bgcolor="#C4D697">Packets</th>';
		strHTML	+= '			<th align="center" bgcolor="#C4D697">Item</th>';
		strHTML	+= '			<th align="center" bgcolor="#C4D697">Colour</th>';
		strHTML	+= '			<th align="center" bgcolor="#C4D697">Price</th>';
		strHTML	+= '			<th align="center" bgcolor="#C4D697">Total</th>';
		strHTML	+= '			<td bgcolor="#C4D697">&nbsp;</td>';
		strHTML	+= '		</tr>';
		for (var i=0; i < numItems; i++) {
			strHTML	+= '	<tr bgcolor="#CCFF99">';
			strHTML	+= '			<td align="center" valign="top" bgcolor="#FFFFCC">';
			strHTML	+= '				<input name="q'+i+'" type="text" class="formText" id="q'+i+'" size="3" value="'+beadList[ i ].qty+'">';
			strHTML	+= '				<input name="item'+i+'_quantity" type="hidden" value="'+beadList[ i ].qty+'">';
			strHTML	+= '				<a href="javascript:updateItem(document.fm_cart,'+i+')"';
			strHTML	+= '  onmouseover="MM_swapImage(\'update'+i+'\',\'\',\'assets/images/btn_update_f2.gif\',1)"'; 
			strHTML	+= 'onmouseout="MM_swapImgRestore()">';
			strHTML	+= '<img src="assets/images/btn_update.gif" name="update'+i+'" width="54" height="20" border="0"></a>';										
			strHTML	+= '		</td>';
			strHTML	+= '		<td valign="top" bgcolor="#FFFFCC">';
			strHTML	+= beadList[ i ].descrip+'<input name="item'+i+'_description" type="hidden" value="'+beadList[ i ].descrip+'">';												
			strHTML	+= '		</td>';
			strHTML	+= '		<td valign="top" bgcolor="#FFFFCC">';
			strHTML	+= beadList[ i ].color+'<input name="item'+i+'_color" type="hidden" value="'+beadList[ i ].color+'">';												
			strHTML	+= '		</td>';
			strHTML	+= '		<td valign="top" bgcolor="#FFFFCC">'+beadList[ i ].ptext;
			strHTML	+= '			<input name="item'+i+'_price" type="hidden" value="'+beadList[ i ].ptext+'">';
			strHTML	+= '		</td>';
			strHTML	+= '		<td align="center" valign="top" bgcolor="#FFFFCC">'+JRI_Dollarize(beadList[ i ].ptotal);
			strHTML	+= '			<input name="item'+i+'_ptotal" type="hidden" value="'+JRI_Dollarize(beadList[ i ].ptotal)+'">';
			strHTML	+= '		</td>';
			strHTML	+= '		<td align="center" valign="top" bgcolor="#C4D697">';
			strHTML	+= ' <a href="javascript:deleteItem('+i+')"';
			strHTML	+= 'onmouseover="MM_swapImage(\'remove'+i+'\',\'\',\'assets/images/btn_remove_f2.gif\',1)"';
			strHTML	+= 'onmouseout="MM_swapImgRestore()">';
			strHTML	+= '<img src="assets/images/btn_remove.gif" name="remove'+i+'" width="54" height="20" border="0"></a>';
			strHTML	+= '		</td>';
			strHTML	+= '	</tr>';
		}
		strHTML	+= '	<tr bgcolor="#CCFF99">';
		strHTML	+= '		<td colspan="3" align="center" bgcolor="#C4D697">';
		strHTML	+= '			<span class="defaultRedTitle">MINIMUM ORDER $30</span></td>';
		strHTML	+= '		<td align="right" bgcolor="#C4D697"><strong>Order Total:</strong></td>';
		strHTML	+= '		<td align="center" bgcolor="#FFFFCC">';
		strHTML	+= '			<input name="numItems" type="hidden" value="'+numItems+'">';
		strHTML	+= '			<input name="orderTotal" type="hidden" value="'+orderTotal+'">'+JRI_Dollarize(orderTotal);
		strHTML	+= '		</td>';
		strHTML	+= '		<td bgcolor="#C4D697">&nbsp;</td>';
		strHTML	+= '	</tr>';
		strHTML	+= '	<tr bgcolor="#CCFF99">';
		strHTML	+= '		<td colspan="6" align="right" bgcolor="#C4D697">';
		strHTML	+= '<input name="checkout" id="checkout" type="image"';
		strHTML	+= 'src="assets/images/btn_checkout.gif" alt="Proceed to secure checkout" width="154" height="20" border="0"';
		strHTML	+= ' onmouseover="MM_swapImage(\'checkout\',\'\',\'assets/images/btn_checkout_f2.gif\',1)"';
		strHTML	+= ' onmouseout="MM_swapImgRestore()"/>';
		strHTML	+= '		</td>';
		strHTML	+= '		</tr>';
		strHTML	+= '	</table>';
	
		node.innerHTML = strHTML
	}	
}

function addItem(form, descrip, color, price, qty) {
	// Add Product item to Order
	beadList[ numItems ] = new Array(6);
	beadList[ numItems ].descrip = descrip;
	beadList[ numItems ].qty     = ( (eval("form."+qty) != null) ? eval("form."+qty+".value"):"" );
	// Get Color from list box
	beadList[ numItems ].color 	 = ( (eval("form."+color) != null) ? eval("form."+color+".options[form."+color+".selectedIndex].text"):"" );
	
	// Retrieve Price text from radio box
	var val = eval("form."+price)
	// Handle only one Price Radio Button
	if (String(val.length) == "undefined") {
		beadList[ numItems ].ptext = val.value;
	} else {
		for (var ri=0; ri<val.length; ri++) { 
			if (val[ri].checked) { 
				beadList[ numItems ].ptext = val[ri].value; 
				break;
			}
		}
	}
	//Extract dollar value from price text.  Remove $ character and any additional text
	var num = String(beadList[ numItems ].ptext);
	if (num.indexOf("$") >= 0) {
		num = String(num).substring(1);
	}
	if (num.indexOf(" ") > 0) {
		num = num.substring(0,num.indexOf(" "));
	}

	beadList[ numItems ].pval = parseFloat(num);
	
	// Calc total for this item
	beadList[ numItems ].ptotal = parseFloat(beadList[ numItems ].pval) * parseFloat(beadList[ numItems ].qty);
	numItems++;
	
	// Recalc Total Value of Order
	writeCartToCookie();
	calcOrderTotal();
	refreshViewCart();
}

function addDesignIdea(descrip, price) {
	beadList[ numItems ] = new Array(6);
	beadList[ numItems ].descrip = descrip;
	beadList[ numItems ].qty = 1;
	beadList[ numItems ].color = "";
	beadList[ numItems ].ptext = price;

	//Extract dollar value from price text.  Remove $ character and any additional text
	var num = String(beadList[ numItems ].ptext);
	if (num.indexOf("$") >= 0) {
		num = String(num).substring(1);
	}
	if (num.indexOf(" ") > 0) {
		num = num.substring(0,num.indexOf(" "));
	}
	beadList[ numItems ].pval = parseFloat(num);
	beadList[ numItems ].ptotal = parseFloat(beadList[ numItems ].pval);

	numItems++;

	// Recalc Total Value of Order
	writeCartToCookie();
	calcOrderTotal();
	refreshViewCart();
}

function updateItem(form, itemNo) {
	beadList[ itemNo ].qty = ( (eval("form.q"+itemNo) != null) ? eval("form.q"+itemNo+".value"):"" );
	
	if (beadList[ itemNo ].qty == "0") {
		deleteItem(itemNo);
	} else {
		beadList[ itemNo ].ptotal = parseFloat(beadList[ itemNo ].pval) * parseFloat(beadList[ itemNo ].qty)
		// Recalc Total Value of Order
		writeCartToCookie();
		calcOrderTotal();
		refreshViewCart();
		displayCartItems();
	}
}

function deleteItem(itemNo) {
	// Delete item from Order List
	for (i = itemNo; i < numItems-1; i++) {
		beadList[i] = beadList[i+1];
	}
	numItems--;
	beadList.length = numItems;
	
	// Recalc Total Value of Order
	writeCartToCookie();
	calcOrderTotal();
	refreshViewCart();
	displayCartItems();
}
 
function calcOrderTotal() {
	// Add up order total
	orderTotal = 0;
	for (i = 0; i < numItems; i++) {
		orderTotal += parseFloat(beadList[i].ptotal);
	}
}

// Clear Order List
function clearOrderList() {
	numItems = 0;
	beadList = new Array();

	writeCartToCookie();
	calcOrderTotal();
	refreshViewCart();
}

function refreshViewCart() {
	// Find node for cart info
	var strOrder = "# Items: " + numItems + "<br/>Total: " + JRI_Dollarize(orderTotal);
	document.getElementById("orderInfo").innerHTML = strOrder;
}
/* 
function readCookie(name)
	Description : 
		Extracts cookie value which matches the passed name parameter
	Passed Parameters :
			name - text: name of cookie to retrieve
	Returned Values :
			cookieValue - text: value of cookie;	
*/
function readCookie(name) {
  var cookieValue = "";
  var search = name + "=";
  if(document.cookie.length > 0) { 
    offset = document.cookie.indexOf(name);
    if (offset != -1) { 
      offset += name.length+1;
      end = document.cookie.indexOf(";", offset);
      if (end == -1) end = document.cookie.length;
      cookieValue = decodeURI(document.cookie.substring(offset, end))
    }
  }
  return cookieValue;
}

/* 
function writeCookie(name, value, hours)
	Description : 
		Extracts cookie value which matches the passed name parameter
	Passed Parameters :
			name - text: name of cookie to write
			value - text: value of cookie to write
			hours - number: number of hours before cookie expires
	Returned Values :
			none	
*/
function writeCookie(name, value, hours) {
  var expire = "";
  if(hours != null) {
    expire = new Date((new Date()).getTime() + hours * 3600000);
    expire = "; expires=" + expire.toGMTString();
  }
  document.cookie = encodeURI(name + "=" + value + expire);
	
	return;
}
