// Class wm "windowsmanager"
// gestione "popup" javascript usando il framework scriptaculous.js
var pageLoaded = false;

var wm = {}
//util debug
wm.debug = false;
wm.setDebug = function() {wm.debug=true}
/*
wm.elementOutLog = 'outdebug';
wm.log = function(objset) {
	if (!wm.debug) return;
	var strLog = (objset.append)? $(wm.elementOutLog).innerHTML : '' ;		
	$(wm.elementOutLog).innerHTML = strLog + '<br>' + objset.label + ': ' + objset.value ;		
}
*/
wm.iDomOpenWin = null;
wm.creawin = function (idw,objsetwin,idcont,bshowcenter)
{		
	//controlli
	
	//wm.log({label: 'wm.pageloaded', value: wm.pageloaded, append:true})
	//wm.log({label: '$(idw)', value: $(idw), append:true})	
	
	//se la pagina non è caricata esco
	if (!wm.pageloaded){
	   // alert(wm.pageloaded);
	    return
	}
	
	//se esiste non creo
	if( $(idw) ) {
		// wm.log({label: 'this.toggle(idw)', value: 'eseguo', append:true})
		//show hide idw
		this.toggle(idw)
	}
	else {		
		// destroy  window opened
		if( $(wm.iDomOpenWin) ) $(wm.iDomOpenWin).remove();		
		try{		
		
		var win = quickWlight(
			{
				id: idw, 
				htmlContent: '', 
				oPos: objsetwin.oPos,
				w: objsetwin.width, 
				h: objsetwin.height
			}
		)		
		
		wm.iDomOpenWin = idw;
		
		if (idcont){			
			win.setContentHtml( $(idcont).innerHTML ) ;			
		}		
		win.showD();
		}
		catch(e){ }
		
	}

//try{
	if (objsetwin.nameBox!="undefined" && objsetwin.callBack != "undefined" && $(objsetwin.nameBox) ) {	
		// add mousePosition a storeMousePosition
		if(wm.storeMousePosition[objsetwin.nameBox]=="undefined" || wm.storeMousePosition[objsetwin.nameBox]==null) {			
			//setto oggetto mousePosition 	
			wm.addStoreMousePosition(objsetwin.nameBox,new mousePosition({nameBox: objsetwin.nameBox,callBack: objsetwin.callBack}))
		}		
		//attivo listenerMouseMove
		wm.storeMousePosition[objsetwin.nameBox].setObserveMouseMove()		
	}	
//}
//catch(e){ 
//wm.log({label: 'creo mousePosition Object ERRORE:', value: e.description, append:true})	 
//}

}

wm.storeMousePosition = {}
wm.addStoreMousePosition = function (name,value){
	wm.storeMousePosition[name] = value;
}

wm.setPageLoaded = function (){
    wm.pageloaded = true;
}

wm.pageloaded = false;
wm.closeWin = function(){ if($(wm.iDomOpenWin)) $(wm.iDomOpenWin).remove() }
wm.creawinAjax = function (objwin,objsetwin)
{		
	//Event.observe(window, 'load', function (e){ wm.setPageLoaded()},false );
	//se la pagina non è caricata esco
	if (!wm.pageloaded){return}

	var id = objwin.id;
	var idw = objwin.idw;
	var bshowcenter = objwin.bshowcenter;
	var pageurl = objwin.url;	
	var idcont = objwin.idHtmlTemplate; 
	var idmsgcont = 'msgiprod'+id;
	
	//se esiste non creo
	if( $(idw) ) 
	{
		//show hide idw
		this.toggle(idw);
	}
	else 
	{		
		//nascondo tutte le windows aperte	
		wm.closeWin();
		
		var win = quickWlight(
			{
				id: idw, 				
				oPos: objsetwin.oPos,
				w: objsetwin.width, 
				h: objsetwin.height
			}
		)		
		
		wm.iDomOpenWin = idw;
					
		//show win		
		var tmp=this.evalCode(idcont);		
		tmp = tmp.replace("msgiprod", idmsgcont);
		win.setContentHtml( tmp );	
		win.showD();
		
		var fCallBack = function(req){ $(idmsgcont).innerHTML = req.responseText; }
		
		//call Ajax			
		var ajax = new Ajax.Updater (
	         idmsgcont,     	// DIV id 
	         pageurl,        	// URL
	         {                
	         	method:'post',		
			    onComplete: fCallBack
	         }
		);		
	}				
}


wm.evalCode = function (id) {
  var pre = $(id);
  var code;
  code = pre.innerHTML;  
  code = code.gsub("&lt;", "<");
  code = code.gsub("&gt;", ">"); 
  try {
 	return code;
  }
  catch (error) {
    //Dialog.alert(" error accurs while interprating your javascript code <br/>" + error, {windowParameters: {width:300, showEffect:Element.show}, okLabel: "close"});
  }
}

wm.setPosX = function (objmarkerposition,objsetposition) {		
	//Event.observe(window, 'load', function (e){ wm.setPageLoaded()},false );
	//se la pagina non è caricata esco
	if (!wm.pageloaded){return}

	var x = this.findPos(objmarkerposition)[0];	
	//valori default
	var hAlign = 'left';
	var hSpacer = 0;
	var wWin = 0;
	if (typeof objsetposition =='object') {
	 hAlign = objsetposition.hAlign || hAlign;
	 hSpacer = objsetposition.hSpacer || hSpacer;
	 wWin = objsetposition.wWin || wWin
	}
	if (hAlign=='left')
	{x += hSpacer;}
	else {x -=  wWin + hSpacer ;}		
	return x;	
}

wm.setPosY = function (objmarkerposition,objsetposition) {
	//Event.observe(window, 'load', function (e){ wm.setPageLoaded()},false );
	//se la pagina non è caricata esco
	if (!wm.pageloaded){return}
	
	var y = this.findPos(objmarkerposition)[1];
	//valori default
	var vAlign = 'bottom';
	var vSpacer = 10;
	var hWin = 0;
	//dimensioni fasce alto window fz_prv.css
	var hstatusbar = 20;
	var htopbar = 20;	
	if (typeof objsetposition =='object') {
		vAlign = objsetposition.vAlign || vAlign;
		vSpacer = objsetposition.vSpacer || vSpacer;
		hWin = objsetposition.hWin || hWin;	 
	}
	(vAlign=='bottom')?	y = y - ( hWin + hstatusbar + htopbar + vSpacer ):y = y + ( vSpacer );	
	return y;	
}

wm.findPos = function (objmarkerposition) {
	var curleft = curtop = 0;
	if(objmarkerposition){
	if (objmarkerposition.offsetParent) {
		curleft = objmarkerposition.offsetLeft
		curtop = objmarkerposition.offsetTop
		while (objmarkerposition = objmarkerposition.offsetParent) {
			curleft += objmarkerposition.offsetLeft
			curtop += objmarkerposition.offsetTop
		}
	}
	return [curleft,curtop];
	}
}

wm.wmhide = function (idw)
{	
	if (Element.Methods.visible($(idw))) 
	{
	//Element.Methods.hide($(idw))
	$(idw).hide();
	}
}

wm.wmshow = function (idw)
{	
	if (!Element.Methods.visible($(idw))) 
	{
	//Element.Methods.show($(idw))	
	$(idw).show();
	}
}

wm.toggle = function (idw)
{	
	if(typeof $(idw)=='object') {
		if (Element.visible($(idw)))
		{ this.wmhide(idw);}
		else {this.wmshow(idw);}	
	}
}

wm.creawindow =	function (objsetwin)
{	

try{
			
	var idElement = objsetwin.idElement;	
	// se idElement esiste lo visualizzo/nascondo ed esco.
	if (typeof $(idElement) == 'object') 
	{		
		wm.toggle(idElement);
		return;
	}		
	var idParentElement = objsetwin.idParentElement || document.body;
	var idMarkerPositionElement = objsetwin.idMarkerPositionElement;	
	var idHtmlTemplateElement = objsetwin.idHtmlTemplateElement;
	var width = objsetwin.width;
	var height = objsetwin.height;
	var y = objsetwin.height;
	}
catch(e){alert('0 ' + e)}	

try{
	var deltaX = objsetwin.deltaX;
	var deltaY = objsetwin.deltaY;
	var leftPosition = (wm.findPos($(idMarkerPositionElement)))[0] + deltaX;
	var topPosition = (wm.findPos($(idMarkerPositionElement)))[1] + deltaY;	
	var myElement = Builder.node('div',{id:idElement,style:' width: '+ width +';height: '+ height +'; position:absolute;left:' + leftPosition + ';top:'+topPosition+';display: none;'});
	
	var myPopup = idParentElement.appendChild(myElement);
	myElement.innerHTML = $(idHtmlTemplateElement).innerHTML;
	wm.wmshow(idElement);	
	
}
catch(e){alert('1 ' + e)}	
}
	

// CLASSE mousePosition 
// classe utility per monitorare posizione mouse e chiamare una callBack function
var mousePosition = Class.create();
mousePosition.prototype = {	
 	// costruttore accetta 
 	// nameBox : objDOM che identifica l'area monitorata 
 	// callBack: nomefunction([parametri]) chiamata una volta che il mouse esce dall'area objDOM
 	initialize: function() {
 		this.pX = 0;
 		this.pY = 0;
 		this.setting = Object.extend({
 		  nameBox:   null,   
 		  callBack:  Prototype.emptyFunction  
 	    }, arguments[0] || {});		
 		this.elementBox = $(this.setting.nameBox) || null;		
 		this.eventMouseMove = this._eventMouseMove.bindAsEventListener(this);		
 		// this.idDemon = null;	
		// this.demon = false;
		// this.setDemon();
 	},
 	destroy: function() {
 		Event.stopObserving(document, "mousemove", this.eventMouseMove, false)
 	},
 	setObserveMouseMove: function() {		
 		Event.observe(document, "mousemove", this.eventMouseMove, false)	
 	},
 	clearObserveMouseMove: function() {
 		Event.stopObserving(document, "mousemove", this.eventMouseMove, false)
 	},
		
 	_eventMouseMove: function(ev){
		//esco
		if(! $(this.setting.nameBox) ) {
			this.clearObserveMouseMove();
			return
		}
		
 		this.pX = Event.pointerX(ev)
 		this.pY = Event.pointerY(ev)
 		var minX = wm.findPos($(this.setting.nameBox))[0]
 		var minY = wm.findPos($(this.setting.nameBox))[1]
 		var maxX = wm.findPos($(this.setting.nameBox))[0] + Element.getDimensions(this.setting.nameBox).width
 		var maxY = wm.findPos($(this.setting.nameBox))[1] + Element.getDimensions(this.setting.nameBox).height	
			
 		if( this.pX < minX || this.pX > maxX || this.pY  < minY || this.pY  > maxY ) {			
			
 			if ( eval( this.setting.callBack) ) {
 				this.clearObserveMouseMove();	
			}
 		}
 		else {}
 	}
 }

//CLASSE mouseDemon 
//classe utility per monitorare posizione mouse e chiamare una callBack function
var mouseDemon = Class.create();
mouseDemon.prototype = {	
 	// costruttore accetta 
 	// nameBox : objDOM che identifica l'area monitorata 
 	// callBack: nomefunction([parametri]) chiamata una volta che il mouse esce dall'area objDOM
	// interval: OPZIONALE ( default= 1000 ms )tempo in ms per testare posizione mouse in relazione al nameBox
	
 	initialize: function() {
		
 		this.pX = 0;
 		this.pY = 0;
		
 		this.setting = Object.extend({
		  interval: 1000  
 	    }, arguments[0] || {});		
				
 		this.elementBox = $(this.setting.nameBox);
		this.interval = this.setting.interval;
		
		this.minX =	wm.findPos( this.elementBox )[0]		
 		this.minY = wm.findPos( this.elementBox )[1]
		
 		this.maxX = this.minX + Element.getDimensions(this.setting.nameBox).width
 		this.maxY = this.minY + Element.getDimensions(this.setting.nameBox).height	
			
		this.demon = null;
		
 	},
	setDemon: function(fname){
		this.demon = window.setInterval( fname+'('+this.minX +','+this.minY +','+this.maxX +','+this.maxY +',\''+ this.setting.callBack +'\')', this.interval  );
		
	},
	delDemon: function(){
		window.clearInterval( this.demon );
	}		
 }

// CLASSE mousePosition 
// classe utility per monitorare posizione mouse
var mPos = {}
mPos.x = 0;
mPos.y = 0;
mPos.init = function(){
	mPos.IE = document.all?true:false
	if (! mPos.IE) document.captureEvents(Event.MOUSEMOVE)
	document.onmousemove = mPos.getMouseXY;	
}
mPos.getMouseXY = function(e){
	if (mPos.IE) 
	{ 
	    mPos.x = event.clientX + document.body.scrollLeft
	    mPos.y = event.clientY + document.body.scrollTop
	} else { 
	    mPos.x = e.pageX
	    mPos.y = e.pageY
	}
}

// check window load 
Event.observe(window, 'load', function (e){ wm.setPageLoaded() },false);

function quickW(p){	
	if (!p.id) return;	
	if (p.toggle && ($(p.id)) ) {		
		if ( $(p.id).visible() ) { 
			$(p.id).hide();
			return
		}
		else
			$(p.id).show();
	}
	var w = new W({id: p.id});	
	w.setDimension({w: p.w||1 , h: p.h||1 });
	if (p.htmlContent)  w.setContentHtml(p.htmlContent);
	if (p.idDomContent) w.setContent(p.idDomContent);	
	if($(p.oPos)){
		w.setPosX({oMarkPos: p.oPos, align: p.halign||null, spacer: p.hspacer||0 });
		w.setPosY({oMarkPos: p.oPos, align: p.valign||null, spacer: p.vspacer||0 });
	}	
	w.showD(); 
	var w = null;
}

/* CLASSE W (light-PopUp) */
var W = Class.create();
W.prototype = {	
 	//costruttore accetta :
 	//id : ID objDOM  	
	initialize: function(p) {
 		this.id = p.id;			
		this._appendDiv();		
		this.o = $(this.id);
		// this.setDimension();
		this.o.setStyle({position: 'absolute'});
		this.o.setStyle({display:'none'});
		//this.o.setStyle({border:'1px solid #FF0000'});		
		this.alpha = p.alpha || 1;
		this.effectAppear = p.effectAppear || false;
		this.effectFade = p.effectFade || false;						
 	},		
	toFront: function(index){		
		this.o.setStyle({ zIndex : index});
	},
	_appendDiv: function(){		
		if($(this.id)) return;
		var d = document.createElement("div");
		d.setAttribute("id",this.id);				
		document.body.appendChild(d);
	},	
	getContent: function(){
		return this.o.innerHTML
	},
	setContent: function(p){
		$(this.id).innerHTML = $(p).innerHTML;
	},	
	setContentHtml: function(p){
		$(this.id).innerHTML = '';
		$(this.id).innerHTML = p;
	},
	setDimension: function(p){		
		p = p || {w:1,h:1};	
		this.o.setStyle( {width: p.w + 'px'} );
		this.o.setStyle({height: p.h +'px'});
		this.w = p.w;
		this.h = p.h;
	},
	getCoord: function() {
		var o = {};
		o.minX = this.findPos($(this.id))[0];
		o.minY = this.findPos($(this.id))[1];
		o.maxX = o.minX + Element.getDimensions(this.o).width;
		o.maxY = o.minY + Element.getDimensions(this.o).height;
		return o
 	},
	setPosX: function (p) {			
		//se la pagina non è caricata esco
		if (!wm.pageloaded){return}
		
		var x = this.findPos($(p.oMarkPos))[0];	
		//valori default
		var align = 'left';
		var spacer = 0;
		align = (p.align)? p.align : align;
		spacer = (p.spacer)? p.spacer : spacer;
		switch (align) {
		   case 'left':
		      x += spacer;
		      break;
		   case 'right':
		      x -= this.w ;
		     break;
		   case 'center':		 
		      x = x - this.w/2 + $(p.oMarkPos).getStyle('width').toString().replace("px","")/2 ;
		      break;	  
		}
		x += spacer;
		this.o.setStyle({left:x + 'px'});		
	},	
	setPosY: function (p) {			
		// se la pagina non è caricata esco
		if (!wm.pageloaded){ return }
		
		var y = this.findPos($(p.oMarkPos))[1];	
		// valori default
		var align = 'bottom';
		var spacer = 0;
		align = (p.align)? p.align : align;
		spacer = (p.spacer)? p.spacer : spacer;
			
		switch (align) {
			case 'bottom':
		   		y += parseInt( $(p.oMarkPos).getStyle('height').toString().replace("px","") ) - this.h;				
		      break;
		   	case 'top':
		      	y -= parseInt( $(p.oMarkPos).getStyle('height').toString().replace("px","") );
		     	break;
		   	case 'middle':
		      	y -= parseInt( this.h/2 + $(p.oMarkPos).getStyle('height').toString().replace("px","")/2 );
		      	break;	  
		}
		y += spacer;
		this.o.setStyle({top: y + 'px'});		
	},	
	showD: function (p)
	{		
		if (typeof this.o != 'object') { return; }	//esco	
		p = p ||{};	// config parametri	
		var effectAppear = ( p.effectAppear )? p.effectAppear  : this.effectAppear;
		if (effectAppear) {
			Effect.Appear(this.o,effectAppear);
		}
		else{
			this.o.show();
		}	
	},
	setPreloader: function (p)
	{
		// carica interfaccia loading
		$(p.id).innerHTML ='<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="25" HEIGHT="25" id="pensino_ok" ALIGN="center"> <PARAM NAME=movie VALUE="/images/sito/pensino_ok.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=scale VALUE=exactfit> <PARAM NAME=wmode VALUE=transparent> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="/images/sito/pensino_ok.swf" quality=high scale=exactfit wmode=transparent bgcolor=#FFFFFF  WIDTH="25" HEIGHT="25" NAME="pensino_ok" ALIGN="center" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT>';			
	},	
	setAjaxContent: function (p)
	{
		var idElement = p.idCont;
		// connection Ajax
		var ajax = new Ajax.Updater
		(	   
	         p.idCont,						// DIV id
	         p.url,        					// URL
	         {                
	         	method: p.method,			// get	
	            onComplete: showResponse	// callBack	
	         }
		)		
	},	
	
	findPos: function (objmarkerposition) {
		var curleft = curtop = 0;
		if(objmarkerposition){
		if (objmarkerposition.offsetParent) {
			curleft = objmarkerposition.offsetLeft
			curtop = objmarkerposition.offsetTop
			while (objmarkerposition = objmarkerposition.offsetParent) {
				curleft += objmarkerposition.offsetLeft
				curtop += objmarkerposition.offsetTop
			}
		}
		return [curleft,curtop];
		}
	}		
 }

function showResponse(req)
{	
	idElement.innerHTML = req.responseText ;
}

