/*****
 *	$id: cart.js v01.01 2003/02/03  15:45:53
 *	$auth: P. Juchtmans.
 *****/

/*****
 *	cartlib.js
 *	Verzameling functies, die, gebruikmakend van Myers' Daily Cookie class,
 *	basic shoppingcart functionaliteit implementeren.
 *
 *	Componenten worden opgesplitst in 4 delen:
 *
 *	1) MYERS' COOKIE
 *	Neemt de basic cookie functionaliteit voor z'n rekening
 *
 *	2) PROTECTED FUNCTIONS
 *	Basis bouwblokken, rond de Myers' lib, die het mogelijk maken basic cart
 *	functionaliteit te implementeren.
 *	Deze functies worden enkel en alleen door de PUBLIC FUNCTIONS gebruikt.
 *
 *	3) PUBLIC FUNCTIONS
 *	Deze zijn de functies die rechtstreeks aangesproken worden, wanneer met de
 *	cart wordt gewerkt.
 *
 *	4) WRAPPER FUNCTIONS
 *	Wrapper functies voor de public functions (update, delete en add),
 *	zodat specifieke checks & page reloads kunnen geïmplementeerd worden.
 *
 *
 *	:NOTE:
 *		PROTECTED FUNCTIONS mogen niet rechtstreeks aangesproken worden !!!!!!
 *		Gebruik alleen de PUBLIC FUNCTIONS !!!!!
 *
 *
 *	:LOG:
 *	00.10 2002/11/24 22:34:44
 *		Basic versie, stuntelig myers wrappen.
 *
 *	00.50 2002/12/09 00:24:32
 *		PROTECTED FUNCTIONS
 *		Ontwikkeling van basic wrap functions.
 *
 *	00.90 2002/12/16 01:45:55
 *		PUBLIC FUNCTIONS
 *		Ontwikkeling van de public functions over de protected.
 *
 *	01.00 2002/12/22 02:11:29
 *		First release.
 *		Afwerking van Protected en public functions
 *
 *	01.01 2003/02/03 15:42:19
 *		Comment update.
 *		Bijvoegen en ordening van commentaar.
 *
 *
 *	:TODO:
 *		cart in een class gieten; pulic & protected methods daarin implementeren
 *		Zie structuur & syntax vd. cookie lib.
 *****/

/*****
 *	url vd. pagina die opnieuw geladen moet worden.
 *	@type string
 *****/
// var jump_url = 'default.asp?p=checkCart';
//	MYERS' COOKIE

/*****
 *	Myers daily cookie lib
 *	Levert de basis functionaliteit om makkelijk met cookies te werken.
 *****/
var Cookie = {
pref:'',last:null,
cnfg:function(a1){
	var Bool={secure:1}, text='';
	if (''+a1!==a1) for (var k in a1) if (a1[k]) text += '; '+(
		Bool[k] ? k : k+'='+(
			k!='expires'||isNaN(a1[k]) ? a1[k] : this.date(a1[k])
		)
	);
	return this.pref = text||a1||text;
},
make:function(a1,a2,a3) {
	document.cookie = this.last=escape(a1)+'='+escape(a2)+this.cnfg(a3);
	return this.read(a1) == a2;
},
date:function(a1) {
	var D = new Date();
	D.setTime(D.getTime()+(a1||0)*86400000);
	return D.toGMTString();
},
read:function(a1) {
	var F=' '+document.cookie+';', S=F.indexOf(' '+(a1=escape(a1)));
	return S==-1 ? null : unescape(
		F.substring(a1=S+a1.length+2,F.indexOf(';',a1))
	);
}
}


//	PROTECTED FUNCTIONS

/*****
 *	getItems()
 *	Leest de ganse cookie uit, split het value gedeelte,
 *	en plaats in een array >> orderline[]=ARTID/QTY
 *	Leest de cartCookie uit en retourneert een enkelvoudige array
 *	die de orders bevat in het formaat ARTID/QTY.
 *
 *	@returns array: de items in de cart.
 *****/
function getItems()
{
	var orderline='';
	if( Cookie.read(SID) )
	{
		orderline=Cookie.read(SID).split('|');
	}
	else
	{
		orderline= new Array(0);
	}
	return orderline;
}

/*****
 *	placeItems()
 *	Zet een gehele order row (line) in de cart.
 *	orderline is van het formaat 'artid/qty';
 *
 *	@param string orderline: Het complete order om in de cart te zetten.
 *****/
function placeItems(orderline){
	var cart='';
	var i=-1;
	while( orderline[++i] )
	{
		cart=cart+orderline[i]+"|";
	}
	Cookie.make(SID, cart, {expires:+1} );
}

/*****
 *	checkQty()
 *	Checked of doorgegeven hoeveelheid een integer is.
 *****/
function checkQty( qty )
{
	var regex = /[^\d]+/;
	return (regex.test( qty )) ? false : true;
}


//	PUBLIC FUNCTIONS

/*****
 *	deleteCart()
 *	Verwijdert de gehele cart.
 *****/
function deleteCart()
{
	Cookie.make( SID, null, {expires:-1} );
}

/*****
 *	addItem(artikelID,hoeveelheid)
 *	Leest de ganse cookie uit, zoekt eventueel het artid, 
 *	indien dit bestaat: verhoog het aantal met de doorgegeven hoeveelheid
 *	indien niet: plaats order erbij
 *
 *	@param int artid: de identifier van het artikel
 *	@param int qty: De hoeveelheid van het artikel.
 *****/
function addItem(artid,qty)
{
	var i=-1; 
	var bijvoegen=true;
	var cart=getItems();
	while( cart[++i] )
	{
		var	item=cart[i].split('/');
		if( item[0]==artid )
		{
			item[1]=parseInt(item[1]) + parseInt(qty);
			bijvoegen=false;
		}
		cart[i]=item[0]+"/"+item[1];
	}
	if( bijvoegen )
	{
		cart[i]=artid+"/"+qty;
	}
	placeItems(cart);
}

/*****
 *	deleteItem(artid)
 *	Verwijdert een order uit de cart
 *
 *	@param string artid : id vh. te verwijderen artikel.
 *****/
function deleteItem(artid)
{
	var i=-1;
	var j=-1;
	var cart=getItems();
	var cartNew=new Array(0);
	while( cart[++i] )
	{
		var item=cart[i].split('/');
		if( item[0] != artid )
		{
			cartNew[++j]=item[0] + "/" + item[1];
		}
	}
	if( j==-1 ){
		deleteCart();
	}
	else
	{
		placeItems(cartNew);	
	}
}

/*****
 *	updateQty(artid,qty)
 *	update de hoeveelheid van artikel artid naar qty:
 *	cookie uilezen, artid opzoeken, als gevonden, hoeveelheid veranderen naar qty
 *
 *	:NOTE:
 *		Redirect na de update, maar deze hoort niet hier thuis,
 *		maar moet door de bovenliggende code afgehalndeld worden.
 *
 *	@param string artid : identifier vh. artikel.
 *	@param int qty : hoeveelheid v. dat artikel.
 *****/
function updateQty(artid,qty)
{
	var i=-1;
	var cart=getItems();
	while( cart[++i] )
	{
		var item=cart[i].split('/');
		if( item[0]==artid )
		{
			item[1]=parseInt( qty );
		}
		cart[i]=item[0]+"/"+item[1];
	}
	placeItems(cart);
}


//	WRAPPER FUNCTIONS

/*****
 *	do_delete()
 *	delete een specifiek item van de cart.
 *
 *	@param string id : identifier vh. artikel
 *****/
function do_delete( id )
{
	deleteItem( id );
	alert( 'Item ' + id + ' deleted' );
	document.location.href = jump_url;
}


/*****
 *	do_add()
 *	Voeg een bepaalde hoeveelheid ve. artikel toe aan de shopping cart.
 *
 *	@param string artid : identifier vh. artikel
 *	@param int qty : hoeveelheid
 *	@param string produkt : productbeschrijving vh. artikel.
 *****/
function do_add( artid, qty, produkt )
{
	if (!checkQty( qty ))
	{
		alert ('Not a valid quantity!');
		return false;
	}

	addItem( artid, qty );
	alert( qty + ' X ' + produkt + " added to your shopping basket." );
}

/*****
 *	do_update()
 *	Update de hoeveelheid van een bepaald product.
 *
 *	@param string artid : identifier vh. artikel
 *	@param int qty : hoeveelheid
 *****/
function do_update( artid, qty )
{
	if (!checkQty( qty ))
	{
		alert ('Not a valid quantity!');
		return false;
	}

	updateQty( artid, qty );
	document.location.href = jump_url;
}


function do_delCart()
{
	deleteCart();
	document.location.href = jump_url;
}


