/* Set up the MyProducts object */
MyProducts = {
	htmlIDs: {
		currentNum: 'myproducts-count-val',
		viewProducts: 'link_basket'
	},
	htmlClasses: {
		result: 'result',
		addProductLink: 'add-product-link'
	}
};

/* MyProducts.updateIcon = function (elemObj,responseText) {
	$(elemObj).innerHTML = responseText;
} */

//
MyProducts.hideOrShow = function(isShow) {
	if (typeof isShow == "undefined") { isShow = MyProducts.getNum() > 0; }

	var container = $(MyProducts.htmlIDs.viewProducts);
	if (container == null) { return; }
	container.style.visibility = ( isShow ? "" : "hidden");

}

MyProducts.removeAndHideParent = function(elem) {
	var parent =elem.parentNode;

	// Remove child, and parent too, if it's empty
	parent.removeChild(elem);
	if (parent.childNodes.length ==0) parent.parentNode.removeChild(parent);
}

// Remove a result from the DOM tree, nicely
MyProducts.removeResult = function(elemObj,responseText) {
	MyProducts.updateNum(elemObj,responseText,false);

	var atEnd = false;

	var formID = elemObj.id.replace(/form-product-container-/,"result-");

	var parent = $(formID).parentNode;
	parent.removeChild($(formID));

	var results = document.getElementsByClassName(MyProducts.htmlClasses.result);

	// Remove any empty nodes
	for (var i = 0; i < results.length; i++) {
		if( (results[i].childNodes.length == 1) && (results[i].childNodes[0].nodeType == 3) ) {
			results[i].parentNode.removeChild(results[i]);
			results.splice(i,1);
			i--;
		}
	}

	// If we've just deleted our last product, reload the page.
	if (MyProducts.getNum() == 0) {
		alert('You have removed all your products.');
		window.location.reload(true);
	}

	for(var i = 0; i < results.length; i++) {
		var newClassName = 'cell-' + ((i+1)%2);
		var wrongClassName = 'cell-' + (i%2);
		// Change class name
		if (Element.hasClassName(results[i],wrongClassName)) {
			Element.removeClassName(results[i],wrongClassName);
			Element.addClassName(results[i],newClassName);
			// If at start of row, move to end of other row
			if ((newClassName == 'cell-0') && (i>0) ) {
				results[i-1].parentNode.appendChild(results[i]);
			}
		}
	}
	// If we now have an odd number of elements, extend the final row
	if (((results.length % 2) == 1) && !atEnd) {
		//var lastNode = document.createElement('div');
		//Element.addClassName(lastNode,'result filler cell cell-0');
		//lastNode.appendChild(document.createTextNode('&nbsp'));
		//lastNode.appendChild(document.createElement('br'));
		//results[results.length-1].parentNode.appendChild(lastNode);
	}
}

function addOrRemoveNoForm(aTag, containerID) {
	// Tell the script we're doing an AJAX request
	var pars = "is_ajax=true&" + aTag.href.replace(/^([^?]+)\?/, "");
	var url = aTag.href.replace(/\?.*/, "");

	// Do we want an icon or link returning?
	if (pars.indexOf('redirect_to=product') != -1) {
		pars = pars + '&use_icon=true';
	}
	if (pars.indexOf('redirect_to=subsector') != -1) {
		pars = pars + '&use_icon=true&use_link=false&tiny_icon=true';
	}

	// Prevent IE cacheing
	pars = pars + '&iecache=' + Math.random();

	// Start options object
	var options = {
		  method: 'get',
		  parameters: pars
	};

	if (pars.indexOf('redirect_to=myproduct') != -1) {
		options.insertion = MyProducts.removeResult;
		options.parameters = options.parameters + '&just_id=true';
	} else {
		options.insertion = MyProducts.updateNum;
	}


	// Make AJAX request
	var MyAjax = new Ajax.Updater(
		containerID,
		url,
		options
		);

	// Disable FORM submission
	return false;
}

MyProducts.updateNum = function (elemObj,responseText,changeIcon) {
	// Do we want to bother changing the icon, or is it all going to be
	// removed from the DOM anyway?
	if (typeof changeIcon == "undefined") {
		var changeIcon = true;
	}
	if (changeIcon) {
		elemObj.innerHTML = responseText;
		if (responseText.indexOf("add-product-link") == -1) {
			Effect.Pulsate(elemObj, {duration: 1.0} );
		}
	}

	// What's our current product number?
	if ($(MyProducts.htmlIDs.currentNum) == null) {return;}

	var currentNum = MyProducts.getNum();

	// Check the content of the text - if it contains an add link
	// then we've just deleted a product!
	if (responseText.indexOf(MyProducts.htmlClasses.addProductLink) != -1 ) {
		MyProducts.setNum(currentNum-1);
	} else {
		MyProducts.setNum(currentNum+1);
	}

	// Check the container is visible
	MyProducts.hideOrShow(true);

}

MyProducts.getNum = function() {
	var elem = $(MyProducts.htmlIDs.currentNum);
	if (elem == null) { return 0; }
	var num = parseInt(elem.innerHTML);
	if (isNaN(num)) { return 0; }
	return num;
}

MyProducts.setNum = function(newNum) {
	if (newNum >= 0) {
		$(MyProducts.htmlIDs.currentNum).innerHTML = newNum;
	} else {
		$(MyProducts.htmlIDs.currentNum).innerHTML = '0';
	}
}

// Parse to XML, cross-browser using Prototype
MyProducts.parseToXML = function(txtDoc) {
	var xmlDoc = Try.these(
		function() { return new DOMParser().parseFromString(txtDoc, 'text/xml'); },
		function() { var xmldom = new ActiveXObject('Microsoft.XMLDOM'); xmldom.loadXML(txtDoc); return xmldom; },
		function() { return '<foo/>'; }
	);
	return xmlDoc;
}
