var xhr_cart;

function encodeforuri(str) {
	return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
	replace(/\)/g, '%29').replace(/\*/g, '%2A');
}

function redirectpage(url)
{
	window.location = url;
}

function sltoggledetails(elem)
{
	var detailselem = elem.parentNode.parentNode.lastChild;
	if ((detailselem.className != 'simple-list-details') || (!detailselem.innerHTML)) return(false);
	detailselem.style.display = (detailselem.style.display == 'none' ? 'block' : 'none');
}

function setloadingstatus(state)
{
	var loadingstatus = document.getElementById('loadingstatus');
	loadingstatus.style.display = (state > 0 ? 'block' : 'none');
}

function xhr()
{
	if (window.XMLHttpRequest != null) {
		return(new XMLHttpRequest());
	}
	else if (window.ActiveXObject != null) {
		var progIDs = [
			'Msxml2.DOMDocument.7.0',
			'Msxml2.DOMDocument.6.0',
			'Msxml2.DOMDocument.5.0',
			'Msxml2.DOMDocument.4.0',
			'Msxml2.DOMDocument.3.0',
			'Msxml2.DOMDocument',
			'Microsoft.XMLHTTP'
		];

		for (var i = 0; i < progIDs.length; i++) {
			try {
				var xmlDOM = new ActiveXObject(progIDs[i]);
				return xmlDOM;
			}
			catch (ex) {}
		}
	}
	else {
		alert('Your browser does not support AJAX');
		return(null);
	}
}

function toggledescription(elem, target, class1, class2, label1, label2)
{
	var element = document.getElementById(elem);
	var targetelem = document.getElementById(target);

	if (targetelem) targetelem.className = (targetelem.className == class1 ? class2 : class1);
	if (element) element.innerHTML = (element.innerHTML == label1 ? label2 : label1);
}

function setshade(state, content)
{
	var shade = document.getElementById('misc-shade');
	if (content) shade.innerHTML = content;
	shade.style.display = (state > 0 ? 'block' : 'none');
}

function toggledisplay(id1, id2, display1, display2)
{
	var obj1 = document.getElementById(id1);
	var obj2 = document.getElementById(id2);
	if (!display1) display1 = 'none';
	if (!display2) display2 = 'inline';

	obj1.style.display = (obj1.style.display == display1 ? display2 : display1);
	obj2.style.display = (obj2.style.display == display1 ? display2 : display1);
}

function infopagetoggle(id, togglerlabel1, togglerlabel2)
{
	var infopage	= document.getElementById(id);
	var togglebtn	= document.getElementById('info-page-toggle');
	var submitbtn	= document.getElementById('info-page-edit-submit');

	infopage.className = (infopage.className == 'info-page-edit' ? 'info-page-view' : 'info-page-edit');
	submitbtn.disabled = (infopage.className == 'info-page-edit' ? false : true);
	if (togglerlabel1 && togglerlabel2)
		togglebtn.value = (togglebtn.value == togglerlabel1 ? togglerlabel2 : togglerlabel1);
}

function toggleclassalt(id, class1, class2)
{
	var objectid = document.getElementById(id);
	if (objectid) objectid.className = (objectid.className == class1 ? class2 : class1);
}

function togglenextclass(element, class1, class2, label1, label2)
{
	if (element)
	{
		if (element.nextElementSibling)
			element.nextElementSibling.className = (element.nextElementSibling.className == class1 ? class2 : class1);
		element.innerHTML = (element.innerHTML == label1 ? label2 : label1);
	}
}

function xhrcart(mode, url, data)
{
	xhr_cart = xhr();
	switch(mode)
	{
		case 'add'		: xhr_cart.onreadystatechange = cartaddresult; break;
		case 'remove'	: xhr_cart.onreadystatechange = cartremoveresult; break;
		default:
			 xhr_cart.onreadystatechange = cartviewresult; break;
	}

	setshade(1);
	setloadingstatus(1);
	xhr_cart.open((mode == 'view' ? 'get' : 'post'), url, true);
	xhr_cart.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xhr_cart.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
	xhr_cart.send((mode == 'view' ? null : data));
}

function cartadditem(id)
{
	if (id > 0)
	{
		var actionurl	= document.getElementById('form_action').value;
		var productid	= document.getElementById('form_productid').value;
		var typeid		= document.getElementById('form_producttype_' + id).value;
		var sizeid		= document.getElementById('form_productsize_' + id).value;
		var color		= document.getElementById('form_productcolor_' + id).value;
		var quant		= document.getElementById('form_productquant_' + id).value;

		if (quant < 1) return(false);

		var data = 'product=' + encodeforuri(productid) + '&type=' + encodeforuri(typeid)
					+ '&size=' + encodeforuri(sizeid) + '&color=' + encodeforuri(color) + '&quantity=' + encodeforuri(quant);

		xhrcart('add', actionurl, data);
	}
}


function cartaddresult()
{
	if (xhr_cart.readyState == 4 && xhr_cart.status == 200)
	{
		var cart = document.getElementById('cart-info-total');

		if (xhr_cart.responseText == 'MAX')
		{
			document.getElementById('cart-item-label').innerHTML = '';
			cart.className = 'misc-highlight';
		}
		else
		{
			cart.className = '';
			document.getElementById('cart-item-label').innerHTML = document.getElementById('cart-item-label-' + (xhr_cart.responseText > 1 ? 'plural' : 'singular')).value;
		}

		if (cart.innerHTML < xhr_cart.responseText && xhr_cart.responseText != 'MAX')
			document.getElementById('cart-newitem').style.display = 'inline';

		cart.innerHTML = xhr_cart.responseText;
		setshade(0);
		setloadingstatus(0);
		document.body.scrollIntoView();
	}
}

function cartremoveitem(id)
{
	if (id > 0)
	{
		var actionurl	= document.getElementById('cart-remove-url').value;
		var itemid		= document.getElementById('cart-item-id_' + id).value;

		var data =  'id=' + encodeforuri(itemid);
		xhrcart('remove', actionurl, data);
	}
}

function cartremoveresult()
{
	if (xhr_cart.readyState == 4 && xhr_cart.status == 200)
	{
		var cart = document.getElementById('cart-info-total');

		cart.innerHTML = xhr_cart.responseText;
		document.getElementById('cart-item-label').innerHTML = document.getElementById('cart-item-label-' + (xhr_cart.responseText > 1 ? 'plural' : 'singular')).value;
		cartview();
	}
}

function cartview()
{
	var actionurl = document.getElementById('cart-view-url').value;
	xhrcart('view', actionurl);
}

function cartviewresult()
{
	if (xhr_cart.readyState == 4 && xhr_cart.status == 200)
	{
		document.getElementById('main-content').innerHTML = xhr_cart.responseText;
		setshade(0);
		setloadingstatus(0);
	}
}

function cartapplypoint(id)
{
	if (id > 0)
	{
		var actionurl	= document.getElementById('cart-applypoint-url').value;
		var itemid		= document.getElementById('cart-item-id_' + id).value;
		var pointvalue	= document.getElementById('point-used-input_' + id).value;

		var data = 'id=' + encodeforuri(itemid) + '&pointvalue=' + encodeforuri(pointvalue);
		xhrcart('point', actionurl, data);
	}
}

function savemonogram(id)
{
	if (id > 0)
	{
		var actionurl	= document.getElementById("cart-savemonogram-url").value;
		var itemid		= document.getElementById("cart-item-id_" + id).value;
		var monogramtext= document.getElementById("monogram-input_" + id).value;
		var monogramquant= document.getElementById("monogram-quant_" + id).value;

		var data = 'id=' + encodeforuri(itemid) + '&monogramtext=' + encodeforuri(monogramtext) + '&monogramquant=' + encodeforuri(monogramquant);
		xhrcart('monogram', actionurl, data);
	}
}

function pointinput(e)
{
	var qi = (window.Event ? e.which : e.keyCode);
	if (qi == 8 || qi == 9 || qi == 46 || qi == 190) return(true);
	if (!String.fromCharCode(qi).match(/\d/)) return(false);
}

function toggleclass(element, class1, class2)
{
	if (element)
		element.className = (element.className == class1 ? class2 : class1);
}

function toggleeditorder()
{
	var name	= document.getElementById('checkout_name');
	var address	= document.getElementById('checkout_address');
	var postcode= document.getElementById('checkout_postcode');
	var phone	= document.getElementById('checkout_phone');
	var info	= document.getElementById('checkout_info');

	toggleclass(name, 'misc-inline-block', 'misc-hidden');
	toggleclass(address, 'misc-inline-block', 'misc-hidden');
	toggleclass(postcode, 'misc-inline-block', 'misc-hidden');
	toggleclass(phone, 'misc-inline-block', 'misc-hidden');
	toggleclass(info, 'misc-inline-block', 'misc-hidden');

	toggleclass(name.nextElementSibling, 'misc-inline-block', 'misc-hidden');
	toggleclass(address.nextElementSibling, 'misc-inline-block', 'misc-hidden');
	toggleclass(postcode.nextElementSibling, 'misc-inline-block', 'misc-hidden');
	toggleclass(phone.nextElementSibling, 'misc-inline-block', 'misc-hidden');
	toggleclass(info.nextElementSibling, 'misc-inline-block', 'misc-hidden');

	toggleclass(document.getElementById('checkout_ok'), 'misc-inline-block', 'misc-hidden');
}

function saveeditorder()
{
	var name	= document.getElementById('checkout_name');
	var address	= document.getElementById('checkout_address');
	var postcode= document.getElementById('checkout_postcode');
	var phone	= document.getElementById('checkout_phone');
	var info	= document.getElementById('checkout_info');

	name.nextElementSibling.innerHTML 		= name.value;
	address.nextElementSibling.innerHTML	= address.value;
	postcode.nextElementSibling.innerHTML	= postcode.value;
	phone.nextElementSibling.innerHTML		= phone.value;
	info.nextElementSibling.innerHTML		= info.value;

	toggleeditorder();
}

function showone(prefix, howmany, whichone)
{
	var i;
	if (howmany < 1 || whichone < 1) return(false);

	for (i = 1; i <= howmany; i++)
	{
		var obj = document.getElementById(prefix + i);
		if (obj) obj.style.display = (i == whichone ? 'inline' : 'none');
	}
}

function swapimage(imgobjid, newimgobj)
{
	var imgobj		= document.getElementById(imgobjid);
	var temp		= imgobj.src;

	imgobj.parentNode.href = newimgobj.src.replace(/(.)\/([^\/]+)\.(.+)$/, 'o/$2.$3');
	imgobj.src		= newimgobj.src.replace(/(.)\/([^\/]+)\.(.+)$/, 'd/$2.$3');
	newimgobj.src	= temp.replace(/(.)\/([^\/]+)\.(.+)$/, 's/$2.$3');
}

function filterimg(elem, filtersetting)
{
	if (!filtersetting) filtersetting = 'ske';
	elem.src = elem.src.replace(/([^\/]+)\/([^\/]+)\.(.+)$/, '$1-' + filtersetting + '/$2.$3');
}

function unfilterimg(elem)
{
	elem.src = elem.src.replace(/([a-z])(-[^\/]+){0,1}\/([^\/]+)\.(.+)$/, '$1/$3.$4');
}

function imageservurl(url, newserv, newtype, newfile, download)
{
	if (url.length < 1) return(false);
	var newurl, segments, startseg;

	if (newtype)
		url = url.replace(/\/(imageserv)(-download){0,1}\/([^\/]+)\/([^\/]+)\/(.+)$/, '/$1$2/'+newtype+'/$4/$5');
	if (newserv)
		url = url.replace(/\/(imageserv)(-download){0,1}\/([^\/]+)\/([^\/]+)\/(.+)$/, '/$1$2/$3/'+newserv+'/$5');
	if (newfile)
		url = url.replace(/\/(imageserv)(-download){0,1}\/([^\/]+)\/([^\/]+)\/(.+)$/, '/$1$2/$3/$4/'+newfile);
	if (download)
		url = url.replace(/\/(imageserv)(-download){0,1}\/([^\/]+)\/([^\/]+)\/(.+)$/, '/imageserv-download/$2/$3/$4/$5');
	return(url);
}

function quantinput(e)
{
	var qi = (window.Event ? e.which : e.keyCode);
	if (qi == 8 || qi == 9 || qi == 46) return(true);
	if (!String.fromCharCode(qi).match(/\d/)) return(false);
}

function adjustprice(quant, rowid)
{
	if (!quant) quant = 0;
	var obj		= document.getElementById('productitemprice_' + rowid);
	var stype	= document.getElementById('form_producttype_' + rowid);
	var ssize	= document.getElementById('form_productsize_' + rowid);
	var price	= document.getElementById('product_price_' + stype.value + '_' + ssize.value);
	if (!price) price = document.getElementById('product_price_' + stype.value + '_0');
	var val		= (!price ? 0 : price.value);

	obj.className = 'misc-right-aligned misc-nowrap product-form-price';
	if (quant > 99999999999999)
	{
		obj.className += ' misc-highlight';
		return(false);
	}

	var price	= (val * quant).toString();
	var last	= price.length - 1;
	var newprice= '';
	for (var i = last; i >= 0; i--)
		newprice = price[i] + (((last - i) % 3 == 0) && (i != last) ? '.' : '') + newprice;
	obj.innerHTML = 'Rp ' + newprice + ',00';
}

function productform_changesize(rowid)
{
	var quant		= document.getElementById('form_productquant_' + rowid);
	var discount	= document.getElementById('product_discount');
	var oldprice	= document.getElementById('productoldprice_' + rowid);
	var stype		= document.getElementById('form_producttype_' + rowid);
	var ssize		= document.getElementById('form_productsize_' + rowid);
	var price		= document.getElementById('product_price_' + stype.value + '_' + ssize.value);

	/* i hate math >:( */
	var nprice		= (parseInt(price.value) / (100 - parseInt(discount.value)) * 100).toString();
	var last		= nprice.length - 1;
	var newprice	= '';
	for (var i = last; i >= 0; i--)
		newprice = nprice[i] + (((last - i) % 3 == 0) && (i != last) ? '.' : '') + newprice;
	oldprice.innerHTML = 'Rp ' + newprice + ',00 &#215; 1';

	adjustprice(quant.value, rowid);
}

function sharebox(state)
{
	var box = document.getElementById('sharebox');
	setshade(state);
	box.style.display = (state > 0 ? 'block' : 'none');
	if (state < 1) window.location.reload();
	/*centerizeobject(box);*/
}

function selectimage(next)
{
	var currentid = document.getElementById('fsg-currentid');
	var ilist = document.getElementById('fsg-imagelist-container');
	var currentimage = document.getElementById('fsg-currentimage');

	var newid = (next > 0 ? ++currentid.value : --currentid.value);
	if (newid < 0) newid = (ilist.options.length - 1); // negative % positive results NaN in js
	currentimage.src = ilist.options[ (newid % ilist.options.length) ].text;
	currentid.value = newid;
}

function fsgallery(state, img)
{
	var container, shade;

	var container	= document.getElementById('fsgallery-container');
	var shade		= document.getElementById('fsgallery-shade');

	shade.style.display = (state > 0 ? 'block' : 'none');

	if (state < 1) container.style.display = 'none';
	else
	{
		container.style.visibility = 'hidden';
		container.style.display = 'block';

		var imgcontainer= document.getElementById('fsg-image-container');
		var currentid	= document.getElementById('fsg-currentid');
		var ilist		= document.getElementById('fsg-imagelist-container');
		var docwidth	= windowwidth();
		var contwidth	= container.scrollWidth;
		var leftpos		= (parseInt(docwidth) - parseInt(contwidth)) / 2;
		var startimage	= imageservurl(img, 'b');
		var imgid		= 0;
		var i			= 0;

		for (i = 0; i < ilist.options.length; i++)
		{
			if (startimage == ilist.options[i].text)
				imgid = i;
		}

		currentid.value				= imgid;
		container.style.left		= leftpos + 'px';
		imgcontainer.innerHTML		= '<img src="' + startimage + '" id="fsg-currentimage">';
		container.style.visibility	= 'visible';
		document.body.scrollIntoView();
	}
}

function windowwidth()
{
	if (self.innerWidth)
		return(self.innerWidth);
	else if (document.documentElement && document.documentElement.clientWidth)
		return(document.documentElement.clientWidth);
	else if (document.body)
		return(document.body.clientWidth);
}

function windowheight()
{
	if (self.innerHeight)
		return(self.innerHeight);
	else if (document.documentElement && document.documentElement.clientHeight)
		return(document.documentElement.clientHeight);
	else if (document.body)
		return(document.body.clientHeight);
}

function centerizeobject(obj)
{
	if (typeof obj === "string") obj = document.getElementById(obj);
	if (!obj) return;

	var newx = parseInt((parseInt(windowwidth()) - parseInt(obj.scrollWidth)) / 2);
	var newy = parseInt((parseInt(windowheight()) - parseInt(obj.scrollHeight)) / 2);

	obj.style.left	= (newx < 10 ? 10 : newx) + 'px';
	obj.style.top	= (newy < 10 ? 10 : newy) + 'px';
}

function productform_changerowbg(elem)
{
	if (!elem) return(false);
	var container = elem.parentNode.parentNode.parentNode;
	var row = elem.parentNode.parentNode;
	for (i = 0; i < container.children.length; i++)
		container.children[i].className = (container.children[i] == row ? 'product-form-highlighted' : '');
}

