YAHOO.namespace("Youniverse");

YAHOO.Youniverse.group_management = function ()
{
	var groupUpdateListeners = [];
	var faces = [];

    this.joinGroup = function (groupId,obj)
    {
        if (confirm('Are you sure you wish to join this group?'))
		{
			postData = '&data[Group][groupId]=' + groupId;
			dataFlag = true;
			
			var callback =
			{
				success: this.handleJoinSuccess(obj),
				failure: this.handleFailure,
				cache: false
			};
			
			var sUrl     = '/groups/assign_user_to_group/';
			var request  = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
		}
    };
    
    this.handleJoinSuccess = function (obj)
    {
		this.displayMessage('<span style="color: #fff">Congratulations, you have successfully joined this group.</span>',obj);
    };
	
	this.displayMessage = function (text,obj)
	{
		if (!document.getElementById(obj))
		{
			return;
		}
		
		var pageDialog = document.getElementById(obj);
		
		var dialogError = document.createElement('div');
		dialogError.setAttribute('id', 'dialogError');
		dialogError.style.left = '-60px';
		dialogError.style.top = '-30px';
		dialogError.innerHTML = text;
		
		pageDialog.appendChild(dialogError);		
		
		eff = new YAHOO.widget.Effects.Appear(dialogError);

		// notify listeners of change
		var self = this;
		setTimeout(function() { self.notifyGroupUpdateListeners(); }, 2500);
	};
	
	this.leaveGroup = function (groupId,obj)
    {
	   if (confirm('Are you sure you wish to leave this group?'))
		{
			postData = '&data[Group][groupId]=' + groupId;
			dataFlag = true;
			
			var callback =
			{
				success: this.handleLeaveSuccess(obj),
				failure: this.handleFailure,
				cache: false
			};
			
			var sUrl     = '/groups/remove_user_from_group/';
			var request  = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
		}
    };
	
	this.handleLeaveSuccess = function (obj)
    {
		this.displayMessage('<span style="color: #fff">You have successfully left this group. You can join again at any time.</span>',obj);
    };
    
    this.handleFailure = function (obj)
    {
    	this.displayMessage('<span style="color: #fff">Update failed.</span>',obj);
    };
    
    this.addGroupUpdateListener = function (obj)
    {
    	groupUpdateListeners.push(obj);
    };
    
    this.notifyGroupUpdateListeners = function ()
    {
    	for (var i = 0; i < groupUpdateListeners.length; i++)
    	{
    		groupUpdateListeners[i].notifyGroupUpdate();
    	}
    };
    
    // copied from elements/rgtCol/createGroup.ctp
    this.createGroup = function ()
    {
        var callback =
        {
            success: this.completeCreateGroup,
            upload: this.completeCreateGroup,
            failure: this.ajaxFailure,
            argument:
            {
                self: this
            },
            cache: false
        };
        
        var groupCreateForm = YAHOO.util.Dom.get('groupCreateForm');
        YAHOO.util.Connect.setForm(groupCreateForm, true);
        YAHOO.util.Connect.asyncRequest('POST', '/groups/create_group/', callback);
    }
        
    this.completeCreateGroup = function (o)
    {
        eval(o.responseText);
            
        if (groupSuccess == 1)
        {
            var displayMessage = successMessage;
            
            // there may be a photo error message, even if the group was created successfully
            if (errorMessage)
            {
                displayMessage += '<br/><br/><span style="color:#fff;">' + errorMessage + '</span>';
            }
            
            // show success message
            dialogBox.displayError('<span style="color:#fff;">' + displayMessage + '</span>', 400, 100, 'groupCreateForm');
                
            // redirect to the group profile page
            setTimeout(function() { window.location = redirectUrl; }, 3000);
        }
        else
        {
            // show error message
            dialogBox.displayError('<span style="color:#fff;">' + errorMessage + '</span>', 400, 100, 'groupCreateForm');
        }
    }
        
    /**
     * Ajax Failure - usually happens when the error occurs server side and a 500 response is returned.
     * 
     */
    this.ajaxFailure = function (o)
    {
        if (o.status > -1) // if not user abort
        {
            alert(msg.translate('err02'));
        }
    }
        
    // fetches the show invite HTML for a specific group
    this.showInvite = function (groupId)
    {
        // client-side validation check of group name and friendly URL
            
        var callback =
        {
            success: this.completeShowInvite,
            failure: this.ajaxFailure,
            cache: false
        };
            
        YAHOO.util.Connect.asyncRequest('GET', '/groups/show_group_invite/' + groupId, callback);
            
        return true;
    }
        
    this.completeShowInvite = function (o)
    {
        YAHOO.util.Dom.get('groupContent').innerHTML = o.responseText;
        YAHOO.util.Dom.get('groupContent').style.display = 'block';
    }
    
    this.fetchProfileHistogram = function (groudId, MSSuid)
    {
        var callback =
        {
            success: this.drawProfileHistogram,
            failure: this.handleHistogramFailure,
            cache: false
         };
         
         YAHOO.util.Connect.asyncRequest('GET', '/groups/segment_histogram.json?groupId=' + groupId + '&MSSuid=' + MSSuid, callback);
    }
    
    this.drawProfileHistogram = function (o)
    {
        var segmentArray = eval(o.responseText);
    
        var profileso = new SWFObject("/swf/piechart_500w_240h_01d.swf", "GroupProfile", "413", "184", "8", "#ffffff");
        
        var maxSegmentPc = 0;
        for (var segmentCount = 1; segmentCount <= segmentArray.length; segmentCount++)
        {
            var segmentPc = segmentArray[segmentCount-1]["percentage"];
            profileso.addVariable("pie" + segmentCount + "pc", segmentPc);
            if (segmentPc > maxSegmentPc)
            {
                maxSegmentPc = segmentPc;
            }
        }
        profileso.addVariable("maxpc", maxSegmentPc);
        
        
        profileso.addParam("quality", "best");
        profileso.addParam("wmode", "transparent");
        profileso.write("groups-graph");
    };
    
    this.handleHistogramFailure = function (o)
    {
    
    };

    this.fetchFaceWall = function (groudId, wallOffSet)
    {
        var callback =
        {
            success: this.drawFaceWall,
            failure: this.faceWallFailure,
            cache: false
         };
         
         YAHOO.util.Connect.asyncRequest('GET', '/groups/facewall/' + groupId + '/' + wallOffSet + '/', callback);
    }
    
    this.drawFaceWall = function (o)
    {
      faces = eval(o.responseText);
      
      var facewallDiv = document.getElementById('facewall');
      var faceDetailDivs = [];
      var i = 0;
      for (i = 0; i < faces.length; i++) {
        var faceContainer = document.createElement('div');
        faceContainer.className = 'faceContainer';
        faceContainer.id = 'faceContainer-' + i;
        faceContainer.i = i;
        faceContainer.userUrl = faces[i].userUrl;

        var faceImage = document.createElement('img');
        faceImage.src = "http://media-ak.youniverse.com/" + faces[i].photoGuid + "-100x100.jpg";
        faceImage.className = 'facewallImage';

        faceContainer.appendChild(faceImage);

        faceDetailDivs[i] = document.createElement('div');
        faceDetailDivs[i].className = "faceDetail";
        faceDetailDivs[i].id = "faceDetail-" + i;
        faceDetailDivs[i].innerHTML = faces[i].username + "<br />";
        faceDetailDivs[i].innerHTML += "<span class='faceCountry'>" + faces[i].country + "</span>";
       
        faceContainer.appendChild(faceDetailDivs[i]);
        facewallDiv.appendChild(faceContainer);
        
        YAHOO.util.Event.addListener(faceContainer, "mouseover", function() {
          document.getElementById("faceDetail-" + this.i).style.visibility = "visible";
        });
        
        YAHOO.util.Event.addListener(faceContainer, "mouseout", function() {
          document.getElementById("faceDetail-" + this.i).style.visibility = "hidden";
        });
        
        YAHOO.util.Event.addListener(faceContainer, "click", function() {
          window.location = "/me/" + this.userUrl;
        });
        
      }
        
  		var clearDiv = document.createElement('div');
  		clearDiv.className = 'cleardiv';
  		facewallDiv.appendChild(clearDiv);
			
    };
    
    this.faceWallFailure = function (o)
    {
    
    };


};