/*
Relies on Prototype.js
*/
//var lowBandwidthMode=false;

var pageInit = Class.create({	
	initialize : function(options){	
		this.options = options||{};
		this.options = Object.extend({disable:''},this.options);
		
		/*
		this.toolbar=false;
		try{
			this.toolbar=new toolbarFunctions(document.URL)
			this.toolbar.tree.setBackButton()
		}catch(ex){}
		try{this.cdnRoot = cdnRoot||'';}catch(ex){this.cdnRoot=''}
		*/
		this.collections = {div : $$('div'),span : $$('span'),a : $$('a'),table : $$('table'),img : $$('img')}		
	
		this.expandit._init(this);
		this.diapo._init(this);
		this.rollovers._init(this);
		this.displayManager._init(this);
		this.animations._init(this);
		this.references._init(this,{onComplete:this.lastUpdate._init.bind(this.lastUpdate)});		
		this.tables._init(this);
		/*this.keywords._init(this);*/

		try{tb=this.toolbar;}catch(ex){}
		
	},
	include_dom : function (script_filename,params) {
		params = params||{}
	    var html_doc = $$('head')[0];		
		var js = new Element('script',{'language':'javascript','type':'text/javascript',src:script_filename})		
		if(params.onComplete){				
			if(params.onCompleteEvent){
				$(document).observe(params.onCompleteEvent,params.onComplete.bindAsEventListener(this))
			}
			else{
				Event.observe(js,'load',
					params.onComplete.bindAsEventListener(this)
				);
			}
		}
		return html_doc.insert(js);					    
	},
	expandit : {
		_init : function(p){
			this.parent = p;
			if(this.parent.options.disable.indexOf('expandit')!=-1){return false;}
			this.parent.collections.div.findAll(function(node){try{if(node.getAttribute('id').indexOf('expandit')!=-1){return node;}}catch(ex){}}).each(
				function(node){
					node.addClassName('expandit');
					node.hide();
					if (node.className.indexOf('independant')==-1){					
						//TODO  : DOM Add link
						node.appendChild(new Element('a',{'class':'expanditclose',href:'javascript:expandit(\''+node.id+'\')'}).update('<img src="/Media/shared/all/close.gif" style="position:absolute; right : -1px; bottom: -13px;"/>'))
					}
				}
			);
		},
		toggle : function(id){if($(id).style.display==''){this.hide(id)}else{this.show(id)}},
		show : function(id){$(id).show()},
		hide : function(id) {$(id).hide()}
	},
	tables : {
		_init: function(p){
			this.parent = p;				
			
			if(this.parent.options.disable.indexOf('tables')!=-1){return false;}			
			var even = false;
			var evenClass='even'
			var oddClass='odd'
			this.parent.collections.table.each(
				function(table){
					try{						
						var tbodies = table.getElementsByTagName("tbody");
						for (var h = 0; h < tbodies.length; h++) {
						  var trs = tbodies[h].getElementsByTagName("tr");
						  /* colors (bug IE)*/
						  //if(trs[i].className && trs[i].className.indexOf(/orange|green|red|blue/i)!=-1){trs[i].style.backgroundColor='red'}						  
						  for (var i = 0; i < trs.length; i++) {						  
							  var tds = trs[i].getElementsByTagName("td");							  
							  for (var j = 0; j < tds.length; j++) {							  
								var mytd = tds[j];						
								  try{if(mytd.className && mytd.className.match(colorRegex)!=''){mytd.style.backgroundColor=colorCodes[mytd.className.match(colorRegex)];mytd.className=mytd.className.replace(colorRegex,'')}}catch(ex){}								  
								  //else{
									if(table.hasClassName('alternate')){ mytd.className +=' '+(even ? evenClass : oddClass);		}
								  //}
							  }
							even =  ! even;
						  }
						}
					}
					catch(ex){}	
				
					if ((table) && (table.hasClassName('withtitle')==true)){
					
						var sTitle = table.getAttribute('title')
						var sWidth = table.getAttribute('width')
						
						if(!sWidth||sWidth==''){sWidth=document.all?parseInt(table.style.width):table.clientWidth;		}
						if(!sTitle||sTitle==''){sTitle=' '} //attention ce n'est pas vide mais un espace modif test 09.12.2009
						
												
						var sId =table.id
						
						if(!sId ||sId==undefined){
							sId = String( Math.round(Math.random() * 1000000 ) )
							table.setAttribute('id',sId)
						}
						
						if(sTitle!=''&&sTitle!=undefined&&sWidth!=''&&sWidth!=undefined){										
							animize3(table.id,{title:sTitle,width:sWidth})
							//Remarquez que seuls le tableaux appellent animize3
                            //alors que les diaporamas et animations appellent le 2.
						}
					}								
				}
			);
				
		}
	},
	rollovers : {
		_init : function(p){
			this.parent=p;
			if(this.parent.options.disable.indexOf('rollovers')!=-1){return false;}
			this.parent.collections.img.findAll(
				function(node){
				   if (node.getAttribute('hsrc')) {
				         try{
					        node.onmouseover = function(){rolloverInverseImages(this,'hsrc')}
						    node.onmouseout = function(){rolloverInverseImages(this,'hsrc')}
					     }
                        catch(ex){ }	
				   }
				   if(node.hasClassName('rollover')){
						var replacement=false;var cnt = node.className.split(' ')
						for (var j=0;j<cnt.length&!replacement;j++){
							if(cnt[j].indexOf('__')!=-1){replacement=cnt[j].split('__')}
						}				
						if(replacement){
							node.onmouseover=function(){this.src=this.src.toLowerCase().replace(replacement[0].toLowerCase(),replacement[1].toLowerCase())}
							node.onmouseout=function(){this.src=this.src.toLowerCase().replace(replacement[1].toLowerCase(),replacement[0].toLowerCase())}
						}
					}				
				}
			);
		
		},
		inverseImages : function(img){
			var imgOriginSrc = img.getAttribute('src');
		    img.setAttribute('src',img.getAttribute('hsrc'))
			img.setAttribute('hsrc', imgOriginSrc)		
		}
	},
	animations : {
		_init : function(p) {			
			this.parent=p;		
			if(this.parent.options.disable.indexOf('animations')!=-1){return false;}			
			var thisObj = this;			
			this.parent.collections.div.each(			
				function(node){
					var params = false;		
					if(node.id.indexOf('anim')==0 && (node.className && node.className.indexOf('animdeclaration')==-1)){
						try{			
							params = eval(node.id)
							params.sourcetype='javascript'
						}
						catch(ex){}
					}
					if(node.className.indexOf('animobject')==0){
						var o = false;
						for(var j=0;j<node.childNodes.length&&!o;j++){
							try{if(node.childNodes[j].getAttribute('data')=='anim'){o=node.childNodes[j]}}catch(ex){}
						}			
						if(o) {				
							params = thisObj.getAnimParamsFromObject(o);
							params.sourcetype='object'
						}			
					}
					if(node.className.indexOf('animdeclaration')!=-1){					
						params = thisObj.getAnimParamsFromAnimDeclaration(node);
						params.sourcetype='div'		
					}				
					if(!!params){
					    //	Modification MB le 09.07.2009 ajout du try catch car erreur.
					    try{
					        //params.animid=params.url.replace(/\W/gi, '_');						
						    //thisObj.pageAnims[params.animid]=params;

						    var animHTML = getAnimHTML(params.url, params.width, params.height, params, thisObj.isLowBandwithMode());
						    node.innerHTML = animHTML;				
						    node.className =  node.className.replace(/animobject|animdeclaration/gi, ' anim')			
    						
						    //node.className+=' right '
    						
						    if (node.className.indexOf('animized')!=-1){node.className =  node.className.replace('animized', '')}				
						    if (node.className.indexOf('showtitle')!=-1){node.className =  node.className.replace('showtitle', '')}				
						    //node.id = 'animobject'+i							
						    node.style.width= params.width+'px'
						    //node.style.height= parseInt(params.height)+20 +'px'//title bar
						    node.style.height= 'auto'
    						
						    redimLegend(node.id, params.width)
					     }
                        catch(ex){ }	
					}					
				}
			);						
		},		
		isLowBandwithMode : function(){	try{return lowBandwidthMode||false;}catch(ex){return false;}	},
		
		getAnimParamsFromObject : function (node){
			var params={}
			params.width=node.getAttribute('width')
			params.height=node.getAttribute('height')
			params.id=node.getAttribute('name')
			var p = node.getElementsByTagName('param')			
			$A(node.childNodes).each(      
				function(x){
					if (x.nodeName.toLowerCase()=='param'){
						params[x.getAttribute('name')]=x.getAttribute('value')						
					}
				}
			);
			return params;
		},
		getAnimParamsFromAnimDeclaration : function (node){
			var params={}
			var flashvars=false;
			var flashparams=false;	
			params.id = node.id
			try{params.width = parseInt(node.style.width)}catch(ex){params.width=350;node.style.width=350}//default
			try{params.height = parseInt(node.style.height)}catch(ex){params.height=300;node.style.height=300}//idem
			var anchor = false;
			var anchors =node.getElementsByTagName('a')
			if(anchors.length==1){anchor=anchors[0]}

			else{for(var i=0;i<anchors.length&&!anchor;i++){if(anchors[i].parentNode==node){anchor=anchors[i]}}}
			if(anchor){
				if(anchor.className.indexOf('notitle')==-1){			params.title = anchor.innerHTML;		}
				params.url = anchor.getAttribute('href')
			}	
			var l = node.getElementsByTagName('div')
			for(var i=0;i<l.length;i++){
				//if (l[i].className=='legend'){params.legend=l[i].innerHTML}		
				if(l[i].className){
					var td=false
					if(l[i].className.indexOf('flashvar')==0){if(!flashvars){flashvars={}};flashvars[l[i].className.split(' ')[1]]=l[i].innerHTML;td=true}
					if(l[i].className.indexOf('flashparam')==0){if(!flashparams){flashparams={}};flashparams[l[i].className.split(' ')[1]]=l[i].innerHTML;td=true}			
					if(!td){params[l[i].className]=l[i].innerHTML}
				}
			}
			if(flashvars){params.flashvars=flashvars}
			if(flashparams){params.flashparams=flashparams}
			var classParams = node.className.split(' ');			
			for (var i=0;i<classParams.length;i++){
				if(classParams[i].indexOf('_')!=-1){params[classParams[i].split('_')[0]]=classParams[i].split('_')[1]}								
			}
			
			params.className=node.className||''
			return params;		
		}	,
		getAnimObject : function (node){
			var o = {}	
			switch(node.nodeName.toLowerCase()){
				case 'div':
					o = getAnimParamsFromObject(node)				
					break;
				case 'fieldset':
					o = getAnimParamsFromFieldset(node);			
					break;
			}			
			return o;
		}	
	},
	/*
	keywords : {
		_init : function(p){
			this.parent=p;
			if(this.parent.options.disable.indexOf('keywords')!=-1){return false;}
			var keywords='';var result='';
			$$('meta').findAll(function(node){
					if(node.getAttribute('name')=='keywords'){				return node;			}
				}).each(function(node){keywords=node.getAttribute('content')}	
			);
			
			if(keywords!=''){
			//url page
			var kwdocURL = document.URL.replace('http://', '')
			kwfirstslash = kwdocURL.indexOf('/')
			
			kwdocURL = kwdocURL.substring(kwfirstslash)		
			
			//suppression params
				if (kwdocURL.indexOf('?')!=-1){kwdocURL=kwdocURL.substring(0,kwdocURL.indexOf('?'))}
				if (kwdocURL.indexOf('#')!=-1){kwdocURL=kwdocURL.substring(0,kwdocURL.indexOf('#'))}
				//save
				new Ajax.Request(
					'/services/keywords/ax_pageKeywords.aspx',
					{
						asynchronous:true,method:'get',parameters:'pageurl='+kwdocURL+'&kw='+keywords+'&title='+document.title
					}
				)
			}
			
		}
	},
	*/
	diapo : {
		_init : function(p){		
			this.parent= p;
			if(this.parent.options.disable.indexOf('diapo')!=-1){return false;}
			if($$('div.diaporamadeclaration').length>0){
			    //alert(this.parent.cdnRoot+'/includes/js/popups/popups2.js');
			    var parentCdnRoot = this.parent.cdnRoot;
			    if (parentCdnRoot==undefined){
			        parentCdnRoot='';
			    }
				this.parent.include_dom(parentCdnRoot+'/includes/js/popups/popups2.js',{onCompleteEvent : 'diaporama:load',onComplete:this.listDiapos.bind(this)})
				//loadWait( 'new diaporama(\'temp\',{},[])', this.listDiapos);
			}
		},
		listDiapos : function(){	
			var currentO = this;
			this.parent.collections.div.findAll(
				function(node){if(node.hasClassName('diaporamadeclaration'))return node;}
			).each(
				function(node){				
					var mydiapo = new diaporama(node.id,{},[])
					var mydiapoinit=false;
					var params = node.className.split(' ')
					for (var i=0;i<params.length;i++){
						switch(params[i]){
							case 'diaporamadeclaration': break;
							default : {
								if(params[i].indexOf('start')!=-1){try{mydiapoinit=parseInt(params[i].replace('start',''))}catch(ex){alert(ex.message)};break;}								
								if(params[i].indexOf('loop')!=-1){try{mydiapo.objParameters.loop=true}catch(ex){alert(ex.message)};break;}
								if(params[i].indexOf('hideEmptyTabs')!=-1){try{mydiapo.objParameters.hideEmptyTabs=true}catch(ex){alert(ex.message)};break;}								
								if(params[i].indexOf('delay')!=-1){try{mydiapo.objParameters.slideshowDelay=parseInt(params[i].replace('delay',''))}catch(ex){alert(ex.message)};break;}
								if(params[i].indexOf('minlegendheight')!=-1){try{mydiapo.objParameters.minlegendheight=parseInt(params[i].replace('minlegendheight',''))}catch(ex){alert(ex.message)};break;}
								if(params[i].indexOf('showlegend')!=-1){					
									if(params[i].replace('showlegend','')!=''){
										mydiapo.objParameters['showlegend']=params[i].replace('showlegend','');
									}
								}
								mydiapo.objParameters[params[i]]=true
							}
							
						}
					}
					
					for (var i=0;i<node.childNodes.length;i++){
						switch(node.childNodes[i].nodeName.toLowerCase()){
							case 'div':							
								if(node.childNodes[i].className.indexOf('diapoanim')!=-1){				
									var o=false;
									var o = currentO.parent.animations.getAnimParamsFromAnimDeclaration(node.childNodes[i])											
								}
								else{								
									var o = false;
									for(var j=0;j<node.childNodes[i].childNodes.length&&!o;j++){
										try{if(node.childNodes[i].childNodes[j].getAttribute('data')=='diapoanim'){o=node.childNodes[i].childNodes[j];}}catch(ex){}
									}					
									if(o){o=currentO.parent.animations.getAnimObject(o)}
								}
								if(o){											
										mydiapo.objMedia[mydiapo.objMedia.length] = [o.url,o.width,o.height,
											(o.title&&o.title!=undefined?o.title:''),
											(o.legend&&o.legend!=undefined?o.legend:''),
											(o.tablabel&&o.tablabel!=undefined?o.tablabel:''),
											o.className,
											(o.moreurl&&o.moreurl!=undefined?o.moreurl:'')]
										mydiapo.objMedia=mydiapo.objMedia.flatten()
									}				
								break;
							case 'img':
								mydiapo.objMedia[mydiapo.objMedia.length] = [node.childNodes[i].src,node.childNodes[i].width,node.childNodes[i].height,(node.childNodes[i].title?node.childNodes[i].title:''),'','','','']
								mydiapo.objMedia=mydiapo.objMedia.flatten()
								break;		
						}		
						//node.removeChild(node.childNodes[i])
					}	
					node.innerHTML=''//clear div
					window[node.id]=mydiapo
					if(!!mydiapoinit){window[node.id].display(node.id,{start:mydiapoinit})}	
				}
			);
		}
	},
	references : {
		_init : function(p,param){
			param=param||{}

			this.parent=p;			
			if(this.parent.options.disable.indexOf('references')!=-1){return false;}
			var r=this.parent.collections.span.find(function(node){
				try{if(node.getAttribute('type')=='ref'){return node;}}catch(ex){}
			});

			if(r){
				/*this.parent.include_dom('/services/references2/client/refParser.js',{onCompleteEvent : 'references:load',onComplete : function(){parseRef(param)}})*/
				this.parent.include_dom('/cms/references/refParser.js',{onCompleteEvent : 'references:load',onComplete : function(){parseRef(param)}})
			}
			else{
				if(param.onComplete){param.onComplete()}
			}
		}
	},
	lastUpdate : {
		_init : function(p){

			this.parent=p;
try{
			if(this.parent.options.disable.indexOf('lastupdate')!=-1){return false;}
}
catch(ex){}
			
			var metas={};var result='';
			$$('meta').findAll(function(node){
					switch(node.getAttribute('name')){
						case 'date-creation-yyyymmdd': return node;
						case 'author':return node;
						case 'date-revision-yyyymmdd' : return node;
						case 'reviewer':return node;				
					}
				}).each(function(node){metas[node.getAttribute('name')]=node.getAttribute('content')}	
			);

			if(metas['date-revision-yyyymmdd']!=undefined){

				result+='Last Update : '+this.formatDate(metas['date-revision-yyyymmdd'])
				if(metas['reviewer']!=undefined){result+=' by '+metas['reviewer']}
			}
			if(result!=''){
				try{ new Insertion.Bottom($('pageContent'),'<div id="lastmodif">'+result+'</div>')}
				catch(ex){ new Insertion.Bottom(document.body,'<div id="lastmodif">'+result+'</div>')}
			}		
		},
		formatDate:function (strdate){
			if (strdate.length!=8){return strdate}		
			var dd=strdate.substring(6,8)
			var m= strdate.substring(4,6)-1
			var yyyy=strdate.substring(0,4)
			
			var d= new Date(yyyy,m ,dd)
			return(d.toLocaleString().replace('00:00:00','') )
		}		
	},
	displayManager  : {		
		_init : function(p){
			this.parent = p;		
			if(this.parent.options.disable.indexOf('displaymanager')!=-1){return false;}
			this.animize();
			this.initLinks();
		},
		animize : function(){
				this.parent.collections.div.findAll(
					function(node){if(node.hasClassName('animized')){return node}}
				).each(
					function(node){
						var p_title=node.getAttribute('title')||''					
						if(node.className.indexOf('diaporama')!=-1){p_title=false}
						var params = {title : p_title,width:node.getWidth()||''}
						animize2(node.id,params)
					}
				);
		},
		initLinks : function(){			
			this.parent.collections.a.each(
				function(node){//TODO : cas particulier IE !			
					try{
					if(String(node.onclick).indexOf('expandit')!=-1){
						inabl=false;
						try{inabl=node.parentNode.className.indexOf('abl')!=-1	}catch(ex){}
						if(!Prototype.Browser.IE || inabl){node.addClassName('expandit');}
						else{node.update('<img src="/Media/Shared/all/Link_Expanit.gif"/>'+node.innerHTML)}						
					}

					if(String(node.href).indexOf('.pdf')!=-1)		{if(Prototype.Browser.IE){node.update('<img src="/Media/Shared/all/PDF.gif"/>'+node.innerHTML)}else{node.addClassName('LinkPDF');}node.setAttribute('target','_blank');node.setAttribute('title',node.title||'Opens a PDF document')}
					if(String(node.href).indexOf('.doc')!=-1)		{if(Prototype.Browser.IE){node.update('<img src="/Media/Shared/all/WORD.gif"/>'+node.innerHTML)}else{node.addClassName('LinkWORD');}node.setAttribute('target','_blank');node.setAttribute('title',node.title||'Opens a Word document')}
					if(String(node.href).indexOf('.ppt')!=-1)		{if(Prototype.Browser.IE){node.update('<img src="/Media/Shared/all/powerpoint.jpg"/>'+node.innerHTML)}else{node.addClassName('LinkPowerpoint');}node.setAttribute('target','_blank');node.setAttribute('title',node.title||'Opens a Powerpoint document')}
					if(String(node.href).indexOf('mailto:')==0)		{if(Prototype.Browser.IE){node.update(''+node.innerHTML)}else{node.addClassName('LinkEmail');}node.setAttribute('title',node.title||'E-mail')}
					if(String(node.onclick).indexOf('.display(')!=-1||String(node.onclick).indexOf('.displayline(')!=-1){
						if (String(node.onclick).indexOf('getTree')==-1)	{// YC 20100504, correction effet de bord avec l'arbre .net
							if(Prototype.Browser.IE){node.update('<img src="/Media/Shared/all/link_diapo.gif"/>'+node.innerHTML)}else{node.addClassName('LinkDiapo');}
							node.setAttribute('title',node.title||'Slideshow')
						}
					}
					}catch(ex){}
				}
			);
		}
	}

});

var pageFramework = false;
function expandit(div){pageFramework.expandit.toggle(div)}//retrocompatibility function
/*
Event.observe(window,'load',function(){
	pageFramework=new pageInit({disable:{animations:false}});
	try{
	pageFramework.toolbar = new toolbarFunctions(document.URL);
	tb=pageFramework.toolbar;
	}
	catch(ex){}
});
*/
