var eZExtComments = function() {
    var ret = {};
    
    // Private
    
    var yCallback = function(Y, result) {
        
        //Shared variables
        var sessionID = Y.Cookie.get(ret.cfg.sessionprefix);
        var encodedUserData = Y.Cookie.get('eZCommentsUserData');
        
        var userDataCallback = function(id, o) {
        	
            if (o.responseJSON !== undefined) {
                var response = o.responseJSON;
                var userDataObject = response.content;
                if(userDataObject!=''){
                    updateInputFields(userDataObject);
                }
            }
        }

        
        var addCallback = function(id, o) {
        	
            if (o.responseJSON !== undefined) {
            	
              var response = o.responseJSON;
              var data = response.content;
              Y.get('#AddCommentResult').setStyle('display','block');
              Y.get('#AddCommentResult').set('innerHTML',data.content);
              if (data.result) {
            	var field = Y.get(ret.cfg.fields.title);
                if (field!=null) field.set('value', '');
            	field = Y.get(ret.cfg.fields.content);
                if (field!=null) field.set('value', '');
                
              }
                
            }
            else
              alert("Error");
            Y.get('#securimage').set('src','/public/securimage/' + Math.random());
        }

       
        var makePostParams = function() {
        	  var parameters = "";
        	  var elements = document.forms['CommentAdd'].elements;
        	  for(i=0; i < elements.length; i++) {
        	    if (elements[i].type == 'submit') {
        	      if (elements[i].clicked) {
        	        parameters = parameters + "&"+elements[i].name+"="+encodeURI(elements[i].value);
        	        elements[i].clicked=false;
        	      }
        	    }
        	    else if (elements[i].type == 'checkbox') {
        	      if (elements[i].checked)    
        	        parameters = parameters + "&"+elements[i].name+"="+encodeURI(elements[i].value);
        	    }
        	    else {
        	      parameters = parameters + "&"+elements[i].name+"="+encodeURI(elements[i].value);
        	    }
        	  }	
        	  return parameters;
        } 
        
        var updateInputFields = function(userDataObject) {
            if (Y.Object.hasKey(userDataObject, sessionID)) {
                var userData = Y.Object.getValue(userDataObject, sessionID);
                var fieldName = Y.get(ret.cfg.fields.name);
                if (fieldName!=null) fieldName.set('value', userData.name);
                var fieldEmail = Y.get(ret.cfg.fields.email);
                if (fieldEmail!=null) fieldEmail.set('value', userData.email);
                /*var fieldWebsite = Y.get(ret.cfg.fields.website);
                if (fieldWebsite!=null) fieldWebsite.set('value', userData.url);*/

            } else {
                return false;
            }
            
            return true;
        }
        

        var fetchUserData = false;

        if (encodedUserData) {
            var decodedUserData = Y.Base64.decode(encodedUserData);
            var userDataObject = Y.JSON.parse(decodedUserData);
            
            if (updateInputFields(userDataObject) == false) {
                fetchUserData = true;
            }
        } else {
            fetchUserData = true;
        }
        
        
        
        Y.get(ret.cfg.postbutton).on( 'click', _add );
        
        if ( fetchUserData ) {
            Y.io.ez('ezcom::userdata', { on: { success: userDataCallback } });
        }
        

        
        function _add( e ) {
            e.preventDefault();
            var data = makePostParams();
            Y.io.ez( 'ezextcom::add::', { on : { success: addCallback  } , method: 'POST', data: data});
        }

    }
    
    

    // Public
    
    ret.cfg = {};
    
    ret.init = function() {
        YUI3_config.modules = {
                'gallery-base64': {
                    fullpath: 'http://yui.yahooapis.com/gallery-2009.12.08-22/build/gallery-base64/gallery-base64-min.js'
                }
        }
        var ins = YUI(YUI3_config).use('node','event','cookie','json-parse','io-form','io-ez','gallery-base64',yCallback);
        

        
    }
    
    return ret;
}();

