var onDocumentReady =
{
	onload: [],
	loaded: function()
	{
		if (arguments.callee.done) return;
		arguments.callee.done = true;
		for (i = 0;i < onDocumentReady.onload.length;i++) onDocumentReady.onload[i]();
	},
	load: function(fireThis)
	{
		this.onload.push(fireThis);
		if (document.addEventListener) 
			document.addEventListener("DOMContentLoaded", onDocumentReady.loaded, null);
		if (/KHTML|WebKit/i.test(navigator.userAgent))
		{ 
			var _timer = setInterval(function()
			{
				if (/loaded|complete/.test(document.readyState))
				{
					clearInterval(_timer);
					delete _timer;
					onDocumentReady.loaded();
				}
			}, 10);
		}
		/*@cc_on @*/
		/*@if (@_win32)
		var proto = "src='javascript:void(0)'";
		if (location.protocol == "https:") proto = "src=//0";
		document.write("<scr"+"ipt id=__ie_onload defer " + proto + "><\/scr"+"ipt>");
		var script = document.getElementById("__ie_onload");
		script.onreadystatechange = function() {
		    if (this.readyState == "complete") {onDocumentReady.loaded();}
		};
		/*@end @*/
	   window.onload = onDocumentReady.loaded;
	}
};


// To cover IE 5.0's lack of the push method
Array.prototype.push = function(value)
{
	this[this.length] = value;
}
function getElementsByClassName(strClass, strTag, objContElm)
{
	strTag = strTag || "*";
	objContElm = objContElm || document;
	var objColl = objContElm.getElementsByTagName(strTag);
	if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
	var arr = new Array();
	var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
	var arrClass = strClass.split(delim);
	for (var i = 0, j = objColl.length; i < j; i++)
	{
		var arrObjClass = objColl[i].className.split(' ');
		if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
		var c = 0;
		comparisonLoop:
		for (var k = 0, l = arrObjClass.length; k < l; k++)
		{
			for (var m = 0, n = arrClass.length; m < n; m++)
			{
				if (arrClass[m] == arrObjClass[k]) c++;
				if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length))
				{
					arr.push(objColl[i]);
					break comparisonLoop;
				}
			}
		}
	}
	return arr;
}


IKCart = {
	cart_element: "cart",
	prod_element: "page",
	base_url: "http://iconkits.com/",
	act: 36,
	http: null,

	init: function()
	{
		IKCart.fetch_xhr();
		IKCart.attach_onclick("remove", "a", IKCart.cart_element);	// shopping cart
		IKCart.attach_onclick("ikcart_link", "a", IKCart.prod_element);	// product_listing
	},

	fetch_xhr: function()
	{
		if (navigator.appName == "Microsoft Internet Explorer")
		{
			_ro = new ActiveXObject("Microsoft.XMLHTTP");
		}
		else
		{
			_ro = new XMLHttpRequest();
		}
		IKCart.http = _ro;
	},

	handle_response: function()
	{
		if (IKCart.http.readyState == 4 && IKCart.http.status == 200)
		{
			if (cart_elem = document.getElementById(IKCart.cart_element))
			{
				cart_elem.innerHTML = IKCart.http.responseText;
				IKCart.attach_onclick("remove", "a", IKCart.cart_element);	// shopping cart
				if (upd_elem = document.getElementById("updater"))
				{upd_elem.style.display="none";}
			}
		}
	},

	attach_onclick: function(link_class, tagname, container_element)
	{
		var items = getElementsByClassName(link_class, tagname, document.getElementById(container_element));
		if (items.length > 0)
		{
			for (var i = 0, j = items.length; i < j; i++)
			{
				items[i].onclick= function() { IKCart.update(this); return false; };
			}
		}
	},

	update: function(elem)
	{
		if (upd_elem = document.getElementById("updater"))
		{
			upd_elem.style.display = "block";
		}

		_params = elem.href.split("/");
		_url_title = _params[5];

		if (elem.className == "ikcart_link remove_from_cart" || elem.className == "remove")
		{
			_mode = "remove";
			_prod_class = "kit";
			_link_class = "ikcart_link add_to_cart";
		}
		else if (elem.className == "ikcart_link add_to_cart")
		{
			_mode = "add";
			_prod_class = "kit added";
			_link_class = "ikcart_link remove_from_cart";
		}

		IKCart.http.open("get", IKCart.base_url+"cart/"+_mode+"/"+_url_title+"/js/"+IKCart.rnd()+"/", true);
		IKCart.http.onreadystatechange = IKCart.handle_response;
		IKCart.http.send(null);

		if (prod_elem = document.getElementById("product_"+_url_title))
		{
			prod_elem.className = _prod_class;
		}
		if (link_elem = document.getElementById("link_"+_url_title))
		{
			link_elem.className = _link_class;
		}

		return false;
	},

	empty: function()
	{
		IKCart.http.open("get", IKCart.base_url+'?ACT='+IKCart.act+'&ikcart_mode=empty'+IKCart.rnd(), true);
		IKCart.http.onreadystatechange = IKCart.handle_response;
		IKCart.http.send(null);
	},

	rnd: function ()
	{
		return new Date().getTime();
	}

};

onDocumentReady.load(function()
{IKCart.init();});
