/* UTILITY FUNCTION */
function typeOf(value) {
    var s = typeof value;
    if (s === 'object') {
        if (value) {
            if (typeof value.length === 'number' &&
                    !(value.propertyIsEnumerable('length')) &&
                    typeof value.splice === 'function') {
                s = 'array';
            }
        } else {
            s = 'null';
        }
    }
    return s;
}

/* UTILITY FUNCTION */
function isEmpty(o) {
    var i, v;
    if (o == null) {
    	return true;
    }
    if (typeOf(o) === 'object') {
        for (i in o) {
            v = o[i];
            if (v !== undefined && typeOf(v) !== 'function') {
                return false;
            }
        }
    }
    return true;
}

function toggleItem(form_itemid, form_catid) {
	if (document.getElementById('addtocartbutton').value == "Remove from Cart") {
		document.getElementById('addtocartbutton').value = "Add to Cart";
		document.getElementById('cartqty').innerHTML = parseInt(document.getElementById('cartqty').innerHTML)-1;
	} else {
		document.getElementById('addtocartbutton').value = "Remove from Cart";
		document.getElementById('cartqty').innerHTML = parseInt(document.getElementById('cartqty').innerHTML)+1;
	}
	var myAjax = new Ajax.Request(
	'include/cart/itemupdate.php',
	{
		method: 'post', 
		parameters: 'ajax=1&'+form_itemid.name+'='+form_itemid.value+'&'+form_catid.name+'='+form_catid.value,
		onComplete: toggleItemViewUpdate
	});
}

function toggleItemViewUpdate(originalRequest) {
	var response = originalRequest.responseXML;
	if (!isEmpty(response)) {
		var messages = response.getElementsByTagName('message');
		if (!isEmpty(messages)) {
			updateMessages(messages);
			updateCartMessage(messages);
		}
	}
}


function updateFormItemId(form_catid, item_index) {
	if (form_catid) {
		var myAjax = new Ajax.Request(
		'include/javascript/get_image_id.php',
		{
			method: 'post',
			parameters: form_catid.name+'='+form_catid.value+'&item_index='+item_index,
			onComplete: updateFormItemIdValue
		});
	}
}

function updateFormItemIdValue(originalRequest) {
	document.getElementById('itemid').value = originalRequest.responseText;
	clearMessages();
	clearCartMessage();
}

function updateFormButtonText(form_catid, item_index) {
	if (form_catid) {
		var myAjax = new Ajax.Request(
		'include/javascript/is_in_cart.php',
		{
			method: 'post',
			parameters: form_catid.name+'='+form_catid.value+'&item_index='+item_index,
			onComplete: updateFormButtonTextValue
		});
	}
}

function updateMessages(messages) {
	//var response = originalRequest.responseXML;
	if (messages == null) {
		document.getElementById('messages').innerHTML = "";
	}
	var ajaxresponse_string = "";
    for (i=0; i<messages.length; i++) {
    	if (messages[i].getAttribute("id")) {
    		start = '<span>';
    		end = '</span>';
    		if (messages[i].getAttribute("type") == '0') {
    			start = '<span class="error">';
    		} else {
    			start = '<span class="success">';
    		}
    		document.getElementById(messages[i].getAttribute("id")).innerHTML = start + messages[i].firstChild.nodeValue + end;
    	}
    	else {
    		start = '<span>';
    		end = '</span>';
    		if (messages[i].getAttribute('type') == '0') {
    			start = '<span class="error">';
    		} else {
    			start = '<span class="success">';
    		}
    		ajaxresponse_string += start + messages[i].firstChild.nodeValue + end;
    	}
    }
    
    document.getElementById('messages').innerHTML = ajaxresponse_string;
}

function clearMessages() {
	document.getElementById('messages').innerHTML = "";
}

function clearCartMessage() {
	document.getElementById('cart_message').innerHTML = "";
}

function updateCartMessage(messages) {
	//var response = originalRequest.responseXML;
	if (messages == null) {
		return;
	}
	var ajaxresponse_string = "";
    for (i=0; i<messages.length; i++) {
    	if (messages[i].getAttribute("id")) {
    		start = '<span>';
    		end = '</span>';
    		if (messages[i].getAttribute("type") == '0') {
    			start = '<span class="error">';
    		} else {
    			start = '<span class="success">';
    		}
    		document.getElementById(messages[i].getAttribute("id")).innerHTML = start + messages[i].firstChild.nodeValue + end;
    	}
    	else {
    		start = '<span>';
    		end = '</span>';
    		if (messages[i].getAttribute('type') == '0') {
    			start = '<span class="error">';
    		} else {
    			start = '<span class="success">';
    		}
    		ajaxresponse_string += start + messages[i].firstChild.nodeValue + end;
    	}
    }
    
    document.getElementById('cart_message').innerHTML = ajaxresponse_string;
}

function updateFormButtonTextValue(originalRequest) {
	if (originalRequest.responseText == "0") {
		document.getElementById('addtocartbutton').value = "Add to Cart";
	} else {
		document.getElementById('addtocartbutton').value = "Remove from Cart";
	}
	updateCartQtyLinkInfo();
}

/* UTILITY FUNCTION */
function isInteger(s) {
	var i;

    if (isEmpty(s))
    if (isInteger.arguments.length == 1) return 0;
    else return (isInteger.arguments[1] == true);

    for (i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);

        if (!isDigit(c)) return false;
    }

    return true;
}

function updateCart(form) {
	var children = form.getElementsByTagName('input');
	var post_string = "";
	for (i=0; i<children.length; i++) {
		// TODO would like to perform this check, but it would prevent error messages on bad input
		//if (children[i].value >= 0) {
		// don't bother sending unchecked "remove" checkbox
		if ((document.getElementsByName(children[i].name)[0].checked) || ((children[i].value != "on") && (children[i].value != "")))
			post_string += "&" + children[i].name + "=" + children[i].value;
		//}
	}

	var myAjax = new Ajax.Request(
	'include/cart/cartupdate.php',
	{
		method: 'post', 
		parameters: 'ajax=1&' + post_string,
		onComplete: updateViewCart
	});
}

function prepAndUpdateMessages(originalRequest) {
	var response = originalRequest.responseXML;
	if (response == null) {
		return;
	}
	var messages = response.getElementsByTagName('message');
	updateMessages(messages);
}
	
function updateViewCart(originalRequest) {
	//alert('hi');
	//alert(originalRequest.responseText);
	var response = originalRequest.responseXML;
	var messages 	= response.getElementsByTagName('message');
	var deletes 	= response.getElementsByTagName('delete');
    var totalprints = response.getElementsByTagName('totalprints')[0].firstChild.nodeValue;
    var subtotal    = response.getElementsByTagName('subtotal')[0].firstChild.nodeValue;
    var shipping    = response.getElementsByTagName('shipping')[0].firstChild.nodeValue;
    var total    	= response.getElementsByTagName('total')[0].firstChild.nodeValue;
    var cartqty		= response.getElementsByTagName('cartqty')[0].firstChild.nodeValue;


    if (cartqty == 0) {
    	window.location = "/viewcart.php"
    	exit;
    }

    
    for (i=0; i<deletes.length; i++) {
    	// the item to remove is a <tr> in the table with id "carttable"
    	var toremove = document.getElementById(deletes[i].firstChild.nodeValue);
    	var table = document.getElementById("carttable");
    	table.removeChild(toremove);
    }
    
    // clear the messages
    // I clean anything TD tag with an id.  This of course means no other TD tags may have an id
    var tds = document.getElementsByTagName("td");
    for (i=0; i<tds.length; i++) {
    	if (tds[i].getAttribute("id")) {
    		tds[i].innerHTML = "";
    	}
    }
    
    updateMessages(messages);
    
    /*
    var ajaxresponse_string = "";
    for (i=0; i<messages.length; i++) {
    	if (messages[i].getAttribute("id")) {
    		document.getElementById(messages[i].getAttribute("id")).innerHTML = messages[i].firstChild.nodeValue;
    	}
    	else {
    		ajaxresponse_string += messages[i].firstChild.nodeValue;
    	}
    }
    */
    
    //document.getElementById('ajaxresponse').innerHTML = ajaxresponse_string;
    document.getElementById('totalprints').innerHTML = totalprints;
    document.getElementById('subtotal').innerHTML = subtotal;
    document.getElementById('shipping').innerHTML = shipping;
    document.getElementById('total').innerHTML = total;
    document.getElementById('cartqty').innerHTML = cartqty;
    //updateCartQtyLinkInfo();
    
}


function updateCartQtyLinkInfo() {
	updateMessages();
	var myAjax = new Ajax.Updater(
		'cartqty',
		'include/javascript/get_cart_qty.php'
	);
	
}
	
function preloadSite() {
	var myAjax = new Ajax.Request(
	'include/javascript/preloadsite.php',
	{
		method: 'post', 
		parameters: 'ajax=1',
		onComplete: prepAndUpdateMessages
	});
}
