// Varie Classi Javascript per gestire il Framework
// Lorenzo Ricci
// lorenzo.ricci@email.it
//var ste;

var Projects = Class.create();

Projects.prototype = {

	initialize: function( ) { 
		this.url_main_position = location.pathname.lastIndexOf('/');
		this.url_main_address = location.pathname.substring(0,this.url_main_position);
		this.ajax_ws_url = location.protocol + '//' + location.host + this.url_main_address + '/services/ajax/server.php5' ;
	} ,

	GetSID: function() {
		return $('idSessione').innerHTML;
	},

	SelectItem: function ( id_object ) {
		var  qGetParams =	$H({
				action: 'AjaxObjects',
				request: 'SelectItem',
				container: 'main-content', 
				sid: this.GetSID(), 
				object_number: id_object 
				});

		new Ajax.Request(this.ajax_ws_url, 
			{ 
			method: 'get',
			onSuccess: function(transport) { oProjectsResponder.ajaxSelect(transport.responseXML); },
			parameters:	qGetParams.toQueryString()
			});

		$('main-content').addClassName('loading').update('Loading...');

		return true;
	}, 


	InsertItem: function ( ObjectId ) {
	
		var ItemName = escape( $('name').value );

		new Ajax.Request(this.ajax_ws_url, 
			{ 
			method: 'get',
			onSuccess: function(transport) {
				$('admin_content').removeClassName('loading');
				oProjectsResponder.ajaxSelect(transport.responseXML);
				},
			onLoading: function(){
				$('admin_content').addClassName('loading').update('Loading...');
				},
			parameters:	$H({
				action: 'AjaxObjects',
				request: 'InsertItem',
				container: 'main-content', 
				sid: this.GetSID(), 
				object_number: ObjectId,
				name: ItemName 
				}).toQueryString()
			});
		return true;
	},

	UpdateItem: function ( id_object ) {

		new Ajax.Request(this.ajax_ws_url, 
			{ 
			method: 'get',
			onSuccess: function(transport) {
				$('admin_content').removeClassName('loading');
				oProjectsResponder.ajaxSelect(transport.responseXML);
				},
			onLoading: function(){
				$('admin_content').addClassName('loading').update('Loading...');
				},
			parameters:	$H({
				action: 'AjaxObjects',
				request: 'UpdateItem',
				container: 'Projects', 
				sid: this.GetSID(), 
				object_number: id_object 
				}).toQueryString()
			});
		return true;
	},

	ItemUpdateData: function ( ObjectId ) {
	
		var ItemName = escape( $('name').value ) ;
		var ForSale = $('forsale').value ;
		var ItemDescription = escape( ste.getContent() );

		//	alert( name+' '+forsale+' '+description);
		var GetParams =	$H({
				action: 'AjaxObjects',
				request: 'ItemUpdateData',
				container: 'Projects', 
				sid: this.GetSID(), 
				object_number: ObjectId,
				name: ItemName,
				forsale: ForSale
				}).toQueryString();

		new Ajax.Request(this.ajax_ws_url+'?'+GetParams, 
			{ 
			method: 'post',
			onSuccess: function(transport) {
				$('admin_content').removeClassName('loading').update('Modifiche apportate con successo!');
				oProjectsResponder.ajaxSelect(transport.responseXML);
				},
			onFailure: function(){
				$('admin_content').removeClassName('loading').update('Impossibile contattare il server!');
				},
			onLoading: function(){
				$('admin_content').addClassName('loading').update('Loading...');
				},
			parameters: $H({description: ItemDescription }).toQueryString()
			});
		return true;
	},
	
	DeleteItem: function ( ObjectId) {

	if ( confirm('sei sicuro di voler procedere alla cancellazione?') == false )
		return true;

		new Ajax.Request(this.ajax_ws_url, 
			{ 
			method: 'get',
			onSuccess: function(transport) {
				oProjectsResponder.ajaxSelect(transport.responseXML);
				},
			parameters:	$H({
				action: 'AjaxObjects',
				request: 'DeleteItem',
				container: 'main-content', 
				sid: this.GetSID(), 
				object_number: ObjectId
				}).toQueryString()
			});
		return true;

	},

	Version: function() {
		alert('ok');
	}

}
var oProjects = new Projects();

var ProjectsResponder = Class.create();

ProjectsResponder.prototype = {

	initialize: function( ) {
		//alert('ProjectsResponder');
	},
/*
	_getXMLNode: function( ajaxResponse, nodeName ) {
		//alert(ajaxResponse.childNodes[0].nodeName);
		return Try.these(
		function() {
			for( var x=0; x< ajaxResponse.childNodes.length ; x++)
				{
				if ( ajaxResponse.childNodes[x].nodeName == nodeName )
					return ajaxResponse.childNodes[x].childNodes[0];
				}
			},
		function() {
			return ajaxResponse.childNodes[0].childNodes[0];
			}
		) || false;
	},

   _getXMLNodeAttr: function( DOMNode, s_key ) {
      return DOMNode.parentNode.attributes.getNamedItem( s_key ).value;
	},
*/
	ajaxSelect: function(ajaxResponse) {
		var response = ajaxResponse.getElementsByTagName("ajax-response");
		if (response == null || response.length != 1)
			return;
		var xmlResponseElements = response[0].childNodes ;
      for ( var i = 0 ; i < xmlResponseElements.length ; i++ ) {
         var responseElement = xmlResponseElements[i];

         // only process nodes of type element.....
         if ( responseElement.nodeType != 1 ) continue;

         var responseType = responseElement.getAttribute("type");
         var responseId   = responseElement.getAttribute("id");

         if ( responseType == "object" )
        		this.ajaxUpdate( responseElement );
       	else if ( responseType == "element" )
				alert(1); //this._processAjaxElementUpdate( this.ajaxElements[ responseId ], responseElement );
         else
            alert('Tipo risposta AJAX non riconosciuta : ' + responseType );
      }
	},

	ajaxUpdate: function(ajaxResponse) {
		var actionNode 	=  oXmlParseUtils.getXMLNode( ajaxResponse, 'action' );
		var SID 				=  oXmlParseUtils.getXMLNodeAttr( actionNode, 'sid' );

		switch(actionNode.nodeValue) 
			{
			case 'selectItem':
				var blockNode 	=  oXmlParseUtils.getXMLNode( ajaxResponse, 'html-block' );
				var htmlNode 	=  oXmlParseUtils.getXMLNode( ajaxResponse, 'html-fragment' );
				$( blockNode.nodeValue ).removeClassName('loading').update( htmlNode.nodeValue) ;
			break;
			case 'itemModified':
				var ADMINMENU 	=  oXmlParseUtils.getXMLNode( ajaxResponse, "admin-menu") ;
				$('admin_menu_choice').innerHTML = ADMINMENU.nodeValue;
			break;
			case 'deleteItem':
				var ADMINMENU 	=  oXmlParseUtils.getXMLNode( ajaxResponse, "admin-menu") ;
				$('admin_menu_choice').innerHTML = ADMINMENU.nodeValue;
				var ECONTAINER = $('admin_content');
				ECONTAINER.innerHTML = 'Oggetto cancellato con successo!';
			break;
			case 'insertItem':
				var ADMINMENU 	=  oXmlParseUtils.getXMLNode( ajaxResponse, "admin-menu") ;
				$('admin_menu_choice').innerHTML = ADMINMENU.nodeValue;
			case 'updateItem':
				var itemNode 	=  oXmlParseUtils.getXMLNode( ajaxResponse, 'item' );
				var NAME 		= unescape( itemNode.nodeValue );
				var ID 			= oXmlParseUtils.getXMLNodeAttr( itemNode, 'id' );
				var FORSALE 	= oXmlParseUtils.getXMLNodeAttr( itemNode, 'forsale' );
				var LAST 		= oXmlParseUtils.getXMLNodeAttr( itemNode, 'last' );
				var htmlNode 	= oXmlParseUtils.getXMLNode( ajaxResponse, 'html-fragment'); 

				if ( typeof(htmlNode.nodeValue) == 'undefined' ) 
					var DESCRIPTION = '';
				else
					var DESCRIPTION = htmlNode.nodeValue;

				var ECONTAINER = $('admin_content');
				ECONTAINER.innerHTML = '' ; 

				var DivName		= oHTML.createInputDiv('input','Nome','name',NAME);
				ECONTAINER.appendChild( DivName );

				var DivInfo		= oHTML.createInputDiv('select','Info?','forsale',FORSALE,'name:Si,value:1;name:No,value:0');
				ECONTAINER.appendChild( DivInfo );

				var textarea_id = "EDITABLE-CONTENT";
				if ( $(textarea_id) )
					{
					var domNodeId = textarea_id + '-ste';
					var STEparentNode = document.getElementById( domNodeId ).parentNode ;
					var domNode = document.getElementById(domNodeId );
						try { domNode.parentNode.removeChild(domNode); } 
							catch(e) { alert("SimpleTextEditor unable to close"); }
					}
				var TextArea = document.createElement("textarea");
				TextArea.id =  textarea_id;
				TextArea.setAttribute("name", textarea_id );
				TextArea.appendChild( document.createTextNode( DESCRIPTION ) );
				var TextDiv = document.createElement("div");
				TextDiv.className = 'formrow';
				TextDiv.appendChild( TextArea);
				ECONTAINER.appendChild( TextDiv );

				var DivHasChild= oHTML.createHrefDiv('Aggiungi sotto-elemento', function(){oHTML.createInsertMask(ID)} );
				var DivModify	= oHTML.createHrefDiv('Modifica', function(){oProjects.ItemUpdateData(ID)} );
				var DivDelete	= oHTML.createHrefDiv('Elimina', function(){oProjects.DeleteItem(ID)} );
				var DivPhoto	= oHTML.createHrefDiv('Foto', function(){oNavigation.ShowId('image_fr_box');}, 'image_fr_box' );
				var DivAttach	= oHTML.createHrefDiv('Allegati', function(){oNavigation.ShowId('attachment_fr_box');},'attachment_fr_box' );

				if ( LAST == 0 ) ECONTAINER.appendChild( DivHasChild );

				ECONTAINER.appendChild( DivModify );
				ECONTAINER.appendChild( DivDelete );
				ECONTAINER.appendChild( DivPhoto  );

				ECONTAINER.appendChild( oHTML.createIframe('image_fr','images/images_frame.php5?id='+ID+'&sid='+SID) );

				ECONTAINER.appendChild( DivAttach );

				var AttachmentsFrame	= oHTML.createIframe('attachment_fr', 
					'attachments/attachments_frame.php5?id='+ID+'&sid='+SID);
				ECONTAINER.appendChild( AttachmentsFrame );

				ste = new SimpleTextEditor( textarea_id, "ste");
				ste.init();	    	        	

			break;
			}

	},	

	Version: function() {
		alert('ok');
	}

} 

var oProjectsResponder = new ProjectsResponder();
