	var ajax;
	
	runAjaxGet = function(action,response,params) {
		var ajax = new Ajax.Request(
				action,
				{ method:'get', parameters:params, onComplete: response });
	}
	
	runAjaxPost = function(frm, response) 
	{
		var ajax = new Ajax.Request(
				$(frm).action,
				{ method:'post', parameters: $(frm).serialize(true), onComplete: response });
	}

	runAjaxPostNoForm = function(action, response) 
	{
		var ajax = new Ajax.Request(
				action,
				{ method:'post', parameters: 'a=1', onComplete: response });
	}

	runResponse = function(res) 
	{

		if (res.responseText != "") {
			var msg = $('msg');
			msg.innerHTML = '';
			content = res.responseText.replace(/^\s+|\s+$/g,"");
			content = content.split('|');
			if (content[2] == null) content[2] = 'err';

			if (content[0] == 'RED'){
				location.href = content[1];

			} else if (content[0] == 'MSG'){
				if (content[2] == 'ok') {
					document.forms[0].reset()
					$('formContent').innerHTML = content[1];
				} else {
					msg.innerHTML = content[1];
					msg.style.display = "block";
					msg.className = 'msg'+content[2];
				}

			} else if (content[0] == 'VALID') {
				validateThis = true;
				valid.reset();
				valid.validate();
				validateThis = false;
				
			} else {
				alert(res.responseText);
			}

		}
	}

// ******************
// DO NOTHING
// ******************

	doNothing = function() {
		return;
	}

// ******************
// FAVOURITES
// ******************
	favourite = function(id,action)
	{
		var ajax = new Ajax.Request(
				"/common/ajax_favourites/"+id+"/"+action,
				{ onComplete: resFavourites });
	}
	
	resFavourites = function(rt) {
		c = rt.responseText.split('|');
		if (c[0] == 'add' || c[0] == 'del') window.location.reload();
		else alert(rt.responseText)
	}
	
// ******************
// CART
// ******************	
	add_to_cart = function(id) 
	{
		runAjaxPostNoForm('/checkout/add_to_cart/'+id+'/ajax/3',runCartResponse);
	}

	remove_from_cart = function(id) 
	{
		if (confirm('You sure you want to remove this item from your shopping cart?'))
			runAjaxPostNoForm('/checkout/remove_from_cart/'+id+'/',runCartRefresh);
	}

	runCartRefresh = function() {
		window.location.reload();
	}
	
	runCartResponse = function(res) {
		//if (res.responseText.trim() == '') window.location.reload()
		//else alert(res.responseText)
		$('cartQty').innerHTML="(Quantity "+res.responseText+")";
		$('cartTotalCount').innerHTML= res.responseText;
		$('purchaseButton').className="tick";
	}

	cartUpdatePostage = function(val) {
		$('cartPostage').innerHTML = val;
		val = parseFloat($('cartSubTotal').innerHTML) + parseFloat(val);
		$('cartTotal').innerHTML = val.toFixed(2);
//		$('carTotalPaymentAmount').value= val.toFixed(2);
	}
	
	cartTestQty = function(field) {
		val = field.value;
		if (val == '' || val == '0' || val == '00' || val == '000') field.value = '1';
	}
	
	cartUpdateQty = function(field,id,num) {
		val = field.value;
		if (val == '' || val == '0' || val == '00' || val == '000') val = '1';
		
		amount = 0;
		
		

		for (i = 1; i <= $('cartCount').value; i++) {
			if (i == num) {
				$('total_amount_'+i).innerHTML = (parseFloat(val)*parseFloat($('amount_'+i).value)).toFixed(2);
				amount += parseFloat(val)*parseFloat($('amount_'+i).value);
			} else {
				amount += parseFloat($('quantity_'+i).value)*parseFloat($('amount_'+i).value);
			}
		}		
		
		$('cartSubTotal').innerHTML = amount.toFixed(2);
		val2 = parseFloat($('cartSubTotal').innerHTML) + parseFloat($('cartPostage').innerHTML);
		$('cartTotal').innerHTML = val2.toFixed(2);
		
		runAjaxPostNoForm('/action/cart/updateqty/'+id+'/'+val+'/',doNothing);
	}

	temp_id = '';

	run_vote = function(frm,id) {
		temp_id = id;
		runAjaxPost(frm,runVoteResponse)
	}

	runVoteResponse = function () {
		votes = 0;
		['all','topvote','recent','tag','favourites','art','surprise_me','search'].each(function(s) {
			if ($("voted_"+temp_id+"_"+s)) votes = parseFloat(($$("#voted_"+temp_id+"_"+s+" .button-vote span")[0]).innerHTML.split(' ')[0]);
		});
		['all','topvote','recent','tag','favourites','art','surprise_me','search'].each(function(s) {
			if ($("voted_"+temp_id+"_"+s)) $("voted_"+temp_id+"_"+s).innerHTML = "<span>"+(votes+1)+" Votes!</span>";
		});
	}
	
	run_vote_ind = function(frm,id) {
		runAjaxPost(frm,runVoteIndResponse)
	}

	runVoteIndResponse = function () {
		votes = parseFloat(($("numVotes").innerHTML).split("<")[0]);
		$("castVoteButton").innerHTML = '<span class="voted">Thanks for voting!</span>';
		$("numVotes").innerHTML = (votes+1)+'<span>Votes!</span>';
	}

// ******************
// FUNCTIONS
// ******************
	numOnly = function(e)
	{
		var keynum;
		var keychar;
		var numcheck;
		
		if(window.event) // IE
			keynum = e.keyCode;
		else if(e.which) // Netscape/Firefox/Opera
			keynum = e.which;
		keychar = String.fromCharCode(keynum);
		numcheck = /[0-9]+/g;
		return numcheck.test(keychar);
	}

String.prototype.trim=function(){
    return this.replace(/^\s*|\s*$/g,'');
}
	