/**Constantes*/
var COLLECTIVITE = 1; var PARTICULIER = 2; var OUI = 2; var NON = 1;

function ShowElement( element, visible )
{
	var el = $(element);
	if ( !el ) return; 
	if ( visible == null ) visible = true;
	Element[visible ? 'show': 'hide'](el);
}

function LoadWorkspace( page ) {	AjaxHelper.updater( page , 'workspace' ); }

function MakePagerLinks( parent, prefix, LoadPageMethod )
{
	Element.hide( prefix );
	var first 		= Builder.node("a",{ href: "#", id: prefix + ".link_first" }, 	["<<"] 	); // &lt;&lt;
	var previous	= Builder.node("a",{ href: "#", id: prefix + ".link_previous" },["<"] 	); // &lt;
	var next		= Builder.node("a",{ href: "#", id: prefix + ".link_next" }, 	[">"] 	); // &gt;
	var last		= Builder.node("a",{ href: "#", id: prefix + ".link_last" }, 	[">>"] 	); // &gt;&gt;
	var nb_result 	= Builder.node("span",{ id: prefix + ".nb_result" } 	); // &gt;&gt;
	var nb_page 	= Builder.node("span",{ id: prefix + ".nb_page" } 	); // &gt;&gt;
	var pager 		= Builder.node( "text", {}, [ "Nb de résultats:", nb_result, first , " ", previous, " ", nb_page, " ", next, " ", last ] ); 
	
	$(parent).appendChild ( pager );
	
	Event.observe( first,	 	'click', LoadPageMethod);
	Event.observe( previous, 	'click', LoadPageMethod);
	Event.observe( next, 		'click', LoadPageMethod);
	Event.observe( last, 		'click', LoadPageMethod);
}

function UpdatePager( prefix, pager )
{
	Element.show( prefix );
	ShowElement( prefix + '.link_first', 	pager.haveToPaginate );
	ShowElement( prefix + '.link_last', 	pager.haveToPaginate );
	ShowElement( prefix + '.link_previous', pager.haveToPaginate );
	ShowElement( prefix + '.link_next', 	pager.haveToPaginate );
	
	$( prefix + '.link_first').page 	= pager.getFirstPage;
	$( prefix + '.link_last').page 		= pager.getLastPage;
	$( prefix + '.link_previous').page 	= pager.getPreviousPage;
	$( prefix + '.link_next').page 		= pager.getNextPage;
	Element.update( prefix + '.nb_result', 	pager.total + '( ' + pager.getLastPage +' pages )'  );
	Element.update( prefix + '.nb_page', 	'Page ' + pager.page + ' / ' + pager.getLastPage);
}

function getPageWidth()
{
  var myWidth = 0;
  if( typeof( window.innerWidth ) == 'number' )
  {
    //Non-IE
    myWidth = window.innerWidth;
  }
  else if( document.documentElement && document.documentElement.clientWidth)
  {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
  }
  else if( document.body &&  document.body.clientWidth )
  {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
  }
 return myWidth ;
}

function getPageHeight()
{
  var myHeight = 0;
  if( typeof( window.innerHeight ) == 'number' )
  {
    //Non-IE
    myHeight = window.innerHeight;
  } else if( document.documentElement && document.documentElement.clientHeight )
  {
    //IE 6+ in 'standards compliant mode'
    myHeight = document.documentElement.clientHeight-15;
  }
  else if( document.body && document.body.clientHeight )
  {
    //IE 4 compatible
    myHeight = document.body.clientHeight-15;
  }
  return myHeight ;
}
/**
 * @author hti@sirtem.fr
 */

Ajax.Responders.register(
{
  onCreate: 	function() { Element.show('wait'); },
  onException: 	function( request, exception ) { alert('Ajax Exception:\n'+ exception.name +"\n"+ exception.message+ "\n" ); },
  onComplete: 	function(request, transport,json ) 
  	{ 
  		if ( Ajax.activeRequestCount == 0 ) Element.hide('wait'); 
  		var datas = null;
  		if (!json) 	{ datas = Try.these( function() { return eval('(' + transport.responseText + ')');	} ) }
		else		{ datas = Try.these( function() { return json; } ) }
  		
  		if ( ! ( datas instanceof Object ) )
  		{
  			//document.body.innerHTML = '1-Une erreur s\'est produite: <br>'+transport.responseText;
  		}
  		else 
  		{
  			if ( ! datas['OK'] )
  			{
	 			if( datas['ErrorMessage'] ) alert ( 'Une erreur s\'est produite: \n'+ datas['ErrorMessage'] );
	 			else document.body.innerHTML = '2-Une erreur s\'est produite: <br>'+transport.responseText;
  			}
  		}
 	}
});

function AjaxHelperFunc ()
{
	this.modeurl = '/';
	this.request  = function( url, method, params, async )
		{ 
			if ( !params ) params = {};
			if ( !async ) 	async = true; else async = false;
			new Ajax.Request( this.modeurl+url, { asynchronous: async, evalScripts:false, onComplete: method, parameters: params }); 
		};
	this.updater  = function( url, id, params  )   
	{ 
		if ( !params ) params = {};
		params.asynchronous = true;
		params.evalScripts 	= true;
		new Ajax.Updater( id, this.modeurl + url , params ); 
	};

	this.makeresponse = function ( request, json )
	{
		if (!json) 	{ return  eval('(' + request.responseText + ')').Datas;	}
		else		{ return json.Datas; }
		}
}

var AjaxHelper = new AjaxHelperFunc();

function LookupsFunc ()
{
	this.datas		= {};
	this.loaded_cb 	= null;
	this.loaded 	= false;
	
	this.load 		= function( loaded_cb )
	{
		if(!this.loaded)
		{
			this.loaded_cb = loaded_cb;
			AjaxHelper.request ( 'Tools/GetLookups', this.loadComplete.bind(this),null, true );
		}

	};
	this.loadComplete 	= function( request, json )
		{
			this.datas = AjaxHelper.makeresponse( request, json );
			this.datas.anneesnaissance = { 0: 'Non spécifiée'};
			for ( var i = 1900; i < 2000; i ++ )	this.datas.anneesnaissance[i] = i;
			this.loaded = true;
			if (this.loaded_cb )	this.loaded_cb();
		}
}

var lookups = new LookupsFunc();

function RemoveChilds( obj )
{
	if ( !obj.hasChildNodes() ) return;
	var obj_childNodes = Element.immediateDescendants(obj);
	for ( var i = obj_childNodes.length - 1; i >= 0 ; i-- )
		obj.removeChild( obj_childNodes[i] );
}

function RemoveRows( obj )
{
	if ( !obj.hasChildNodes() ) return;
	var obj_childNodes = Element.immediateDescendants(obj);
	for ( var i = obj_childNodes.length - 1; i >= 0 ; i-- )
		if (obj_childNodes[i].nodeName == 'TR' )	obj.removeChild( obj_childNodes[i] );

}

/** Ajouter un select , avec les options qui vont bien 
si parent = null retourne l'objet
*/
function MakeSelect( parent, select_name, options, default_value, default_position )
{
	var node = Builder.node('select', { id:select_name, name:select_name });
	FillSelect( node, options, default_value, default_position );
	if ( parent ) parent.appendChild( node );
	return node;
}

/** Vider puis remplir un select dejà existant, avec les options qui vont bien */
function FillSelect( select_id, options, default_value, default_position )
{
	// recupere l'object select
	var s= null;
	//if ( select_id instanceof HTMLSelectElement ) 	s = select_id;
	if ( select_id.nodeName == 'HTMLSelectElement' ) 	s = select_id;
	else												s = $(select_id);
	
	//vide l'object select
	RemoveChilds( s );
	
	// Rempli le select
	if ( options instanceof Array )
	{
	  	for ( var i = 0 ; i < options.length; i++  )
	  	{
			s.appendChild( Builder.node('option', { value: i }, [options[i]]) );
		}
	}
	else 
	{
	Try.these
	(	
		function() { options.each( function( item ) { s.appendChild( Builder.node('option', { value: item.key }, [item.value]) ); }); },
		function() 
		{
			if ( options instanceof Object )
			  	for ( var i in options )	s.appendChild( Builder.node('option', { value: i }, [options[i]]) );
			else alert ('FillSelect ne sait pas gerer ce type d\'objet:' + options );
		},
		function(){  alert ('FillSelect ne sait pas gerer ce type d\'objet BIS:' + options ); }
	); // fin try.these 
	}
  	s.style.width='auto';
	// valeur par defaut
	if ( default_value != null ) 	s.value = default_value;
	if ( default_position != null ) s.selectedIndex = default_position;
}

function Debug( str )
{
	var dd = $('debug');
	if ( !dd ) return;
	if ( str instanceof Array )
	{
		dd.innerHTML += "Dumping Array:"+ '<br />';
		for( var i = 0; i < str.length; i++ ) dd.innerHTML += i + '=>' + str[i] + '<br />';
	}
	else if ( str instanceof Object )
	{
		dd.innerHTML += "Dumping Object:"+ '<br />';
		for( var i in str ) dd.innerHTML += i + '=>' + str[i] + '<br />';
	}

	else dd.innerHTML += str + '<br />';
}

function AnneeScolaire( date )
{
	return date + '/' + ((date*1)+1); 
}
/** Retourne une date sous la forme jj/mm/aaaa depuis format ISO*/
function GetHumanDate( str, withtime )
{
	try{
		if (str.length == 0) return '';
		}
	catch ( e ) {  return '' ; }
	var res = str.substr(8,2)+'/'+str.substr(5,2)+'/'+str.substr(0,4);
	if ( withtime ) res += ' '+str.substr(11,8);
	return res;
}
