// ************** LICENCE ****************
/*
	Copyright (c) PORTANEO.

	This file is part of POSH (Portaneo Open Source Homepage) http://sourceforge.net/projects/posh/.

	POSH is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version

	POSH is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with Posh.  If not, see <http://www.gnu.org/licenses/>.
*/
// ***************************************
// POSH javascript main file
// JAVASCRIPT main functions are defined on portaneo.com
// ***************************************

// Menu variables
var showNewMod=false;
var showBoxStatus=false;
var showHdr=false;
var noteSize=0;
var newModH;

// Newspaper variables
var searchControl;

var dirOptSelId=[];
var dirOptSelSec=[];
var ourSel="";
var ourSelSub=[];
var useMod;
var tab=[];
var dumtab;
var mDivObj=null;
var indef;
var pfolder="";
var allowSave=false;
var isPortal=true;
var rand=$random(0,100).toInt();
var rssNoCache=false;
var leftMenuWidth=250; //left menus width
var topMenuHeight=250;
var p_version;
var createDivDynamically=true;
//var jspass="";
var wip_message="loading ...";
var _current_date=new Date();
var _current_day=_current_date.getDate();
var _current_month=_current_date.getMonth();
var _current_year=_current_date.getFullYear();
var widgetDecalY=0;
var widgetDecalX=0;

var language="en";

//****************************************************************************************************************************************************
//**
//**                                      FRAMEWORK
//**
//****************************************************************************************************************************************************

//********************* GENERIC FUNCTIONS **********************************************************************************************************

$p={
	/*  
	$p.get : Get object based on ID
	input : object ID
	output : object or null if no object with the ID
	*/
	get:function(v_id){return $(v_id);},
	/*
	$p.print : Change HTML content of an object
	inputs
		v_id : id of the object
		v_s : string to display in the object
		v_add : add v_s to the current content of the object. Top= at the beginning, bottom=at the end
	*/
	print:function(v_id,v_s,v_add)
	{
		var l_obj=$(v_id);
		if (v_add!=indef && v_add=="bottom") v_s=l_obj.innerHTML+v_s;
		if (v_add!=indef && v_add=="top") v_s=v_s+l_obj.innerHTML;
		if (l_obj) l_obj.set('html',v_s);
	},
	/*
	$p.getPos : Return the absolute position of a node
	inputs
		v_node : node
		v_ref : Top=get top position / Left=get left position
	output
		Top or Left position of the node
	*/
	getPos:function(v_node,v_ref)
	{
		var l_ret=0;
		while(v_node!=null)
		{
			l_ret+=v_node["offset"+v_ref];
			v_node=v_node.offsetParent;
		}
		return l_ret
	},
	/*
	$p.setClass : Change CSS Class of an object
	inputs :
		v_id : object ID
		v_class : CSS class to apply to the object
	*/
	setClass:function(v_id,v_class)
	{
		var l_obj=$(v_id);
		if (l_obj) l_obj.className=v_class;
	},
	/*
	$p.show : Show/Hide object
	inputs:
		v_id : object ID
		v_disp : display value (block, none, inline)
	*/
	show:function(v_id,v_disp)
	{
		var l_obj=$(v_id);
		if (l_obj!=null) 
			l_obj.setStyle('display', v_disp);
	},
	/*
	$p.isShown : check if object is displayed or not
	input : ID of the object
	output : boolean, true if object is displayed.
	*/
	isShown:function(v_id)
	{
		var l_obj=$(v_id);
		if (l_obj)
		{
			return (l_obj.style.display=='block'?true:false);
		}
		else return false;
	},
	// return minimum of 2 values
	min:function(v1,v2)
	{
		return Math.min(v1,v2);
	},
	// return maximum of 2 values
	max:function(v1,v2)
	{
		return Math.max(v1,v2);
	},
	/*
	$p.addPropertyToClass : change object style property
	inputs :
		v_class : class of the objects which style property is updated
		v_prop : property to be updated
		v_value : new value of the property
	*/
	addPropertyToClass:function(v_class,v_prop,v_value)
	{
		var l_items=_gelstn("*");
		for(var l_item=0;l_item<l_items.length;l_item++)
		{
			if(l_items[l_item].className==v_class){l_items[l_item].style[v_prop]=v_value}
		}
	},
	/*
	$p.changeId : Change an object ID
	inputs :
		v_id : current ID
		v_newId : new ID
	*/
	changeId:function(v_id,v_newId)
	{
		var l_obj=$(v_id);
		if (l_obj) l_obj.id=v_newId;
	},
	/*
	$p.setHeight : define object height
	inputs
		v_id : ID of the object
		v_h : new height
	*/
	setHeight:function(v_id,v_h)
	{
		var l_obj=$(v_id);
		l_obj.setStyle("height",v_h+"px");
	},
	/*
	$p.setWidth : define object width
	inputs
		v_id : ID of the object
		v_w : new width
	*/
	setWidth:function(v_id,v_w)
	{
		var l_obj=$(v_id);
		l_obj.setStyle('width',v_w+"px");
	},
	/*
	$p.img : return image HTML script
	input :
		v_file : image URL (optional)
		v_w : width of the image (optional)
		v_h : height of the image (optional)
		v_alt : alternative text of the image (optional)
		v_cl : class of the image (optional)
		v_id : id of the image (optional)
	output : HTML script
	*/
	img:function(v_file,v_w,v_h,v_alt,v_cl,v_id)
	{
		if (v_file=='-') return '';
		if (v_file==indef || v_file=='') v_file='s.gif';
		var l_width=v_w?' width="'+v_w+'"':'';
		var l_height=v_h?' height="'+v_h+'"':'';
		if (v_alt==indef) v_alt='';
		if (v_cl==indef) v_cl='.';
		if (v_id==indef){v_id='';}else{v_id=' id="'+v_id+'"';}
		if (v_file.substr(0,4)!='http')
			v_file=pfolder+'../images/'+v_file;
		return '<img src="'+v_file+'" alt="'+$p.string.removeCot(v_alt)+'"'+l_width+l_height+' class="'+v_cl+'"'+v_id+' />';
	},
	imgObj:function(v_file,v_w,v_h,v_alt,v_cl,v_id)
	{
		if (v_file==indef || v_file=="") v_file="s.gif";
		if (v_alt==indef) v_alt="";
		if (v_cl==indef) v_cl=".";
		if (v_id==indef) v_id="";
		if (v_file.substr(0,4)!="http")
			v_file=pfolder+"../images/"+v_file;

		l_img=new Element('img',
			{
				'src':v_file,
				'alt':$p.string.removeCot(v_alt),
				'class':v_cl,
				'id':v_id
			}
		);

		if (v_w) l_img.setProperty('width',v_w);
		if (v_h) l_img.setProperty('height',v_h);

		return l_img;
	},
	/*
		$p.adjustFrameHeight : define a frame height based on its content
		input : frame object
	*/
	adjustFrameHeight:function(l_frm)
	{
		//Currently not working, blocked by browser !!
		//l_obj=l_frm.contentDocument?l_frm.contentDocument:document.frames[l_frm.id].document;
		//if (l_obj.body.offsetHeight)
		//{
		//	navHeight(l_frm.id,l_obj.body.offsetHeight+10);
		//}
	}
}

//********************* STRING MANIPULATION *****************************************************************************************************************

$p.string={
	/*
	$p.string.trim : Suppress unused blank space from a string
	input : string
	output : string without unused blank space
	*/
	trim:function(v_s)
	{
		return v_s.replace(/^[\t\s\n\r]+/g,'').replace(/[\t\s\n\r]+$/g,'');
	},
	/*
	$p.string.esc : encode URL string
	input : string
	output : encoded string
	*/
	esc:function(v_s)
	{
		return window.encodeURIComponent?encodeURIComponent(v_s):escape(v_s);
	},
	/*
		$p.string.unesc : decode URL string
		input : encoded string
		output : string
	*/
	unesc:function(v_s)
	{
		return window.decodeURIComponent?decodeURIComponent(unescape(v_s).replace(/%/g,'%25')):unescape(v_s);
	},
	// uppercase transformation
	uc:function(v_s)
	{
		return v_s.toUpperCase();
	},
	// lowercase transformation
	lc:function(v_s){
		return v_s.toLowerCase();
	},
		/*
		$p.string.formatForSearch : Format the search string
		input : search string
		output : formated search string
	*/
	formatForSearch:function(v_s)
	{
		v_s=$p.string.lc(v_s);
		v_s=v_s.trim();
		v_s=$p.string.removeAccents(v_s);
		v_s=v_s.replace(/\+/gi,",");
		v_s=v_s.replace(/;/gi,",");
		v_s=v_s.replace(/"/gi," ");
		v_s=v_s.replace(/\./gi," ");
		v_s=v_s.replace(/'/gi," ");
		v_s=v_s.replace(/, /gi,",");
		v_s=v_s.replace(/  /gi," ");
		return v_s;
	},
	/*
		$p.string.removeAccents : Replace accentuated signs by non accentuated
		input : accentuated string
		output : non accentuated string
	*/
	removeAccents:function(v_s)
	{
		v_s=v_s.replace(/[àâä]/gi,"a");
		v_s=v_s.replace(/[éèêë]/gi,"e");
		v_s=v_s.replace(/[îï]/gi,"i");
		v_s=v_s.replace(/[ôö]/gi,"o");
		v_s=v_s.replace(/[ùûü]/gi,"u");
		v_s=v_s.replace(/[ç]/gi,"c");
		return v_s;
	},
	/*
		$p.string.removeCot : suppress cots from string
		input : string to format,  
		output : formated string
	*/
	removeCot:function(v_s,v_coteType)
	{
		if (v_coteType==indef) v_coteType='both';
		if (v_coteType=='simple' || v_coteType=='both') v_s.replace(/\'/g," ");
		if (v_coteType=='double' || v_coteType=='both') v_s.replace(/\"/g," ");
		return v_s;
	},
	doubleToSimpleCot:function(v_s)
	{
		return v_s.replace(/"/g,"'");
	},
	/*
		$p.string.trunk : truncate string if longer that limit length
		input
			v_s: string
			v_length : limit length
	*/
	trunk:function(v_s,v_length)
	{
		if (v_s.length>v_length) v_s=v_s.substr(0,v_length)+" ..."
		return v_s;
	},
	/*
		$p.string.getVar : Get variable value from a string (URL)
		inputs :
			v_s : string
			v_var : variable searched
		output : value of the variable
	*/
	getVar:function(v_s,v_var)
	{
			var l_ret="",l_items=v_s.split("&");
			for (var i=0;i<l_items.length;i++)
			{
				var l_arr=l_items[i].split("=");
				if (l_arr[0]==v_var)
				{
					l_ret=$p.string.unesc(l_arr[1]);
				}
			}
			return l_ret;
	},
	/*
		$p.string.supVar : suppress a variable and its value from a string
		inputs :
			v_s : string
			v_var : variable searched
	*/
	supVar:function(v_s,v_var)
	{
		var l_items=v_s.split("&");
		for (var i=0;i<l_items.length;i++)
		{
			var l_arr=l_items[i].split("=");
			if (l_arr[0]==v_var)
			{
				l_items.splice(i,1);
			}
		}
		return l_items.join("&");
	},
	/*
		$p.string.textToHtml : transform text to HTML (replace special chars)
		input : text to transform
		output : HTML code
	*/
	textToHtml:function(v_s)
	{
		v_s=v_s.replace(/\&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/  /g,"&nbsp; ").replace(/\r/g,"");
		v_s=($p.navigator.IE)?v_s.replace(/\n/g,"<BR>"):v_s.replace(/\n/g,"<br>");
		return v_s;
	},
	/*
		$p.string.htmlToText : transform HTML to text (replace special chars)
		input : HTML to transform
		output : text equivalent
	*/
	htmlToText:function(v_s)
	{
		v_s=v_s.replace(/\&amp;/g,"&").replace(/\&lt;/g,"<").replace(/&gt;/g,">").replace(/\&nbsp;/g," ").replace(/<BR>/g,"\r\n").replace(/<br>/g,"\r\n").replace(/<BR \/>/g,"\r\n").replace(/<br \/>/g,"\r\n");
		return v_s;
	},
	/*
		$p.string.textToXml : transform text to xml object
		input : text to transform
		output : xml object
	*/
	textToXml:function(v_s)
	{
		var l_xml;
		if (document.implementation.createDocument)
		{
			// Firefox XML object creation 
			var parser = new DOMParser(); 
			l_xml = parser.parseFromString(v_s, "text/xml"); 
		}
		else if (window.ActiveXObject)
		{ 
			// IE XML object creation
			l_xml = new ActiveXObject("Microsoft.XMLDOM"); 
			l_xml.async="false";
			l_xml.loadXML(v_s);
		}
		return l_xml;
	},
	/*
		$p.string.correctCharEncoding: replace chars encoding in string
		input : char to decode
		output : decoded char
	*/
	correctEncoding:function(v_s)
	{
		var l_s=v_s.replace(/\&amp;/g,"&");
		l_s=l_s.replace(/\&#38;/g,"&");
		l_s=l_s.replace(/\&#39;/g,"'");
		l_s=l_s.replace(/\&quot;/g,"'");
		l_s=l_s.replace(/\&apos;/g,"'");
		return l_s;
	},
	//parse text as html //experimental
	parseTextToHtml:function(v_s)
	{
		var l_html;
		if (document.implementation.createDocument)
		{
			// Firefox XML object creation 
			var parser = new DOMParser(); 
			l_html = parser.parseFromString(v_s, "text/html"); 
		}
		else if (window.ActiveXObject)
		{
			// IE XML object creation
			l_html = new ActiveXObject("Microsoft.XMLDOM"); 
			l_html.async="false";
			l_html.loadXML(v_s);
		}
		return l_html;
	},
	/*
		$p.string.simulateGetElementsByTagName : reproduce getElementsByTagName action on a text
		inputs :
			v_s : text
			v_tag : tags searched in text
		output : array containing all tags
	*/
	simulateGetElementsByTagName:function(v_s,v_tag)
	{
		var l_lowercaseString=$p.string.lc(v_s);
		v_tag=$p.string.lc(v_tag);
		var l_starttag=0,l_endtag,l_nocontent,l_endprop,l_resArray=[];
		while (l_lowercaseString.indexOf("<"+v_tag,l_starttag)!=-1)
		{
			var l_nocontent=false;
			l_starttag=l_lowercaseString.indexOf("<"+v_tag,l_starttag)+(v_tag.length+1);
			l_endprop=l_lowercaseString.indexOf(">",l_starttag);
			if (l_lowercaseString.substr(l_endprop-1,1)=="/"){l_endprop--;l_nocontent=true;}
			var l_property={};
			//get tag properties
			var l_propStr=v_s.substring(l_starttag,l_endprop);
			//l_propElmt=l_propStr.split(/(["'] )/);
			var l_propElmt=l_propStr.split(/[("|')][ ]/);
			for (var i=0;i<l_propElmt.length;i++)
			{
				var pair=l_propElmt[i].split(/[=][("|')]/);
				if (pair[1])
				{
					pair[0]=$p.string.trim(pair[0]);
					pair[1]=$p.string.trim(pair[1]);
					l_property[pair[0]]=(pair[1].slice(-1)=='"' || pair[1].slice(-1)=="'")?pair[1].substr(0,(pair[1].length-1)):pair[1];
				}
			}		
			// get tag content
			if (v_s.indexOf("<",l_endprop)!=-1 && !l_nocontent)
			{
				l_endtag=v_s.indexOf("<",l_endprop);
				if (v_s.substr(l_endtag,(v_tag.length+2))=="</"+v_tag)
				{
					l_property["content"]=v_s.substring(l_endprop+1,l_endtag);
				}
				else l_property["content"]="";
			}
			else
			{
				l_property["content"]="";l_endtag=l_endprop;
			}
			l_resArray.push(l_property);
			l_starttag=l_endtag;
		}
		return l_resArray;
	},
	/*
		$p.string.removeTags : remove HTML tags from a string
		input : string
		output : string without tags
	*/
	removeTags:function(v_s)
	{
		return v_s.replace(/<\/?[^>]+(>|$)/g, "");
	},
	/*
		$p.string.removeStyleTags : remove style banner and its content
		input : string
		output : string without style
	*/
	removeStyleTag:function(v_s)
	{
		return v_s.replace(/\<styl[^?]+\/style\>/g, "");
	},
	/*
		$p.string.removeheadTags : remove head banner and its content
		input : string
		output : string without style
	*/
	removeHeadTag:function(v_s)
	{
		return v_s.replace(/\<head[^?]+\/head\>/g, "");
	},
	/*
		$p.string.removeScriptTags : remove script banner and its content
		input : string
		output : string without style
	*/
	removeScriptTag:function(v_s)
	{
		return v_s.replace(/\<script[^?]+\/script\>/g, "");
	}
}

//********************* ARRAYS FUNCTIONS **************************************************************************************************************

$p.array={
	/*
	$p.array.find : search in an array
	inputs
		v_arr : array
		v_searched : searched string
	output : result of the search (true/false)
	*/
	find:function(v_arr,v_searched)
	{
		for (var i=0;i<v_arr.length;i++)
		{
			if (v_arr[i]==v_searched) return true;
		}
		return false;
	}	
}

$p.navigator={
	IE:(document.all)?1:0,
	SAF:navigator.userAgent.indexOf("Safari")>=0,
	NS:navigator.userAgent.indexOf('Netscape')>0,
	OP:navigator.userAgent.indexOf('Opera')>0,
	/*
		$p.navigator.noinclusion : avoid that the page in included in a frame
	*/
	noinclusion:function()
	{
		if (parent.frames.length!=window.frames.length) top.location.href=document.location.href;
	},
	/*
		$p.navigator.addFav : Add application  to the navigator bookmarks
	*/
	addFav:function()
	{
		var l_url=__LOCALFOLDER;
		window.external.addfavorite(l_url,lg("msgFav"));
	},
	/*
		$p.navigator.addHome : add application URL to the navigator home
	*/
	addHome:function()
	{
		var l_url=__LOCALFOLDER;
		//document.body.style.behavior='url(#default#homepage)';
		document.body.setStyle('behavior','url(#default#homepage)');
		document.body.setHomePage(l_url);
	},
	/*
		$p.navigator.changeTitle : update the navigator title
		input : title to be displayed
	*/
	changeTitle:function(v_title)
	{
		if (v_title==indef) {v_title=$p.app.tabs.currName+(tab[$p.app.tabs.sel].nbUnread==0?"":" ("+tab[$p.app.tabs.sel].nbUnread+")");}
		document.title=__apname+' :: '+v_title;
	},
	/*
		$p.navigator.getWidth : get the width of the navigator window
		output : navigator window width
	*/
	getWidth:function()
	{
		if(typeof(window.innerWidth)=='number')
		{
			return window.innerWidth;
		}
		else if( document.documentElement && document.documentElement.clientWidth)
		{
			return document.documentElement.clientWidth;
		}
		else if( document.body && document.body.clientWidth)
		{
			return document.body.clientWidth;
		}
	},
	/*
		$p.navigator.getHeight : get the height of the navigator window
		output : navigator window height
	*/
	getHeight:function()
	{
		if(typeof(window.innerHeight)=='number')
		{
			return window.innerHeight;
		}
		else if(document.documentElement && document.documentElement.clientHeight)
		{
			return document.documentElement.clientHeight;
		}
		else if(document.body && document.body.clientHeight)
		{
			return document.body.clientHeight;
		}
	},
	/*
		$p.navigator.addCssFile : add a css file to the page
		inputs
			v_css : url of the css file
			v_title : title of the css
			v_rel : 
	*/
	addCssFile:function(v_css,v_title,v_rel)
	{
		var l_head=document.getElementsByTagName("head")[0];
		if (l_head==indef) $p.app.debug("no <head> tag in this page !");
		var l_css=new Element('link', 
			{ 
				'href': v_css,
				'rel': v_rel==indef?"stylesheet":v_rel,
				'title': v_title==indef?"css":v_title,
				'type': "text/css"
			}
		 );
						 
		l_head.appendChild(l_css);
	},
	/*
		$p.navigator.setActiveStyleSheet : Activate a style sheet
		input : css title
	*/
	setActiveStyleSheet:function(v_css)
	{
		var l_link;
		for(var i=0;(l_link=document.getElementsByTagName("link")[i]);i++)
		{
			if(l_link.getAttribute("rel").indexOf("style") != -1 && l_link.getAttribute("title"))
			{
				l_link.disabled = true;
				if (l_link.getAttribute("title")=="style "+v_css) l_link.disabled = false;
			}
		}
		$p.app.style=v_css;
		$p.app.menu.config.oldStyle=v_css;
		$p.app.menu.place();
	},
	/*
		$p.navigator.nextstyle : Select the next portal style sheet
	*/
	nextstyle:function()
	{
		if ($p.navigator.NS)
		{
			$p.app.alert.show(lg("msgOptNS"));
		}
		else
		{
			if (tab[$p.app.tabs.sel].style==__themeList.length) tab[$p.app.tabs.sel].style=0;
			tab[$p.app.tabs.sel].style++;
			$p.navigator.setActiveStyleSheet(tab[$p.app.tabs.sel].style);
			if (document.forms["option"] && document.forms["option"].selstyle) document.forms["option"].selstyle.value=__themeList[tab[$p.app.tabs.sel].style-1];
		}
	},
	/*
		$p.navigator.prevstyle : Select the previous portal style sheet
	*/
	prevstyle:function()
	{
		if ($p.navigator.NS)
			$p.app.alert.show(lg("msgOptNS"));
		else
		{
			if (tab[$p.app.tabs.sel].style==1) tab[$p.app.tabs.sel].style=__themeList.length+1;
			tab[$p.app.tabs.sel].style--;
			$p.navigator.setActiveStyleSheet(tab[$p.app.tabs.sel].style);
			if (document.forms["option"] && document.forms["option"].selstyle) document.forms["option"].selstyle.value=__themeList[tab[$p.app.tabs.sel].style-1];
		}
	},
	inputFocus:function(v_input,v_def)
	{
		if (v_input.value==v_def)
		{
			v_input.value='';
			v_input.style.color='#000000';
		}
	},
	inputLostFocus:function(v_input,v_def)
	{
		if (v_input.value=='')
		{
			v_input.value=v_def;
			v_input.style.color='#aaaaaa';
		}
	},
	/*
		$p.navigator.openLink : open an URL
		input :
			v_url : url where page is redirected
			v_newpage : is the page opened in a new window ?
			v_uselang : 2 chars for the language of the new page (if applicable)
	*/
	openLink:function(v_url,v_newpage,v_uselang)
	{
		if (v_url==indef) v_url=window.location.href;
		if (v_uselang) v_url="../l10n/"+__lang+"/"+v_url;
		if (!$p.navigator.ishttp(v_url)) v_url=pfolder+v_url;
		v_url=$p.string.correctEncoding(v_url);
		if (v_newpage)
		{
			window.open(v_url);
		}
		else
		{
			window.location=v_url;
		}
		return false;
	},
	/*
		$p.navigator.simpleUrl : get the first part of the URL
		input : URL
		output : first part of the URL
	*/
	simpleUrl:function(v_url)
	{
		if (v_url.indexOf("?")>0){
			v_url=v_url.substr(0,v_url.indexOf("?"));
		}
		if (v_url.indexOf("#")>0){v_url=v_url.substr(0,v_url.indexOf("#"));}
		return v_url;
	},
	/*
		$p.navigator.ishttp : check if URL is correct
		input : URL
		output : check result (boolean)
	*/
	ishttp:function(url)
	{
		return (url.substr(0,7)=="http://" || url.substr(0,8)=="https://");
	},
	/*
	$p.navigator.getRadioValue : get a radio input value
	input : radio elements
	output : value of the radio selected
	*/
	getRadioValue:function(v_element)
	{
		for (var i=0; i<v_element.length;i++)
		{
			if (v_element[i].checked) return v_element[i].value;
		}
		return false;
	},
	/*
	$p.navigator.setParamInUrl : set a parameter in an URL, or replace an existing one
	Inputs
		v_url : URL
		v_param : parameter name
		v_value : parameter value
	*/
	setParamInUrl:function(v_url,v_param,v_value)
	{
		if (v_url.indexOf("&"+v_param+"=")==-1 && v_url.indexOf("?"+v_param+"=")==-1)
		{
			if (v_url.indexOf("?")==-1)
			{
				return v_url+"?"+v_param+"="+v_value;
			}
			else
			{
				return v_url+"&"+v_param+"="+v_value;
			}
		}
		else
		{
			var l_oldValue=$p.string.getVar($p.navigator.getParamFromUrl(v_url),v_var);
			return v_url.replace(v_param+"="+l_oldValue,v_param+"="+v_value);
		}
	},
	getParamFromUrl:function(v_url)
	{
		return v_url.substr(($p.navigator.simpleUrl(url)).length);
	},
	/*
		$p.navigator.hideObjects : hide Flash / activex objects
	*/
	hideObjects:function()
	{
		var l_objs=$$("object");
		for (var i=0;i<l_objs.length;i++)
		{
			l_objs[i].style.visibility='hidden';
		}
		var l_objs=$$("embed");
		for (var i=0;i<l_objs.length;i++)
		{
			l_objs[i].style.visibility='hidden';
		}
		var l_objs=$$("iframe");
		for (var i=0;i<l_objs.length;i++)
		{
			l_objs[i].style.visibility='hidden';
		}
	},
	showObjects:function()
	{
		var l_objs=$$("object");
		for (var i=0;i<l_objs.length;i++)
		{
			l_objs[i].style.visibility='visible';
		}
		var l_objs=$$("embed");
		for (var i=0;i<l_objs.length;i++)
		{
			l_objs[i].style.visibility='visible';
		}
		var l_objs=$$("iframe");
		for (var i=0;i<l_objs.length;i++)
		{
			l_objs[i].style.visibility='visible';
		}
	},
	/*
		$p.navigator.indicatorElement : indicate a specific element of the page
	*/
	indicatorElement:function(v_element)
	{
		if (v_element==null) return false;

		if ($('indicator')==null)
		{
			l_obj=new Element('img', 
				{
					'src':'../images/indicator.gif',
					'id':'indicator',
					'styles':
					{
						'position':'absolute',
						'z-index':'10002'
					},
					'events':
					{
						'click':function()
						{
							$p.navigator.hideIndicator();
						}
					}
				}
			);
			document.body.appendChild(l_obj)
		}
		$('indicator').style.top=$p.getPos(v_element,"Top")+((v_element)["offsetHeight"]/2)+"px";
		$('indicator').style.left=$p.getPos(v_element,"Left")+((v_element)["offsetWidth"]/2)+"px";
	},
	hideIndicator:function()
	{
		$('indicator').destroy();
	},
	/*
		$p.navigator.sound : play sound
		input (string) : sound file URL
	*/
	sound:function(v_soundFile)
	{
		if (v_soundFile==indef) v_soundFile=__LOCALFOLDER+'tools/beep2.swf';
		if ($('sound')==null)
		{
			var obj=new Element('div',
				{
					'id':'sound'
				}
			);
			document.body.appendChild(obj);
		}
		var l_sound = new Swiff(v_soundFile,
			{
				container: $('sound')
			}
		);
	}
}


//********************* COOKIES ***********************************************************************************************************************

$p.cookie={
	/*
		$p.cookie.check : Check that cookies are accepted by the navigator
	*/
	check:function()
	{
		if (__showHomeBar>0)
		{
			if ((__showHomeBar==1 && document.cookie.indexOf("homebar")==-1) || __showHomeBar==2) homebar();
		}
		if (__showHomeBar==1) $p.cookie.write('homebar=1');
		accepteCookies = (navigator.cookieEnabled) ? true : false;
		if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled)
		{
			$p.cookie.write('homebar=1');
			accepteCookies = (document.cookie.indexOf("homebar")==-1)?false:true;
		}
		if (!accepteCookies) $p.navigator.openLink("cookies_restriction.html",false,true);
	},
	/*
		$p.cookie.write : write in cookie
		inputs :
			v_vars (string) : variables to write in cookie
			v_delay (int) : cookie expires delay
	*/
	write:function(v_vars,v_delay)
	{
		var l_date=new Date();
		if (v_delay==indef) v_delay=10;
		l_date.setFullYear(l_date.getFullYear()+v_delay);
		document.cookie=v_vars+"; path=/; expires="+l_date.toGMTString()+";";
	},
	/*
		$p.cookie.get :  get cookie information
		inputs : 
			v_name : variable to extract from cookie
		output : "" if cookie is not existing else cookie value
	*/
	get:function(v_name)
	{
		var l_ret="";
		var l_name=v_name+'=';
		if (document.cookie.length > 0)
		{
			var l_arr=document.cookie.split(/;/);
			for (var i=0;i<l_arr.length;i++)
			{
				l_arr[i]=l_arr[i].trim();
				
				if (l_arr[i].indexOf((l_name))!= -1)
				{
					l_ret=l_arr[i].substring((l_name.length),l_arr[i].length);
				}
			}
		}
		return l_ret;
	}
}

//********************* DATES ************************************************************************************************

$p.date={
	/*
		$p.date.convertFromRss : format rss date
		input : rss extracted date
		output : javascript usable date
	*/
	convertFromRss:function(v_date)
	{
		v_date=v_date.trim();
		v_date=v_date.replace("CEST","CST");
		var l_formatedDate,l_try;
		//RFC2822 date is recognize
		l_date=new Date(v_date);
		if (isNaN(l_date)) {l_try=v_date.substr(0,12)+"20"+v_date.substr(12);l_date=new Date(l_try);}
		//short date
		if (isNaN(l_date)) {l_try=v_date.substr(0,7)+"20"+v_date.substr(7);l_date=new Date(l_try);}
		// DB date (long)
		if (isNaN(l_date)) {l_date=new Date(v_date.substr(0,4).toInt(),(parseInt(v_date.substr(5,7),10)-1),v_date.substr(8,10).toInt(),v_date.substr(11,13).toInt(),v_date.substr(14,16).toInt(),0);}
		// DB date (short)
		if (isNaN(l_date)) {l_date=new Date(parseInt(v_date.substr(0,4),10),(parseInt(v_date.substr(5,7),10)-1),v_date.substr(8,10).toInt());}
		if (isNaN(l_date)) {l_date=new Date(v_date.substr(6,10).toInt(),(parseInt(v_date.substr(3,5),10)-1),v_date.substr(0,2).toInt());}
		
		//if not a valid date, date = yesterday
		if (isNaN(l_date)) {var l_nDate=new Date();l_formatedDate=new Date(l_nDate.getDate()-7,l_nDate.getMonth(),l_nDate.getYear());}
		else l_formatedDate=l_date;
		return l_formatedDate;
	},
	/*
		$p.date.format: format a javascript date (mm/dd/yyyy)
		input : javascript date object
	*/
	format:function(v_date)
	{
		if (v_date==indef) return;
		var l_day=v_date.getDate();
		var l_month=v_date.getMonth()+1;
		var l_year=v_date.getFullYear();
		return (__lang=="fr"?l_day+"/"+l_month+"/"+l_year:l_month+"/"+l_day+"/"+l_year);
	},
	/*
		$p.date.addLeftZeros : add 0 on the left if necessary
		input : 
			v_s : input string
			v_length : length of the returned string
	*/
	addLeftZeros:function(v_s,v_length)
	{
		var nbZero = (v_length)-(v_s.length);
		for (var i=0;i<nbZero;i++)
		{
			v_s+="0"+v_s;
		}
		return v_s;
	},
	/*
		$p.date.formatDateShort : format a javascript date (mm/dd/yyyy)
		input : 
			v_date : javascript date object
			v_useTime : display time or not
	*/
	formatDateShort:function(v_date,v_useTime)
	{
		if (v_date=='') return '';
		var l_date=(__lang=="fr"?$p.date.addLeftZeros(v_date.getDate(),2)+"/"+$p.date.addLeftZeros((v_date.getMonth()+1),2):$p.date.addLeftZeros((v_date.getMonth()+1),2)+"/"+$p.date.addLeftZeros(v_date.getDate(),2))+"/"+v_date.getFullYear();
		if (v_useTime && v_date.getHours()!=0 && v_date.getMinutes()!=0)l_date+=", "+$p.date.addLeftZeros(v_date.getHours(),2)+"h"+$p.date.addLeftZeros(v_date.getMinutes(),2);
		return l_date
	},
	/*
		$p.date.formatDateLong : format a javascript date (ex: 12 april 2007)
		input : 
			v_date : javascript date object
			v_useTime : display time or not
	*/
	formatDateLong:function(v_date,v_useTime)
	{
		if (typeof(v_date)!='object') return '';
		if (v_date.getFullYear()==_current_year && v_date.getMonth()==_current_month && v_date.getDate()==_current_day) return lg("today");

		var yesterday=new Date();
		yesterday.setDate(yesterday.getDate()-1);
		if (v_date.getFullYear()==yesterday.getFullYear() && v_date.getMonth()==yesterday.getMonth() && v_date.getDate()==yesterday.getDate()) return lg("yesterday");

		var l_date=v_date.getDate()+" "+lg("month"+(v_date.getMonth()+1))+" "+v_date.getFullYear();
		if (v_useTime && v_date.getHours()!=0 && v_date.getMinutes()!=0)l_date+=" "+lg("at")+" "+$p.date.addLeftZeros(v_date.getHours(),2)+"h"+$p.date.addLeftZeros(v_date.getMinutes(),2);
		
		return l_date
	},
	/*
		$p.date.delayFromNow : Compute delay between a date and now
		input : javascript date object
		output : delay (seconds)
	*/
	delayFromNow:function(v_date)
	{
		if (v_date==indef) return;
		var now=_current_date;
		var l_delai=(now.getTime()-v_date.getTime())/1000;
		if (l_delai<-1000) l_delai=864000;
		return l_delai;
	},
	/*
		$p.date.formatDelai : Format delay value
		input : delay (seconds)
		output : delay (day, hours, minuts, ...)
	*/
	formatDelai:function(v_t)
	{
		var l_ret="";
		if (!isNaN(v_t))
		{
			if (v_t<=60){ret=lg("lblThereIs")+" 1 "+lg("lblMinute");}
			else if (v_t<=3600){l_ret=lg("lblThereIs")+" "+Math.floor(v_t/60)+" "+lg("lblMinute");}
			else if (v_t<=86400){l_ret=lg("lblThereIs")+" "+Math.floor(v_t/3600)+" "+lg("lblHour");}
			else {l_ret=lg("lblThereIs")+" "+Math.floor(v_t/86400)+" "+lg("lblDay");}
		}
		return l_ret;
	},
	/*
		$p.date.getDbFormat : convert date to DataBase format (mm-dd-yyyy)
		input : day, month and year
		output : DB formated date
	*/
	getDbFormat:function(v_day,v_month,v_year)
	{
		v_month=("00").substr(0,2-v_month.length)+v_month;
		v_day=("00").substr(0,2-v_day.length)+v_day;
		return v_year+"-"+v_month+"-"+v_day;
	},
	/*
		$p.date.convertFromDb : convert a DataBase date to javascript date object
		inputs:
			v_date : date to be formated
			//v_useTime : true if date is DATETIME format, false if data is DATE format
		output : javascript date object
	*/
	convertFromDb:function(v_date)
	{
		if (v_date=='0000-00-00') return '';
		var l_month=parseInt(v_date.substr(5,2),10)-1;
		if (v_date.length==10)
		{
			var l_date=new Date(v_date.substr(0,4),l_month,v_date.substr(8,2));
		}
		else
		{
			var l_date=new Date(v_date.substr(0,4),l_month,v_date.substr(8,2),v_date.substr(11,2),v_date.substr(14,2),0);
		}
		return l_date;
	}
}

//********************* TAGS ************************************************************************************************

$p.tags={
	/*
		$p.tags.formatList : format a tags list
		input : list of tags
	*/
	formatList:function(v_s)
	{
		var l_s=$p.string.removeTags($p.string.lc(v_s.trim()));
		while (l_s.indexOf("  ")!=-1) l_s=l_s.replace(/  /g," ");
		l_s=l_s.replace(",,",",");
		l_s=l_s.replace(", ,",",");
		if (l_s.slice(-1)==",") l_s=l_s.substr(0,l_s.length-1);
		if (l_s.substr(0,1)==",") l_s=l_s.substr(1);
		return l_s;
	}
}
$p.tags.autocompletion={
	lastTagWithNoResult:"",
	currentInput:"",
	lastAjaxHandle:-1,
	/*
		$p.tags.autocompletion.get : get autocompletion tags
		input : input id
	*/
	get:function(v_id)
	{
		$p.tags.autocompletion.currentInput=v_id;
		var l_input=$(v_id);
		var l_inputValue=l_input.value;
		//kill the previous ajax autocompletion call
		if ($p.tags.autocompletion.lastAjaxHandle!=-1 && $p.ajax.xmlhttp[$p.tags.autocompletion.lastAjaxHandle]!=null) $p.ajax.xmlhttp[$p.tags.autocompletion.lastAjaxHandle].abort();
		// get the current word
		var l_pos=0;
		while (l_inputValue.indexOf(",",l_pos)!=-1)
		{
			l_pos=l_inputValue.indexOf(",",l_pos)+1;
		}
		var l_word=l_inputValue.substr(l_pos);
		l_word=$p.string.formatForSearch(l_word);
		
		if (l_word.length>2 && ($p.tags.autocompletion.lastTagWithNoResult=="" || l_word.indexOf($p.tags.autocompletion.lastTagWithNoResult)!=0))
		{
			$p.tags.autocompletion.lastTagWithNoResult="";
			$p.tags.autocompletion.lastAjaxHandle=getXml("xmlautocompletion.php?tag="+l_word,$p.tags.autocompletion.display,new Array(v_id,l_word));
		}
		else
		{
			$p.tags.autocompletion.hide();
		}
	},
	/*
		$p.tags.autocompletion.display : display tags corresponding
	*/
	display:function(response,vars)
	{
		var l_divName=vars[0]+"_autocomp";
		var l_result=response.getElementsByTagName("tag");
		if (l_result.length>0)
		{
			if ($(l_divName)==null)
			{
				var l_inputObj=$(vars[0]);
				l_obj=new Element('div', 
					{
						'styles': {
									'top': $p.getPos(l_inputObj,"Top")+(l_inputObj)["offsetHeight"]+2+"px",
									'left': $p.getPos(l_inputObj,"Left")+"px",
									'width': (l_inputObj)["offsetWidth"]+"px"
								  },
						'id': l_divName,
						'class': 'autocompletion'
					}
				);
				document.body.appendChild(l_obj);
			}
			else
				$p.show(l_divName,"block");
		
			var l_s="<table width='100%'>",l_label="";
			for (var i=0;i<l_result.length;i++)
			{
				l_label=$p.ajax.getVal(l_result[i],"label","str",false,"???");
				l_s+="<tr><td class='unselected' onmouseout=\"this.className='unselected';\" onmouseover=\"this.className='selected';\" onmousedown=\"$p.tags.autocompletion.select('"+l_label+"')\">"+l_label+"</td></tr>";
			}
			l_s+="</table>";
			//if only one result corresponding to word typed, hide autocompletion
			if (l_result.length==1 && l_label==vars[1])
				$p.tags.autocompletion.hide();
			else
				$p.print(l_divName,l_s);
		}
		else if (response.getElementsByTagName("notag")[0])
		{
			$p.tags.autocompletion.lastTagWithNoResult=vars[1];
			$p.tags.autocompletion.hide();
		}
	},
	/*
		$p.tags.autocompletion.select : select a tag in the autocompletion list
		inputs
			v_label : tag label selected
			v_id : input id
	*/
	select:function(v_label)
	{
		var l_input=$($p.tags.autocompletion.currentInput);
		var l_inputValue=l_input.value;
		var l_pos=0;
		while (l_inputValue.indexOf(",",l_pos)!=-1)
		{
			l_pos=l_inputValue.indexOf(",",l_pos)+1;
		}
		//replace last word with selected one
		($($p.tags.autocompletion.currentInput)).value=l_inputValue.substr(0,l_pos)+v_label;
		$p.tags.autocompletion.hide();
		($($p.tags.autocompletion.currentInput)).focus();
	},
	hide:function()
	{
		$p.show($p.tags.autocompletion.currentInput+"_autocomp","none");
		if ($p.tags.autocompletion.lastAjaxHandle!=-1 && $p.ajax.xmlhttp[$p.tags.autocompletion.lastAjaxHandle]!=null) $p.ajax.xmlhttp[$p.tags.autocompletion.lastAjaxHandle].abort();
		$p.tags.autocompletion.lastAjaxHandle=-1;
	}
}

/*
	correctMailEncoding : correct emails content encoding chars
	input : email content (! need to be lower case)
	output : corrected content
*/
function correctMailEncoding(v_s)
{
	if (v_s.indexOf("?utf-8?")!=-1)
	{
		v_s=v_s.replace(/\=\?utf\-8\?q\?/g,"");
		//v_s=v_s.replace(/\=\?UTF\-8\?Q\?/g,"");
		v_s=v_s.replace(/\?\= /g,"");
		v_s=v_s.replace(/\_/g," ");
		v_s=v_s.replace(/\?\=/g,"");
	}
	else if (v_s.indexOf("-8859-1?")!=-1)
	{
		//v_s=v_s.replace(/\=\?ISO-8859-1\?Q\?/g,"");
		v_s=v_s.replace(/\=\?iso-8859-1\?q\?/g,"");
		v_s=v_s.replace(/\?\= /g,"");
		v_s=v_s.replace(/\_/g," ");
		v_s=v_s.replace(/\?\=/g,"");
	}
	v_s=v_s.replace(/\=e9/g,"é");
	v_s=v_s.replace(/\=e0/g,"à");
	v_s=v_s.replace(/\=e8/g,"è");
	v_s=v_s.replace(/\=e7/g,"ç");
	v_s=v_s.replace(/\=f9/g,"ù");
	v_s=v_s.replace(/\=ea/g,"ê");
	v_s=v_s.replace(/\=e2/g,"â");
	v_s=v_s.replace(/\=f4/g,"ô");
	v_s=v_s.replace(/\=ee/g,"î");
	v_s=v_s.replace(/\=fb/g,"û");
	v_s=v_s.replace(/\=f6/g,"ö");
	v_s=v_s.replace(/\=fc/g,"ü");
	v_s=v_s.replace(/\=ef/g,"ï");
	v_s=v_s.replace(/\=e4/g,"ä");
	v_s=v_s.replace(/\=eb/g,"ë");
	v_s=v_s.replace(/\=28/g,"(");
	v_s=v_s.replace(/\=29/g,")");
	v_s=v_s.replace(/\=20/g," ");
	v_s=v_s.replace(/\=3a/g,":");
	v_s=v_s.replace(/\=25/g,"€");
	v_s=v_s.replace(/\=ba/g,"°");
	v_s=v_s.replace(/=c3=a9/g,"é");
	v_s=v_s.replace(/=c3=a8/g,"è");
	v_s=v_s.replace(/=c3=a0/g,"à");
	v_s=v_s.replace(/=c3=a2/g,"â");
	v_s=v_s.replace(/=c3=aa/g,"ê");
	v_s=v_s.replace(/=c3=ae/g,"î");
	v_s=v_s.replace(/=c3=b4/g,"ô");
	v_s=v_s.replace(/=c3=bb/g,"û");
	v_s=v_s.replace(/=c3=b9/g,"ù");
	v_s=v_s.replace(/=c3=bc/g,"ü");
	v_s=v_s.replace(/=c3=a7/g,"ç");
	v_s=v_s.replace(/=09/g," ");
	v_s=v_s.replace(/\=\n/g,"");
	while (v_s.indexOf("  ")!=-1) v_s=v_s.replace(/  /g," ");
	v_s=v_s.replace(/\n /g,"\n");
	while (v_s.indexOf("\n\n")!=-1) v_s=v_s.replace(/\n\n/g,"\n");
	v_s=v_s.replace(/\n/g,"<br />");
	v_s=v_s.replace(/\r/g,"");
	return v_s;
}

/*
	notifyByEmail : send email to user
	inputs :
		v_address : email addresses (string or array)
		v_title : email title
		v_description : email message
		v_from (optional) : sender email
		v_decode : define if an UTF8 decode needs to be done
*/
function notifyByEmail(v_address,v_title,v_description,v_from)
{
	var l_address="";
	if (typeof(v_address)=="string" && v_address!="")
	{
		l_address="em0="+v_address+"&";
	}
	else
	{
		for (var i=0;i<v_address.length;i++)
		{
			l_address+="em"+i+"="+v_address[i]+"&";
		}
	}
	if (l_address!="")
	{
		$p.ajax.call('scr_sendemail.php',
			{
				'type':'execute',
				'variables':l_address+"title="+$p.string.esc(v_title)+"&desc="+$p.string.esc(v_description)+"&from="+$p.string.esc((v_from==indef?"":v_from)),
				'alarm':true
			}
		);
	}
	return false;
}

//********************* EFFECTS ************************************************************************************************

$p.effect={
	obj:{},
	opacity:0,
	timer:0,
	actionTriggered:indef,
	/*
		$p.effect.fadein : apply fadein effect to an object
	*/
	fadein:function(v_obj,v_triggerAction,v_limit)
	{
		if($p.effect.timer!=0) clearTimer($p.effect.timer);
		if (v_limit==indef) v_limit=1;
		//if ($p.effect.timer) clearTimeout($p.effect.timer);
		$p.effect.obj=v_obj;
		$p.effect.opacity=0;
		if (v_triggerAction!=indef) $p.effect.actionTriggered=v_triggerAction;
		$p.effect.fadeinaction(v_limit);
		$p.effect.obj.setStyle("display","block");
	},
	fadeinaction:function(v_limit)
	{
		$p.effect.opacity+=0.1;
		$p.effect.obj.setOpacity(""+$p.effect.opacity);
		$p.effect.obj.setStyle("filter","alpha(opacity="+($p.effect.opacity*100)+")");
		if ($p.effect.opacity>=v_limit)
		{
			if ($p.effect.actionTriggered!=indef)
			{
				if (typeof($p.effect.actionTriggered)=='object')
				{
					for (var i=0;i<$p.effect.actionTriggered.length;i++)
					{
						eval($p.effect.actionTriggered[i]);
					}
				}
				else
				{
					eval($p.effect.actionTriggered);
				}
				$p.effect.actionTriggered=indef;
			}
			clearTimer($p.effect.timer);
		}
		else
		{
			$p.effect.timer=setTimeout("$p.effect.fadeinaction("+v_limit+")",70);
		}
	},
	/*
		$p.effect.fadeout : apply fadeout effect to an object
	*/
	fadeout:function(v_obj)
	{
		if($p.effect.timer!=0) clearTimer($p.effect.timer);
		$p.effect.obj=v_obj;
		$p.effect.opacity=1;
		$p.effect.fadeoutaction();
	},
	fadeoutaction:function()
	{
		$p.effect.opacity-=0.1;
		$p.effect.obj.setOpacity(""+$p.effect.opacity);
		$p.effect.obj.setStyle("filter","alpha(opacity="+($p.effect.opacity*100)+")");
		if ($p.effect.opacity>0)
		{
			$p.effect.timer=setTimeout("$p.effect.fadeoutaction()",70);
		}
		else
		{
			$p.effect.obj.setStyle("display","none");
			clearTimer($p.effect.timer);
		}
	}
}
//  Base64 encode
//  http://www.webtoolkit.info/
$p.Base64 = {
	// private property
	_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
	encode:function(input)
	{
		if (input=="" || input==":") return "";
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;
		input = $p.Base64._utf8_encode(input);
		while (i < input.length)
		{
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);
			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;
			if (isNaN(chr2))
			{
				enc3 = enc4 = 64;
			}
			else if (isNaN(chr3)) {
				enc4 = 64;
			}
			output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
		}
		return output;
	},
	// private method for UTF-8 encoding
	_utf8_encode : function (string)
	{
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
		for (var n = 0; n < string.length; n++)
		{
			var c = string.charCodeAt(n);
			if (c < 128)
			{
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048))
			{
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else
			{
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
		}
		return utftext;
	}
}

//****************************************************************************************************************************************************
//**
//**                                      AJAX
//**
//****************************************************************************************************************************************************

$p.ajax={
	requestId:0,
	requests:[],
	_WAITING:0,
	_RUNNING:1,
	xmlhttp_handle:0,
	xmlhttp:[],
	executeRequest_running:false,
	executeRequest_waitingNb:0,
	/*
		$p.ajax.xhr : create the xmlhttprequest object based on navigator compatibility
	*/
	xhr:function()
	{
		try
		{
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (e)
		{}
		try
		{
			return new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{}
		try
		{
			return new XMLHttpRequest();
		}
		catch(e)
		{}
		$p.app.alert.show(lg("msgXMLnav"));
		return null;
	},
	/*
		$p.ajax.chooseTunnel : Define tunnel script 
		inputs
			v_url : url of the file to read
			v_vars : GET/POST varialbes sent to the file to read
			v_type : XML/HTML
	*/
	chooseTunnel:function(v_url,v_vars,v_type,pfolder)
	{
		var l_feed;
		// if url not on the same domain, use tunnel
		if ($p.navigator.ishttp(v_url))
		{
			//if file is located on the current server
			if (v_url.substr(7,(location.hostname).length)==location.hostname)
			{
				l_feed=v_url;
			}
			else
			{
				if (__useproxy)
				{
					if (__proxypacfile=="")
					{
						if (v_vars==indef || $p.string.getVar(v_vars,"auth")=="")
						{
							l_feed=pfolder+"../tools/xmltunproxy.php?ptyp="+v_type+"&url="+v_url;
						}
						else
						{
							l_feed=pfolder+"../tools/xmltunproxy.php?ptyp="+v_type+"&url="+v_url+"&auth="+$p.string.getVar(v_vars,"auth");
						}
					}
					else
					{
						if (getProxy(v_url)=="")
						{
							l_feed=pfolder+"../tools/xmltun.php?ptyp="+v_type+"&url="+v_url;
						}
						else
						{
							l_feed=pfolder+"../tools/xmltunproxypac.php?ptyp="+v_type+"&url="+v_url+"&proxy="+getProxy(v_url);
						}
					}			
				}
				else
				{
					if (v_vars==indef || $p.string.getVar(v_vars,"auth")=="")
					{
						l_feed=pfolder+"../tools/xmltun.php?ptyp="+v_type+"&url="+v_url;
					}
					else
					{
						l_feed=pfolder+"../tools/xmltunauth.php?ptyp="+v_type+"&auth="+$p.string.getVar(v_vars,"auth")+"&url="+v_url;
					}
				}
			}
		}
		else
		{
			l_feed=v_url.substr(0,3)=="../"?v_url:pfolder+v_url;
		}
		return l_feed;
	},
	/*
		$p.ajax.call : ajax call function
		inputs
			v_url : url of the page called
			v_param : parameters used for this call (refer to the online documentation)
	*/
	call:function(v_url,v_param)
	{
		var l_noerror=true,l_msg,l_err;
		var l_type=(v_param['source']==indef?"xml":v_param['source']);
		var l_method=(v_param['method']==indef?"GET":v_param['method']);
		var l_async=(v_param['asynchron']==indef?true:v_param['asynchron']);
		if (!pfolder) {pfolder="";}
		var l_priority=(v_param['priority']==indef?2:v_param['priority']);
		if (v_param['callback']==indef) v_param['callback']="";
		if (v_param['type']=='load')
		{
			$p.ajax.requests.push(new $p.ajax.request("load",[v_url,v_param['callback']['function'],v_param['callback']['variables'],l_type,v_param['variables'],l_method,v_param['escape'],l_async],l_priority));
			$p.ajax.executeRequests();
			return false;
		}
		else
		{
			if (allowSave||v_param['forceExecution'])
			{
				$p.ajax.requests.push(new $p.ajax.request("execute",[v_url,v_param['variables'],v_param['alarm'],v_param['callback']['function'],l_async,v_param['callback']['variables']],l_priority));
				$p.ajax.executeRequests();

				return;
			}
			else
			{
				var l_feed=pfolder+v_url;
			}
			//debug
			$p.app.debug("execute : "+l_feed+" (variables: "+v_param['variables']+")");
			return l_noerror;
		}
	},
	/*
		$p.ajax.request : new ajax process object
		inputs
			type : 
			action :
			priority : 1=high priority, 2=normal, 3=low priority
			status : 0=waiting , 1=running,  2=cancelled
			loop : loop number (process can be launch several times)
	*/
	request:function(type,action,priority,status,loop)
	{
		this.type=type;
		this.uniqId=$p.ajax.requestId;
		$p.ajax.requestId++;
		this.action=action;
		this.priority=(priority==indef?2:priority);
		this.status=(status==indef?$p.ajax._WAITING:status);
		this.loop=(loop==indef?1:loop);
	},
	/*
		$p.ajax.executeRequests : lLaunch ajax process based on their priority (queue managed)
	*/
	executeRequests:function()
	{
		//avoid that concurrent treads execution function calls runs
		if (!$p.ajax.executeRequest_running)
		{
			$p.ajax.executeRequest_waitingNb=0;
		}
		else
		{
			$p.ajax.executeRequest_waitingNb++;
			return;
		} 
		$p.ajax.executeRequest_running=true;
		
		
		var l_requests=$p.ajax.requests;
		
		//sort by status and priority
		l_requests.sort($p.ajax.sortRequests);
		
		//($p.ajax.requests).sort($p.ajax.sortRequests);
		var l_nbRunning=0;
		for (var i=0;i<l_requests.length;i++)
		{
			if (l_requests[i].status==$p.ajax._RUNNING) l_nbRunning++;
			if (l_nbRunning==2) break;
			if (l_requests[i].status==$p.ajax._WAITING)
			{
				l_requests[i].status=$p.ajax._RUNNING;
				if (l_requests[i].type=="execute")
				{
					$p.ajax.execute(i);
				}
				else
				{
					$p.ajax.load(i);
				}
			}
		}

		//check if processes are waiting for execution
		$p.ajax.executeRequest_running=false;
		if ($p.ajax.executeRequest_waitingNb!=0) $p.ajax.executeRequests();
	},
	/*
		$p.ajax.sortRequests : sort ajax processes based on their status, ID and priority
	*/
	sortRequests:function(a,b)
	{
		if (a.status<b.status) return 1;
		if (a.status>b.status) return -1;
		if (a.priority<b.priority) return -1;
		if (a.priority>b.priority) return 1;
		if (a.uniqId<b.uniqId) return -1;
		if (a.uniqId>b.uniqId) return 1; 
	},
	/*
		$p.ajax.execute : execute script with ajax process
	*/
	execute:function(v_id)
	{
		var l_requestUniqId=$p.ajax.requests[v_id].uniqId;
		
		var v_scr=$p.ajax.requests[v_id].action[0];
		var v_vars=$p.ajax.requests[v_id].action[1];
		var v_alarm=$p.ajax.requests[v_id].action[2];
		var fct=$p.ajax.requests[v_id].action[3];
		var v_async=$p.ajax.requests[v_id].action[4];
		var fctvars=$p.ajax.requests[v_id].action[5];

		$p.app.setAsWorking();
		var xmlhttp=null;

		xmlhttp = $p.ajax.xhr();
		if (xmlhttp==null) l_noerror=false;

		if (v_async)
		{
			xmlhttp.onreadystatechange = function()
			{
				if (xmlhttp.readyState == 4)
				{
					$p.ajax.endRequest(l_requestUniqId);

					if (xmlhttp.status >= 400)
					{
						$p.app.debug("Xml file not read : "+v_scr,"error");
						$p.app.connection.test();
						l_noerror=false;
					}
					else
					{
						$p.ajax.callbackExecution(xmlhttp,v_alarm,fct,fctvars,v_scr);
					}
					$p.app.setAsWorking(false);
				}
			}
		}

		var l_feed=pfolder+v_scr;
		xmlhttp.open("POST",l_feed, v_async);
		xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		xmlhttp.send(v_vars);

		if (!v_async)
		{
			$p.ajax.callbackExecution(xmlhttp,v_alarm,fct,fctvars,v_scr);
				
			$p.ajax.endRequest(l_requestUniqId); // kill ajax process when non asynchron mode
		}

		$p.app.debug("execute : "+l_feed+" (variables: "+v_vars+")");

	},
	callbackExecution:function(xmlhttp,v_alarm,fct,fctvars,v_scr)
	{
		if (xmlhttp.responseXML.getElementsByTagName("status")[0])
		{
			if (xmlhttp.responseXML.getElementsByTagName("msg")[0]) var l_msg=$p.ajax.getVal(xmlhttp.responseXML,"msg","str",false,lg("msgXMLerror")+"(1)");
			if (xmlhttp.responseXML.getElementsByTagName("err")[0]) var l_err=$p.ajax.getVal(xmlhttp.responseXML,"err","str",false,lg("msgXMLerror")+"(2)");
			if (xmlhttp.responseXML.getElementsByTagName("ret")[0]) var l_ret=xmlhttp.responseXML.getElementsByTagName("ret")[0].firstChild.nodeValue;
			if (v_alarm&&l_msg){$p.app.alert.show(lg(l_msg),1)}
			if (v_alarm&&l_err){$p.app.alert.show(lg(l_err),3)}
			if (fct && !l_err)
			{
				if (l_ret)
				{
					if (fctvars==indef){fct(l_ret);}else{fct(l_ret,fctvars);}
				}
				else
				{
					if (fctvars==indef){fct();}else{fct(fctvars);}
				}
			}
		}
		else
		{
			$p.app.debug("Xml file not correct : "+v_scr,"error");
			$p.app.debug("Content read or status tag missing : "+xmlhttp.responseText,"error");
			if (xmlhttp.responseXML.getElementsByTagName("disconnected")[0]) return $p.app.connection.errorTest();
			l_noerror=false;
		}
		$p.app.setAsWorking(false);
	},
	/*
		$p.ajax.load : load data with ajax process
	*/
	load:function(v_id)
	{
		var l_requestUniqId=$p.ajax.requests[v_id].uniqId;

		var v_url=$p.ajax.requests[v_id].action[0];
		var fct=$p.ajax.requests[v_id].action[1];
		var v_fctvars=$p.ajax.requests[v_id].action[2];
		var v_type=$p.ajax.requests[v_id].action[3];
		var v_vars=$p.ajax.requests[v_id].action[4];
		var v_method=$p.ajax.requests[v_id].action[5];
		var v_escapefct=$p.ajax.requests[v_id].action[6];
		var v_async=$p.ajax.requests[v_id].action[7];

		$p.ajax.xmlhttp_handle++;
		var l_handle=$p.ajax.xmlhttp_handle;
		$p.ajax.xmlhttp[l_handle]=null;

		$p.ajax.xmlhttp[l_handle] = $p.ajax.xhr();

		var xhrTimeout = setTimeout(function(l_handle,v_id,v_url,v_escapefct)
		{
			if ($p.ajax.xmlhttp[l_handle]==indef) return;
			$p.ajax.xmlhttp[l_handle].abort();
			$p.ajax.xmlhttp[l_handle].onreadystatechange = function(){};
			
			if ($p.ajax.requests[v_id].loop<3)
			{
				//relaunch process with lowest priority
				$p.app.debug("Relaunch : "+v_url,"error");
				$p.ajax.requests[v_id].loop++;
				$p.ajax.requests[v_id].priority=3;
				$p.ajax.requests[v_id].status=$p.ajax._WAITING;
			}
			else
			{
				$p.app.debug("Abort xml file reading : "+v_url,"error");
				$p.ajax.endRequest($p.ajax.requests[v_id].uniqId);
				if (v_escapefct!=indef) v_escapefct();
			}
			$p.ajax.executeRequests();
		}, $p.ajax.requests[v_id].loop*10000);

		if (v_async)
		{
			$p.ajax.xmlhttp[l_handle].onreadystatechange = function()
			{
				if ($p.ajax.xmlhttp[l_handle].readyState == 4)
				{
					clearTimeout(xhrTimeout);

					if ($p.ajax.xmlhttp[l_handle].status >= 400)
					{
						$p.app.debug("Xml file not read : "+v_url+" (status "+$p.ajax.xmlhttp[l_handle].status+")","error");
						$p.app.debug("Content read : "+$p.ajax.xmlhttp[l_handle].responseText,"error");
						$p.ajax.xmlhttp[l_handle].onreadystatechange = function(){};
						$p.ajax.xmlhttp[l_handle]=null;
						$p.ajax.endRequest(l_requestUniqId);

						if (v_escapefct!=indef) v_escapefct();
						else $p.app.connection.test();
					}
					else
					{
						$p.ajax.xmlhttp[l_handle].onreadystatechange = function(){};
						$p.ajax.callback(l_requestUniqId,l_handle,fct,v_fctvars,v_type);
					}
				}
			}
		}

		//if rss feed, check proxy settings
		if (v_vars!=indef && $p.string.getVar(v_vars,"rssurl")!="" && __proxypacfile!="")
		{
			v_vars+="&proxy="+getProxy($p.string.getVar(v_vars,"rssurl"));
		}
		l_feed=$p.ajax.chooseTunnel(v_url,v_vars,v_type,pfolder);

		$p.ajax.xmlhttp[l_handle].open(v_method,l_feed,v_async);

		if (v_method=="GET")
		{
			$p.ajax.xmlhttp[l_handle].send(null);
		}
		else
		{
			$p.ajax.xmlhttp[l_handle].setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			$p.ajax.xmlhttp[l_handle].send(v_vars);
		}

		if (!v_async) // kill ajax process when non asynchron mode
		{
			$p.ajax.callback(l_requestUniqId,l_handle,fct,v_fctvars,v_type);
			clearTimeout(xhrTimeout);
			$p.ajax.endRequest(l_requestUniqId); 
		}
		//debug (need to activate debug mode)
		$p.app.debug("read "+v_type+" : "+l_feed+" (variables: "+v_vars+")");

		return l_handle;
	},
	/*
		$p.ajax.callback : call function when ajax loading done
	*/
	callback:function(v_requestId,v_handle,v_fct,v_vars,v_type)
	{
		var l_ret=(v_type=="xml")?$p.ajax.xmlhttp[v_handle].responseXML:$p.ajax.xmlhttp[v_handle].responseText;
		$p.ajax.xmlhttp[v_handle]=null;
		$p.ajax.endRequest(v_requestId);
		
		if (v_fct && typeof(v_fct)=="function")
		{
			v_fct(l_ret,v_vars);
		}
		else
		{
			$p.app.debug("getXml Error : callback function is not existing !","error");
		}
	},
	/*
		$p.ajax.endRequest : remove request
		input : uniq ID of the request
	*/
	endRequest:function(v_uniqId)
	{
		for (var i=0;i<$p.ajax.requests.length;i++)
		{
			if ($p.ajax.requests[i].uniqId==v_uniqId)
			{
				$p.ajax.requests.splice(i,1);
				break;
			}
		}
		$p.ajax.executeRequests();
	},
	/*
		getXMLprop : get a property value from an XML object item
		inputs
			v_item : xml object item
			v_name : name of the property
			v_type : type of the value of the property (int/str)
			v_required : is this value required (boolean)
			v_default : default return value if the property is missing
		output : property value
	*/
	getProp:function(v_item,v_name,v_type,v_required,v_default)
	{
		if (v_default==indef) v_default="";
		if (v_required&&!v_item.getAttribute(v_name))
		{
			$p.app.alert.show(lg("msgModuleIssue"));
			return v_default;
		}
		
		var l_prop=(v_item.getAttribute(v_name))?v_item.getAttribute(v_name):v_default;
		
		
		if (v_type=="int") l_prop=l_prop.toInt();
		return l_prop;
	},
	/*
			getXMLval : get a node value from an XML object item
			inputs :
				v_item : xml object item
				v_name : name of the node
				v_type : type of the value (int/str)
				v_required : is the value required ?
				v_default : default return value if the node is missing
			ouput : node value
	*/
	getVal:function(v_item,v_name,v_type,v_required,v_default)
	{
		if (v_default==indef) v_default="";
		var l_node=v_item.getElementsByTagName(v_name)[0];
		if (!l_node||!l_node.firstChild||!l_node.firstChild.nodeValue)
		{
			if (v_required) $p.app.alert.show(lg("msgModuleIssue"));
			return v_default;
		}
		else
		{
			//if there is a space between xml tag and xml value
			var inc=0;
			while (l_node.firstChild!=null&&l_node.firstChild.nodeType==3&&l_node.firstChild.nodeValue.charCodeAt(0)==10&&inc<5)
			{
				l_node.removeChild(l_node.firstChild);
				inc++;
			}
			if (l_node.firstChild==null)
			{
				var l_val="";
			}
			else
			{
				var l_val=(l_node.firstChild.nodeValue)?l_node.firstChild.nodeValue:v_default;
				if (v_type=="int") l_val=l_val.toInt();
			}
			return l_val;
		}
	}
}

//OLD FUNCTIONS (kept for compatibility reasons)

/* Get XML results
** Inputs :
** - v_url (string) : url of the XML page containing data to retrieve
** - fct(function) : callback function that will treat the results. responseXML and fct_vars are the arguments sent to this function.
** - v_fctvars (string) : arguments sent to the callback function
** - v_type (string) : "xml"=return xml, "html"=return text
** - v_vars(string) : variables sent to the xml page
** - v_method (string) : "post"=send v_vars as post variables, "get" ...
** - v_escapefct (function) : function called if XML page loading does not work
** Returns : error number
*/
function getXml(v_url,fct,v_fctvars,v_type,v_vars,v_method,v_escapefct,v_async,v_priority)
{
	if (v_type==indef) v_type="xml";
	if (v_method==indef) v_method="GET";
	if (v_async==indef) v_async=true;
	if (!pfolder) {pfolder="";}
	if (v_priority==indef) v_priority=2;
	var l_action=[v_url,fct,v_fctvars,v_type,v_vars,v_method,v_escapefct,v_async];
	
	$p.ajax.requests.push(new $p.ajax.request("load",l_action,v_priority));
	$p.ajax.executeRequests();

	return false;
}
/* Execute PHP script with XML file
** Inputs :
** - v_scr (string) : php script (located by default on /portal folder
** - v_vars (string) : post variables sent to the scripts
** - v_alarm(boolean) : define if the alert return by script is displayed in the user page
** - v_forced (boolean) : define if the script is executed when user is not connected
** - fct (function) : callback function, called at the end of the script processing
** - fctvars (string or array) : vars sent directly to the callback function
** Returns : error number
*/
function executescr(v_scr,v_vars,v_alarm,v_forced,fct,v_priority,v_async,fctvars)
{
	var l_noerror=true,l_msg,l_err;

	if (allowSave||v_forced)
	{
		if (v_priority==indef) v_priority=2;
		if (v_async==indef) v_async=true;
		var l_action=new Array(v_scr,v_vars,v_alarm,fct,v_async,fctvars);

		$p.ajax.requests.push(new $p.ajax.request("execute",l_action,v_priority));
		
		$p.ajax.executeRequests();

		return;
	}
	else
	{
		var l_feed=pfolder+v_scr;
	}
	//debug
	$p.app.debug("execute : "+l_feed+" (variables: "+v_vars+")");
	return l_noerror;
}


//****************************************************************************************************************************************************
//**
//**                                      PLUGIN FUNCTIONS
//**
//****************************************************************************************************************************************************

$p.plugin={
	hooks:{},
	shown:false,
	page:"",
	/*
		$p.plugin.prepare : reset application to open the plugin
	*/
	prepare:function()
	{
		//close all menus & other divs
		$p.app.pages.closeAllDiv();
		//close current page
		$p.app.pages.hide();
		//hide loading frame, if opened
		$p.app.checkLoading(false,-1);
		//activate default stylesheet
		if ($p.app.style==0) $p.navigator.setActiveStyleSheet(1);
		//$p.app.tabs.sel=-1;
		//jspass=="";
		//regenerate tabs
		$p.app.tabs.create(-1);
	},
	/*
		$p.plugin.init : initialize a plugin
		inputs :
			v_title : plugin title (written in browser title bar)
			v_id : uniq identifier of the plugin
	*/
	init:function(v_title,v_id)
	{
		//set page name
		if (v_title==indef) v_title="";
		$p.navigator.changeTitle(v_title);
		//init plugin area
		$p.print("plugin","<div id='pluginmenu' class='addonbar'></div><div id='plugincontent'></div>");
		$p.show("plugin","block");
		$p.plugin.shown=true;
		$p.plugin.page='';
		if (v_id!=indef) $p.app.newEnv(v_id);

		//place footer
		$p.app.pages.computeFooterPosition();
	},
	/*
		$p.plugin.menu : display the plugin menu
		inputs
			v_elemts : array of the options of the menu
			v_selected : selection option of the menu
	*/
	menu:function(v_elemts,v_selected)
	{
		var l_elemt=[];
		if (v_elemts==indef) return false;
		for (var i=0;i<v_elemts.length;i++)
		{
			l_elemt.push(
				(v_elemts[i]['icon']=='' ? '' : $p.img(v_elemts[i]['icon'],indef,indef,'','imgmid')+' ')
				+((v_elemts[i]['isLink'] && v_elemts[i]['id']!=v_selected) ? "<a href='#' onclick=\""+v_elemts[i]['fct']+"\">"+lg(v_elemts[i]['title'])+"</a>" : '<span class="selected">'+lg(v_elemts[i]['title'])+'</span>')
			);
		}
		$p.print('pluginmenu',' &nbsp; '+l_elemt.join(' | '));
	},
	/*
		$p.plugin.wait : show that application is loading information
	*/
	wait:function()
	{
		$p.app.wait('plugincontent');
	},
	/*
		$p.plugin.content : display HTML in plugin window
		input : HTML to be displayed
	*/
	content:function(v_content)
	{
		if (v_content==indef) v_content="";
		$p.print("plugincontent",v_content);
	},
	/*
		$p.plugin.hide : close plugin
	*/
	hide:function()
	{
		$p.print("plugin","");
		$p.show("plugin","none");
		$p.plugin.shown=false;
	},
	/*
		$p.plugin.clear : clear plugin area
	*/
	clear:function()
	{
		$p.print("plugin","");
		$p.plugin.init();
	},
	/*
		$p.plugin.useWidget : a widget can be opened in the plugin page
	*/
	useWidget:function()
	{
		tab[$p.app.tabs.sel]=new $p.app.tabs.object(-1,"","P","",0,0,0,0,"",0);
		$p.app.tabs.selId=0;
	},
	open:function(){return $p.plugin.prepare();}
}
$p.plugin.application={
	item:[],
	initMenu:function()
	{
		$p.app.menu.options.push({"id":"applications","label":lg("yourapplications"),"desc":lg("myapplicationsIconDesc"),"icon":"ico_menu_myportaneo.gif","seq":60,"action":"$p.plugin.application.menu()","type":"","subOpt":"","pages":[]});
	},
	/*
		$p.plugin.application.hideMenu: hide the application menu
	*/
	hideMenu:function()
	{
		for (var i=0;i<$p.app.menu.options.length;i++)
		{
			if ($p.app.menu.options[i].id=='applications')
			{
				//hide application tab
				$p.app.menu.options.splice(i,1);
				$p.show('menuopt_applications','none');
			}
		}
	},
	/*
		$p.plugin.application.obj : application object
	*/
	obj:function(id,title,icon,action)
	{
		this.id=id;
		this.title=title;
		this.icon=icon;
		this.action=action;
	},
	/*
		$p.plugin.application.menu : open the application menu
	*/
	menu:function()
	{
		//$p.app.menu.emptyContent();
		var l_s="";
		for (var i=0;i<$p.plugin.application.item.length;i++)
		{
			l_s+="<a href='#' onclick=\""+$p.plugin.application.item[i].action+";return false;\">"+$p.img($p.plugin.application.item[i].icon,indef,indef,"","imgmid")+" "+$p.plugin.application.item[i].title+"</a><br />";
		}
		$p.app.menu.addTitle('listapps_1','ico_menu_myportaneo.gif',lg('yourapplications'));
		$p.app.menu.addArea('listapps_1',l_s);		
	},
	/*
		$p.plugin.application.load : load the applications avail for the user
	*/
	load:function()
	{
		if ($p.app.user.id>0)
		{
			$p.ajax.call('xmlapplications.php',
				{
					'type':'load',
					'callback':
					{
						'function':$p.plugin.application.get
					}
				}
			);
		}
		else
		{
			$p.plugin.application.hideMenu();
		}
	},
	get:function(response,vars)
	{
		if (response!=null)
		{
			var l_result=response.getElementsByTagName('application');
			if (l_result.length==0)
			{
				$p.plugin.application.hideMenu();
			}
			else
			{
				for (var i=0;i<l_result.length;i++)
				{
					$p.plugin.application.item.push(new $p.plugin.application.obj($p.ajax.getVal(l_result[i],'id','int',false,0),$p.ajax.getVal(l_result[i],'title','str',false,''),$p.ajax.getVal(l_result[i],'icon','str',false,''),$p.ajax.getVal(l_result[i],'action','str',false,'')));
				}
			}
		}
	}
}
//********************* HOOKS MANAGEMENT********************************************************************************************************
$p.plugin.hook={
	/*
                Function: launch
                       $p.plugin.hook.launch
                    
                        launch functions linked to hook
                    
                Parameters:

                      v_name: the hook's name
           */
	launch:function(v_name){
		//check if the hook exists
		if(!$p.plugin.hooks[v_name]){
			return false;
		}
		//order by priority 
		//($p.plugin.hooks[v_name]).sort($p.plugin.hook.sortByPriority);to be developed in posh 3.0
		//execute the functions linked to the hook
		for (var key in $p.plugin.hooks[v_name]){
			for(var j=0;j<$p.plugin.hooks[v_name][key].length;j++){
				eval($p.plugin.hooks[v_name][key][j]);
			}
		}
	},
	/*
                Function: sortByPriority
                       $p.plugin.hook.sortByPriority
                    
                        sort the hooks by priority
                    
                Parameters:
		
		(a,b) values to compare
		
	     Returns
		 
		 comparaison value
           */
	sortByPriority:function(a,b){
		if (a<b) return -1;
		if (a>b) return 1;
		return 0;
	},
	 /*
                Function: register
                       $p.plugin.hook.register
                    
                        register a function linked to a hook
                    
                Parameters:
				
		v_name: the hook's name
		v_function:  the function to register
		v_priority: the priority of the hook
           */
	register:function(v_name,v_function,v_priority){
		v_priority+='_';
		//check if the hook is already existing
		if(!$p.plugin.hooks[v_name]){
			$p.plugin.hooks[v_name]={};
		}
		//check if there is a hook with the same priority
		if(!$p.plugin.hooks[v_name][v_priority]){
			$p.plugin.hooks[v_name][v_priority]=[];
		}
		//set the new hook
		$p.plugin.hooks[v_name][v_priority].push(v_function);
		
		
		
	}
}

//****************************************************************************************************************************************************
//**
//**                                      APPLICATION
//**
//****************************************************************************************************************************************************

//********************* APPLICATION INITIALIZATION ************************************************************************************************

$p.app={
	style:0,
	env:"portal",
	isLoading:false,
	inactivityTime:0,
	/*
		$p.app.init : init the application
	*/
	init:function()
	{
		// load all themes of the application
		$p.app.getVersion();
		$p.app.loadStyles();

		$p.app.initMenus();

		$p.app.mainMenu();
		$p.app.loadTabs();
		$p.plugin.application.load();
		$p.app.footer();
		$p.app.initEvents();
		$p.app.counter.reset();
	},
	/*
		$p.app.initMenus : init the menus
	*/
	initMenus:function()
	{
		p_network.profile.initMenu();
		$p.app.pages.initMenu();
		if (__useSharing) p_network.initMenu();
		if (__useSharing) p_notebook.initMenu();
		if (__useArchive) p_article.initMenu();
		$p.stats.initMenu();
		$p.plugin.application.initMenu();
	},
	/*
		$p.app.logout : logout from Portaneo application
	*/
	logout:function()
	{
		var response=1;
		//the logout confirmation is not applied for admin
		if ( ($p.cookie.get("autoi")!="") && ($p.app.user.id>0) )
		{
			var response=confirm(lg("disconnectCheck"));
		}
		if (response==1)
		{
			$p.navigator.openLink(__LOCALFOLDER+"portal/scr_authentif.php?act=logout");
		}
	},
	/*
		$p.app.wait : display loading icon in object
		input : ID of the object
	*/
	wait:function(v_id)
	{
		if ($(v_id)!=null) $(v_id).set('html',$p.img("ico_waiting.gif",16,16));
	},
	getDebugCookie:function()
	{
		$p.cookie.write("debug=Y",7);
		$p.app.alert.show("Cookie installed !");
	},
	/*
		$p.app.debug : display debug message in debug window
		inputs
			v_msg : debug message
			v_type : debug message type (error/warning/info)
	*/
	debug:function(v_msg,v_type)
	{

		if (__debugmode)
		{
			if ($p.cookie.get('debug')=='Y')
			{
				if ($("debug")!=null)
				{
					l_msg=$p.string.textToHtml(v_msg);
					var l_style="";
					if (v_type==indef) v_type="info"
					switch(v_type)
					{
						case "error":
						l_style="color: #ff0000";
						break;
						case "warning":
						l_style="color: orange";
						break;
					}
					var l_obj=$("debug");
					var l_date=new Date();
					l_obj.setStyle("display","block");
					//l_obj.innerHTML()
					l_obj.set('html',"<table cellpadding='0' cellspacing='0'><tr><td width='80' valign='top'>"+l_date.getHours()+":"+l_date.getMinutes()+":"+l_date.getSeconds()+"></td><td style='"+l_style+"'> "+l_msg+"</td></tr></table>"+l_obj.innerHTML);
				}
			}
		}
	},
	isCustomPortal:function()
	{
		if ($p.app.env=='portal_page_anon' || $p.app.env=='portal_page_conn' || $p.app.env=='admin')
			return true;
		return false;
	},
	/*
		$p.app.pageMode : load application in page mode
	*/
	pageMode:function()
	{
		//if (v_prof!=indef) $p.app.tabs.selId=v_prof;
		//depending on the user is connected or not
		if ($p.app.user.id==0)
		{
			allowSave=false;
			$p.app.tabs.sel=0;
		}
		else
		{
			allowSave=true;
		}
		useMod=false;
		$p.app.init();
		//$p.app.cache.init();
		$p.app.banner.info.load(0);
	},
	/*
		$p.app.loadStyles : load available css (depending on themeNb define in adm_config table)
	*/
	loadStyles:function()
	{
		for (var i=1;i<=__themeList.length;i++)
		{
			$p.navigator.addCssFile("../styles/main"+i+".css","style "+i,"alternate stylesheet");
		}
	},
	/*
		$p.app.setState : define the page Portaneo loads
		input: function called at application opening
	*/
	setState:function(v_fct)
	{
		if ($p.app.user.id>0) $p.cookie.write("laststate="+v_fct);
	},
	/*
		$p.app.newEnv : define a new environnement
		input: environnement name
	*/
	newEnv:function(v_env)
	{
		if ($p.app.env!=v_env)
		{
			$p.app.env=v_env;
			$p.app.menu.refresh();
		}
	},
	/*
		$p.app.home : open the Portaneo homepage
		input : page ID
	*/
	home:function(vars)
	{
		if ($p.app.tabs.sel==-1)
		{
			//open the latest page opened by the user
			if (__loadlatestpageonstart==3)
			{
				$p.app.openHome(vars);
			}
			else if (__loadlatestpageonstart==2 && $p.cookie.get("laststate")!="")
			{
				eval($p.cookie.get("laststate"));
			}
			else
			{
				if (tab.length>0) $p.app.tabs.open(0);
			}
		}
		else
		{
			$p.app.tabs.open(vars);
		}
	},
	/*
		$p.app.loadTabs : load all the tabs for the user
		inputs
			v_prof : selected tab ID
			v_locked ??
			v_action : action to launch on tab opening
	*/
	loadTabs:function(v_prof,v_locked,v_action)
	{
		v_prof=v_prof==indef?$p.app.tabs.selId:v_prof;
		if (v_action==indef) v_action="";
		var l_tabXml=($p.app.user.id==0)?"selections/tabs.xml?nocache="+rand:"xmltabs.php";
		if (dumtab!=indef) l_tabXml+="?dumtab="+dumtab.label+"&dumicon="+dumtab.icon;
		//var l_locked=v_locked?true:false; //???
			
		$p.ajax.call(l_tabXml,
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.initTabs,
					'variables':
					{
						'tabid':v_prof,
						'action':v_action
					}
				}
			}
		);
	},
	/*
		$p.app.initTabs : init all the tabs
		input
			response : xml object containing tabs information
			vars : variables sent (tab ID,action)
	*/
	initTabs:function(response,vars)
	{
		var l_prof=vars['tabid'];
		var l_action=vars['action'];
		$p.app.tabs.init(response);

		if ($p.app.tabs.sel==indef) $p.app.tabs.sel=-1;
		//if new tab, get the id
		if ($p.app.tabs.sel==999)
		{
			$p.app.tabs.sel=$p.app.tabs.getId(l_prof);
			$p.app.tabs.create($p.app.tabs.sel);
			$p.app.menu.open();
			$p.app.pages.change(l_prof,l_action);
		}
		else
		{
			//define the page to open on
			$p.app.tabs.create($p.app.tabs.sel);
			$p.app.home($p.app.tabs.sel);
		}
		//tab name is edited ?
		if (tab.length!=0) setTimeout("$p.app.pages.loadOnStart()",2000);
		else
		{
			$p.app.checkLoading(false);
			$p.navigator.setActiveStyleSheet(1);
		}		
	},
	/*
		$p.app.openHome : define application loaded on the homepage
		input : tab ID
	*/
	openHome:function(v_prof)
	{
		var l_div=[];
		if (v_prof==indef) v_prof=$p.app.tabs.selId;
		$p.app.setState("$p.app.openHome("+v_prof+")");
		//action depend on if the user is connected or not 
		if ($p.app.user.id==0 || ($p.app.tabs.sel!=-1 && (tab[$p.app.tabs.sel].id==0 || tab[$p.app.tabs.sel].id>=1000000000)))
		{
			for (var i=0;i<__homeDivs.length;i++)
			{
				if (__homeDivs[i]["anonymous"])	l_div.push(i);
			}
			if (l_div.length>0)
			{
				$p.app.displayFeaturedHome(l_div);
			}
			else
			{
				if ($p.app.tabs.sel==-1 && tab[0]) $p.app.tabs.sel=0;
				//$p.app.pages.load("selections/page"+$p.app.tabs.selId+".xml");
				$p.app.tabs.open($p.app.tabs.sel);
			}
		}
		else
		{
			for (var i=0;i<__homeDivs.length;i++)
			{
				if (__homeDivs[i]["connected"])	l_div.push(i);
			}
			if (l_div.length>0)
			{
				$p.app.tabs.selId=0;
				$p.app.displayFeaturedHome(l_div);
			}
			else
			{
				//if first tab is already selected > stop
				if ($p.app.tabs.sel==0) return false;
				if (tab.length==0) return false;
				//else load the first tab
				if ($p.app.tabs.sel!=-1){$p.app.pages.hide();}
				else {$p.app.tabs.sel=0;}

				$p.app.tabs.open($p.app.tabs.sel);
			}
		}
		return false;
	},
	/*
		$p.app.displayFeaturedHome : display application homepage
		input : array containing divs information (divs displayed, ID and content)
	*/
	displayFeaturedHome:function(v_div)
	{
		var l_s='';

		l_s+='<div id="intromessage"></div>';
		
		l_s+='<table cellspacing="0" cellpadding="0" width="100%">'
			+'<tr>'
			+'<td valign="top" width="50%">';

		for (var i=0;i<v_div.length;i++)
		{
			if (i>0 && __homeDivs[v_div[i-1]]["col"]!=__homeDivs[v_div[i]]["col"]) l_s+='</td><td width="20">&nbsp;</td><td valign="top">';
			l_s+='<div class="module"><div class="bmod" style="padding: 8px;"><div class="content"><div id="homediv'+i+'" style="font-size: 1.2em;"></div></div></div></div>';
		}

		l_s+='</td>'
			+'</tr>'
			+'</table>';
		$p.plugin.open();
		$p.plugin.init(lg('home'),'home');
		$p.plugin.menu([{'id':1,'title':'portalSummary','icon':'','fct':'','isLink':false},{'id':2,'title':'lblHelp','icon':'ico_help_s.gif','fct':'$p.app.help.enableIntro()','isLink':true}]);
		$p.plugin.content(l_s);

		$p.app.stopLoading();
		$p.navigator.setActiveStyleSheet(1);
		$p.navigator.changeTitle(lg('home'));
		for (var i=0;i<v_div.length;i++)
		{
			eval(__homeDivs[v_div[i]]["fct"]+"('homediv"+i+"')");
		}
		$p.app.help.loadIntro();
	},
	/*
		$p.app.loading: display loading message
	*/
	loading:function()
	{
		$p.app.popup.show(wip_message,400,300,indef,false);
		$p.app.isLoading=true;
	},
	/*
		$p.app.startLoading : display personalized page loading information
	*/
	startLoading:function()
	{
		//tab[$p.app.tabs.sel].isLoaded=false;
		$p.app.loading();
		//$p.show("loading","block");
		$p.app.counter.reset();
	},
	/*
		Function: $p.app.stopLoading 
                            hide personalized page loading information
	*/
	stopLoading:function()
	{
		$p.app.isLoading=false;
		$p.app.popup.hide();
	},
	/*
		$p.app.footer : display application footer
	*/
	footer:function()
	{
		$('footer').set('html',__footer);
	},
	/*
		$p.app.resetAndReload : reset cookies and reload (used if loading issues)
	*/
	resetAndReload:function()
	{
		//reset cookies
		$p.cookie.write("laststate=");
		//reopen page
		$p.navigator.openLink();
	},
	/*
		$p.app.setAsWorking : inform users that application is running a process
		input : process status (true=running, false=ended)
	*/
	setAsWorking:function(v_status)
	{
		if (v_status==indef) v_status=true;
		if ($("ajaxwork")==null && v_status)
		{
			var l_obj = new Element('div', { "id": "ajaxwork" } );	
			document.body.appendChild(l_obj);
			$p.app.wait("ajaxwork");
		}
		$p.show("ajaxwork",(v_status?"block":"none"));
	},
	/*
		$p.app.mainMenu : build main menu
		input : is the application locked (password required) or not
	*/
	mainMenu:function(v_locked)
	{
		if ($('headlink').innerHTML!='')
			$('headlink').empty();
		
		if (v_locked==indef) v_locked=$p.app.tabs.locked;
		var l_label;
		
		//the menu displayed is (bonjour %username% (deconnection) ..
		for (var i=0;i<__headmenu.length;i++)
		{
			if ((__headmenu[i]["anonymous"] && $p.app.user.id==0) || (__headmenu[i]["connected"] && $p.app.user.id>0) || (__headmenu[i]["admin"] && $p.app.user.id==-1))
			{
				l_label=(__headmenu[i]["label"]).replace("%username%",shortName($p.app.user.name));				
				switch (__headmenu[i]["type"])
				{
					case "label":
						{
							var spanObj1 = new Element('span', { 'class':__headmenu[i]["clss"] });
							spanObj1.set('html',(__headmenu[i]["images"]==''?'':$p.img(__headmenu[i]["images"],false,false,lg(__headmenu[i]["comment"]),"imgmid")+'&nbsp;')+(l_label==''?'':'&nbsp;'+l_label));
							spanObj1.inject($('headlink'));
							var bespace = new Element('b');
							bespace.set('html','&nbsp;');
							bespace.inject($('headlink'));
							break;
						}
					case "link":
						{
							var aObj1 = new Element('a', 
								{			
									'events': {
													'click': function()
													{
														eval(__headmenu[this.name]["fct"]);																		
													},
													'mouseover': function(){
													$p.app.tabs.showHeadMenu(false);}
											  },
											  
									'class':__headmenu[i]["clss"],
									'title':lg(__headmenu[i]["comment"]),
									'href':'#'
								}
							);
							aObj1.name = i;
							aObj1.set('html',
								(__headmenu[i]["images"]==''
														?''
														:'<span style="text-decoration:none">'+$p.img(__headmenu[i]["images"],false,false,lg(__headmenu[i]["comment"]),"imgmid")+'&nbsp;')
								+(l_label=='</span>'?'':'</span>'+lg(l_label))
							);
							aObj1.inject($('headlink'));
							var bespace = new Element('b');
							bespace.set('html','&nbsp;');
							bespace.inject($('headlink'));							
							break;
						}
					case "menu":
						{
							var aObj2 = new Element('a', 
								{
									'events': {
													'click': function(){
													$p.app.tabs.initHeadMenu(this,this.name);}
											  },
									'class':__headmenu[i]["clss"],
									'title':lg(__headmenu[i]["comment"]),
									'href':'#'
								}
							);
							aObj2.name = i;
							aObj2.set('html',(__headmenu[i]["images"]==''?'':$p.img(__headmenu[i]["images"],false,false,lg(__headmenu[i]["comment"]),"imgmid")+' ')+lg(l_label)+$p.img("puce_down.gif",7,5,"","imgmid"));	
							aObj2.inject($('headlink'));
							var bespace = new Element('b');
							bespace.set('html','&nbsp;');
							bespace.inject($('headlink'));
							break;
						}
					case "form":
						{
							var formObj1 = new Element('form', 
								{ 
									'styles':	{
										'margin':'0px',
										'padding':'0px',
										'display':'inline'
										},
									'events': {
										'submit': function(){
											eval(this.fct);
											return false;
											}
										},
									 'class':__headmenu[i]["clss"],
									 'action':'#'
								 }  
							);
							formObj1.fct=__headmenu[i]["fct"];
							formObj1.set('html',(__headmenu[i]["images"]==''?'':$p.img(__headmenu[i]["images"],false,false,lg(__headmenu[i]["comment"]),"imgmid")+' ')+__headmenu[i]["label"]+'<input name="text" type="text" class="thinbox" style="color:#aaaaaa" onFocus=\'$p.navigator.inputFocus(this,"'+__headmenu[i]["comment"]+'")\' onBlur=\'$p.navigator.inputLostFocus(this,"'+__headmenu[i]["comment"]+'")\' value="'+__headmenu[i]["comment"]+'" />'+(__headmenu[i]["options"]==''?'':'<input type="submit" class="btn" value="'+__headmenu[i]["options"]+'" />'));
							formObj1.inject($('headlink'));
							var bespace = new Element('b');
							bespace.set('html','&nbsp;');
							bespace.inject($('headlink'));
							break;
						}
				}
				($('headlink')).appendText(' ');
			}
		}
		var endSpace=new Element('span');
		endSpace.set('html','&nbsp; &nbsp; &nbsp;');
		endSpace.inject($('headlink'));
	},
	/*
		initEvents : init page events
	*/
	initEvents:function()
	{
		document.body.onmouseover=function(){$p.app.inactivityTime=0;}
	},
	/*
		$p.app.checkLoading : manage modules loading process
		inputs
			v_t (boolean) : true=start loading / false=check if loading is ended 
			v_tab : tab sequence ID
	*/
	checkLoading:function(v_t,v_tab)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		if (!v_t)
		{
			if (v_tab!=-1 && v_tab!=indef && tab.length!=0)
			{
				//only for portals
				if (tab[v_tab].type==1 || tab[v_tab].type==3)
				{
					if (v_tab==$p.app.tabs.sel) (tab[v_tab].root).setStyle("display","block");
					for (var i=0;i<tab[v_tab].module.length;i++){tab[v_tab].module[i].show();}
					if (tab[v_tab].showType==1)
					{
						//Normally, all sources are loaded (showtype=0 on startup) - v1.3.0
						var l_allLoaded=true;
						for (var i=0;i<tab[v_tab].module.length;i++)
						{
							if (tab[v_tab].module[i].format=='R' && !tab[v_tab].module[i].isLoaded)
							{
								l_allLoaded=false;
								//$p.app.widgets.rss.refresh(i); Suppressed with 1.4.2
							}
						}
						if (!l_allLoaded) $p.app.widgets.rss.reader.showArticlesList(true,$p.app.widgets.rss.reader.currSrc);
					}
					additionalMod();
					//check for tab status ( loading or loaded)
					var l_allLoaded=true;
					for (var i=0;i<tab[v_tab].module.length;i++)
					{
						if (tab[v_tab].module[i].format=='R' && !tab[v_tab].module[i].isLoaded)
						{
							l_allLoaded=false;
						}
					}
					if (l_allLoaded)
					{
						tab[v_tab].isLoaded=true;
						$p.app.tabs.refresh($p.app.tabs.sel);
					}
				}
			}
			if ($p.app.isLoading) $p.app.stopLoading();
		}
	},
	/*
		$p.app.stats : statistics management
	*/
	stats:function()
	{
		$p.ajax.call('scr_addstats.php',
			{
				'type':'execute',
				'variables':"prof="+$p.app.tabs.selId+"&id="+$p.app.user.id,
				'alarm':false
			}
		);
	},
	// $p.app.getVersion : define application versoin
	getVersion:function()
	{
		p_version=__POSHVERSION;
	},
	/*
		$p.app.standalone : create widget in an HTML page (outside posh)
		inputs:
			v_columnNumber (integer) : number of columns
			v_widgetAligned (boolean) : define if the widget are aligned
	*/
	standalone:function(v_rootObj,v_columnNumber,v_widgetAligned)
	{
		$p.app.tabs.selId=0;
		$p.app.tabs.sel=0;
		allowSave=false;
		useMod=false;
		//add tab information (even if not physically created)
		tab[0]=new $p.app.tabs.object(1);
		tab[0].root=v_rootObj;
		tab[0].colnb=v_columnNumber;
		tab[0].moduleAlign=v_widgetAligned;
		// add columns
		$p.app.pages.columns.createAll(0);
	}
}
$p.app.user={
	id:0,
	name:'',
	status:'o',
	init:function(id,name)
	{
		$p.app.user.id=id;
		$p.app.user.name=name;
	}
}

//********************* MENUS ***********************************************************************************************************************

$p.app.menu={
	isOpen:indef,
	options:[],
	optionSelected:0,
	subOptSelected:indef,
	/*
		$p.app.menu.clean : clean menu area
	*/
	clean:function()
	{
		if (__menuposition=='h')
		{
			($('hmenuoptions')).empty();
			($('hmenusuboptions')).empty();
		}
		else
		{
			($('vmenuoptions')).empty();
			($('vmenusuboptions')).empty();
		}
		$p.app.menu.emptyContent();
	},
	/*
		$p.app.menu.emptyContent : empty menu content
	*/
	emptyContent:function()
	{
		if (__menuposition=='h')
		{
			($('hmenucontent')).empty();
		}
		else
		{
			($('vmenucontent')).empty();
		}
	},
	/*
		$p.app.menu.init : init a menu
	*/
	init:function()
	{
		$p.app.menu.clean();
		$p.app.menu.hideHeader();
		$p.app.menu.show();

		//close button
		if ($('menuclosebutton')==null)
		{
			var l_h1=new Element('div',
				{
					'id':'menuclosebutton',
					'styles':{'width':'98%','text-align':'right','padding':'2px'}
				}
			);
			var l_h2=new Element('a',
				{
					'href':'#',
					'events':{
								'click':function(){
								return $p.app.menu.close();
						}
					}
				}
			);
			/*var l_h3=new $p.imgObj("ico_close.gif");
			l_h3.injectInside(l_h2);*/
			l_h2.appendText(" "+lg("lblClose"));
			l_h2.injectInside(l_h1);
			l_h1.injectBefore(($(__menuposition+"menu")).getFirst());
		}
		$p.app.menu.isOpen=true;
	},
	/*
		$p.app.menu.show : show the menu
	*/
	show:function()
	{
		if (__menuposition=='h')
		{
			widgetDecalY=topMenuHeight;
			$p.show("hmenu","block");
			$p.app.widgets.place($p.app.tabs.sel);
		}
		else
		{
			if (widgetDecalX!=leftMenuWidth)
			{
				widgetDecalX=leftMenuWidth;

				if ($("menus")!=null) ($("menus")).style.marginLeft=widgetDecalX+"px";
				($("modules")).style.marginLeft=widgetDecalX+"px";
				if ($("plugin")!=null) ($("plugin")).style.marginLeft=widgetDecalX+"px";
				if ($("newspaper")!=null) ($("newspaper")).style.marginLeft=widgetDecalX+"px";				

				$p.app.menu.place();
				$p.app.widgets.place($p.app.tabs.sel);
			}
			$p.show("vmenu","block");
		}
		//save menu open/close status
		$p.cookie.write('showmenu=1');
	},
	/*
		$p.app.menu.place : place the menu
	*/
	place:function()
	{
		var l_leftMenuTopPos=$p.getPos($("area"),"Top");
		($("vmenu")).style.top=l_leftMenuTopPos+"px";
	},
	refresh:function()
	{
		//check if menu must be opened or not
		if (($p.app.menu.isOpen==indef || !$p.app.menu.isOpen) && __menuDefaultStatus==1) return false;
		if ($p.cookie.get('showmenu')==0 && ($p.app.menu.isOpen==indef || !$p.app.menu.isOpen) && __menuDefaultStatus==2) return false;
		if ( __menuDefaultStatus==4) return false;

		if ($p.app.menu.isOpen==indef)
		{
			$p.app.menu.open();
		}
		else
		{
			$p.app.menu.show();
			$p.app.menu.generate();
		}
	},
	/*
		$p.app.menu.open : open the menu
		inputs
			v_toggle (boolean) : true = close menu if it is opened
			v_selOption (string) : option selected on menu opening
	*/
	open:function(v_toggle,v_selOption)
	{
		if ( __menuDefaultStatus==4) return false;
		if (this.isOpen && v_toggle)
		{
			$p.app.menu.close();
			return false;
		}

		$p.app.menu.init();

		//search the menu option to activate
		if (v_selOption==indef)
		{
			v_optSel=indef;
			v_subOptSel=indef;
		}
		else
		{
			for (var i=0;i<$p.app.menu.options.length;i++)
			{
				if ($p.app.menu.options[i]['id']==v_selOption)
				{
					v_optSel=i;
					v_subOptSel=indef;
				}
				else
				{
					for (var j=0;j<$p.app.menu.options[i]['subOpt'].length;j++)
					{
						if ($p.app.menu.options[i]['subOpt'][j]['id']==v_selOption)
						{
							v_optSel=i;
							v_subOptSel=j;
						}
					}
				}
			}
		}

		$p.app.menu.generate(v_optSel,v_subOptSel);
	},
	generate:function(v_option,v_subOption)
	{
		$p.app.menu.clean();
		$p.app.menu.hideHeader();

		var l_someOptions=$p.app.menu.header(v_option,v_subOption);

		//execute first command
		//if ($p.app.menu.options[$p.app.menu.optionSelected]["subOpt"].length!=0)
		if (l_someOptions==indef)
		{
			if ($p.app.menu.options[$p.app.menu.optionSelected]["action"]=="")
			{
				$p.app.menu.addArea('menuemptydiv','<div style="200px">'+lg('menuNotAccessible')+'</div>');
			}
			else
			{
				eval($p.app.menu.options[$p.app.menu.optionSelected]["action"]);
			}
		}
		else
		{
			eval($p.app.menu.options[$p.app.menu.optionSelected]["subOpt"][l_someOptions]["action"]);
		}
	},
	/*
		$p.app.menu.header : generate the menu header with tabs
	*/
	header:function(v_option,v_subOption)
	{
		if ($p.app.menu.options.length==0) return false;

		$p.app.menu.hideHeader();
		$p.app.menu.emptyContent();

		//tab selection
		if (v_option==indef)
		{
			if ($p.app.menu.optionSelected==indef)
			{
				$p.app.menu.optionSelected=0;
			}
		}
		else
		{
			$p.app.menu.optionSelected=v_option;
 		}
		//sub tab selection
		if (v_subOption!=indef)
		{
			$p.app.menu.subOptSelected=v_subOption;
		}

		if ($(__menuposition+"menuoptions")!=null)
		{

			if ($p.app.menu.options.length>0)
			{
				$p.app.menu.options.sort($p.app.menu.sortOptions);
				$p.show(__menuposition+"menuoptions","block");
				var lu=new Element('ul',
					{
						'class':'menulist'
					}
				);
			}

			var l_hasOptions=false;
			for (var i=0;i<$p.app.menu.options.length;i++)
			{
				if ($p.app.menu.options[i]["pages"].length==0 || $p.array.find($p.app.menu.options[i]["pages"],$p.app.env))
				{
					l_hasOptions=true;

					if (i==$p.app.menu.optionSelected)
					{
						var li=new Element('li',{'id':'menuopt_'+$p.app.menu.options[i]["id"],'class':'menulistsel'});
						if ($p.app.menu.options[i]["icon"]=="")
						{
							li.set('text',$p.app.menu.options[i]["label"]);
						}
						else
						{
							l_img=new $p.imgObj($p.app.menu.options[i]["icon"],16,16,'',"imgmid");
							l_img.label=$p.app.menu.options[i]["label"];
							l_img.desc=$p.app.menu.options[i]["desc"];
							l_img.onmouseover=function(e){mouseBox('<b>'+this.label+'</b><br />'+this.desc,e);} // addEvent not use to get the event object
							l_img.onmouseout=function(e){mouseBox('',e);}
							l_img.injectInside(li);
							if (__menuposition=='h') li.appendText(' '+$p.app.menu.options[i]["label"]);
						}
					}
					else
					{
						var li=new Element('li',{'id':'menuopt_'+$p.app.menu.options[i]["id"]});
						var la=new Element('a',{
							'events':{
								'click':function(){
									$p.app.menu.subOptSelected=indef;
									if (this.action=="")
									{
										//$p.app.menu.emptyContent();
										$p.app.menu.generate(this.seq);
									}
									else
									{
										$p.app.menu.header(this.seq);
										eval(this.action);
									}
									return false;
								}
							},
							'href':'#'
						});
						la.seq=i;
						la.action=$p.app.menu.options[i]["action"];

						if ($p.app.menu.options[i]["icon"]=="")
						{
							la.set('text',$p.app.menu.options[i]["label"]);
						}
						else
						{
							l_img=new $p.imgObj($p.app.menu.options[i]["icon"],16,16,'','imgmid');
							l_img.label=$p.app.menu.options[i]["label"];
							l_img.desc=$p.app.menu.options[i]["desc"];
							l_img.onmouseover=function(e){mouseBox('<b>'+this.label+'</b><br />'+this.desc,e);} // addEvent not use to get the event object
							l_img.onmouseout=function(e){mouseBox('',e);}
							l_img.injectInside(la);
							if (__menuposition=='h') la.appendText(' '+$p.app.menu.options[i]["label"]);
						}					
						la.injectInside(li);
					}
					li.injectInside(lu);
				}
			}

			$(__menuposition+"menuoptions").empty();
			if (lu) lu.injectInside($(__menuposition+"menuoptions"));
		}

		//sub options of the menu
		if ($(__menuposition+"menusuboptions")!=null)
		{
			$p.show(__menuposition+"menusuboptions","block");

			var lu2=new Element('ul',
				{
					'class':'menulist'
				}
			);
			var l_nbSubOptions=0;

			for (var i=0;i<$p.app.menu.options[$p.app.menu.optionSelected]["subOpt"].length;i++)
			{
				if ($p.app.menu.options[$p.app.menu.optionSelected]["subOpt"][i]["pages"].length==0 || $p.array.find($p.app.menu.options[$p.app.menu.optionSelected]["subOpt"][i]["pages"],$p.app.env))
				{
					if ($p.app.menu.subOptSelected==indef) $p.app.menu.subOptSelected=i;

					if (i==$p.app.menu.subOptSelected)
					{
						var li=new Element('li',{'class':'menulistsel','styles':{'white-space':'nowrap'}});
						li.set('text',lg($p.app.menu.options[$p.app.menu.optionSelected]["subOpt"][i]["label"]));
					}
					else
					{
						var li=new Element('li');
						var la=new Element('a',
							{
								'events':{
									'click':function(){
										$p.app.menu.header(indef,this.seq);
										//$p.app.menu.emptyContent();
										if (this.action!="") eval(this.action);
										return false;
									}
								},
								'styles':{
									'white-space':'nowrap'
								},
								'href':'#'
							}
						);
						la.seq=i;
						la.action=$p.app.menu.options[$p.app.menu.optionSelected]["subOpt"][i]["action"];

						la.set('text',lg($p.app.menu.options[$p.app.menu.optionSelected]["subOpt"][i]["label"]));
						la.injectInside(li);
					}

					li.injectInside(lu2);
					l_nbSubOptions++;
				}
			}

			if (lu2.getFirst()==null) lu2=null;

			$(__menuposition+"menusuboptions").empty();
			if (lu2) lu2.injectInside($(__menuposition+"menusuboptions"));
		}

		return $p.app.menu.subOptSelected;
	},
	hideHeader:function()
	{
		$p.show(__menuposition+"menuoptions","none");
		$p.show(__menuposition+"menusuboptions","none");
	},
	/*
		$p.app.menu.simpleHeader : display simple header (no options)
		input : content of the header
	*/
	simpleHeader:function(v_s)
	{
		$p.show(__menuposition+"menusuboptions","block");
		$p.print(__menuposition+"menusuboptions","<center>"+v_s+"</center>");
	},
	/*
		$p.app.menu.close : close the menu
	*/
	close:function()
	{
		$p.app.menu.isOpen=false;

		$p.app.menu.hide();
	},
	/*
		$p.app.menu.hide : hide the menu
	*/
	hide:function()
	{
		if (__menuposition=="h")
		{
			widgetDecalY=0;
			$p.show("hmenu","none");
		} 
		else
		{
			if ($("menus")!=null)
			{
				widgetDecalX=0;
				$p.show("vmenu","none");
				if ($("menus")!=null) ($("menus")).setStyle("marginLeft",widgetDecalX+"px");
					($("modules")).setStyle("marginLeft",widgetDecalX+"px");
				if ($("plugin")!=null) 
					($("plugin")).setStyle("marginLeft",widgetDecalX+"px");
				//if ($("newspaper").innerHTML!="")
				if ($("newspaper")!=null)
				{
					($("newspaper")).style.marginLeft=widgetDecalX+"px";
					if ($p.app.env=='portal_reader') $p.app.widgets.rss.reader.framesSize();
				}
			}
		}
		$p.app.widgets.place($p.app.tabs.sel);

		if (__menuposition=="v")	$p.app.pages.resize();
		if ($p.app.banner.option.shown) $p.app.banner.option.hide();
		
		$p.cookie.write('showmenu=0');
	},
	/*
		$p.app.menu.showItem : display a menu item
	*/
	showItem:function(v_itemId)
	{
		$p.show(v_itemId,'block');
	},
	/*
		$p.app.menu.hideItem : hide a menu item
	*/
	hideItem:function(v_itemId)
	{
		$p.show(v_itemId,'none');
	},
	/*
		$p.app.menu.slideInItem : slideIn a menu item
	*/
	slideInItem:function(v_itemId)
	{
		var slider=new Fx.Slide(v_itemId, {duration: 500});
		slider.slideIn();
	},
	/*
		$p.app.menu.slideOutItem : slideOut a menu item
	*/
	slideOutItem:function(v_itemId)
	{
//		(new Fx.Slide(v_itemId, {duration: 500})).slideOut();
	},
	/*
		openSubMenu : display sub menu options
		inputs :
			v_sMenuId : id of the submenu to display
			v_init : true for menu init
	*/
	openSubMenu:function(v_sMenuId,v_init)
	{
		if (__menuposition=='h') return false;
		var l_subMenus=($('vmenucontent')).getChildren();

		for (var i=0;i<l_subMenus.length;i++)
		{
			if (l_subMenus[i].getProperty('class')=='menuitemcontent')
			{
				if (l_subMenus[i].id==v_sMenuId+'content')
				{
					$p.app.menu.showItem(l_subMenus[i].id);
					if ($(v_sMenuId).fct!=indef) $(v_sMenuId).fct();
				}
				else
				{
					if (v_init)
					{
						$p.app.menu.hideItem(l_subMenus[i].id);
						//$p.app.menu.slideInItem(l_subMenus[i].id);
					}
					else
					{
						$p.app.menu.hideItem(l_subMenus[i].id);
						//$p.app.menu.slideOutItem(l_subMenus[i].id);
					}
				}
			}
		}
	},
	/*
		$p.app.menu.addTitle : add a title element
		Input :
			v_id(int) : item id
			v_icon(str) : icon
			v_label(str): item label
			v_fct(function) : additional function called on click on title
	*/
	addTitle:function(v_id,v_icon,v_label,v_fct)
	{
		var l_title=new Element('div',
			{
				'class':'menuitem',
				'events':{
					'click':function(){
						$p.app.menu.openSubMenu(this.id);
						//if (this.fct!=indef) this.fct();
						this.fct;
					}
				}
			}
		);
		l_title.id = v_id;
		l_title.fct=v_fct;
		l_img=new $p.imgObj(v_icon,16,16,'','imgmid');
		l_img.injectInside(l_title);
		l_title.appendText(' '+v_label);

		if (__menuposition=='v')
		{
			$p.app.menu.addElement(l_title);
		}
		else
		{
			if ($('hmenucontentul')==null)
			{
				var l_ul=new Element('ul',
					{
						'styles':
						{
							'margin': '0px',
							'padding': '0px',
							'width': '100%'
						}
					}
				)
				l_ul.id='hmenucontentul';
				l_ul.injectInside($('hmenucontent'));
			}
			else
			{
				var l_ul=$('hmenucontentul');
			}
			var l_li=new Element('li',
				{
					'class':'hmenucontentli'
				}
			);
			l_li.id=v_id+'li';
			l_li.injectInside(l_ul);
			l_title.injectInside(l_li);
			//$p.app.menu.addElement(l_title,'hmenucontentul');
		}
	},
	/*
		$p.app.menu.addArea : add a title element
		Inputs
			v_id(int) : title item ID
			v_html(str) : HTML of area
	*/
	addArea:function(v_id,v_html,v_visible)
	{
		var l_content=new Element('div',
			{
				'id':v_id+'content',
				'class':'menuitemcontent'
			}
		);
		l_content.set('html',v_html);
		$p.app.menu.addElement(l_content,v_id+'li');

		if (v_visible && __menuposition=='v') l_content.setStyle('display','block');
		if (__menuposition=='h' && $(v_id).fct!=indef) $(v_id).fct();
	},
	addHTML:function(v_id,v_html)
	{
		var l_title=new Element('div',{
			'id':v_id
		});
		l_title.set('html',v_html);
		$p.app.menu.addElement(l_title,__menuposition+'menucontent');
	},
	addElement:function(v_element,v_container)
	{
		if (__menuposition=='v')
		{
			v_element.injectInside($(__menuposition+'menucontent'));
		}
		else
		{
			v_element.injectInside($(v_container));
		}
	},
	/*
		$p.app.menu.sortOptions : sort header items
	*/
	sortOptions:function(v_a,v_b)
	{
		if (v_a.seq<v_b.seq) return -1;
		if (v_a.seq>v_b.seq) return 1;
		return 0;
	}
}

$p.app.menu.widget={
	leftmenuinit:false,
	locked:false,
	/*
		$p.app.menu.widget.build : initialize widget menu
	*/
	build:function()
	{
		if (!$p.app.isCustomPortal())
		{
			$p.app.menu.addHTML('featureNotAvailableOutsidePortal',lg("featureNotAvailableInScreen"));
			return false;
		}
		
		if ($p.app.tabs.sel<0 || $p.app.tabs.sel==999 || tab[$p.app.tabs.sel].locked || $p.app.menu.widget.locked || !tab[$p.app.tabs.sel].editable)
		{
			//$p.app.alert.show(lg("featureNotAvailableInScreen"),1);
			$p.app.menu.addHTML('featureNotAvailableOutsidePortal',lg("featureNotAvailableInScreen"));
			return false;
		}
		
		if (showBoxStatus){hideBox();}

		if (__showrsscell)
		{
			$p.app.menu.addTitle('addmenu_1','ico_rss2.gif',lg("lblAddRSS"));
			var l_s='<form name="rss" onsubmit="return $p.app.widgets.rss.checkFeed()"><br />'
					+lg("enterRssUrl")+' :<br /><br />'
					+'<input class="thinbox" name="vars" type="text" size="25" onFocus=\'$p.navigator.inputFocus(this,"'+lg("lblRSSFlow")+'")\' onBlur=\'$p.navigator.inputLostFocus(this,"'+lg("lblRSSFlow")+'")\' value="'+lg("lblRSSFlow")+'" onclick=\'javascript:vars.value="";$p.print("authrss","");\' style="color:#aaaaaa" />'
					+'&nbsp;<input type="submit" name="butr" class="btn" value="Go" /> '+tooltip("msgRSShlp")
					+'<div id="authrss" style="width:180px;text-align:left;display:none;"></div>'
					+'</form>';
			if ($p.app.user.id>0) l_s+="<br /><a href='#' onclick='return $p.app.widgets.rss.importMenu()'>"+lg("lblImport")+"/"+lg("lblExport")+" (OPML)</a> "+tooltip("msgOpmlhlp")
			$p.app.menu.addArea('addmenu_1',l_s);
		}

		if (__showModuleSearch)
		{
			$p.app.menu.addTitle('addmenu_2','ico_search.gif',lg("lblSearch"));
			$p.app.menu.addArea('addmenu_2','<form name="mod__search" onsubmit="$p.app.menu.widget.getSearch(document.mod__search.searchtxt.value,0);return false;"><br />'+lg("searchModuleByKeywords")+' : <br /><br /><input class="thinbox" id="searchwidget" name="searchtxt" type="text" size="25" onFocus=\'$p.navigator.inputFocus(this,"'+lg("keywords")+'")\' onBlur=\'$p.navigator.inputLostFocus(this,"'+lg("keywords")+'");$p.tags.autocompletion.hide();\' value="'+lg("keywords")+'" onkeyup=\'$p.tags.autocompletion.get("searchwidget")\' style="color:#aaaaaa" /> <input type="submit" name="buts" class="btn" value="Go" />&nbsp;'+tooltip("helpTags")+'<div id="listmod" style="width:210px;text-align:left;"></div></form>');
		}

		if (__showModuleExpl)
		{
			$p.app.menu.addTitle('addmenu_3','ico_directory.gif',lg("lblExplore"));

			var l_s="";
			if (__useGroup && $p.app.user.id>0 && __usePrivateModules)
			{
				l_s+="<b>"+lg("privateModules")+"</b> "+$p.img("lock.gif",7,9,"","imgmid")+"<br />"
					+"<div id='exps0' class='explorer'>loading ...</div>"
					+"<b>"+lg("publicModules")+"</b><br />";
			}
			l_s+="<div id='exp0' class='explorer'>loading ...</div>";
			$p.app.menu.addArea('addmenu_3',l_s);
		}

		if (__userModuleJs=='I' && $p.app.user.id>0)
		{
			var contentaddmenu_4="";
			if($p.app.menu.widget.getMyModules()){
				contentaddmenu_4=$p.app.menu.widget.getMyModules;
			}
			else{
				contentaddmenu_4="loading...";
			}
			$p.app.menu.addTitle('addmenu_4','mymodules.gif',lg("lblArchive2"),$p.app.menu.widget.getMyModules);
			$p.app.menu.addArea('addmenu_4',contentaddmenu_4);
		}

		if (__showModuleExpl)
		{
			$p.app.menu.openSubMenu('addmenu_3',true);
			$p.app.menu.widget.getExplorer(0);
			if (__useGroup && $p.app.user.id>0) $p.app.menu.widget.getSecuredExplorer(0);
		}
		
		//focus on the last built tab
		//$p.app.tabs.select($p.app.tabs.sel);	
		//$p.app.tabs.refresh();
	},
	/*
		$p.app.menu.widget.lists : initialize modules lists

	lists:function(v_id,v_catid,v_order)
	{
		for (var i=0;i<__dimension.length;i++)
		{
			$p.setClass("dir"+__dimension[i]["seq"],((__dimension[i]["seq"]==v_id)?"sellist":"optlist"));
		}
		if (v_catid==0)
		{
			$p.app.menu.widget.getList(1,v_order);
		}
		else
		{
			$p.app.menu.widget.initDir(v_catid);
		}
		return false;
	},
	getList:function(v_page,v_order)
	{
		if (v_order==indef) v_order=1;
		// Open the services lists
		$p.ajax.call("selections/allservices"+v_order+"_"+v_page+".xml",
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.menu.widget.displayList,
					'variables':
					{
						'page':v_page,
						'order':v_order
					}
				}
			}
		);
	},
	displayList:function(response,vars)
	{
		var l_s="";
		l_s+="<table cellpadding='0' cellspacing='0'>";
		if (response.getElementsByTagName("page")[0])
		{
			var l_id;
			l_s+="<tr><td width='20'></td><td><table width='600'><tr>";
			l_s+="<td><input type=radio"+((vars['order']==1)?" checked='checked'":"")+" onclick='$p.app.menu.widget.getList(1,1);' />"+lg("lblNewMods")+"</td>";
			if (__useNotation) l_s+="<td><input type='radio'"+((vars['order']==2)?" checked='checked'":"")+" onclick='$p.app.menu.widget.getList(1,2);' />"+lg("lblBestRank")+"</td>";
			if (__useNotation) l_s+="<td><input type='radio'"+((vars['order']==3)?" checked='checked'":"")+" onclick='$p.app.menu.widget.getList(1,3);' />"+lg("lblPopMods")+"</td>";
			l_s+="<td><input type='radio'"+((vars['order']==4)?" checked='checked'":"")+" onclick='$p.app.menu.widget.getList(1,4);' />"+lg("lblNewsMods")+"</td>";
			l_s+="</tr></table></td><td width='20'></td></tr>";
			l_s+="<tr><td style='height:126px' valign='top' align='center'>";
			if (vars['page']>1){l_s+="<a href='#' onclick='$p.app.menu.widget.getList("+(vars['page']-1)+","+vars['order']+");return false;'>"+$p.img("prev.gif",14,27,lg("lblPrevMods"))+"</a>";}
			l_s+="</td><td valign='top' class='dirdiva'><table cellpadding='0' cellspacing='1' width='700'>";
			var i=0;
			while (response.getElementsByTagName("item")[i])
			{
				result=response.getElementsByTagName("item")[i];
				l_id=$p.ajax.getVal(result,"id","int",false,0);
				l_s+="<tr><td>"+$p.img("../modules/pictures/box0_"+l_id+".ico",16,16,"","imgmid")+" <a class='menul' href='#' onclick='$p.app.widgets.open("+l_id+")'>"+$p.ajax.getVal(result,"name","str",false,"--")+"</a> : "+$p.ajax.getVal(result,"desc","str",false,"...")+"</td></tr>";
				i++;
			}
			if (i==7){l_s+="</table></td><td valign='top' align='center'><a href='#' onclick='$p.app.menu.widget.getList("+(vars['page']+1)+","+vars['order']+");return false;'>"+$p.img("next.gif",14,27,lg("lblNextMods"))+"</a>";}
		}
		else
		{
			l_s+=lg("lblDisplayErr");
		}
		l_s+="</td></tr></table>";
		$p.show("listmod","block");
		$p.print("listmod",l_s);
	},
	*/
	/*
		$p.app.menu.widget.getSearch : search modules
		inputs
			v_s : search string
			v_page : results page number
	*/
	getSearch:function(v_s,v_page)
	{
		// Open the search results
		v_s=$p.string.formatForSearch($p.tags.formatList(v_s));
		v_s = $p.string.removeCot(v_s);
		$p.setClass("dirlink","optlist");
		$p.setClass("listlink","optlist");
		$p.setClass("sellink","optlist");
		$p.print("listmod",lg("searching"));
		v_s = $p.string.removeCot(v_s);
		$p.ajax.call("xmlsearch.php?searchtxt="+$p.string.esc(v_s)+"&p="+v_page,
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.menu.widget.displaySearch,
					'variables':
					{
						'searchtxt':v_s,
						'page':v_page
					}
				}
			}
		);
	},
	/*
		$p.app.menu.widget.displaySearch : display module search results
	*/
	displaySearch:function(response,vars)
	{
		var l_result;

		if (response.getElementsByTagName("nbres1")[0])
		{
			var l_nbres1=$p.ajax.getVal(response,"nbres1","int",false,0);
			var l_nbres = l_nbres1;
			
			if (l_nbres1<10)
			{
				var l_nbres2=$p.ajax.getVal(response,"nbres2","int",false,0);
				l_nbres=eval(l_nbres)+eval(l_nbres2);
			}
			
			$('listmod').set('html',"<br />"+lg("lblResultsFor")+" '"+vars['searchtxt']+"' :");
			var divObj1 = new Element('div',
				{
					'styles': {
						'height': '180px'
					},
					'class':'dirdiva'
				}
			);
			var tableObj1 = new Element('table', { 'cellpadding':'0', 'cellspacing':'1' } );
				var tbodyObj1 = new Element('tbody');
			if (response.getElementsByTagName("item")[0])
			{
				for (var i=0;i<10;i++)
				{
					if (response.getElementsByTagName("item")[i])
					{
						l_result=response.getElementsByTagName("item")[i];
						var trObj1 = new Element('tr');
						var tdObj1 = new Element('td');
						tdObj1.set('html',$p.img("../modules/pictures/box0_"+$p.ajax.getVal(l_result,"id","int",false,0)+".ico",16,16,"","imgmid") );
						var aObj1 = new Element('a',
							{ 
								'events': {
									'click': function()
									{
										$p.app.widgets.open(this.widId,indef,indef,(this.secured==0?false:true));
									}
								},
								'class':'menu1',
								'href':'#'
							} 
						);
						aObj1.widId=$p.ajax.getVal(l_result,"id","int",false,0);
						aObj1.secured=$p.ajax.getVal(l_result,"secured","int",false,0);
						aObj1.set('html',$p.ajax.getVal(l_result,"name","str",false,"..."));
						aObj1.inject(tdObj1);
						tdObj1.inject(trObj1);
						trObj1.inject(tbodyObj1);
					}
				}
			}
			else
			{
				var trObj2 = new Element('tr');
				var tdObj2 = new Element('td');
				tdObj2.set('html',lg("lblSrchNoMod"));
				tdObj2.inject(trObj2);
				trObj2.inject(tbodyObj1);	
			}
			tbodyObj1.inject(tableObj1);
			tableObj1.inject(divObj1);
			var tableObj2 = new Element ('table',
				{
					'styles': {
						'width': '95%'
					}
				}
			);
			var tbodyObj2 = new Element ('tbody');
			var trObj3 = new Element ('tr');

			if (vars['page']!=0)
			{
				var tdObj3 = new Element ('td');
				var aObj2 = new Element('a',
					{ 
						'events':
						{
							'click': function()
							{
								$p.app.menu.widget.getSearch(vars['searchtxt']+","+(parseInt(vars['page'])-1));
								return false;
							}
						},
						'href':'#'
					}
				);
				aObj2.set('html',$p.img("ico_previous2.gif",12,11,lg("lblPrevMods"))+" "+lg("previous"));
				aObj2.inject(tdObj3);
				tdObj3.inject(trObj3);
			}
			if (l_nbres==11)
			{
				var tdObj4 = new Element ('td',
					{
						'styles': {
							'text-align': 'right'
						}
					}
				);
				var aObj3 = new Element('a',
					{ 
						'events':
						{
							'click': function()
							{
								$p.app.menu.widget.getSearch(vars['searchtxt']+","+(parseInt(vars['page'])+1));
								return false;
							}												
						},
						'href':'#'
					}
				);
				aObj3.set('html',lg("next")+" "+$p.img("ico_next2.gif",12,11,lg("lblNextMods")));
				aObj3.inject(tdObj4);
				tdObj4.inject(trObj3);
			}
			trObj3.inject(tbodyObj2);
			tbodyObj2.inject(tableObj2);
			tableObj2.inject(divObj1);
			$p.show("listmod","block");
			divObj1.inject($('listmod'));
		}
		else
		{
			$('listmod').set('html',"<font style='color:#ff0000'>"+lg("lblSrch3car")+"</font>");
		}
	},
	/*
		$p.app.menu.widget.cleansearch : erase search results
	*/
	clearSearch:function()
	{
		$p.print("listmod","");
		return false;
	},
	initDir:function(v_cat)
	{
		// Initialize modules directory menu
		var tableObj1 = new Element('table', { 'cellpadding':'0', 'cellspacing':'0', 'border':'0' } );
		var tbodyObj1 = new Element('tbody');	
		var trObj1 = new Element('tr');	
		var tdObj1 = new Element('td');	
		var tableObj2 = new Element('table', 
			{ 
				'cellspacing':'0', 
				'width':'100%' 
			} 
		);
		var tbodyObj2  = new Element('tbody');
		var trObj2 = new Element('tr');	
		var tdObj2 = new Element('td');
		tdObj2.set('html',lg("lblNavDir")+" :" );
		tdObj2.inject(trObj2);
		var tdObj3 = new Element('td', { 'align':'right' } );
		tdObj3.inject(trObj2);
		trObj2.inject(tbodyObj2);
		tbodyObj2.inject(tableObj2);
		tableObj2.inject(tdObj1);
		tdObj1.inject(trObj1);
		trObj1.inject(tbodyObj1);
		
		var trObj3 = new Element('tr');	
		var tdObj4 = new Element('td');	
		var tableObj3 = new Element('table');	
		var tbodyObj3 = new Element('tbody');
		var trObj4 = new Element('tr');	
		var tdObj5 = new Element('td');	
		var divObj1 = new Element('div', 
			{
				'styles': {
					'width': '230px'
				},
				'id':'level1',
				'class':'dirdivi'
			}
		 );
		divObj1.inject(tdObj5);						 
		tdObj5.inject(trObj4);			
		var tdObj6 = new Element('td');	
		var divObj2 = new Element('div', 
			{
				'styles': {
					'width': '200px'
				},
				'id':'level2',
				'class':'dirdivi'
			}
		 );
		divObj2.inject(tdObj6);						 
		tdObj6.inject(trObj4);
		var tdObj7 = new Element('td');	
		var divObj3 = new Element('div', 
			{
				'styles': {
					'width': '200px'
				},
				'id':'level3',
				'class':'dirdivi'
			}
		 );
		divObj3.inject(tdObj7);						 
		tdObj7.inject(trObj4);
		var tdObj8 = new Element('td');	
		var divObj4 = new Element('div', 
			{
				'styles': {
					'width': '170px'
				},
				'id':'level4',
				'class':'dirdivi'
			}
		 );
		divObj4.inject(tdObj8);						 
		tdObj8.inject(trObj4);
		trObj4.inject(tbodyObj3);
		tbodyObj3.inject(tableObj3);
		tableObj3.inject(tdObj4);
		tdObj4.inject(trObj3);
		trObj3.inject(tbodyObj1);
		tbodyObj1.inject(tableObj1);
		$p.show("listmod","block");
		tableObj1.inject($("listmod"));
		$("listexample").set('html',$p.img("",7,7)+"<br />");	
		$p.print("level1","Chargement ...");
		$p.app.menu.widget.getDir(v_cat,1);	
	},
	getDir:function(v_cat,v_level)
	{
		// Open the modules directory
		$p.ajax.call("../cache/cat_"+v_cat+"_"+__lang+".xml?rand="+rand,
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.menu.widget.displayDir,
					'variables':
					{
						'level':v_level
					}
				}
			}
		);
	},
	displayDir:function(response,vars)
	{
		var l_s="";
		if (response.getElementsByTagName("parent")[0])
		{
			l_s+="<table cellpadding='0' cellspacing='1' border='12' style='width:90%'>";
			if (response.getElementsByTagName("dir")[0])
			{
				var l_i=0,l_dirid;
				while (response.getElementsByTagName("dir")[l_i])
				{
					var l_result=response.getElementsByTagName("dir")[l_i];
					l_dirid=$p.ajax.getVal(l_result,"dirid","int",false,0);
					l_dirquantity=$p.ajax.getVal(l_result,"quantity","int",false,0);
					if (l_dirquantity!=0) l_s+="<tr><td id='dir"+l_dirid+"' class='catopti' onmouseover='catOptOver(\""+l_dirid+"\")' onmouseout='catOptOut(\""+l_dirid+"\")'>&nbsp;<a href='#' class='menul' onclick='$p.app.menu.widget.getDir("+l_dirid+","+(vars['level']+1)+");catOptSel("+l_dirid+","+vars['level']+");return false;'>"+$p.ajax.getVal(l_result,"dirname","str",false,"...")+" ("+l_dirquantity+")</a></td></tr>";
					l_i++;
				}
			}
			if (response.getElementsByTagName("item")[0])
			{
				var l_i=0,l_itemid;
				while (response.getElementsByTagName("item")[l_i])
				{
					var l_result=response.getElementsByTagName("item")[l_i];
					l_itemid=$p.ajax.getVal(l_result,"id","int",false,0);
					l_s+="<tr><td>"+$p.img("../modules/pictures/box0_"+l_itemid+".ico",16,16,"","imgmid")+"&nbsp;<a href='#' class='menul' onclick='$p.app.widgets.open("+l_itemid+");return false;'>"+$p.ajax.getVal(l_result,"name","str",false,"...")+"</a></td></tr>";
					l_i++;
				}
			}
			l_s+="</table>";
		}
		else {l_s+=lg("lblDisplayErr");}

		$p.setClass("level"+vars['level'],"dirdiva");
		$p.print("level"+vars['level'],l_s);
		//clear unused div
		for (var i=vars['level']+1;i<5;i++){$p.print("level"+i,"");$p.setClass("level"+i,"dirdivi");}
	},
	/*
		$p.app.menu.widget.getExplorer : load modules directory branches
		inputs
			v_cat : directory ID
			v_open : open / close directory branch
	*/
	getExplorer:function(v_cat,v_open,v_lang)
	{		
		if (v_open==indef) v_open=1;

		navWait("exp"+v_cat);

		$p.ajax.call("../cache/cat_"+v_cat+(v_cat==0?"":"_"+v_lang)+".xml?rand="+rand,
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.menu.widget.displayExplorer,
					'variables':
					{
						'category':v_cat,
						'open':v_open,
						'prefix':'',
						'language':v_lang
					}
				}
			}
		);
		return false;
	},	
	/*
		$p.app.menu.widget.displayExplorer : display modules directory branch
	*/
	displayExplorer:function(response,vars)
	{
		//empty the element
		$("exp"+vars['prefix']+vars['category']).set('html','');
		//var divObj = new Element('div');
		var divObj=$("exp"+vars['prefix']+vars['category']);
		if (vars['category']!=0) 
		{	
			var aObj = new Element('a',
				{
					'events':
					{
						'click': function()
						{
							return $p.app.menu.widget.getExplorer(vars['category'],(vars['open']==0?"1":"0"),vars['language']);
						}
					},
					'class': 'dirlink',
					'href': '#'
				}
			);
			aObj.set('html',$p.img((vars['open']==1?"ico_minus.gif":"ico_plus.gif"),9,9)+" "+$p.ajax.getVal(response,"dirname","str",true,"--")+"<br />");
			aObj.inject(divObj);
		}
		if (response.getElementsByTagName("parent")[0] && vars['open']==1)
		{	
			if (response.getElementsByTagName("dir")[0])
			{
				var l_i=0,l_dirid;
				while (response.getElementsByTagName("dir")[l_i])
				{
					var l_result=response.getElementsByTagName("dir")[l_i];
					l_dirid=$p.ajax.getVal(l_result,"dirid","int",false,0);
					l_dirquantity=$p.ajax.getVal(l_result,"quantity","int",false,0);
					l_lang=$p.ajax.getVal(l_result,"lang","str",false,"");
					if (__displayAllLanguageModules || (!__displayAllLanguageModules && (l_lang=="" || l_lang==__lang)))
					{
						if (l_dirquantity!=0 || vars['category']==0) 
						{
							var divObj1 = new Element('div', 
								{ 
									'class':'expdir',
									'id':"exp"+vars['prefix']+l_dirid
								}
							);
							var aObj1 = new Element('a',
								{
									'events':
									{
										'click': function()
										{
											return $p.app.menu.widget.getExplorer(this.l_dirid,indef,this.l_lang);
										}
									},
									'class': 'dirlink',
									'href': '#'
								}
							);
							
							aObj1.l_dirid=l_dirid;
							aObj1.l_lang=l_lang;
							aObj1.set('html',$p.img("ico_plus.gif",9,9)+" "+$p.ajax.getVal(l_result,"dirname","str",false,"...")+" ("+l_dirquantity+")");
							aObj1.inject(divObj1);
							divObj1.inject(divObj);
						}
					}
					l_i++;
				}
			}
			if (response.getElementsByTagName("item")[0])
			{
				var l_i=0,l_itemid;
				while (response.getElementsByTagName("item")[l_i])
				{
					var l_result=response.getElementsByTagName("item")[l_i];
					l_itemid=$p.ajax.getVal(l_result,"id","int",false,0);
					
					var divObj3 = new Element('div');
					divObj3.set('html',$p.img("../modules/pictures/box0_"+l_itemid+".ico",16,16,"","imgmid")+"&nbsp;");
					divObj3.itemid=l_itemid;
					var aObj3 = new Element('a',
						{
							'events':
							{
								'click': function()
								{
									$p.app.widgets.open(this.itemid);
								}
							},
							'class': 'modlink',
							'href':'#'
						}
					);
					aObj3.itemid=l_itemid;
					aObj3.set('html',$p.ajax.getVal(l_result,"name","str",false,"..."));
					aObj3.inject(divObj3);
					divObj3.inject(divObj);
					//initialize items drag
					$p.app.widgets.move.init(divObj3);
					//item drag actions
					divObj3.onDrag=$p.app.menu.widget.explorerOnDrag;
					divObj3.onDragStart=$p.app.menu.widget.explorerOnDragStart;

					l_i++;
				}
			}
		}
	},
	explorerOnDragStart:function()
	{
		this.isDrag='mousedown';
	},
	explorerOnDrag:function(v_x,v_y)
	{
		if (this.isDrag=='firstmove')
		{
			//display the widget
			this.isDrag=true;
			$p.app.widgets.open(this.itemid,indef,indef,indef,false,false);

			//initialize widget move
			var newWidget=tab[$p.app.tabs.sel].module[tab[$p.app.tabs.sel].module.length-1].uniq;
			$p.app.widgets.move.obj=$('module'+tab[$p.app.tabs.sel].id+'_'+newWidget+'_h');
			$p.app.widgets.move.start($p.navigator.IE?indef:0);

			var l_obj=$p.app.widgets.move.shadow();
			//e=$p.app.widgets.move.fixE($p.navigator.IE?indef:e);
			l_obj.setStyle("left",v_x-10+"px");
			l_obj.setStyle("top",v_y-10+"px");
		}
		if (this.isDrag=='mousedown')
			this.isDrag='firstmove';
	},
	/*
		$p.app.menu.widget.getSecuredExplorer : load secured modules(group restrictions) directory branches
		inputs
			v_cat : directory ID
			v_open : open / close directory branch
	*/
	getSecuredExplorer:function()
	{
		$p.ajax.call("xmlexplorer.php?rand="+rand,
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.menu.widget.displaySecuredExplorer
				}
			}
		);
		return false;		
	},
	/*
		$p.app.menu.widget.displaySecuredExplorer : display modules directory branch
	*/
	displaySecuredExplorer:function(response,vars)
	{
		var l_s="";
		if (response.getElementsByTagName("item")[0])
		{
			var l_i=0,l_itemid;
			while (response.getElementsByTagName("item")[l_i])
			{
				var l_result=response.getElementsByTagName("item")[l_i];
				l_itemid=$p.ajax.getVal(l_result,"id","int",false,0);
				l_s+='<div>'
					+$p.img('../modules/pictures/box0_'+l_itemid+'.ico',16,16,'','imgmid')
					+'&nbsp;<a href="#" class="modlink" onclick="$p.app.widgets.open('+l_itemid+',indef,indef,true);return false;">'
					+$p.ajax.getVal(l_result,'name','str',false,'...')+'</a>'
					+'</div>';
				l_i++;
			}
		}
		else l_s=lg("lblNoModule");

		//if (vars[0]!=0) $p.setClass("exp"+vars[0],(vars[1]==0?"expdiri":"expdira"));
		$p.print("exps0",l_s);
	},
	/*
		$p.app.menu.widget.getMyModules : load list of the modules I created
	*/
	getMyModules:function()
	{
		$p.ajax.call("../portal/xmlmymodules.php",
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.menu.widget.displayMyModules
				}
			}
		);
	},
	/*
		$p.app.menu.widget.displayMyModules : display list of the modules I created
	*/
	displayMyModules:function(response,vars)
	{
		var l_s="<a href='#' onclick='$p.app.widgets.factory.init()'>"+$p.img("mymodules_create.gif",16,16,"","imgmid")+" "+lg("createYourModules")+"</a><br /><br />";
		var l_result=response.getElementsByTagName("module");

		for (var i=0;i<l_result.length;i++)
		{
			if ($p.ajax.getVal(l_result[i],"status","str",false,"N")=="O") l_s+="<a href='#' onclick='$p.app.widgets.open("+$p.ajax.getVal(l_result[i],"id","int",false,0)+",indef,indef,"+($p.ajax.getVal(l_result[i],"secured","int",false,0)==0?false:true)+")'>"+$p.img("puce.gif",3,5,"","imgmid")+" "+$p.ajax.getVal(l_result[i],"name","str",false,"???")+"</a><br/>";
		}
		$p.print('addmenu_4content',l_s);
	}
}

$p.app.menu.config={
	oldStyle:1,
	leftmenuinit:false,
	tempIcon:"",
	/*
		$p.app.menu.config.build : build the config menu
	*/
	build:function()
	{
		if (!$p.app.isCustomPortal() && $p.app.env!='portal_frame')
		{
			$p.app.menu.addHTML('featureNotAvailableOutsidePortal',lg("featureNotAvailableInScreen"))
			return false;
		}
		if ($p.app.tabs.sel<0 || $p.app.tabs.sel==999 || tab[$p.app.tabs.sel].locked || !tab[$p.app.tabs.sel].editable)
		{
			//$p.app.alert.show(lg("featureNotAvailableInScreen"),1);
			$p.app.menu.addHTML('featureNotAvailableOutsidePortal',lg("featureNotAvailableInScreen"))
			return false;
		}
		//if ($p.app.tabs.selId==0&&$p.app.user.id!=0) return false;
		// Open the "edit" menu
		if (showBoxStatus){hideBox();}
		$p.app.menu.config.oldStyle=tab[$p.app.tabs.sel].style;
				
		$p.app.menu.addTitle('confmenu_1','',lg("optionsOfThisPage"));

		var l_s='<form name="option">';
		if (__themeList.length>1 && __displayThemeSelector) l_s+="<div class='bottomhr'>"+lg("lblColors")+" &nbsp; <input type='button' value='<' style='width:20px' onclick='$p.navigator.prevstyle();' /> <input type='text' name='selstyle' value='"+__themeList[tab[$p.app.tabs.sel].style-1]+"' style='text-align:center;width:80px;' size='14' disabled /> <input type='button' value='>' style='width:20px' onclick='$p.navigator.nextstyle();' /></div>";
		if (__columnchange && $p.app.isCustomPortal()) l_s+="<div class='bottomhr'>"+lg("lblColNb")+" &nbsp; <input type='button' value='-' style='width:20px' onclick='$p.app.menu.config.supCols()' /> <input type='text' name='nbcol' value='"+tab[$p.app.tabs.sel].colnb+"' style='text-align:right;width:20px;' size='1' disabled /> <input type='button' value='+' style='width:20px' onclick='$p.app.menu.config.addCols()' /></div>";
		if (__usereader && $p.app.isCustomPortal()) l_s+="<div class='bottomhr'><input type='checkbox' name='usereader' "+(tab[$p.app.tabs.sel].usereader==1?"checked='checked' ":"")+"/> "+lg("lblUseInternalReader")+" "+tooltip("msgReaderhlp")+"</div>";
		if (__ctrlhiding && $p.app.isCustomPortal()) l_s+="<div class='bottomhr'><input type='checkbox' name='controls' "+((tab[$p.app.tabs.sel].controls=='Y')?"checked='checked' ":"")+"/> "+lg("lblMoveMods")+" "+tooltip("msgCtrlhlp")+"</div>";
		if (__moduleAlign && $p.app.isCustomPortal()) l_s+="<div class='bottomhr'><input type='checkbox' name='modulealign' "+((tab[$p.app.tabs.sel].moduleAlign)?"checked='checked' ":"")+"/> "+lg("lblModuleAlign")+" "+tooltip("msgModuleAlign")+"</div>";
		if ($p.app.isCustomPortal())l_s+="<div class='bottomhr'><input type='checkbox' name='loadonstart' "+((tab[$p.app.tabs.sel].loadstart==1)?"checked='checked' ":"")+"/> "+lg("loadOnStart")+" "+tooltip("msgLoadStarthlp")+"</div>";
        if ($p.app.user.id!=0 
            && __doubleprotection 
            && $p.app.isCustomPortal()) {
    			l_s+='<div class="bottomhr">'
    			   +'<input type="checkbox" name="usepass"'
                   +((tab[$p.app.tabs.sel].lock==1)?' checked="checked"':'')
                   //+((jspass=='')?'':' checked="checked"')
                   +' /> '+lg("lblSecurity")+' '+tooltip('msgSecurityhlp')
                   +'</div>';
		}
		if (__showtabicon)
		{
			l_s+='<div class="hightlight">'
				+lg("addIconToPage")+'<br /><br />'
				+'<div id="pageicons" style="width:100%"></div>'
				+'</div>';
		}
		l_s+='<center>'
			+'<br /><input class="btnbig" type="button" value="'+lg("lblBtnValid")+'" onclick="$p.app.menu.config.save();" /><br />'
			+'</center>'
			+'</form>';
		$p.app.menu.addArea('confmenu_1',l_s);

		if ($p.app.user.id!=0&&$p.navigator.IE)
		{
			$p.app.menu.addTitle('confmenu_2','',lg("optionsOfThePortal"));

			$p.app.menu.addArea('confmenu_2',"<br />"+$p.img("ico_home.gif",14,14)+" <a class='menul' href='#' onclick='$p.navigator.addHome();return false;'>"+lg("lblHome",__apname)+"</a><br />"+$p.img("ico_favorite.gif",14,14)+" <a class='menul' href='#' onclick='$p.navigator.addFav();return false;'>"+lg("lblFav",__apname)+"</a>");
		} 
		$p.app.menu.openSubMenu('confmenu_1',true);
		
		if (__showtabicon)
		{
			$p.app.menu.config.showIcons();
			if (tab[$p.app.tabs.sel].icon!="")
			{
				$p.app.menu.config.setIcon(indef,tab[$p.app.tabs.sel].icon);
			}
			else
			{
				$p.app.menu.config.setIcon(-1);
			}
		}
	},
	/*
		$p.app.menu.config.showIcons : display icons list for portal personalization
	*/
	showIcons:function()
	{
		//no icon link
		var aLvl1 = new Element('a', 
			{ 
				'events': {
						'click': function(){
								$p.app.menu.config.setIcon(-1); }
						  },
				'href':'#'
			} 
		);
		aLvl1.set('html',lg("noIcon"));
		aLvl1.inject($("pageicons"));
					
		for (i=0;i<__nbicons;i++)
		{
			var imgM = "imgLvlMulti"+i;
			var imgM = new Element('img',
				{ 
					'styles':
					{
						'width':'16px',
						'height':'16px',
						'border':'1px solid #ffffff',
						'vertical-align':'middle'
					},
					'events':
					{
						'click': function()
						{
							$p.app.menu.config.setIcon(this.name); 
						}
					},
					'id':'icon'+i,
					'src':'../modules/pictures/_deficon'+i+'.gif',
					'align':'absmiddle'
				}
			);
			imgM.name = i;
			imgM.injectInside($("pageicons"));	
		}
	},
	/*
		$p.app.menu.config.hide : hide edit menu
	*/
	hide:function()
	{
		$p.app.menu.close();
		//re-initialize the colors (if not saved)
		if (tab[$p.app.tabs.sel].style!=$p.app.menu.config.oldStyle)
		{
			tab[$p.app.tabs.sel].style=$p.app.menu.config.oldStyle;
			$p.navigator.setActiveStyleSheet(tab[$p.app.tabs.sel].style);
		}
	},
	/*
		$p.app.menu.config.addCols : increase page column
	*/
	addCols:function()
	{
		l_colnb=parseInt(document.forms["option"].nbcol.value,10);
		if (l_colnb<9)
		{
			l_colnb++;
			document.forms["option"].nbcol.value=l_colnb;
		}
	},
	/*
		$p.app.menu.config.supCols : remove page column
	*/
	supCols:function()
	{
		l_colnb=parseInt(document.forms["option"].nbcol.value,10);
		if (l_colnb>1)
		{
			l_colnb--;
			document.forms["option"].nbcol.value=l_colnb;
		}
	},
	/*
		$p.app.menu.config.setIcon : define page icon
	*/
	setIcon:function(v_id,v_url)
	{
		for (var i=0;i<__nbicons;i++)
		{
			if (v_id==indef)
			{
				($("icon"+i)).style.borderColor=("../modules/pictures/_deficon"+i+".gif"==v_url?"#ff0000":"#ffffff");
			}
			else
			{
				($("icon"+i)).style.borderColor=(i==v_id?"#ff0000":"#ffffff");
			}
		}
		if (v_id==indef)
		{
			$p.app.menu.config.tempIcon=v_url;
		}
		else
		{
			$p.app.menu.config.tempIcon=(v_id==-1?"":"../modules/pictures/_deficon"+v_id+".gif");
		}
		//write the icon value in a hidden field to get it with $_post 
		if (document.forms[0].hiddenIconValue)
			$('hiddenIconValue').value=$p.app.menu.config.tempIcon;
	},
	/*
		$p.app.menu.config.save : save page options changes
	*/
	save:function()
	{
		// Save the settings
		var l_form=document.forms['option'];
		var l_alarm=true;
		//security
        var l_secu=0;
        if ($p.app.user.id!=0)  {
            if (l_form.usepass) {
                l_secu=(l_form.usepass.checked)     ?   1
                                                    :   0;
            }
        }           
 
		//jspass=l_secu?"ok":"";
		//info banner
		if (l_form.useadvise)
		{
			$p.app.banner.info.requested=(l_form.useadvise.checked)?"Y":"N";
			if ($p.app.banner.info.requested=="Y" && $p.app.banner.info.loaded && $p.app.banner.info.shown) $p.app.banner.info.load();
		}
		//style
		$p.app.menu.config.oldStyle=tab[$p.app.tabs.sel].style;
		//use reader
		var l_usereader=l_form.usereader?(__usereader?(l_form.usereader.checked?1:0):0):tab[$p.app.tabs.sel].usereader;
		//controls
		var l_controls=l_form.controls?(l_form.controls.checked?"Y":"N"):tab[$p.app.tabs.sel].controls;
		var l_moduleAlign=l_form.modulealign?l_form.modulealign.checked:tab[$p.app.tabs.sel].moduleAlign;
		
		tab[$p.app.tabs.sel].label=$p.app.tabs.currName;
		tab[$p.app.tabs.sel].lock=l_secu;
        //tab[$p.app.tabs.sel].lock=jspass;
		
		//Columns
		l_nbCol=l_form.nbcol?parseInt(l_form.nbcol.value,10):tab[$p.app.tabs.sel].colnb;
		var l_allowSuppress=$p.app.pages.columns.isEmpty(l_nbCol);
		if (l_allowSuppress)
		{
			if (l_nbCol>tab[$p.app.tabs.sel].colnb)
			{
				$p.app.pages.columns.add(l_nbCol);
			}
			else if (l_nbCol<tab[$p.app.tabs.sel].colnb)
			{
				$p.app.pages.columns.sup(l_nbCol);
			}
		}
		else
		{
			l_nbCol=tab[$p.app.tabs.sel].colnb;
			l_alarm=false;
		}
		//if (p_area.showType!=l_showType) changeShowType(l_showType);
		if (tab[$p.app.tabs.sel].controls!=l_controls)
		{
			$p.app.widgets.switchHdr();
		}
		if (tab[$p.app.tabs.sel].moduleAlign!=l_moduleAlign)
		{
			$p.app.widgets.align(tab[$p.app.tabs.sel].moduleAlign);
		}
		if (tab[$p.app.tabs.sel].showType==1&&l_nbCol!=tab[$p.app.tabs.sel].colnb) $p.app.alert.show(lg("lblColNbErr"));
		
		tab[$p.app.tabs.sel].usereader=l_usereader;
		tab[$p.app.tabs.sel].icon=$p.app.menu.config.tempIcon;
		tab[$p.app.tabs.sel].loadstart=l_form.loadonstart?(l_form.loadonstart.checked?1:0):0;
		$p.app.tabs.create($p.app.tabs.sel);

		$p.ajax.call('scr_config_options.php',
			{
				'type':'execute',
				'variables':"prof="+$p.app.tabs.selId+"&portstyle="+tab[$p.app.tabs.sel].style+"&portname="+$p.string.esc($p.app.tabs.currName)+"&col="+l_nbCol+"&advise="+$p.app.banner.info.requested+"&usepass="+l_secu+"&usereader="+l_usereader+"&ctrl="+l_controls+"&align="+(l_moduleAlign?"Y":"N")+"&icon="+$p.app.menu.config.tempIcon+"&load="+tab[$p.app.tabs.sel].loadstart,
				'alarm':l_alarm
			}
		);
		//if (l_allowSuppress) $p.app.menu.config.hide();
	}
}


//****************************************************************************************************************************************************
//**
//**                                      TABS
//**
//****************************************************************************************************************************************************

$p.app.tabs={
	isInit:false,
	sel:indef,
	selId:0,
	currName:"",
	overtabid:-1,
	currHeadLink:{},
	locked:false,
	/*
		$p.app.tabs.object : tabs class
		inputs
			id : uniq id of the tab
			label : title writen in the tab object
			type : type of the tab (personalized page, frame, ...)
			fct : function called when tab is opened
			lock (boolean) : is the tab locked ?
			seq : tab sequence (gives order information)
			editable (boolean) : is the tab editable
			movable (boolean) : is the tab movable
			icon : icon displayed in the tab
			status : is a new page or not
			loadstart (boolean) : is the tab loaded on application startup (application for personalized pages)
			pageId : if pageId 1, page linked to 'pages' in the database.
	*/
	object:function(id,label,type,fct,lock,seq,editable,movable,icon,loadstart,status,param,pageId)
	{
		if (lock==indef) lock="";
		if (pageId==1)	this.pageid=id;
		this.id=id;
		this.label=label;
		this.type=type;
		this.fct=fct;
		this.param=param;
		//lock = the tab is lockable or not ?
		this.lock=lock;
		this.seq=seq;
		this.editable=(editable==indef?true:editable);
		this.movable=movable;
		this.icon=icon;
		this.loadstart=(loadstart==indef?0:loadstart);
		this.status=status;
		//added 1.4 to manage these information at tab level
		this.isLoaded=indef;
		this.maxUniq=0;
		this.root={};
		this.controls="Y";
		this.moduleAlign=(this.type==1)?__moduleAlignDefault:true;
		this.style=1;
		this.showType=0;
		this.colnb=3;
		this.newspapernb=20;
		this.usereader=(__usereader?1:0);
		this.moveIsInit=false;
		this.nbUnread=0;
		//locked = current lock status of a tab
		this.locked=false;
		this.module=[];
		this.feeds=[];
		this.cols=[];
		this.open=$p.app.tabs.open;
		this.rename=$p.app.tabs.rename;
		this.remove=$p.app.tabs.remove;
	},
	/*
		$p.app.tabs.init : create the tabs objects
		inputs :
			response : xml response containing tabs information
	*/
	init:function(response)
	{
		var i=0,result;
		while (response.getElementsByTagName("tab")[i])
		{
			if (i>=tab.length || tab[i].isLoaded==indef)
			{
				result=response.getElementsByTagName("tab")[i];
				tab[i]=new $p.app.tabs.object($p.ajax.getVal(result,"number","int",false,0),$p.ajax.getVal(result,"name","str",false,"..."),$p.ajax.getVal(result,"type","str",false,"P"),$p.ajax.getVal(result,"action","str",false,""),$p.ajax.getVal(result,"locked","int",false,0),$p.ajax.getVal(result,"seq","int",false,0),$p.ajax.getVal(result,"edit","int",false,0),$p.ajax.getVal(result,"move","int",false,0),$p.ajax.getVal(result,"icon","str",false,""),$p.ajax.getVal(result,"loadstart","int",false,0),$p.ajax.getVal(result,"status","int",false,0),$p.ajax.getVal(result,"param","str",false,""),1);	
			}
			i++;
		}
	},
	/*
		$p.app.tabs.open : open a tab
		input : v_id:id of the tab
	*/
	open:function(v_id)
	{
		if (v_id==indef) v_id=$p.app.tabs.idToPos(this.id);
		if (tab[v_id].status==1 || tab[v_id].status==2)	
		{
			$p.app.tabs.detectModifiedTab(v_id);
		}
		$p.app.pages.hide();
		$p.app.tabs.select(v_id);
		$p.app.tabs.sel=v_id;
		eval(tab[$p.app.tabs.sel].fct);
		$p.app.tabs.select(v_id);
	},
	/*
		$p.app.tabs.select : select a tab
	*/
	select:function(v_tab)
	{
		if (v_tab==indef)
			v_tab=$p.app.tabs.sel;
		$p.app.tabs.create(v_tab);
	},
	/*
		$p.app.tabs.refresh : refresh the tabs selection
	*/
	refresh:function(v_tab)
	{
		$p.app.tabs.create(v_tab);
	},
	/*
		$p.app.tabs.create : display the tabs
		inputs
			v_id : tab ID
			v_locked (boolean) : is the tab locked (not movable) ?
			v_stopMove ???
			v_prof : ??
	*/
	create:function(v_id,v_locked,v_stopMove,v_prof)
	{
		// Create the pages tab
		if (v_locked==indef) v_locked=$p.app.tabs.locked;
		var l_movable=!v_stopMove;
		
		//to update with 1.6 : add type lists, and simplify html code
        if (__tabType=="navigator")
		{
			l_s='<table id="alltabs" cellpadding="0" cellspacing="0">'
				+'<tr>'
				+'<td class="endtab" style="padding: 6px;">'
				+'<a href="#" id="leftTabNav" onmouseover="$p.app.tabs.nav.left();" onmouseout="$p.app.tabs.nav.stop();">'+$p.img('ico_previous.gif',7,9)+'</a>'
				+'</td>'
				+'<td valign="bottom" width="100%">'
				+'<div id="navfixedbox">'
				+'<div id="navfloatbox">'
				+'<div id="navmovebox">'
				+'<table cellpadding="0" cellspacing="0" width="100%">'
				+'<tr>'
				+'<td style="font-size:1px;line-height:0px;">'
				+'<img id="navctlimg" src="../images/s.gif" width="100%" style="height:1px" />'
				+'</td>'
				+'</tr>'
				+'<tr>'
				+'<td>'
				+'<table cellpadding="0" cellspacing="0"><tr>';
			var i=0,firstMovingTab=true;
			while (i<tab.length)
			{
				//if selected tab in not yet defined
				if (v_id==indef && v_prof==tab[i].id)
				{
					v_id=i;
					$p.app.tabs.sel=i;
				}
				else
					$p.app.tabs.sel=v_id;
				
				if (firstMovingTab)
				{
					if (i==0)
					{   
                        l_s+='<td>'
                        +'<table cellpadding="0" cellspacing="0" border="0">'
                        +'<tr'+(tab[i].movable=='1'?' id="tabsframe"':'')+'>';
					}
					else
					{
						if (tab[i].movable==1)
						{
							l_s+='</tr>'
								+'</table>'
								+'</td>'
								+'<td>'
								+'<table cellpadding="0" cellspacing="0" border="0">'
								+'<tr id="tabsframe">';
						}
					}
					
					if (tab[i].movable==1) firstMovingTab=false;
				}
                l_s+='<td id="tab'+i+'" width="1" valign="bottom">';
                
				if (i==v_id)
				{
					l_s+=$p.app.tabs.activeTab(i,v_locked,l_movable);
					l_s+='</td>'
						+'<td class="intertaba">'+$p.img('s.gif',1,1)
						+'</td>'
						+'</tr>'
						+'</table>';
					$p.navigator.changeTitle($p.app.tabs.currName);
				}
				else
					l_s+=$p.app.tabs.inactiveTab(i,v_prof);
				
				l_s+='</td>';
				i++;
			}
			l_s+='<td nowrap="nowrap" class="'+(i==0?'notab':'endtab')+'" style="width:100%">'
			if ($p.app.user.id>=0 && __maxPageNb>tab.length && __addPagePermission) 
			{
				l_s+='<a href="#" id="newtablk" onclick="$p.app.pages.newPortal();return false;">+ '+lg('lblNewpage')+'&nbsp;</a>'
			}
			l_s+='</td>';
			if (i>0)
			{
				l_s+='</tr>'
					+'</table>'
					+'</td>';
			}
			l_s+='<td class="endtab">&nbsp;</td>'
				+'</tr>'
				+'</table>'
				+'</td>'
				+'</tr>'
				+'</table>'
				+'</div></div>'
				+'</div>'
				+'</td>'
				+'<td class="endtab" style="padding: 6px">'
				+'<a href="#" id="rightTabNav" onmouseover="$p.app.tabs.nav.right();" onmouseout="$p.app.tabs.nav.stop();">'+$p.img('ico_next.gif',7,9)+'</a>'
				+'</td>'
			//add a bloc if scrollbars with FF
				+'<td class="endtab">&nbsp;&nbsp;&nbsp;</td>'
				+'</tr>'
				+'</table>';
		}
		else
		{
			l_s='<ul class="tabnav" id="tabsframe">';
			var i=0,firstMovingTab=true;
			while (i<tab.length)
			{
				//if selected tab in not yet defined
				if (v_id==indef&&v_prof==tab[i].id)
				{
					v_id=i;
					$p.app.tabs.sel=i;
				}
				else
					$p.app.tabs.sel=v_id;
				
				l_s+="<li id='tab"+i+"'"+(i==v_id?" class='active'":"")+">";
				if (i==v_id)
				{
					l_s+=$p.app.tabs.activeTab(i,v_locked,l_movable);
					l_s+="</td><td class='intertaba'>"+$p.img("s.gif",1,1)+"</td></tr></table>";
					$p.navigator.changeTitle($p.app.tabs.currName);
				}
				else
					l_s+=$p.app.tabs.inactiveTab(i,v_prof);
				
				l_s+="</li>";
				i++;
			}
			if ($p.app.user.id>=0 && __maxPageNb>tab.length) l_s+="<li><div nowrap='nowrap' class='endtab'><a href='#' onclick='$p.app.pages.newPortal();return false;'>+ "+lg("lblNewpage")+"&nbsp;</a></div></li>";
			l_s+="</ul>";
		}
		$p.print("tabs",l_s);
		
		$p.app.tabs.isInit=false;
		if (l_movable) $p.app.tabs.initMove();
		if (__tabType=="navigator") $p.app.tabs.nav.init();
	},
	/*
		$p.app.tabs.activeTab : return active tab HTML code
	*/
	activeTab:function(v_id,v_locked,v_movable)
	{        
        if ($p.app.env!="admin") {  ($p.app.menu.isOpen)       ?       $p.app.menu.refresh()
                                                               :       '';  }
		$p.app.tabs.currName=tab[v_id].label;
		var l_s=''
			+'<table class="taba" cellpadding="0" cellspacing="0">'
			+'<tr>'
			+'<td class="tabal" id="tab'+v_id+'_h"'+(v_movable&&tab[v_id].movable?' style="cursor:move"':'')+'>'
			+'<a href="#" onmousedown="'+($p.app.user.id<0||v_locked||!tab[v_id].editable?'':'$p.app.tabs.edit('+v_id+')')+'" style="cursor:text">';

		//verify the tab status
		if (tab[v_id].status==1 || tab[v_id].status==2)	$p.app.tabs.detectModifiedTab(v_id);

		l_s+=((tab[v_id].isLoaded==false && tab[v_id].type==1)?$p.img("ico_waiting.gif",16,16,"","imgmid"):((tab[v_id].icon==""||tab[v_id].icon==indef||!__showtabicon)?$p.img("s.gif",16,16,"","imgmid"):"<img src='"+tab[v_id].icon+"' width='16' height='16' align='absmiddle'>"))
			+'&nbsp;'+tab[v_id].label
			+'&nbsp;<span class="tabextra" id="tabextra'+v_id+'">'+(tab[v_id].nbUnread==0?'':'('+tab[v_id].nbUnread+')')+'</span>'
			+'</a>'
			+'</td>'
			+'<td class="tabar">';

		if ($p.app.user.id>=0)
		{
			l_s+='<table cellpadding="0" cellspacing="0" border="0">';
			if (tab[v_id].lock!=0)
			{
				l_s+='<tr>'
					+'<td style="font-size:2pt;">'
					+'<a href="#" onclick="$p.app.pages.lock();return false;">'+$p.img('lock.gif',7,9,lg('lblSecuActive'),'imgmid')+'</a>'
					+'</td>'
					+'</tr>';
			}
	
			if (tab[v_id].editable && __showTabOptions)
			{
				l_s+='<tr>'
					+'<td style="font-size:2pt;">'
					+'<a href="#" title='+lg("lblShowOpt")+' onclick="'+(v_locked?'':'return $p.app.banner.option.show()')+'">'+$p.img('ico_down_arrow_black.gif',11,8,'modify','imgmid')+'</a>'
					+'</td>'
					+'</tr>';
			}
			else
			{
				l_s+='<tr>'
					+'<td style="font-size:2pt;">'+$p.img('s.gif',11,8,'imgmid')+'</td>'
					+'</tr>';
			}
			
			l_s+='</table>';
		}
		else
			l_s+="&nbsp;";

		return l_s;
	},
	/*
		$p.app.tabs.inactiveTab : return inactive tab HTML code
	*/
	inactiveTab:function(v_id,v_prof)
	{
		var l_s=''
			+'<table class="tab" cellpadding="0" cellspacing="0"><tbody>'
			+'<tr>'
			+'<td class="tabl"'+(tab[v_id].movable?' id="tab'+v_id+'_h" style="cursor:move"':'')+'>';

		if (v_prof==0)
		{
			l_s+='<a href="#" onclick="openPage('+tab[v_id].id+');" id="tab'+v_id+'_u">';
		}
		else
		{      
             href= (tab[v_id].type==4 && $p.app.env=="admin")
                                            ?   '"' + tab[v_id].fct + '"' 
                                            :   "'#' onclick=\"$p.app.tabs.open("+v_id+");return false;\"";
             l_s+="<a href="+ href +" id='tab"+v_id+"_u'>";
        }
		
		l_s+=((tab[v_id].isLoaded==false && tab[v_id].type==1)?$p.img("ico_waiting.gif",16,16,"","imgmid"):((tab[v_id].icon==""||tab[v_id].icon==indef||!__showtabicon)?$p.img("s.gif",16,16,"","imgmid"):"<img src='"+tab[v_id].icon+"' width='16' height='16' align='absmiddle'>"))
			+'	 '+tab[v_id].label
			+'&nbsp;<span class="tabextra" id="tabextra'+v_id+'">'+(tab[v_id].nbUnread==0?'':'('+tab[v_id].nbUnread+')')+'</span>'
            +'</a>'
			+'</td>'
			+'<td class="tabr">'
			+'<table cellpadding="0" cellspacing="0" border="0"><tbody>';
		if (tab[v_id].lock!=0){l_s+="<tr><td style='font-size:2pt;'>"+$p.img("lock.gif",7,9,lg("lblSecuActive"),"imgmid")+"</td></tr>";}
        if (tab[v_id].status==1 || tab[v_id].status==2)
			l_s+="<tr><td style='font-size:2pt;'>"+img("ico_alert.gif",12,12,"","imgmid")+"</td></tr>";
        else if (tab[v_id].type==4 && ($p.app.env=="portal_page_conn" || $p.app.env=="portal_page_anon"))
			l_s+="<tr><td style='font-size:2pt;'><a href='#' onclick='return $p.app.pages.suppress("+v_id+");'>"+img("ico_close.gif",12,11,lg('lblSuppresspage'),"imgmid")+"</a></td></tr>";    
  		else
			l_s+="<tr><td style='font-size:2pt;'>"+img("s.gif",11,8,"imgmid")+"</td></tr>";
			l_s+='</tbody></table>'
			+'</td>'
			+'<td class="intertab">'+$p.img('s.gif',1,1)+'</td>'
			+'</tr>'
			+'</tbody></table>';
           
		return l_s;
	},
	/*
		$p.app.tabs.initMove : init tabs moving processes
	*/
	initMove:function()
	{         
		// Initialize column & modules behaviors
		// do not initialize the tabs if already done
		if ($p.app.tabs.isInit) return;
		//if no tab existing for user
		if (tab.length==0) return;
		$p.app.tabs.isInit=true;
		var l_tabs=$("tabsframe");
		if (l_tabs!=null)
		{
			for (var i=0;i<l_tabs.childNodes.length-1;i++)
			{
				var l_mod=l_tabs.childNodes[i];
				$p.app.widgets.move.set(l_mod,"tab",l_tabs,"horizontal",false);
			}
		}
	},
	/*
		$p.app.tabs.save : save tabs changes
		input : tab ID
	*/
	save:function(v_movedId)
	{ 
		// Save the tabs changes
		var l_tabs=$("tabsframe");
		var l_prevPlace=0;
            
		for (var i=0;i<l_tabs.childNodes.length-1;i++)
		{
            if ((l_tabs.childNodes[i].id).indexOf("tab")!=-1)
			{
				l_id=(l_tabs.childNodes[i].id).replace("tab","");
				if (l_id==v_movedId && (l_prevPlace+1)!=tab[l_id].seq)
				{
					$p.ajax.call('scr_movetab.php',
						{
							'type':'execute',
							'variables':"id="+tab[l_id].id+"&old="+tab[l_id].seq+"&new="+(l_prevPlace+1),
							'alarm':false
						}
					);
				}
				l_prevPlace=tab[l_id].seq;
				tab[l_id].seq=i+1;
				//if (l_id==$p.app.tabs.sel) l_newSeq=tab[l_id].seq;
           }     
		}       
        
		tab.sort($p.app.tabs.sort);
		// v1.4 : if on HTML predefined page, function was not working
		if ($p.app.tabs.selId!=0)
		{
		$p.app.tabs.create(indef,false,false,$p.app.tabs.selId);
		} else {
		$p.app.tabs.create($p.app.tabs.sel);}
	},
	/*
		$p.app.tabs.sort : tabs sorting rule
	*/
	sort:function(a,b)
	{
		if (a.seq<b.seq) return -1;
		if (a.seq>b.seq) return 1;
		return 0; 
	},
	/*
		$p.app.tabs.edit : edit tab name
		input : tab ID
	*/
	edit:function(v_id)
	{
		if (tab[$p.app.tabs.sel].showType==1)
		{
			$p.app.widgets.rss.reader.close();
			return;
		}
		// Edit tab name
		$p.app.tabs.create($p.app.tabs.sel,false,true);
		var l_tab=$("tab"+v_id+"_h");
		//l_tab.innerHTML=
		l_tab.set('html',"<form id='tabeditform' onsubmit='return $p.app.tabs.submitNameChange(this.tabinput,"+v_id+");'><input class='thinbox' name='tabinput' id='tabinput' type='text' size='"+$p.max(10,tab[v_id].label.length)+"' maxlength='30' style='border:0px;margin:0px;height:13px;' value='"+tab[v_id].label+"' onblur=\"\" /> <input type='image' class='imgmid' src='../images/ico_accept.gif' border='0' title='"+lg('lblOk')+"' /><a href='#' onclick='$p.app.tabs.create($p.app.tabs.sel);'>"+$p.img("ico_stop.gif",16,16,lg("lblCancel"),"imgmid")+"</a></form>");
		var l_input=$("tabinput");
		l_input.select();
	},
	/*
		$p.app.tabs.rename : save tab name changes
		input
			v_input : text input object when tab name is typed
			v_id : tab ID
	*/
	rename:function(v_name,v_id)
	{
		if (v_id==indef) v_id=$p.app.tabs.idToPos(this.id);
		if (tab[v_id].status==1 || tab[v_id].status==2)	$p.app.tabs.detectModifiedTab(v_id);
		if (v_name!="" && v_name!=tab[v_id].label)
		{
			if ($p.app.tabs.sel==v_id) $p.app.tabs.currName=v_name;
			tab[v_id].label=v_name;
			$p.ajax.call('scr_config_options.php',
				{
					'type':'execute',
					'variables':"prof="+tab[v_id].id+"&portstyle="+tab[v_id].style+"&portname="+$p.string.esc(tab[v_id].label)+"&col="+tab[v_id].colnb+"&advise="+$p.app.banner.info.requested,
					'alarm':false
				}
			);
		}
		$p.app.tabs.create($p.app.tabs.sel);
		$p.app.widgets.rss.pageUnread();
	},
	submitNameChange:function(v_input,v_id)
	{
		var l_name=$p.string.removeTags($p.string.removeCot(v_input.value));
		$p.app.tabs.rename(l_name,v_id);
		return false;
	},
	/*
		$p.app.tabs.initHeadMenu : generate tab menu
		input
			v_obj : div object where menu is generated
			v_id : tab ID
	*/
	initHeadMenu:function(v_obj,v_id)
	{
		if (v_obj==indef)
			if ($("headmenu")!=null) $p.app.tabs.showHeadMenu(false);
		else
		{
			$p.app.tabs.currHeadLink=v_obj;			
			var l_top=($p.app.tabs.currHeadLink.getTop())+15;
			var l_left=($p.app.tabs.currHeadLink.getLeft())-3;
			var l_width=$p.app.tabs.currHeadLink.offsetWidth+6;

			$p.app.tabs.showHeadMenu(true);
			var l_obj=$("headmenu");
			l_obj.setStyle("top",l_top+"px");
			l_obj.setStyle("left",l_left+"px");
			var l_s="";
			for (var i=0;i<__headmenu[v_id]["options"].length;i++)
			{
				l_s+='<a href="#" onclick="$p.app.tabs.showHeadMenu(false);'+__headmenu[v_id]["options"][i]["fct"]+'" onmouseover="$p.app.tabs.showHeadMenu(true)" style="white-space: nowrap;height: 17px;">'+(__headmenu[v_id]["options"][i]["images"]==""?"":$p.img(__headmenu[v_id]["options"][i]["images"],false,false,"","imgmid")+" ")+lg(__headmenu[v_id]["options"][i]["label"])+'</a>';
			}
			l_obj.set('html',l_s);
			l_obj.onmouseout=function(){$p.app.tabs.showHeadMenu(false);}
		}
	},
	/*
		$p.app.tabs.showHeadMenu : display tab menu
	*/
	showHeadMenu:function(v_show)
	{	
		if (v_show)
		{
			$p.show("headmenu","block");
		}
		else
		{
			$p.show("headmenu","none");
			//document.body.removeChild($("headmenu"));
		}
	},
	/*
		$p.app.tabs.moduleOver : define tab behaviour when a module is over
		input : tab ID
	*/
	moduleOver:function(v_id)
	{
		if (tab[v_id].type==1 && __moveWidgetsInTabs)
		{
			var l_obj=$("tab"+v_id);
			l_obj.setStyle("border","1px solid #ff0000");
			$p.app.tabs.overtabid=v_id;
		}
	},
	/*
		$p.app.tabs.moduleOut : define tab behaviour when a module is no more over
		input : tab ID
	*/
	moduleOut:function(v_id)
	{
		var l_obj=$("tab"+v_id);
		if (l_obj) l_obj.setStyle("border","0px");
		$p.app.tabs.overtabid=-1;
	},
	/*
		$p.app.tabs.moduleOutAll : reset all tabs display
	*/
	moduleOutAll:function()
	{
		for (var i=0;i<tab.length;i++){
			$p.app.tabs.moduleOut(i);
		}
	},
	/*
		$p.app.tabs.getId : get tab sequence based on its ID
		input : tab ID
	*/
	getId:function(v_id)
	{
		for (var i=0;i<tab.length;i++)
		{
			if (tab[i].id==v_id) return i;
		}
		return 0;
	},
	/*
		$p.app.tabs.selectTab : select a tab based on its name
	*/
	selectTab:function(name,tabs)
	{
		this.sel = 0;
		for (var i=0;i<tabs.length;i++)
		{
			if (tabs[i].id==name)
			{
				this.sel = i;
				return;
			}
		}
	},
	/*
		$p.app.tabs.idToPos : get tab sequence ID based on its DB ID
		input : tab DB ID
		output : tab sequence ID
	*/
	idToPos:function(v_id)
	{
		if (v_id==-1) return -1;
		if (tab.length==1000) return 999;
		for (var i=0;i<tab.length;i++)
		{
			if (tab[i].id==v_id) return i;
		}
		return false;
	},
	/*
		$p.app.tabs.remove : remove a tab
	*/
	remove:function()
	{
		$p.app.pages.suppress($p.app.tabs.idToPos(this.id));
	},
	maxId:function()
	{
		var maximumId=0;
		for (var i=0;i<tab.length;i++)
		{
			if (tab[i].id>maximumId) 
				maximumId=tab[i].id;
		}
		return maximumId;
	},
	/*
		$p.tabs.detectModifiedTab : change a tab status and display a message to warn the user
		input : v_id:id of the tab
	*/
	detectModifiedTab:function(v_id)
	{
		if (tab[v_id].status==1)
			$p.app.alert.show(lg("tabAdded"));	
		if (tab[v_id].status==2)
			$p.app.alert.show(lg("tabModified"));	
			
		//update the status of the tab in the database
		$p.ajax.call('scr_changetabstatus.php',
			{
				'type':'execute',
				'variables':"new=0&tabId="+tab[v_id].id
			}
		);
		//update status in the pages tab
		tab[v_id].status=0;
	}
}
$p.app.tabs.nav={
	increment:2,
	timer:0,
	posx:0,
	movedObj:{},
	oversize:0,
	/*
		$p.app.tabs.nav.init : init tabs navigation
	*/
	init:function()
	{
		this.timer=0;
		var l_obj=$('navfloatbox');
		this.movedObj=$('navmovebox');
		//reset position to previous one (in case of re-initialization)
		this.movedObj.setStyle("left",this.posx+"px");
		
		//content size is get with image size
		var navWidth=(l_obj.offsetWidth?l_obj.offsetWidth:(l_obj.style.clip.width?l_obj.style.clip.width:0));
		var l_cntSize=($("navctlimg")).width;
		this.oversize = l_cntSize - navWidth;
		
		//hide navigators button if useless
		if (this.posx>-1) ($("leftTabNav")).setStyle("visibility","hidden");
		if (this.oversize+this.posx<=0) ($("rightTabNav")).setStyle("visibility","hidden");
	},
	/*
		$p.app.tabs.nav.left : move tabs left
	*/
	left:function()
	{
		if (this.posx<0)
		{
			this.posx+=this.increment;
			this.movedObj.setStyle("left",this.posx+"px");
			this.timer = setTimeout("$p.app.tabs.nav.left()",10);	
			($("rightTabNav")).setStyle("visibility","");
		}
		else
		{
			($("leftTabNav")).setStyle("visibility","hidden");
		}
	},
	/*
		$p.app.tabs.nav.right : move tabs right
	*/
	right:function()
	{
		if (this.posx+this.oversize>0)
		{
			this.posx-=this.increment;
			this.movedObj.setStyle("left",this.posx+"px");
			this.timer = setTimeout("$p.app.tabs.nav.right()",10);	
			($("leftTabNav")).setStyle("visibility","");
		}
		else
		{
			($("rightTabNav")).setStyle("visibility","hidden");
		}
	},
	/*
		$p.app.tabs.nav.stop : stop moving tabs
	*/
	stop:function()
	{
		clearTimer(this.timer);
	}
}


//****************************************************************************************************************************************************
//**
//**                                     PERSONALIZED PAGES
//**
//****************************************************************************************************************************************************

$p.app.pages={
	def:"N",
	/* Init the pages menu */
	initMenu:function()
	{
		$p.app.menu.options.push({"id":"portal","label":lg("yourPages"),"desc":lg("portalIconDesc"),"icon":"ico_custompage.gif","seq":20,"action":"","type":"","subOpt":new Array({"id":"pwidget","label":"lblModules","seq":0,"action":"$p.app.menu.widget.build()","pages":""},{"id":"poptions","label":"options","seq":1,"action":"$p.app.menu.config.build()","pages":""}),"pages":new Array()});
	},
	/*
		$p.app.pages.change : open a page
		inputs
			v_prof : tab ID
			v_action : action to launch on page opening
	*/
	change:function(v_prof,v_action)
	{
		//hide the current page 
		$p.app.pages.hide();
		$p.app.pages.closeAllDiv();
		$p.show("modules","block");
		
		//select the new tab
		$p.app.tabs.selId=v_prof;
		if (tab.length==0) return;
		if (v_prof!=indef) $p.app.tabs.sel=$p.app.tabs.getId(v_prof);
		//if ($p.app.tabs.sel==indef || $p.app.tabs.sel==-1 || $p.app.tabs.sel>tab.length) $p.app.tabs.sel=$p.app.tabs.getId(v_prof);
		v_prof=tab[$p.app.tabs.sel].id; //double check, in case the profile save in cookie is linked to a non existent tab (switch from an account to another)

		//set the current page as default
		$p.app.setState("$p.app.pages.change("+v_prof+")");
		//$p.app.pages.clean($("modules")); //suppressed with 1.4 because no tabs erase if other items open => hide

		//load page only if not already loaded
		if (tab[$p.app.tabs.sel].isLoaded!=indef)
		{
			if (tab[$p.app.tabs.sel].style!=$p.app.style) $p.navigator.setActiveStyleSheet(tab[$p.app.tabs.sel].style);
			//if ($p.app.menu.config.oldStyle!=tab[$p.app.tabs.sel].style) setActiveStyleSheet(tab[$p.app.tabs.sel].style);
			$p.show("modules"+tab[$p.app.tabs.sel].id,"block");
		}
		else
			$p.app.pages.open(v_action);
					
		if ($p.app.user.id>0) $p.app.pages.setCurrent(v_prof);
		//activate menus
		$p.app.menu.widget.locked=false;
		$p.app.newEnv(($p.app.user.id==0)?'portal_page_anon':'portal_page_conn');

		//define widget place
		$p.app.widgets.place();
		$p.app.pages.computeFooterPosition();
	},
	redirect:function(v_url,v_id)
    {
        $p.show("footer","none");
		$p.app.banner.option.hide();
		$p.show("box","none");
		$p.app.pages.closeAllDiv();
		$p.show("modules","block");
		$p.app.popup.hide();
		$p.app.newEnv('portal_frame');

		var l_tab=$p.app.tabs.idToPos(v_id);

        window.open(v_url);

		//lock menus
		$p.app.menu.widget.locked=true;
		//$p.app.tabs.selId=tab[$p.app.tabs.sel].id;
		$p.app.tabs.selId=v_id;
		$p.app.pages.computeFooterPosition();
		//apply style
		if (l_tab==$p.app.tabs.sel && ($p.app.style==0 || $p.app.style!=tab[l_tab].style)) $p.navigator.setActiveStyleSheet(tab[l_tab].style);
    },    
    
    
	/*
		$p.app.pages.openCreatedTab : open a new tab
		inputs :
			v_prof : tab ID
	*/
	openCreatedTab:function(v_prof)
	{
		//in anonymous portail
		if ($p.app.user.id==0)
		{
			var lastTabNumber = $p.app.tabs.maxId()+1;
			var lastTabSeq = tab[tab.length-1].seq+1;
			
			$p.app.pages.setCurrent(0);
			$p.app.pages.hide();
			
			//if the user created a new empty page
			if (v_prof==0)
			{	
				tab.push(new $p.app.tabs.object(lastTabNumber,lg("lblNewpage"),1,"$p.app.pages.change("+lastTabNumber+")",0,lastTabSeq,1,1,"",0,0,"",0));
				$p.app.tabs.sel=tab.length-1;
				tab[$p.app.tabs.sel].isLoaded=true;
				$p.app.pages.init();	
				v_prof=tab.length;
                return false;
			}
			//if the user add a new HTML page v_prof is the url to open in new page
			else
			{
				tab.push(new $p.app.tabs.object(lastTabNumber,lg("lblNewpage"),2,"$p.app.pages.frame('"+v_prof+"',"+lastTabNumber+")",0,lastTabSeq,1,1,"",0,0,v_prof,0));
				$p.app.tabs.sel=tab.length-1;	
				$p.app.pages.init();
				$p.app.pages.frame(v_prof,lastTabNumber);
				v_prof=tab.length;
				return false;
			}
		}
		//in connected mode
		else
		{
			if (v_prof!=$p.app.tabs.selId)
			{
				$p.app.pages.setCurrent(v_prof);
				$p.app.pages.hide();
			}
			$p.app.tabs.sel=999;
			$p.app.loadTabs(v_prof,indef,"edittab");	
			return false;
		}	
		$p.app.menu.open(false,"pwidget");
		$p.app.pages.change(v_prof,true);
	},
	/*
		$p.app.pages.open : load page information
	*/
	open:function(v_action)
	{
		tab[$p.app.tabs.sel].isLoaded=false;
		//	$p.app.startLoading(); suppressed on 1.4.2, no need when switch from a page to another
		if ($("modules"+tab[$p.app.tabs.sel].id)!=null)
		{
			$p.app.pages.clean($("modules"+tab[$p.app.tabs.sel].id));
			$p.show("modules"+tab[$p.app.tabs.sel].id,"block");
		}
		
		if ($p.app.user.id==0 || tab[$p.app.tabs.sel].id==0 || tab[$p.app.tabs.sel].id>=1000000000)
			$p.app.pages.load("selections/page"+$p.app.tabs.selId+".xml?nocache="+rand,indef,indef,v_action);
		else if ($p.app.tabs.selId!=0)
			$p.app.pages.load("../portal/xmlmodules.php","id="+$p.app.tabs.selId,indef,v_action);
	},
	/*
		$p.app.pages.summary: summary of the page articles
	*/
	summary:function(v_div)
	{
		var l_s='';
		l_s+='<h2>'+$p.img('ico_rss.gif',16,16,'','imgmid')+' '+lg('latestArticlesOfMyPages')+'</h2>';
		l_s+='<div id="summarypagesdiv"></div>';
		$p.print(v_div,l_s);

		$p.app.pages.summaryLoad(0);
	},
	initSummary:function()
	{
		$p.plugin.open();
		$p.plugin.init(lg("yourPages"),'info');
		$p.plugin.content('<div id="plugindiv"></div>');
		$p.app.pages.summary('plugindiv');
	},
	summaryLoad:function(v_page,v_filter)
	{
		if (v_filter==indef) v_filter=0;
		$p.ajax.call('xmlpages_latestnews.php?p='+v_page+'&f='+v_filter,
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.pages.summaryDisplay,
					'variables':
					{
						'page':v_page,
						'filter':v_filter
					}
				}
			}
		);
	},
	summaryDisplay:function(response,vars)
	{
		var l_s='<br />';
		l_s+=(vars['filter']==0?lg('all'):'<a href="#" onclick="$p.app.pages.summaryLoad(0,0);return false;">'+lg('all')+'</a>')+' &nbsp; ';
		for (var i=0;i<tab.length;i++)
		{
			if (tab[i].type==1)
			{
				if (tab[i].id==vars['filter'])
				{
					l_s+=tab[i].label+'</a> &nbsp; ';
				}
				else
				{
					l_s+='<a href="#" onclick="$p.app.pages.summaryLoad(0,'+tab[i].id+');return false;">'+tab[i].label+'</a> &nbsp; ';
				}
			}
		}
		l_s+='<br /><br /><br /><div id="lastportalnews">'
			+'<table>';
		var l_result=response.getElementsByTagName('article');
				
		if(l_result.length==0)
			l_s+='<h2>'+"Aucun articles"+'</h2>';

		for (var i=0;i<l_result.length;i++)
		{
			var l_id=$p.ajax.getVal(l_result[i],'id','int',false,0);
			l_s+='<tr>'
				+'<td valign="top">'
				+$p.img('../modules/pictures/rss'+$p.ajax.getVal(l_result[i],'feedid','int',false,0)+'.ico',16,16,'','imgmid')
				+'</td>'
				+'<td valign="top">'
				+'<a href="'+$p.ajax.getVal(l_result[i],'link','str',false,'#')+'" target="_blank" onclick="$p.app.widgets.rss.saveReadStatus('+l_id+');">'+$p.ajax.getVal(l_result[i],'title','str',false,'???')+'</a>'
				+'<br /><span color="#c6c3c6">'+$p.ajax.getVal(l_result[i],'feed','str',false,'???')+'<span>'
				+'</td>'
				+'</tr>';
		}
		var l_max=response.getElementsByTagName('total');
		var max=$p.ajax.getVal(l_max[0],'max','str',false,'#');
		l_s+='</table>'
			+'</div>'
			+'<div style="text-align: right">';
		if (vars['page']!=0) l_s+='<a href="#" onclick=\'$p.app.pages.summaryLoad('+(vars['page']-1)+','+vars['filter']+')\'>'+$p.img('ico_previous2.gif',11,12,lg('previous'),"imgmid")+' '+lg('previous')+'</a> &nbsp; ';
		if (l_result.length==10&&(max!=(vars['page']+1)*10))l_s+='<a href="#" onclick=\'$p.app.pages.summaryLoad('+(vars['page']+1)+','+vars['filter']+')\'>'+lg('next')+' '+$p.img('ico_next2.gif',11,12,lg('next'),"imgmid")+'</a>';
		l_s+='</div>';
		$p.print('summarypagesdiv',l_s);
	},
	/*
		$p.app.pages.setCurrent : set current tab as the default one
		input : tab ID
	*/
	setCurrent:function(v_prof)
	{
		v_prof=v_prof.toInt();
		$p.app.tabs.selId=v_prof;
		$p.cookie.write("currentpage="+v_prof);
	},
	/*
		$p.app.pages.loadOnStart : load the pages defined by user on startup
	*/
	loadOnStart:function()
	{
		for (var i=0;i<tab.length;i++)
		{
			if (tab[i].loadstart==1 && tab[i].id!=$p.app.tabs.selId && tab[i].isLoaded==indef) {$p.app.pages.load("xmlmodules.php","id="+tab[i].id,i);}
		}
	},
	/*
		$p.app.pages.newPortal : open new portal menu
	*/
	newPortal:function()
	{

		var l_s=''
			+'<br />'
			+$p.img('ico_blankpage.gif',16,16,'','imgmid')+' '
			+'<a href="#" onclick="return $p.app.pages.newEmpty();"><b>'+lg('lblNewEmpty')+'</b></a><br />';

		if (__useSharing)
		{
			l_s+='<br />'+$p.img('ico_search.gif',16,16,'','imgmid')+'<b>'+lg('lblNewExample')+'</b><br />'
				+'<form name="f" onsubmit="return $p.app.pages.search(this)">'
				+'<br /><input type="text" id="searchsharedpage" name="keywords" style="width: 300px" onkeyup=\'$p.tags.autocompletion.get("searchsharedpage")\' onFocus=\'$p.navigator.inputFocus(this,"'+lg("keywords")+'")\' onBlur=\'$p.navigator.inputLostFocus(this,"'+lg("keywords")+'");$p.tags.autocompletion.hide();\' value="'+lg('keywords')+'" style="color: #aaaaaa" />  '
				+'<input type="submit" value="'+lg("search")+'" /> '+tooltip('helpTags')
				+'</form>'
				+'<br /><div id="listPagesForKeywords"></div>';
		}

		l_s+='<br />'+$p.img('ico_html.gif',16,16)+'<b>'+lg('newPageFromUrl')+'</b><br />'
			+'<form name="f2" onsubmit="return $p.app.pages.newHtmlPage(this.url.value)">'
			+'<input type="text" name="url" value="http://" /> <input type="submit" value="'+lg("ok")+'" />'
			+'</form>';
		
		if (__displayPublicPages && $p.app.user.id>0) l_s+='<br />'+$p.img('ico_menu_star.gif',16,16,'','imgmid')+'<b>'+lg('pageSelection')+'</b><br /><div id="publicpages" style="padding: 4px;">Loading ...</div><br />';
	
		$p.app.popup.show(l_s,510,indef,$p.img('ico_newportal.gif',16,16,'','imgmid')+' '+lg('lblNewTit'));

		if (__displayPublicPages && $p.app.user.id>0) $p.app.pages.loadPublicPages();
	},

	loadPublicPages:function()
	{
		$p.ajax.call('xmlpublicpages.php',
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.pages.displayPublicPages
				}
			}
		);
	},
	displayPublicPages:function(response,vars)
	{
		l_result=response.getElementsByTagName("page"),l_s="";
		
		for (var i=0;i<l_result.length;i++)
		{
			l_s+="<a href='#' onclick='$p.app.pages.loadPublicPage("+$p.ajax.getVal(l_result[i],"id","int",false,0)+");return false;'>"+$p.ajax.getVal(l_result[i],"name","str",false,"")+"</a><br />";
			var l_desc=$p.ajax.getVal(l_result[i],"desc","str",false,"");
			if (l_desc!='') l_s+="<i>"+l_desc+"</i><br />";
		}

		$p.print("publicpages",l_s);
	},
	loadPublicPage:function(v_id)
	{
		$p.ajax.call('xmlpublicpage.php?id='+v_id,
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.pages.createFromXml,
					'variables':
					{
						'reload':false
					}
				}
				
			}
		);
	},
	/*
		$p.app.pages.newEmpty : create an empty page
	*/
	newEmpty:function(v_name)
	{
		var l_style=$p.app.tabs.sel==-1?1:tab[$p.app.tabs.sel].style;
		if (v_name==indef) v_name=lg('lblNewpage');	
		if ($p.app.user.id==0)
			$p.app.pages.openCreatedTab(0);
		else
		{		
			$p.ajax.call('scr_createportal.php',
				{
					'type':'execute',
					'variables':'w=3&s='+l_style+'&n='+v_name+'&t=0&nb=15&a=Y',
					'alarm':false,
					'forceExecution':true,
					'callback':
					{
						'function':$p.app.pages.openCreatedTab
					}
				}
			);
		}
		return false;
	},
	/*
		$p.app.pages.newHtmlPage : create a new tab with html content in frame
		input : html page URL
	*/
	newHtmlPage:function(v_url,v_name)
	{
		var l_style=$p.app.tabs.sel==-1?1:tab[$p.app.tabs.sel].style;
		if (v_name==indef) v_name=lg('lblNewpage');
		
		if ($p.app.user.id==0)
			$p.app.pages.openCreatedTab(v_url);
		else
		{
			$p.ajax.call('scr_createportal.php',
				{
					'type':'execute',
					'variables':"w=1&s="+l_style+"&n="+v_name+"&t=0&ty=2&p="+$p.string.esc(v_url)+"&a=Y",
					'alarm':false,
					'forceExecution':true,
					'callback':
					{
						'function':$p.app.pages.openCreatedTab
					}
				}
			);
		}
		return false;
	},
	/*
		$p.app.pages.suppress : remove a tab
		inputs
			v_tab : tab sequence ID
			v_selectFirst (boolean) : is the first tab selected after removal ? 
	*/
	suppress:function(v_tab,v_selectFirst)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		if (v_selectFirst==indef) v_selectFirst=true;
		if (__blockedModulePreventPageRemoval)
		{
			//check if module is locked in the portal => no suppression
			for (var i=0;i<tab[v_tab].module.length;i++)
			{
				if (tab[v_tab].module[i].blocked)
				{
					$p.app.alert.show(lg("msgNotRemovable"));
					return false;
				}
			}
		}
		// Suppress a portal
		response=confirm(lg("msgSuppressConfirm"));
		if (response==1)
		{
			$p.ajax.call('scr_suppersonal.php',
				{
					'type':'execute',
					'variables':"id="+tab[v_tab].id+"&seq="+tab[v_tab].seq
				}
			);
			
			//update tabs sequence
			for (var i=0;i<tab.length;i++)
			{
				if (i>v_tab) tab[i].seq--;
			}
			//delete the tab
			if (tab[v_tab].isLoaded) ($("modules")).removeChild(tab[v_tab].root);
			tab.splice(v_tab,1);
			//refresh tab and choose the first tab
			$p.app.tabs.create(0);
			if (v_selectFirst==true)
			{
				//activate the first tab
				if (tab.length>=1)
				{
					eval(tab[0].fct);
				}
				else
				{
					$p.app.tabs.sel=-1;
					$p.app.pages.closeAllDiv();
				}
			}
		}
		return false;
	},
	/*
		$p.app.pages.show : display a saved portal
	*/
	show:function(v_id)
	{
		$p.app.widgets.close();
		hideBox();
		$p.app.pages.load("../cache/portal_"+v_id+".xml");
		$p.app.startLoading();
	},
	/*
		$p.app.pages.hide : hide the current tab
	*/
	hide:function()
	{
		//hide the pages element before swiching to another page
		if ($p.app.tabs.sel!=-1 && $p.app.tabs.sel!=999)
		{
			$p.show("modules"+tab[$p.app.tabs.sel].id,"none");
			tab[$p.app.tabs.sel].showType=0;
			$p.app.widgets.close();
			//$p.app.menu.config.hide();
			$p.app.banner.option.hide();
		}
		hideBox();
	},
	isPageExisting:function(v_sess){
		if (v_sess!=indef)
		{
			if (v_sess=="admin")
			{
				$p.navigator.openLink("../admin/index.php");
			}
			else
			{
				$p.ajax.call('xmlpages.php',
					{
						'type':'load',
						'callback':
						{
							'function':$p.app.pages.createFromXml,
							'variables':
							{
								'session':v_sess,
								'reload':true
							}
						}
					}
				);
			}
		}
	},
	/*
		$p.app.pages.closeAllDiv : hide all opened menu, message box, plugins, banners, ....)
	*/
	closeAllDiv:function()
	{
		$p.app.pages.hideFrame();
		if (__useSharing)
		{
			if (p_msg.shown) p_msg.hide();
			if (p_search.shown) p_search.hide();
		}
		if (__useArchive)
		{
			if (p_article.shown) p_article.hide();
		}
		if (p_network.shown) p_network.hide();
		if ($p.app.widgets.factory.shown) $p.app.widgets.factory.hide();
		if ($p.app.banner.option.shown) $p.app.banner.option.hide();
		if ($p.plugin.shown) $p.plugin.hide();

		$p.show("modules","none");
		$p.show("newmod","none");
		$p.app.widgets.rss.reader.hide();
		$p.show("magic","none");//do not suppress !
	},
	/*
		$p.app.pages.search : search a public page
		inputs : form containing searched string
	*/
	search:function(v_form)
	{
		$p.app.wait("listPagesForKeywords");	
		var l_keywords=$p.string.formatForSearch($p.tags.formatList(v_form.keywords.value));
		if (l_keywords!="")
		{
			$p.ajax.call('xmlpage_search.php?search='+l_keywords,
				{
					'type':'load',
					'callback':
					{
						'function':$p.app.pages.searchResults,
						'variables':
						{
							'keywords':l_keywords
						}
					}
				}
			);
		}
		
		return false;
	},
	/*
		$p.app.pages.searchResults : display search results
		inputs : xml response
	*/
	searchResults:function(response,vars)
	{
		var l_s="",
		l_result=response.getElementsByTagName("portal");
		if (l_result.length==0)
		{
			l_s+=lg("noResultForThisSearch");
		}
		else
		{
			l_s+=lg("lblResultsFor")+" '"+vars['keywords']+"' :";
			l_s+="<div class='dirdiva' style='height:100px;width:80%;padding:8px;'>";
			for (var i=0;i<l_result.length;i++)
			{
				l_s+="<a href='#' onclick=\"$p.app.pages.loadSharedPortal("+$p.ajax.getVal(l_result[i],"id","int",false,0)+",1,indef,true)\">"+$p.ajax.getVal(l_result[i],"name","str",false,"--")+"</a><br />";
			}
			l_s+="</div>";
		}
		$p.print("listPagesForKeywords",l_s);
	},
	/*
		$p.app.pages.loadSharedPortal : load public page overview (replace newExample)
		inputs:
			v_id : page id
			v_type : page type (public / private)
			v_check : check string for private pages
	*/
	loadSharedPortal:function(v_id,v_type,v_check,v_isOverview,v_reload)
	{
		if (v_type!=indef && v_type==2)
		{
			var l_url='xmlfriendportal.php?id='+v_id+'&chk='+v_check;
		}
		else
		{
			var l_url='xmlpage_detail.php?id='+v_id;
		}
		$p.ajax.call(l_url,
			{
				'type':'load',
				'callback':
				{
					'function':(v_isOverview?$p.app.pages.displayOverview:$p.app.pages.createFromXml),
					'variables':
					{
						'pageid':v_id,
						'type':v_type,
						'check':v_check,
						'reload':v_reload
					}
				}
			}
		);
	},
	/*
		$p.app.pages.displayOverview : display public page overview
		inputs : xml response
	*/
	displayOverview:function(response,vars)
	{
		$p.app.popup.hide();

		var l_tit=$p.ajax.getVal(response,"name","str",false,lg("lblNoTitle"));
		var l_s=''
			+'<table cellpadding="0" cellspacing="1" border="0" width="100%">'
			+'<tr>'
			+'<td valign="top">'
			+lg("lblDescription")
			+"	 :<br />"+$p.ajax.getVal(response,"description","str",false,lg("lblNoDescription"));

		if (vars['type']==0)
		{
			l_s+='<br /><br />'
				+'<center>'
				+'<input class="btnbig" type="button" value="'+lg("lblUseExample")+'" onclick="$p.app.pages.show('+vars['pageid']+')" />'
				+'</center>';
		}
		else
		{
			l_s+='<br /><br />'
				+'<center>'
				+'<input class="btnbig" type="button" value="'+lg('lblCreateFromExample')+'" onclick=\'$p.app.pages.loadSharedPortal('+vars['pageid']+','+vars['type']+',"'+vars['check']+'",false)\' />'
				+'</center>';
		}
		
		l_s+='</td>'
			+'<td valign="top">'
			+lg("lblModules")
			+'	 :<br />';
		
		if (response.getElementsByTagName("module")[0])
		{
			var l_i=0;
			l_s+="<table cellpadding='0' cellspacing='0'>";
			while (response.getElementsByTagName("module")[l_i])
			{
				var l_result=response.getElementsByTagName("module")[l_i];
				var l_id=$p.ajax.getVal(l_result,"id","int",false,0);
				l_s+='<tr>'
					+'<td>'
					+$p.img("../modules/pictures/box0_"+l_id+".ico",16,16,"","imgmid")
					+'</td>'
					+'<td>'
					+'<a href="#" onclick=\'return $p.app.widgets.open('+l_id+',"'+$p.ajax.getVal(l_result,"vars","str",false,"")+'")\'>'
					+$p.ajax.getVal(l_result,"name","str",false,"-")
					+'</td>'
					+'</tr>';
	
				l_i++;
			}
			l_s+='</table>';
		}
		else
		{
			l_s+=lg("lblNoModule");
		}
		
		if (showNewMod) $p.app.widgets.close();
		$p.show("newmod","block");
		$p.print("newmod",box(0,l_tit,"$p.app.widgets.close()",l_s));
	},
	/*
		$p.app.pages.createFromXml : add a new tab based on XML input
		input
			response : xml object
	*/
	createFromXml:function(response,vars)
	{
		$p.app.popup.hide();

		//if page tag, redirect to this page
		if (response.getElementsByTagName("page")[0])
		{
			$p.navigator.openLink("../portal/"+$p.ajax.getVal(response.getElementsByTagName("page")[0],"url","str",false,""));
			return;
		}
		v_reload=(vars['reload']==indef?false:vars['reload']);
		// Get modules from XML file for creation of a new portal
		var l_result=response.getElementsByTagName("portal");
		// Get modules from XML file for creation of a new portal
		if (l_result.length!=0)
		{
			for (var j=0;j<l_result.length;j++)
			{
				var i=0,l_s="",l_x=100,l_y=200;
				var l_name=$p.ajax.getVal(l_result[j],"name","str",false,lg("lblNewpage"));
				var l_style=$p.ajax.getVal(l_result[j],"style","int",false,1);
				var l_nbcol=$p.ajax.getVal(l_result[j],"nbcol","int",false,3);
				var l_mode=$p.ajax.getVal(l_result[j],"showtype","int",false,0);
				var l_npnb=$p.ajax.getVal(l_result[j],"npnb","int",false,25);
				var l_type=$p.ajax.getVal(l_result[j],"type","int",false,1);
				var l_param=$p.string.esc($p.ajax.getVal(l_result[j],"param","str",false,""));
				var l_moduleAlign=$p.ajax.getVal(l_result[j],"modulealign","str",false,"Y");

				while (l_result[j].getElementsByTagName("module")[i])
				{
					var l_result2=l_result[j].getElementsByTagName("module")[i];
					l_s+="&id"+i+"="+$p.ajax.getVal(l_result2,"id","int",false,0);
					l_s+="&col"+i+"="+$p.ajax.getVal(l_result2,"col","int",false,1);
					l_s+="&pos"+i+"="+$p.ajax.getVal(l_result2,"pos","int",false,i);
					l_s+="&posj"+i+"="+$p.ajax.getVal(l_result2,"posj","int",false,i);
					l_s+="&x"+i+"="+$p.ajax.getVal(l_result2,"x","int",false,l_x);
					l_s+="&y"+i+"="+$p.ajax.getVal(l_result2,"y","int",false,l_y);
					l_s+="&var"+i+"="+$p.string.esc($p.ajax.getVal(l_result2,"vars","str",false,""));
					l_s+="&blocked"+i+"="+$p.ajax.getVal(l_result2,"blocked","int",false,0);
					l_s+="&minimized"+i+"="+$p.ajax.getVal(l_result2,"minimized","int",false,0);
					i++;l_x+=30;l_y+=30;
				}
				
				$p.ajax.call('scr_createportal.php',
					{
						'type':'execute',
						'variables':"w="+l_nbcol+"&s="+l_style+"&a="+l_moduleAlign+"&n="+$p.string.esc(l_name.substr(0,29))+"&t="+l_mode+"&nb=25&ty="+l_type+"&p="+l_param+"&sess="+vars['session']+l_s,
						'alarm':false,
						'forceExecution':true,
						'callback':
						{
							'function':(v_reload?openPage:$p.app.pages.openCreatedTab)
						},
						'priority':2,
						'asynchron':false
					}
				);
			}
		}
	},
	select:function(v_prof)
	{
		$p.app.pages.change(v_prof);
	},
	/*
		$p.app.pages.displayLockWindow : display connection box for a secured page
	*/
	displayLockWindow:function()
	{
		hideAllBox();
		$p.app.widgets.rss.reader.close();

        var l_s='\
       <div class="protectbox">\
		<div id="loginscreen">\
			<div style="float: left;width: 150px;">\
                <h2 id="lsconnectTitle">'+lg('lblConnect')+'&gt;</h2>\
                <div id="msg_conn">&nbsp;</div>\
                <p><a class="w" id="ls_missingpass" onclick="return $p.app.connection.buildmissingPasswordForm();" href="missingpassword.php" target="_blank">'+lg('lblMissingPassword')+'</a></p>\
			</div>\
			<div id="displayPart">\
                <form name="identif" method="post" onsubmit="return $p.app.pages.unlock(this);">\
                    <strong><label id="ls_lbl_password" for="password">'+lg('lblPassword')+'</label></strong><br />\
                    <input type="password" name="pass" class="thinbox" maxlength="32" style="width: 250px;" /><br /><br />\
                    <input type="checkbox" id="ls_lbl_autoconnect" name="autoconn" />'+lg('lblAutoConnection')+'<br /><br />\
                    <input type="submit" id="ls_btn_connect" class="btn" value="'+lg('lblConnect');+'" />\
                </form>\
			<br/><br/>\
            </div>\
        </div>\
        </div>\
            ';
            
        $p.print("modules"+tab[$p.app.tabs.sel].id,l_s);
		
		$p.show("modules","block");
		document.forms["identif"].pass.focus();
		$p.navigator.setActiveStyleSheet(1);
	},
	/*
		$p.app.pages.unlock : unlock secured page
		input : form object where password is typed
	*/
	unlock:function(v_form)
	{
		$p.ajax.call('scr_unlock.php',
			{
				'type':'execute',
				'variables':"id="+$p.app.tabs.selId+"&pass="+v_form.pass.value,
				'alarm':true,
				'forceExecution':false,
				'callback':
				{
					'function':$p.app.pages.open
				}
			}
		);
		return false;
	},
	/*
		$p.app.pages.lock : lock a secured page
	*/
	lock:function()
	{
		$p.app.counter.activityStep=0;
		$p.ajax.call('scr_protect.php',
			{
				'type':'execute',
				'variables':"",
				'alarm':false,
				'forceExecution':false,
				'callback':
				{
					'function':$p.app.pages.open
				}
			}
		);
	},
	/*
		$p.app.pages.load : load personalized page content information
		inputs
			v_page : xml file containing page information
			v_id : tab ID
			v_tab : tab sequence id
			v_action : action to launch on tab opening
	*/
	load:function(v_page,v_id,v_tab,v_action)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		if (v_tab==indef) v_tab=$p.app.tabs.idToPos($p.app.tabs.selId);
		if (v_tab==indef || !v_tab) v_tab=0;
		tab[v_tab].module.length=0;
		tab[v_tab].isLoaded=false;
		$p.app.widgets.rss.init(v_tab);
		if (!v_id) v_id="";
		var l_method=(v_id=="")?"GET":"POST";

		//create modules container div
		$p.app.pages.defineWidgetContainer(v_tab);

		$p.ajax.call(v_page,
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.pages.treat,
					'variables':
					{
						'tab':v_tab,
						'action':v_action
					}
				},
				'source':'xml',
				'variables':v_id,
				'method':l_method,
				'priority':1
			}
		);
	},
	/*
		$p.app.pages.treat : treat opened page information
		inputs
			response : xml object containing page information
	*/
	treat:function(response,vars)
	{
		var l_tab=vars['tab'];
		var l_action=vars['action'];
		var i=0,result;
		//if page is not existing
		if (response.getElementsByTagName("nopage")[0]) openPage(tab[0].id);
		//if not yet install
		if (response.getElementsByTagName("install")[0]) $p.navigator.openLink("../portal/installrequested.html");
		//if connected mode
		//if (response.getElementsByTagName("empty")[0]) $p.navigator.openLink("../portal/login.php");
		//var l_type=$p.ajax.getVal(response,"type","int",false,1);
		var l_type=tab[l_tab].type;
		if (l_type==1)
		{
			//if page locked
			if ($p.ajax.getVal(response,"pagelocked","int",false,0)==1)
			{
				$p.app.popup.hide();
				tab[l_tab].locked=true;
				$p.app.newEnv('locked');
				if (l_tab==$p.app.tabs.sel)  $p.app.pages.displayLockWindow();
			}
			else
			{
				$p.app.newEnv(($p.app.user.id==0)?'portal_page_anon':'portal_page_conn');
				tab[l_tab].locked=false;
				tab[l_tab].colnb=$p.ajax.getVal(response,"nbcol","int",false,tab[l_tab].colnb);
				tab[l_tab].showType=$p.ajax.getVal(response,"showtype","int",false,tab[l_tab].showType);
				tab[l_tab].newspapernb=$p.ajax.getVal(response,"npnb","int",false,tab[l_tab].newspapernb);
				tab[l_tab].controls=$p.ajax.getVal(response,"ctrl","str",false,tab[l_tab].controls);
				tab[l_tab].moduleAlign=($p.ajax.getVal(response,"modulealign","str",false,(__moduleAlignDefault?"Y":"N"))=="Y"?true:false);
				//var oldstyle=tab[$p.app.tabs.sel].style;
				tab[l_tab].style=$p.ajax.getVal(response,"style","int",false,1);
				//jspass=$p.ajax.getVal(response,"usepass","str",false,"");
                tab[l_tab].lock=$p.ajax.getVal(response,"usepass","str",false,0);
				$p.app.banner.info.requested=$p.ajax.getVal(response,"advise","str",false,$p.app.banner.info.requested);
				tab[l_tab].usereader=__usereader?$p.ajax.getVal(response,"usereader","int",false,tab[l_tab].usereader):0;
				$p.app.pages.def=$p.ajax.getVal(response,"default","str",false,$p.app.pages.def);
				while (response.getElementsByTagName("module")[i])
				{
					result=response.getElementsByTagName("module")[i];
					tab[l_tab].module[i]=new $p.app.widgets.object($p.ajax.getVal(result,"col","int",true,0),$p.ajax.getVal(result,"pos","int",false,0),$p.ajax.getVal(result,"posj","int",false,0),$p.ajax.getVal(result,"height","int",false,100),$p.ajax.getVal(result,"id","int",false,0),$p.ajax.getVal(result,"site","str",false,"/"),$p.ajax.getVal(result,"name","str",false,"--"),$p.ajax.getVal(result,"vars","str",false,""),$p.ajax.getVal(result,"minmodsize","int",false,180),$p.ajax.getVal(result,"updmodsize","int",false,1),$p.ajax.getVal(result,"minmodsize","int",false,180),$p.ajax.getVal(result,"url","str",false,""),$p.ajax.getVal(result,"x","int",false,0),$p.ajax.getVal(result,"y","int",false,0),$p.ajax.getVal(result,"uniq","int",false,0),$p.ajax.getVal(result,"format","str",false,"I"),$p.ajax.getVal(result,"nbvars","int",false,0),tab[l_tab].id,$p.ajax.getVal(result,"blocked","int",false,0),$p.ajax.getVal(result,"minimized","int",false,0),$p.ajax.getVal(result,"usereader","int",false,1),$p.ajax.getVal(result,"autorefresh","int",false,0));
					i++;
				}
				$p.app.stats();
		
			}
		}
		else if (l_type==2 && l_tab==$p.app.tabs.sel)
		{
			eval(tab[l_tab].fct);
			$p.app.checkLoading(false);
		}
		else if (l_type==3 && l_tab==$p.app.tabs.sel)
		{
			eval($p.ajax.getVal(response,"param","str",false,""));
			$p.app.checkLoading(false);
		}
		//change style css if the one to show is not the one already selected
		if (l_tab==$p.app.tabs.sel && ($p.app.style==0 || $p.app.style!=tab[l_tab].style)) $p.navigator.setActiveStyleSheet(tab[l_tab].style);
		//$p.app.menu.config.oldStyle=tab[$p.app.tabs.sel].style;
		$p.app.pages.init(l_tab);

		$p.app.pages.computeFooterPosition();
				
		if (l_action!=indef && l_action!="")
		{
			if (l_action=="edittab") $p.app.tabs.edit($p.app.tabs.sel);
		}
	},
	/*
		$p.app.pages.init : initialize personalized page 
		input : tab sequence ID
	*/
	init:function(v_tab)
	{
		//init the page
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		if (v_tab==$p.app.tabs.sel){ //only if initializing active tab
			$p.app.startLoading();
			if (tab[v_tab].showType==1) $p.app.widgets.rss.reader.close();
			$p.show("modules","block");
			if ($p.app.banner.option.shown) $p.show("advise","block");
		}

		$p.app.pages.defineWidgetContainer(v_tab);
		//create cols if modules are aligned in columns
		if (tab[v_tab].moduleAlign) $p.app.pages.columns.createAll(v_tab);
	
		$p.app.widgets.createAll(v_tab);	
		
		$p.app.widgets.enableMoving(v_tab);

		if (v_tab==$p.app.tabs.sel)//only if initializing active tab
		{
			$p.app.checkLoading(false);
			$p.cookie.check();
			$p.app.mainMenu();
		}
		//prevent cols to be wider than 400px
//		if (p_area.showType==0){for (var i=1;i<=$p.app.pages.columns.nb;i++){cols[i].style.width="400px";};}else {cols[1].style.width="400px";}
	},
	/*
		$p.app.pages.clean : remove all the objects from the personalized page
		input : object to be cleaned
	*/
	clean:function(v_mainObj)
	{
		var l_obj=null;
		//suppress all the descendant nodes of mainObj
		if (v_mainObj!=null)
		{
			while (v_mainObj.hasChildNodes())
			{
				l_obj=v_mainObj;
				while (l_obj.hasChildNodes()) l_obj=l_obj.firstChild;
				l_obj=l_obj.parentNode;
				l_obj.removeChild(l_obj.firstChild);
			}
		}
	},
	/*
		$p.app.pages.frame : open a framed page
		inputs
			v_url : url of the page that is opened in the frame
			v_id : tab ID
	*/
	frame:function(v_url,v_id)
	{
		$p.show("footer","none");
		$p.app.banner.option.hide();
		$p.show("box","none");
		$p.app.pages.closeAllDiv();
		$p.show("modules","block");
		$p.app.stopLoading();
		$p.app.newEnv('portal_frame');

		var l_tab=$p.app.tabs.idToPos(v_id);
//		if (l_tab!=$p.app.tabs.sel)  (tab[l_tab].root).setStyle("display","none");
	
		if (tab[l_tab].isLoaded)
			$p.show("modules"+v_id,"block");
		else
		{
			// frame height calculation
			var l_endPosition=Window.getHeight()-15;
			var l_startPosition=$p.getPos($p.get("modules"),"Top");

			if ($("modules"+v_id)==null)
			{
				tab[l_tab].root=new Element('div', {'id': "modules"+v_id} );
				($("modules")).appendChild(tab[l_tab].root);
			}
			
			var l_s="<iframe id='pagefrm"+v_id+"' src='"+v_url+"' frameborder='no' marginwidth='0' marginheight='0' scrolling='auto' style='height:"+(l_endPosition-l_startPosition)+"px;width:100%;z-index:auto;' onload='$p.adjustFrameHeight(this);'></iframe>";
			$p.print("modules"+v_id,l_s);

			tab[l_tab].isLoaded=true;
			$p.app.tabs.create(l_tab);
		}

		//lock menus
		$p.app.menu.widget.locked=true;
		//$p.app.tabs.selId=tab[$p.app.tabs.sel].id;
		$p.app.tabs.selId=v_id;
		$p.app.pages.computeFooterPosition();
		//apply style
		if (l_tab==$p.app.tabs.sel && ($p.app.style==0 || $p.app.style!=tab[l_tab].style)) $p.navigator.setActiveStyleSheet(tab[l_tab].style);
	},
	/*
		$p.app.pages.hideFrame :close a framed page
	*/
	hideFrame:function()
	{
		$p.show("footer","block");
	},
	/*
		$p.app.pages.computeSizeAndResize : compute page size based on widgets and resize it
		input : tab sequence ID
	*/
	computeSizeAndResize:function(v_tab)
	{
		if (tab[v_tab].moduleAlign)
		{
			var l_colWidth=[];
			for (var i=0;i<tab[v_tab].module.length;i++)
			{
				if (l_colWidth[tab[v_tab].module[i].newcol]==indef || tab[v_tab].module[i].minModSize>l_colWidth[tab[v_tab].module[i].newcol]) l_colWidth[tab[v_tab].module[i].newcol]=tab[v_tab].module[i].minModSize;
			}
			for (var i=0;i<tab[v_tab].module.length;i++)
			{
				tab[v_tab].module[i].hide();
			}
			var l_screenWidth=($("header")).offsetWidth;
			var l_availWidth=(l_screenWidth-widgetDecalX)-($p.navigator.IE?0:10);
			(tab[v_tab].root).setStyle("width",l_availWidth+"px");
			for (var i=0;i<tab[v_tab].module.length;i++)
			{
				tab[v_tab].module[i].show();
			}
		}
	},
	resize:function()
	{
//	$p.app.pages.computeSizeAndResize($p.app.tabs.sel);
	},
	/*
		$p.app.pages.displayItems : display and initialize objects move of a personalized page
		input : tab sequence ID
	*/
	displayItems:function(v_tab)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		//changeStyle("optmod","display",""); Removed in 1.5 > too long if many opened pages
		//initialise modules move only if allowed and not in newspaper mode
		if (useMod&&tab[v_tab].showType==0)
		{
			if (!tab[v_tab].moveIsInit)
			{
				if (tab[v_tab].moduleAlign)
				{
					$p.app.pages.columns.init(v_tab);
				}
				else
				{
					$p.app.widgets.initMove(v_tab);
				}
			}
		}
	},
	/*
		$p.app.pages.computeFooterPosition : Place the footer based on the widgets position
	*/
	computeFooterPosition:function()
	{
		var l_footer=$("footer");
		if (l_footer==null) return;
		if ($p.app.tabs.sel==-1 || tab[$p.app.tabs.sel].moduleAlign)
		{
			l_footer.setStyle("position","relative");
		}
		else
		{
			var widgetsBottomPos=0,currWidgetBottomPos;
			for (var i=0;i<tab[$p.app.tabs.sel].module.length;i++)
			{
				currWidgetBottomPos=tab[$p.app.tabs.sel].module[i].y+tab[$p.app.tabs.sel].module[i].height+widgetDecalY+40;
				if (currWidgetBottomPos>widgetsBottomPos)
					widgetsBottomPos=currWidgetBottomPos;
			}
			l_footer.setStyle("position","absolute");
			l_footer.setStyle("top",widgetsBottomPos+"px");
		}
	},
	/*
		$p.app.pages.save : save current page (for non connected users)
	*/
	save:function(v_type)
	{
		if (v_type=="user")
		{	
			// save the page (modules + personalization)
			for (var cpt=0;cpt<tab.length;cpt++)
			{
				//var l_ret="pageid="+tab[cpt].pageid+"w="+tab[cpt].colnb+"&s="+tab[cpt].style+"&n="+tab[cpt].label+"&p="+tab[cpt].param+"&t="+tab[cpt].showType+"&ty="+tab[cpt].type+"&nb="+tab[cpt].newspapernb+"&i="+tab[cpt].icon+"&a="+(tab[cpt].moduleAlign?"Y":"N");
				
				var l_ret="pageid="+tab[cpt].pageid+"w="+tab[cpt].colnb+"&s="+tab[cpt].style+"&n="+tab[cpt].label+"&p="+tab[cpt].param+"&t="+tab[cpt].showType+"&ty="+tab[cpt].type+"&nb="+tab[cpt].newspapernb+"&i="+tab[cpt].icon+"&a="+(tab[cpt].moduleAlign?"Y":"N");
				
				for (var i=0;i!=tab[cpt].module.length;i++)
				{
					l_ret+="&id"+i+"="+tab[cpt].module[i].id+"&pos"+i+"="+tab[cpt].module[i].newpos+"&col"+i+"="+tab[cpt].module[i].newcol+"&posj"+i+"="+tab[cpt].module[i].newposj+"&x"+i+"="+tab[cpt].module[i].newx+"&y"+i+"="+tab[cpt].module[i].newy+"&var"+i+"="+$p.string.esc(tab[cpt].module[i].vars)+"&blocked"+i+"="+(tab[cpt].module[i].blocked?"1":"0")+"&minimized"+i+"="+(tab[cpt].module[i].minimized?"1":"0");
				}	
		
				$p.ajax.call('scr_createportal.php',
					{
						'type':'execute',
						'variables':l_ret,
						'alarm':false,
						'forceExecution':true,
						'method':'post'				
					}
				);
			}
			openPage("0");
		}
	},
	/*
		$p.app.pages.maxModReached : limit modules number in a page
	*/
	maxModReached:function()
	{
		var l_ret=false;
		if (tab[$p.app.tabs.sel].module.length>__maxModNb)
		{
			$p.app.alert.show(lg("msgMaxMod",__maxModNb));
			l_ret=true;
		}
		return l_ret;
	},
	defineWidgetContainer:function(v_tab)
	{
		if ($("modules"+tab[v_tab].id)==null)
		{
			tab[v_tab].root=new Element('div', {'id': "modules"+tab[v_tab].id} );		
			if (v_tab!=$p.app.tabs.sel) 
				tab[v_tab].root.setStyle('display', 'none');
			
			($("modules")).appendChild(tab[v_tab].root);
		}
	}
}


$p.app.pages.columns={
	/*
		$p.app.pages.columns.createAll : create personalized page columns
		input : tab sequence ID
	*/
	createAll:function(v_tab)
	{
		//initialise Cols array
		tab[v_tab].cols.length=0;
		//condition suppressed with 1.0.0 : better placement without and reused for version 1.1
		var l_table=new Element('table', 
			{
				'styles': 
				{
					'width': '100%',
					'border': '0'
				},
				'cellSpacing': '4'
		    }
		);
		var l_tbody=new Element('tbody');
		var l_tr=new Element('tr');
		l_tr.id="maintr"+v_tab;
		if (tab[v_tab].showType==0){for (var i=1;i<=tab[v_tab].colnb;i++){l_tr.appendChild($p.app.pages.columns.create(i,v_tab));};} else {l_tr.appendChild($p.app.pages.columns.create(1,v_tab));}
		$p.app.pages.columns.size(v_tab);
		l_tbody.appendChild(l_tr);
		l_table.appendChild(l_tbody);
		(tab[v_tab].root).appendChild(l_table);
	},
	/*
		$p.app.pages.columns.init : init widgets move in a column
		input : tab sequence ID
	*/
	init:function(v_tab)
	{
		// Initialize column & modules behaviors
		// do not initialize the columns if already done
		if(tab[v_tab].moveIsInit)return;
		tab[v_tab].moveIsInit=true;

		//check if widget move init is applied on a widget or on a page
		var l_cptStart=($('col0')!=!null && tab[v_tab].cols.length==1)?0:1;
		var l_cptEnd=($('col0')!=!null && tab[v_tab].cols.length==1)?0:1;

		for (var i=l_cptStart;i<tab[v_tab].cols.length;i++)
		{
			for(var l_item=0;l_item<tab[v_tab].cols[i].childNodes.length-1;l_item++)
			{
				var l_mod=tab[v_tab].cols[i].childNodes[l_item];
 				$p.app.widgets.move.set(l_mod,"module",tab[v_tab].cols,"multidim",true,v_tab);
			}
		}
	},
	/*
		$p.app.pages.columns.create : create a personalized page column
		inputs
			v_id : column ID
			v_tab : tab sequence ID
	*/
	create:function(v_id,v_tab)
	{
		tab[v_tab].cols[v_id]=new Element('td', 
			{
				'styles':
				{
					'verticalAlign': 'top'
				},
				'id': "col"+v_id
			}
		);
		return tab[v_tab].cols[v_id];
	},
	/*
		$p.app.pages.columns.size : size a column based on columns numbers
		input : tab sequence ID
	*/
	size:function(v_tab)
	{
		//if newspaper mode, the cols are not sized (=> if no module on col1, col1 width=0)
		if (tab[v_tab].showType==0)
		{
			for (var i=1;i<tab[v_tab].cols.length;i++)
			{
				tab[v_tab].cols[i].setStyle("width",((100/tab[v_tab].colnb).toInt())+"%");
			}
		}
	},
	/*
		$p.app.pages.columns.add : add a new column
		input : column ID
	*/
	add:function(v_id)
	{
		// Add columns (until selected one)
		var l_obj=$("maintr"+$p.app.tabs.sel);
		// add the new cols
		if (tab[$p.app.tabs.sel].showType==0)
		{
			for (var i=tab[$p.app.tabs.sel].colnb+1;i<=v_id;i++)
			{
				l_obj.appendChild($p.app.pages.columns.create(i,$p.app.tabs.sel));
				tab[$p.app.tabs.sel].cols[i].appendChild($p.app.widgets.endList());
			}
			$p.app.pages.columns.size($p.app.tabs.sel);
		}
		tab[$p.app.tabs.sel].colnb=v_id;
	},
	/*
		$p.app.pages.columns.sup : remove a column
		input : column ID
	*/
	sup:function(v_id)
	{
		var l_obj=$("maintr"+$p.app.tabs.sel);
		if (tab[$p.app.tabs.sel].showType==0)
		{
			for (var i=tab[$p.app.tabs.sel].colnb;i>v_id;i--)
			{
				//suppress the node
				l_obj.removeChild(tab[$p.app.tabs.sel].cols[i]);
				delete(tab[$p.app.tabs.sel].cols[i]);
				tab[$p.app.tabs.sel].cols.length-=1;
			}
			$p.app.pages.columns.size($p.app.tabs.sel);
		}
		tab[$p.app.tabs.sel].colnb=v_id;
	},
	/*
		$p.app.pages.columns.isEmpty : check that a column is empty before removal
		input : column ID
	*/
	isEmpty:function(v_id)
	{
		var l_ret=true;
		if (v_id<tab[$p.app.tabs.sel].colnb)
		{
			for (var i=0;i<tab[$p.app.tabs.sel].module.length;i++)
			{
				if (tab[$p.app.tabs.sel].module[i].col>v_id){l_ret=false;$p.app.alert.show(lg("msgColSup",tab[$p.app.tabs.sel].module[i].col));break;}
			}
		}
		return l_ret;
	}
}

//****************************************************************************************************************************************************
//**
//**                                     WIDGETS
//**
//****************************************************************************************************************************************************


$p.app.widgets={
	showAdminProperties:false,
	dragging:false,
	
	/*
		$p.app.widgets.object : Modules class
		input
			col:column of the module
			pos:position of the column in a column
			height : height of the module (not application for modules with type R & M)
			id : id of the module
			link : link of the module provider
			name : name of the module
			minModSize: minimal size of the module
			updModSize (boolean) : is the module resizable?
			size : ?
			url : ?
			x: left position (if not aligned)
			y:top position (if not aligned)
			uniq_db : uniq id of the module
			format : type of the module (R=rss, M=included module, I= framed module)
			nbvars : number of users configuration variables used
			tab : id of the tab where the module is
			blocked (boolean) : is the module blocked in the page
			minimize (boolean) : display status of the module (true=minimized, false=normal)
			usereader (boolean) : for RSS modules, is the rss reader is used to read articles
			autorefresh (boolean) : is the module refreshed every x minutes ?
			icon : icon of the module
			isLoaded : loading status of the module (indef=not loaded, false=loading, true=loaded)
			header: HTML header of the module
			footer: HTML footer of the module
			auth: for RSS authentified feeds
	*/
	object:function(col,pos,posj,height,id,link,name,vars,minModSize,updModSize,size,url,x,y,uniq_db,format,nbvars,tab,blocked,minimize,usereader,autorefresh,icon,isLoaded,header,footer,auth)
	{
		this.col=col;
		this.pos=pos;
		this.posj=posj;
		this.height=height;
		this.size=size;
		this.id=id;
		this.link=link;
		this.name=name;
		this.vars=vars;
		this.minModSize=minModSize;
		this.updModSize=updModSize;
		this.url=url;
		this.y=y;
		this.x=x;
		this.uniq=uniq_db;
		this.format=format;
		this.newcol=col;
		this.newpos=pos;
		this.newposj=posj;
		this.newx=x;
		this.newy=y;
		this.nbvars=nbvars;
		this.tab=(tab==indef)?0:tab;
		this.blocked=(blocked && blocked==1)?true:false;
		this.minimized=(minimize && minimize==1)?true:false;
		this.usereader=(usereader && usereader==1)?true:false;
		this.autorefresh=(autorefresh && autorefresh==1)?true:false;
		this.icon=(icon==indef)?"box0_"+this.id+".ico":icon;
		this.isLoaded=isLoaded;
		this.header=header;
		this.content='';
		this.footer=footer;
		this.nbunread=0;
		this.start=0;
		this.auth=auth;
		this.create=$p.app.widgets.create;
		this.destruct=$p.app.widgets.destruct;
		this.show=$p.app.widgets.show;
		this.hide=$p.app.widgets.hide;
		this.refresh=$p.app.widgets.refresh;
		this.changeVar=$p.app.widgets.changeVar;
		this.placeinCol=$p.app.widgets.placeinCol;
		this.placeonTop=$p.app.widgets.placeonTop;
		this.bringToFront=$p.app.widgets.bringToFront;
		this.setHeight=$p.app.widgets.setHeight;
		this.hdrColor=$p.app.widgets.hdrColor;
		this.getIcon=$p.app.widgets.getIcon;
		this.minimize=$p.app.widgets.reduce;
		this.setName=$p.app.widgets.setName;
		this.setIcon=$p.app.widgets.setIcon;
	},
	/*
		$p.app.widgets.create : create a module object
	*/
	create:function()
	{
		var l_tabPos=$p.app.tabs.idToPos(this.tab);
		var l_obj=null;

		//for a new widget without uniq ID
		if (this.uniq==0)
		{
			tab[l_tabPos].maxUniq++;
			this.uniq=tab[l_tabPos].maxUniq;
			$p.app.widgets.changeUniq($p.app.widgets.uniqToId(this.uniq,l_tabPos),this.uniq);
		}

		l_obj=document.createElement("div");
		l_obj.style.display="none";
		//place new modules
		//use tab.id because it do not change even if the tab is moved
		l_obj.id="module"+this.tab+"_"+this.uniq;
		l_obj.className="module";

		if (tab[l_tabPos].moduleAlign)
		{
			l_obj.style.position="relative";
		}
		else
		{
			l_obj.style.position="absolute";
			l_obj.style.width=this.minModSize+"px";
			l_obj.style.left=this.x+widgetDecalX+"px";
			l_obj.style.top=this.y+widgetDecalY+"px";
		}
		//attach DIV to the corresponding column. if new module this.col=0 => col[0] need to be created
		if (tab[l_tabPos].moduleAlign || l_tabPos==-1)
		{
			if (this.col!=-1)
			{
				if (tab[l_tabPos].showType==0 || this.col==0){tab[l_tabPos].cols[this.col].appendChild(l_obj);} else {tab[l_tabPos].cols[1].appendChild(l_obj);}
			}
			else
			{
				($p.get("col1")).appendChild(l_obj);
			}
		}
		else
		{
			(tab[l_tabPos].root).appendChild(l_obj);
		}

		var tableObj1 = new Element('table',
			{
				'id': 'bmod'+this.tab+'_'+this.uniq,
				'class': 'bmod',
				'cellspacing': '0',
				'cellpadding': '0',
				'width': '100%'
			}
		);		   
							   
		var tbodyObj1 = new Element('tbody');
		var trObj1 = new Element('tr');
		var tdObj1 = new Element('td',
			{
				'events':
				{
					'mouseover': function()
					{
						$p.app.widgets.showOptions(this.uniq,true);			
					},
					'mouseout': function()
					{
						$p.app.widgets.showOptions(this.uniq,false);																
					}
				},
				'class': 'headmod',
				'width': '100%'
			} 
		);
		tdObj1.uniq=this.uniq;

		var bar_divContainer = new Element('div',
			{
				'width':'100%'
			}
		);
		var tableObj2 = new Element('table',
			{
				'id': 'hmod'+this.tab+'_'+this.uniq,
				'class': 'hmod',
				'cellspacing': '0',
				'cellpadding': '0',
				'width': '100%'
				
			}
		);
		var tbodyObj2 = new Element('tbody');
		var trObj2 = new Element('tr');
		
		var tdObj2 = new Element('td', 
			{
				'class': 'lefttopcornermod'
			}
		);
		tdObj2.set('html','<img src="../images/s.gif" width="1" height="1" />');
		tdObj2.inject(trObj2);
								
		var tdObj3 = new Element('td', 
			{
				'width': '16px'
			}
		);
											
		if (__showicon) 
		{
			var aObj1 = new Element('a',
				{
					'events':((this.blocked || !__showModuleMinimize)?'':
					{
						'click': function()
						{
							$p.app.widgets.minimize(this.uniq);
							return false;														
						}
																	
					}),
					'href': '#'		
				} 
			);
			aObj1.icon=this.icon;
			aObj1.uniq = this.uniq;
									
			var iObj1=new Element('img',
				{
					'events':((this.blocked || !__showModuleMinimize)?'':
					{
						'mouseover': function()
						{
							if(tab[$p.app.tabs.sel].module[$p.app.widgets.uniqToId(this.uniq)].minimized){this.src="../images/maximize.gif";} 											
							else{this.src="../images/minimize.gif";}
						},
						'click': function()
						{
							if(this.src==__LOCALFOLDER+"images/minimize.gif"){this.src="../images/maximize.gif";}
							else{this.src="../images/minimize.gif";}
						},
						'mouseout': function()
						{
							$p.app.widgets.changeIcon($p.app.widgets.uniqToId(this.uniq));	
						}
					}),
					'id': 'module'+this.tab+'_'+this.uniq+'_icon',
					'src':'../modules/pictures/'+this.icon,
					'width':'16',
					'height':'16',
					'class':'imgmid'
				}
			);
			
			iObj1.icon=this.icon;
			iObj1.uniq = this.uniq;
			iObj1.inject(aObj1);												
			aObj1.inject(tdObj3);						
		}	
		tdObj3.inject(trObj2);
		
		var tdObj4 = new Element('td', 
			{
				'width': '100%'
		    }
		);
								
		var divObj1 = new Element('div',
			{
				'id': 'module'+this.tab+'_'+this.uniq+'_h',
				'class': 'titmod'
			}
		 );	
			 
		if(__showModuleTitle)			 
			divObj1.set('html',this.name);
		else
			divObj1.set('html',"");
		
		divObj1.inject(tdObj4);
		tdObj4.inject(trObj2);
										
		var tdObj5 = new Element('td', 
			{
				'class': 'optmodhide',
				'id': 'module'+this.tab+'_'+this.uniq+'_o'
			}
		);					
		var divObj2 = new Element('div',
			{
				'id': 'module'+this.tab+'_'+this.uniq+'_o',
				'class': 'optmoda',
				'nowrap': 'nowrap'
			}
		 );	
							
		if ((this.nbvars>0 || __barcolnb>1) && (__showModuleConfigure || $p.app.user.id==-1))
		{
			var aObj2 = new Element('a',
				{
					'events':
					{
						'click': function()
						{
							return $p.app.widgets.param.show(this.uniq);													
						}
					},
					'href': '#'
				}
			);			
			aObj2.uniq = this.uniq;
			aObj2.set('html',lg("lblConfigure"));
			aObj2.inject(divObj2);
			var bObj2 = new Element('b');
			bObj2.set('html','&nbsp;');
			bObj2.inject(divObj2);
		}
												
		if ($p.app.user.id!=0&&__useSharing) 
		{
			var aObj3 = new Element('a',
				{
					'events': {
									'click': function()
									{
										p_friends.menu(3,$p.app.widgets.uniqToId(this.uniq));												
									}
							  },
					'href': '#',
					'title':lg('lblShare')
				} 
			);
			aObj3.uniq = this.uniq;
			aObj3.set('html',$p.img("ico_bar_share.gif",13,11,lg("lblShareModule")));
			aObj3.inject(divObj2);
			var bObj3 = new Element('b');
			bObj3.set('html','&nbsp;');
			bObj3.inject(divObj2);
		}
																	
		if(__showModuleRefresh)
		{
			var aObj4 = new Element('a',
				{
					'events':
					{
						'click': function()
						{
							return tab[$p.app.tabs.sel].module[$p.app.widgets.uniqToId(this.uniq)].refresh(0);											
						}
					},
					'href': '#',
					'title':lg('lblRefresh')
				} 
			);
			aObj4.uniq = this.uniq;
			aObj4.set('html',$p.img("ico_refresh.gif",12,11,lg("lblRefresh")));
			aObj4.inject(divObj2);
			var bObj4 = new Element('b');
			bObj4.set('html','&nbsp;');
			bObj4.inject(divObj2);
		}
							
		if (!this.blocked&&__showModuleMinimize)
		{			
			var aObj5 = new Element('a',
				{
					'events': {
									'click': function()
									{
										$p.app.widgets.minimize(this.uniq);
										return false;							
									}
							  },
					'href': '#',
					'title':lg('minimize')
				} 
			);
			aObj5.uniq = this.uniq;
			aObj5.set('html',$p.img((this.minimized?"ico_maximize.gif":"ico_minimize.gif"),12,11,"minimize","","imgminimize"+this.uniq));
			aObj5.inject(divObj2);
			var bObj5 = new Element('b');
			bObj5.set('html','&nbsp;');
			bObj5.inject(divObj2);
		}
							
		if (!this.blocked && (__showModuleClose || $p.app.user.id==-1)) 
		{
			var aObj6 = new Element('a',
				{
					'events': {
									'click': function()
									{
										$p.app.widgets.suppress(this.uniq,true);
										return false;						
									}
							  },
					'href': '#',
					'title':lg('lblClose')
				} 
			);
			aObj6.uniq = this.uniq;
			aObj6.set('html',$p.img("ico_close.gif",12,11,lg("lblSuppress")));
			aObj6.inject(divObj2);	
			var bObj6 = new Element('b');
			bObj6.set('html','&nbsp;');
			bObj6.inject(divObj2);										
		}
		
		var bObj61 = new Element('b');
		bObj61.set('html','&nbsp;');
		bObj61.inject(divObj2);
					
		divObj2.inject(tdObj5);
		tdObj5.inject(trObj2);
		
		var tdObj6 = new Element('td', 
			{
				'class': 'righttopcornermod'
			}
		);
		tdObj6.set('html','<img src="../images/s.gif" width="1" height="1" />');
		tdObj6.inject(trObj2);

		trObj2.inject(tbodyObj2);
		tbodyObj2.inject(tableObj2);
		tableObj2.inject(bar_divContainer);
		bar_divContainer.inject(tdObj1);
		var divObj3 = new Element('div',
			{
				'id': 'editbar'+this.tab+'_'+this.uniq,
				'class': 'editbox'
			}
		 );
		divObj3.inject(tdObj1);	
		tdObj1.inject(trObj1);
		trObj1.inject(tbodyObj1);
			
		var trObj3 = new Element('tr');
		var tdObj7 = new Element('td',
			{
				'class': 'contentborder'
			}
		);	
		var divObj4 = new Element('div',
			{
				'id': 'module'+this.tab+'_'+this.uniq+'_i',
				'class': 'content'
			}
		);				 
		var tableObj3 = new Element('table', 
			{
				'border': '0',
				'cellspacing': '0',
				'cellpadding': '0',
				'align': 'center',
				'width': '100%'
			}
	    );
												   
		var tbodyObj3 = new Element('tbody');
		var trObj4 = new Element('tr');
		var tdObj8 = new Element('td',
			{
				'id': 'module'+this.tab+'_'+this.uniq+'_c',
				'styles':{
					'display' :(this.minimized?'none':'')
				}
			} 
		);
		if (this.format=="I") 
		{
			var iframeObj1 = new Element('iframe',
				{
					'id': 'modfram'+this.tab+'_'+this.uniq,
					'src': this.url+"pid="+$p.app.user.id+"&prof="+this.tab+"&p="+this.uniq+"&"+this.vars,
					'scrolling':'no',
					'frameborder':'0',
					'marginwidth':'0',
					'marginheight':'0',
					'height': this.height+'px',
					'width':'100%',
					'z-index':'auto'
				} 
			);																									
			//iframeObj1.set('html','Issue with module display.');
			var aObj7 = new Element('a',
				{
					'href': '../portal/contact.php',
					'target': '_blank'
				} 
			);					
			aObj7.set('html','Contact us');	
			//aObj7.inject(iframeObj1);
			iframeObj1.inject(tdObj8);
			var brObj1 = new Element('br');	
			brObj1.inject(tdObj8);	
		}
			
		var tdObj8 = new Element('td',
			{
				'id': 'module'+this.tab+'_'+this.uniq+'_c',
				'styles':{
					'display' :(this.minimized?'none':'')
				}
			} 
		);
		if (this.format=="I") 
		{
			var iframeObj1 = new Element('iframe',
				{
					'id': 'modfram'+this.tab+'_'+this.uniq,
					'src': this.url+"pid="+$p.app.user.id+"&prof="+this.tab+"&p="+this.uniq+"&plg="+__lang+"&"+this.vars,
					'scrolling':'no',
					'frameborder':'0',
					'marginwidth':'0',
					'marginheight':'0',
					'height': this.height+'px',
					'width':'100%',
					'z-index':'auto'
				  } 
			);																		

			//iframeObj1.set('html','Issue with module display.');
			var aObj7 = new Element('a',
				{
					'href': '../portal/contact.php',
					'target': '_blank'
				} 
			);
									
			aObj7.set('html','Contact us');	
			//aObj7.inject(iframeObj1);
			iframeObj1.inject(tdObj8);
			var brObj1 = new Element('br');	
			brObj1.inject(tdObj8);	
		}

		if (this.format=="U") 
		{
			var iframeObj2 = new Element('iframe',
				{
					'styles': {
						'height': this.height+"px",
						'width': '100%'
					},
					'id': 'modfram'+this.tab+'_'+this.uniq,
					'src': this.url+"pid="+$p.app.user.id+"&prof="+this.tab+"&p="+this.uniq+"&plg="+__lang+"&"+this.vars,
					'frameborder':'no', 
					'marginwidth':'0', 
					'marginheight':'0', 
					'scrolling':'no',
					'z-index':'auto'
				  } 
			);
			iframeObj2.inject(tdObj8);
			var brObj2 = new Element('br');	
			brObj2.inject(tdObj8);										
		}
		
		if (this.format=="D") //HTML integrated in Div 
		{
			tdObj8.set('html',this.content)
		}
		
		if (this.format=="H") 
		{
			var iframeObj3 = new Element('iframe',
				{
					'styles': {
									'height': this.height+"px",
									'width': '100%'
							  },
					'id': 'modfram'+this.tab+'_'+this.uniq,
					'src': '',
					'frameborder':'no', 
					'marginwidth':'0', 
					'marginheight':'0', 
					'scrolling':'no',
					'z-index':'auto'
				} 
			);		
			//iframeObj3.set('html','Issue with module display. ');
			var aObj9 = new Element('a',
				{
					'href': '../portal/contact.php',
					'target': '_blank'
				} 
			);
			aObj9.set('html','Contact us');
			aObj9.inject(iframeObj3);
			iframeObj3.inject(tdObj8);
			var brObj3 = new Element('br');	
			brObj3.inject(tdObj8);										
		}

		if (this.format=="R"||this.format=="M") 
		{
			tdObj8.set('html',lg("lblLoading"));
		}
							
		tdObj8.inject(trObj4);
		trObj4.inject(tbodyObj3);
		tbodyObj3.inject(tableObj3);
		tableObj3.inject(divObj4);

		//Div+image used to force minimal width
		var divObj5 = new Element('div',
			{
				'styles':
				{
					'height': '1px'
				}
			} 
		);			 
		divObj5.set('html',$p.img("s.gif",this.minModSize,1,indef,indef,"line"+this.tab+"_"+this.uniq));
		divObj5.inject(divObj4);
		
		divObj4.inject(tdObj7);
				
		if (__useNotation&&$p.app.user.id>0) 
		p_notation.buildBlock(this.uniq);
		
		tdObj7.inject(trObj3);
		trObj3.inject(tbodyObj1);

		//Widget footer
		var footer_trContainer=new Element('tr');
		footer_trContainer.inject(tbodyObj1);
		var footer_tdContainer=new Element('td');
		footer_tdContainer.inject(footer_trContainer);
		var footer_table = new Element('table',
			{
				'id': 'fmod'+this.tab+'_'+this.uniq,
				'class': 'fmod',
				'cellspacing': '0',
				'cellpadding': '0',
				'width': '100%'
			}
		);
		footer_table.inject(footer_tdContainer);
		var footer_tbody = new Element('tbody');
		footer_tbody.inject(footer_table);
		var footer_tr = new Element('tr');
		footer_tr.inject(footer_tbody);
		var footer_leftcorner = new Element('td', 
			{
				'class': 'leftbottomcornermod'
			}
		);
		footer_leftcorner.set('html','<img src="../images/s.gif" style="width: 1px;height: 1px;line-height: 1px;" />');
		footer_leftcorner.inject(footer_tr);
		var footer_center = new Element('td', 
			{
				'class': 'bottommod'
			}
		);
		footer_center.set('html','<img src="../images/s.gif" style="width: 1px;height: 1px;line-height: 1px;" />');
		footer_center.inject(footer_tr);
		var footer_rightcorner = new Element('td', 
			{
				'class': 'rightbottomcornermod'
			}
		);
		footer_rightcorner.set('html','<img src="../images/s.gif" style="width: 1px;height: 1px;line-height: 1px;" />');
		footer_rightcorner.inject(footer_tr);
			
		tbodyObj1.inject(tableObj1);		
		tableObj1.inject(l_obj);

		//check if authentified feed or not
		var l_vars=this.vars;
		this.auth=(l_vars.indexOf("auth=")!=-1 || (l_vars.indexOf("user=")!=-1 && l_vars.indexOf("pass=")!=-1))?true:false;

		//load the content
		if (this.format=="R") $p.app.widgets.rss.refresh($p.app.widgets.uniqToId(this.uniq,l_tabPos),l_tabPos);
		if (this.format=="M") $p.app.widgets.refreshContent($p.app.widgets.uniqToId(this.uniq,l_tabPos),l_tabPos);
		//if (this.format=="H") refreshHtmlCont($p.app.widgets.uniqToId(this.uniq));
		if (this.format=="I" || this.format=="U")
		{
			if (this.nbvars>0) $p.app.widgets.param.getModuleParam($p.app.widgets.uniqToId(this.uniq,l_tabPos),l_tabPos);
			else if (__barcolnb>1) $p.app.widgets.param.fillEditBox(indef,this.uniq,l_tabPos);
		}
		this.hdrColor();
		this.getIcon();
	},
	/*
		$p.app.widgets.destruct : destruct a module
	*/
	destruct:function()
	{
		var l_obj=$("module"+this.tab+"_"+this.uniq);
		var l_col=this.newcol,l_tabPos=$p.app.tabs.idToPos(this.tab);
		if (tab[l_tabPos].showType==1 && this.newcol!=0) l_col=1;
		if (tab[l_tabPos].moduleAlign)
		{
			tab[l_tabPos].cols[l_col].removeChild(l_obj);
		}
		else
		{
			tab[l_tabPos].root.removeChild(l_obj);
		}
	},
	/*
		$p.app.widgets.refresh : refresh a mdoule
	*/
	refresh:function()
	{
		var l_tabPos=$p.app.tabs.idToPos(this.tab);
		var l_id=$p.app.widgets.uniqToId(this.uniq,l_tabPos);
		tab[l_tabPos].module[l_id].isLoaded=false;
		if (this.format=="I" || this.format=="U")
		{
			var l_obj=$("modfram"+tab[l_tabPos].id+"_"+this.uniq);
			if (this.format=="I")
			{
				var l_url=tab[l_tabPos].module[l_id].url+"pid="+$p.app.user.id+"&prof="+tab[l_tabPos].id+"&p="+tab[l_tabPos].module[l_id].uniq+"&plg="+__lang+"&"+tab[l_tabPos].module[l_id].vars;
			}
			else
			{
				var l_url=tab[l_tabPos].module[l_id].url+"pid="+$p.app.user.id+"&prof="+tab[l_tabPos].id+"&p="+tab[l_tabPos].module[l_id].uniq+"&plg="+__lang+("&"+tab[l_tabPos].module[l_id].vars).replace(/&/g,"&up_");
			}
			l_obj.src=l_url;
		}
		if (this.format=="R")
		{
			$p.app.widgets.rss.refresh(l_id,l_tabPos,true);
		}
		if (this.format=="M")
		{
			$p.app.widgets.refreshContent(l_id,l_tabPos);
		}
		return false;
	},
	/*
		$p.app.widgets.placeonTop: Place a module on top of a column
	*/
	placeonTop:function()
	{
		//change the position of the modules that are placed in the destination column
		var l_tabPos=$p.app.tabs.idToPos(this.tab);
		for (var i=0;i<tab[l_tabPos].module.length;i++)
		{
			if (tab[l_tabPos].module[i].newcol==this.newcol) tab[l_tabPos].module[i].newpos+=1;
			if (this.format!='R' && tab[l_tabPos].module[i].format!='R') tab[l_tabPos].module[i].newposj++;
		}
		//set the position of the module added (usefull ?? treated before ??)
		this.newpos=1
		
		if (tab[l_tabPos].showType==0)
			var l_col=this.newcol;
		else
			var l_col=1;
		if ($("module"+this.tab+"_"+this.uniq)!=null)
		{
			var l_movedMod=$("module"+this.tab+"_"+this.uniq);
			if (tab[l_tabPos].moduleAlign)
			{
				
				var l_firstInCol=tab[l_tabPos].cols[l_col].firstChild;
				if (tab[l_tabPos].showType==0 || this.format!='R')
				{
					tab[l_tabPos].cols[l_col].insertBefore(l_movedMod,l_firstInCol);
					$p.app.widgets.move.set(l_movedMod,"module",tab[l_tabPos].cols,"multidim",true,l_tabPos);
				}
				else
					$p.app.widgets.rss.reader.showArticlesList(true);
			}
			else
			{
				tab[l_tabPos].root.appendChild(l_movedMod);
				$p.app.widgets.move.set(l_movedMod,"module",tab[l_tabPos].root,"multidim",true,l_tabPos);
			}
		}
	},
	/*
		$p.app.widgets.placeinCol : Place a module on top of a column
	*/
	placeinCol:function(v_col,v_tab)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		if (!$p.app.pages.maxModReached())
		{
			this.newcol=v_col;
			this.placeonTop();
			if (tab[v_tab].controls=='Y') {$p.app.widgets.showHdr(v_tab);}
			var l_vars=[];
			l_vars[0]=v_col;
			$p.app.widgets.saveChanges(l_vars,indef,v_tab);
		}
		$p.plugin.hook.launch('placeinCol_end');
	},
	/*
		$p.app.widgets.bringToFront : bring a widget to front of the page, over the others
	*/
	bringToFront:function()
	{
		if (!tab[$p.app.tabs.sel].moduleAlign)
		{
			($("module"+tab[$p.app.tabs.sel].id+"_"+this.uniq)).setStyle("zIndex",1000);
		}
	},
	/*
		$p.app.widgets.minimize : minimize a widget
	*/
	reduce:function()
	{
		$p.app.widgets.minimize(this.uniq);
	},
	/*
		$p.app.widgets.minimize : minimize a module
		input : module uniq ID
	*/
	minimize:function(v_uniq)
	{
		var l_id=$p.app.widgets.uniqToId(v_uniq);
		if (tab[$p.app.tabs.sel].module[l_id].minimized)
		{
			$p.show("module"+tab[$p.app.tabs.sel].id+"_"+v_uniq+"_c","block");
			$p.show("module"+tab[$p.app.tabs.sel].id+"_"+v_uniq+"_i","block");
			//var l_obj=$("module"+v_uniq+"_c");
			//l_obj.parentNode.parentNode.parentNode.style.display="block";
			tab[$p.app.tabs.sel].module[l_id].minimized=false;
			//($("imgminimize"+v_uniq)).src="../images/ico_minimize.gif";
			$p.ajax.call('scr_minimize.php',
				{
					'type':'execute',
					'variables':"m=0&prof="+$p.app.tabs.selId+"&u="+v_uniq
				}
			);
		}
		else
		{
			$p.show("module"+tab[$p.app.tabs.sel].id+"_"+v_uniq+"_c","none");
			$p.show("module"+tab[$p.app.tabs.sel].id+"_"+v_uniq+"_i","none");
			//var l_obj=$("module"+v_uniq+"_c");
			//l_obj.parentNode.parentNode.parentNode.style.display="none";
			tab[$p.app.tabs.sel].module[l_id].minimized=true;
			$p.ajax.call('scr_minimize.php',
				{
					'type':'execute',
					'variables':"m=1&prof="+$p.app.tabs.selId+"&u="+v_uniq
				}
			);
		}
	},
	/*
		$p.app.widgets.setName : set widget title
	*/
	setName:function(v_name)
	{
		$p.app.widgets.changeName($p.app.widgets.uniqToId(this.uniq),v_name,$p.app.tabs.idToPos(this.tab));
	},
	/*
		$p.app.widgets.setIcon : set widget icon
	*/
	setIcon:function(v_icon)
	{
		$p.app.widgets.changeIcon($p.app.widgets.uniqToId(this.uniq),v_icon,$p.app.tabs.idToPos(this.tab));
	},
	/*
		$p.app.widgets.setHeight: define module height
		input : height applied
	*/
	setHeight:function(v_height)
	{
		$p.setHeight("modfram"+this.tab+"_"+this.uniq,v_height);
	},
	/*
		$p.app.widgets.changeVar : Change a module parameter
		inputs
			v_var : variable to update
			v_value : new value
	*/
	changeVar:function(v_var,v_value)
	{
		var l_oldVars=this.vars;
		if (v_var=="")
		{
			l_newVars=v_value;
		}
		else
		{
			var l_oldValue=$p.string.getVar(l_oldVars,v_var);
			var l_newVars=l_oldVars.replace(v_var+"="+l_oldValue+"&","").replace("&"+v_var+"="+l_oldValue,"").replace(v_var+"="+l_oldValue,"");
			l_newVars=(l_newVars=="")?(v_var+"="+v_value):(l_newVars+"&"+v_var+"="+v_value);
		}
		this.vars=l_newVars;
		//record changes in DB
		if (l_oldVars!=l_newVars)
		{
			$p.ajax.call('scr_savevar.php',
				{
					'type':'execute',
					'variables':"prof="+$p.app.tabs.selId+"&un="+this.uniq+"&vars="+$p.string.esc(l_newVars),
					'alarm':false
				}
			);
		}
	},
	// Module display - called when modules are loaded
	show:function(){
		$p.show('module'+this.tab+"_"+this.uniq,"block");
	},
	hide:function(){
		$p.show('module'+this.tab+"_"+this.uniq,"none");
	},
	/*
		$p.app.widgets.hdrColor : change module header color
		inputs
			v_uniq : uniq ID of the module
			v_style : style to applied to this module
	*/
	hdrColor:function(v_uniq,v_style)
	{
		if (!v_uniq) v_uniq=this.uniq;
		if (!v_style) v_style=$p.string.getVar(this.vars,"bcolor");
		var l_obj=$("module"+this.tab+"_"+v_uniq);
		if (l_obj) l_obj.className="module"+v_style;
	},
	/*
		$p.app.widgets.getIcon : get icon information for a module
	*/
	getIcon:function()
	{
		if ($p.string.getVar(this.vars,"icon")!="")
		{
			this.icon=$p.string.getVar(this.vars,"icon");
		}
	},
	/*
		$p.app.widgets.showOptions: show / hide modules options
		inputs
			v_uniq : uniq ID of the module
			v_status (boolean) : display status for the options
		BUG: let the function name in lowercase
	*/
	showOptions:function(v_uniq,v_status)
	{
		var l_obj=$("module"+tab[$p.app.tabs.sel].id+"_"+v_uniq+"_o");
		if (l_obj) l_obj.className=(v_status?"optmod":"optmodhide");
	},
	/*
		$p.app.widgets.changeUniq : change uniq ID of a module
		inputs
			v_id : module sequence ID
			v_uniq : new Uniq ID for the module
	*/
	changeUniq:function(v_id,v_uniq)
	{
		if (v_uniq==indef) v_uniq=tab[$p.app.tabs.sel].maxUniq;
		$p.ajax.call('scr_changeuniq.php',
			{
				'type':'execute',
				'variables':"uniq="+v_uniq+"&prof="+$p.app.tabs.selId+"&x="+tab[$p.app.tabs.sel].module[v_id].newcol+"&y="+tab[$p.app.tabs.sel].module[v_id].newpos
			}
		);
	},
	/*
		$p.app.widgets.uniqToId : get module sequence ID based on its uniq ID
		inputs
			v_uniq : module uniq ID
			v_tab : tab sequence ID
		output : module sequence ID
	*/
	uniqToId:function(v_uniq,v_tab)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		for (var k=0;k<tab[v_tab].module.length;k++)
		{
			if (tab[v_tab].module[k].uniq==v_uniq) return k;
		}
		return 0;
	},
	/*
		$p.app.widgets.getModuleId : get a module object ID
		input : module div object
		output : module sequence ID
	*/
	getModuleId:function(v_obj)
	{
		var ret=-1;
		var l_objid=v_obj.id;
		if (l_objid.indexOf("module")>=0)
		{
			var l_idstr=l_objid.replace("module","");//substr(l_objid.indexOf("_")+1);
			var l_tab=$p.app.tabs.idToPos(l_idstr.substr(0,l_idstr.indexOf("_")));
			var l_uniq=l_idstr.substr(l_idstr.indexOf("_")+1);
			ret=$p.app.widgets.uniqToId(l_uniq,l_tab);
		}
		return ret;
	},
	/*
		$p.app.widgets.saveChanges : save modules changes
		inputs
			v_vars : modules changes string
			v_supid : id of the module removed (if applicable)
			v_tab : tab sequence ID
	*/
	saveChanges:function(v_vars,v_supid,v_tab)
	{
		var l_inc=0,l_save=false;
		var l_s="prof="+$p.app.tabs.selId;
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		if (tab[v_tab].moduleAlign)
		{
			//build the saving string (for each column IMPACTED)
			for (var l_var=0;l_var<v_vars.length;l_var++)
			{
				for (var l_nod=0;l_nod<tab[v_tab].cols[v_vars[l_var]].childNodes.length-1;l_nod++)
				{
					//get the information of the concerned node (only if module one)
					var l_mod=tab[v_tab].cols[v_vars[l_var]].childNodes[l_nod];
					if ($p.app.widgets.getModuleId(l_mod)!=-1)
					{
						l_id=$p.app.widgets.getModuleId(l_mod);
					}
					else
					{
						continue;
					}
					if (tab[v_tab].showType==0)
					{
						//redefine the position of the modules in the modified columns
						tab[v_tab].module[l_id].newpos=l_nod+1;
						tab[v_tab].module[l_id].newcol=v_vars[l_var];
					}
					else
					{
						tab[v_tab].module[l_id].newposj=l_nod+1;
					}
					//if position modified, the saving string is updated
					if (tab[v_tab].module[l_id].col!=tab[v_tab].module[l_id].newcol || tab[v_tab].module[l_id].pos!=tab[v_tab].module[l_id].newpos || tab[v_tab].module[l_id].posj!=tab[v_tab].module[l_id].newposj)
					{
						//check if new module (added) or not
						l_save=true;
						if (tab[v_tab].module[l_id].col<1)
						{
							l_s+="&idn="+tab[v_tab].module[l_id].id+"&un="+tab[v_tab].module[l_id].uniq+"&pxn="+tab[v_tab].module[l_id].newcol+"&pyn="+tab[v_tab].module[l_id].newpos+"&xn="+tab[v_tab].module[l_id].newx+"&yn="+tab[v_tab].module[l_id].newy+"&jn="+tab[v_tab].module[l_id].newposj+"&fn="+$p.string.getVar(tab[v_tab].module[l_id].vars,'pfid')+"&vn="+$p.string.esc(tab[v_tab].module[l_id].vars);
						}
						else
						{
							l_inc++;
							l_s+="&id"+l_inc+"="+tab[v_tab].module[l_id].id+"&px"+l_inc+"="+tab[v_tab].module[l_id].newcol+"&py"+l_inc+"="+tab[v_tab].module[l_id].newpos+"&j"+l_inc+"="+tab[v_tab].module[l_id].newposj+"&x"+l_inc+"="+tab[v_tab].module[l_id].newx+"&y"+l_inc+"="+tab[v_tab].module[l_id].newy+"&u"+l_inc+"="+tab[v_tab].module[l_id].uniq;
						}
						tab[v_tab].module[l_id].col=tab[v_tab].module[l_id].newcol;
						tab[v_tab].module[l_id].pos=tab[v_tab].module[l_id].newpos;
						tab[v_tab].module[l_id].posj=tab[v_tab].module[l_id].newposj;
					}
				}
			}
		}
		else
		{
			//build the saving string (for each column IMPACTED)
			for (var l_nod=0;l_nod<tab[v_tab].root.childNodes.length;l_nod++)
			{
				//get the information of the concerned node (only if module one)
				var l_mod=tab[v_tab].root.childNodes[l_nod];
				if ($p.app.widgets.getModuleId(l_mod)!=-1)
				{
					l_id=$p.app.widgets.getModuleId(l_mod);
				}
				else
				{
					continue;
				}
				//if position modified, the saving string is updated
				if (tab[v_tab].module[l_id].x!=tab[v_tab].module[l_id].newx || tab[v_tab].module[l_id].y!=tab[v_tab].module[l_id].newy)
				{
					//check if new module (added) or not
					l_save=true;
					if (tab[v_tab].module[l_id].col<1)
					{
						l_s+="&idn="+tab[v_tab].module[l_id].id+"&un="+tab[v_tab].module[l_id].uniq+"&pxn="+tab[v_tab].module[l_id].newcol+"&pyn="+tab[v_tab].module[l_id].newpos+"&xn="+tab[v_tab].module[l_id].newx+"&yn="+tab[v_tab].module[l_id].newy+"&jn="+tab[v_tab].module[l_id].newposj+"&fn="+$p.string.getVar(tab[v_tab].module[l_id].vars,'pfid')+"&vn="+$p.string.esc(tab[v_tab].module[l_id].vars);
					}
					else
					{
						l_inc++;
						l_s+="&id"+l_inc+"="+tab[v_tab].module[l_id].id+"&px"+l_inc+"="+tab[v_tab].module[l_id].newcol+"&py"+l_inc+"="+tab[v_tab].module[l_id].newpos+"&j"+l_inc+"="+tab[v_tab].module[l_id].newposj+"&x"+l_inc+"="+tab[v_tab].module[l_id].newx+"&y"+l_inc+"="+tab[v_tab].module[l_id].newy+"&u"+l_inc+"="+tab[v_tab].module[l_id].uniq;
					}
					tab[v_tab].module[l_id].x=tab[v_tab].module[l_id].newx;
					tab[v_tab].module[l_id].y=tab[v_tab].module[l_id].newy;
				}
			}
		}
		if (v_supid!=indef)
		{
			l_save=true;
			l_s+="&ids="+tab[v_tab].module[v_supid].id+"&us="+tab[v_tab].module[v_supid].uniq;
		}

		//call the XML saving function
		if (l_save && $p.app.user.id>0)
		{
			$p.ajax.call('scr_config_place.php',
				{
					'type':'execute',
					'variables':l_s,
					'alarm':false
				}
			);
		}
		// this action restart the protection counter
		if (tab[v_tab].lock!=0){$p.app.counter.reset(4);}
	},
	/*
		$p.app.widgets.refreshContent : refresh module with "M" format
		inputs
			v_id : module sequence ID
			v_tab : tab sequence ID
	*/
	refreshContent:function(v_id,v_tab)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		$p.ajax.call(tab[v_tab].module[v_id].url,
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.widgets.displayContent,
					'variables':
					{
						'widgetpos':v_id,
						'undef':0,
						'widgetid':tab[v_tab].module[v_id].uniq,
						'tabpos':v_tab,
						'tabid':tab[v_tab].id
					}
				},
				'source':'xml',
				'variables':"pid="+$p.app.user.id+"&prof="+tab[v_tab].id+"&p="+tab[v_tab].module[v_id].uniq+"&plg="+__lang+"&"+tab[v_tab].module[v_id].vars,
				'method':'POST'
			}
		);
		return false;
	},
	/*
		$p.app.widgets.displayModCont : display module with "M" format
	*/
	displayContent:function(response,vars)
	{
		var l_tab=vars['tabpos'];
		if (response.getElementsByTagName("Module")[0])
		{
			var l_mod=response.getElementsByTagName("Module")[0];
			var l_script="";
			//refresh edit box only if current tab
			$p.app.widgets.param.fillEditBox(l_mod,vars['widgetid'],l_tab);
			if (l_mod.getElementsByTagName("Content")[0])
			{
				var l_contenttag=response.getElementsByTagName("Content")[0];
				var l_content=l_contenttag.firstChild.nodeValue;
				l_content=l_content.replace(/__MODULE_ID__/g,vars['widgetid']+"_"+vars['tabid']);
				if (l_content.indexOf("<script>")!=-1 || l_content.indexOf('<script language="text/javascript">')!=-1 || l_content.indexOf("<script language='text/javascript'>")!=-1)
				{
					var l_pos1=l_content.indexOf("<script>");
					if (l_pos1==-1) l_pos1=l_content.indexOf("<script language='text/javascript'>");
					if (l_pos1==-1) l_pos1=l_content.indexOf('<script language="text/javascript">');
					l_pos1=l_content.indexOf(">",l_pos1);
					var l_pos2=l_content.indexOf("</script>",l_pos1);
					var l_script=l_content.substring((l_pos1+1),l_pos2);
				}
				$p.print("module"+tab[l_tab].id+"_"+vars['widgetid']+"_c",l_content);
				//launch script
				if (l_script!="")
				{
					try
					{
						eval(l_script);
					}
					catch(err)
					{
						$p.app.debug("widget script error :"+err.message+" / on script :"+l_script,"error");
					}
				}
			}
		}
	},
	/*
		$p.app.widgets.createAll : create all widgets of a personalized page
		input : 
			v_tab : tab sequence ID
			v_display : set if widgets are displayed once created
	*/
	createAll:function(v_tab,v_display)
	{
		// Create all the modules
		var l_col=1;
		var l_ontop=0;
		// compute the max Uniq ID
		for (var i=0;i<tab[v_tab].module.length;i++)
		{
			if (tab[v_tab].module[i].uniq>tab[v_tab].maxUniq) tab[v_tab].maxUniq=tab[v_tab].module[i].uniq;
		}
		//sort the modules depending on the show type
		if (tab[v_tab].showType==0)
		{
			tab[v_tab].module.sort(blocSort);
		}
		else
		{
			tab[v_tab].module.sort(newspaperSort);
		}

		for (var i=0;i<tab[v_tab].module.length;i++)
		{
			while (tab[v_tab].module[i].col>l_col) l_col++;
			if (tab[v_tab].showType==0 || tab[v_tab].module[i].format!='R') 

			tab[v_tab].module[i].create();

			//display modules if not in the active tab
			if (v_tab!=$p.app.tabs.sel || v_display)
			{
				tab[v_tab].module[i].show();
			}
			//if a module is added from outside of Portaneo
			if (tab[v_tab].module[i].pos==99) l_ontop=i;
		}
		if (tab[v_tab].showType==1)
		{
			$p.app.widgets.rss.reader.init();
			$p.app.widgets.rss.reader.load();
			// if modules are aligned, a dummy div is added on the bottom of the column of widgets
			if (tab[v_tab].moduleAlign) tab[v_tab].cols[1].appendChild($p.app.widgets.endList());
		}
		else
		{
			// if modules are aligned, a dummy div is added on the bottom of each column
			if (tab[v_tab].moduleAlign)
			{
				for (var i=1;i<=tab[v_tab].colnb;i++)
				{
					tab[v_tab].cols[i].appendChild($p.app.widgets.endList());
				}
			}
		}	
		//if a module is not placed, place it on top of first column (only if modules are aligned)
		if (l_ontop!=0 && tab[v_tab].moduleAlign)
		{
			tab[v_tab].module[l_ontop].placeonTop();
			var l_var=[];
			l_var[0]=tab[v_tab].module[l_ontop].col;
			$p.app.widgets.saveChanges(l_var,indef,v_tab);
		}
	},
	/*
		$p.app.widgets.suppress : remove a widget
		inputs
			v_uniq : module uniq ID
			v_confifm (boolean) : true=ask for module removal confirmation
	*/
	suppress:function(v_uniq,v_confirm)
	{
		var l_id=$p.app.widgets.uniqToId(v_uniq),l_ret=false;
		// if module to suppress is not yet included in the page
		if (showNewMod && l_id==(tab[$p.app.tabs.sel].maxUniq))
		{
			$p.app.widgets.close();
		}
		else
		{
			var l_response=v_confirm?confirm(lg("msgModSup")):1;
			if (l_response==1)
			{
				//suppress linked RSS feeds
				if (tab[$p.app.tabs.sel].module[l_id].format=='R') $p.app.widgets.supFeed(v_uniq);

				//virtually change the module position
				for(var i=0;i<tab[$p.app.tabs.sel].module.length;i++)
				{
					if (tab[$p.app.tabs.sel].module[i].newcol==tab[$p.app.tabs.sel].module[l_id].newcol && tab[$p.app.tabs.sel].module[i].newpos>tab[$p.app.tabs.sel].module[l_id].newpos){tab[$p.app.tabs.sel].module[i].newpos-=1;}
					if (tab[$p.app.tabs.sel].module[i].newposj>tab[$p.app.tabs.sel].module[l_id].newposj){tab[$p.app.tabs.sel].module[i].newposj-=1;}
				}
				if (tab[$p.app.tabs.sel].showType==0 || tab[$p.app.tabs.sel].module[l_id].format!='R') tab[$p.app.tabs.sel].module[l_id].destruct();
				//register the suppression
				var l_vars=[];
				if (tab[$p.app.tabs.sel].showType==0)
				{
					l_vars[0]=tab[$p.app.tabs.sel].module[l_id].col;}else{l_vars[0]=1;
				}
				$p.app.widgets.saveChanges(l_vars,l_id);

				tab[$p.app.tabs.sel].module.splice(l_id,1);
				l_ret=true;
			}
		}
		return l_ret;
	},
	/*
		$p.app.widgets.supFeed : remove the feeds information related to a removed RSS module
		inputs
			v_uniq : module uniq ID
			v_tab : tab sequence ID
	*/
	supFeed:function(v_uniq,v_tab)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		var i=0;
		while (tab[v_tab].feeds[i])
		{
			if (tab[v_tab].feeds[i].modUniq==v_uniq)
			{
				tab[v_tab].feeds.splice(i,1);
			}
			else
			{
				i++;
			}
		}
	},
	/*
		$p.app.widgets.endList : add a hidden module (used at the bottom of each column)
	*/
	endList:function()
	{
		var l_obj=null;
		l_obj=new Element('div',{ 'class':'necessary'} );
		// necessary to add an empty column
		l_obj.set('html',$p.img("s.gif",180,1));
		l_obj.setStyle('width', '100%'); 
		return l_obj;
	},
	/*
		$p.app.widgets.showHdr : display/hide the modules headers
		input : tab sequence ID
	*/
	showHdr:function(v_tab)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		if (tab[v_tab].controls=='Y')
		{
			//changeStyle("hmod","display","block");
			for (var i=0;i<tab[v_tab].module.length;i++)
			{
				$p.show("hmod"+tab[v_tab].id+"_"+tab[v_tab].module[i].uniq,"block");
			}
		}
		else
		{
			//if (!IE){$p.show("modules","none");} //FF bug fix
			//changeStyle("hmod","display","none");
			for (var i=0;i<tab[v_tab].module.length;i++)
			{
				$p.show("hmod"+tab[v_tab].id+"_"+tab[v_tab].module[i].uniq,"none");
			}
			//if (!IE) $p.show("modules","block"); //FF bug fix
			$p.app.pages.resize();
		}
	},
	/*
		$p.app.widgets.switchHdr : change the modules headers display status
	*/
	switchHdr:function()
	{
		tab[$p.app.tabs.sel].controls=(tab[$p.app.tabs.sel].controls=='Y')?'N':'Y';
		$p.app.widgets.showHdr();
	},
	/*
		$p.app.widgets.changeTab : move a module from one tab to another
		inputs
			v_desttab : destination tab sequence ID
			v_uniq : module uniq ID
	*/
	changeTab:function(v_desttab,v_uniq)
	{
		$p.ajax.call('scr_addmodule_othertab.php',
			{
				'type':'execute',
				'variables':"src="+tab[$p.app.tabs.sel].id+"&dest="+tab[v_desttab].id+"&tabdest="+v_desttab+"&uniq="+v_uniq,
				'alarm':false,
				'forceExecution':false,
				'callback':
				{
					'function':$p.app.widgets.addInNewTab
				}
			}
		);
		//update rss unread number (only in source tab, the other is reload)
		var l_modId=$p.app.widgets.uniqToId(v_uniq);
		if (tab[$p.app.tabs.sel].module[l_modId].format=="R")
		{
			tab[$p.app.tabs.sel].module[l_modId].nbunread=0;
			$p.app.widgets.rss.pageUnread($p.app.tabs.sel);
		}
	},
	/*
		$p.app.widgets.insertInTab : insert a new module in a tab
		inputs
			v_desttab : destination tab sequence ID
			v_id : module DB ID
	*/
	insertInTab:function(v_desttab,v_id,v_vars)
	{
		//get feed id
		var l_fid=$p.string.getVar(v_vars,'pfid');
		if (l_fid=='') l_fid=0;

		$p.ajax.call('scr_addmodule_intab.php',
			{
				'type':'execute',
				'variables':"dest="+tab[v_desttab].id+"&tabdest="+v_desttab+"&id="+v_id+"&fid="+l_fid+"&vars="+$p.string.esc(v_vars),
				'alarm':false,
				'forceExecution':false,
				'callback':
				{
					'function':$p.app.widgets.addInNewTab
				}
			}
		);

		$p.app.widgets.close();
	},
	/*
		$p.app.widgets.addInNewTab : reset destination tab when adding a module in another tab
		input : called XML file return string
	*/
	addInNewTab:function(v_ret)
	{
		if (v_ret==indef) return;
		var v_param=v_ret.split(/_/);
		//add module in new tab
		if (tab[v_param[2]].isLoaded==true)
		{
			tab[v_param[2]].isLoaded=indef;
			$p.print("tabextra"+v_param[2],"");
			//to be done : create twin module, place on bottom, change nbunread,...
		}
		//suppress module from old tab
		if (v_param[0]!="x") $p.app.widgets.suppress(v_param[0]);
	},
	/*
		$p.app.widgets.changeName : change module name
		inputs
			v_id : module sequence ID
			v_name : new module name
			v_tab : tab sequence ID of the module
	*/
	changeName:function(v_id,v_name,v_tab)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		if (v_name!=indef) tab[v_tab].module[v_id].name=v_name;
		var l_s=(__showModuleTitle?tab[v_tab].module[v_id].name:"");
		if (tab[v_tab].module[v_id].nbunread!=0) l_s="<a class='rssstatus' href='#' onmousedown='return $p.app.widgets.rss.readAll("+v_tab+","+v_id+")'>("+tab[v_tab].module[v_id].nbunread+")</a> "+l_s;
		$p.print("module"+tab[v_tab].id+"_"+tab[v_tab].module[v_id].uniq+"_h",l_s);
	},
	/*
		$p.app.widgets.changeIcon : change module Icon
		inputs
			v_id : module sequence ID
			v_icon : module icon
			v_tab : tab sequence ID of the module
	*/
	changeIcon:function(v_id,v_icon,v_tab)
	{
		if (!__showicon)return false;
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		if (v_icon!=indef)
		{
			var l_icon=v_icon;
		}
		else
		{
			var l_icon="../modules/pictures/"+tab[v_tab].module[v_id].icon;
		}
		$("module"+tab[v_tab].id+"_"+tab[v_tab].module[v_id].uniq+"_icon").src=l_icon;
	},	
	/*
		$p.app.widgets.initMove : init modules move
		input : tab sequence ID of the modules
	*/
	initMove:function(v_tab)
	{
		if(tab[v_tab].moveIsInit)return;
		tab[v_tab].moveIsInit=true;
		for(var l_item=0;l_item<tab[v_tab].root.childNodes.length;l_item++)
		{
			var l_mod=tab[v_tab].root.childNodes[l_item];
 			$p.app.widgets.move.set(l_mod,"module",tab[v_tab].root,"multidim",true,v_tab);
		}
	},
	/*
		$p.app.widgets.enableMoving ; display and initialize bars for widget move and configuration
		input : tab array position where widgets are
	*/
	enableMoving:function(v_tab)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;

		if (tab[v_tab].controls=='Y')
		{
			$p.app.widgets.showHdr(v_tab);
		}
		//$p.app.pages.displayItems(v_tab); ??
		tab[v_tab].moveIsInit=false;
		useMod=true;
		$p.app.pages.displayItems(v_tab);
	},
	/*
		$p.app.widgets.align : manage modules alignment
		input : v_align=true if modules are aligned
	*/
	align:function(v_align)
	{
		var l_var=[];
		if (v_align)
		{
			for (var i=0;i<tab[$p.app.tabs.sel].module.length;i++)
			{
				tab[$p.app.tabs.sel].module[i].newx=(20+(i*30));
				tab[$p.app.tabs.sel].module[i].newy=(120+(i*30));
			}
		}
		//save new position
		$p.app.widgets.saveChanges(l_var);
		//regenerate the page
		tab[$p.app.tabs.sel].moduleAlign=!v_align;
		//pages.open();
		$p.app.pages.clean(tab[$p.app.tabs.sel].root);
		if (v_align)
		{
			for (var i=0;i<tab[$p.app.tabs.sel].module.length;i++)
			{
				tab[$p.app.tabs.sel].module[i].x=tab[$p.app.tabs.sel].module[i].newx;
				tab[$p.app.tabs.sel].module[i].y=tab[$p.app.tabs.sel].module[i].newy;
			}
		}
		$p.app.pages.init($p.app.tabs.sel);
		$p.app.pages.computeFooterPosition();
	},
	/*
		$p.app.widgets.place : place all the modules of the selected tab
		inputs
			v_tab : selected tab sequence ID
	*/
	place:function(v_tab)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		if (v_tab==-1) return;
		if (!tab[v_tab].moduleAlign)
		{
			for (var i=0;i<tab[v_tab].module.length;i++)
			{
				var l_obj=$("module"+tab[v_tab].id+"_"+tab[v_tab].module[i].uniq);
				l_obj.setStyle("left",tab[v_tab].module[i].x+widgetDecalX+"px");
				l_obj.setStyle("top",tab[v_tab].module[i].y+widgetDecalY+"px");
			}
			$p.app.pages.computeFooterPosition();
		}
	},
	/*
		$p.app.widgets.open : load a new module
		inputs
			v_id: module DB ID
			v_vars : module parameters
			v_type : page type (portal,...)
	*/
	open:function(v_id,v_vars,v_type,v_secured,v_useOverview,v_waitForDisplay)
	{
		if (v_vars==indef) v_vars='';
		if (v_type==indef) v_type=$p.app.tabs.sel==-1?'uniq':'portal';
		if (v_useOverview==indef) v_useOverview=true;
		if (v_waitForDisplay==indef) v_waitForDisplay=true;
		if (v_secured)
		{
			var l_url='xmlitem.php?id='+v_id+'&rand='+rand;
		}
		else
		{
			var l_url='../cache/item_'+v_id+'.xml?rand='+rand;
		}

		$p.ajax.call(l_url,
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.widgets.displayMod,
					'variables':
					{
						'id':v_id,
						'vars':v_vars,
						'type':v_type,
						'useOverview':v_useOverview
					}
				},
				'asynchron':v_waitForDisplay
			}
		);
		return false;
	},
	/*
			$p.app.widgets.displayMod : display a new module in the page, or its overview
	*/
	displayMod:function(response,vars)
	{
		var l_s="",l_result,l_newId;
		if (response.getElementsByTagName("item")[0])
		{
			l_result=response.getElementsByTagName("item")[0];
			var l_size=$p.ajax.getVal(l_result,"size","int",false,100);
			var l_minwidth=$p.ajax.getVal(l_result,"minwidth","int",false,180);
			var l_sizable=$p.ajax.getVal(l_result,"sizable","int",false,1);
			var l_name=$p.ajax.getVal(l_result,"name","str",false,"--");
			var l_format=$p.ajax.getVal(l_result,"format","str",false,"I");
			var l_website=$p.ajax.getVal(l_result,"website","str",false,"");
			var l_nbvars=$p.ajax.getVal(l_result,"nbvars","int",false,0);
			var l_usereader=$p.ajax.getVal(l_result,"usereader","int",false,tab[$p.app.tabs.sel].usereader);
			var l_editor=$p.ajax.getVal(l_result,"editor","str",false,"");
			var l_editorid=$p.ajax.getVal(l_result,"editor_id","int",false,0);
			if (__useSharing) l_editor="<a href='../notebook/index.php?id="+l_editorid+"' target='_blank'>"+l_editor+"</a>";
			if (vars['vars']=='') vars['vars']=$p.ajax.getVal(l_result,"var","str",false,"");
			if (showNewMod) $p.app.widgets.close(vars['type']);
			l_newId=tab[$p.app.tabs.sel].module.length;
			// var url=l_result.getElementsByTagName("url")[0].firstChild.nodeValue+"pid="+$p.app.user.id+"&prof="+$p.app.tabs.selId+"&p="+l_newId;
			var l_url=$p.ajax.getVal(l_result,"url","str",false,"");
			//show overview if configured in admin panel
			if (vars['type']=="uniq" || $p.app.tabs.sel==-1 || (vars['useOverview'] && __useoverview && tab[$p.app.tabs.sel].moduleAlign))
			{
				l_s+='<br /><center><div id="col0" style="width:'+$p.max(l_minwidth,400)+'px"></div></center><br />';
				if (vars['type']=="portal")
				{
					l_s+="<center><input class='btn' type='button' value='"+lg("lblBtnModAdd")+"' onclick='tab[$p.app.tabs.sel].module[tab[$p.app.tabs.sel].module.length-1].placeinCol(1);$p.app.widgets.close();$p.app.popup.hide();' /></center>";
				}
				else
				{
					l_s+='<b><i>'+lg('moveToPlaceInTabs')+'</i></b>';
				}
				var l_desc=$p.ajax.getVal(l_result,"description","str",false,"");
				if (l_desc!='') l_s+='<br /><br /><b>'+lg('description')+'</b><br />'+l_desc;
				if (l_editorid!=0 && vars['id']!=86 && l_editor!="") l_s+="<br /><br /><b>"+lg("proposedBy")+"</b> : "+l_editor;
				//l_s+="<td rowspan='2' id=col"+(vars['type']=="portal"?"0":"1")+" style='width:400px;' class='menumodule'></td></tr><tr><td style='vertical-align: bottom;padding-bottom: 15px;'>";
				//l_s+="</td></tr></table></td></tr>";
				//l_s+="</table>";
				//$p.print("newmod",box(0,l_name+$p.img("star_yellow2_"+$p.ajax.getVal(l_result,"nota","int",false,0)+".gif",53,12),"$p.app.widgets.close('"+vars['type']+"')",l_s));
				$p.app.popup.show(l_s,$p.max(l_minwidth+20,500),indef,l_name+$p.img("star_yellow2_"+$p.ajax.getVal(l_result,"nota","int",false,0)+".gif",53,12),true,"$p.app.widgets.close('"+vars['type']+"')");
				//$p.show("newmod","block");
				tab[$p.app.tabs.sel].maxUniq++;

				if (vars['type']=="portal")
				{
					tab[$p.app.tabs.sel].cols[0]=$("col0");
					tab[$p.app.tabs.sel].module[l_newId]=new $p.app.widgets.object(0,0,0,l_size,vars['id'],l_website,l_name,vars['vars'],l_minwidth,l_sizable,400,l_url,150,150,tab[$p.app.tabs.sel].maxUniq,l_format,l_nbvars,tab[$p.app.tabs.sel].id,0,0,l_usereader);
					tab[$p.app.tabs.sel].module[l_newId].create();
					tab[$p.app.tabs.sel].module[l_newId].show();
					$p.app.widgets.showHdr();
				}
				else if (vars['type']=="uniq")
				{
					tab[$p.app.tabs.sel].cols[0]=$("col0");
					tab[$p.app.tabs.sel].module[l_newId]=new $p.app.widgets.object(0,1,1,l_size,vars['id'],l_website,l_name,vars['vars'],l_minwidth,l_sizable,400,l_url,150,150,1,l_format,l_nbvars,tab[$p.app.tabs.sel].id,0);
					tab[$p.app.tabs.sel].module[l_newId].create();
					tab[$p.app.tabs.sel].module[l_newId].show();
					tab[$p.app.tabs.sel].cols[0].appendChild($p.app.widgets.endList());

					$p.app.widgets.showHdr();
					tab[$p.app.tabs.sel].moveIsInit=false;

					useMod=true;
					$p.app.pages.displayItems();
				}
				showNewMod=true;
			}
			else
			{
				tab[$p.app.tabs.sel].maxUniq++;
				tab[$p.app.tabs.sel].module[l_newId]=new $p.app.widgets.object(-1,0,0,l_size,vars['id'],l_website,l_name,vars['vars'],l_minwidth,l_sizable,400,l_url,150,150,tab[$p.app.tabs.sel].maxUniq,l_format,l_nbvars,tab[$p.app.tabs.sel].id,0);
				tab[$p.app.tabs.sel].module[l_newId].create();
				tab[$p.app.tabs.sel].module[l_newId].show();
				tab[$p.app.tabs.sel].module[l_newId].placeinCol(1);
			}
		}
		else
		{
			$p.app.debug("Cache is not generated for this module","error");
		}
	},
	/*
			$p.app.widgets.close : destruct module object
	*/
	close:function(v_type)
	{
		// if last module created is not placed in the portal
		if (tab[$p.app.tabs.sel].module.length==0) return;
		var l_id=tab[$p.app.tabs.sel].module.length-1;
		if (tab[$p.app.tabs.sel].module[l_id].newcol==0 || v_type=="uniq")
		{
			$p.app.widgets.supFeed(tab[$p.app.tabs.sel].maxUniq);
			tab[$p.app.tabs.sel].module[l_id].destruct();
			delete(tab[$p.app.tabs.sel].module[l_id]);
			tab[$p.app.tabs.sel].module.length-=1;
			tab[$p.app.tabs.sel].maxUniq--;
		}
		//$p.print("newmod","");
		//$p.show("newmod","none");
		showNewMod=false;
	}
}

$p.app.widgets.param={
	/*
		$p.app.widgets.param.show : display module configuration area
		input : module Uniq ID
	*/
	show:function(v_uniq)
	{
		tab[$p.app.tabs.sel].module[$p.app.widgets.uniqToId(v_uniq)].bringToFront();
		if ($p.isShown("editbar"+tab[$p.app.tabs.sel].id+"_"+v_uniq)) {$p.app.widgets.param.hide(v_uniq);}
		else {$p.show("editbar"+tab[$p.app.tabs.sel].id+"_"+v_uniq,"block");}
		return false;
	},
	/*
		$p.app.widgets.param.hide : hide module configuration area
		input : module Uniq ID
	*/
	hide:function(v_uniq)
	{
		$p.show("editbar"+tab[$p.app.tabs.sel].id+"_"+v_uniq,"none");
		return false;
	},
	/*
		$p.app.widgets.param.fillEditBox : fill in module configuration area
		inputs
			response : configuration options XML response
			v_uniq : module uniq ID
			v_tab : tab sequence ID
	*/
	fillEditBox:function(response,v_uniq,v_tab)
	{
		//generate edit box for a module
		if (v_tab==indef) v_tab=$p.app.tabs.sel;

		l_s='<form name="editform'+tab[v_tab].id+'_'+v_uniq+'" onsubmit="return $p.app.widgets.param.valid('+v_uniq+');">';

		var l_id=$p.app.widgets.uniqToId(v_uniq,v_tab);
		//var ptitl=module[l_id].name;
		var ptitl=($p.string.getVar(tab[v_tab].module[l_id].vars,"ptitl")==""?tab[v_tab].module[l_id].name:$p.string.unesc($p.string.getVar(tab[v_tab].module[l_id].vars,"ptitl")));
	
		if (tab[v_tab].module[l_id].format!='R' || tab[v_tab].showType==0)
		{
			l_s+='<table cellpadding="2" cellspacing="0" width="90%">'
				+'<tr>'
				+'<td>'
				+lg("lblModuleTitle")
				+'</td>'
				+'<td>'
				+'<input type="text" name="ptitl" size="18" value="'+$p.string.doubleToSimpleCot(ptitl)+'" />'
				+'</td>'
				+'</tr>';

			if (__barcolnb>1)
			{
				l_s+='<tr>'
					+'<td>'
					+lg('lblBarColor')
					+'</td>'
					+'<td>'
					+'<ul style="margin: 0px;padding: 0px;">'
					+'<li class="barstyle0" onclick="return $p.app.widgets.param.setBColor('+v_uniq+')" style="margin: 2px;display: block;width: 20px;height: 20px;list-style: none;float:left;">'+$p.img("s.gif",18,18,"","barcoli","barcol"+tab[v_tab].id+"_"+v_uniq+"-")+'</li>';

				for (var i=1;i<=__barcolnb;i++)
				{
					l_s+='<li class="barstyle'+i+'" onclick="return $p.app.widgets.param.setBColor('+v_uniq+','+i+')" style="margin: 2px;display: block;width: 20px;height: 20px;list-style: none;float:left;">'+$p.img("s.gif",18,18,"","barcoli","barcol"+tab[v_tab].id+"_"+v_uniq+"-"+i)+'</li>';
				}
				l_s+='</ul>'
					+'<input type="hidden" name="bcolor" value="" />';
					+'</td>'
					+'</tr>';
			}
			var i=0;
			while (response && response.getElementsByTagName("UserPref")[i])
			{
				var l_pref=response.getElementsByTagName("UserPref")[i];
				var l_type=$p.ajax.getProp(l_pref,"datatype","str",true,"string");
				if (l_type!="hidden") l_s+="<tr><td>"+lg($p.ajax.getProp(l_pref,"display_name","str",false,""))+"</td><td>";
				var l_name=$p.ajax.getProp(l_pref,"name","str",true,"");
				var l_selValue=$p.string.getVar(tab[v_tab].module[l_id].vars,l_name);
				var l_def=(l_selValue=="")?lg($p.ajax.getProp(l_pref,"default_value","str",false,"")):l_selValue;
				switch(l_type)
				{
					case "enum":
					l_s+="<select name='"+l_name+"'>";
					var j=0;
					while(l_pref.getElementsByTagName("EnumValue")[j])
					{
						var l_opt=l_pref.getElementsByTagName("EnumValue")[j];
						var l_optValue=$p.ajax.getProp(l_opt,"value","str",false,"")
						l_s+="<option value='"+l_optValue+"'"+((l_optValue==l_def)?" selected='selected'":"")+">"+lg($p.ajax.getProp(l_opt,"display_value","str",false,l_optValue))+"</option>";
						j++;
					}
					l_s+="</select>";
					break;
					case "string":
					l_s+="<input type='text' name='"+l_name+"' value='"+l_def+"' size='24' />";
					break;
					case "readonly":
					l_s+="<input type='text' name='"+l_name+"' value='"+l_def+"' size='24'"+($p.navigator.IE?" disabled='disabled'":"")+" />";
					break;
					case "password":
					l_s+="<input type='password' name='"+l_name+"' value='"+l_def+"' size='24' />";
					break;
					case "hidden":
					l_s+="<input type='hidden' name='"+l_name+"' value='"+l_def+"' />";
					break;
					case "bool":
					l_s+="<input type='checkbox' name='"+l_name+"'"+((l_def==1)?" checked='checked'":"")+" />";
					break;
				}
				
				if (l_type!="hidden")
				{
					l_s+='</td>'
						+'</tr>';
				}

				i++;
			}
			if ($p.app.widgets.showAdminProperties)
			{
				l_s+='<tr>'
					+'<td class="tophr">'
					+lg("lblFixedModule")
					+'</td>'
					+'<td class="tophr">'
					+'<input type="checkbox" name="admblocked"'+(tab[v_tab].module[l_id].blocked?' checked="checked"':'')+' />'
					+'</td>'
					+'</tr>';
			}

			l_s+='<tr>'
				+'<td colspan="2" align="center" style="padding-top: 5px;">'
				+'<input class="submit" type="submit" value="'+lg("lblBtnValid")+'" /> '
				+'<input class="btn" type="button" onclick="return $p.app.widgets.param.hide('+v_uniq+');" value="'+lg("lblClose")+'" />'
				+'</td>'
				+'</tr>'
				+'</table>'
				+'</form>';

			$p.print("editbar"+tab[v_tab].id+"_"+v_uniq,l_s);
			$p.app.widgets.param.setBColor(v_uniq,$p.string.getVar(tab[v_tab].module[l_id].vars,"bcolor"),v_tab);
			$p.app.widgets.changeName(l_id,ptitl,v_tab);
		}
	},
	/*
		$p.app.widgets.param.valid : save configuration changes for a module
		input : module uniq ID
	*/
	valid:function(v_uniq)
	{
		var l_form=document.forms["editform"+tab[$p.app.tabs.sel].id+"_"+v_uniq];
		var i=0,l_var,l_vars=[],l_refreshAll=false;
		var l_id=$p.app.widgets.uniqToId(v_uniq);
		while(l_form.elements[i])
		{
			l_var="";
			switch($p.string.lc(l_form.elements[i].type))
			{
				case "text":
				case "password":
				case "select-one":
				case "hidden":
					//l_var=l_form.elements[i].name+"="+$p.string.esc(l_form.elements[i].value);break;
					//1.4.3 fix : for url, _esc is required. For titles, _esc is altering accentuated signs
					l_var=l_form.elements[i].name+"="+(l_form.elements[i].name=="rssurl"?$p.string.esc(l_form.elements[i].value):l_form.elements[i].value);
					break;
				case "checkbox":
				case "radio":
					l_var=(l_form.elements[i].checked?l_form.elements[i].name+"=1":l_form.elements[i].name+"=0");break;
			}
			if ((l_form.elements[i].name).substr(0,3)=="adm")
			{
				if (l_form.elements[i].name=="admblocked")
				{
					//the entire module needs to be refresh -> only solution: refresh all the modules
					if (tab[$p.app.tabs.sel].module[l_id].blocked!=l_form.elements[i].checked) 
						l_refreshAll=true;
					tab[$p.app.tabs.sel].module[l_id].blocked=l_form.elements[i].checked;
				}
			}
			else
			{
				if (l_var!="")l_vars.push(l_var);
			}
			i++;
		}
		var l_qs=l_vars.join("&");
		//if title has changed or not
		if (tab[$p.app.tabs.sel].module[l_id].name!=$p.string.getVar(l_qs,"ptitl"))
		{
			$p.app.widgets.changeName(l_id,$p.string.getVar(l_qs,"ptitl"));
		}
		//if icon is set, keep it
		if ($p.string.getVar(tab[$p.app.tabs.sel].module[l_id].vars,"icon")!="") l_qs+="&icon="+$p.string.getVar(tab[$p.app.tabs.sel].module[l_id].vars,"icon");
		tab[$p.app.tabs.sel].module[l_id].changeVar("",l_qs);
		
		if (l_refreshAll)
		{
			$p.app.pages.init($p.app.tabs.sel);
			$p.app.widgets.param.hide(v_uniq);
		}
		else
		{
			tab[$p.app.tabs.sel].module[l_id].refresh();
			tab[$p.app.tabs.sel].module[l_id].hdrColor();
			$p.app.widgets.param.hide(v_uniq);
		}
		return false;
		
	},
	/*
		$p.app.widgets.param.getModuleParam : load module configuration
		inputs
			v_id : module sequence ID
			v_tab : tab sequence ID
	*/
	getModuleParam:function(v_id,v_tab)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		//var l_url=(tab[v_tab].module[v_id].url).replace(".php","_param.xml");
		switch ($p.app.env)
		{
			case "tutorial":
				var l_url="../modules/tmp_module"+tab[v_tab].module[v_id].id+"_param.xml";
				break;
			case "portal":
				var l_url="../modules/module"+tab[v_tab].module[v_id].id+"_param.xml";
				break;
			default:
				var l_url="../modules/module"+tab[v_tab].module[v_id].id+"_param.xml";
				break;
		}
		l_url=l_url.replace(/\?/g,"");

		$p.ajax.call(l_url,
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.widgets.param.treatModuleParam,
					'variables':
					{
						'widgetid':tab[v_tab].module[v_id].uniq,
						'tabpos':v_tab
					}
				},
				'source':'xml'
			}
		);
	},
	/*
		$p.app.widgets.param.treatModuleParam : initialize module configuration
	*/
	treatModuleParam:function(response,vars)
	{
		if (response.getElementsByTagName("Module")[0])
		{
			var l_mod=response.getElementsByTagName("Module")[0];
			$p.app.widgets.param.fillEditBox(l_mod,vars['widgetid'],vars['tabpos']);
		}
	},
	/*
		$p.app.widgets.param.setBColor : define module header color
		inputs
			v_uniq : module Uniq ID
			v_color : color number (of CSS file)
			v_tab : tab sequence ID
	*/
	setBColor:function(v_uniq,v_color,v_tab)
	{
		//get the new color number in the form
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		if (!v_color) v_color="";
		if (!document.forms["editform"+tab[v_tab].id+"_"+v_uniq]) return false;
		document.forms["editform"+tab[v_tab].id+"_"+v_uniq].bcolor.value=v_color;
		//change selected image border
		($("barcol"+tab[v_tab].id+"_"+v_uniq+"-")).className="barcoli";
		for (var i=1;i<=__barcolnb;i++)
		{
			($("barcol"+tab[v_tab].id+"_"+v_uniq+"-"+i)).className="barcoli";
		}
		($("barcol"+tab[v_tab].id+"_"+v_uniq+"-"+v_color)).className="barcola";
		return false;
	}
}

//==================================  MANAGE WIDGET MOVES ==============================================

$p.app.widgets.move={
	obj:null,
	status:"",
	/*
		$p.app.widgets.move.init : init module move
		input : module object
	*/
	init:function(mObj)
	{
		mObj.onmousedown=$p.app.widgets.move.start;
		var l_obj=$p.app.widgets.move.shadow();
		
		if(isNaN(l_obj.style.left.toInt())) l_obj.setStyle("left","0px");
		if(isNaN(l_obj.style.top.toInt())) l_obj.setStyle("top","0px");
		mObj.onDragStart=new Function();
		mObj.onDragEnd=new Function();
		mObj.onDrag=new Function();
	},
	/*
		$p.app.widgets.move.start : start object move
		input : mouse event object
	*/
	start:function(e)
	{       
		if (this!=indef && this.id!=indef) $p.app.widgets.move.obj=this;
		var mObj=$p.app.widgets.move.obj;
		e=$p.app.widgets.move.fixE(e);
		//change the css style to draw a shadow
		var l_obj=$p.app.widgets.move.shadow();
		mObj.onDragStart(l_obj.style.left.toInt(),l_obj.style.top.toInt(),e.clientX,e.clientY);
		//recuperation des coordonnées souris
		
		mObj.lastMouseX=e.clientX;
		mObj.lastMouseY=e.clientY;
		
		document.onmousemove=$p.app.widgets.move.drag;
		document.onmouseup=$p.app.widgets.move.end;

		//change the obj status
		$p.app.widgets.move.status="dragging";
		return false;
	}, 
	/*
		$p.app.widgets.move.drag : manage object move
		input : mouse event object
	*/
	drag:function(e)
	{
		//recuperation des coordonnées
		e=$p.app.widgets.move.fixE(e);
		var mObj=$p.app.widgets.move.obj;
		var mX=e.clientX;
		var mY=e.clientY;
		var posX,posY;
		var l_obj=$p.app.widgets.move.shadow();
		
		posX=l_obj.style.left.toInt()+mX-mObj.lastMouseX;
		posY=l_obj.style.top.toInt()+mY-mObj.lastMouseY;		
		l_obj.setStyle("left",posX+"px");
		l_obj.setStyle("top",posY+"px");
		mObj.lastMouseX=mX;
		mObj.lastMouseY=mY;

		if ($p.navigator.IE)
		{
			mObj.onDrag((mX+document.documentElement.scrollLeft),(mY+document.documentElement.scrollTop));
		}
		else
		{
			mObj.onDrag(e.pageX,e.pageY);
		}
		return false;
	}, 
	/*
		$p.app.widgets.move.end : stop module move
	*/
	end:function()
	{
		document.onmousemove=null;
		document.onmouseup=null;
		var l_obj=$p.app.widgets.move.shadow();
		$p.app.widgets.move.obj.onDragEnd(l_obj.style.left.toInt(),l_obj.style.top.toInt());
		$p.app.widgets.move.obj=null;
		$p.app.widgets.move.status="";
	},
	fixE:function(e)
	{
		if(e==indef && window.event) e=window.event;
		if(typeof e.layerX=="undefined")e.layerX=e.offsetX;
		if(typeof e.layerY=="undefined")e.layerY=e.offsetY;
        return e;
	},
	/*
		$p.app.widgets.move.shadow : create module shadow on move
	*/
	shadow:function()
	{
		if(!mDivObj || mDivObj==null)
		{
			if (createDivDynamically)
			{
				mDivObj = new Element('div',
					{
						'styles':
						{
							'display': 'block',
							'position': 'absolute',
							'cursor': 'move',
							'backgroundColor': '#c6c3c6',
							'paddingBottom': '0px'
						}
					}
				);
				document.body.appendChild(mDivObj);
			}
			else
			{
				mDivObj=$("moveddiv");
			}
		}
		return mDivObj;
	},
	/*
		$p.app.widgets.move.hideShadow : hide module shadow after move
	*/
	hideShadow:function()
	{
		$p.app.widgets.move.shadow().setStyle("display","none");
		//IE bug : after module move, $p.app.widgets.param.valid was not working any more
		$p.app.pages.clean(mDivObj);
	},
	/*
		$p.app.widgets.move.formatShadow : format the shadow based on the original object
		input : original object HTML code
	*/
	formatShadow:function(v_content)
	{
		v_content=$p.string.lc(v_content);
		//** suppress the iframes
		while(v_content.indexOf("<iframe")!=-1)
		{
			var l_p1=v_content.indexOf("<iframe");
			var l_p2=v_content.indexOf("</iframe>")+9;
			v_content=v_content.substr(0,l_p1)+v_content.substr(l_p2,v_content.length);
		}
		//other events during drag could interfert
		v_content=v_content.replace(/onmouseover=/g,"");
		v_content=v_content.replace(/onmouseout=/g,"");
		return v_content;
	},
	/*
		$p.app.widgets.move.set : initialize objects move (modules, tabs, ...)
		inputs
			v_obj : object initialized
			v_type : object type : module / tab
			v_parent : parent object of the moved object
			v_direction : allowed move directions : horizontal / vertical / multidim
			v_usecache : is the cache div initialized on move
			v_extra : extra information
	*/
	set:function(v_obj,v_type,v_parent,v_direction,v_usecache,v_extra)
	{
		var l_obj=$(v_obj.id+"_h");
		// if the node is not recognize as a moving object, go to next node
		if(!l_obj)return;
		if (v_type=="module")
		{
			if (v_extra==indef) v_extra=$p.app.tabs.sel;
			//Check that module is movable
			var l_id=$p.app.widgets.getModuleId(v_obj);
			if (tab[v_extra].module[l_id].blocked) return;
		}
		// move cursor on bar mouseover
		l_obj.setStyle("cursor","move");
		l_obj.objMoved=v_obj;
		$p.app.widgets.move.init(l_obj);
		// manage an url in the object header
		var l_uObj=$(v_obj.id+"_u");  
		
		if(l_uObj)
		{
			if (l_uObj.href==window.location.href || l_uObj.href==window.location.href+"#")
			{
				l_uObj.onmousedown=l_uObj.onclick;
			}
			else
			{
				l_uObj.onmousedown=function(){window.open(this.href);}
			}
		}
		l_obj.onDragStart=function()
		{
//			$p.app.popup.hide();

			var l_selObj=this.objMoved;
			$p.app.widgets.move.setPos(l_selObj,v_parent);
			l_selObj.origNextSibling=l_selObj.nextSibling;
			
			// dragged object building - when the object's beeing dragged, a special style is defined.
			var mDivObj=$p.app.widgets.move.shadow();
			mDivObj.setStyle("zIndex",1000);
			
			mDivObj.style.left=$p.getPos(l_selObj,"Left")+"px";
			mDivObj.style.top=$p.getPos(l_selObj,"Top")+"px";
			
			mDivObj.setStyle("height",l_selObj.offsetHeight+"px");
			mDivObj.setStyle("width",l_selObj.offsetWidth+"px");
			mDivObj.setStyle("display","block");
			mDivObj.setOpacity("0.6");
			mDivObj.setStyle("filter","alpha(opacity=60)");
			mDivObj.set('html',(v_type=="module")?$p.app.widgets.move.formatShadow(l_selObj.innerHTML):l_selObj.innerHTML);
			mDivObj.className=l_selObj.className;

			this.isDrag=false;
			if (v_usecache) $p.app.cache.show("block");
		} ;
		
		
		l_obj.onDrag=function(v_x,v_y)
		{
			if (tab[$p.app.tabs.sel].moduleAlign)
			{
				this.canBeReleased=objMove(this.objMoved,v_x,v_y,v_parent,v_direction,v_type);
			}
			else
			{
				this.canBeReleased=objFreeMove(this.objMoved,v_x,v_y,v_parent,v_direction,v_type);
			}
			this.isDrag=true;
			$p.app.widgets.dragging=true;
		} ;
		
		l_obj.onDragEnd=function(v_x,v_y)
		{
			$p.app.widgets.move.hideShadow();
			if (!$p.navigator.IE) $p.app.pages.resize();
			if(this.isDrag && this.canBeReleased)
			{
				var l_uniq=this.objMoved.id.replace(v_type,"");
				if (v_type=="module")
				{
					l_uniq=l_uniq.substr(l_uniq.indexOf("_")+1);
					l_id=$p.app.widgets.uniqToId(l_uniq);
					
					tab[$p.app.tabs.sel].module[l_id].newx=v_x-widgetDecalX;
					tab[$p.app.tabs.sel].module[l_id].newy=v_y-widgetDecalY;

					//if inside the widget area, or over a tab !
					if ((tab[$p.app.tabs.sel].module[l_id].newx>0 || $p.app.tabs.overtabid!=-1) && tab[$p.app.tabs.sel].module[l_id].newy>0)
					{
						//set module position if modules are not aligned
						if (!tab[$p.app.tabs.sel].moduleAlign)
						{
							this.objMoved.setStyle("left",v_x+"px");
							this.objMoved.setStyle("top",v_y+"px");
						}
						var l_vars=[];
						if (tab[$p.app.tabs.sel].showType==0)
						{
							//chekc if widget has changed column
							var l_old=tab[$p.app.tabs.sel].module[l_id].col;
							var l_new=this.objMoved.parentNode.id.replace(/col/,"");
							if (l_old==l_new){l_vars[0]=l_old;} else {l_vars[0]=l_old;l_vars[1]=l_new;}
						}
						else
						{
							l_vars[0]=1;
						}
						//if not in a user page -> create else ->change tab
						//if ($p.app.tabs.sel==indef){				
						//l_vars  contains the two informations like X,Y x is the source tab, Y the destination tab
						//l_id       the module id
						$p.app.widgets.saveChanges(l_vars);

						if ($p.app.tabs.selId==0)
						{
							if ($p.app.tabs.overtabid!=-1)
							{
								$p.app.widgets.insertInTab($p.app.tabs.overtabid,tab[$p.app.tabs.sel].module[l_id].id,tab[$p.app.tabs.sel].module[l_id].vars);
							}
						}
						else
						{
							if ($p.app.tabs.overtabid!=-1)
							{
								$p.app.widgets.changeTab($p.app.tabs.overtabid,l_uniq);
							}
						}
						$p.app.tabs.moduleOutAll();
						//define modules display order
						if (!tab[$p.app.tabs.sel].moduleAlign)
						{
							for (var i=0;i<tab[$p.app.tabs.sel].module.length;i++)
							{
								($("module"+tab[$p.app.tabs.sel].id+"_"+tab[$p.app.tabs.sel].module[i].uniq)).setStyle("zIndex",1);
							}
							this.objMoved.setStyle("zIndex",1000);

							$p.app.pages.computeFooterPosition();
						}
					}
				}
				if (v_type=="tab"){$p.app.tabs.save(l_uniq);}
				if (v_type=="admpage"){admPages.save(l_uniq);}
			}
			if (v_usecache) $p.app.cache.show("none");
			this.setStyle("zIndex",1);
			$p.app.widgets.dragging=false;
		}
	},
	/*
		$p.app.widgets.move.setPos : set object position during move
		inputs
			v_obj : object moved
			v_parent : parent object
	*/
	setPos:function(v_obj,v_parent)
	{
		var l_lstNb=v_parent.length?v_parent.length:2;
		for (var j=1;j<l_lstNb;j++)
		{
			var l_decalY=0;
			var l_lst=v_parent.length?v_parent[j]:v_parent;
			for (var i=0;i<l_lst.childNodes.length;i++)
			{
				var l_node=l_lst.childNodes[i];
				//** if the node is the treated div one, the next nodes must be moved up by div height
				if (l_node==v_obj) decalY=l_node.offsetHeight;
				//** set the position of each nodes (use of decalY for modules under the one moved)
				
				l_node.pagePosLeft=$p.getPos(l_node,"Left");
				l_node.pagePosTop=$p.getPos(l_node,"Top")-l_decalY;
			}
		}
	}
}

//****************************************************************************************************************************************************
//**
//**                                     RSS FEEDS
//**
//****************************************************************************************************************************************************

$p.app.widgets.rss={
	/*
		$p.app.widgets.rss.object : RSS articles class
		inputs
			id : uniq id of the article
			modId : id of the module where the article is
			modUniq : uniq ID of the module where the article is
			modName : name of the module
			title : title of the article
			link : link of the article
			image : image of the article (optional)
			date : publication date of the article
			desc : description of the article
			read : read status of the article (true=read, false=not read)
			source : source of the article
	*/
	//object:function(id,modId,modUniq,modName,title,link,image,date,desc,read,source)
	object:function(id,modUniq,modName,title,link,image,date,desc,isRead,source)
	{
		this.id=id;
		//this.modId=modId;
		this.modUniq=modUniq;
		this.modName=modName;
		this.title=title;
		this.link=link;
		this.image=image;
		this.date=date;
		this.desc=desc;
		this.isRead=(isRead==indef?0:isRead);
		this.source=source;
	},
	summary:function(){
		var l_s="";
		l_s+="<div id='rsstoparticles'></div>";
		$p.print(v_div,l_s);

		$p.app.widgets.rss.getTopArticles();
	},
	opmlfile:"",
	/*
		$p.app.widgets.rss.checkFeed : test feed
		input : rss feed url
	*/
	checkFeed:function(v_rss,v_name)
	{
		var l_rss=v_rss==indef?document.forms['rss'].vars.value:v_rss;
		if (!$p.navigator.ishttp(l_rss)) l_rss="http://"+l_rss;
		l_rss=$p.string.esc(l_rss);
		
		var l_auth=(document.forms['rss'] && document.forms['rss'].pass)?$p.Base64.encode(document.forms['rss'].login.value+":"+document.forms['rss'].pass.value):indef;
		var l_callbackvars={'rss':l_rss,'auth':l_auth,'name':v_name};
		var l_url,l_vars,l_method='POST';
		// define loading parameters depending on platform configuration
		if (__useproxy)
		{
			if (__proxypacfile=="")	
			{
				l_url='../portal/xmlvalidrssproxy.php';
				l_vars="url="+l_rss+(l_auth==indef?"":"&auth="+l_auth);
			}
			else
			{
				if (getProxy(l_rss)=="")
				{
					if (l_auth==indef)
					{
						l_url='../portal/xmlvalidrss.php';
						l_vars="url="+l_rss;
					}
					else
					{
						l_url='../portal/xmlvalidrssauth.php';
						l_vars="url="+l_rss+"&auth="+l_auth;
					}
				}
				else
				{
					l_url='../portal/xmlvalidrssproxy.php';
					l_vars="proxy="+getProxy(l_rss)+"&url="+l_rss+(l_auth==indef?"":"&auth="+l_auth);
				}
			}
		}
		else
		{
			if (l_auth==indef)
			{
				l_url='../portal/xmlvalidrss.php';
				l_vars="url="+l_rss;
			}

			else
			{	
				l_url='../portal/xmlvalidrssauth.php';
				l_vars="auth="+l_auth+"&url="+l_rss;
			}
		}
		$p.ajax.call(l_url,
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.widgets.rss.checkFeedXml,
					'variables':l_callbackvars
				},
				'source':'html',
				'variables':l_vars,
				'method':l_method
			}
		);

		//rss checks notification
		$p.print("authrss",$p.img("ico_waiting.gif",16,16,"","imgmid")+" "+lg("checkingFeed"));
		$p.show("authrss","block");
		return false;
	},
	/*
		$p.app.widgets.rss.checkFeedXml : analyze feed testing return
	*/
	checkFeedXml:function(response,vars)
	{
		if (response.indexOf("<?xml")==-1 && response.indexOf("<rss")==-1)
		{
			if (response=="401")
			{
				$p.app.widgets.rss.authentification();
				return false;
			}
			if (response=="407")
			{
				$p.app.alert.show(lg("proxyRejectConnection"));
				$p.show("authrss","none");
				return false;
			}
			if (response.length==3 && response.substr(0,1)=="4")
			{
				$p.app.alert.show(lg("msgIncorrectFeed")+" ("+response+")");
				$p.show("authrss","none");
				$p.app.debug("HTTP Error code : "+response,"error");
				return false;
			}
			
			//if HTML page instead of xml, check if HTML page propose rss links
			var l_tags=$p.string.simulateGetElementsByTagName(response,"link");
			var l_links="";
			if (l_tags.length>0)
			{
				for (var i=0;i<l_tags.length;i++)
				{
					if (l_tags[i]["type"]=="application/rss+xml")
					{
						l_links+="<div style='margin:2px;padding:2px;background-color:#efefef;border:1px solid #c6c3c6;'><a href='#' onclick=\"$p.app.widgets.rss.checkFeed('"+($p.navigator.ishttp(l_tags[i]["href"])?l_tags[i]["href"]:document.forms['rss'].vars.value+"/"+l_tags[i]["href"])+"')\">"+(l_tags[i]["title"]).substr(0,35)+"</a></div>";
					}
				}
				if (l_links!="") l_links="<br />"+lg("availableFeedsForThisSite")+" :"+l_links;
			}
			if (l_links=="")
			{
				$p.app.alert.show(lg("msgIncorrectFeed"));
				$p.show("authrss","none");
				$p.app.debug("RSS Feed invalid. XML returned : "+response,"error");
			}
			else
			{
				$p.print("authrss",l_links);
				$p.show("authrss","block");
			}
		}
		else
			$p.app.widgets.rss.getFeed(vars);
		
		return false;
	},
	/*
		$p.app.widgets.rss.authentification : open authentification box to access authentified feed
	*/
	authentification:function()
	{
		$p.print("authrss","<font style='color:#ff0000'>"+lg("lblProtectedFeed")+"</font><br /><table><tr><td>"+lg("lblLogin")+"</td><td><input name='login' type='text' size='10' /></td></tr><tr><td>"+lg("lblPassword")+"</td><td><input name='pass' type='password' size='10' /></td></tr><tr><td></td><td><input type='submit' class='btn' value='Go' /></td></tr></table>");
		$p.show("authrss","block");
	},
	/*
		$p.app.widgets.rss.getFeed : register feed information in DB
		inputs
			vars : feed information
			v_fct : function called to display module
	*/
	getFeed:function(vars,v_fct)
	{
		if (v_fct==indef) v_fct=$p.app.widgets.rss.getFeedXml;
		if (__useproxy)
		{
			if (__proxypacfile=="")
			{
				getXml("../portal/xmlcheckfeedproxy.php",v_fct,vars,"xml","url="+vars['rss'],"POST");
			}
			else
			{
				if (getProxy(vars['rss'])=="")
				{
					getXml("../portal/xmlcheckfeed.php",v_fct,vars,"xml","url="+vars['rss'],"POST");
				}
				else
				{
					getXml("../portal/xmlcheckfeedproxy.php",v_fct,vars,"xml","proxy="+getProxy(vars['rss'])+"&url="+vars['rss'],"POST");
				}
			}
		}
		else
		{
			getXml("../portal/xmlcheckfeed.php",v_fct,vars,"xml","url="+vars['rss'],"POST");
		}
		return false;
	},
	/*
		$p.app.widgets.rss.getFeedXml : treat checkfeed response
	*/
	getFeedXml:function(response,vars)
	{	
		if (response.getElementsByTagName("error")[0])
		{
			$p.app.alert.show(lg("msgIncorrectFeed"));
			$p.show("authrss","none");
		}
		else
		{
			l_id=$p.ajax.getVal(response,"id","int",false,0);
			$p.app.widgets.rss.showMod(vars['rss'],l_id,vars['auth'],vars['name']);
		}
	},
	/*
		$p.app.widgets.rss.showmod : open RSS module
		inputs
			v_rss : rss feed url
			v_id : rss feed DB ID
			v_auth : authentification string
	*/
	showMod:function(v_rss,v_id,v_auth,v_name)
	{
		//suppress checking feed notification
		$p.show("authrss","none");
		if ($p.app.tabs.sel=="999")
		{
			$p.navigator.openLink("../tutorial/rssaddtodirectory_step2.php?id="+v_id+(v_auth==indef?"":"&auth="+v_auth));
		}
		else
		{
			$p.app.widgets.open(86,"pfid="+v_id+"&rssurl="+v_rss+"&icon=rss"+v_id+".ico"+(v_auth==indef?"":"&auth="+v_auth)+(v_name==indef?"":"&ptitl="+v_name));
		}
		return false;
	},
	/*
		$p.app.widgets.rss.refreshAll : Refresh all feeds in all opened page
	*/
	refreshAll:function()
	{
		for (var i=0;i<tab.length;i++)
		{
			if (tab[i].isLoaded==true)
			{
				if (tab[i].feeds.length>0)
				{
					$p.app.widgets.rss.init(i);
					tab[i].isLoaded=false;
					$p.app.tabs.refresh($p.app.tabs.sel);
				}
				if (i==$p.app.tabs.sel && tab[$p.app.tabs.sel].showType==1)
				{
					$p.app.widgets.rss.reader.refresh();
				}
				else
				{
					for (var j=0;j<tab[i].module.length;j++)
					{
						if (tab[i].module[j].format=='R')
						{
							tab[i].module[j].refresh();
						}
						else
						{
							if (tab[i].module[j].autorefresh) tab[i].module[j].refresh();
						}
					}
				}
			}
		}
	},
	/*
		$p.app.widgets.rss.reloadAndRefresh : refresh rss module in the tab selected
		input
			v_id : module sequence ID
			v_tab : tab sequence ID
	*/
	reloadAndRefresh:function(v_id,v_tab)
	{
		$p.app.widgets.rss.refresh(v_id,v_tab,true);
	},
	/*
		$p.app.widgets.rss.refresh : refresh rss module in the tab selected
		input
			v_id : module sequence ID
			v_tab : tab sequence ID
	*/
	refresh:function(v_id,v_tab,v_reloadData)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		$p.app.widgets.changeIcon(v_id,'../images/ico_waiting.gif',v_tab);

		//empty old feeds array
		if (v_reloadData)
		{
			tab[v_tab].module[v_id].isLoaded=false;
			$p.app.widgets.supFeed(tab[v_tab].module[v_id].uniq,v_tab);
		}
		var l_oldNb=$p.string.getVar(tab[v_tab].module[v_id].vars,"nb").toInt();
		var l_nb=(l_oldNb==0||isNaN(l_oldNb))?5:l_oldNb;
		//if no cache, add random number
		if (rssNoCache)
		{
			reset_rand();
			tab[v_tab].module[v_id].url+="pnocache="+rand+"&";
		}
		l_ext=$p.string.getVar(tab[v_tab].module[v_id].vars,"pwspecif");
		//get RSS feed
		if (__registerfeeds)
		{
			getXml("../portal/xmlfeeds"+l_ext+".php",$p.app.widgets.rss.display,new Array(v_id,l_nb,tab[v_tab].module[v_id].uniq,v_tab),"xml","rand="+rand+"&s="+tab[v_tab].module[v_id].start+"&"+tab[v_tab].module[v_id].vars,"POST");
		}
		else
		{
			getXml(tab[v_tab].module[v_id].url,$p.app.widgets.rss.display,new Array(v_id,l_nb,tab[v_tab].module[v_id].uniq,v_tab),"xml","rand="+rand+"&pid="+$p.app.user.id+"&prof="+tab[v_tab].id+"&p="+tab[v_tab].module[v_id].uniq+"&bar="+tab[v_tab].controls+"&"+tab[v_tab].module[v_id].vars,"POST");
		}
		return false;
	},
	/*
		$p.app.widgets.rss.deleteEntry : remove an article in an rss module
		input :	
			v_mod : widget  ID
			v_id : article sequence ID	
	*/
	deleteEntry:function(v_mod,v_id)
	{
		$p.ajax.call('scr_feed_changestatus.php',
			{
				'type':'execute',
				'variables':"delete=1&artId="+v_id+"&v_mod="+v_mod,
				'callback':
				{
					'function':$p.app.widgets.rss.reloadAndRefresh
				}
			}
		);
	},
	/*
		$p.app.widgets.rss.init : init rss modules in selected tab
		input : tab sequence ID
	*/
	init:function(v_tab)
	{
		// initialize feeds
		if (v_tab==indef) v_tab=tabs.sel;
		for (i=0;i<tab[v_tab].module.length;i++)
		{
			tab[v_tab].module[i].isLoaded=false;
		}
		tab[v_tab].feeds.length=0;
	},
	/*
		$p.app.widgets.rss.get : treat rss module articles
		inputs
			response : rss feed xml object
			v_modId : module sequence ID
			v_nb : number of articles to display
			v_tab : tab sequence ID
	*/
	get:function(response,v_modId,v_nb,v_tab)
	{
		// get module feeds
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		tab[v_tab].module[v_modId].nbunread=indef;//reset nb of unread articles
		
		if (response.getElementsByTagName("error")[0])
		{
			$p.app.debug($p.ajax.getVal(response,"error","str",false,"Unknown error"),"error");
		}
		if (response.getElementsByTagName("nbunread")[0])
		{
			tab[v_tab].module[v_modId].nbunread=(response.getElementsByTagName("nbunread")[0].firstChild.nodeValue).toInt();
		}
		if (response.getElementsByTagName("header")[0])
		{
			//if RSS, name is the URL of the RSS feed (only on current tab)
			if (tab[v_tab].module[v_modId].id==86 && v_tab==$p.app.tabs.sel)
			{
				var l_vars=$p.string.unesc(tab[v_tab].module[v_modId].vars);
				var l_p1=(l_vars.indexOf("rssurl=http://")==-1)?(l_vars.indexOf("rssurl=https://")+15):(l_vars.indexOf("rssurl=http://")+14);
				if (l_p1!=-1)
				{
					var l_p2=l_vars.indexOf("/",l_p1);
					if (l_p2==-1) l_p2=l_vars.indexOf("&",l_p1);
					if (l_p2==-1) l_p2=l_vars.length;
					tab[v_tab].module[v_modId].link=l_vars.substring(l_p1,l_p2);
					// if new feed in page, update the module title with feed title
					if ($p.string.getVar(tab[v_tab].module[v_modId].vars,"ptitl")=="") tab[v_tab].module[v_modId].changeVar("ptitl",$p.ajax.getVal(response,"ftitle","str",false,"RSS reader"));
					$p.app.widgets.changeName(v_modId,$p.string.getVar(tab[v_tab].module[v_modId].vars,"ptitl"),v_tab);
				}
			}

			tab[v_tab].module[v_modId].header=$p.ajax.getVal(response,"header","str",false,"");
			tab[v_tab].module[v_modId].footer=$p.ajax.getVal(response,"footer","str",false,"");
			tab[v_tab].module[v_modId].isLoaded=true;
			// fill edit box (only for current tab)
			$p.app.widgets.param.fillEditBox(response,tab[v_tab].module[v_modId].uniq,v_tab);
			var i=0,l_item,l_title,l_link,l_image,l_date,l_desc,l_read,l_id,l_source;

			while (i<v_nb && response.getElementsByTagName("item")[i])
			{
				l_item=response.getElementsByTagName("item")[i];
				l_id=$p.ajax.getVal(l_item,"id","str",false,tab[v_tab].feeds.length);
				l_title=$p.app.widgets.rss.secure($p.ajax.getVal(l_item,"title","str",false,"..."));
				l_source=$p.ajax.getVal(l_item,"source","str",false,"");
				//parse Source
				if (l_source.indexOf('<title')!=-1)
				{
					l_sourceArr=($p.string.simulateGetElementsByTagName(l_source,'title'));
					l_source=l_sourceArr[0]["content"];
				}
				l_source=$p.app.widgets.rss.secure(l_source);
				
				l_desc=$p.app.widgets.rss.secure($p.ajax.getVal(l_item,"content","str",false,"")==""?$p.ajax.getVal(l_item,"desc","str",false,""):$p.ajax.getVal(l_item,"content","str",false,""));
				l_link=$p.ajax.getVal(l_item,"link","str",false,"");
				l_read=$p.ajax.getVal(l_item,"read","int",false,0);
				l_date=(l_item.getElementsByTagName("pubdate")[0] && l_item.getElementsByTagName("pubdate")[0].firstChild)?$p.date.convertFromRss(l_item.getElementsByTagName("pubdate")[0].firstChild.nodeValue):new Date();
				if (l_title=="") l_title=lg("lblNoTitle");
				if (l_item.getElementsByTagName("audio")[0] && l_item.getElementsByTagName("audio")[0].firstChild) l_title+=" <a href='#' onclick=\"$p.app.reader.open('"+$p.ajax.getVal(l_item,"audio","str",false,"")+"','a')\">"+$p.img("ico_readmedia.gif",12,12,lg("lblListen"),"imgmid")+"</a>";
				if (l_item.getElementsByTagName("video")[0] && l_item.getElementsByTagName("video")[0].firstChild) l_title+=" <a href='#' onclick=\"$p.app.reader.open('"+$p.ajax.getVal(l_item,"video","str",false,"")+"','v')\">"+$p.img("ico_readmedia.gif",12,12,lg("lblWatch"),"imgmid")+"</a>";
				if (l_item.getElementsByTagName("image")[0] && l_item.getElementsByTagName("image")[0].firstChild)
					l_image=" src='"+$p.ajax.getVal(l_item,"image","str",false,"")+"' "+(($p.ajax.getProp(l_item.getElementsByTagName("image")[0],"width","str",false,"")=="")?"":" width="+$p.ajax.getProp(l_item.getElementsByTagName("image")[0],"width","str",false,""));
				else
					l_image="x";
				
				//tab[v_tab].feeds.push(new $p.app.widgets.rss.object(l_id,tab[v_tab].module[v_modId].id,tab[v_tab].module[v_modId].uniq,tab[v_tab].module[v_modId].name,l_title,l_link,l_image,l_date,l_desc,l_read,l_source));
				tab[v_tab].feeds.push(new $p.app.widgets.rss.object(l_id,tab[v_tab].module[v_modId].uniq,tab[v_tab].module[v_modId].name,l_title,l_link,l_image,l_date,l_desc,l_read,l_source));
				i++;
			}
			tab[v_tab].module[v_modId].isLoaded=true;
			$p.app.checkLoading(false,v_tab);
			return true;
		}
		return false;
	},
	/*
		$p.app.widgets.rss.display : display rss feed articles
	*/
	display:function(response,vars)
	{
		//display rss module content
		var l_tab=(vars[3]==indef?$p.app.tabs.sel:vars[3]);
		if (tab[l_tab].locked) return;
		var l_s="",l_item,l_title;
		var l_modId=vars[0];
		
		//bug correction : if a module is removed during its refresh or other module refresh
		if (!tab[l_tab].module[l_modId]) return;//if (!module[l_modId]) l_modId=$p.app.widgets.uniqToId(vars[2]);
		var l_auth=tab[l_tab].module[l_modId].auth;
		
		l_s+='<table cellpadding="0" cellspacing="0" width="100%">'
			+'<tr>'
			+'<td>';

		if (!tab[l_tab].module[l_modId].isLoaded && response!=indef) $p.app.widgets.rss.get(response,l_modId,(vars[1]==indef?10:vars[1]),l_tab);
		if (tab[l_tab].module[l_modId] && tab[l_tab].module[l_modId].isLoaded)
		{			
			l_s+=tab[l_tab].module[l_modId].header
				+'</td>'
				+'</tr>'
				+'<tr>'
				+'<td class="rss">'
				+'<table cellpadding="1" cellspacing="3" width="100%">';

			var i=0,j=0;	
			
			while (tab[l_tab].feeds[i] && (vars[1]==indef || j<vars[1]))
			{
				if (tab[l_tab].feeds[i].modUniq==tab[l_tab].module[l_modId].uniq)
				{
					var l_addedFct="";
					if ($p.app.user.id>0&&__useSharing) l_addedFct+="<td width='10'><a href='#' onclick='p_friends.menu(2,"+tab[l_tab].feeds[i].id+")'>"+$p.img("ico_share_s.gif",13,10,lg("lblShareInfo"))+"</a></td>";
					if ($p.app.user.id>0&&__useArchive) l_addedFct+="<td width='10'><a href='#' onclick='return p_article.save("+tab[l_tab].feeds[i].id+")'>"+$p.img("ico_disk_s.gif",8,9,lg("lblSave"))+"</a></td>";
					if ($p.app.user.id>0&&__useRssDelete) l_addedFct+="<td width='10'><a href='#' onclick='$p.app.widgets.rss.deleteEntry("+l_modId+","+tab[l_tab].feeds[i].id+");return false;'>"+$p.img("ico_suppress.gif",7,7,lg("lblDeleteInfo"))+"</a></td>";
					
					var addSource=(__displayrsssource && tab[l_tab].feeds[i].source!="" )?'<br /><span class="source">'+tab[l_tab].feeds[i].source+'</span>':'';
					l_s+='<tr id="feed'+tab[l_tab].id+'_'+vars[2]+'_'+tab[l_tab].feeds[i].id+'" class="link'+((__registerfeeds && !l_auth)?(tab[l_tab].feeds[i].isRead==0?'unread':'read'):'')+'">'
						+'<td class="border">'
						+'<div class="article">'
						+((__displayrssimages==0 || (__displayrssimages==1 && (tab[l_tab].feeds[i].image=="x" || j!=0)) || (__displayrssimages==2 && tab[l_tab].feeds[i].image=="x"))?'':'	<img'+tab[l_tab].feeds[i].image+' align="left" style="margin-right:6px;width:75px;" />')
						+'<a href="'+tab[l_tab].feeds[i].link+'" target="npdetailf" onclick=\'return $p.app.widgets.rss.linkClicked(this,'+vars[2]+','+i+','+vars[0]+','+vars[1]+');\' onmouseover="$p.app.widgets.rss.showOverview('+i+',event)" onmouseout="$p.app.widgets.rss.hideOverview('+i+')">'+tab[l_tab].feeds[i].title+'</a>'
						l_s+=addSource
						+'	</a>'
						+((__displayrssimages==0 || (__displayrssimages==1 && (tab[l_tab].feeds[i].image=="x" || j!=0)) || (__displayrssimages==2 && tab[l_tab].feeds[i].image=="x"))?'':'<br />'+$p.app.widgets.rss.summarize(tab[l_tab].feeds[i].desc))
						+'	</div>'
						+'</td>'+l_addedFct+'</tr>';

					j++;
				}
				i++;
			}
			if (j==0)
			{
				if (tab[l_tab].module[l_modId].footer=="auth")
				{
					l_s+='<tr>'
						+'<td>'
						+'<a href="#" onclick="$p.app.widgets.param.show('+tab[l_tab].module[l_modId].uniq+');return false;">'
						+$p.img("lock.gif",7,9,"","imgmid")+' '+lg("authFeed")
						+'</a>'
						+'</td>'
						+'</tr>';

					tab[l_tab].module[l_modId].footer="";
				}
				else
				{
					l_s+='<tr>'
						+'<td>'
						+lg("lblNoArticle")
						+'</td>'
						+'</tr>';
				}
			}
			l_s+='</table>';

			l_s+="<div style='text-align:right;padding-top: 5px;'>";
			if (tab[l_tab].module[l_modId].start>0)
			{
				l_s+=" <a href='#' onclick='$p.app.widgets.rss.nextPage("+l_tab+","+l_modId+","+vars[1]+");return false;'>"+$p.img('ico_previous2.gif',11,12,lg('previous'),'imgmid')+" "+lg('previous')+"</a> &nbsp;";
			}
			if (j==vars[1])
			{
				l_s+=" <a href='#' onclick='$p.app.widgets.rss.prevPage("+l_tab+","+l_modId+","+vars[1]+");return false;'>"+lg('next')+" "+$p.img('ico_next2.gif',11,12,lg('next'),"imgmid")+"</a> &nbsp;";
			}
			l_s+='</div>';
		
			l_s+='</td>'
				+'</tr>'
				+'<tr>'
				+'<td>'+tab[l_tab].module[l_modId].footer;
		}
		else
		{
			l_s+=lg('lblModIssue');
			
			//avoid waiting icon to stay
			tab[l_tab].module[l_modId].isLoaded=true;
			$p.app.tabs.create(l_tab);
		}
		
		l_s+='</td>'
			+'</tr>'
			+'</table>';
		//$p.print("module"+module[l_modId].tab+"_"+vars[2]+"_c",l_s);
		$p.print('module'+tab[l_tab].id+'_'+vars[2]+'_c',l_s);

		$p.app.widgets.rss.moduleUnread(vars[2],l_tab);
		//reset icon if linked to the feed favicon
		$p.app.widgets.changeIcon(l_modId,indef,l_tab);
		
		//refresh newpaper mode
		if (l_tab==$p.app.tabs.sel && tab[l_tab].showType==1) $p.app.widgets.rss.reader.showArticlesList(true,$p.app.widgets.rss.reader.currSrc);
	},
	/*
		$p.app.widgets.rss.nextPage : display next articles
	*/
	nextPage:function(v_tab,v_id,v_nb)
	{
		//if (tab[v_tab].module[v_id].start>=v_nb)
		//{
		tab[v_tab].module[v_id].start-=v_nb;
		//}
		$p.app.widgets.rss.refresh(v_id,v_tab,true);
	},
	/*
		$p.app.widgets.rss.nextPage : display next articles
	*/
	prevPage:function(v_tab,v_id,v_nb)
	{
		tab[v_tab].module[v_id].start+=v_nb;
		$p.app.widgets.rss.refresh(v_id,v_tab,true);
	},
	/*
		$p.app.widgets.rss.displayAll : display articles of all rss modules in current page
	*/
	displayAll:function()
	{
		for (var i=0;i<tab[$p.app.tabs.sel].module.length;i++)
		{
			if (tab[$p.app.tabs.sel].module[i].format=='R')
			{
				$p.app.widgets.rss.display(indef,new Array(i,($p.string.getVar(tab[$p.app.tabs.sel].module[i].vars,"nb")?$p.string.getVar(tab[$p.app.tabs.sel].module[i].vars,"nb"):5),tab[$p.app.tabs.sel].module[i].uniq));
			}
		}
	},
	/*
		$p.app.widgets.rss.moduleUnread : Compute number of unread articles
		input
			v_id : module Uniq ID
			v_tab : tab sequence ID
	*/
	moduleUnread:function(v_id,v_tab)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		var l_id=$p.app.widgets.uniqToId(v_id,v_tab);
		var l_content=$("module"+tab[v_tab].id+"_"+v_id+"_c"),nbur=0;
		if (__registerfeeds && !tab[v_tab].module[l_id].auth)
		{
			for (var i=0;i<tab[v_tab].feeds.length;i++)
			{
				if (tab[v_tab].feeds[i].modUniq==v_id && tab[v_tab].feeds[i].isRead==0) nbur++;
			}
		}
		else
		{
			var l_link=l_content.getElementsByTagName("a");
			for (var i=0;i<l_link.length;i++)
			{
				var l_node=l_link[i];
				if (l_node.target=='npdetailf')
				{
					if (document.all)
					{
						if (l_node.currentStyle.color!="#999999") nbur++;
					}
					else
					{
						if (window.getComputedStyle(l_node, null).color!="rgb(153, 153, 153)") nbur++;
					}
				}
			}
		}
		if (tab[v_tab].module[l_id].nbunread==indef) tab[v_tab].module[l_id].nbunread=nbur;
		$p.app.widgets.changeName(l_id,indef,v_tab);
		$p.app.widgets.rss.pageUnread(v_tab);
	},
	/*
		$p.app.widgets.rss.linkClicked : treat mouse click on article
		inputs
			v_linkobj : link object clicked
			v_id : module Uniq ID
			v_feedId : feed sequence ID
			v_modId : module sequence ID
			v_nbart : number of article displayed for the module
	*/
	linkClicked:function(v_linkobj,v_id,v_feedId,v_modId,v_nbart)
	{
		var l_id=$p.app.widgets.uniqToId(v_id);
		$p.app.counter.activityStep=0; // reset non activity check
		if (__registerfeeds && !tab[$p.app.tabs.sel].module[l_id].auth)
		{
			if (tab[$p.app.tabs.sel].feeds[v_feedId].isRead==0)
			{
				$p.app.widgets.rss.saveReadStatus(tab[$p.app.tabs.sel].feeds[v_feedId].id);
				tab[$p.app.tabs.sel].feeds[v_feedId].isRead=1;
				$p.setClass("feed"+tab[$p.app.tabs.sel].id+"_"+v_id+"_"+tab[$p.app.tabs.sel].feeds[v_feedId].id,"linkread");
				if (tab[$p.app.tabs.sel].module[l_id].nbunread>0) tab[$p.app.tabs.sel].module[l_id].nbunread--;
				$p.app.widgets.changeName(l_id);
				$p.app.widgets.rss.pageUnread();
			}
		}
		else
		{
			//if (tab[$p.app.tabs.sel].showType==0)
			if (v_linkobj!=indef)
			{
				var l_newUnread=false;
				if (document.all)
				{
					if (v_linkobj.currentStyle.color!="#999999" && $p.string.lc(v_linkobj.currentStyle.color)!="#c6c3c6") l_newUnread=true;
				}
				else
				{
					if (window.getComputedStyle(v_linkobj, null).color!="rgb(153, 153, 153)" && window.getComputedStyle(v_linkobj, null).color!="rgb(156, 0, 0)") l_newUnread=true;
				}
				if (l_newUnread)
				{
					if (tab[$p.app.tabs.sel].module[l_id].nbunread>0) tab[$p.app.tabs.sel].module[l_id].nbunread--;
					$p.app.widgets.changeName(l_id);
					$p.app.widgets.rss.pageUnread();
				}
			}
		}
		//if already in reader mode > no action
		if (tab[$p.app.tabs.sel].showType==0)
		{
			if (tab[$p.app.tabs.sel].usereader==1 && tab[$p.app.tabs.sel].module[l_id].usereader)
			{
				//init reader mode
				$p.app.widgets.rss.reader.init();
				//select clicked article
				$p.app.widgets.rss.reader.showDetail(indef,tab[$p.app.tabs.sel].feeds[v_feedId].id);
				//readerarticle"+$p.app.tabs.sel+"_"+v_feedId
				$p.app.widgets.rss.reader.load(v_modId);
				// no page preloading if feeds are managed in the DB (no use for read status update)
				if (__registerfeeds && !tab[$p.app.tabs.sel].module[l_id].auth) return false;
				//if no link, do not open destination file
				if ((tab[$p.app.tabs.sel].feeds[v_feedId].link).indexOf("noplink")!=-1) return false;
				return (tab[$p.app.tabs.sel].feeds[v_feedId].link==""?false:true);
			}
			else
			{
				//if ($p.navigator.IE) return true;
				$p.navigator.openLink(tab[$p.app.tabs.sel].feeds[v_feedId].link,true);
				//link visited status is not instantaneous with FF
				if (!__registerfeeds ||  tab[$p.app.tabs.sel].module[l_id].auth) setTimeout("$p.app.widgets.rss.display(indef,new Array("+v_modId+","+v_nbart+","+v_id+"))",1000);
				return false;
			}
		}
	},
	saveReadStatus:function(v_id)
	{
		$p.ajax.call('scr_feed_changestatus.php',
			{
				'type':'execute',
				'variables':"artid0="+v_id+"&s0=1"
			}
		);
	},
	/*
		$p.app.widgets.rss.readAll : set all articles as read for a module
		inputs
			v_tab : tab sequence ID
			v_modId : module sequence ID
	*/
	readAll:function(v_tab,v_modId)
	{
		var l_s="",inc=0;
		for (var i=0;i<tab[v_tab].feeds.length;i++)
		{
			if (tab[v_tab].feeds[i].modUniq==tab[v_tab].module[v_modId].uniq)
			{
				$p.setClass("feed"+tab[v_tab].id+"_"+tab[v_tab].module[v_modId].uniq+"_"+tab[v_tab].feeds[i].id,"linkread");
				l_s+="artid"+inc+"="+tab[v_tab].feeds[i].id+"&s"+inc+"=1&";
				tab[v_tab].feeds[i].isRead=1;
				inc++;
			}
		}
		$p.ajax.call('scr_feed_changestatus.php',
			{
				'type':'execute',
				'variables':l_s
			}
		);
		tab[v_tab].module[v_modId].nbunread=0;
		$p.app.widgets.changeName(v_modId);
		$p.app.widgets.rss.pageUnread();
		return false;
	},
	/*
		$p.app.widgets.rss.pageUnread : compute number of unread articles in the page
		input : tab sequence ID
	*/
	pageUnread:function(v_tab)
	{
		if (v_tab==indef) v_tab=$p.app.tabs.sel;
		if ($p.app.user.id==-1) return;
		tab[v_tab].nbUnread=0;
		for (var i=0;i<tab[v_tab].module.length;i++)
		{
			if (tab[v_tab].module[i].nbunread>0) tab[v_tab].nbUnread+=tab[v_tab].module[i].nbunread;
		}
		if (tab[v_tab].nbUnread>0) $p.print("tabextra"+v_tab,"("+tab[v_tab].nbUnread+")");
		if (v_tab==$p.app.tabs.sel) $p.navigator.changeTitle();
	},
	/*
		$p.app.widgets.rss.showOverview : Display article overview in tooltip
		inputs
			v_id : feed sequence ID
			event : mouse event object
	*/
	showOverview:function(v_id,event)
	{
		if (tab[$p.app.tabs.sel].feeds[v_id]) mouseBox(result,event);
		
		var l_desc=(tab[$p.app.tabs.sel].feeds[v_id]?tab[$p.app.tabs.sel].feeds[v_id].desc:"");
		var result=(tab[$p.app.tabs.sel].feeds[v_id]?"<b>"+tab[$p.app.tabs.sel].feeds[v_id].title+"</b><br />":"");
		if (__displayrssdesc==1)
		{
			result+=$p.app.widgets.rss.summarize(l_desc);
		}
		else
		{
			result+=l_desc;
		}

		if (tab[$p.app.tabs.sel].feeds[v_id]) mouseBox(result,event);
	},
	/*
		$p.app.widgets.rss.summarize : summarize an article
		inputs
			v_desc (string) : article description to summarize
		Returns
			(string) : short description
	*/
	summarize:function(v_desc)
	{
		var l_desc=removeTags(v_desc);
		var maxLength=100; //max length of description
		var endPos = (l_desc.indexOf('.',maxLength)) + 1; //get position of (.) starting from maxLength
		if (endPos=="")
		{
			return l_desc; //use original description
		}
		else
		{
			return l_desc.substr(0,endPos); //use shorter description
		}
	},
	/*
		$p.app.widgets.rss.hideOverview : hide article overview
	*/
	hideOverview:function()
	{
		mouseBox("");
	},
	/*
		$p.app.widgets.rss.secure : format RSS article to avoid javascript injection
		input : rss article string
	*/
	secure:function(v_s)
	{
		var l_s=v_s.replace(/&lt;/g,"<");
		l_s=l_s.replace(/&gt;/g,">");
		l_s=$p.string.correctEncoding(l_s);
		l_s=l_s.replace(/<script/g,"<!--");
		l_s=l_s.replace(/<\/script>/g,"-->");
		return l_s;
	},
	/*
		$p.app.widgets.rss.importMenu : import OPML file
	*/
	importMenu:function()
	{
		var l_s="<table cellpadding='5' cellspacing='0' width='100%'>";
		l_s+="<tr><td class='bottomhr'><b>"+lg("lblImportOpml")+"</b><br /><br />";
		l_s+="<form enctype='multipart/form-data' method='post' action='../portal/scr_opml_import.php' target='iopml'>";
		l_s+="<input type='file' name='opml' /> <input type='submit' value='"+lg("lblUpload")+"' />";
		l_s+="</form><iframe style='display:none' src='about:blank' id='iopml' name='iopml' onload='$p.app.widgets.rss.importTreat()'></iframe><div id='opmlres'></div></td></tr>";
		l_s+="<tr><td><b>"+lg("lblExportOpml")+"</b><br /><br />";
		l_s+="<input type='button' value='"+lg("lblExportBtn")+"' onclick='$p.app.widgets.rss.exportOpml()' />";
		l_s+="</td></tr></table>";
		$p.print("box",box(0,lg("lblImport"),"hideBox()",l_s));
		$p.show("box","block");
		return false;
	},
	/*
		$p.app.widgets.rss.importTreat : treat OPML file
	*/
	importTreat:function()
	{
		var i = $("iopml");
		if (i.contentDocument)
		{
			var d = i.contentDocument;
		}
		else if (i.contentWindow)
		{
			var d = i.contentWindow.document;
		}
		else
		{
			var d = window.frames["iopml"].document;
		}
		if (d.location.href == "about:blank")
		{
			return;
		}
		if (d.body.innerHTML=="")
		{
			$p.app.alert.show(lg("msgXMLerror"));
		}
		else
		{
			$p.app.widgets.rss.opmlfile=d.body.innerHTML;
			getXml($p.app.widgets.rss.opmlfile,$p.app.widgets.rss.importSelectTab,"");
		}
	},
	/*
		$p.app.widgets.rss.importSelectTab : import selected tab from OPML file
	*/
	importSelectTab:function(response,vars)
	{
		if (response.getElementsByTagName("opml")[0] || response.getElementsByTagName("body")[0])
		{
			var opmlcont=response.getElementsByTagName("body")[0]?response.getElementsByTagName("body")[0]:response.getElementsByTagName("opml")[0];
			$("opmlres").set('html','<br />'+lg("lblChooseOpmlTab")+' : <br /><br />');
			for (var i=0;i<opmlcont.childNodes.length;i++)
			{
				var result=opmlcont.childNodes[i];
				if ($p.string.lc(result.nodeName)=="outline") 
				{
					var aLvlOpml = new Element('a', 
						{ 
							'events': {
										'click': function(){
											$p.app.widgets.rss.getImportTab(this.name); 
											}
									  },
							'href':'#'
						} 
					);
					aLvlOpml.name = i;
					aLvlOpml.set('html',$p.ajax.getProp(result,"title","str",false,"empty")+'<br />');
					aLvlOpml.inject($("opmlres"));
				}
			}
			var divOpml = new Element('div', { 'id':'opmlfeeds' } );
			divOpml.inject($("opmlres"));
		}
		if (l_s=="" || l_s==indef) 
		$("opmlres").set('html',lg("msgXMLerror"));	
	},
	/*
		$p.app.widgets.rss.getImportTab : load selected tab in OPML file
		input : selected tab ID
	*/
	getImportTab:function(v_id)
	{
		getXml($p.app.widgets.rss.opmlfile,$p.app.widgets.rss.addImportTab,v_id);
	},
	/*
		$p.app.widgets.rss.addImportTab : add new tab based on select tab of OPML file
	*/
	addImportTab:function(response,vars)
	{
		var l_s="<br />"+lg("selectFeedsToImport")+" :<br />";
		if (response.getElementsByTagName("opml")[0])
		{
			var opmlcont=response.getElementsByTagName("body")[0]?response.getElementsByTagName("body")[0]:response.getElementsByTagName("opml")[0];
			var selOutline=opmlcont.childNodes[vars];
			for (var i=0;i<selOutline.childNodes.length;i++)
			{
				var result=selOutline.childNodes[i];
				if ($p.string.lc(result.nodeName)=="outline")
				{
					l_s+="<a href='#' onclick=\"$p.app.widgets.rss.checkFeed('"+$p.string.unesc($p.ajax.getProp(result,"xmlUrl","str",false,""))+"');return false;\">"+$p.ajax.getProp(result,"title","str",false,"")+"</a>,<br /> ";	
				}
			}
		}
		$p.print("opmlfeeds",l_s);	
	},
	/*
		$p.app.widgets.rss.exportOPML : generate OPML file from user pages
	*/
	exportOpml:function()
	{
		$p.navigator.openLink("xmlopmlexport.php",true);
	},
	/*
		$p.app.widgets.rss.getId : get feed sequence ID based on article DB ID
		input : article DB ID
		output : article sequence ID
	*/
	getId:function(v_id)
	{
		for (var i=0;i<tab[$p.app.tabs.sel].feeds.length;i++)
		{
			if (tab[$p.app.tabs.sel].feeds[i].id==v_id) return i;
		}
		return v_id;
	},
	getTopArticles:function()
	{
		getXml('xmltoparticles.php',$p.app.widgets.rss.displayTopArticles);
	},
	displayTopArticles:function(response)
	{
		var l_s="<ul>",l_result=response.getElementsByTagName('article');

		for (var i=0;i<l_result.length;i++)
		{
			l_s+="<li>"+$p.ajax.getVal(l_result[i],'title','str',false,'???')+"</li>";
		}
		l_s+="</ul>";

		$p.print('rsstoparticles',l_s);
	},
	loadMostRead:function(v_page)
	{
		p_network.init();
		$p.plugin.menu([{"id":1,"title":"mostReadArticles","icon":"","fct":"","isLink":false}]);

		$p.plugin.content("<div id='plugindiv'></div>");

		$p.ajax.call('xmlmostread.php?p='+v_page,
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.widgets.rss.displayMostRead,
					'variables':{'page':v_page}
				}
			}
		);
	},
	displayMostRead:function(response,vars)
	{
		var l_result=response.getElementsByTagName('article'),l_s='<table cellpadding="0" cellspacing="5">';
		for (var i=0;i<l_result.length;i++)
		{
			l_s+='<tr><td valign="top"><img src="../modules/pictures/rss'+$p.ajax.getVal(l_result[i],'sourceid','int',false,0)+'.ico" width="16" height="16"></td><td valign="top"><a href="'+$p.ajax.getVal(l_result[i],'link','str',false,'#')+'" target="_blank">'+$p.ajax.getVal(l_result[i],'title','str',false,'-')+'</a> ('+$p.ajax.getVal(l_result[i],'nbread','str',false,'1')+')<br /><span class="source">'+$p.ajax.getVal(l_result[i],'source','str',false,'')+'</span></td></tr>';
		}
		l_s+='</table>';
		$p.print('plugindiv',l_s);
	}
}

$p.app.widgets.rss.reader={
	selArticle:0,
	readerWidth:0,
	readerHeight:0,
	currSrc:indef,
	paneWidth:300,
	prevEnv:'',
	/*
		$p.app.widgets.rss.reader.init : init rss reader
	*/
	init:function()
	{	
		//hide modules
		$p.show("modules","none");
		$p.show("newspaper","block");
		$p.show("footer","none");
		$p.app.widgets.rss.reader.prevEnv=$p.app.env;
		$p.app.newEnv('portal_reader');
		//hide menus
		hideAllBox();
		mouseBox("");	
		
		var l_obj=$("newspaper");
		
		if ((l_obj) && (l_obj.innerHTML!=''))
			l_obj.empty();
	
		if (!l_obj)
		{
			var l_div=$("modules");
			l_obj=null;
			l_obj=new Element('div', 
				{
					'styles': {
						'display': 'none',
						'verticalAlign': 'top'
					},
					'id': 'newspaper'
				}
			);
			l_div.appendChild(l_obj)
		}
		
		//compute frames width
		$p.app.widgets.rss.reader.computeSize();

		var divObj1 = new Element('div', { 'id':'myreader' } );	
		var divObj2 = new Element('div', 
			{
				'styles': {
					'text-align': 'right'
				},
				'class':'addonbar'
			}
		);
		var aLvl2 = new Element('a',
			{ 
				'events': {
						'click': function(){
								$p.app.widgets.rss.reader.close();
								$p.app.widgets.rss.displayAll(); }
						  },
				'href':'#'
			} 
		);				 
		aLvl2.set('html',$p.img("ico_close.gif",12,11,lg("lblClose"),"imgmid")+" "+lg("lblClose")+" &nbsp; &nbsp; &nbsp; ");
		aLvl2.inject(divObj2);	
		divObj2.inject(divObj1);
		var divObj3 = new Element('div', { 'class':'newspaper' } );		
		var divObj4 = new Element('div', { 'id':'sourcelist' } );	
		divObj4.set('html',lg("lblLoading"));
		divObj4.inject(divObj3);
		var tableObj1 = new Element('table', { 'cellpadding':'0', 'cellspacing':'0' } );
		var tbodyObj1 = new Element('tbody');
		var trObj1 = new Element('tr');
		var tdObj1 = new Element('td', { 'styles':{'width':'300px', 'vertical-align':'top' }} );	
		var divObj5 = new Element('div', 
			{
				'styles': {
							'width':'300px',
							'height':$p.app.widgets.rss.readerHeight+"px",
							'overflow':'auto',
							'vertical-align':'top'
						  },
				'id':'nparticles'
			}
		);
		divObj5.inject(tdObj1);
		tdObj1.inject(trObj1);	
		var tdObj2 = new Element('td', { 'id':'npdetail', 'class':'frame', 'width':$p.app.widgets.rss.readerWidth+'px', 'height':$p.app.widgets.rss.readerHeight+'px' } );	
		tdObj2.set('html','&nbsp;');			
		tdObj2.inject(trObj1);
		trObj1.inject(tbodyObj1);
		tbodyObj1.inject(tableObj1);
		tableObj1.inject(divObj3);
		divObj3.inject(divObj1);
		divObj1.inject(l_obj);	
		tab[$p.app.tabs.sel].showType=1; // rss reader active		
	},
	/*
		$p.app.widgets.rss.reader.load : load feeds articles
		input : module sequence ID of the feed
	*/
	load:function(v_src)
	{
		var l_inc=0,l_allLoaded=true;
		for (var i=0;i<tab[$p.app.tabs.sel].module.length;i++)
		{
			if (tab[$p.app.tabs.sel].module[i].format=='R' && !tab[$p.app.tabs.sel].module[i].isLoaded)
			{
				l_allLoaded=false;
				$p.app.widgets.rss.refresh(i);
			}
		}
		$p.app.widgets.rss.reader.showArticlesList(true,v_src);
	},
	/*
		$p.app.widgets.rss.reader.refresh : refresh feeds articles
	*/
	refresh:function()
	{
		$p.app.widgets.rss.init($p.app.tabs.sel);
		$p.app.widgets.rss.reader.load($p.app.widgets.rss.reader.currSrc);
		return false;
	},
	chk:function(response,vars)
	{
		if ($p.app.widgets.rss.get(response,vars[0],vars[1]))
		{
			$p.app.widgets.rss.reader.showArticlesList(true,$p.app.widgets.rss.reader.currSrc);
		};
	},
	/*
		$p.app.widgets.rss.reader.getSrcList : display the reader sources list
	*/
	getSrcList:function()
	{

		//empty the element for a reload
		if ($('sourcelist').innerHTML!='')
			$('sourcelist').empty();
			
		var bObj1 = new Element('b');
		bObj1.set('html',lg("lblSrc")+" :");
		bObj1.inject($('sourcelist'));
		var srclink=[];
		for (var i=0;i<tab[$p.app.tabs.sel].module.length;i++)
		{
			if (tab[$p.app.tabs.sel].module[i].format=='R')
			{
				if (tab[$p.app.tabs.sel].module[i].isLoaded)
				{
					if ($p.app.widgets.rss.reader.currSrc==i)
					{
						srclink.push(" <font class='sourcesel'>"+tab[$p.app.tabs.sel].module[i].name+(tab[$p.app.tabs.sel].module[i].nbunread==0?"":" <a href='#' title='"+lg("readAll")+"' onclick='$p.app.widgets.rss.readAll("+$p.app.tabs.sel+","+i+");$p.app.widgets.rss.reader.showArticlesList(false,"+$p.app.widgets.rss.reader.currSrc+");'>("+tab[$p.app.tabs.sel].module[i].nbunread+")</a>")+"</font>");
					}
					else
					{
						srclink.push(" <a href='#' style='font-weight:normal' onclick='return $p.app.widgets.rss.reader.showArticlesList(false,"+i+")'>"+tab[$p.app.tabs.sel].module[i].name+"</a>"+(tab[$p.app.tabs.sel].module[i].nbunread==0?"":" <a href='#' title='"+lg("readAll")+"' onclick='$p.app.widgets.rss.readAll("+$p.app.tabs.sel+","+i+");$p.app.widgets.rss.reader.showArticlesList(false,"+$p.app.widgets.rss.reader.currSrc+");'>("+tab[$p.app.tabs.sel].module[i].nbunread+")</a>"));
					}
				}
				else
				{
					srclink.push(" "+tab[$p.app.tabs.sel].module[i].name+" "+$p.img("ico_wait.gif",9,9,lg("lblSrcLoading"),"imgmid"));
				}
			}
		}
		$('sourcelist').set('html',srclink.join(" | "));
		if ($p.app.widgets.rss.reader.currSrc!=indef) 
		{
			var aObj1 = new Element('a', 
				{ 
					'styles':{
							 'color':'#008200'
					},
					'events':{
							 'click':function()
							 {
							 return $p.app.widgets.rss.reader.showArticlesList(false);
							 }
					},
				 'href':'#'
				}
		   );
			aObj1.set('html','&nbsp;&nbsp;'+lg("lblSrcAll"));
			aObj1.inject($('sourcelist'));
		}
		if(__useGSearch) 
		{
			var centerObj1 = new Element('center');
			var bObj2 = new Element ('b');
			bObj2.set('html',lg("lblSrcSrch"));
			bObj2.inject(centerObj1);
			var divObj1 = new Element('div', { 'id':'searchform', 'width':'350' } );
			divObj1.inject(centerObj1);
			centerObj1.inject($('sourcelist'));	
			var brObj2 = new Element('br');
			brObj2.inject($('sourcelist'));			
			var tableObj1 = new Element('table', { 'width':'100%' });	
			var tbodyObj1 = new Element('tbody');
			var trObj1 = new Element('tr');
			var tdObj1 = new Element('td', { 'valign':'top', 'width':'100%' } );
			var divObj2 = new Element('div', { 'id':'searchResults', 'width':'600' } );
			divObj2.set('html',lg("lblLoading"));
			divObj2.inject(tdObj1);
			tdObj1.inject(trObj1);
			trObj1.inject(tbodyObj1);
			tbodyObj1.inject(tableObj1);
			tableObj1.inject($('sourcelist'));	
		}
		$p.app.widgets.rss.reader.framesSize();
		
	},
	/*
		$p.app.widgets.rss.reader.showArticlesList : display feeds of the selected source or from all sources
		input
			v_sort : sorting type
			v_src : selected source
	*/
	showArticlesList:function(v_sort,v_src)
	{	
		var j=0;
		$p.app.widgets.rss.reader.currSrc=v_src;
		//if multisources, display only once on the last source loading
		$p.app.widgets.rss.reader.getSrcList();
		l_s="";
		//if (v_sort) tab[$p.app.tabs.sel].feeds.sort(sortDate);  //remove temporaly due to bug : when portal refresh and user is in the rss reader, once the reader closed, the feeds are not corresponding to the tooltip description !
		i=0;
		l_s+="<table cellpadding='2' cellspacing='0' border='0' width='282'>";
		//while (i<$p.app.widgets.rss.reader.nb && j<$p.app.widgets.rss.feeds.length){
		while (j<tab[$p.app.tabs.sel].feeds.length)
		{
			if (v_src==indef || tab[$p.app.tabs.sel].feeds[j].modUniq==tab[$p.app.tabs.sel].module[v_src].uniq)
			{
				var l_style=(i%2==1)?"dark":"clear";
				var l_id=$p.app.widgets.uniqToId(tab[$p.app.tabs.sel].feeds[j].modUniq);

				l_s+='<tr class="'+l_style+'">'
					+'<td class="normal">'
					+$p.img("../modules/pictures/"+tab[$p.app.tabs.sel].module[l_id].icon,16,16,"","imgmid")
					+'</td>'
					+'<td id="npart'+tab[$p.app.tabs.sel].feeds[j].id+'" class="'+(tab[$p.app.tabs.sel].feeds[j].id==$p.app.widgets.rss.reader.selArticle?"highlight":"normal"+((__registerfeeds && !tab[$p.app.tabs.sel].module[l_id].auth)?(tab[$p.app.tabs.sel].feeds[j].isRead==0?'unread':'read'):''))+'">'
					+'<a class="title" id="readerarticle'+$p.app.tabs.sel+'_'+j+'" href="'+tab[$p.app.tabs.sel].feeds[j].link+'" target="npdetailf" onclick="return $p.app.widgets.rss.reader.showDetail(this,'+tab[$p.app.tabs.sel].feeds[j].id+')">'+tab[$p.app.tabs.sel].feeds[j].title+'</a>'
					+'<br />'
					+'<span class="source">'+tab[$p.app.tabs.sel].feeds[j].modName+' '+((__displayrsssource && tab[$p.app.tabs.sel].feeds[j].source!="" )?'| '+tab[$p.app.tabs.sel].feeds[j].source:'')+'</span><br />'
					+$p.date.formatDelai($p.date.delayFromNow(tab[$p.app.tabs.sel].feeds[j].date));

				if ($p.app.user.id>0&&__useSharing) l_s+=" <a href='#' onclick='p_friends.menu(2,"+tab[$p.app.tabs.sel].feeds[j].id+")'>"+$p.img("ico_share_s.gif",13,10,lg("lblShareInfo"))+"</a>";
				if ($p.app.user.id>0&&__useArchive) l_s+=" <a href='#' onclick='return p_article.save("+tab[$p.app.tabs.sel].feeds[j].id+")'>"+$p.img("ico_disk_s.gif",8,9,lg("lblSave"))+"</a>";

				l_s+='<br /><br />'
					+'</td>'
					+'</tr>';
				i++;
			}
			j++;
		}
		if (i==0)
		{
			l_s+='<tr>'
				+'<td>'
				+'<div style="width:100%;height:200px">'+lg("lblSrcMissing")+'</div>'
				+'</td>'
				+'</tr>';
		}
		l_s+='</table>';
		$p.print("nparticles",l_s);
		
		if(__useGSearch) initGSearch(true);
		
		return false;	
	},
	/*
		$p.app.widgets.rss.reader.showArticlesListDetail : show article detail in right panel
		input : feed DB ID
	*/
	showDetail:function(v_objClicked,v_id)
	{
		//after newspaper sorting, array id change => getId
		var l_id=$p.app.widgets.rss.getId(v_id);
		var l_modId=$p.app.widgets.uniqToId(tab[$p.app.tabs.sel].feeds[l_id].modUniq);
		
		if ($('npdetail').innerHTML!='')
			$('npdetail').empty();
		
		var divObj1 = new Element('div', { 'id':'npdetailititle' } );

		var l_s='<h2>'+tab[$p.app.tabs.sel].feeds[l_id].title+'</h2>'
			+'<span class="source">'+tab[$p.app.tabs.sel].feeds[l_id].modName+((__displayrsssource && tab[$p.app.tabs.sel].feeds[l_id].source!="" )?' | '+tab[$p.app.tabs.sel].feeds[l_id].source:'')+'</span>'
			+'<b>&nbsp;-&nbsp;'+$p.date.formatDelai($p.date.delayFromNow(tab[$p.app.tabs.sel].feeds[l_id].date))+'</b>';
		
		if (tab[$p.app.tabs.sel].feeds[l_id].link!="" && (tab[$p.app.tabs.sel].feeds[l_id].link).indexOf("noplink")==-1) 
		{
			l_s+='<br /><br /><a id="npshowsumbtn" href="#" disabled="disabled" onclick="return $p.app.widgets.rss.reader.showArticlesListSummary('+tab[$p.app.tabs.sel].feeds[l_id].id+');">'+$p.img('ico_rss2.gif',16,16,'','imgmid')+' '+lg("lblOpenSummary")+'</a>'
				+' | <a id="npshowsitebtn" href="#" onclick=\'return $p.app.widgets.rss.reader.showArticlesListSite("'+tab[$p.app.tabs.sel].feeds[l_id].link+'");\'>'+$p.img('ico_adm_page.gif',16,16,'','imgmid')+' '+lg('lblOpenInReader')+'</a>'
				+' | <a id="npshowonsitebtn" href="#" onclick=\'return $p.navigator.openLink("'+tab[$p.app.tabs.sel].feeds[l_id].link+'",true)\'>'+$p.img('ico_next2.gif',12,11,'','imgmid')+' '+lg('lblOpenInNewPage')+'</a>'
				+' | <a href="#" onclick=\'return $p.app.widgets.rss.reader.maximize();\'>'+lg('maximize')+'/'+lg('minimize')+'</a>';
			divObj1.set('html',l_s);
		}
		divObj1.inject($('npdetail'));

		var divObj2 = new Element('div', 
		{
				'styles': {
							'overflow':'auto',
							'width':'100%'
				},
				'id': 'npdetaili'
			}
		);
		var divObj3 = new Element('div', { 'id': 'npdetailidesc' } );
		divObj3.set('html',setExternalLink(tab[$p.app.tabs.sel].feeds[l_id].desc));
		divObj3.inject(divObj2);
		divObj2.inject($('npdetail'));
		var frameObj1 = new Element('iframe', 
			{
				'styles': {
					'width':'100%',
					'height':($p.app.widgets.rss.readerHeight-(__useSharing?20:0))+"px",
					'display':'none'
				},
				'id': 'npdetailf',
				'name':'npdetailf',
				'src':''
			}
	    );						   
		frameObj1.inject($('npdetail'));

		if (__useSharing)
		{
			var divShare = new Element('div',
				{
					'styles': {
						'overflow':'auto',
						'text-align':'center',
						'width':'100%',
						'background':'#c6c3c6'
					},
					'id': 'npdetails'
				}
			);
			var aShare = new Element('a',
				{
					'href':'#',
					'styles':{
						'font-weight':'bold'
					},
					'events':{
						'click':function()
						{
							p_friends.menu(2,this.itemid);
						}
					}
				}
			);
			aShare.itemid=l_id;
			aShare.inject(divShare);
			var imgShare=new $p.imgObj('mynetwork.gif',16,16,"","imgmid");
			imgShare.inject(aShare);
			aShare.appendText(" "+lg("articleMayInterest"));
			divShare.inject($('npdetail'));
		}

		//($("npshowsumbtn")).disabled=true;
		//un highlight the previous article
		$p.setClass("npart"+$p.app.widgets.rss.reader.selArticle,((__registerfeeds && !tab[$p.app.tabs.sel].module[l_modId].auth)?"normalread":"read"));
		//highlight the selected article
		$p.setClass("npart"+tab[$p.app.tabs.sel].feeds[l_id].id,"highlight");
		$p.app.widgets.rss.reader.selArticle=tab[$p.app.tabs.sel].feeds[l_id].id;
		if (__registerfeeds)
		{
			$p.app.widgets.rss.linkClicked(v_objClicked,tab[$p.app.tabs.sel].feeds[l_id].modUniq,l_id,$p.app.widgets.uniqToId(tab[$p.app.tabs.sel].feeds[l_id].modUniq));
			$p.app.widgets.rss.reader.getSrcList();
			if (!tab[$p.app.tabs.sel].module[l_modId].auth) return false;
		}
		
		$p.app.widgets.rss.reader.getSrcList();
		$p.app.widgets.rss.reader.framesSize();
	
		return (tab[$p.app.tabs.sel].feeds[l_id].link==""?false:true);
	},
	/*
		$p.app.widgets.rss.reader.maximize : maximize reader
	*/
	maximize:function()
	{
		if ($p.get('nparticles').parentNode.style.display == 'none')
		{
			$p.get('nparticles').parentNode.style.display = "block" ;
			$p.show('sourcelist','block');
			$p.app.widgets.rss.reader.paneWidth=300;
		}
		else
		{
			$p.get('nparticles').parentNode.style.display = "none" ;
			$p.show('sourcelist','none');
			$p.app.widgets.rss.reader.paneWidth=0;
		}
		$p.app.widgets.rss.reader.computeSize();
		$p.app.widgets.rss.reader.framesSize();
	},
	/*
		$p.app.widgets.rss.reader.showArticlesListSite : Display web site linked with the read article (in a frame)
	*/
	showArticlesListSite:function(v_src)
	{
		if (($("npdetailf")).src=="" || ($("npdetailf")).src+"#"==window.location || ($("npdetailf")).src==window.location) ($("npdetailf")).src=v_src;
		$p.show("npdetaili","none");
		$p.show("npdetailf","block");
		($("npshowsumbtn")).disabled=false;
		($("npshowsitebtn")).disabled=true;
		return false;
	},
	/*
		$p.app.widgets.rss.reader.showArticlesListSummary : display article summary loaded from RSS feed
		input v_id : article DB ID
	*/
	showArticlesListSummary:function(v_id)
	{
		$p.show("npdetaili","block");
		$p.show("npdetailf","none");
		$p.print("npdetailidesc","<br />"+setExternalLink(tab[$p.app.tabs.sel].feeds[$p.app.widgets.rss.getId(v_id)].desc));
		($("npshowsumbtn")).disabled=true;
		($("npshowsitebtn")).disabled=false;
		return false;
	},
	/*
		$p.app.widgets.rss.reader.close : close rss reader
	*/
	close:function()
	{
		$p.app.widgets.rss.reader.hide();
		$p.show("modules","block");
		$p.show("footer","block");
		$p.app.newEnv($p.app.widgets.rss.reader.prevEnv);
	},
	/*
		$p.app.widgets.rss.reader.hide : hide rss reader
	*/
	hide:function()
	{
		$p.show('newspaper','none');
		$p.print('npdetail','');
		if ($p.app.tabs.sel!=-1) tab[$p.app.tabs.sel].showType=0;
	},
	/*
		$p.app.widgets.rss.reader.supSrc : remove a rss feed from the reader
		input : linked module sequence ID
	*/
	supSrc:function(v_id)
	{
		if ($p.app.widgets.suppress(tab[$p.app.tabs.sel].module[v_id].uniq,true)) $p.app.widgets.rss.reader.showArticlesList(false);
	},
	computeSize:function()
	{
		var l_left=$p.getPos($('newspaper'),"Left");
		var l_top=$p.getPos($('newspaper'),"Top");
		$p.app.widgets.rss.readerWidth=Window.getWidth()-l_left-$p.app.widgets.rss.reader.paneWidth-10;
		$p.app.widgets.rss.readerHeight=Window.getHeight()-l_top-70;
	},
	/*
		$p.app.widgets.rss.reader.framesSize : refresh article pane height
	*/
	framesSize:function()
	{
		$p.app.widgets.rss.reader.computeSize();
		var l_pageHeight=Window.getHeight();
		var l_readerTop=$p.getPos(($("nparticles")),"Top");
		var l_detailTop=$p.getPos(($("npdetaili")),"Top");
		var l_readerHeight=((l_pageHeight-l_readerTop)-8)+"px";
		$("nparticles").setStyle("height",l_readerHeight);
		var l_detailHeight=((l_pageHeight-l_detailTop)-16)+"px";
		if ($("npdetaili")!=null)($("npdetaili")).setStyle("height",l_detailHeight);
		if ($("npdetailf")!=null)($("npdetailf")).setStyle("height",l_detailHeight);
		if ($("npdetail")!=null)($("npdetail")).setStyle("height",l_readerHeight);
		$("npdetail").setStyle("width",$p.app.widgets.rss.readerWidth);
	}
}

$p.app.widgets.factory={
	shown:false,
	items:[],
	waitItems:[],
	object:function(id,name,typ,secured)
	{
		this.id=id;
		this.name=name;
		this.typ=typ;
		this.secured=secured;
	},
	menu:new Array({"id":1,"title":"lblArchive2","icon":"mymodules.gif","fct":"$p.app.widgets.factory.display(0,0)","isLink":true},{"id":2,"title":"lblCreateYourMod","icon":"mymodules_create.gif","fct":"$p.app.widgets.factory.createModuleMenu()","isLink":true}),
	/*
		$p.app.widgets.factory.init : init module factory plugin
	*/
	init:function()
	{
		$p.plugin.open();
		$p.plugin.init(lg("lblArchive2"),'factory');
		$p.app.widgets.factory.load();
		$p.app.setState("$p.app.widgets.factory.init()");
		$p.plugin.useWidget();
		return false;
	},
	/*
		$p.app.widgets.factory.load : load the list of the modules I created
	*/
	load:function()
	{
		$p.ajax.call('xmlmymodules.php',
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.widgets.factory.get
				}
			}
		);
	},
	/*
		$p.app.widgets.factory.get : treat the list of the modules I created
	*/
	get:function(response,vars)
	{
		var i=0;
		$p.app.widgets.factory.items.length=0;
		$p.app.widgets.factory.waitItems.length=0;
		while (response.getElementsByTagName("module")[i])
		{
			var l_result=response.getElementsByTagName("module")[i];
			if ($p.ajax.getVal(l_result,"status","str",false,"")=="O")
			{
				$p.app.widgets.factory.items.push(new $p.app.widgets.factory.object($p.ajax.getVal(l_result,"id","int",false,0),$p.ajax.getVal(l_result,"name","str",false,"=="),$p.ajax.getVal(l_result,"typ","str",false,""),$p.ajax.getVal(l_result,"secured","int",false,0)));
			}
			else
			{
				$p.app.widgets.factory.waitItems.push(new $p.app.widgets.factory.object($p.ajax.getVal(l_result,"id","int",false,0),$p.ajax.getVal(l_result,"name","str",false,"=="),$p.ajax.getVal(l_result,"typ","str",false,""),0));
			}
			i++;
		}
		$p.app.widgets.factory.display(0,0);
	},
	/*
		$p.app.widgets.factory.display : display the list of the modules I created
		inputs
			v_page : page of the list
			v_pageVal : ??
	*/
	display:function(v_page,v_pageVal)
	{
		$p.plugin.menu([{"id":1,"title":"lblArchive2","icon":"mymodules.gif","fct":"","isLink":false}]);
		var l_s=''
			+'<table width="100%" cellspacing="10">'
			+'<tr>'
			+'<td width="250" id="factoryaddmenu" valign="top">'
			+'</td>'
			+'<td valign="top">'
			+'<div class="subtitle">'+lg("mymodulesVal")+'</div><br />'
			+'<table>';

		var l_start=v_page*10;
		var l_end=l_start+10;
		for (var i=l_start;i<l_end;i++)
		{
			if (i<$p.app.widgets.factory.items.length)
			{
				l_s+='<tr>'
					+'<td>'
					+'<img src="../modules/pictures/box0_'+$p.app.widgets.factory.items[i].id+'.ico" align="absmiddle" width="16" height="16" />'
					+'</td>'
					+'<td>'
					+'<a href="#" onclick=\'$p.app.widgets.open('+$p.app.widgets.factory.items[i].id+',"","uniq",'+($p.app.widgets.factory.items[i].secured==0?false:true)+')\'><b>'+$p.app.widgets.factory.items[i].name+'</b></a>'
					+'</td>'
					+'</tr>';
				if ($p.app.widgets.factory.items[i].typ=="R") l_s+="<tr><td></td><td>[<a href='../tutorial/redactor_article_modify_add.php?mid="+$p.app.widgets.factory.items[i].id+"'>"+lg("addArticle")+"</a>] [<a href='../tutorial/redactor_feed.php?mid="+$p.app.widgets.factory.items[i].id+"'>"+lg("feedDetail")+"</a>]</td></tr>";
			}
		}
		l_s+='</table>';
		if ($p.app.widgets.factory.items.length==0) l_s+="<i>"+lg("mymodulesValNone")+"</i>";
		if (v_page!=0) l_s+="<a href='#' onclick='$p.app.widgets.factory.display("+(v_page-1)+","+v_pageVal+")'>"+$p.img("ico_previous2.gif",12,11,"","imgmid")+" "+lg("previous")+"</a> ";
		if ($p.app.widgets.factory.items.length>i) l_s+="&nbsp; <a href='#' onclick='$p.app.widgets.factory.display("+(v_page+1)+","+v_pageVal+")'>"+lg("next")+" "+$p.img("ico_next2.gif",12,11,"","imgmid")+"</a>";
		l_s+='<br /><br />';

		l_s+='<div class="subtitle">'+lg("mymodulesWait")+'</div><br />'
			+'<table>';
		var l_startVal=v_pageVal*10;
		var l_endVal=l_start+10;
		for (var i=l_startVal;i<l_endVal;i++)
		{
			if (i<$p.app.widgets.factory.waitItems.length)
			{
				l_s+='<tr>'
					+'<td>'
					+'<img src="../modules/quarantine/icon'+$p.app.widgets.factory.waitItems[i].id+'.ico" align="absmiddle" width="16" height="16" />'
					+'</td>'
					+'<td>'
					+'<b>'+$p.app.widgets.factory.waitItems[i].name+'</b>'
					+'</td>'
					+'</tr>';
			}
		}
		l_s+='</table>';
		if ($p.app.widgets.factory.waitItems.length==0) l_s+="<i>"+lg("mymodulesWaitNone")+"</i>";
		if (v_pageVal!=0) l_s+="<a href='#' onclick='$p.app.widgets.factory.display("+v_page+","+(v_pageVal-1)+")'>"+$p.img("ico_previous2.gif",12,11,"","imgmid")+" "+lg("previous")+"</a> ";
		if ($p.app.widgets.factory.waitItems.length>i) l_s+="&nbsp; <a href='#' onclick='$p.app.widgets.factory.display("+v_page+","+(v_pageVal+1)+")'>"+lg("next")+" "+$p.img("ico_next2.gif",12,11,"","imgmid")+"</a>";
		l_s+='</td>'
			+'</tr>'
			+'</table>';

		$p.plugin.content(l_s);
		$p.app.widgets.factory.shown=true;
		$p.app.widgets.factory.createModuleMenu();
	},
	/*
		$p.app.widgets.factory.createModuleMenu : display modules factory options
	*/
	createModuleMenu:function()
	{
		var divLvl1 = new Element('b');
		divLvl1.set('html',lg("addRssFeed")+ " :<br /><br />");
		divLvl1.inject($("factoryaddmenu"));
				
		var aLvl1 = new Element('a', { 'href':'../tutorial/rssaddtodirectory.php', 'target':'_createmodule' } );
		var imgLvl1 = new Element('img', { 'src':'../images/ico_rsstomodule.gif', 'align':'absmiddle' } );
		var bLvl1 = new Element('span');
		bLvl1.set('html',lg("addRssFeedToDirectory")+"<br /><br />");
		imgLvl1.injectInside(aLvl1);
		bLvl1.injectInside(aLvl1);
		aLvl1.inject($("factoryaddmenu"));

		var divLvl2 = new Element('b');
		divLvl2.set('html',lg("createYourModules")+ " :<br /><br />");
		divLvl2.inject($("factoryaddmenu"));
		
		if (__allowredactor) 
		{
			var aLvl2 = new Element('a', { 'href':'../tutorial/createrss.php', 'target':'_createmodule' } );
			var imgLvl2 = new Element('img', { 'src':'../images/ico_moduleandrss.gif', 'align':'absmiddle' } );
			var bLvl2 = new Element('span');
			bLvl2.set('html',lg("createRssFeed")+"<br /><br />");
			imgLvl2.injectInside(aLvl2);
			bLvl2.injectInside(aLvl2);
			aLvl2.inject($("factoryaddmenu"));			
		}		
			
		var aLvl3 = new Element('a', { 'href':'../tutorial/expert.php', 'target':'_createmodule' } );
		var imgLvl3 = new Element('img', { 'src':'../images/ico_expertmodule.gif', 'align':'absmiddle' } );
		var bLvl3 = new Element('span');
		bLvl3.set('html',lg("createExpertModule")+"<br /><br />");
		imgLvl3.injectInside(aLvl3);
		bLvl3.injectInside(aLvl3);
		aLvl3.inject($("factoryaddmenu"));	

		$p.app.widgets.factory.shown=true;	
	},
	
	/*
		$p.app.widgets.factory.hide : close modules factory
	*/
	hide:function()
	{
		$p.plugin.hide();
		$p.app.widgets.factory.shown=false;
	}
}


$p.app.connection={
	active:true,
    oldvalues:{},
	/*
		$p.app.connection.changePass : change user password
	*/
	changePass:function()
	{
		// Change user password
		document.forms["newpass"].pass1.value=$p.string.trim(document.forms["newpass"].pass1.value);
		document.forms["newpass"].pass2.value=$p.string.trim(document.forms["newpass"].pass2.value);
		l_pass1=document.forms["newpass"].pass1.value;
		l_pass2=document.forms["newpass"].pass2.value;
		
		if ((l_pass1.length<6) || (l_pass2.length<6))
			$p.app.alert.show(lg("msgSubPassToShort"));
		else if (l_pass1!=l_pass2)
			$p.app.alert.show(lg("msgSubPassDiff"));
		else
		{
			if (l_pass1==l_pass2)
			{
				$p.ajax.call('scr_changepwd.php',
					{
						'type':'execute',
						'variables':"oldpass="+$p.string.esc(document.forms["newpass"].oldpass.value)+"&pass1="+l_pass1,
						'alarm':true
					}
				);
			}
		}	
	},
	/*
		$p.app.connection.set : connect user
		inputs
			v_form : form used to get user connection information
			v_function : function called when connected
			v_type : connection type
	*/
	set:function(v_form,v_function,v_type)
	{
		// connect to profile
		var l_connStr="u="+v_form.username.value+"&p="+$p.string.esc(v_form.password.value);
		if (v_form.autoconn && v_form.autoconn.checked) l_connStr+="&auto=1";
		if (v_type) l_connStr+="&rtype=1";
		if (v_form.username.value==""){$p.app.alert.show(lg("lblEmailChk")+".\r\n");}
		else {
			$p.ajax.call('scr_connect.php',
				{
					'type':'execute',
					'variables':l_connStr,
					'alarm':true,
					'forceExecution':true,
					'callback':
					{
						'function':v_function
					}
				}
			);
		}
		return false;
	},
	/*
		$p.app.connection.subscribe : application subscription process
		inputs
			v_form : subscription form object
			v_function : function called with user is registrered and connected
	*/
	subscribe:function(v_form,v_function)
	{	
		// subscribe to application
		var l_e="";
		var l_a="";
		var n = v_form.length;
		var i=0;
		var minicount=0;
		var tabRadio=[];
		var oldname="";
		var temp;
		
		v_form.pass.value = $p.string.trim(v_form.pass.value);
		v_form.confpass.value = $p.string.trim(v_form.confpass.value);
		
		if (v_form.username.value=="") {l_e+=lg("msgSubEmailMiss")+"<br />";}
		if (v_form.pass.value=="") {l_e+=lg("msgSubPassMiss")+"<br />";}
		else
		{
			if (__accountType=="mail" 
                && !checkEmail(v_form.username.value)) {
                    l_e+=lg("msgSubEmailValid")+"<br />";
            }
		}
		if ((v_form.pass.value.length<6) || (v_form.confpass.value.length<6)) {l_e+=lg("msgSubPassToShort")+"<br />";}
		if (__accountType=="mail" && v_form.username.value!=v_form.username2.value){l_e+=lg("msgSubEmaildiff")+"<br />";}
		if (v_form.pass.value!=v_form.confpass.value){l_e+=lg("msgSubPassDiff")+"<br />";}
		if(__useConditions&&!v_form.conditions.checked){l_e+=lg("msgSubCond")+"<br />";}
		
		var l_connStr="u="+v_form.username.value+"&p="+v_form.pass.value+((__useNewsletter&&v_form.newsletter.checked)?"&n=1":"")+"&l="+v_form.longname.value+"&nbSpecificFields="+v_form.nbSpecificFields.value;
	
		for (i=6;i<n;i++)
		{
			switch (v_form.elements[i].type)
			{
				case 'text':
				{
					//is the field mandatory and is it filled with something
					var mandatory = v_form.elements[i].getAttribute("mandatory");
					if (mandatory==1 && v_form.elements[i].value=="")
						l_a=lg("errorEmptyFieldForm");
					else
						l_connStr+="&"+v_form.elements[i].name+"="+v_form.elements[i].value+"&criteria";							
						
					break;
				}
				case 'select-one':
				{
					l_connStr+="&"+v_form.elements[i].name+"="+v_form.elements[i].value;	
					break;
				}
				case 'textarea':
				{
					//is the field mandatory and is it filled with something
					var mandatory = v_form.elements[i].getAttribute("mandatory");
					if (mandatory==1 && v_form.elements[i].value=="")
						l_a=lg("errorEmptyFieldForm");
					
					else
					l_connStr+="&"+v_form.elements[i].name+"="+v_form.elements[i].value;	
					break;
				}		
				case 'radio':
				{
					var maxIndex=tabRadio.length;
					var escap=0;						
					var currentName = v_form.elements[i].name;
					var mandatory = v_form.elements[i].getAttribute("mandatory");
					
						if (maxIndex>0)
						{
							for (var j=0;j<maxIndex;j++)
							{
								if (tabRadio[j]==currentName)
									escap=1;
								else
									tabRadio[maxIndex]=currentName;							
							}
						}
						else
						tabRadio[0]=currentName;
						
						if (escap==0)
						{
							var cpt=i;
							var correct=0;
							//if the first element isn't checked						
							if (v_form.elements[cpt].checked!=true)
							{
									//we scan the others
									while (v_form.elements[cpt+1].name==currentName)
									{
										if (v_form.elements[cpt+1].checked==true)
											{
												correct=1;
												l_connStr+="&"+v_form.elements[cpt+1].name+"="+v_form.elements[cpt+1].value;
											}
											
										cpt++;
									}
							}												
							else
							{
								correct=1;
								l_connStr+="&"+v_form.elements[cpt].name+"="+v_form.elements[cpt].value;	
							}
						
							if (mandatory==1)
							{	
								if (correct!=1)
								l_a=lg("errorEmptyFieldForm");	
							}
						}
					break;
					}
					
				case 'checkbox':
				{										
					var mycurrentName = v_form.elements[i].name;
					var passage=0;
					var c_result="";
					
					if (oldname=="")
					{
						oldname=mycurrentName;
						passage=1;
						minicount=0;
						temp=0;
					}
					else if (oldname!=mycurrentName)
					{
						oldname=mycurrentName;
						passage=1;
						minicount=0;
						temp=0;
					}
					else
						passage=0;
								
					//If the field is mandatory, verify that at least one checkbox is checked
					var mandatory = v_form.elements[i].getAttribute("mandatory");
					var cpt=i;
					if (passage==1)
					{
						if (v_form.elements[i].checked!=true)
							minicount++;
						else
							c_result+=v_form.elements[i].value+';';
							while (v_form.elements[cpt+1].name==mycurrentName)
							{
								temp = v_form.elements[cpt+1].value;
								if (v_form.elements[cpt+1].checked!=true)
									minicount++;
								else
									c_result+=temp+';';
							
								cpt++;
							}	
							if (mandatory==1)
							{	
								if (minicount==temp)
								l_a=lg("errorEmptyFieldForm");
							}
								
						if (c_result!="")
						{	
							var taille=c_result.length;
							var variable=c_result.substr(0,taille-1); 
							c_result=variable;
						}
						l_connStr+="&"+v_form.elements[i].name+"="+c_result;
					}
					break;	
				}
			}
		}

		if (l_a!="") l_e+=l_a;
		if (l_e=="")
		{
			var nbCriterias=v_form.nbSpecificFields.value;
			for (var j=1;j<=nbCriterias;j++)
			{
				var idName="c_id"+j;
				var idValue=v_form.elements[idName].value;
				l_connStr+="&"+idName+"="+idValue;
			}
		
			$p.ajax.call('scr_subscribe.php',
				{
					'type':'execute',
					'variables':l_connStr,
					'alarm':true,
					'forceExecution':true,
					'method':'post',
					'callback':
					{
						'function':v_function
					}
				}
			);
		}
		else
		{
			$p.app.alert.show(l_e);
		}
		return false;
	},	
	/*
		$p.app.connection.test : test connection to the server
	*/
	test:function()
	{
		if ($p.app.connection.active && $p.app.user.id!=0)
		{
			$p.ajax.call(__LOCALFOLDER+'portal/xmlcheckuserconnection.php',
				{
					'type':'load',
					'callback':
					{
						'function':$p.app.connection.testTreatment,
						'variables':
						{
							'function':$p.app.connection.errorTest
						}
					},
					'escape':$p.app.connection.errorTest,
					'source':'xml',
					'method':'GET'
				}
			);
		}
	},
	/*
		$p.app.connection.testTreatment : treat server response on server testing
	*/
	testTreatment:function(response,vars)
	{
		var l_check=$p.ajax.getVal(response,"userid","str",false,0);
		if (l_check==0) $p.app.connection.errorTest();
	},
	/*
		$p.app.connection.errorTest : treat connection issue
	*/
	errorTest:function()
	{
		if (!$p.app.connection.active) return;
		$p.app.connection.active=false;
		var l_response=confirm(lg("youHaveBeenDisconnected"));
		if (l_response==1) $p.navigator.openLink();
	},
	/*
		$p.app.connection.saveMenu : display page saving options (when user is not connected)
	*/
		/*
		$p.app.connection.saveMenu : display page saving options (when user is not connected)
	*/
	saveMenu:function ()
	{
        var lblusername = __accountType=='mail'?lg('lblEmail'):lg('lblLogin');
		var l_s=
            '<div id="loginscreen">'
            +'<div style="float: left;width: 150px;">'
            +'<h2 id="lsconnectTitle">'+lg('lblConnect')+'&gt;</h2>'
            +'<p><a class="w" onclick="return $p.app.connection.buildmissingPasswordForm();" href="'+pfolder+'password_missing.php">'+lg("lblMissingPassword")+' ?</a></p>'
            +'<div id="msg_conn">&nbsp;</div>'
            +'</div>'
            +'<div id="displayPart">'
            +'<form name="form2" method="post" onsubmit="return $p.app.connection.set(this,$p.app.pages.save);">'
			+'<h2>'+lg("lblAlreadyMember")+'</h2>'
			+ '<strong><label for="username">'+lblusername+'</label></strong> :<br />'
			+'<input class="thinbox" name="username" id="username" type="text" maxlength="64" value="" size="30"/><br />'
			+ '<strong><labe  for="password">' +lg("lblPassword")+'</label> :<br />'
			+'<input class="thinbox" name="password" type="password" maxlength="16" size="30" />&nbsp;&nbsp;'	
			+'<br /><label><input type="checkbox" name="autoconn" />'+lg("lblAutoConnection")+'</label><br />'
			+'<br /><center><input type="submit" class="submit" value="'+lg("lblSavePage")+'" /></center><br />'
			+'</form>'
            ;    
    
		l_s+=__conditionComment;

		l_s+='<div class="title">'+lg('notAMemberYet')+' ?</div><br />'
			+$p.img('puce.gif')+'&nbsp;<a href="#" onclick="$p.app.connection.subscribeMenu()">'+lg('lblAccountCreation')+'</a><br /><br />';

		$p.app.popup.fadein(l_s,420,indef,$p.img("ico_menu_disk.gif",14,14,"","imgmid")+" "+lg("lblSavePage"),true);
	},
	subscribeMenu:function()
	{
		var code = $p.app.captcha.generate_code();
		var captcha_call='',account_call='';
		if(__captcha)
			captcha_call='return $p.app.captcha.verif_code(this);';
		else
			captcha_call='return $p.app.connection.subscribe(this,$p.app.connection.subscribeConfirmation);';
		account_call=__accountType=="mail"?lg("lblEmail"):lg("lblLogin");
		var  type_account = "";
		if (__accountType=="mail")	{
			type_account =lg("lblEmailConfirmation")+' : <br />'
					+'<input class="thinbox" name="username2" type="text" maxlength="64" style="width: 200px" />'
					+'&nbsp;<font color="red">*</font><br />';
		}
		
		var l_s='<br />'
			+'<form name="form1" method="post" onsubmit="'+captcha_call+'">'
			+account_call+' :<br />'
			+'<input class="thinbox" name="username" type="text" maxlength="64" style="width: 200px" />&nbsp;<font color="red">*</font><br />'
			+ type_account
			+lg("lblPassword")+' :<br />'
			+'<input class="thinbox" type="password" name="pass" maxlength="16" style="width: 180px" />&nbsp;<font color="red">*</font><br />'
			+lg("lblPasswordConfirmation")+' :<br />'
			+'<input class="thinbox" type="password" name="confpass" maxlength="16" style="width: 180px" />&nbsp;<font color="red">*</font><br />'
			+lg("lblName")+' :<br />'
			+'<input class="thinbox" name="longname" type="text" maxlength="99" style="width: 200px" /><br />'
			+'<div id="specificMenu">'
			+'</div><br />';
		if(__captcha){
			l_s+='<table>'
			+	lg("captchaUse")+' :<br />'
			+'		<img name="imgCaptcha" src="'+__LOCALFOLDER+'tools/securimage/securimage_show.php?rand='+ code +'" id="imgCaptcha" align="absmiddle" style="cursor:pointer" onclick="$p.app.captcha.updatePage(document.forms[\'form1\'])" />'
			+'		<input id="code" type="hidden" name="code" value="'+code+'" />'
			+'</td></tr>'
			+'<tr><td>'
			+'      <input id="txtCaptcha" type="text" name="txtCaptcha" value="" maxlength="10" size="32" />'
			+'</td></tr>';
			+'</table>';
		}
			//+'<label><input type="checkbox" name="autoconn" />'+lg("lblAutoConnection")+'</label><br />';
		if (__useNewsletter) l_s+='<label><input type="checkbox" name="newsletter" />'+lg('lblNewsletterRequired')+'</label> '+__apname+'.<br />';
		if (__useConditions) l_s+='<input type="checkbox" name="conditions" />'+lg('lblConditionsStr','&nbsp;<a href="#" onclick=\'return $p.navigator.openLink("conditions.html",true,true);\'>'+lg('lblConditions')+'</a>')+'.<br />';
		l_s+='<br /><center><input type="submit" class="submit" name="'+lg("lblOk")+'" value="'+lg("lblSave")+'" /></center>'
		l_s+='</form>';

		$p.app.popup.show(l_s,420,indef,$p.img("ico_menu_disk.gif",14,14,"","imgmid")+" "+lg("lblAccountCreation"),true);

		$p.app.connection.loadMenuCriterias();
	},
	/*
		$p.app.connection.subscribeConfirmation : message to confirm user subscription
	*/
	subscribeConfirmation:function()
	{
		$p.app.popup.show('<b>'+lg('accountToValidate')+'</b><br /><br /><a href="#" onclick="$p.app.popup.hide()">'+lg('lblClose')+'</a>',500,indef,$p.img("ico_menu_disk.gif",14,14,"","imgmid")+" "+lg("lblAccountCreation"),true);
	},
	/*
		$p.app.connection.loadMenuCriterias : call menu criterias
	*/
	loadMenuCriterias:function()
	{
		$p.ajax.call('xmldisplayhtmlcriteria.php',
			{
				'type':'load',
				'callback':
				{
					'function':$p.app.connection.menuCriterias
				},
				'source':'html'
			}
		);		
	},
	/*
		$p.app.connection.menuCriterias : display specific criterias
	*/
	menuCriterias:function(response,vars)
	{
		$p.print("specificMenu",response);
	},
    link2MissingPassword: function () {
        var url = '<p><a class="w" id="ls_missingpass" onclick="return $p.app.connection.buildmissingPasswordForm();" href="password_missing.php" target="_blank">'
                +lg('lblMissingPassword')
                +'</a></p>';
        return url;
    },
	/*
		$p.app.connection.menu : display connection box
	*/
	menu:function()
	{
        var lblusername = __accountType=='mail'?lg('lblEmail'):lg('lblLogin');
        
		var l_s='\
		<div id="loginscreen">\
			<div style="float: left;width: 150px;">\
                <h2 id="lsconnectTitle">'+lg('lblConnect')+'&gt;</h2>\
                <div id="msg_conn">&nbsp;</div>\
                <p><a class="w" id="ls_missingpass" onclick="return $p.app.connection.buildmissingPasswordForm();" href="password_missing.php" target="_blank">'+lg('lblMissingPassword')+'</a></p>\
			</div>\
			<div id="displayPart">\
                <form name="conBox" method="post" onsubmit="return $p.app.connection.set(this,$p.app.pages.isPageExisting)">\
                    <strong><label id="ls_lbl_username" for="username">'+lblusername+'</label></strong><br />\
                    <input type="text" id="connectionname" class="thinbox" name="username" maxlength="64" style="width: 250px;" /><br /><br />\
                    <strong><label id="ls_lbl_password" for="password">'+lg('lblPassword')+'</label></strong><br />\
                    <input type="password" name="password" class="thinbox" maxlength="32" style="width: 250px;" /><br /><br />\
                    <input type="checkbox" id="ls_lbl_autoconnect" name="autoconn" />'+lg('lblAutoConnection')+'<br /><br />\
                    <input type="submit" class="submit" class="btn" value="'+lg('lblConnect')+'" />\
                </form>\
			<br/><br/>\
            </div>\
        </div>\
            ';
            
        $p.app.popup.fadein(l_s,500,indef,lg("lblConnectToYourPortal"));
	},
    back: function (part) {
        $p.print(part,$p.app.connection.oldvalues[part]);
        delete $p.app.connection.oldvalues[part];
    },
    buildmissingPasswordForm: function () {
        
        var l_s = '\
        <div id="missingScreen">\
			<form name="help" onsubmit="return $p.app.connection.askForANewPassword(this);">\
			<h4 id="help_mis_pass"></h4>\
			<p id="lbl_set_NewPassword_Missing">gqsdgsdg</p>\
			<p><label id="help_email_conn"></label>: <input type="text" name="emaillost" size="30" maxlength="64" value="" /></p>\
            <input type="submit" class="btn"  id="btn_conn" value="OK" />\
			</form>\
			<br />\
			<script type="text/javascript">\
				document.forms["help"].emaillost.focus();\
			</script>\
		</div>\
		<div>\
        <a href="#" id="help_screen_conn" onclick="return $p.app.connection.back(\'displayPart\');">back to the login screen</a>\
		</div>\
    ';
    
        $p.app.connection.oldvalues['displayPart'] = $('displayPart').innerHTML;
  
        $p.print('displayPart',l_s);
        
        $('btn_conn').value=lg('lblBtnSend');
        $p.print('msg_conn','');
        $p.print('help_mis_pass',lg('lblMissingPassword'));
        $p.print('help_screen_conn',lg('backScreenConn'));
        $p.print('lbl_set_NewPassword_Missing',lg('lblsetNewPasswordMissing'));
        $p.print('help_email_conn',lg('email'));
        
        return false;
        
    },    
    response_askPasswd: function (response,vars) {
        
        if (response && response.getElementsByTagName('email').length > 0) {
       
            part = vars['part'];
            $p.app.connection.back(part);
            $p.print('msg_conn','<p class="warningok">'+lg('msgRenewPassTxt')+'</p>');
            $('displayPart').style.height='200px';
                
        } else {
            $p.print('msg_conn','<p class="warning">'+lg('lblUnknownUser')+'</p>');             
        }   
        
        
        return false;
    },
    askForANewPassword:function (v_form) {

        $p.ajax.call('scr_sendmd5.php',
				{
					'type':'load',
					'variables':'username='+v_form.emaillost.value,
					'alarm':false,
					'forceExecution':true,
                    //'source':'xml',
                    'method':'POST',
					'callback':
					{
						'function':$p.app.connection.response_askPasswd,
                        'variables':{
                                        'part':'displayPart'
                                    }
                                    
					}
                   
				}
			);
        //$p.app.connection.backandWait('displayPart');
        return false;
        
    }
      
}
//********************* CAPTCHA************************************************************************************************
$p.app.captcha={
	//$p.app.captcha.updatePage
	//for change the captcha image
	updatePage:function(form)
	{
		$p.ajax.call("scr_captcha_erase.php",
			{
				'type':'execute',
				'variables':"code="+form.code.value,
				'forceExecution':true
			}
		);
	  //generate a new code
	  var code= $p.app.captcha.generate_code();
	  //Change the image
	  form.imgCaptcha.src = __LOCALFOLDER+'tools/securimage/securimage_show.php?rand='+code;
	  //change the idden code
	  form.code.value=code;
	  
	},
	//$p.app.captcha.generate_code
	//generate the code
	generate_code:function()
	{
		var code = "";
		var charset=["A","B","C","D","E","F","G","H","K","L","M","N","P","R","S","T","U","V","W","Y","Z","2","3","4","5","6","7","8","9"];
		
		//length of charset:
		var cslen = 29;
		
		var i;
		for(i=1 ; i <= 5; i++) {
			code +=  charset[Math.floor(Math.random()*(cslen-1))] ;
		}
		return code;
	},
	//$p.app.captcha.verif_code
	verif_code:function(form)
	{
		var code_gen=form.code.value;
		var code_ent=form.txtCaptcha.value;
		$p.ajax.call('xmlcaptcha.php?code_gen='+code_gen+'&code_ent='+code_ent,
				{
					'type':'load',
					'callback':
					{
						'function':$p.app.captcha.get_captcha_result,
						'variables':{
									'form':form
									}
					}
					
				}
			);
		return false;
	},
	//$p.app.captcha.get_captcha_result
	get_captcha_result:function(response,vars)
	{
		var test=$p.ajax.getVal(response,"resulta","int",false,-1);
		if(test==1){
			$p.app.connection.subscribe(vars['form'],$p.app.connection.subscribeConfirmation);
		}
		else{
			$p.app.alert.show(lg("BadCaptcha"));
		}
		$p.app.captcha.updatePage(vars['form']);
	}
}

//********************* BANNERS ************************************************************************************************

//Manage the information in the portal banner
$p.app.banner={};
$p.app.banner.option={
	shown:false,
	/*
		$p.app.banner.option.show : display tab options banner
	*/
	show:function()
	{
		//no access to options if page locked
		if (tab[$p.app.tabs.sel].locked) return false;
		if ($p.app.banner.option.shown)
			$p.app.banner.option.hide();
		
		else
		{
			//display the options in the banner
			var l_s='<table cellpadding="3" cellspacing="0" border="0" width="100%">'
				+'<tr>'
				+'<td class="advise" align="center">'
				+(tab[$p.app.tabs.sel].type==1?'<a href="#" onclick=\'$p.app.menu.open(false,"pwidget")\'>'+$p.img('ico_menu_add.gif',14,14,'','imgmid')+' '+lg('lblAddContent')+'</a> | ':'')
				+'<a href="#" onclick=\'$p.app.menu.open(false,"poptions")\'>'+lg('optionsOfThisPage')+'</a> | ';

			for (var i=0;i<__option.length;i++)
			{
				if ((__option[i]["anonymous"]&&$p.app.user.id<=0)||(__option[i]["connected"]&&$p.app.user.id>0)) l_s+="<a href='#' id='"+__option[i]["id"]+"' onclick='return "+__option[i]["fct"]+"'>"+$p.img(__option[i]["img"],16,16,__option[i]["comment"],"imgmid")+" "+__option[i]["label"]+"</a> | ";
			}

			l_s+='<a href="#" onclick="return $p.app.tabs.edit('+$p.app.tabs.sel+');">'+lg('renameThisPage')+'</a> | ';

			if ($p.app.user.id>=0)
				l_s+='<a href="#" onclick="return $p.app.pages.suppress();">'+$p.img('ico_suppress.gif',14,14,'','imgmid')+' '+lg('lblSuppresspage')+'</a>';
			
			l_s+='</td>'
				+'</tr>'
				+'</table>';

			$p.print("advise",l_s);
			$p.show("advise","block");
			$p.app.banner.option.shown=true;
			$p.app.banner.info.shown=false;
		}
		return false;
	},
	/*
		$p.app.banner.option.hide : hide tab options banner
	*/
	hide:function()
	{
		$p.show("advise","none");
		$p.app.banner.info.load();
		$p.app.banner.option.shown=false;
	}
}
$p.app.banner.info={
	shown:true,
	requested:'Y',
	loaded:false,
	item:[],
	itemid:0,
	/*
		$p.app.banner.info.load : load information for the information banner
	*/
	load:function()
	{
		if (__bartype==1 && __bartexthtml!="" && $p.app.banner.info.shown!=false)
		{
			var l_s=__bartexthtml;
			if (__barclosing) 	l_s+=" <a href='#' onclick='return $p.app.banner.info.hide()'>"+$p.img("ico_close.gif",12,11)+"</a>";
			
			$p.print("information",l_s);
			$p.app.banner.info.show();
		}
		//if ($p.app.banner.info.requested=="Y"&&__rssinfo!=""){
		if (__bartype==2 && __rssinfo!="")
		{
			$p.ajax.call(__rssinfo,
				{
					'type':'load',
					'callback':
					{
						'function':$p.app.banner.info.displayRss
					}
				}
			);
			$p.app.banner.info.show();
			$p.app.banner.info.loaded=true;
		}
	},
	/*
		$p.app.banner.info.displayRSS : display RSS information in banner
	*/
	displayRss:function(response,vars)
	{
		var i=0;
		while (response.getElementsByTagName("item")[i])
		{
			var result=response.getElementsByTagName("item")[i];
			if ($p.ajax.getVal(result,"link","str",false,"")=="")
				$p.app.banner.info.item.push($p.ajax.getVal(result,"title","str",false,"..."));
			else
				$p.app.banner.info.item.push("<a target='_blank' href='"+$p.ajax.getVal(result,"link","str",false,"#")+"'>"+$p.ajax.getVal(result,"title","str",false,"...")+"</a>");
			
			i++;
		}
		$p.app.banner.info.roll();
	},
	/*
		$p.app.banner.info.roll : roll over RSS articles
	*/
	roll:function()
	{
		if ($p.app.banner.info.item.length>0 && $p.app.banner.info.shown)
		{
			var l_s="";
			if ($p.app.banner.info.itemid==$p.app.banner.info.item.length) $p.app.banner.info.itemid=0;
			l_s+=$p.app.banner.info.item[$p.app.banner.info.itemid];
			$p.app.banner.info.itemid++;
			$p.print("information",l_s);
		}
	},
	/*
		$p.app.banner.info.show : display information banner
	*/
	show:function()
	{
		$p.show("information","block");
		$p.app.banner.info.shown=true;
	},
	/*
		$p.app.banner.info.hide : hide information banner
	*/
	hide:function()
	{
		$p.show("information","none");
		$p.app.banner.info.shown=false;
	}
}

//********************* POPUP MANAGEMENT **********************************************************************************************************************

$p.app.popup={
	/*
		$p.app.popup.build : build the popup object
	*/
	build:function(v_width,v_height)
	{
		if ($('popup')==null)
		{
			var l_popup=new Element('div', {'id':'popup'} );
			document.body.appendChild(l_popup);
		}
		else
			var l_popup=$('popup');

		if (v_width==indef) v_width=500;
		if (v_height==indef) v_height=200;

		l_popup.style.width=v_width+"px";
		l_popup.style.height=v_height+"px";
		l_popup.style.marginLeft="-"+(v_width/2)+"px";
	
		// round corners
		var mDivObj = new Element('div', {
				'styles': {
					'width': v_width+'px'
				},
				'class': 'round'
			}
		 );
		var b1 = new Element('b', { 'class': 'b1' } );	
		var b2 = new Element('b', { 'class': 'b2' } );	
		var b3 = new Element('b', { 'class': 'b3' } );	
		var b4 = new Element('b', { 'class': 'b4' } );			
		b1.inject(mDivObj);
		b2.inject(mDivObj);
		b3.inject(mDivObj);
		b4.inject(mDivObj);

		var mDivBox = new Element('div', { 'class': 'boxcontent' } );

		var mDivTitle = new Element('div', {'id':'popuptitle'});
		mDivTitle.inject(mDivObj);

		var mDivObj2 = new Element('div', 
			{
				'styles': {
					'width': '100%'
				},
				'id': 'popupcontent'
			}
		);
		mDivObj2.inject(mDivBox);
		mDivBox.inject(mDivObj);

		var b1b = new Element('b', { 'class': 'b1b' } );	
		var b2b = new Element('b', { 'class': 'b2b' } );	
		var b3b = new Element('b', { 'class': 'b3b' } );	
		var b4b = new Element('b', { 'class': 'b4b' } );			
		b4b.inject(mDivObj);
		b3b.inject(mDivObj);
		b2b.inject(mDivObj);
		b1b.inject(mDivObj);
		//display
		mDivObj.inject(l_popup);
	},
	/*
		setTitle : set the popup title
		Inputs :
			v_title : popup title
			v_closeBtn : define if close button is shown or not
			v_closeFct : function called on width close
	*/
	setTitle:function(v_title,v_closeBtn,v_closeFct)
	{
		if (v_closeBtn==indef) v_closeBtn=true;
		if (v_title!=indef)
		{
			var popTable = new Element('table', { 'class': 'popuphdr' } );
			var tbodypopTable = new Element('tbody');
			var trpopTable = new Element('tr');
			var tdpopTable = new Element('td', 
				{
					'styles': {
						'vertical-align': 'middle', 
						'padding-left': '8px'
					}
				} 
			);
			tdpopTable.set('html',v_title);
			tdpopTable.inject(trpopTable);
			if (v_closeBtn) 
			{
				var td2popTable = new Element('td',
					{
					    'styles': {
					        'text-align': 'right', 
							'padding-right': '8px'
						}
					}
				);
				var l_aObj = new Element('a', 
					{
						'events': 
						{
							'click': function()
							{
								if (v_closeFct!=indef) eval(v_closeFct);
								$p.app.popup.hide();
							}
						},
						'href': '#'
					}
				);
				l_img=new $p.imgObj("ico_close.gif",12,11,'','');
				l_img.injectInside(l_aObj);
				l_aObj.inject(td2popTable);
				td2popTable.inject(trpopTable);					
			}
			trpopTable.inject(tbodypopTable);
			tbodypopTable.inject(popTable);
			popTable.inject($('popuptitle'));
		}
	},
	/*
		$p.app.popup.setContent: set popup content
	*/
	setContent:function(v_content)
	{
		($('popupcontent')).set('html',v_content);
	},
	/*
		$p.app.popup.show : Display popup in the middle of the page
		inputs
			v_content (string) : HTML content of the popup
			v_width (integer) : popup width
			v_height (integer) : popup height
			v_title (string) : title displayed in the popup header
			v_closeBtn (boolean) : define if close button is displayed or not
			v_closeFct (string) : function called when popup is closed
	*/
	show:function(v_content,v_width,v_height,v_title,v_closeBtn,v_closeFct)
	{
		$p.app.popup.hide();
		$p.app.cache.shadow();
		$p.app.popup.build(v_width,v_height);
		$p.app.popup.setTitle(v_title,v_closeBtn,v_closeFct);
		$p.app.popup.setContent(v_content);
	},
	/*
		$p.app.popup.fadein : same that show but with fadein effect
	*/
	fadein:function(v_content,v_width,v_height,v_title,v_closeBtn,v_openFct,v_closeFct)
	{
		var l_openFct=["$p.app.popup.show('"+$p.string.removeCot(v_content,'simple')+"',"+v_width+","+v_height+",'"+v_title+"',"+v_closeBtn+","+v_closeFct+")"];
		if (v_openFct!=indef) l_openFct.push(v_openFct);
		$p.effect.fadein($('cache'),l_openFct,0.7);
	},
	openUrl:function(v_url,v_width,v_height,v_title,v_closeBtn,v_closeFct)
	{
		$p.app.popup.fadein("<iframe src='"+v_url+"' width='"+(v_width-20)+"' height='"+v_height+"' frameborder='no' marginwidth='0' marginheight='0' scrolling='no'></iframe>",v_width,v_height,v_title,v_closeBtn,v_closeFct);
	},
	/*
		$p.app.popup.hide : close popup created with popup function 
	*/
	hide:function()
	{
		if ($('popup') != null)
		{
			document.body.removeChild($('popup'));
			$p.app.cache.hideShadow();
		}
	}
}
/*	
	tooltip : generate tool tip link
	input : v_msg : message displayed in tooltip on mouse over
	output : tooltip HTML code
*/
function tooltip(v_msg)
{
	return "<a href='#' onclick='return false' onmouseover=\"mouseBox(lg('"+v_msg+"'),event)\" onmouseout=\"mouseBox('')\">"+$p.img("ico_help_s.gif",12,12,"","imgmid")+"</a>";
}
/*
	mousebox : Display text in tooltip box, next to mouse pointer
	inputs
		v_s (string) : text to display
		e(event) : event object
*/
function mouseBox(v_s,e)
{
	if (__displayrssdesc)
	{
		if (v_s=="")
		{
			$p.show("mousebox","none");
		}
		else
		{
			if ($("mousebox")==null)
			{	
				var l_div = new Element('div', { 'id': "mousebox" } );
				document.body.appendChild(l_div);	
			} else l_div=$("mousebox");
			$p.print("mousebox",v_s);

			if (e==indef && window.event) e=window.event;
			//if(typeof e.layerX=="undefined")e.layerX=e.offsetX;
			//if(typeof e.layerY=="undefined")e.layerY=e.offsetY;
			//var e=window.event;
			var posLeft=($p.navigator.IE?(e.clientX + document.documentElement.scrollLeft):e.pageX+10);
			var posTop=($p.navigator.IE?(e.clientY + document.documentElement.scrollTop):e.pageY+10);

			l_div.setStyle("left",posLeft+"px");
			l_div.setStyle("top",posTop+"px");

			$p.show("mousebox","block");
			var l_boxWidth=l_div.offsetWidth;
			var l_boxHeight=l_div.offsetHeight;
			// if a part of the box is outside the screen
			var l_outScreen=0;
			if (posLeft > (Window.getWidth()+document.documentElement.scrollLeft-l_boxWidth)) l_outScreen++;
			if (posTop > (Window.getHeight() + document.documentElement.scrollTop-l_boxHeight)) l_outScreen+=2;
			if (l_outScreen==1){l_div.setStyle("left",(Window.getWidth()+document.documentElement.scrollLeft-l_boxWidth-20)+"px");}
			if (l_outScreen==2){l_div.setStyle("top",(Window.getHeight()+document.documentElement.scrollTop-l_boxHeight-20)+"px");}
			if (l_outScreen==3)
			{
				l_div.setStyle("left",(Window.getWidth()+document.documentElement.scrollLeft-l_boxWidth-20)+"px");
				l_div.setStyle("top",(posTop-l_boxHeight-15)+"px");
			}
		}
	}
}


/*
	validKeys : Valid the search area input value
	input : form containing searchtxt input

function validKeys(v_form)
{
	var l_value=v_form.searchtxt.value;
	if (l_value.substr(0,3)=='ex:' || l_value=='')
	{
		$p.app.alert.show(lg("msgKWInput"));return false;
	}
	else
	{
		var i=0,l_pos=0,l_newpos;
		while (l_value.indexOf(',',l_pos)!=-1)
		{
			l_newpos=l_value.indexOf(',',l_pos);
			if (l_value.substring(l_pos,l_newpos)!='' && l_value.substring(l_pos,l_newpos)!=' '){i++;}
			l_pos=l_newpos+1;
		}
		if (l_value.substr(l_pos)!='' && l_value.substr(l_pos)!=' '){i++;}
		if (i<5){
			$p.app.alert.show(lg("msgKWError"));return false;
		}
		else
		{
			v_form.searchtxt.value=$p.string.formatForSearch(l_value);
			return true;
		}
	}
}
	Display help messages

function help(v_id)
{
	var msg;
	switch(v_id)
	{
		case 1:msg=lg("msgHelp1");break;
	}
	$p.app.alert.show(msg);
	return false;
}
// open help box - Not used anymore
function openHelp()
{
	$p.navigator.openLink("firstusage.html",true,true);
	return false;
}
function errorMsg(v_id)
{
	return lg("msgError"+v_id);
}
*/


/*
	openPage : open a personalizable Portaneo page
	input : page id
*/
function openPage(v_p)
{
	if (v_p)
	{
		$p.app.pages.setCurrent(v_p);
		$p.navigator.openLink("../portal/mypage.php?s="+v_p);
	}
}


//********************* ALERTS MANAGEMENT **********************************************************************************************************************

$p.app.alert={
	shown:false,
	timer:0,
	/*
	** $p.app.alert.show : Display message
	** Input :
	** - v_msg : message to display
	** - v_type : message type 1:information 2:help 3:alert/error
	*/
	show:function(v_msg,v_type)
	{
		var l_img;
		switch (v_type)
		{
			case indef:
			case 1:
				l_img="ico_info.gif";
				break;
			case 2:
				l_img="ico_help2.gif";
				break;
			case 3:
				l_img="ico_alert.gif";
				break;
		}
		if ($("errordiv")==null)
		{
			var l_obj=null;
			l_obj = new Element('div', { "id": "errordiv", "class": "errordiv" } );	
			document.body.appendChild(l_obj);
		}
		else
		{
			l_obj=$("errordiv");
		}
		l_obj.setStyle("top",(document.all)?document.documentElement.scrollTop+"px":window.pageYOffset+"px");
		var l_msg="<img src='../images/"+l_img+"' align='absmiddle' /> "+v_msg;
		if ($p.app.alert.shown)
		{
			$p.print("errormsg",l_msg+"<br />","top");
		}
		else
		{
			$('errordiv').set('html',"<table width='100%'><tr><td align='center' id='errormsg' onclick='return $p.app.alert.hide()'>"+l_msg+"</td><td width='13' align='center'><a href='#' onclick='return $p.app.alert.hide()'>"+$p.img("ico_close.gif",12,11)+"</a></td></tr></table>");
		}
		//avoid that the message remain in the middle of the page
		window.onscroll=$p.app.alert.hide;
		$p.effect.fadein(l_obj);
		$p.app.alert.shown=true;
		//hide after x seconds
		if ($p.app.alert.timer==0)
		{
			$p.app.alert.timer=setTimeout("$p.app.alert.hide()",7000);
		}
		else
		{
			clearTimer($p.app.alert.timer);
			$p.app.alert.timer=setTimeout("$p.app.alert.hide()",7000);
		}
		return false;
	},
	hide:function()
	{
		if ($p.app.alert.shown==true)
		{
			$p.app.alert.shown=false;
			$p.effect.fadeout($("errordiv"));
			window.onscroll=null;
			$p.app.alert.timer=0;
		}
		return false;
	}
}

//********************* TIMER MANAGEMENT **********************************************************************************************************************


$p.app.counter={
	timer:0,
	step:0,
	activityStep:0,
	/*
		$p.app.counter.reset : reset application counter
		input : starting step (10seconds = 1 step)
	*/
	reset:function(v_step)
	{
		if ($p.app.counter.timer) $p.app.counter.stop();
		$p.app.counter.step=v_step?v_step:0;
		$p.app.counter.timer=setInterval("$p.app.counter.action()",10000);
	},
	/*
		$p.app.counter.action : manage actions triggers on defined step
	*/
	action:function()
	{
		if ($p.app.counter.step==1) $p.app.checkLoading(false);
		// other action are launched when user is connected
		if ($p.app.user.id>0)
		{
//			if ($p.app.counter.step==1&&__useSharing) p_msg.getNb();
			//if security applied on portal, lock after inactivity
			if ($p.app.counter.activityStep==90&&tab[$p.app.tabs.sel].lock!=0) $p.app.pages.lock();
			//refresh modules that need to be refreshed periodically (RSS, mails, ...)
			if (__rssrefreshdelay!=0 && $p.app.counter.step%__rssrefreshdelay==(__rssrefreshdelay-1)) $p.app.widgets.rss.refreshAll();
			//check connection to DB
			$p.app.inactivityTime++;
			if (__useChat && $p.app.user.status!='x')
			{
				if ($p.app.connection.active)
				{
					//delay activity check if no connection
					p_chat.checkActivity();
				}
				else
				{
					if ($p.app.counter.step%6==5) p_chat.checkActivity();
				}
			}
			else
			{
				if ($p.app.counter.step%60==59) $p.app.connection.test();
			}
		}
		if ($p.app.counter.step%2==1 && __bartype==2) $p.app.banner.info.roll();
		$p.app.counter.step++;
		$p.app.counter.activityStep++;
	},
	/*
		$p.app.counter.stop : stop counter
	*/
	stop:function()
	{
		clearTimer($p.app.counter.timer);
	}
}

//********************* MULTIMEDIA READER **********************************************************************************************************************

$p.app.reader={
	/*
		$p.app.reader.open : open multimedia files reader
		inputs
			v_src : url of the multimedia file
			v_type : type of the file (a=audio, v=video)
	*/
	open:function(v_src,v_type)
	{
		// Open media inside Portaneo
		var l_s=''
			+'<table width="100%" cellpadding="0" cellspacing="0">'
			+'<tr>'
			+'<td class="advise" align="center">'
			+'<table cellpadding="3" cellspacing="0">'
			+'<tr>'
			+'<td>';
		//if ($('audio').innerHTML!='')
			//$('audio').empty();
		
		if (v_type=="a") 
		{
			l_s+="		<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' width='400' height='18' id='mp3player' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0'><param name='movie' value='"+pfolder+"../tools/mp3player.swf'><param name='flashvars' value='file="+$p.string.esc(v_src)+"&autostart=true'><param name='wmode' value='transparent' /><embed src='"+pfolder+"../tools/mp3player.swf' wmode='transparent' width='400' height='18' flashvars='file="+$p.string.esc(v_src)+"&autostart=true' name='mp3player' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' /></object>";
		}
		if (v_type=="v") l_s+="		<object classid='clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B' width='320' height='250' codebase='http://www.apple.com/qtactivex/qtplugin.cab'><param name='controller' value='TRUE'><param name='type' value='video/quicktime'><param name='autoplay' value='true'><param name='target' value='myself'><param name='src' value='"+v_src+"'><param name='pluginspage' value='http://www.apple.com/quicktime/download/'><embed controller='TRUE' target='myself'  width='320' height='250' src='"+v_src+"' qtsrc='"+v_src+"' type='video/quicktime' bgcolor='black' border='0' loop='false' autoplay='true' pluginspage='http://www.apple.com/quicktime/download/'></embed></object><br /><br />"+lg("lblVideoWarning");
		l_s+='</td>'
			+'<td valign="top">'
			+'<a href="#" onclick="$p.app.reader.hide();return false;">'
			+$p.img("ico_close.gif",12,11)
			+'</a>'
			+'</td>'
			+'</tr>'
			+'</table>'
			+'</td>'
			+'</tr>'
			+'</table>';
		$p.show("audio","block");
		$p.print("audio",l_s);
	},
	/*
		$p.app.reader.hide : close multimedia files reader
	*/
	hide:function()
	{
		$p.app.pages.clean($("audio"));$p.show("audio","none");
	}
}

// initialize the hidding window (for drag action)
$p.app.cache={
	isInit:false,
	obj:indef,
	/*
		$p.app.cache.init : init the page cache window (for menu move)
	*/
	init:function()
	{
		if ($p.app.cache.obj==indef) $p.app.cache.obj=$("cache");
		var l_size=window.getScrollSize();
		//$p.app.cache.obj.setStyle("width",document.body.scrollWidth+"px");
		$p.app.cache.obj.setStyle("width",l_size.x+"px");
		
		//$p.app.cache.obj.setStyle("height",document.documentElement.offsetHeight + document.documentElement.clientHeight+"px");
		$p.app.cache.obj.setStyle("height",l_size.y+"px");
		$p.app.cache.obj.setStyle("backgroundColor","#000000");
		//if (!NS&&!OP){$p.app.cache.obj.style.backgroundColor="#efefef";$p.app.cache.obj.style.opacity=0.1;$p.app.cache.obj.style.filter="alpha(opacity=10)";}
	},
	/*
		$p.app.cache.show : display the cache window
	*/
	show:function(v_status)
	{
		$p.app.cache.init();

		//hide popup if opened
		$p.app.cache.hideShadow();
		navShow('popup','none');

		$p.app.cache.obj.setStyle("display",v_status);
	},
	/*
		$p.app.cache.shadow : display the grey cache window (used for popup display)
	*/
	shadow:function()
	{
		//hide all flash objects
		$p.navigator.hideObjects();
		$p.app.cache.init();
		$p.app.cache.obj.setStyle("display","block");
		$p.app.cache.obj.setOpacity("0.7");
		$p.app.cache.obj.setStyle("filter","alpha(opacity=70)");
	},
	/*
		$p.app.cache.hideShadow : hide the grey cache window
	*/
	hideShadow:function()
	{
		$p.app.cache.obj.setStyle("display","none");
		//$p.app.cache.obj.setStyle("backgroundColor","#ffffff");
		$p.app.cache.obj.setOpacity("0");
		$p.app.cache.obj.setStyle("filter","alpha(opacity=0)");
		//show all flash objects
		$p.navigator.showObjects();
	}
}
/*
    Class: $p.app.help
*/
$p.app.help={
	/*  
	Function: $p.app.help.enableIntro
    
                            enable the introduction message
	
          Parameters:
		
                            None
	Output : 
	
                            None
	*/
	enableIntro:function()
	{
		$p.cookie.write('intro'+$p.app.user.id+'=1');
		$p.app.help.loadIntro();
	},
	/*  
	Function: $p.app.help.loadIntro : load the introduction message
	Parameters:
		None
	output : 
		None
	*/
	loadIntro:function()
	{
        ($p.app.menu.isOpen)?$p.app.menu.refresh():$p.app.menu.open();
		var l_showIntro=$p.cookie.get('intro'+$p.app.user.id);
		if (l_showIntro=='' || l_showIntro==1)
		{
			$p.ajax.call(__LOCALFOLDER+'l10n/'+__lang+'/intromessage.html',
				{
					'type':'load',
					'source':'html',
					'callback':
					{
						'function':$p.app.help.displayIntro
					}
				}
			);
		}
	},
	/*  
	Function: $p.app.help.displayIntro : Display the introduction message
	Parameters:
		response (string) : html response
	output : 
		None
	*/
	displayIntro:function(response)
	{
		var l_s='<div class="module">'
			+'<div class="bmod" style="padding: 8px;">'
			+'<div class="content" style="font-size: 1.2em;">'
			+response
			+'<div style="text-align:right">'
			+'<input type="checkbox" id="donotdisplayintro" />'+lg('doNotDisplayThisMessage')+'&nbsp;'
			+'<input type="button" value="'+lg('lblClose')+'" onclick="$p.app.help.hideIntro()"><br />'
			+'</div>'
			+'<br /><br />'
			+'</div>'
			+'</div>'
			+'</div>';

		$p.print('intromessage',l_s);
        $p.show($('intromessage'),"block");
	},
	/*  
	Function: $p.app.help.disableIntro : Disable the introduction message
	Parameters:
		None
	output : 
		None
	*/
	disableIntro:function()
	{
		$p.cookie.write('intro'+$p.app.user.id+'=0');
	},
	/*  
	Function: $p.app.help.hideIntro : Hide the introduction message
	Parameters:
		None
	output : 
		None
	*/
	hideIntro:function()
	{
		if ($('donotdisplayintro').checked) $p.app.help.disableIntro();
		$p.show('intromessage','none');
        ($('indicator')!=null)?$p.navigator.hideIndicator():'';
	}
}
var p_network={
	shown:false,
	/*
		p_network.init : init profile plugin
	*/
	init:function()
	{
		$p.plugin.open();
		$p.plugin.init(lg("myAccount"),'network');
		//$p.app.tabs.selId=0;
	},
	/*
		p_network.attribLangvalue : input = lang to set ( change the current language ('fr,''en'..) )
	*/
	attribLangValue:function(lgValue) 
	{ 
		var langValue=(lgValue==indef?_lang:lgValue);
		$p.ajax.call('../portal/scr_changelang.php',
			{
				'type':'execute',
				'variables':'lang='+langValue,
				'alarm':true,
				'forceExecution':false,
				'callback':
				{
					'function':p_network.refreshLang
				}
			}
		);		
	},
	/*
		p_network.refreshLang : refresh current page
	*/
	refreshLang:function() 
	{
		$p.navigator.openLink("../portal/mypage.php",false);
	},
	/*
		p_network.myprofile : display profile options
	*/	
	myprofile:function()
	{
		if ($p.app.user.id==-1)
		{
			$p.navigator.openLink('../admin/index.php');
		}
		else
		{
			p_network.init();
			$p.app.setState("p_network.myprofile()");
			$p.plugin.menu([{'id':1,'title':'myAccount','icon':'','fct':'','isLink':false}]);

			$p.print('plugincontent','<div id="otherProfileInformation"></div><div id="otherCriteria"></div>');
		
			//load the specifics criterias to display
			p_network.loadUserCriteria();
		}
	},
	/*
	p_network.loadUserCriteria
	Load the user's criteria (to display)
	*/
	loadUserCriteria:function()
	{
		$p.ajax.call('xmldisplaycriteria.php',
			{
				'type':'load',
				'callback':
				{
					'function':p_network.displayUserCriteria
				}
			}
		);
	},
	/*
	p_network.displayUserCriteria
	display user's informations (criteria)
	*/
	displayUserCriteria:function(response,vars)
	{
		var l_s="";
		var totalEditable = 0;
		l_result=response.getElementsByTagName("criteria");
		l_resultSize = l_result.length;
		
		l_s+=$p.img('ico_mail_unread.gif')+' '+$p.ajax.getVal(response,'email','str',false,'')+'<br /><br />';
		//if (l_resultSize!=0)
		//{
		l_s+="<table width='98%'><tr><td width='100%'>";
		l_s+="<table>";
		//}
		
		for (var i=0;i<l_resultSize;i++)
		{
			//gets the values
			var label = $p.ajax.getVal(l_result[i],'label','str',false,'');
			var type = $p.ajax.getVal(l_result[i],"type","int",false,"");
			var options = $p.ajax.getVal(l_result[i],'options','str',false,'');
			var editable = $p.ajax.getVal(l_result[i],'editable','int',false,'1');
			var parameters = $p.ajax.getVal(l_result[i],'parameters','str',false,'non précisé');

			if (editable==1)    totalEditable++;
			
			switch (type)
			{
				//if the criteria is an input type TEXT
				case 1 :
				{	
					l_s+="<tr><td>"+label+" :</td><td>"+parameters+"</td></tr>";
					break;
				}			
				//if the criteria is a TEXTAREA
				case 5 :
				{
					l_s+="<tr><td>"+label+" :</td><td>"+parameters+"</td></tr>";
					break;
				}	
				//if the criteria is a SELECT
				case 2 :
				{
					var tableau = options.split(";");
					l_s+="<tr><td>"+label+" :</td><td>"+tableau[parameters-1]+"</td></tr>";
					break;
				}	
				//if the criteria is a RADIO
				case 4 :
				{
					var tabRadio = options.split(";")
					l_s+="<tr><td>"+label+" :</td><td>"+tabRadio[parameters-1]+"</td></tr>";
					break;
				}		
					
				//if the criteria is a CHECKBOX
				case 3 :
				{
					var tabOptions = options.split(";");
					var tabParameters = parameters.split(";");
					
					l_s+="<tr><td>"+label+" :</td><td>";
					for (var a=0;a<tabParameters.length;a++)
					{
							var index = tabParameters[a];
							l_s+=tabOptions[index-1]+" - ";
					}
					l_s+="</td></tr>";
					break;
				}				
			 }
		}
		l_s+="</table></table><br />";
		
		if (totalEditable!=0)
			l_s+="<a href='#' onclick='p_network.modify()'>"+$p.img("ico_myaccount_update.gif",16,16,"","imgmid")+" "+lg("modifyProfile")+"</a><br />";
		
		//display criteria
		$p.print("otherCriteria",l_s);
	},
	/*
		p_network.modify : profile modification popup
	*/
	modify:function()
	{
		var l_s=''
			+'<br /><iframe src="frm_updateprofile.php" width="600" height="300" frameborder="no" marginwidth="0" marginheight="0" scrolling="auto"></iframe>'
			+'<br /><br />'
			+'<input type="button" onclick="$p.app.popup.hide();reset_rand();" value="'+lg("close")+'" />';

		$p.app.popup.show(l_s,620,indef,lg("modifyProfile"),false);
	},	
	/*
		p_network.hide : close profile plugin
	*/
	hide:function()
	{
		$p.plugin.hide();
		p_network.shown=false;
	},
	/*
		p_network.controlMandatoryFields : controls that the mandatory fields are filled.
			input
				n: number of form's elements
	*/
	controlMandatoryFields:function(n)
	{	
			var i=0;
			var total=0; //numbers of unfilled fields
			var minicount=0;
			var tabRadio=[];
			var oldname="";
			var temp;
			
			for (i=0;i<n;i++)
			{
				switch (document.forms[0].elements[i].type)
				{
					case 'text':
					{
						//is the field mandatory and is it filled with something
						var mandatory = document.forms[0].elements[i].getAttribute("mandatory");
						if (mandatory==1 && document.forms[0].elements[i].value=="")
							total++;
							
						break;
					}
				
					case 'textarea':
					{
						//is the field mandatory and is it filled with something
						var mandatory = document.forms[0].elements[i].getAttribute("mandatory");
						if (mandatory==1 && document.forms[0].elements[i].value=="")
							total++;
							
						break;
					}		
					
					case 'radio':
					{
						var maxIndex=tabRadio.length;
						var escap=0;						
						var currentName = document.forms[0].elements[i].name;
						var mandatory = document.forms[0].elements[i].getAttribute("mandatory");
						if (mandatory==1)
						{
						
									if (maxIndex>0)
									{
										for (var j=0;j<maxIndex;j++)
										{
											if (tabRadio[j]==currentName)
												escap=1;
											else
												tabRadio[maxIndex]=currentName;							
										}
									}
									else
									tabRadio[0]=currentName;
									
									if (escap==0)
									{
										var cpt=i;
										var correct=0;
										//if the first element isn't checked						
											if (document.forms[0].elements[cpt].checked!=true)
											{
													//we scan the others
													while (document.forms[0].elements[cpt+1].name==currentName)
													{
														if (document.forms[0].elements[cpt+1].checked==true)
															correct=1;
															
														cpt++;
													}
											}												
											else
											{correct=1;}
										
										if (correct!=1)
											total++;		
									}
						}
						break;
					}
					
					case 'checkbox':
					{										
						var mycurrentName = document.forms[0].elements[i].name;
						var passage=0;
						
						if (oldname=="")
						{
							oldname=mycurrentName;
							passage=1;
							minicount=0;
							temp=0;
						}
						else if (oldname!=mycurrentName)
						{
							oldname=mycurrentName;
							passage=1;
							minicount=0;
							temp=0;
						}
								
						//If the field is mandatory, verify that at least one checkbox is checked
						var mandatory = document.forms[0].elements[i].getAttribute("mandatory");
						if (mandatory==1)
						{
							var cpt=i;

							if (passage==1)
							{
									if (document.forms[0].elements[i].checked!=true)
										minicount++;
									
										while (document.forms[0].elements[cpt+1].name==mycurrentName)
										{
											temp = document.forms[0].elements[cpt+1].value;
											if (document.forms[0].elements[cpt+1].checked!=true)
												minicount++;
											
											cpt++;
										}	
										if (minicount==temp)
											total++;
							}
						}
						break;	
					} //end case
				} //end switch
			} // end for
							
			if (total!=0)
				{$p.app.alert.show(lg("errorEmptyFieldForm"),3);
				return false;}
			else	
			return true;
	}
}
p_network.profile={
	initMenu:function()
	{
		if ($p.app.user.id>0) $p.app.menu.options.push({"id":"myprofile","label":lg("myProfile"),"desc":lg("myprofileIconDesc"),"icon":"ico_myaccount.gif","seq":10,"action":"","type":"","subOpt":[{"id":"pmyprofile","label":"myProfile","seq":0,"action":"p_network.profile.menu()","pages":""}],"pages":""});
	},
	/*
		p_network.profile.menu : load the menu
	*/
	menu:function()
	{
		$p.app.menu.addTitle('profilemenu_1','',lg('myAccount'),p_network.profile.load);
		$p.app.menu.addArea('profilemenu_1','<div id="myprofile"></div>');
		
		if (__passwordChangePermission)
		{
			$p.app.menu.addTitle('profilemenu_2','',lg('lblModifyPassword'),p_network.profile.passwordMenu);
			$p.app.menu.addArea('profilemenu_2','<div id="mypassword"></div>');
		}

		if (__userChangePermission)
		{
			$p.app.menu.addTitle('profilemenu_3','',lg('lblChangeUser'),p_network.profile.changeUserMenu);
			$p.app.menu.addArea('profilemenu_3','<div id="changeuser"></div>');
		}

		$p.app.menu.addTitle('profilemenu_4','',lg('lblModifyLang'),p_network.profile.changeLang);
		$p.app.menu.addArea('profilemenu_4','<div id="userlang"></div>');

		$p.app.menu.openSubMenu('profilemenu_1',true);
	},
	/*
		p_network.profile.load : load my profile
	*/
	load:function()
	{
		if (__useSharing)
		{
			navWait('myprofile');

			getXml('xmlnetwork_myprofile.php',p_network.profile.display);
		}
		else
		{
			$p.print('myprofile',$p.img('puce.gif')+'&nbsp;<a href="#" onclick="p_network.myprofile();return false;">'+lg('myInfo')+'</a>');
		}
	},
	/*
		p_network.profile.display : display my profile
		inputs : xml response
	*/
	display:function(response,vars)
	{
		var l_picture=$p.ajax.getVal(response,"picture","str",false,"");

		var l_s=''
			+'<table cellpadding="0" cellspacing="0">'
			+'<tr>'
			+'<td>'
			+'<img src="'+(l_picture==""?"../images/nopicture.gif":$p.navigator.setParamInUrl(l_picture,"nocache",rand))+'" width="64" height="64" class="picture" />'
			+'</td>'
			+'<td valign="top" style="padding-left: 6px">'
			+'<b>'+$p.ajax.getVal(response,"longname","str",false,"---")+'</b><br /><br />'
		//chat status
			+(__useChat?'<div id="myactivity"></div><div id="activityselection"></div>':'')
			+'</td>'
			+'</tr>'
			+'</table>'
			+'<br />';

		//get keywords
		var l_kw=[],l_result=response.getElementsByTagName("keyword");
		for (var i=0;i<l_result.length;i++)
		{
			if (l_result[i].firstChild) l_kw.push(l_result[i].firstChild.nodeValue);
		}

		l_s+='<div class="title">'+lg("keywords")+' :</div>'+l_kw.join(", ")
			+'<br /><br />'
			+'<form onsubmit=\'return p_network.profile.updateStatus(this)\'>'
			+'<div class="title">'
			+lg("myStatus")+' '+tooltip("myStatusHelp")
			+'</div>'
			+'<input class="thinbox" type="text" name="stat" value=\''+$p.ajax.getVal(response,"stat","str",false,"")+'\' maxlength="200" style="width: 150px;"/> '
			+'<input type="submit" class="btn" value="'+lg("lblBtnSend")+'" />'
			+'</form>'
			+'<br /><div class="title">'+lg("description")+' :</div>'
			+'<div id="notebookdesc" style="vertical-align: top;"></div>'
			+'<br /><div class="title">'+lg("options")+' :</div>'
			+'<div class="highlight">'
			+img("ico_myaccount_update.gif",16,16,"","imgmid")
			+'&nbsp;<a href="#" onclick="p_network.profile.modify()">'+lg("modifyProfile")+'</a><br />';

		if (__useSharing)
		{
			l_s+=img("ico_notebook.gif",16,16,"","imgmid")+"&nbsp;<a href='#' onclick=\"p_notebook.open()\">"+lg("myNotebook")+"</a><br />"
				+img("ico_write.gif",16,16,"","imgmid")+"&nbsp;<a href='#' onclick='p_network.information.myNews()'> "+lg("myContributions")+"</a>";
		}

		l_s+='<br />'
			+'</div>'

		$p.print("myprofile",l_s);

		$p.app.user.status=$p.ajax.getVal(response,'activity','str',false,'o');
		p_chat.displayStatus();

		p_notebook.profile.desc=$p.ajax.getVal(response,"desc","str",false,lg("noDescription"));
		p_notebook.profile.getDesc(true);
	},
	/*
		p_network.profile.passwordMenu :display the change paswword menu
	*/
	passwordMenu:function()
	{
		var l_s='';
		l_s+='<form name="newpass">'
			+lg('lblOldPassword')+'<br /><input class="thinbox" type="password" name="oldpass" maxlength="16" /><br /><br />'
			+lg('lblNewPassword')+'<br /><input class="thinbox" type="password" name="pass1" maxlength="16" /><br /><br />'
			+lg('lblRetypeNewPassword')+'<br /><input class="thinbox" type="password" name="pass2" maxlength="16" /><br /><br />'
			+'<input onClick="$p.app.connection.changePass();" class="btn" type="button" value="'+lg("lblModify")+'" />'
			+'</form>';

		$p.print('mypassword',l_s);
	},
	/*
		p_network.profile.changeUserMenu : change user
	*/
	changeUserMenu:function()
	{
        var missingPassword = $p.app.connection.link2MissingPassword();
        var lblusername = __accountType=='mail'?lg('lblEmail'):lg('lblLogin');
		var l_s='';
		l_s+='<div id="msg_conn">&nbsp;</div>'
            +'<div id="displayPart">'
            +'<form method="post" name="conBox" onSubmit="return $p.app.connection.set(this,link,true);">'
			+lblusername
            +'<br /><input class="thinbox" type="text" name="username" maxlength="64" size="30" /><br /><br />'
			+lg("lblPassword")
            +'<br /><input class="thinbox" type="password" name="password" maxlength="16" size="30" /><br /><br />'
			+'<input type="checkbox" name="autoconn" />'+lg('lblAutoConnection')
            +'<br /><br />'
			+'<input type="submit" class="btn" value="'+lg('lblOk')+'" />&nbsp;'
			+missingPassword+'</a>'
			+'</form>'
            +'</div>';

		$p.print('changeuser',l_s);
	},
	changeLang:function()
	{
		var l_s=''
			+'<form name="changeLang">'
			+'<select id="langList" name="langList" size="1" onChange="p_network.attribLangValue(this.value);">';
		$p.print('userlang',l_s);

		for (var i=0;i<__AVLANGS.length;i++)
		{ 									
			var sel=__AVLANGS[i]==__lang?true:false;
			$('langList').options[i] = new Option(__AVLANGS[i],__AVLANGS[i],sel,sel );	
		}
	},
	/*
		p_network.profile.modify : profile modification popup
	*/
	modify:function()
	{
		var l_s='<br />'
			+'<iframe src="frm_network_updateprofile.php" width="500" height="350" frameborder="no" marginwidth="0" marginheight="0" scrolling="auto"></iframe>'
			+'<br /><br /><input type="button" onclick="$p.app.popup.hide();reset_rand();p_network.profile.load();" value="'+lg("lblClose")+'" />';

		$p.app.popup.fadein(l_s,510,indef,lg("modifyProfile"),false);
	},
	/*
		p_network.profile.updateStatus : update my status
		inputs : form containing status information
	*/
	updateStatus:function(v_form)
	{
		executescr("scr_network_updatemyprofile.php","stat="+$p.string.esc(v_form.stat.value),false,false,p_network.profile.updateStatusSuccess);
		
		return false;
	},
	/*
		p_network.profile.updateStatusSuccess : action when my status is updated
	*/
	updateStatusSuccess:function()
	{
		$p.app.alert.show(lg("yourStatusIsUpdated"));
	}
}
$p.stats={
	initMenu:function()
	{
		$p.app.menu.options.push({"id":"info","label":lg("statistics"),"desc":lg("statsIconDesc"),"icon":"ico_stat.gif","seq":50,"action":"","type":"","subOpt":[{"id":"pmenuinfoothers","label":"statistics","seq":0,"action":"$p.stats.menu()","pages":[]}],"pages":[]});
	},
	menu:function()
	{
		$p.app.menu.addTitle('statsmenu_1','',lg('information'));
		$p.app.menu.addArea('statsmenu_1',img('puce.gif')+'&nbsp;<a href="#" onclick="$p.app.widgets.rss.loadMostRead(0);return false;">'+lg('mostReadArticles')+'</a><br />');

		$p.app.menu.openSubMenu('statsmenu_1',true);
	}
}

//===============================================================================================================
//					OTHER OBJECTS MANAGEMENT
//===============================================================================================================

//Old functions (compatibility
function _gel(v_id) {return $p.get(v_id);}
function navPrint(v_id,v_s,v_add){$p.print(v_id,v_s,v_add);}
function getPos(v_node,v_ref){return $p.getPos(v_node,v_ref);}
function _trim(v_s){return $p.string.trim(v_s);}
function inArray(v_arr,v_searched){return $p.array.find(v_arr,v_searched);}
function MyMooToolsDebug(){}
function _gelstn(v_t){return $$(v_t);}
function navClass(v_id,v_class){return $p.setClass(v_id,v_class);}
function navShow(v_id,v_disp){return $p.show(v_id,v_disp);}
function navIsShown(v_id){return $p.isShown(v_id);}
function navWait(v_id){return $p.app.wait(v_id);}
function _esc(v_s){return $p.string.esc(v_s);}
function _unesc(v_s){return $p.string.unesc(v_s);}
function _uc(v_s){return $p.string.uc(v_s);}
function _lc(v_s){return $p.string.lc(v_s);}
function _min(v1,v2){return $p.min(v1,v2);}
function _max(v1,v2){return $p.max(v1,v2);}
function navId(v_id,v_newId){return $p.changeId(v_id,v_newId);}
function navHeight(v_id,v_h){return $p.setHeight(v_id,v_h);}
function navWidth(v_id,v_w){return $p.setWidth(v_id,v_w);}
function img(v_file,v_w,v_h,v_alt,v_cl,v_id){return $p.img(v_file,v_w,v_h,v_alt,v_cl,v_id);}
function p_img(v_file,v_w,v_h,v_alt,v_cl,v_id){return $p.imgObj(v_file,v_w,v_h,v_alt,v_cl,v_id);}
var p_nav={IE:$p.navigator.IE,noinclusion:function(){return $p.navigator.noinclusion();},changeTitle:function(v_title){return $p.navigator.changeTitle(v_title);}}
var p_popup={show:function(v_content,v_width,v_height,v_title,v_closeBtn){return $p.app.popup.show(v_content,v_width,v_height,v_title,v_closeBtn);}}
function formatSearch(v_s){return $p.string.formatForSearch(v_s);}
function getVar(v_s,v_var){return $p.string.getVar(v_s,v_var);}
function correctCharEncoding(v_s){return $p.string.correctEncoding(v_s);}
function removeTags(v_s){return $p.string.removeTags(v_s);}
function _hesc(v_s){return $p.string.htmlToText(v_s);}
/*
	_args : transform URL variables to an array of these variables
	input : URL
	output : array of variables
*/
function _args(v_s)
{
	v_s=(v_s)?v_s:window.location.search;
	if (v_s.substr(0,1)=='&'||v_s.substr(0,1)=='?') v_s=v_s.substr(1);
	var l_arr=v_s.split('&');
	var l_ret=[];
	for (var i=0;i<l_arr.length;i++)
	{
		var pair=l_arr[i].split('=');
		l_ret[pair[0]]=pair[1];
	}
	return l_ret;
}
/*
	setExternalLink : all links are opened in an external window
	input : HTML string with hyperlinks
	output : HTML string with all hyperlinks opening in a new window
*/
function setExternalLink(v_s)
{
	return v_s.replace(/<a /g,"<a target='_blank' ");
}
/*
	checkEmail : check email validity
	input : email
	output : true / false
*/
function checkEmail(v_email)
{
	var l_ret=true;
	var l_reg = /^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,3}$/;
	if (l_reg.exec(v_email)==null){l_ret=false;}
	return l_ret;
}
/*
	sortDate : Sort by dates rule
*/
function sortDate(a,b)
{
	if (a.date>b.date) return -1;
	if (a.date<b.date) return 1;
	return 0;
}
/*
	sortId : sort by ID rule
*/
function sortId(a,b)
{
	if (a.id>b.id) return -1;
	if (a.id<b.id) return 1;
	return 0;
}
// Sorting function for bloc showing type
function blocSort(v_a,v_b)
{
	if (v_a.newcol<v_b.newcol) return -1;
	if (v_a.newcol>v_b.newcol) return 1;
	if (v_a.newpos<v_b.newpos) return -1;
	if (v_a.newpos>v_b.newpos) return 1;
	return 0;
}
// Sorting function for newspaper showing type
function newspaperSort(v_a,v_b)
{
	if (v_a.posj<v_b.posj) return -1;
	if (v_a.posj>v_b.posj) return 1;
	return 0;
}
function link(v_url,v_newpage,v_uselang){return $p.navigator.openLink(v_url,v_newpage,v_uselang);}
/*
	homebar : display application help for a new user
*/
function homebar()
{
	var l_s="<table cellpadding='0' cellspacing='0' width='100%'><tr>";
	l_s+="<td valign='top' width='33%'><b>1/ "+lg("lblAddMenu")+"</b><br /><br /><center>"+$p.img("homebar_1.gif")+"</center></td>";
	l_s+="<td class='lefthr' valign='top' width='33%'><b>2/ "+lg("lblEditMenu")+"</b><br /><br /><center>"+$p.img("homebar_2.gif")+"</center></td>";
	l_s+="<td class='lefthr' valign='top'><b>3/ "+lg("lblSave")+"</b><br /><br /><center>"+$p.img("homebar_3.gif")+"</center></td>";
	l_s+="</tr></table>";
	$p.print("box",box(0,lg("lblBeginningWith")+__apname,"hideBox()",l_s));
	$p.show("box","block");
}
function formatDateShort(v_date,v_useTime){return $p.date.formatDateShort(v_date,v_useTime);}
function logout(){return $p.app.logout();}
/*
	goIndex : open Portaneo homepage
*/
function goIndex()
{
	$p.app.widgets.factory.init();
	return false;
}
/*
	shortName : Get user short name for better display in page
	input : user long name
	output : user short name
*/
function shortName(v_n)
{
	if (v_n.indexOf("@")>0) {v_n=v_n.substr(0,(v_n.indexOf("@")));}
	return v_n;
}
function getRadioValue(v_element){return $p.navigator.getRadioValue(v_element);}
function debug(v_msg,v_type){return $p.app.debug(v_msg,v_type);}
var p_alert={show:function(v_msg,v_type){return $p.app.alert(v_msg,v_type);}}
var p_table={
	name:"default",
	title:"",
	headers:[],
	rows:[],
	footer:"",
	container:"",
	order:0,
	asc:false,
	filter:[],
	width:"100%",
	saveincookie:false,
	/*
		p_table.headerObj : create a column header
		input :
			name : database field name
			label : header label (writen in the header)
			filtered : define if the column can be filtered true/false
	*/
	headerObj:function(name,label,filtered,width,sorted)
	{
		this.name=name;
		this.label=label;
		this.filtered=filtered;
		this.width=(width==indef)?"":width;
		this.sorted=(sorted==indef)?true:sorted;
	},
	/*
		p_table.row : create a new row 
	*/
	row:function()
	{
		this.columns=[];
	},
	/*
		p_table.cell : create a new cell
		input :
			val : cell value (extracted from DB)
			label : label displayed in the cell
	*/
	cell:function(val,label)
	{
		this.val=val;
		this.label=(label==indef?val:label);
	},
	refresh:indef,
	/*
		p_table.reset : reset the table 
	*/
	reset:function()
	{
		p_table.headers.length=0;
		p_table.rows.length=0;
		p_table.filter.length=0;
		p_table.order=0;
		p_table.asc=false;
	},
	/*
		p_table.init : init the table 
	*/
	init:function()
	{
		if (p_table.saveincookie)
		{
			if ($p.cookie.get(p_table.name+"order")!="") p_table.order=$p.cookie.get(p_table.name+"order");
			if ($p.cookie.get(p_table.name+"asc")!="") p_table.asc=($p.cookie.get(p_table.name+"asc")==1?true:false);
			if ($p.cookie.get(p_table.name+"filter")!="") p_table.filter=($p.cookie.get(p_table.name+"filter")).split(" AND ");
		}
	},

	/*
		p_table.show : display the table 
	*/
	show:function(v_start,v_count)
	{
		if (v_start==indef) v_start=0;
		if (v_count==indef) v_count=p_table.rows.length-v_start;
		//limit to the items loaded
		var l_nbToDisplay=$p.min(p_table.rows.length-v_start,v_count);

		var l_s='<table cellpadding="3" cellspacing="0" border="1" bordercolor="#c6c3c6" width="'+p_table.width+'">';
		if (p_table.title!="") l_s+="<tr><td colspan='"+p_table.headers.length+"' bgcolor='#c6c3c6'>"+p_table.title+"</td></tr>";
		l_s+="<tr>";
		for (var i=0;i<p_table.headers.length;i++)
		{
			l_s+="<td bgcolor='#c6c3c6'"+(p_table.headers[i].width==""?"":" width='"+p_table.headers[i].width+"'")+">";
			if (p_table.headers[i].sorted) l_s+="<a href='#' onclick='p_table.sortAndRefresh("+i+","+((p_table.order==i && !p_table.asc)?"true":"false")+")'>";
			l_s+=p_table.headers[i].label+(p_table.headers[i].sorted?" "+(p_table.order==i?(p_table.asc?$p.img("ico_up_arrow.gif"):$p.img("ico_down_arrow.gif")):""):"");
			if (p_table.headers[i].sorted) l_s+="</a>";
			l_s+="</td>";
		}
		l_s+="</tr>";

		for (var i=v_start;i<v_start+l_nbToDisplay;i++)
		{
			l_s+="<tr>";
			for (var j=0;j<p_table.rows[i].columns.length;j++)
			{
				l_s+="<td>"+p_table.rows[i].columns[j].label+"</td>";
			}
			l_s+="</tr>";
		}
		l_s+="<tr><td colspan='"+p_table.headers.length+"' bgcolor='#c6c3c6'><center>";
		if (v_start>0) l_s+="<a href='#' onclick='p_table.show("+$p.max(0,(v_start-v_count))+","+v_count+");'>"+$p.img("ico_previous2.gif",indef,indef,"","imgmid")+" "+lg("previous")+"</a> &nbsp; ";
		if (v_start+v_count<p_table.rows.length) l_s+=" &nbsp; <a href='#' onclick='p_table.show("+$p.min(p_table.rows.length,(v_start+v_count))+","+v_count+");'>"+lg("next")+" "+$p.img("ico_next2.gif",indef,indef,"","imgmid")+"</a>";
		l_s+="</center></td></tr>"
		if (p_table.footer!="") l_s+="<tr><td colspan='"+p_table.headers.length+"' bgcolor='#c6c3c6'>"+p_table.footer+"</td></tr>";
		$p.print(p_table.container,l_s);
	},
	/*
		p_table.sortAndRefresh : sort the table
		inputs :
			v_order : id of the column to sort
			v_asc : true=ascendant order
			v_start : beginning of the display
			v_count : number of items to display
	*/
	sortAndRefresh:function(v_order,v_asc,v_start,v_count)
	{
		if (v_order!=indef) p_table.order=v_order;
		if (v_asc!=indef) p_table.asc=v_asc?true:false;
		p_table.rows.sort(p_table.sortrule);
		p_table.show(v_start,v_count);
		$p.cookie.write(p_table.name+"order="+p_table.order)
		$p.cookie.write(p_table.name+"asc="+(p_table.asc?1:0));
	},
	sortrule:function(v_a,v_b)
	{
		var v_reverse=p_table.asc?-1:1;
		if ($p.string.lc($p.string.removeTags(v_a.columns[p_table.order].label))<$p.string.lc($p.string.removeTags(v_b.columns[p_table.order].label))) return -1*v_reverse;
		if ($p.string.lc($p.string.removeTags(v_a.columns[p_table.order].label))>$p.string.lc($p.string.removeTags(v_b.columns[p_table.order].label))) return 1*v_reverse;
		return 0; 
	},
	
	/*
		p_table.displayFitler : display the column data filter
		input : container div id
	*/
	displayFilter:function(v_div)
	{
		var l_s="";
		for (var i=0;i<p_table.filter.length;i++)
		{
			l_s+=p_table.filter[i]+" <a href='#' onclick='p_table.remFilter("+i+");return false;'>"+$p.img("ico_close.gif",12,11,lg("suppress"),"imgmid")+"</a> &nbsp;";
		}
		l_s+="<br /><form name='filter' onsubmit='p_table.addFilter(this);return false;'><select name='field' onchange='p_table.fillFilter(this.value)'>";
		var l_firstFiltered;
		for (var i=0;i<p_table.headers.length;i++)
		{
			if (p_table.headers[i].filtered)
			{
				l_s+="<option value=\""+i+"\">"+p_table.headers[i].label+"</option>";
				if (l_firstFiltered==indef) l_firstFiltered=i;
			}
		}
		l_s+="</select>";
		l_s+=" <select name='comparator'><option value='='>egal à</option><option value='!='>différent de</option><option value='<'><</option><option value='>'>></option><option value='<='><=</option><option value='>='>>=</option></select>";
		l_s+=" <select name='val'></select> <input type='submit' value='Ajouter ce filtre' /></form>";
		$p.print(v_div,l_s);
		p_table.fillFilter(l_firstFiltered);
	},
	/*
		p_table.fillFilter : fill filter input 
	*/
	fillFilter:function(v_id)
	{
		document.forms.filter.val.options.length=0;
		var l_options=[],l_optionsLabel=[];
		for (var i=0;i<p_table.rows.length;i++)
		{	
			if (!$p.array.find(l_options,p_table.rows[i].columns[v_id].val))
			{
				l_options.include(p_table.rows[i].columns[v_id].val);
				l_optionsLabel.push($p.string.removeTags(p_table.rows[i].columns[v_id].label));
			}	
		}
		for (var i=0;i<l_options.length;i++)
		{
			document.forms.filter.val.options[document.forms.filter.val.options.length] = new Option(l_optionsLabel[i],l_options[i]);
		}
	},
	/*
		p_table.addFilter : add a new filter for table information
		input : v_form : form containing filter value
	*/
	addFilter:function(v_form)
	{
		p_table.filter.push(p_table.headers[v_form.field.value].name+" "+v_form.comparator.value+" '"+v_form.val.value+"'");
		$p.cookie.write(p_table.name+"filter="+p_table.filter.join(" AND "));
		p_table.refresh();
	},
	/*
		p_table.remFilter : remove a filter 
	*/
	remFilter:function(v_i)
	{
		p_table.filter.splice(v_i,1);
		$p.cookie.write(p_table.name+"filter="+p_table.filter.join(" AND "));
		p_table.refresh();
	}
}
/*
	reset_rand : reset the rand variable
*/
function reset_rand()
{
	rand=$random(0,100).toInt();
}
function getXMLprop(v_item,v_name,v_type,v_required,v_default){return $p.ajax.getProp(v_item,v_name,v_type,v_required,v_default);}
function getXMLval(v_item,v_name,v_type,v_required,v_default){return $p.ajax.getVal(v_item,v_name,v_type,v_required,v_default);}
var p_plugin={open:function(){return $p.plugin.open();},init:function(v_title,v_id){return $p.plugin.init(v_title,v_id);},menu:function(v_elemts,v_selected){return $p.plugin.menu(v_elemts,v_selected);},wait:function(){return $p.plugin.wait();},content:function(v_content){return $p.plugin.content(v_content);},hide:function(){return $p.plugin.hide();},clear:function(){return $p.plugin.clear();},useWidget:function(){return $p.plugin.useWidget();}}
var p_app={openHome:function(v_prof){return $p.app.openHome(v_prof);}}
/*
	_IG_AdjustIFrameHeight : update module height based on its content
*/
function _IG_AdjustIFrameHeight()
{
    //function desactivated for opera
    if (!Browser.Engine.presto)
    {
    	var l_height;
    	if (document.height){
    		l_height=document.height;
    	}
    	else if (document.all){
    		if (document.compatMode && document.compatMode != 'BackCompat'){
    			l_height=document.documentElement.scrollHeight + 5;
    		}
    		else{
    			l_height = document.body.scrollHeight + 5;
    		}
    	} 
    	if (navigator.appName=="Netscape"){
    		top.outerHeight=l_height;
    	}
    	else top.resizeTo(400,l_height);
    }
}
/*
	_IG_SetTitle : change widget title
	inputs : widget new title
*/
function _IG_SetTitle(title)
{
}
/*
	_IG_Prefs : manage Modules preferences
	input : uniq ID of the module
*/
function _IG_Prefs(uniq)
{
	this.uniq=uniq;
	this.id=$p.app.widgets.uniqToId(uniq);
	this.vars=tab[$p.app.tabs.sel].module[this.id].vars;
	this.getString=getString;
	this.getInt=getInt;
	this.getBool=getBool;
	this.set=setPrefVal;
	this.open=openPref;
}
/*
	getString : get string value of a module parameter
	input : parameter
*/
function getString(v_var)
{
	return $p.string.getVar(this.vars,v_var);
}
/*
	getInt : get integer value of a module parameter
	input : parameter
*/
function getInt(v_var)
{
	return ($p.string.getVar(this.vars,v_var)).toInt();
}
/*
	getBool : get boolean value of a module paramter
	input : paramter
*/
function getBool(v_var)
{
	return ($p.string.getVar(this.vars,v_var)==1?true:false);
}
/*
	setPrefVal : define parameter value
	inputs
		v_var : parameter
		v_value : new value for this parameter
*/
function setPrefVal(v_var,v_value)
{
	tab[$p.app.tabs.sel].module[this.id].changeVar(v_var,v_value);
	//avoid this process in testmodule
	if ((window.location.href).indexOf("testmodule.php")==-1) $p.app.widgets.param.getModuleParam(this.id);
}
function openPref(){}
/*
	_IG_Tabs : tabs management in modules
	inputs
		v_id : module ID
		v_selTab : selected tab
*/
function _IG_Tabs(v_id,v_selTab)
{
	this.moduleId=v_id;
	this.selTab=v_selTab;
	this.addTab=addTab;
	this.addDynamicTab=addDynamicTab;
	this.setSelectedTab=setSelectedTab;
	this.moveTab=moveTab;
	this.tabsContainer=null;
	this.ulObj=null;
}
/*
	addTab : add a new tab in module
	inputs
		v_name : name of the tab
		v_divId : ID of the div containing tab information
		v_fct : function called on tab opening
*/
function addTab(v_name,v_divId,v_fct)
{
	//define default tab if not already defined
	if (this.selTab==indef) this.selTab=v_name;
	//create tabs div if not already existing
	if (this.tabsContainer==null)
	{
		this.tabsContainer = new Element('div', { 'id': 'tabsdiv' } );	 
		document.body.appendChild(this.tabsContainer);
	}
	//create content div if not already existing
	if (v_divId==indef) v_divId="contentdiv";
	if ($(v_divId)==null)
	{
		l_obj = new Element('div', { 'id': v_divId } );	 
		document.body.appendChild(l_obj);
	}
	else
	{
		var l_obj=$(v_divId);
	}
	//create ul obj if not already existing
	if (this.ulObj==null)
	{
		this.ulObj = new Element('ul', { "class": "tablist" } );	
		this.tabsContainer.appendChild(this.ulObj);
	}
	//add the new tab
	var l_liObj = new Element('li', { "class": (this.selTab==v_name)?"tabsel":"tab", "id": v_name } );			  
	var l_aObj = new Element('a', 
		{
			'events': {
					'mouseup': function(){
					changeSelectedTab(this.title,this.main);
					this.fct(this.selDiv);}
					  },
			'href': 'javascript:void(null);',
			'main': this
		}
	);
	l_aObj.fct = v_fct;
	l_aObj.selDiv = v_divId;
	l_aObj.title = v_name;
    l_aObj.appendChild(document.createTextNode(v_name));			
	l_liObj.appendChild(l_aObj);
	this.ulObj.appendChild(l_liObj);
	if (this.selTab==v_name) v_fct(v_divId);
	return l_obj;
}
/*
	addDynamicTab
*/
function addDynamicTab(v_name,v_fct)
{
	addTab(v_name,indef,v_fct);
}
/*
	setSelectedTab : select a tab
	input : ID of the tab selected
*/
function setSelectedTab(v_index)
{	
	//define selected tab
	for (var i=0;i<this.ulObj.childNodes.length;i++)
	{
		var l_node=this.ulObj.childNodes[i];
		l_node.className=(i==v_index?"tabsel":"tab");
	}
}
function changeSelectedTab(v_name,v_obj)
{
	v_obj.selTab=v_name;
	for (var i=0;i<v_obj.ulObj.childNodes.length;i++)
	{
		var l_node=v_obj.ulObj.childNodes[i];
		if (l_node.id==v_name) v_obj.setSelectedTab(i);
	}
}
function moveTab(){}

/*
	_IG_Callback : module callback function
*/
function _IG_Callback(v_fct,v1,v2,v3,v4,v5)
{
	var args=arguments;
	return function()
	{
		var l_vars=[];
		for(var i=0;i<arguments.length;i++)
		{
			l_vars[l_vars.length]=arguments[i];
		}
		for(var i=1;i<args.length;i++)
		{
			l_vars[l_vars.length]=args[i];
		}
		v_fct.apply(null,l_vars);
	}
}
/*
	createMyModule : link to modules tutorial tool
*/
function createMyModule()
{
	if ($p.app.user.id==0)
	{
		$p.app.alert.show(lg("msgTutorialConn"));
	}
	else
	{
		$p.navigator.openLink("../tutorial/");
	}
	return false;
}
/*
	dirOptxxxx : manage modules directory selections
	inputs
		v_id : directory ID
		v_level : directory depth level
*/
function dirOptOver(v_id)
{
	if ($("dir"+v_id)&&($("dir"+v_id)).className=="diropti") $p.setClass("dir"+v_id,"diropta");
}
function dirOptOut(v_id)
{
	if ($("dir"+v_id)&&($("dir"+v_id)).className=="diropta") $p.setClass("dir"+v_id,"diropti");
}
function dirOptSel(v_id,v_level)
{
	$p.setClass("dir"+v_id,"diropts");
	if (dirOptSelId[v_level]!=indef && dirOptSelId[v_level]!=v_id){$p.setClass("dir"+dirOptSelId[v_level],"diropti");}
	dirOptSelId[v_level]=v_id;
}
function catOptOver(v_id,v_secured)
{
	if ($("dir"+v_id)&&($("dir"+v_id)).className=="catopt"+(v_secured==1?"s":"")+"i") $p.setClass("dir"+v_id,"catopt"+(v_secured==1?"s":"")+"a");
}
function catOptOut(v_id,v_secured)
{
	if ($("dir"+v_id)&&($("dir"+v_id)).className=="catopt"+(v_secured==1?"s":"")+"a") $p.setClass("dir"+v_id,"catopt"+(v_secured==1?"s":"")+"i");
}
function catOptSel(v_id,v_level,v_secured)
{
	$p.setClass("dir"+v_id,"catopt"+(v_secured==1?"s":"")+"s");
	if (dirOptSelId[v_level]!=indef && dirOptSelId[v_level]!=v_id){$p.setClass("dir"+dirOptSelId[v_level],"catopt"+(dirOptSelSec[v_level]==1?"s":"")+"i");}
	dirOptSelId[v_level]=v_id;
	dirOptSelSec[v_level]=v_secured;
}
/*
	hideBox : hide horizontal menu box
*/
function hideBox()
{
	$p.print("box","");
	$p.show("box","none");
	widgetDecalY=0;
	showBoxStatus=false;
	$p.app.widgets.place($p.app.tabs.sel);
}
/*
	hideAllBox : hide all menus
*/
function hideAllBox()
{
	hideBox();
	//if (__menuposition=="v"){$p.app.menu.hide();}
}
function openmod(v_id,v_vars,v_type,v_secured){return $p.app.widgets.open(v_id,v_vars,v_type,v_secured);}
function closeNewMod(v_type){return $p.app.widgets.close(v_type);}
/*
	additionalMod : check if an aditional module needs to be displayed
*/
function additionalMod()
{
	if ($p.string.getVar(window.location.search.substring(1),"open"))
	{
		var l_vars=($p.string.getVar(window.location.search.substring(1),"vars"))?$p.string.getVar(window.location.search.substring(1),"vars"):"";
		$p.app.widgets.open($p.string.getVar(window.location.search.substring(1),"open"),l_vars);
	}
}
function _IG_Analytics(){}
/*
	_IG_RegisterOnloadHandler : manage modules onload event
	input : function called when module is loaded
*/
function _IG_RegisterOnloadHandler(v_fct)
{
	window.onload=v_fct;
}
/*
	_IG_FetchContent : load HTML content from a file
	inputs
		v_url : file loaded
		v_fct : function called when file is loaded
*/
function _IG_FetchContent(v_url,v_fct)
{
	$p.ajax.call(v_url,
		{
			'type':'load',
			'callback':
			{
				'function':v_fct
			},
			'source':'html',
			'method':'GET'
		}
	);
}
function _IG_FetchXmlContent(v_url,v_fct)
{
	$p.ajax.call(v_url,
		{
			'type':'load',
			'callback':
			{
				'function':v_fct
			},
			'source':'xml',
			'method':'GET'
		}
	);
}
function _IG_FetchFeedAsJSON(v_url,v_fct,v_entries,v_summaries)
{
	if (v_entries==indef) v_entries=5;
	if (v_summaries==indef) v_summaries=false;
	$p.ajax.call(v_url,
		{
			'type':'load',
			'callback':
			{
				'function':getRssFromXml,
				'variables':
				{
					'function':v_fct,
					'entries':v_entries,
					'summary':v_summaries
				}
			},
			'source':'xml',
			'method':'GET'
		}
	);
}
function _toggle(v_el)
{
	if (el.style.display=='block')
	{
		el.style.display='none';
	}
	else
	{
		el.style.display='block';
	}
}
function _IG_GetImage(v_url)
{
	return v_url;
}
function _IG_GetCachedUrl(v_url)
{
	return v_url;
}
function _IG_EmbedFlash(swf_url, swf_container, opt_params)
{
	var so = new SWFObject(swf_url, "flash", "100%", "100%", "6");
	for(opt_param in opt_params)
	{
		so.addParam(opt_param,opt_params[opt_param]);
	}
    so.write(swf_container);
}
function _IG_GetFlashMajorVersion(){}
function getRssFromXml(response,vars)
{
	var feed={};
	feed.Title=$p.ajax.getVal(response,"title","str",false,"no title");
	feed.Link=$p.ajax.getVal(response,"link","str",false,"");
	feed.Author=$p.ajax.getVal(response,"author","str",false,"");
	feed.Description=$p.ajax.getVal(response,"description","str",false,"");
	feed.Entry=[];
	var i=0;
	while (response.getElementsByTagName("item")[i] && i<vars[1])
	{
		var result=response.getElementsByTagName("item")[i];
		feed.Entry[i]={};
		feed.Entry[i].Title=$p.ajax.getVal(result,"title","str",false,"no title");
		feed.Entry[i].Link=$p.ajax.getVal(result,"link","str",false,"");
		feed.Entry[i].Summary=($p.ajax.getVal(result,"description","str",false,"")).substr(0,200);
		feed.Entry[i].Date=$p.ajax.getVal(result,"pubdate","str",false,"");
		i++;
	}
	vars[0](feed);
}
/*
	getConfig : Save portal configuration in cookie
*/
function getConfig()
{
	var l_ret="w="+tab[$p.app.tabs.sel].colnb+"&s="+tab[$p.app.tabs.sel].style+"&n="+$p.string.esc($p.app.tabs.currName)+"&t="+tab[$p.app.tabs.sel].showType+"&nb="+tab[$p.app.tabs.sel].newspapernb+"&i="+tab[$p.app.tabs.sel].icon+"&a="+(tab[$p.app.tabs.sel].moduleAlign?"Y":"N");
	for (var i=0;i!=tab[$p.app.tabs.sel].module.length;i++)
	{
		l_ret+="&id"+i+"="+tab[$p.app.tabs.sel].module[i].id+"&pos"+i+"="+tab[$p.app.tabs.sel].module[i].newpos+"&col"+i+"="+tab[$p.app.tabs.sel].module[i].newcol+"&posj"+i+"="+tab[$p.app.tabs.sel].module[i].newposj+"&x"+i+"="+tab[$p.app.tabs.sel].module[i].newx+"&y"+i+"="+tab[$p.app.tabs.sel].module[i].newy+"&var"+i+"="+$p.string.esc(tab[$p.app.tabs.sel].module[i].vars)+"&blocked"+i+"="+(tab[$p.app.tabs.sel].module[i].blocked?"1":"0")+"&minimized"+i+"="+(tab[$p.app.tabs.sel].module[i].minimized?"1":"0");
	}
	return l_ret;
}
/*
	getAvailPortals : get pages list for a user
*/
function getAvailPortals(v_sess)
{
	if (v_sess)
	{
		$p.ajax.call('xmltabs.php',
			{
				'type':'load',
				'callback':
				{
					'function':showAvailPortals
				}
			}
		);
	}
}
/*
	showAvailPortals : display available pages for a user
*/
function showAvailPortals(response,vars)
{
	var l_s="<b>"+lg("selectThePortalDestination")+"</b> :<br />",l_result=response.getElementsByTagName("tab");
	for (var i=0;i<l_result.length;i++)
	{
		if ($p.ajax.getVal(l_result[i],"type","int",false,0)==3 || $p.ajax.getVal(l_result[i],"type","int",false,0)==1)
		{
			l_s+="<br />"+$p.img("ico_right_arrow.gif",6,9)+" <a href='#' onclick='addModToAvailPortal("+$p.ajax.getVal(l_result[i],"number","int",false,1)+");'>"+$p.ajax.getVal(l_result[i],"name","str",false,"- ? -")+"<a>";
		}
	}
	$p.print("connectiondiv",l_s+"<br /><br />");
}
/*
	addModToAvailPortals : add a new module for a user page (stored in cookie)
	input : tab DB ID where the module is added
*/
function addModToAvailPortal(v_prof)
{
	//set current page as the one selected
	$p.cookie.write("currentpage="+v_prof);
	//get feed id for an rss widget
	var l_fid=(tab[$p.app.tabs.sel].module[0].format=='R')?$p.string.getVar(tab[$p.app.tabs.sel].module[0].vars,'pfid'):0;
	$p.navigator.openLink("scr_config_updateportal.php?prof="+v_prof+"&modid="+tab[$p.app.tabs.sel].module[0].id+"&f="+l_fid+"&v="+$p.string.esc(tab[$p.app.tabs.sel].module[0].vars));
}
var p_connection={set:function(v_form,v_function,v_type){return $p.app.connection.set(v_form,v_function,v_type);},subscribe:function(v_form,v_function){return $p.app.connection.subscribe(v_form,v_function);},saveMenu:function(){return $p.app.connection.saveMenu();},menu:function(){return $p.app.connection.menu();}}
/*
	MODULE_ID_to_id : get the module array id from the __MODULE_ID__ variable in a 'M' module
	input : __MODULE_ID__
*/
function MODULE_ID_to_id(v_id,v_tab)
{
	var parts=v_id.split("_");
	return $p.app.widgets.uniqToId(parts[0],v_tab);
}
/*
	hideParent : hide parent object of an object
	input : object
*/
function hideParent(v_obj)
{
	v_obj.parentNode.setStyle("display","none");
	v_obj.parentNode.setStyle("display","");
}
/*
	objMove : define object position / action during move
	inputs
		v_obj : object moved
		v_x : horizontal position of the mouse
		v_y : vertival position of the mouse
		v_parent : parent object
		v_direction : allowed movements : vertical / horizontal / multidim
		v_type : object type (module/tab)
*/
function objMove(v_obj,v_x,v_y,v_parent,v_direction,v_type)
{
	var l_nextMod=null;
	var l_x,l_y,l_w,l_h,l_treated=false;
	var l_pond=(v_direction=="multidim")?40:v_obj.offsetHeight;
	var l_lstNb=v_parent.length?v_parent.length:2;
	//is object moving over an existing one
	for(var j=1;j<l_lstNb;j++)
	{
		var l_lst=v_parent.length?v_parent[j]:v_parent;
		for(var i=0;i<l_lst.childNodes.length;i++)
		{
			var l_node=l_lst.childNodes[i];
			l_x=l_node.pagePosLeft;
			l_y=l_node.pagePosTop;
			l_w=l_node.offsetWidth;
			l_h=l_node.offsetHeight;
			if (v_x>l_x && v_x<(l_x+l_w) && v_y>l_y && v_y<(l_y+l_h))
			{
				l_treated=true;
				if (v_y<(l_y+l_pond))
				{
					if (l_node==v_obj.nextSibling&&l_node.nextSibling)
					{
						l_nextMod=l_node.nextSibling;
						break;
					}
					else
					{
						l_nextMod=l_node;
						break;
					}
				}
			}
		}
	}
	//if module over a tab
	if (!l_treated && v_type=="module" && $p.app.user.id>0)
	{
		var l_tabs=$("tabsframe");
		if (l_tabs!=null)
		for(var i=0;i<l_tabs.childNodes.length;i++)
		{
			var l_node=l_tabs.childNodes[i];
			if (l_node.id=="") continue;
			var l_id=l_node.id.replace(/tab/,"");
			if (l_id==$p.app.tabs.sel) continue;
			//l_x=l_node.pagePosLeft;
			l_x=$p.getPos(l_node,"Left");
			l_y=$p.getPos(l_node,"Top");
			//l_x=l_node.getLeft();
			//l_y=l_node.getTop();
			
			l_w=l_node.offsetWidth;
			l_h=l_node.offsetHeight;
			if (v_x>l_x && v_x<(l_x+l_w) && v_y>l_y && v_y<(l_y+l_h))
			{
				l_treated=true;
				$p.app.tabs.moduleOver(l_id);
				//v_obj.style.display="none";
				return true;
			}
			else
			{
				$p.app.tabs.moduleOut(l_id);
			}
		}
	}
//	//is object out of selection (under first row)
//	if (!l_treated&&v_direction=="multidim"){
//		for(var j=1;j<l_lstNb;j++){
//			var l_lst=v_parent.length?v_parent[j]:v_parent;
//			var l_node=l_lst.childNodes[0];
//			l_x=l_node.pagePosLeft;
//			l_y=l_node.pagePosTop;
//			l_w=l_node.offsetWidth;
//			l_h=l_node.offsetHeight;
//			if (v_x>l_x&&v_y<=l_y) {l_nextMod=l_node;break;}
//		}
//	}
	//is object out of selection (aside the first col)
	if (!l_treated&&v_direction=="multidim")
	{
		var l_lst=v_parent.length?(v_parent[0]==indef?v_parent[1]:v_parent[0]):v_parent;
		for(var i=0;i<l_lst.childNodes.length;i++)
		{
			var l_node=l_lst.childNodes[i];
			l_x=l_node.pagePosLeft;
			l_y=l_node.pagePosTop;
			l_w=l_node.offsetWidth;
			l_h=l_node.offsetHeight;
			if (v_x<=l_x&&v_y<=l_y) {l_nextMod=l_node;break;}
		}
	}
	//is the module below the "necessary" boxes
	if (!l_treated&&v_direction=="multidim")
	{
		for(var j=1;j<l_lstNb;j++)
		{
			var l_lst=v_parent.length?v_parent[j]:v_parent;
			for(var i=0;i<l_lst.childNodes.length;i++)
			{
				var l_node=l_lst.childNodes[i];
				if (l_node.className=="necessary")
				{
					l_x=l_node.pagePosLeft;
					l_y=l_node.pagePosTop;
					l_w=l_node.offsetWidth;
					if (v_x>l_x && v_x<(l_x+l_w) && v_y>l_y)
					{
						l_treated=true;
						l_nextMod=l_node;break;
					}
				}
			}
		}
	}

	if (l_nextMod!=null&&v_obj!=l_nextMod)
	{
		if (v_type=="module")
		{
			var l_id=$p.app.widgets.getModuleId(l_nextMod);
			if (l_id!=-1 && tab[$p.app.tabs.sel].module[l_id].blocked) return true;
		}
		l_nextMod.parentNode.insertBefore(v_obj,l_nextMod);
		$p.app.widgets.move.setPos(v_obj,v_parent);
		//only for IE (Is causing a displaying issue with FF on newspaper mode : the col1 is moving under the newspaper div)
		if ($p.navigator.IE) hideParent(v_obj);
	}
	return true;
}
/*
	objFreeMove : Manage module free movements (if modules are not aligned)
	inputs
		v_obj : object moved
		v_x : horizontal position of the mouse
		v_y : vertival position of the mouse
		v_parent : parent object
		v_direction : allowed movements : vertical / horizontal / multidim
		v_type : object type (module/tab)
*/
function objFreeMove(v_obj,v_x,v_y,v_parent,v_direction,v_type)
{
	var l_x,l_y,l_treated=false;

	//if module over a tab
	if (v_type=="module" && $p.app.user.id>0)
	{
		var l_tabs=$("tabsframe");
		if (l_tabs!=null)
		for (var i=0;i<l_tabs.childNodes.length;i++)
		{
			var l_node=l_tabs.childNodes[i];
			if (l_node.id=="") continue;
			var l_id=l_node.id.replace(/tab/,"");
			if (l_id==$p.app.tabs.sel) continue;
			//l_x=l_node.pagePosLeft;
			l_x=$p.getPos(l_node,"Left");
			l_y=$p.getPos(l_node,"Top");
			//l_x=l_node.getLeft();
			//l_y=l_node.getTop();
			l_w=l_node.offsetWidth;
			l_h=l_node.offsetHeight;
			if (v_x>l_x && v_x<(l_x+l_w) && v_y>l_y && v_y<(l_y+l_h))
			{
				l_treated=true;
				$p.app.tabs.moduleOver(l_id);
				//v_obj.style.display="none";
				return true;
			}
			else
			{
				$p.app.tabs.moduleOut(l_id);
			}
		}
	}
	//is object out of selection (under first row)
	if (!l_treated&&v_direction=="multidim")
	{
		l_y=$p.getPos(v_parent,"Top");
		if (v_y<=l_y)
			return false;
		if (v_obj.style.left.toInt()<widgetDecalX)
			return false;
	}

	return true;
}
/*
	_bringToFront : bring widget to front
	input : uniq ID of the widget
*/
function _bringToFront(v_uniq)
{
	parent.tab[$p.app.tabs.sel].module[$p.app.widgets.uniqToId(v_uniq)].bringToFront();
}
function idToPos(v_id){return $p.app.tabs.idToPos(v_id);}
function uniqToId(v_uniq,v_tab){return $p.app.widgets.uniqToId(v_uniq,v_tab);}
/*
	box : Generate an horizontal menu
	inputs : 
		v_h : height of the menu (optional)
		v_title : title displayed on top of the menu 
		hideFct : function that close the menu (optional). If undefined, close button is not displayed
		v_content : HTML content of the menu
		v_hdr : HTML header of the menu (optional)
	output : HTML code of the menu
*/
function box(v_h,v_title,hideFct,v_content,v_hdr)
{
	var l_s=(v_hdr==indef?"":v_hdr)+"<table cellpadding='10' cellspacing='0' width='100%'><tr><td"+(v_h>0?" height="+v_h:"")+"><table class='menubox' cellpadding='0' cellspacing='0' border='0' width='100%'>";
	l_s+="<tr><td class='menuhdr'><table width='100%'><tr><td class='menutitle'><b>"+v_title+"</b></td>";
	if (hideFct!="") l_s+="<td class='menuclose'><a class='w' href='#' onclick=\""+hideFct+";return false;\">"+$p.img("s.gif",13,13,lg("lblClose"),"imgmid")+" "+lg("lblClose")+"</a></td>";
	l_s+="</tr></table></td></tr>";
	l_s+="<tr><td valign='top' class='menucont'>";
	l_s+=v_content;
	l_s+="</td></tr></table></td></tr></table>";
	return l_s;
}
/*
	clearTimer : close a timer object
	input : timer name
*/
function clearTimer(v_timer)
{
	clearTimeout(v_timer);
	v_timer=0;
}
// Sort by module min width
function widthSort(a,b)
{
	if (a.minModSize>b.minModSize) return -1;
	if (a.minModSize<b.minModSize) return 1;
	return 0; 
}
