var GLOB_POS = 'absolute';

var actualCart = null;
var i =0;
var mouse_over=false;
var global_mouseX=700;
var global_mouseY=290;

// reset Globals to initial value
function initGlobals(){
	mouse_over=false;
	
}


// Change Notification-popup-Content depending on the Status retrieved from the Async AddToCart-process
function refreshCartMsg(cartstatus,quantite, prix, transport){

	// get headline locresource
	var cartContent  = "";

	// show CART - added OR deleted OR reduced
	if(cartstatus == 'success'){
		// Normal Cart
		cartContent += '<div  style="padding: 5px 0 5px 30px; font-size: 11px; line-height: 11px;">';
		cartContent += '<table class="texte_popup" width="200px"  style="margin-left:0px;float:left;">';
		cartContent += '<tr ><td align="left" colspan="2" align="right">Votre panier<br><br></td></tr>';	
		cartContent += '<tr><td align="left" >Quantit&eacute; :</td><td align="right">'+quantite+'</td></tr>';
		cartContent += '<tr><td align="left" >Frais de port :</td><td align="right">'+transport+'</td></tr>';
		cartContent += '<tr><td align="left" >Montant :</td><td align="right">'+prix+'</td></tr>';
		cartContent += '</table><br class="clear">';
		cartContent += '</div>';
	}	

	// change Content
	if (document.getElementById("cartContent")){
		document.getElementById("cartContent").innerHTML = cartContent;
	}
}



// flexible Eventhandler (addEvent, removeEvent) made by John Resig - http://ejohn.org/projects/flexible-javascript-events/
function addEvent( obj, type, fn )
{
   if (obj.addEventListener) {
      obj.addEventListener( type, fn, false );
   }
   else if (obj.attachEvent) {
      obj["e"+type+fn] = fn;
      obj[type+fn] = function() { obj["e"+type+fn]( window.event ); };
      obj.attachEvent( "on"+type, obj[type+fn] );
   }
}

function removeEvent( obj, type, fn )
{
   if (obj.removeEventListener) {
      obj.removeEventListener( type, fn, false );
   } else if (obj.detachEvent) {
      obj.detachEvent( "on"+type, obj[type+fn] );
      obj[type+fn] = null;
      obj["e"+type+fn] = null;
   }
}

// Close/Hide the Popup and clear all Stati & Timeouts that belong to this Popup
function closePopup(){
	
	// detach events
	var popup = document.getElementById('cart_popup');
	//removeEvent(document,"click",watchClick);
	removeEvent(popup,"mouseover",watchMouseOver);
	removeEvent(popup,"mouseout",watchMouseOut);
	
	// hide popup
	var elem = document.getElementById('cart_popup');
	elem.style.visibility = 'hidden';
	elem.style.left = '-999px';
	elem.style.top  = '-999px';

}

// Check for Mouse Over Popup - initiate Status comparation
function watchMouseOver(e){
	if (eventThrownInside(e, 'cart_popup')){
		mouse_over=true;
	}
	if(actualCart && actualCart !== null){
		checkPopupStatusForStateChange(actualCart);	
	}
}

// Check for Mouse Out Popup - initiate Status comparation
function watchMouseOut(e){
	//get Area in which the Event is thrown
	if (!eventThrownInside(e, 'cart_popup')){
		mouse_over = false;	
	}
	if(actualCart && actualCart !== null){
		checkPopupStatusForStateChange(actualCart);
	}
}

// Check for Mouse Click - initiate Status comparation
function watchClick(e){
	// added check to determine if click is outside popup - to close it imediately
	if (!eventThrownInside(e, 'cart_popup')){
		mouse_over = false;	
	}
	if(actualCart && actualCart !== null){
		checkPopupStatusForStateChange(actualCart);
	}
}


// change Position of Popup
function cartPopupPos(){
	if (document.getElementById('cart_popup')){
		var popup = document.getElementById('cart_popup');
	
		if (popup){
		
			popup.style.left = global_mouseX + 'px';
			popup.style.top  = global_mouseY + 'px';
		}	
	}
}

function global_mouse(mouseX, mouseY, ancre){
	global_mouseX = mouseX;
	global_mouseY = mouseY;
	window.location.href =  window.location.href+"#"+ancre;
}


/*
How the Popup should behave

keep popup for 8 sec. least
keep popup displayed while mouse_over
keep popup displayed 3sec after mouse_out
close popup after waited 8 sec && mouse_out
close popup after waited 3 sec && mouse_out after waited 8sec && mouse_over
close popup on pressed popup button
close popup on mouse_out && click
*/

// Show the Cart-Popup
function displayPopup(cartstatus,count,prix,transport){
	initGlobals();
	
	// change Popup Content on status
	refreshCartMsg(cartstatus,count, prix, transport);
	
	// show popup and change Positioning Method on Browsertype
	if (document.getElementById('cart_popup')){
		cartPopupPos();
		document.getElementById('cart_popup').style.visibility = 'visible';
		document.getElementById('cart_popup').style.position = GLOB_POS;
	}
	
	// register Event-Handler  -- standard.js
	// Check direktion in whitch coursor goes over areas - IN or OUT to set MOUSE_OVER
	var popup = document.getElementById('cart_popup');
	addEvent(document,"click",watchClick);
	addEvent(popup,"mouseover",watchMouseOver);
	addEvent(popup,"mouseout",watchMouseOut);
}

function eventThrownInside(e, objId){

	// get Target of mouseMovement // script from http://www.quirksmode.org/js/events_mouse.html
	var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;

	// theres a firefox Bug that shows up an error if we try to access property of reltg:
	// Error: Permission denied to access property 'xyz' from a non-chrome context
	try{
		while (reltg && reltg.id != objId && reltg.nodeName != 'BODY'){
			if (reltg.parentNode){
				reltg = reltg.parentNode;
			}else{
				break;
			}
		}
		// Inside Event Bubbling
		if (reltg && reltg.id && reltg.id == objId) {
			return true;
		}
		
		// Moved to Outside 
		if(reltg && reltg.nodeName && reltg.nodeName == 'BODY'){
			return false;
		}
		else{
			return true;
		}
	}
	catch(error){
		// if something goes wrong - send back that event is Outside of Popup
		return false;
	}
}


function save_mouse(id){
	addEvent(document,"click",function(e){
		if( !e ) {
			if( window.event) {
			  //Internet Explorer
			  e = window.event;
			} else {
			  //total failure, we have no way of referencing the event
			  return;
			}
		}
		var tempX = 0;
		var tempY = 0;
		if( typeof( e.pageX ) == 'number' ) {
			//most browsers
			tempX = e.pageX;
			tempY = e.pageY;
		  } else if( typeof( e.clientX ) == 'number' ) {
			//Internet Explorer and older browsers
			//other browsers provide this, but follow the pageX/Y branch
			tempX = e.clientX;
			tempY = e.clientY;
			var badOldBrowser = ( window.navigator.userAgent.indexOf( 'Opera' ) + 1 ) ||
			 ( window.ScriptEngine && ScriptEngine().indexOf( 'InScript' ) + 1 ) ||
			 ( navigator.vendor == 'KDE' );
			if( !badOldBrowser ) {
			  if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
				//IE 4, 5 & 6 (in non-standards compliant mode)
				tempX += document.body.scrollLeft;
				tempY += document.body.scrollTop;
			  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
				//IE 6 (in standards compliant mode)
				tempX += document.documentElement.scrollLeft;
				tempY += document.documentElement.scrollTop;
			  }
			}
		}else {
			//total failure, we have no way of obtaining the mouse coordinates
			return;
		}
		
		// Offset Popup-position by popup dimension
		global_mouseX = (tempX - 130);
		global_mouseY = (tempY - 160);
		
		document.getElementById(id).innerHTML = '<input type="hidden" name="mouseX" value="'+global_mouseX+'" /><input type="hidden" name="mouseY" value="'+global_mouseY+'" />';
	});	
}


