/*
* @Version				1.0.0
* @Package				AnsJsUtilities
* @Author				Sergio Magnani	
* @Creation Date		2008-09-11
* @Last Mod Date		2008-10-05
* @Last Mod Author		Giuliano Losi
*
*	<b>ChangeLog (Versione - DataRilascio)</b>
*
*	1.0.0 - 05/10/2008 - Giuliano Losi
*		• Traduzione in plug-in
*
*	0.8.0 - 11/09/2008 - Sergio Magnani
*		• Implementazione metodi generali per la comunicazione ajax
*		• Implementazione basilare degli observer
*
*	<h1>Plugin per la comunicazione Ajax</h1>
*	Plugin per la definizione del sistema di comunicazione ajax.
*	Il plugin è in grado di comprendere la risposta xml e prendere i provvedimenti adeguati.
*/
 
/* Definizione del plugin secondo standard */
(function($) {	//Definizione dell'alias $

	/* Funzione che analizza il documento XML e definisce il tipo di risposta  */
	jQuery.getResponseType 	= function(data){
						  
		/*Verifico il tipo di pagina*/
		var type = $(data).find('document').find('header').find('type').text();
		
		switch(type) {
			
			case 'pageok':
			case 'pageko':
			case 'interfaceok':
			case 'interfaceko':
			case 'crash':
				return type;
			break;
		}
		return false;
	}
	
	
	/* Funzione che analizza il documento XML e recupera il nuovo titolo della pagina  */
	jQuery.getResponseTitle 	= function(data){
						  
		return type = $(data).find('document').find('payload').find('title').text();
	}
	
	
	/* Funzione che analizza il documento XML e recupera le descrizioni dei metatag  */
	jQuery.getResponseMetas 	= function(data){
						  
		var metas			= new Array();
		var descriptions 	= $(data).find('document').find('payload').find('metas');
		
		/* Per ogni descrittore che mi è stato mandato aggiungo un tag meta all'head */
		descriptions.each(function() {
			
			var description 	= $(this);
			var meta 			= new ElementDescription();
			meta.name 			= description.attr("name");
			meta.content		= description.attr("content");	//TODO: cambiare a favore del contenuto come testo e non come attributo
			metas[meta.name]	= meta;
		});
		
		return metas;
	}
	
	
	
	/* Funzione che analizza il documento XML e recupera i nuovi stili del documento  */
	jQuery.getResponseStyles 	= function(data){
						  
		var styles			= new Array();
		var descriptions 	= $(data).find('document').find('payload').find('styles').find('style');
		
		/* Per ogni descrittore che mi è stato mandato aggiungo un tag meta all'head */
		descriptions.each(function() {
			
			var description 	= $(this);
			var style 			= new ElementDescription();
			style.name 			= "";
			style.type 			= description.attr("type");
			style.content		= description.find('content').text();
			if(style.content != null && style.content != '') {
				
				styles.push(style);
			}
			//TODO: lanciare errore?
		});
		
		return styles;
	}
	
	
	
	/* Funzione che analizza il documento XML e recupera i nuovi stili del documento  */
	jQuery.getResponseScripts 	= function(data){
						  
		var scripts			= new Array();
		var descriptions 	= $(data).find('document').find('payload').find('javascripts').find('javascript');
		
		/* Per ogni descrittore che mi è stato mandato aggiungo un tag meta all'head */
		descriptions.each(function() {
			
			var description 	= $(this);
			var script 			= new ElementDescription();
			script.name 		= "";
			script.type 		= description.attr("type");
			script.content		= description.find('content').text();
			if(script.content != null && script.content != '') {
				
				scripts.push(script);
			}
			//TODO: lanciare errore?
		});
		
		return scripts;
	}
	
	
	/* Funzione che analizza il documento XML e recupera i nuovi stili del documento  */
	jQuery.getResponseContents 	= function(data){
						  
		var contents		= new Array();
		var descriptions 	= $(data).find('document').find('payload').find('placeholders').find('placeholder');
		
		/* Per ogni descrittore che mi è stato mandato aggiungo un tag meta all'head */
		descriptions.each(function() {
			
			var description 	= $(this);
			var content			= new ElementDescription();
			content.name 		= description.attr("name");
			content.type 		= "";
			content.content		= description.find('content').text();
			if(content.content != null && content.content != '') {
				
				contents.push(content);
			}
			//TODO: lanciare errore?
		});
		
		return contents;
	}
	
	
	/* Oggetto che descrive un generico elemento del DOM */
	function ElementDescription() {
		
		this.name		= "";
		this.type		= "";
		this.content	= "";
	}
	
})(jQuery);
