function wpopen (url) {
    window.open(url, '_blank', 'width=600,height=400,scrollbars=yes,status=yes');
}

function positionnement() {
    if (document.getElementById) {
        var windowHeight=getWindowHeight();
        var mainElement=document.getElementById('main');
        if (windowHeight < 580) {
            mainElement.style.top='265px';
           } else {
            mainElement.style.top='50%';
        }
      }
}

Event.observe(window, 'load', positionnement );
Event.observe(window, 'load', swamLinkWatchener );
Event.observe(window, 'load', swamFormWatchener );

Event.observe(window, 'load', function() {setTimeout(checkHightContents ,500);} );


Event.observe(window, 'resize', positionnement );

var gotoChangeListener = function(newLocation, historyData) {
   swamGoto(newLocation);
}





Event.observe(window, 'load', function() {
        dhtmlHistory.initialize();
        dhtmlHistory.addListener(gotoChangeListener);
});

function getWindowHeight() {
    var windowHeight=0;
    if (typeof(window.innerHeight)=='number') {
        windowHeight=window.innerHeight;
    }
    else {
     if (document.documentElement&&
       document.documentElement.clientHeight) {
         windowHeight = document.documentElement.clientHeight;
    }
    else {
     if (document.body&&document.body.clientHeight) {
         windowHeight=document.body.clientHeight;
      }
     }
    }
    return windowHeight;
}


function getSwamUrl(module,action)
{
	return 'ws/ajaxController.php?mode=getmodule&module='+module+'&action='+action ;
}

function swamSetWait(id)
{
	$(id).update('<div class="waiter"></div>');
}

function swamRemWait(id)
{
	$(id).update('');
}

function swamEvalJsMod(url) {
	new Ajax.Request( url ,  {
				parameters : { inajax : '1' , getjs : '1' } ,
				evalJS : 'force' 
  			} );
}


window.dhtmlHistory.create({
        toJSON: function(o) {
                return Object.toJSON(o);
        }
        , fromJSON: function(s) {
                return s.evalJSON();
        }
	});


function initSwamControler(listeModules,mode)
{
	
	execSwamControler(listeModules,mode)
	
	if(document.location.hash)
	{
		navi = document.location.hash.substr(1,document.location.hash.length);
		swamGoto(navi);
	}
}

//le coeur de swam
function execSwamControler(listeModules,mode)
{
    //alert(listeModules);
	listeModules.each(function(item) {
	//alert('entree boucle');
		var url = getSwamUrl(item.module,item.action) ;
		//affichage de page ( au chargement ) : on ne s'occupe que des refresh
		if( ! item.refresh && mode == 'page' ) {
			return true ; //pas continue : on est pas dans une boucle syntaxique			
		}
		if(! item.noloading ) {
			var opts = '{	onCreate : function() { swamSetWait("'+item.iddiv+'") ; }';
		} else {
			var opts = '{ osef : \'osef\' ' ;			
		}
		opts += ' , onComplete: function(transport) { swamLinkWatchener2();swamFormWatchener();fleXcrollTo("contents","0px","0px",false);  } ';
		
		if(item.parameters)
		{
		    //alert('parametre');
		    //alert(item.parameters.toJSON());
		    opts += ' ,  method: \'post\' , parameters : '+Object.toJSON(item.parameters)+' ';
		}
		
		
		if(item.isjs) {
			opts += ' , evalScripts : true ' 
		}
		
		if(item.refresh) {
			opts += ' , method:   \'get\', frequency: '+item.refresh+', decay: 1 '  ;
		}
		
		
		var params = opts + '}' ;	
		
		if(item.refresh) {
			//new Ajax.PeriodicalUpdater(item.iddiv, url,eval('('+params+')'));
		} else {
			new Ajax.Updater(item.iddiv , url , eval('('+params+')')  );
		}
		
	});
}

function JSON2object(json)
{
    return eval('('+json+')') ;
}

//fonction spécifique remplaçant des navis par des autres, pour ne pas rêpeter une action dans l'historique et la remplacer par une autre
function replaceNavi(navi)
{
		//si instruction d'écoute, on substitue par instruction d'infosongs dans les logs dhtmlhistory
	var Expression = /ecouter_([a-zA-Z0-9_]+)/
	var resultat = Expression.exec(navi);
	if(resultat)
		navi = 'songinfo_'+RegExp.$1
	
	return navi	
	
}

function swamGoto(navi)
{
	noHistory = false
	if(navi == 'nolink')
		return ;
	if(navi == '') //si arrivée ici via dhtml history ,et que plus d'history (1ere page ), alors on doit prendre l'url
	{
		noHistory = true
		var Expression = /manu_serve_([a-zA-Z0-9_\ ]+).html/
		var resultat = Expression.exec(window.location.href);
		if(resultat)
			var navi = RegExp.$1
		else
			return '';
		navi = replaceNavi(navi)
	}
	
	swamSetWait('gotowaiter') ;
	var url = getSwamUrl('dispacher','json') ;
	var listeModules = new Ajax.Request(url+'&navi='+navi, {
	    method : 'get',
	    onComplete: function(transport) {
	        if( ! transport.headerJSON ) {
	            alert('erreur: nojson for navi='+navi+'response='+transport.responseText) ;
	        }
	       	//alert(transport.headerJSON) ;  
	        //eval('('+transport.headerJSON+')');
            execSwamControler(JSON2object(transport.headerJSON) ,'linkaction') ; 
            //execSwamControler(transport.headerJSON,'linkaction') ;
            
            swamRemWait('gotowaiter') ; 
            }
        })
    //si instruction d'écoute, on substitue par instruction d'infosongs dans les logs dhtmlhistory
	navi = replaceNavi(navi)
    if( ! noHistory )
    	dhtmlHistory.add(navi,navi); //dhtmlhistory sait gerer tout seul si on est dans le cas d'une arrivée ou d'une répétition
	//window.location.hash = navi ;
}


//même chose mais pour les formulaires
function swamGotoPost(navi,params)
{
	//alert(params)
	
	swamSetWait('gotowaiter') ;
	var url = getSwamUrl('dispacher','json') ;
	var listeModules = new Ajax.Request(url+'&navi='+navi, {
	    method : 'post',
	    parameters : params,
	    onComplete: function(transport) {
	        if( ! transport.headerJSON ) {
	            alert('erreur: nojson for navi='+navi+'response='+transport.responseText) ;
	        }
	       	//alert(transport.headerJSON) ;  
	        //eval('('+transport.headerJSON+')');
            execSwamControler(JSON2object(transport.headerJSON) ,'linkaction') ; 
            //execSwamControler(transport.headerJSON,'linkaction') ;
            
            swamRemWait('gotowaiter') ; 
            }
        })
}


function swamLinkWatchener2()
{
	swamLinkWatchener()
}

function swamLinkWatchener()
{
	$$('a').each(function(item) {
		if (item.className.indexOf('formlink')!=-1 ) {
			return ;
		}
		
		if (item.className.indexOf('noswam')!=-1 )
			return(false);
		
		if (item.className.indexOf('extern')!=-1 )
		{
			item.onclick = function () {
				var win = window.open(this.href);
				return(false);
			}
		}
		var Expression = /manu_serve_([a-zA-Z0-9_\ ]+).html/
		var resultat = Expression.exec(item.href);
		if(resultat)
			{
			var navi = RegExp.$1
			 $(item).stopObserving('click');
			 $(item).observe('click' , function(event) { swamGoto(navi) ; Event.stop(event);} )
//			item.onclick = function () {
//					swamGoto(navi)
//					return(false);
//				}
			}
			
	});
	
}

function swamSubmitForm(form)
{
var eleform = $(form)
	var Expression = /manu_serve_([a-zA-Z0-9_]+).html/
	var resultat = Expression.exec(eleform.action);
	var navi = RegExp.$1
	swamGotoPost(navi,eleform.serialize(true))
}



function swamFormWatchener()
{
	//on renomme les balises ferm en form
	$$('ferm').each(function(item) {
		item.innerHTML = '<div>Coucou loulou</div>';
	});

	$$('form').each(function(item) {

		var Expression = /manu_serve_([a-zA-Z0-9_]+).html/
		var resultat = Expression.exec(item.action);
		if(resultat)
			{
			var navi = RegExp.$1
			 $(item).stopObserving('submit');
			 $(item).observe('submit' , function(event) { swamSubmitForm(item)  ; Event.stop(event);} )
			}
			
	});
	
}

//changement de style à la volée
function setActiveStyleSheet(title) {
   var i, a, main;
   for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
     if(a.getAttribute("rel").indexOf("style") != -1
        && a.getAttribute("title")) {
       a.disabled = true;
       if(a.getAttribute("title") == title) a.disabled = false;
       //if(a.getAttribute("title") == title+'_scroller') a.disabled = false;
     }
   }
}


//verifie une fois par demi seconde que la hauteur de l'ascenceur est ok
function checkHightContents() {
	 $('contents').scrollUpdate();
	setTimeout(checkHightContents ,500);
}  


//pour debug
function log(message) {
    if (!log.window_ || log.window_.closed) {
        var win = window.open("", null, "width=400,height=200," +
                              "scrollbars=yes,resizable=yes,status=no," +
                              "location=no,menubar=no,toolbar=no");
        if (!win) return;
        var doc = win.document;
        doc.write("<html><head><title>Debug Log</title></head>" +
                  "<body></body></html>");
        doc.close();
        log.window_ = win;
    }
    var logLine = log.window_.document.createElement("div");
    logLine.appendChild(log.window_.document.createTextNode(message));
    log.window_.document.body.appendChild(logLine);
}

