﻿/*
 *      LIBRARIE REST POUR MAPPRESENCE
 *      
 *      Crée par Alexandre Herzog
 * 
 */
 
 
 function checkURL()
 {
	if (document.location.hash != "" && document.location.hash.indexOf("=") > 0)
	{
		// on supprime au moins l e = et on verifie si le prochain car n'est pas un / (IE et Firefox n'ayant pas la meme valeur de hash...)
		var directURL = document.location.hash.substring(document.location.hash.indexOf("=")+1);
		
		if (directURL.substring(0, 1) == "/")
			directURL = directURL.substring(1);
		
		document.location.hash = "";
		document.location.pathname = directURL;
	}
 }
 
 function Ajax_GET(page, caller)
 {
	RestRequest("GET", page.href + "?content=true", rep_Ajax_GET_content , caller, "");
	RestRequest("GET", page.href + "?header=true", rep_Ajax_GET_header , caller, "");
	
	try
	{
		_gaq.push(['_setAccount', 'UA-16839913-1']);
        _gaq.push(['_trackPageview', page.pathname]); 
	}
	catch (e)
	{
		// error while loading Google Analytics'objects
	}

	document.location.hash="page=" + page.pathname;
 }
 
 function rep_Ajax_GET_content(xhr, caller)
{
    if (xhr.readyState==4) 
    {
    	var contenu = xhr.responseText;
		
		try
		{
			changePageContent(contenu, caller);
		}	
		catch (e)
		{
			alert('rep_Ajax_GET_content: ' + e);
		}

    }
}

 function rep_Ajax_GET_header(xhr, caller)
{
    if (xhr.readyState==4) 
    {
    	var docXML= xhr.responseXML;
		
		try
		{
			var titre = docXML.getElementsByTagName("titre")[0];
			
			changePageHeader(titre.textContent, "", caller);
		}	
		catch (e)
		{
			alert('rep_Ajax_GET_header: ' + e);
		}

    }
}

 function rep_Ajax_GET(xhr, caller)
{
    if (xhr.readyState==4) 
    {
    	var docXML= xhr.responseXML;
		
		try
		{
			var contenu = docXML.getElementsByTagName("contenu");
			var titre = docXML.getElementsByTagName("titre")[0];
			var texte = xhr.responseText;
			var debut = texte.indexOf("<texte>");
			var fin = texte.indexOf("</texte>", fin);
			var txt = texte.substring(debut+7, fin);
			
			changePage(titre.textContent, "toto", txt, caller);
		}	
		catch (e)
		{
			alert('rep_Ajax_GET: ' + e);
		}

    }
}
 
function RestRequest(methode, ressource, callback, caller, args)
{
    if (typeof(args) == 'undefined')
        args = "";

    var xhr=null;
    
    if (window.XMLHttpRequest)
	{ 
        xhr = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) 
    {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    
    //on définit l'appel de la fonction au retour serveur
    xhr.onreadystatechange = function() { 
                                            //RestResponse(xhr, callback);
											callback( xhr, caller );
                                        };
    
    if (methode == "GET" && args != "")
        alert("Erreur RestRequest() : impossible d'envoyer des valeurs via GET !");

    xhr.open(methode, ressource, true);
    
    // setting des entêtes HTTP pour recevoir une réponse en JSON
    xhr.setRequestHeader("Accept", "text/javascript");
	xhr.setRequestHeader("Cache-Control", "no-cache");
    
    // GET ne permet pas l'envoi de données, les autres méthodes oui
    if (methode != "GET")
    {    
        if (args != "")
        {
            args = "json=" + args;
            
        }
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhr.setRequestHeader("Content-length", args.length);
        xhr.setRequestHeader("Connection", "close");    
    }
        
    xhr.send( args );        
}

function RestResponse(xhr, callback)
{
    if (xhr.readyState==4) 
    {
    	var docXML= "(" + xhr.responseText + ")";
        try
        {
            // transformation de la réponse JSON en objet
            var comment = eval(docXML);
        }
        catch (e)
        {
            alert('RestResponse: ' + e);
        }

        // appel de ma méthode de réponse usuelle
        callback ( comment );
    }
}

/*
	DOM FUNCTIONS
*/

function ajaxAHref(callerObj)
{
	if (callerObj.tagName == "A")
	{
		// code ajax à la place de cela...
		callerObj.textContent = "Chargement de " + callerObj.href + "?ajax=true en cours...";
		return false;
	}
}

function isAJAX()
{
	return document.getElementById('AJAXmode').checked;
	
}

function changePage(title, url, content, caller)
{
	
	var childDiv = getDivChild(caller);
	if (childDiv != null)
		showChildDivs(childDiv);
	
	document.title = title;
	
	//document.location.href = url;
	document.getElementById('contentTxt').innerHTML = content;
	
	clearMenuSelectedClass();
	caller.className = "menuSelected";	
	return false;
}

function changePageContent(content, caller)
{
	
	var childDiv = getDivChild(caller);
	if (childDiv != null)
		showChildDivs(childDiv);
	
	document.getElementById('contentTxt').innerHTML = content;
	
	clearMenuSelectedClass();
	caller.className = "menuSelected";	
	return false;
}

function changePageHeader(title, url, caller)
{
	document.title = title;
	
	return false;
}

function clearMenuSelectedClass()
{
	var listeTagA = document.getElementsByTagName('a');
	
	for (var i=0; i < listeTagA.length; i++)
	{
		if (listeTagA[i].className = "menuSelected")
		{
			listeTagA[i].className = "";
			//return true;
		}
	}
}

function getDivContainer(caller)
{
	if (caller.nodeName == "DIV" || caller.nodeName == "UL")
		return caller;
		
	return getDivContainer(caller.parentNode);
}

function getDivChild(caller)
{
	var currentDiv = getDivContainer(caller);
	
	if (currentDiv.getElementsByTagName('div').length != 0)
		return currentDiv.getElementsByTagName('div')[0];
		
	if (currentDiv.getElementsByTagName('ul').length != 0)
		return currentDiv.getElementsByTagName('ul')[0];
		
	return null;
}

function showChildDivs(node)
{
	if (node.className != "menuElem3visible")
	{
		node.className = "menuElem3visible";
		expandDiv(node);
	}
}

function page1()
{
	return changePage("page 1", "page1.html", "<em>It works !</em>");
}
function page(no, caller)
{
	return changePage("page " + no, "page" + no + ".html", "<h1>result : </h1><em>It works " + no + " !</em>", caller);
}
function expandDiv(divNode)
{
	var maxX = divNode.offsetWidth;
	var maxY = divNode.offsetHeight;
	expandDiv2(divNode, 10, maxX, 10, maxY);
}
function expandDiv2(divNode, sizeX, maxX, sizeY, maxY)
{
	divNode.style.width = maxX / 100.0 * sizeX + "px";
	divNode.style.height = maxY / 100.0 * sizeY + "px";
	
	if (sizeX < 95)
	{
		sizeX += 5;
		sizeY += 5;
		
		setTimeout(function() { expandDiv2(divNode, sizeX, maxX, sizeY, maxY); }, 50);		
	}
	else
	{
		divNode.style.width = "";
		divNode.style.height = "";
	}
}
function ajax_call(caller)
{
	if (caller.tagName == "A")
	{
		// code ajax à la place de cela...
		//callerObj.textContent = "Chargement de " + callerObj.href + "?ajax=true en cours...";
		Ajax_GET(caller, caller);
		
		return false;
	}
}
