browserIsMacFirefox2 = isMacFirefox2();
browserIsMacSafari2 = isMacSafari2();

function injectAtStartOfBody(element) {
	document.body.insertBefore(element, document.body.firstChild);
}

function fullInfoBox(path) {
	infoBox(path);
}


function closeInfoBox(fadeout,infobox) {
	if (browserIsMacFirefox2) {
		fadeout.style.display= 'none'; 
	} else {
		setOpacity(fadeout,'0');
	}		  
	var overlaySkipLink = document.getElementById('overlaySkipLink'); 
	if(null!= overlaySkipLink){
		overlaySkipLink.parentNode.removeChild(overlaySkipLink);
	}
	setOpacity(infobox,'0');	
	loadingEl = document.getElementById('loading');
	if (loadingEl != null){
		loadingEl.parentNode.removeChild(loadingEl);
	}
	if(null == fadeout){
		fadeout = document.getElementById('fadeout');
	}
	if(null == infobox){
		infobox = document.getElementById('infobox');
	}
	onCompleteBoxCloseFx(fadeout,infobox);
}


function infoBox(path) { 
	var d = new Date();
	var t = d.getTime();
	var cacheValue = t; // parameter used to prevent caching

	var fadeout = document.createElement("div");
	fadeout.innerHTML = "<div class='pleaseWait' id='loading'><img src='/support_files/style_images/products/images/headers/pleasewait.gif' /><img src='/support_files/style_images/products/images/icons/icon-loading.gif' /> </div>";
	fadeout.setAttribute("id", "fadeout");
	setOpacity(fadeout,'0.01'); 
	fadeout.style.display="block";  
	fadeout.style.height= getScrollHeight(window);
	fadeoutFx(fadeout);
	injectAtStartOfBody(fadeout);	

	var infobox = document.createElement("div");
	infobox.setAttribute("id", "infobox");
	infobox.style.opacity=0;
	infobox.style.display='none'; 
	if (browserIsMacSafari2) {
		infobox.style.position='absolute';
	}

	var infoboxTop = document.createElement("div");

	addClass(infoboxTop, "boxHeader");

	infobox.appendChild(infoboxTop);  

	// create close button for help text
	var toolTipClose = document.createElement('a');
	toolTipClose.setAttribute('id','infoboxClose'); 
	addClass(toolTipClose, "infoboxClose"); 
	toolTipClose.setAttribute('name', 'infobox'); 
	toolTipClose.setAttribute('alt','close');
	toolTipClose.innerHTML = 'Close';
	addEvent(toolTipClose,'click', function(ev) {
		stopEvent(ev);
		closeInfoBox(fadeout,infobox);
	});
	infoboxTop.appendChild(toolTipClose);

	var btnRoundedElements = document.getElementsBySelector('.btnRounded');
	if (null!= btnRoundedElements) {
		for (var i = 0; i <  btnRoundedElements.length ; i++) {
			if(null!=btnRoundedElements[i]){
				btnRoundedElements[i].style.visibility='hidden';	
			}
		}	
	}

	var infoboxMiddle = document.createElement("div");
	addClass(infoboxMiddle, "boxMiddle");

	var cacheParam = '&cache=' + cacheValue;
	if (path.indexOf('?') == -1)
	{
		cacheParam = '?cache=' + cacheValue;
	}

	var http;
	if (window.XMLHttpRequest) { 
		// Mozilla, Safari would use this method ...
		http = new XMLHttpRequest();

	} else if (window.ActiveXObject) { 
		// IE would use this method ...
		http = new ActiveXObject("Microsoft.XMLHTTP");
	}
	//make a connection to the server ... specifying that you intend to make a GET request 
	//to the server. Specifiy the page name and the URL parameters to send
	http.open('GET', path + cacheParam, true);

	//assign a handler for the response
	http.onreadystatechange = function(){
		var httpObj = this;
		if (this.readyState === undefined) {
			httpObj = http;
		}

		if(httpObj.readyState == 4) {
			if (httpObj.status == 200) {
				
				//read and assign the response from the server
				var responseOutput = httpObj.responseText;
			
				//hide 'please wait' div
				loadingEl = document.getElementById('loading');
				if (loadingEl != null){
					loadingEl.parentNode.removeChild(loadingEl);
				}
				var script = null;
				var scriptIndex = responseOutput.indexOf("<script");
				if (scriptIndex != -1) {
					var scriptStart = responseOutput.indexOf(">", scriptIndex) + 1;
					var scriptEnd = responseOutput.indexOf("</script", scriptStart);
					script = responseOutput.substring(scriptStart, scriptEnd);
				}		
				responseOutput = responseOutput.split('<body>')[1];
				responseOutput = responseOutput.split('</body>')[0];
				infoboxMiddle.innerHTML = responseOutput;			
			
				infoboxTop.appendChild(infoboxMiddle);  
			
				var infoboxBottom = document.createElement("div");
				addClass(infoboxBottom, "boxFooter");
				infobox.appendChild(infoboxBottom);   
			
				injectAtStartOfBody(infobox);

				onBoxOpenFx(fadeout,infobox,'1');
				toolTipClose.focus();
			
			
				var addToBasketLabel = document.getElementById('addToBasketLabel'); 
				if(null!= addToBasketLabel) {
					var basketSkipLink = document.createElement('div');
					addClass(basketSkipLink, "accesshide"); 
					basketSkipLink.setAttribute('id','overlaySkipLink');
					basketSkipLink.innerHTML = 'There is currently an overlay on the page <a href="#infobox">Skip to overlay</a>. Please <a href="javascript:closeInfoBox();">close this overlay to re-activate buttons</a>.';
					injectAfter(basketSkipLink,addToBasketLabel);
				}
								
				if (script != null) {
					eval(script);
				}				
				window.location.hash="infobox";
				
			} else {
				closeInfoBox(fadeout,infobox);
			}
		}
	}

	//actually send the request to the server
	http.send(null);

	addEvent(fadeout,'click', function(){
		closeInfoBox(fadeout,infobox);
	});
	return false;
}


function imageMouseOver(e)
{
  document.getElementById(e).className = 'showImage';
  var elements = document.getElementsBySelector('.basket tr.showImage .image');
  for (var i = 0; i < elements.length; i++) {
     if(null!=elements[i]){	
  		elements[i].style.visibility = "visible";
  	} 
  } 
}

function imageMouseOut(e)
{
  var elements = document.getElementsBySelector('.basket tr.showImage .image');
  for (var i = 0; i < elements.length; i++) {
    if(null!=elements[i]){		
  		elements[i].style.visibility = "hidden";
  	}
  } 
  document.getElementById(e).className = '';
}


function isMacFirefox2() {
 var userAgent = navigator.userAgent.toLowerCase();
 if (/firefox[\/\s](\d+\.\d+)/.test(userAgent)) {
    var ffversion = new Number(RegExp.$1);
    if (ffversion < 3 && userAgent.indexOf('mac') != -1) {
      return true;
    }
  }
 return false;
}


function isMacSafari2() {
 var userAgent = navigator.userAgent.toLowerCase();
 if (/applewebkit[\/\s](\d+\.\d+)/.test(userAgent)) {
    var awkversion = new Number(RegExp.$1);
    if (awkversion < 500 && userAgent.indexOf('mac') != -1) {
      return true;
    }
  }
 return false;
}

function fadeoutFx(fadeout){
	if (browserIsMacFirefox2) {
		fadeout.style.background= 'transparent url(\'/support_files/style_images/products/backgrounds/bg-white-70percent.png\') repeat';
	} else {    
		setOpacity(fadeout,'0.7');     
	}	
}

function onBoxOpenFx(fadeout,infobox,to){
  
    var selectTags = document.getElementsBySelector('select');
    for (var i = 0; i < selectTags.length; i++) {	
  		selectTags[i].style.visibility = 'visible';
  	}					
    setUpButtons(); 
    fadeout.style.display = 'block';   
    infobox.style.display =  'block';           
    addToBasketQuantity1 = document.getElementsBySelector('#addToBasketQuantity');
    for (var i = 0; i < addToBasketQuantity1.length; i++) {	
  	  if(null!=addToBasketQuantity1[i]){	
        addToBasketQuantity1[i].style.visibility = 'hidden';
      }
    }
    recQuantity = document.getElementsBySelector('.recQuantity');
    for (var i = 0; i < recQuantity.length; i++) {
      if(null!=recQuantity[i]){		
  	    recQuantity[i].style.visibility = 'hidden';
  	  }
    }
    setOpacity(infobox,to);
}

function onCompleteBoxCloseFx(fadeout,infobox){
	var selectTags = document.getElementsBySelector('select');
	for (var i = 0; i < selectTags.length; i++) {	
		selectTags[i].style.visibility = 'visible';
	}	
	var btnRoundedElements = document.getElementsBySelector('.btnRounded');
	if( null!= btnRoundedElements){
		for (var i = 0; i <  btnRoundedElements.length ; i++) {
			if(null!=btnRoundedElements[i]){	
				btnRoundedElements[i].style.visibility='visible';
			}	
		}	
	} 	
	var btnTriggerFormSubmitElements = document.getElementsBySelector('.btnTriggerFormSubmit');
	if( null!= btnTriggerFormSubmitElements){
		for (var i = 0; i <  btnTriggerFormSubmitElements.length ; i++) { 
			if(null!=btnTriggerFormSubmit[i]){	
				btnTriggerFormSubmit[i].removeEvents('click');
			}
		}
	}

	addToBasketQuantity1 = document.getElementsBySelector('#addToBasketQuantity');
	for (var i = 0; i < addToBasketQuantity1.length; i++) {	
		if(null!=addToBasketQuantity1[i]){	
			addToBasketQuantity1[i].style.visibility = 'visible';
		}
	}
	recQuantity = document.getElementsBySelector('.recQuantity');
	for (var i = 0; i < recQuantity.length; i++) {	
		if(null!=recQuantity[i]){	
			recQuantity[i].style.visibility = 'visible';
		}
	}
	if (fadeout != null){
		fadeout.parentNode.removeChild(fadeout); 
	}
	if (infobox != null){
		infobox.parentNode.removeChild(infobox);
	}
}
