if (typeof(Sky) == 'undefined') {  Sky = {};  }
if (typeof(Sky.ShareServices) == 'undefined') {  Sky.ShareServices = {}; }
if (typeof(Sky.EventHandlers) == 'undefined') {  Sky.EventHandlers = {}; }
if (typeof(Sky.Utils) == 'undefined') {  Sky.Utils = {}; }

Sky.EventHandlers = {
	loadComments: function(evt) {
		var node = document.getElementById('contentId');
		var contentId = MochiKit.DOM.scrapeText(node);
		var nodeSez = document.getElementById('sezId');
		if (MochiKit.Base.isUndefinedOrNull(nodeSez)) {
			Sky.ShareServices.loadComments(contentId, 1);
		} else {
			var sezId = MochiKit.DOM.scrapeText(nodeSez);
			Sky.ShareServices.loadComments(contentId, 1, sezId);
		}
	},
	
	
	loadResource: function(actionUrl,insertId) {
		var PORTLET_DIV = insertId;
		var node = document.getElementById(actionUrl);
		var resourceId = MochiKit.DOM.scrapeText(node);		
		Sky.ShareServices.loadResource(resourceId,PORTLET_DIV);
	}
	
};

var COMMENT_LOAD_MESSAGE_DIV = "loadMessageComments";
var COMMENT_PORTLET_DIV = "portletComments";
var COMMENT_FEEDBACK_DIV = "feedbackComments";
var TABELLA_COMMENTI_DIV = "Commenti"; 
var ARTICOLO_CMS_SPAN = "_testoArticolo";
var TESTO_CMS_SPAN = "_mostraArticolo";
var COMMENT_NUMBER = "numeroCommenti_";


Sky.ShareServices = {
	
    /**
     * Lista padri dato l'id contenuto
     * 
     * @contentId   the id of the content (the pointer to the effective id)
     * @page        the current page (for pagination)
     */
    loadComments: function (contentId, pagina, sez) {
    	if (MochiKit.Base.isUndefinedOrNull(pagina)) {
    		pagina = 1;
    	} else {
    		this.hidePortlet();
		}
		var uri='';
		if (MochiKit.Base.isUndefinedOrNull(sez)) {
			uri = '/showComments.do?contentId=' + contentId + '&pagina=' + pagina;
        }else{
	        uri = '/showComments.do?contentId=' + contentId + '&pagina=' + pagina + '&sez=' +sez;
	    }
        
        var deferred = this._doGet(uri);
        deferred.addBoth(this.onShowCommentsResult);
    },

    /**
     * Form di inserimento nuovo commento di I livello
     * Bisogna ricordarsi in che pagina si era.
     * Se page = 1: si tratta dell'inserimento di un commento; se page = 2, si tratta dell'inserimento di una risposta ad un commento
     */
    addComment: function(formId, page) {
    	
		var title = document.getElementById(formId).commentTitle.value; 
		document.getElementById(formId).commentTitle.value = spezzaTesto(title,50);
    	//var body = document.formAddComment.commentBody.value;
		var body = document.getElementById(formId).commentBody.value; 
		document.getElementById(formId).commentBody.value = spezzaTesto(body,50);
    	
    	if(body != undefined && body != ''){
	    	var deferred = this._doPost('/insertSkyContentComment.do', formId);
    	    if(page==1)
        		deferred.addBoth(this.onAddCommentSuccess);
        	else if(page==2)	
	        	deferred.addBoth(this.onAddCommentResponseSuccess);
        	this.hidePortlet();
        }
    },

    /**
     *  Attivato dal link "(...)" nel testo di un commento oppure
     *  dal link "Risposte" relativo a un commento di I livello.
     *  Porta a una pagina con il dettaglio del commento di I livello
     *  e con tutte le risposte (paginate)
     */
    showCommentAnswers: function(commentId, contentId, pagina) {
    	if (MochiKit.Base.isUndefinedOrNull(pagina)) {
    		pagina = 1;
    	}
    	var deferred = this._doGet('/showCommentAnswers.do?commentId=' + commentId + '&contentId=' 
    								+ contentId + '&pagina=' + pagina);
        deferred.addBoth(this.onShowCommentsResult);
		this.hidePortlet();
		
		if (!MochiKit.Base.isUndefinedOrNull(ARTICOLO_CMS_SPAN)) {
			Sky.Utils.hide(ARTICOLO_CMS_SPAN);
		}
		if (!MochiKit.Base.isUndefinedOrNull(TESTO_CMS_SPAN)) {
			Sky.Utils.show(TESTO_CMS_SPAN);
		}
    },
    
    /**
     *  dato l'id chiama la servlet abuse senza fare refresh della pagina
     *  e senza alcun tipo di feedback
     */
    segnalaAbuso: function(commentId) {
    	//var deferred = this._doGet('/segnalaAbuso.do?commentId=' + commentId);
    	var deferred = this._doGet('/segnalaAbusoShare.do?commentId=' + commentId);
    	this.hidePortlet();
    	deferred.addBoth(this.onAbuseResult);
    },

	/**
     * chiama la servlet per estrarre il numero di commenti dato un contentId
     * @param id id del commento 
     */
    getNumberComments: function(contentId) {
   		
		//TEMP
   		//var deferred = this._doGet('/showCommentsNumber.do?contentId=' + contentId);
		var deferred = this._doGet('/html/skylife/meteo/commenti.html');
		//deferred.addBoth(this.onGetNumberComment);
		deferred.addCallback(this.onGetNumberComment, contentId);
		
	},
	
	/**
     * chiama la servlet per estrarre il numero di commenti dato solo l'Id
     * @param Id :id del film
     */
    getNumberCommentsByIdFilm: function(contentId) {
   		
		//TEMP
   		//var deferred = this._doGet('/showCommentsNumber.do?IdFilm=' + contentId );
		var deferred = this._doGet('/html/skylife/meteo/commenti.html');
		//deferred.addBoth(this.onGetNumberComment);
		deferred.addCallback(this.onGetNumberComment, contentId);
		
	},

    /**
     * chiama la servlet di approvazione
     * @param id id del commento 
     */
    approva: function(commentId) {
		var deferred = this._doGet('/approvaCommento.do?id=' + commentId);
		deferred.addBoth(this.onVoteResult);
		this.hidePortlet();
    },

    /**
     * chiama la servlet di disapprovazione
     * @param id id del commento 
     */
    disapprova: function(commentId) {
		var deferred = this._doGet('/disapprovaCommento.do?id=' + commentId);
		deferred.addBoth(this.onVoteResult);
		this.hidePortlet();
    },
    
    doLogin: function(root) {
		document.location.href = root + '/loginProxy.do?urlRedirect=' + encodeURIComponent(window.location.href);
    },
    
    /** callback per le funzioni di voting */
	onVoteResult: function(req) {
		Sky.Utils.show(COMMENT_PORTLET_DIV);
        Sky.Utils.feedback(COMMENT_FEEDBACK_DIV, req.responseText);
	},
	
	onAbuseResult: function(req) {
		Sky.Utils.show(COMMENT_PORTLET_DIV);
		if (req.responseText == '') {
			Sky.Utils.show(TABELLA_COMMENTI_DIV);
		} else {
			Sky.Utils.feedback(COMMENT_FEEDBACK_DIV, req.responseText);
		}
	},

	/** callback per commenti e commenti figli */
    onShowCommentsResult: function(req) {
        Sky.Utils.show(COMMENT_PORTLET_DIV);
    	document.getElementById(COMMENT_PORTLET_DIV).innerHTML = req.responseText;
    },
    
    /** callback per inserimento commenti */
    onAddCommentSuccess: function(req) {
        Sky.Utils.show(COMMENT_PORTLET_DIV);
    	document.getElementById(COMMENT_PORTLET_DIV).innerHTML = req.responseText;
        Sky.Utils.feedback(COMMENT_FEEDBACK_DIV, 'Grazie per avere dato il tuo contributo a questa discussione. Tra breve il tuo commento verr&agrave; pubblicato e potr&agrave; quindi essere letto e commentato da tutti gli utenti di SKY Life.');
    },
    
    /** callback per inserimento risposta commenti */
    onAddCommentResponseSuccess: function(req) {
        Sky.Utils.show(COMMENT_PORTLET_DIV);
    	document.getElementById(COMMENT_PORTLET_DIV).innerHTML = req.responseText;
        //Sky.Utils.feedback(COMMENT_FEEDBACK_DIV, 'Il commento &egrave; stato inserito.');
    },
    
    
    
     /** callback per numero commenti inseriti */
    onGetNumberComment: function(contentId, req) {
    
		if(req.responseText.charAt(req.responseText.indexOf('[')+1)!=0){
		   Sky.Utils.feedback( COMMENT_NUMBER+contentId , req.responseText);
		}
    },
   
	hidePortlet: function() {
		Sky.Utils.hide(COMMENT_PORTLET_DIV);
	},
	
    onError: function(err) {
        Sky.Utils.feedback(COMMENT_FEEDBACK_DIV, 'Errore ' + err.req.status);
    },
     
    _doPost: function(uri, formId) {
    	var formData = this._getFormData(formId);
	   	var xhr = MochiKit.Async.getXMLHttpRequest();
	    xhr.open("POST", uri, true);
	    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=utf-8');
	    return MochiKit.Async.sendXMLHttpRequest(xhr, formData);
    },

    _doGet: function(uri) {
	    var xhr = MochiKit.Async.getXMLHttpRequest();
	    xhr.open("GET", uri, true);
	    xhr.setRequestHeader('Content-Type','text/html; charset=utf-8');
	    return MochiKit.Async.sendXMLHttpRequest(xhr);
    },
    
   /**
    * Adapted from Yahoo! UI Library, copyright Yahoo! Inc.
    * Assembles the form label and value pairs and constructs an encoded string.
    */
	_getFormData: function(formId) {
	
		var formData = '';
		
		if (typeof formId == 'string') {
			var oForm = document.getElementById(formId);
		} else if (typeof formId == 'object') {
			var oForm = formId;
		} else {
			return;
		}
		var oElement, oName, oValue, oDisabled;
		var hasSubmit = false;

		for (var i=0; i<oForm.elements.length; i++){
			oDisabled = oForm.elements[i].disabled;
			if(oForm.elements[i].name != ""){
				oElement = oForm.elements[i];
				oName = oForm.elements[i].name;
				oValue = oForm.elements[i].value;
			}

			if(!oDisabled) {
				switch (oElement.type) {
					case 'select-one': case 'select-multiple':
						for (var j=0; j<oElement.options.length; j++){
							if(oElement.options[j].selected){
								formData += encodeURIComponent(oName) + '=' + encodeURIComponent(oElement.options[j].value || oElement.options[j].text) + '&';
							}
						}
						break;
					case 'radio': case 'checkbox':
						if(oElement.checked){
							formData += encodeURIComponent(oName) + '=' + encodeURIComponent(oValue) + '&';
						}
						break;
					case 'file': case undefined: case 'reset': case 'button':
						break;
					case 'submit':
						if(hasSubmit == false){
							formData += encodeURIComponent(oName) + '=' + encodeURIComponent(oValue) + '&';
							hasSubmit = true;
						}
						break;
					default:
						formData += encodeURIComponent(oName) + '=' + encodeURIComponent(oValue) + '&';
						break;
				}
			}
		}
		return formData.substr(0, formData.length - 1);
	},
	
    
    /**
     * 
     * @resourceId   the id of the box (the pointer to the effective id)
     */
  loadResource: function (resourceId,responseId) {
  	var uri='';
  	var separator='?';
  	if (resourceId.indexOf('?') !=-1) separator = '&';
          uri = resourceId + separator + 'time=' + new Date().getMilliseconds();
          //alert(uri);
          var deferred = this._doGet(uri);
  	deferred.addBoth(this.onLoadResource,responseId);
    },
	

    	/** callback per form login */
	onLoadResource: function(responseId,req) {
		Sky.Utils.show(responseId);
		document.getElementById(responseId).innerHTML = req.responseText;
    }
};

Sky.Utils = {
	show : function(id) { document.getElementById(id).style.display = 'block'; 	   },
	hide : function(id) { document.getElementById(id).style.display = 'none';  },
	feedback : function(id, msg) { document.getElementById(id).innerHTML = msg; },
	
	tooltip : function(left, top) {
	    obj.style.border = "black 1px solid";
	    obj.style.left = left + 'px';
	    obj.style.top = top + 'px';
	    obj.style.display = 'block';
	    obj.style.opacity = '0.85';
	},
	
	/** Adapted from the script jscalc.js, found on http://www.themaninblue.com */
	fade : function(obj) {
	    var opacity = parseFloat(elt.style.opacity);

    	if (opacity < 0.08) {
        	elt.style.display = 'none'; //elt.parentNode.removeChild(elt);
	    } else {
    	    opacity -= 0.07;
        	elt.style.opacity = opacity;
        	setTimeout(function(){fade(elt);}, 50);
    	}
    	return true;
	}
};


function doPollSubmit(pollId) {
  for(var i=0;i<document.forms.length;i++)
  {
    if(document.forms[i].id=='pollsForm_'+pollId){
      document.forms[i].elements['idRisp'].value=document.getElementsByName('idRisp_'+pollId).item(0).value;
      document.forms[i].submit();
    }
  }
}
