// JavaScript Document
//ajax functions
//var myHttpSocket = false;
var socketTimeout = false;

function createSocket(){
	//set up the socket
	/*if (checkSocket(myHttpSocket)){
		//we got a socket, make sure it's not inuse and then return it
		//we're doing this because of a bug in IE7
		myHttpSocket.abort();
		return myHttpSocket;
	}*/
	//var xmlHttp;
	var myHttpSocket;
	try{ 
		// Firefox, Opera 8.0+, Safari  
		myHttpSocket=new XMLHttpRequest();  
	}catch (e){
		// Internet Explorer
		try{
			myHttpSocket=new ActiveXObject("Msxml2.XMLHTTP");    
		}catch (e){
			try{
				myHttpSocket=new ActiveXObject("Microsoft.XMLHTTP");      
			}catch (e){
				//alert("Sorry, this function is not available");
				return false;
			}
		}
	}
	return myHttpSocket;
}

function checkSocket(obj){
	try
	{
		if (obj == false) return false;
	}catch(e)
	{
		if (e == "[object Error]"){
			//we got the object, continue
		}else{
			return false;
		}
	}
	return true;
}

function ajaxPostRequest(url,parameters,whereTo,sync,onPostComplete){
	var xmlHttp = createSocket();
	if (checkSocket(xmlHttp) == false) return false;
	
	if (sync == true){
		xmlHttp.onreadystatechange=function(){
			if(xmlHttp.readyState==4) {
				try{
					document.getElementById(whereTo).innerHTML = xmlHttp.responseText;
				}catch(e){
					//do nothing, probably not meant to refresh	
				}
				try{
					onPostComplete();	
				}catch (e) {
					//do nothing
					//alert(onPostCompelete);
				}
			}
		}
		xmlHttp.open("POST",url,true);
		xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlHttp.setRequestHeader("Content-length", parameters.length);
	    xmlHttp.setRequestHeader("Connection", "close");
		xmlHttp.send(parameters);
	
	}else{
		xmlHttp.open("POST",url,false);
		xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlHttp.setRequestHeader("Content-length", parameters.length);
	    xmlHttp.setRequestHeader("Connection", "close");
		xmlHttp.send(parameters);
		try{
			document.getElementById(whereTo).innerHTML = xmlHttp.responseText;
		}catch(e){
			//do nothing, probably we haven't specified a whereTo	
		}
		try{
			onPostComplete();
		}catch(e){
			//do nothing, again probably haven't specified an on complete function
		}
	}
}

function expandAndCollapse(el){
	try{
		var closeButton = document.getElementById(el + '_close_button');
		var openButton = document.getElementById(el + '_open_button');
		
		if (!isExpanded(el)){
			expandElement(el);
		}else{
			collapseElement(el);
		}
	}catch(e){
		//element does not exist
	}
}

function expandElement(el){
	Effect.BlindDown(el, { duration: 0.2 }); 
	try{
		document.getElementById(el + '_close_button').style.display='inline';
		document.getElementById(el + '_open_button').style.display='none';
	}catch(e){
		//the buttons don't exist	
	}
}

function collapseElement(el){
	Effect.BlindUp(el, { duration: 0.2 }); 
	try{
		document.getElementById(el + '_close_button').style.display='none';
		document.getElementById(el + '_open_button').style.display='inline';
	}catch(e){
		//the buttons don't exists	
	}
}

function isExpanded(el){
	var obj = document.getElementById(el);	
	if (obj.style.display == 'none') return false;
	return true;
}

var basketTimer;
var addLoaderHTML = '<img class="ajaxLoaderImage" src="images/ajax-loader-grey.gif" alt="loading..." title="loading..." />';
var removeLoaderHTML = '<img class="ajaxLoaderImage" src="images/ajax-loader-orange.gif" alt="loading..." title="loading..." />';
function addToBasket(el,product){  
	clearTimeout(basketTimer);
	currentYScroll = getYScroll();
	document.getElementById(el + '_ajax_holder').innerHTML = addLoaderHTML;
	var cp = function(){ completeAddToBasket(el,product); };
	//add the product to the basket
	ajaxPostRequest('ajax.php','ajax=add-product&product-code=' + product,null,true,cp);
}

function completeAddToBasket(el,product){
	clearTimeout(basketTimer);
	var cp = function(){ completeAddToBasket2(el,product); };
	//update the basket
	ajaxPostRequest('ajax.php','ajax=show-basket','myBasket',true,cp);
	//update the product bit that got clicked
	
}

function completeAddToBasket2(el,product){
	var additional = '';
	if (isExpanded(el)) additional = '&product_expanded=yes';
	ajaxPostRequest('ajax.php','ajax=show-basket-page-product&product-code=' + product + additional,el + '_holder',true,null);	
}

function removeFromBasket(el,product){
	clearTimeout(basketTimer);
	currentYScroll = getYScroll();
	document.getElementById(el + '_ajax_holder').innerHTML = removeLoaderHTML;
	var cp = function(){ completeRemoveFromBasket(el,product); };
	//remove the product from the basket
	ajaxPostRequest('ajax.php','ajax=remove-product&product-code=' + product,null,true,cp);	
}

function completeRemoveFromBasket(el,product){
	clearTimeout(basketTimer);
	var cp = function(){ completeRemoveFromBasket2(el,product); };
	//update the basket
	ajaxPostRequest('ajax.php','ajax=show-basket','myBasket',true,cp);
}

function completeRemoveFromBasket2(el,product){
	var additional = '';
	if (isExpanded(el)) additional = '&product_expanded=yes';
	ajaxPostRequest('ajax.php','ajax=show-basket-page-product&product-code=' + product + additional,el + '_holder',true,null);	
}


function onBasketTimeout(){
	alert('BASKET TIMEDOUT');	
}

function changeStore(){
	document.getElementById('store_select_form').submit();
}	

function getYScroll() {
    var x = 0;
	var y = 0;
    if( typeof( window.pageYOffset ) == 'number' ) {
        // Netscape
        y = window.pageYOffset;
    } else if( document.body && document.body.scrollTop ) {
        // DOM
        y = document.body.scrollTop;
    } else if( document.documentElement && document.documentElement.scrollTop ) {
        // IE6 standards compliant mode
        y = document.documentElement.scrollTop;
    }
    return y;
}
           
function setYScroll(y) {
    window.scrollTo(0, y);
}

var currentYScroll = 0;