﻿function BasketItem(id, count, description, price)
{
    this.identifier = id;
    this.count = count;
    this.description = description;
    this.price = price;
}

function Basket()
{
    this.items = new Array();

}

Basket.prototype.AddItem = function(id, count, description, price)  
{
        var alreadyInList = false;
        var i = 0;
    	for (i = 0; i < this.items.length; i++)
		{
			if (this.items[i].identifier == id) {
				alreadyInList = true;
				var oldCount = parseInt(this.items[i].count);
				var newCount = parseInt(count);
				this.items[i].count = oldCount + newCount;
			}
		}
		if (!alreadyInList && (count > 0))
		{
			this.items.push(new BasketItem(id, count, description, price));
		}
}

Basket.prototype.AdjustItem =     function(id, count) 
{
        var alreadyInList = false;
        var i = 0;
    	for (i = 0; i < this.items.length; i++)
		{
			if (this.items[i].identifier == id) {
				this.items[i].count = count;
			}
		}
		for (i = this.items.length-1; i >= 0; i--)
		{
			if (this.items[i].count == 0)
			{
				this.items.splice(i, 1);
			}
		}
		
}
Basket.prototype.SaveToCookie = function()
{
	var cookieText = $.toJSON(this.items);
	$.cookie('basket', cookieText, { expires: 1, path: '/' });

}
Basket.prototype.ReadFromCookie = function()
{

	this.items = new Array();
	var cookieText = $.cookie('basket');
	if (cookieText != null)
	{
		if (cookieText != "")
		{
			this.items = $.secureEvalJSON(cookieText);
		}
	}
}


function clearBasket()
{
  var basketValue = new Basket(); 
  basketValue.SaveToCookie();
  return basketValue;
}

function getBasket()
{
  var basketValue = new Basket(); 
  basketValue.ReadFromCookie();
  return basketValue;
}

function setBasketCount(id)
{

	var elt = document.getElementById(id);
	if (elt != null)
	{
		var basketValue = getBasket();
		elt.innerHTML = basketValue.items.length;
	}
}

function getBasketAsTable()
{
	var str = "";
	var basketValue = getBasket();
	if (basketValue.items.length > 0)
	{
		str = str + "<table style='width:400px; padding-top: 20px' cellspacing='10'>";
		str = str + "<thead><tr style='height:50px;width: 100px'>" + 
					"<td style='text-align: right; padding-right:5px'>Quantity</td>" + 
					"<td>Item</td>" + 
					"</tr></thead>";
		
		str = str + "  <tbody>";
		var i = 0;
		for (i = 0; i < basketValue.items.length; i++)
		{
		 	if ( basketValue.items[i].count > 0)
		 	{
			//alert ('new item ' + basketValue.items[i].identifier + basketValue.items[i].count);
			
			str = str + "<tr>";
			
			str = str + "<td style='text-align: right; padding-right:5px; width: 100px'>";
			str = str + basketValue.items[i].count;
			str = str + "</td>";

			str = str + "<td>";
			str = str + basketValue.items[i].description;
			str = str + "</td>";
			
						
			str = str + "</tr>";
			}
		}
	
		str = str + "  </tbody>";
		str = str + "</table>";
	}
	else
	{
		str = str + "You have no items in your basket.";
	}
	return str;

}


function getItemQuantity(itemId)
{
	var b = getBasket();
	var i = 0;
	for (i = 0; i < b.items.length; i++)
	{
		if (b.items[i].id == itemId)
		{
			return b.items[i].count;
		}
	}

	return 0;
}


function displayBasketAsTable(id)
{

//	var b = getBasket();
//	b.AddItem('1', 1, 'Item 1', '1.50');
//	b.AddItem('2', 2, 'Item 2', '2.50');
//	b.SaveToCookie();	
 
	var elt = document.getElementById(id);
	if (elt != null)
	{
		var str = getBasketAsTable();
		elt.innerHTML = str;
	}
	
}




//To insert a link into a page just use a normal anchor tag in the HTML and call the function.
//<a href="javascript:postwith('post.aspx',{user:'peter',cc:'aus'})">click</a>
function postwith (to,p) {
  var myForm = document.createElement("form");
  myForm.method="post" ;
  myForm.action = to ;
  for (var k in p) {
    var myInput = document.createElement("input") ;
    myInput.setAttribute("name", k) ;
    myInput.setAttribute("value", p[k]);
    myForm.appendChild(myInput) ;
  }
  document.body.appendChild(myForm) ;
  myForm.submit() ;
  document.body.removeChild(myForm) ;
}


function formatInt(input){
  var num = input.value.replace(/\,/g,'');
  if(!isNaN(num)){
    if(num.indexOf('.') > -1) {
     // alert("You may not enter any decimals.");
      input.value = input.value.substring(0,input.value.length-1);
    }
  } else {
   // alert('You may enter only numbers in this field!');
    input.value = input.value.substring(0,input.value.length-1);
  }
}

function adjustItemQuantity(form, basketCountId, basketContentsId)
{
	var newCount = form.newCount.value;
	var identifier = form.identifier.value;
 	var basketValue = new Basket(); 
 	basketValue.ReadFromCookie();
	basketValue.AdjustItem(identifier, newCount);
	basketValue.SaveToCookie();
	setBasketCount(basketCountId);
	displayBasketAsEditableTable(basketContentsId);
	
}

function getBasketAsEditableTable()
{
	var str = "";
	var basketValue = getBasket();
	if (basketValue.items.length > 0)
	{
		str = str + "<table style='width:400px; padding-top: 20px' cellspacing='10'>";
		
		var i = 0;
		for (i = 0; i < basketValue.items.length; i++)
		{
		 	if ( basketValue.items[i].count > 0)
		 	{
			var bname = "button" + i.toString();
			//alert ('new item ' + basketValue.items[i].identifier + basketValue.items[i].count);
			
			str = str + '<tr>';
			str = str + '<td>';
			str = str + '<form action="" method="get" style="display:inline;">';
			
			str = str + "<table style='width:400px; padding-top: 20px' cellspacing='10'>";
			str = str + "<tr>";
			str = str + "<td style='width: 100px; align: right;valign: middle'>";
			
			str = str + '<input ' +
						  ' name="newCount"' + 
			              ' type="text" size="5" tabindex="' + i.toString() + '"' +
			              ' onkeyup="formatInt(this);"' + 
			              ' value="' + basketValue.items[i].count.toString() + '"' +
			              '/>';
			str = str + '<input ' +
			              ' name="identifier"' +
			              ' type="hidden"' +
			              ' value="' + basketValue.items[i].identifier + '"' +
			              '/>';
			
			str = str + "</td>";

			str = str + "<td style='width: 200px; align: left; valign: bottom'>";
			str = str + basketValue.items[i].description;
			str = str + "</td>";
			
			str = str + "<td style='width: 120px; align: right;valign: middle'>";
			str = str + "<input type='button' name='" + bname + 
						"' value='Update Quantity' onclick='adjustItemQuantity(this.form, \"basketCount\", \"basketcontents\");'/>";
			str = str + "</td>";
			str = str + "</tr>"
			str = str + "</table>";
			str = str + "</form>";
			str = str + '</td>';
			str = str + '</tr>';

			}
			str = str + "</table>";
		}
	}
	else
	{
		str = str + "You have no items in your basket.";
	}
	return str;

}

function displayBasketAsEditableTable(id)
{

//	var b = getBasket();
//	b.AddItem('1', 1, 'Item 1', '1.50');
//	b.AddItem('2', 2, 'Item 2', '2.50');
//	b.SaveToCookie();	
 
	var elt = document.getElementById(id);
	if (elt != null)
	{
		var str = getBasketAsEditableTable();
	//	alert (str);
		elt.innerHTML = str;
	}
	
}




