// JavaScript Document
var hasPopup=false;
var actualPopup;
var PopupBox = Class.create({
initialize : function(url,options){
	this.options={
		type:'ajax',
		width:300,
		height:160,
		top:120,
		left:300,
		position:"coord",
		style:'',
		parameters:{},
		target:'mainContent',
		overlay:false,
		redirect:false,
		method:'post'
	};
	actualPopup=this;
	Object.extend(this.options, options || { });
	this.options.height=this.options.height-20;
	this.box=new Element('div',{'style':'position:absolute;z-index:1500	', 'id':'message_box'});
	this.closeObserver = this.hideMessage.bindAsEventListener(this);
	

	this.initHtml();
	this.emptyHtml = this.emptyTemplate.evaluate({
							height:this.options.height,
							width:this.options.width
						 });

	if(this.options.type=="ajax"){
		this.showPopup(this.emptyHtml,this.options.width,this.options.height,this.options.left, this.options.top);
		new Ajax.Request(url,
					 	{
							method:this.options.method,
							sanitizeJSON:false,
							parameters:this.options.parameters,
							onComplete: this.requestComplete.bind(this)
						}
					 
					 );
	}else if(this.options.type=="iframe"){
			var html = this.iframeHtml;
			html = html.evaluate({
							height:this.options.height,
							width:this.options.width,
							style:this.options.style,
							'url':url
						 });
			this.showPopup(html,this.options.width,this.options.height,this.options.left,this.options.top);
	}else if(this.options.type=="image"){
			var html = this.ImgHtml;
			html = html.evaluate({
							height:this.options.height,
							width:this.options.width,
							style:this.options.style,
							'url':url
						 });
			this.showPopup(html,this.options.width,this.options.height,this.options.left,this.options.top);
	}
},

requestComplete : function(transport,json){
	var html = this.templateWindow.evaluate({
							response:transport.responseText,
							height:this.options.height,
							width:this.options.width,
							style:this.options.style
						 });
	this.updatePopup(html);
},

updatePopup : function(html){
	this.box.update(html);
	if($('over_close'))Event.observe('over_close','click',this.closeObserver);
	if($('cancel'))	Event.observe('cancel','click',this.closeObserver);
},

showPopup: function(html,_width,_height,x,y){	
	
	if(!hasPopup)Element.insert(this.options.target,{top:this.box});
	else this.box = $('message_box');
	this.updatePopup(html);
	
	Element.show(this.box);
	
	
	var offset = document.viewport.getScrollOffsets();
	var _left = x;
	var _top = y+offset[1];
	if(this.options.overlay)$('overlay').show();
	
	if(this.options.position=="center"){
		var real_width = this.box.getWidth();
		docSize = document.viewport.getDimensions();
		x_mid = docSize.width/2;
		y_mid = docSize.height/2;
		_left = x_mid - (real_width/2);
		//_top = y_mid - (_height/2)-100+offset[1];
	}
	
	
	Element.setStyle(this.box,{height:_height+"px",left:_left+"px",top:_top+"px"});
	
	hasPopup=true;
		
	
	
},

hideMessage:function(){
	if(Prototype.Browser.IE)Element.setStyle(document.body,{overflow:"scroll"});
	else Element.setStyle(document.body,{overflow:"visible"});
//	Element.setStyle(document.body,{'scroll':"auto"});
	this.box.remove();
	if(this.options.overlay)$('overlay').hide();
	hasPopup=false;
	if(this.options.redirect){
		document.location = this.options.redirect;
	}
},

initHtml:function(){
	this.emptyTemplate = new Template('<table border="0" id="pop_trans"><tr><td class="pop_trans" style="padding:4px"><table bgcolor="#ffffff" width="#{width}" style="border:1px solid #c4c4c4" border="0" cellspacing="0" cellpadding="0"><tr><td height="20" align="right" style="padding-right:6px;background:url(/gfx/repeat_menu.jpg) repeat-x"><img id="over_close" src="/gfx/close.gif" width="13" height="13" /></td></tr><tr><td height="#{height}" style="padding:0px" align="center"><img src="/gfx/ajax-loader.gif" /></td></tr></table></td></tr></table>');	
	
	this.templateWindow = new Template('<table id="pop_trans" border="0" width="#{width}"><tr><td style="padding:4px"  class="pop_trans"><table bgcolor="#ffffff" width="#{width}" style="border:0px solid #c4c4c4" border="0" cellspacing="0" cellpadding="0"><tr><td height="20" align="right" style="padding-right:6px;background:url(/gfx/repeat_menu.jpg) repeat-x"><img id="over_close" src="/gfx/close.gif" width="13" height="13" /></td></tr><tr><td height="#{height}" style="#{style}" valign="top">#{response}</td></tr></table></td></tr></table>');

this.iframeHtml = new Template('<table bgcolor="#ffffff" width="#{width}" style="border:1px solid #c4c4c4" border="0" cellspacing="0" cellpadding="0"><tr><td height="20" bgcolor="#c4c4c4" align="right" style="padding-right:6px"><img id="over_close" src="/gfx/close.gif" width="13" height="13" /></td></tr><tr><td height="#{height}" style="padding:15px"><iframe src="#{url}" id="popIframe" style="border:none;height:100%;width:100%;overflow:hidden"></iframe></td></tr></table>');

this.ImgHtml = new Template('<table bgcolor="#ffffff" width="#{height}" style="border:1px solid #c4c4c4" border="0" cellspacing="0" cellpadding="0"><tr><td height="20" bgcolor="#c4c4c4" align="right" style="padding-right:6px"><img id="over_close" src="/gfx/close.gif" width="13" height="13" /></td></tr><tr><td height="#{height}" style="padding:15px"><img src="#{url}" /></td></tr></table>');
}	

});








var inlineMessageInstance=new Array();
var undef;
var InlineMessage = Class.create({
	initialize:function(titre,message,options){
		this.options={
			target:'mainContent',
			infoIcon:false,
			width:false,
			height:false,
			hightlight:false,
			domLoaded:false
		}
		Object.extend(this.options, options || { });
		
		if(this.options.domLoaded)document.observe('dom:loaded',function(){this.init(titre,message)}.bind(this));
		else this.init(titre,message);
	},		
	
	init:function(titre,message){
		this.target = $(this.options.target);
		message = message.replace(/\'/g, "&acute;");
		titre = titre.replace(/\'/g, "&acute;");
		
		if(!this.isRegisteredBox(this.options.target)){
			this.box = new Element('div',{'class': 'inlineMessage','id':'_imess'+this.options.target});
			if(this.options.width){
				var width = this.options.width;
				this.box.setStyle({'width':width});
			}
			if(this.options.height)this.box.setStyle({'height':this.options.height});
			var str = "";
			if(this.options.infoIcon)var infoIcon = "<img src='http://static.nightreport.be/gfx2/icons/info.gif' style='float:left;margin-right:4px' />";
			else infoIcon = "";
			if(titre.length>0)str+="<div class='lightBorderBottom inlineMessageTitle' style='width:100%'>"+infoIcon+titre+"</div><br>";
			else str=infoIcon;
			str+=message;
			this.box.update(str);
			this.box.show();
			if(this.options.hightlight)new Effect.Highlight(this.box);
			Element.insert(this.target,{top:this.box});
			this.registerBox(this.options.target);
		}else{
			if(this.options.hightlight)new Effect.Highlight(inlineMessageInstance[this.options.target]);
			var str = "";
			if(titre.length>0)str+="<u>"+titre+"</u><br>";
			str+=message;
			inlineMessageInstance[this.options.target].update(str);
		}	
	},
	
	append:function(message){
		if(Object.isString(message))message = message.replace(/\'/g, "&acute;");
		inlineMessageInstance[this.options.target].insert({bottom:message});
	},
	
	closeBox:function(){
		inlineMessageInstance[this.options.target].remove();
								this.unregisterBox(this.options.target);		
/*		Effect.Fade(this.box ,{ 
							duration: 0.5,
							afterFinish:function(){
								
							}.bind(this)
						}
					);*/
	},
	
	registerBox:function(target){
		inlineMessageInstance[target]=this.box;
	},
	
	unregisterBox:function(target){
		delete inlineMessageInstance[target];
	},
	
	isRegisteredBox:function(target){
		if(inlineMessageInstance[target]!= undefined&&$('_imess'+target))return true;	
		return false;
	}
});

function attachPopup(_class){
	var elems = $$("."+_class);
	for(var i=0;i<elems.length;i++){
		var elem = elems[i];
		var url = elem.readAttribute('lnk');
		var arrUrl = url.split("?");
		url = arrUrl[0];
		var params = parseParam(arrUrl[1]);
		params['message']=elem.readAttribute('message');
		//attention ici comme on itere si on ne préévalue pas la fonction avec les param passé en parametre a la fonction,
		//lorsqu'on déclenche l'event 'click' c'est la derniere instance de params qui est passée en parametre puisque 
		//la fonction n'est évaluée qu'au moment du déclenchement de l'event et pas avant.
		var myfunction = function(par){
							new PopupBox(url,
								{
									'height':80
									,'parameters':par
								}
							)
						}.curry(params);
						
		Event.observe(elem,'click',myfunction);	
	}
}

function parseParam(params){
	var arrParams = params.split("&");
	var ret ={};
	for(var i =0;i<arrParams.length;i++){
		param = arrParams[i];
		arrP = param.split("=");
		var key = arrP[0];
		var val = arrP[1];
		ret[key]=val;
	}
	return ret;
}
