//#########################################################################################################
//
//	Public AJAX functions
//
//#########################################################################################################

//---------------------------------------------------------------------------------------------------------
//	Load an object dynamiclly with a source page
//---------------------------------------------------------------------------------------------------------
function loadDivContents( url, div )
{
	objNumber = 0;
	
	//	Have we used the div object before?
	for( i=1; i<= HTTPObjects.length; i++ )
	{
		if (HTTPObjects[i] == div)
		{
			objNumber = i
		}
	}

	//	Not found?
	if(!objNumber)
	{
		objNumber				= HTTPObjects.length;
		HTTPObjects[objNumber]	= div;
	}

	//	Generate the div object pointer
	var divObj = eval( 'document.getElementById("' + div + '");' );
	
	eval( 'http' + objNumber + ' = initHTTPObject();' );
	eval( 'if (!http' + objNumber + '){window.location=\'/site/compatability.php\';}' );
	eval( 'http' + objNumber + '.open("GET", url, true );');
	eval( 'http' + objNumber + '.onreadystatechange = function() { if (http' + objNumber + '.readyState == 4) { fadeDivAction( \''+div+'\',\'document.getElementById(\"'+div+'\").innerHTML = http' + objNumber + '.responseText\');}};');
	eval( 'http' + objNumber + '.send(null);');
}

//---------------------------------------------------------------------------------------------------------
//	The master fadediv controler - Fadeout, do the action, fade back in
//		
//		Div must be set with site config "fadable-style" for 
//		transitions to display
//
//---------------------------------------------------------------------------------------------------------

function fadeDivAction( div, action )
{
	if (document.getElementById( div ).innerHTML)
	{
		setTimeout( "fade(90,'"+div+"');",25 );
		setTimeout( "fade(80,'"+div+"');",50 );
		setTimeout( "fade(70,'"+div+"');",75);
		setTimeout( "fade(60,'"+div+"');",100 );
		setTimeout( "fade(50,'"+div+"');",125 );
		setTimeout( "fade(40,'"+div+"');",150 );
		setTimeout( "fade(30,'"+div+"');",175 );
		setTimeout( "fade(20,'"+div+"');",200 );
		setTimeout( "fade(10,'"+div+"');",225 );
		setTimeout( "fade(0,'"+div+"');",250 );
		setTimeout( action,250 );
		setTimeout( "fade(10,'"+div+"');",400 );
		setTimeout( "fade(20,'"+div+"');",425 );
		setTimeout( "fade(30,'"+div+"');",450);
		setTimeout( "fade(40,'"+div+"');",475 );
		setTimeout( "fade(50,'"+div+"');",500 );
		setTimeout( "fade(60,'"+div+"');",525 );
		setTimeout( "fade(70,'"+div+"');",550 );
		setTimeout( "fade(80,'"+div+"');",575 );
		setTimeout( "fade(90,'"+div+"');",600 );
		setTimeout( "fade(100,'"+div+"');",625 );
	}
	
	else
	{
		setTimeout( "fade(0,'"+div+"');",25 );
		setTimeout( action,25 );
		setTimeout( "fade(10,'"+div+"');",50 );
		setTimeout( "fade(20,'"+div+"');",75 );
		setTimeout( "fade(30,'"+div+"');",100);
		setTimeout( "fade(40,'"+div+"');",125 );
		setTimeout( "fade(50,'"+div+"');",150 );
		setTimeout( "fade(60,'"+div+"');",175 );
		setTimeout( "fade(70,'"+div+"');", 200);
		setTimeout( "fade(80,'"+div+"');",225 );
		setTimeout( "fade(90,'"+div+"');",250 );
		setTimeout( "fade(100,'"+div+"');",275 );
	}
}

//---------------------------------------------------------------------------------------------------------
//	Fade animation
//---------------------------------------------------------------------------------------------------------
function fade( level, targetObj )
{
	fadeObj = document.getElementById( targetObj );

	if (fadeObj.style.filter)
		fadeObj.style.filter="alpha(opacity=" + level + ")"
	else if (fadeObj.style.MozOpacity)
		fadeObj.style.MozOpacity=level/101
	else if (fadeObj.style.opacity)
		fadeObj.style.opacity=level/101
	else if (fadeObj.style.KhtmlOpacity)
		fadeObj.style.KhtmlOpacity=level/100
}

//---------------------------------------------------------------------------------------------------------
//	XML form submit
//---------------------------------------------------------------------------------------------------------
 function ajaxSubmit(obj)
{
	var getstr = "?";
	
	for (i=0; i<obj.childNodes.length; i++)
	{
		if (obj.childNodes[i].tagName == "INPUT")
		{
			if (obj.childNodes[i].type == "text")
			{
				getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
			}
			if (obj.childNodes[i].type == "hidden")
			{
				getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
			}
			if (obj.childNodes[i].type == "checkbox")
			{
				if (obj.childNodes[i].checked)
				{
					getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
				}
				else
				{
					getstr += obj.childNodes[i].name + "=&";
				}	
			}
			if (obj.childNodes[i].type == "radio")
			{
				if (obj.childNodes[i].checked)
				{
					getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
				}
			}
		}   
		if (obj.childNodes[i].tagName == "SELECT")
		{
			var sel = obj.childNodes[i];
			getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
		}
	}
	toggle('minicart','block');
	loadDivContents('/cartmgr/update.php' + getstr, 'minicart');

	if (typeof(obj.divid.value)!="undefined") //if x exists
	{
		loadDivContents('/catalog/color.php?colorid=' + obj.mini.value + '&divid=' + obj.divid.value + '&update=true', 'fabric-' + obj.divid.value );
	}	
 }

//#########################################################################################################
//
//	Private AJAX functions
//
//#########################################################################################################

//---------------------------------------------------------------------------------------------------------
//	Define the elements
//---------------------------------------------------------------------------------------------------------
var HTTPObjects = Array();	//	Track all the used HTTP objects on the page
var objNumber   = null;

//---------------------------------------------------------------------------------------------------------
//	Initialize a new HTTP object
//	PRIVATE
//---------------------------------------------------------------------------------------------------------
function initHTTPObject() 
{
	var xmlhttp;
	
	try {
	xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
 	 	try {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 		} catch (E) {
			xmlhttp = false;
 		}
	}

	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
  			xmlhttp = new XMLHttpRequest();
		} catch (e) {
  			xmlhttp = false;
		}
	}

	return xmlhttp;
}
