/*
AJAX.JS
AJAX programming
*/

var container;
var original = new Object();
var switched = new Object();
var parent   = new Object();


function init_ajax(div) {
	container = document.getElementById(div);
}

function addToBasket(obj) {
	form       = (obj.nodeName != "FORM") ? getParentForm(obj) : obj;
	submission = collateFormData(form);
	
	replaceControls(obj, "large");
	
	// do AJAX submit
	ajax = createAJAXObject();
	
	ajax.onreadystatechange = updateBasketView;
	
	ajax.open(form.method, form.action, true);
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	ajax.send(submission);
	
	return false;
}

function removeFromBasket(obj, basket, id) {
	switch (basket) {
		case "mini":
			replaceControls(obj, "small");
			break;
		
		case "full":
			replaceControls(obj, "mid");
			break;
	}
	
	// do AJAX submit
	ajax = createAJAXObject();
	
	ajax.onreadystatechange = updateBasketView;

	ajax.open("GET", "/lib/php/process_order.php?action=del&basket=" + basket + "&id=" + id, true);
	ajax.send(null);
	
	return false;
}

function submitForm(obj, ui_replace) {
	form = (obj.nodeName != "FORM") ? getParentForm(obj) : obj;
	

	// collect form data
	submission = collateFormData(form);
	if (ui_replace != false) replaceControls(obj, ui_replace);
	
	// do AJAX submit
	ajax = createAJAXObject();
	
	ajax.onreadystatechange = updateBasketView;
	
	ajax.open(form.method, form.action, true);
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	ajax.send(submission);

	return false;
}

function sendMessage(obj, ui_replace) {
	var form = (obj.nodeName != "FORM") ? getParentForm(obj) : obj;
	
	// validate form first
	if (validateForm(form)) {
		submission = collateFormData(form);
		
		if (ui_replace != false) replaceControls(obj, ui_replace);
		
		// do AJAX submit
		ajax = createAJAXObject();
		
		// custom properties
		ajax.outputContainer = form;
		
		ajax.onreadystatechange = reportMessageSend;
		
		ajax.open(form.method, form.action, true);
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		ajax.send(submission);
	}
	
	return false;
}


/* AJAX functions */
function createAJAXObject() {
	var obj;
	
	try {
		// Firefox, Opera 8.0+, Safari
		obj = new XMLHttpRequest();
	}
	catch (e) {
		try {
			// Internet Explorer 6
			obj = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {
			// we could catch IE5.5 here
		}
	}
	
	return obj;
}

function updateBasketView() {
	if (ajax.readyState == 4) {
		container.innerHTML = (ajax.status == 200) ? ajax.responseText : "<p class=\"err\"><strong>Cannot display basket</strong><br />A problems has occured loading the required content<br />HTTP code " + ajax.status + "</p>";
		
		try {
			restoreControls();
		}
		catch (e) {
		}
	}
}

function reportMessageSend() {
	if (ajax.readyState == 4) {
		var obj     = ajax.outputContainer;
		var report  = document.createElement("P");
		
		var css     = (ajax.status == 200 && ajax.responseText == "ok") ? "report yes" : "report no";
		var msg;
		// var msg     = (ajax.status == 200 && ajax.responseText == "ok") ? "<a href=\"#dismiss\" onclick=\"return dismiss(this);\">Message sent! We&#8217;ll get back to you as soon as we can&#8230;</a>" : "<a href=\"#dismiss\" onclick=\"return dismiss(this);\">Sorry, but your message didn&#8217t send&#8230;try again later (" + ajax.status + ")</a>";
		if (ajax.status == 200) {
			switch (ajax.responseText) {
				case "ok":
					msg = "<a href=\"#dismiss\" onclick=\"return dismiss(this);\">Message sent! We&#8217;ll get back to you as soon as we can&#8230;</a>";
					break;
				
				case "spam":
					msg = "<a href=\"#dismiss\" onclick=\"return dismiss(this);\">Possible spam! Please remove the URL from the message&#8230;</a>";
					
					break;
				
				default:
					msg = "<a href=\"#dismiss\" onclick=\"return dismiss(this);\">Sorry, but your message didn&#8217t send&#8230;try again later (" + ajax.status + ", " + ajax.responseText + ")</a>";
			}
		}
		else {
			msg = "<a href=\"#dismiss\" onclick=\"return dismiss(this);\">Sorry, but your message didn&#8217t send&#8230;try again later (" + ajax.status + ")</a>";
		}
		
		report.className = css;
		report.innerHTML = msg;
		
		if (obj.firstChild.nodeName == "P" && hasCSSClass(obj.firstChild, "report")) {
			obj.removeChild(obj.firstChild);
		}
		
		obj.insertBefore(report, obj.firstChild);
		
		if (ajax.status == 200 && ajax.responseText == "ok") { obj.reset() }
		
		try {
			restoreControls();
		}
		catch (e) {
		}
	}
}
