/**
 * Bibliothéque Javascript de base
 *
 * @version (voir sicrij.Base.php)
 * @package sicrij
 * @access public
 * @author CRIJ Poitou-Charentes
 * @licence GNU Public Licence
 */

// Environnement ///////////////////////////////////////////////////////////////////////
function DetectBrowser()
{
   this.name=navigator.appName;	
   this.ver=navigator.appVersion.toLowerCase();
   this.agent=navigator.userAgent.toLowerCase();
   this.dom=document.getElementById?1:0;
   
   this.ie=(this.dom && this.ver.match(/msie (\d\.\d)/))?1:0;
   this.firefox=(this.dom && (this.agent.indexOf("firefox")!=-1 || this.agent.indexOf("iceweasel")!=-1)) ?1:0;
   this.opera=(this.dom && this.agent.indexOf("opera")!=-1)?1:0;
   this.safari=(this.dom && this.agent.indexOf("safari")>-1)?1:0;
   
   this.mac=(this.ver.indexOf("macintosh")!=-1);
   this.win=(this.ver.indexOf("windows")!=-1);
   this.linux=(this.ver.indexOf("linux")!=-1);
   
   var tbl=[];
   
   if(this.firefox)     { tbl=this.agent.split('/'); this.ver=parseFloat(tbl[tbl.length-1]); }
   else if(this.ie)     { tbl=this.agent.split(';'); tbl=tbl[1].split(' '); this.ver=parseFloat(tbl[tbl.length-1]); }
   else if(this.opera)  { this.ver=parseFloat(this.ver); }
   else if(this.safari) { tbl=this.agent.split('/'); this.ver=parseFloat(tbl[tbl.length-1]); }

   this.scrollTop=function(idf)  { idf=(idf)?frames[idf].document:document; return (idf.documentElement.scrollTop)?idf.documentElement.scrollTop:idf.body.scrollTop; }
   this.scrollLeft=function(idf) { idf=(idf)?frames[idf].document:document; return (idf.documentElement.scrollLeft)?idf.documentElement.scrollLeft:idf.body.scrollLeft; }

   return this;
}
var bw=new DetectBrowser();

// Requête Serveur /////////////////////////////////////////////////////////////////////
function RequeteServeur(href, param, fonctionRetour, method, asynchro)
{
   var xhr_object = null;  
   if(!method)  method="GET";
   if(!asynchro) synchro=true;
  
  
   // Firefox 
   if(window.XMLHttpRequest)     xhr_object = new XMLHttpRequest();  
   // Internet Explorer
   else if(window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");  
   // XMLHttpRequest non supporté par le navigateur  
   else { alert("E-Photo est incompatible avec votre navigateur !");  return; }   
   
   
   // Préparation de la requete
   if(method=="get") { href+="?"+param; param=null; }
   
   xhr_object.open(method, href, asynchro);
   if(method=="POST") xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");     
   
   
   // Method pour le futur résultat
   xhr_object.onreadystatechange = function()
   {   
      //  Requete accompli
      if(xhr_object.readyState==4 && fonctionRetour) fonctionRetour(xhr_object.responseText);
   }    


   // Envoie de la requete
   xhr_object.send(param);
}

// Gestion des cookies //////////////////////////////////////////////////////////////
function EcrireCookie(name, value, expires, path, domain, secure)
{
   var curCookie=name + "=" + escape(value) +
       ((expires) ? "; expires=" + expires.toGMTString() : "") +
	   ((path) ? "; path=" + path : "") +
	   ((domain) ? "; domain=" + domain : "") +
	   ((secure) ? "; secure" : "");
	  
   document.cookie= curCookie;	
}

function LireCookie(name)
{
   var dc=document.cookie;
   var prefix = name + "=";
   var begin=dc.indexOf("; "+ prefix);
   if(begin==-1)
   {
	  begin=dc.indexOf(prefix);   
	  if(begin!=0) return null;
   } else {
	  begin+=2;   
   }
   var end=document.cookie.indexOf(";", begin);
   if(end==-1) end=dc.length;
   return unescape(dc.substring(begin + prefix.length, end));
}

// Retourne un formulaire complet /////////////////////////////////////////////////////////
function getValueFromChk(obj)
{    
   return (obj.checked)?obj.value:''; 
}

function getSelectValue(select)
{     
   var value="";  
   
   for (var i=0; true; i++)
   {   
      if (select[i])
	  {
         if (select[i].selected) { value += select[i].value + ","; }
		   
      } else { return value.substr(0, value.length-1); }
   }    
   
   return false;
}

function getDataFromForm(Form)
{  
   Form=$(Form);
   var data=[]; 
   var key=0;
   var currentValue=null;
   
   for (key=0; key<Form.elements.length; key++)
   {   
       switch(Form.elements[key].type)
	   {   
           case 'checkbox':
		      currentValue = getValueFromChk(Form.elements[key]);   
              break;   
           case 'radio':
		      currentValue = getValueFromChk(Form.elements[key]);   
              break;   
           default:
		      currentValue = (Form.elements[key].tagName.toLowerCase()=="select")?getSelectValue(Form.elements[key]):Form.elements[key].value;   
              break;   
       }   
  
       if(currentValue!==undefined && currentValue!=='')
	   { data[key]=Form.elements[key].name+'='+encodeURIComponent(currentValue); } // Ajout du caractére "+" à la fonction escape : .replace(/\+/, "%u002b")
   }

   return data.join('&');
}

// Fonction de Binding //////////////////////////////////////////////////////////
Function.prototype.Bind= function() {
   var m = this; // sauve le context this
  
   // extrait le 1er argument et garde les autres pour propagation
   var instance = Array.prototype.shift.call(arguments)
  
   return function() {
     return m.apply(instance, arguments);
   }
}

// Selection des élements par ClassName //////////////////////////////////////////
function getElementsByClassName(oElm, strTagName, strClassName)
{
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/-/g, "\-");
	var oRegExp = new RegExp("(^|\s)" + strClassName + "(\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++)
	{
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)) { arrReturnElements.push(oElement); }
	}
	return (arrReturnElements)
}

// Tous les clics permettent d'effacer les calques "actifs" (Anciennement à Richtext)
// ///////////////////////////////////////////////////
var RichText_Object=new Array();

// Constructeur pour les objets de RichText_Object[]
function ConstructObject(obj)
{
   this.css=document.getElementById(obj).style;
   this.obj = obj + "Object";
   eval(this.obj + "=this");
   return this
}

// Efface les calques "actifs"
function OnDocumentClick(e)
{
   var e = e || event || this.parentWindow.event; 
   var oTarget = e.srcElement || e.target;

   for(idf in RichText_Object)
   {
	   idframes=frames[idf];

       // Vérifie les exceptions
	   if(oTarget.id=="RichText_CalqueFrmStyleSheet"+idf ||		  
		  oTarget.id=="RichText_select_style" ||
		  oTarget.id=="RichText_select_module" ||
		  oTarget.id=="RichText_select_carac" ||
		  oTarget.id=="RichText_select_menu" ||
		  
		  oTarget.id=="colorPicker_plug" ||		  
		  oTarget.id=="colorPicker_big_current_color_box" ||
		  oTarget.id=="colorPicker_sv_box" ||
		  oTarget.id=="colorPicker_selectionner" ||
		  oTarget.id=="colorPicker_hue_slider" ||
		  oTarget.id=="colorPicker_saturation_value_slider" ||		  
		  oTarget.id=="colorPicker_hue_coul" ||
		  
		  oTarget.className=="RichText_Contextuel") return(0);

	   for(var y=1; y<7; y++)
		  for(var x=1; x<7; x++)
			 if(oTarget.id=="RichText_select_table"+String(y)+String(x)+'_'+idf) return (0);
	
	   // On efface les calques "actifs"
	   for(elm in RichText_Object[idf].calque)
		  if(typeof(window[elm])=='object' && window[elm].css.visibility=='visible' && oTarget.id!=window[elm]) { window[elm].css.visibility='hidden'; window[elm].css.zIndex=-1 }
   }  
}

// Initialise la mise sous surveillance du document dans sa globalité (hors des richtext)
function InitSurveillanceGlobal()
{ 
  if(bw.ie) document.attachEvent('onmousedown', OnDocumentClick);
  else document.addEventListener('mousedown', OnDocumentClick, false);

  document.onmouseup=function() { if(typeof(RichText_ElmSelected)!='undefined') RichText_UnselectRichElement(); }
}
window.setTimeout("InitSurveillanceGlobal();", 0);


