/*-----class PMWParam---------------------------------------------------------------------*/

// set if the program execute function of "run"
var bCanRun = true;

var PMWParam = Class.create();
PMWParam.prototype = {
  initialize: function() {
        this.nToolId 		= 0;	
        this.nMsgId	= 0;		
        this.nRow		= 0;		
        this.nCol		= 0;		
        this.nStatus		= 0;		
        this.sData		= '';
        this.callFunction='';
        this.callParam='';		
  }  
};


var PMBuddy = Class.create();
PMBuddy.prototype = {
  initialize: function() {
       	this.LEVEL_TOOL = 1;			//users in the same tool
	      this.LEVEL_PROJECT = 2;		//users in the same project but not in the same tool
	      this.LEVEL_GROUP = 3;		//users in the same group but not in the same project
	      this.LEVEL_ONLINE = 4;		//buddies online but not in the same group
	      this.LEVEL_OFFLINE = 5;		//offline buddies
	      this.sUserId='';
	      this.nLevel='';
			
  },
  	
	getUserId:function()
	{		
		return this.sUserId;
	},
	
	 getLevel:function()
	{
		return this.nLevel;
	},
	
   setLevel:function(vLevel)
	{
		this.nLevel = vLevel;
	}
	/*
	 greaterThan:function( nBuddy,vBuddy,vByLevel)
	{
		var bRetVal;
		
		if (vByLevel)
		{
			if (nBuddy.getLevel()> vBuddy.getLevel())
				bRetVal = true;
			else if (vBuddy.getLevel() == nBuddy.getLevel())
			{
				//if (vBuddy.getUserId().compareTo(sUserId) > 0)
				if(this.CompareTo(nBuddy.getUserId(),vBuddy.getUserId()))
					bRetVal = true;
				else
					bRetVal = false;
			}
			else
				bRetVal = false;
		}
		else
		{
			//if (sUserId.compareTo(vBuddy.getUserId()) > 0)
			if(this.CompareTo(nBuddy.getUserId(),vBuddy.getUserId()))
				bRetVal = true;
			else
				bRetVal = false;
		}
		
		return bRetVal;
	},
	
	
	CompareTo:function(str1,str2)
	{
		var len=(str1.length<str2.length?str1.length:str2.length);
		var i;
		for(i=0;i<len;i++)
		{
			str1.charAt(i)<str2.charAt(i)
			return false;
			}
		return true;
		}
*/
};


/*-----class PMWParam---------------------------------------------------------------------*/

/*-----class PMWParamParser functions---------------------------------------------------------------------*/
	
	function createParamessage(vUserId, vId, param)
	{
		var returnVal = "";
//alert(param.nMsgId);
		var nTempMsgId = param.nMsgId+"";
	//alert(sTemp);	
		//if(sTemp.indexOf("object") < 0)
		if(isValidNumber(nTempMsgId))
		{
			returnVal = "<~PMUserId>" + vUserId + "</~PMUserId>" +
					"<~PMUniqueId>" + vId + "</~PMUniqueId>" +
					"<~PMToolId>" + param.nToolId + "</~PMToolId>" +
					"<~PMMsgId>" + nTempMsgId + "</~PMMsgId>" +
					"<~PMRow>" + param.nRow + "</~PMRow>" +
					"<~PMCol>" + param.nCol + "</~PMCol>" +
					"<~PMData>" + param.sData + "</~PMData>" + 
					"<~PMStatus>" + param.nStatus + "</~PMStatus>" +
					"<~callFunction>" + param.callFunction + "</~callFunction>" + 
					"<~callParam>" + param.callParam + "</~callParam>" ;
		}
		return returnVal;
	}
  function GetParamValue(str,key)
  {
  	var returnVal;
  	var begKey="<"+key+">";
  	var endKey="</"+key+">";
  	var beg=str.indexOf(begKey);
  	if(beg<0) return "";
  	beg+=begKey.length;
  	var end=str.indexOf(endKey);
  	if(end<=beg) return "";
  	returnVal=str.substring(beg,end);
  	return returnVal;
  }
/*-----class PMWParamParser---------------------------------------------------------------------*/


/*-----class PMWObject---------------------------------------------------------------------*/
/* original class PMWApplet public functions  
void addSelectingOption(String vDesc, String vValue)
boolean connectToServer()
void deleteJSMessage(int vPos)
synchronized void destroy()
void disconnect()
void displaySelectionDialog()
void disposeInProgressDlg()
String getAllBuddies()
String getController()
PMWParam getParamObj(String strFormat)
String getGroupName()
boolean getHasControl()
String getHelpIndex()
PMWParam getJSMessage(int vPos)
int getJSMessageCount()
int getMeetingId()
String[] getOnlineBuddies(int vGroupId, int vProjectId)
PMWParam getParamObj(String strFormat)
int getProjectId()
String getProjectName()
boolean getSortBy()
int getToolId()
int getToolType()
int getUGId()
String getUserId()
boolean hasHelp()
int hasJSMessage(int vMsgId)
void init()  //initialize  MD
void initSelectionList()
boolean isConnected()
boolean isInitialized()
void playSound(String vFileName)
void privateMessage(String sReceiver)
void processEvent(AWTEvent e)
void run()
boolean send(PMWParam vParam)
void sendInvitingMessage(String vFrom, String vTo, String vMsg)
void sendPrivateMessage(String vFrom, String vTo, String vMsg)
void setCandidateId(int vCan)
void setCellValue(String vValue)
void setCol(int vCol)
void setController(String vController)
void setCriteriaId(int vCri)
void setHasControl(boolean vHasControl)
void setHeaderId(int vId)
void setHelpIndex (String sHelpIndex)
void setLevel(int vGroupId, int vProjectId, int vToolId)
void setMeetingId(int vValue)
void setRow(int vRow)
void setSelectResult(String vValue)
void setSortBy(boolean vSortByLevel)
void setToolId(int vToolId)
void setToolType(int vToolType)
void setUserId(String vValue)
void showInProgressDlg()
void showMessage(String vTitle, String vMsg)
void sleep(long vDelay)
synchronized void start()
boolean submit(int vCommand)
String submitWithResult(int vCommand)
*/
////////////////////////////////////////////////////////////////////////////

var functionUnimplemented="\nFunction UnImplemented!";
var functionWorking="\nFunction Working!";
var functionFinished="\nFunction Finished, Is it correct?";

var PMWObject = Class.create();
PMWObject.prototype = {
  initialize: function() {

        this.bConnected 		= false;	
        this.bInitialized	= false;		
        this.bHasControl		= false;		
				this.autoChecker=null;
				this.innerparam=new Array();
					this.hashparam=$H();
                this.sHost = "servlet/";
                this.sUserId			= "";
                this.sUserName		= "";
                this.sGroupName		= "";
                this.sProjectName	= "";
                this.nUGId			= 0;
                this.nProjectId		= 0;
                this.nToolId			= 0;
                this.nMeetingId		= 0;
                this.nToolType		= 0;
               // this.aAllBuddies=   "";//this parameter should be array
               this.aAllBuddies=new Array();
               this.aMyBuddies=new Array();
               
               this.aList=new Array();
               this.aValueList=new Array();
               this.moveBranchvalue="";
               //  this.aList=$H();
              // this.aValueList=$H();
                this.bSortByLevel = false;
                this.sOtherGroupBuddies ="";
                this.sOtherProjectBuddies ="";
                this.nCol=0;
                this.nRow=0;
                this.sController="";
                this.directResponse="";
                
                this.sHelpIndex="";
                this.sCellValue= "";
                this.sUniqueId = "0";
                this.SERVERLOCATION = "servlet/PMWServer";
                this.SOUNDLOCATION =  "sound/";
                
              //  this.hmSortIndex = new HashMap;
              //  this.hmSortType = new HashMap;
              
               this.sSortStr = "";
  },
  

getaList: function()
{

	return this.aList;
},

getaValueList:function()
{
	return this.aValueList;
	},
	
initSelectionList: function()
{
     //if(this.aList)
     this.aList=new Array();
     //if(this.aValueList)
     //aValueList=null;
     this.aValueList=new Array();
},
addSelectingOption: function(vDesc, vValue)
{
	 this.aList[0]=vDesc;
	 this.aValueList[0]=vDesc;
	var listlength=this.aList.length;
	
	 this.aList[listlength]=vDesc;
    this.aValueList[listlength]=vValue;
    ++listlength;
},

connectToServer: function()
{
//	alert("Calling PMWObject function: connectToServer"+functionFinished);
  this.sendNormalCommand(COMMAND_SETCURRENTUSERID,"connectToServer","",false);
	return this.bConnected;
},


deleteJSMessage: function(vPos)
{
	alert("Calling PMWObject function: deleteJSMessage"+functionUnimplemented);
},
destroy: function()
{
	alert("Calling PMWObject function: destroy"+functionUnimplemented);
},
disconnect: function()
{
//	alert("Calling PMWObject function: disconnect"+functionWorking);
	if(this.autoChecker!=null)
		this.autoChecker.stop();
  this.sendNormalCommand(COMMAND_HTTP_REMOVEUSER,"run","",false);
	this.bConnected     = false;
	this.setUserId("");
	this.setLevel(0,0,0);

},
displaySelectionDialog: function()
{
	   var subwindow;
	  	  // sub=window.open('selectdialog.jsp','newwindow','width=80,height=500,resizable=1,scrollbars=0,statusbar=0,menubar=0,left=150px,top=150px');      
        subwindow=window.open('selectdialog.jsp','MyWindow','width=600px,height=420px,resizable=1,scrollbars=1,left=150px,top=150px');
	
},
 doModalLocation:function(url,MyWindow,mwidth,mheight,mLeft,mTop)
{
	var newWindow;

	if (document.all&&window.print){ //if ie5
		newWindow = window.showModelessDialog(url,MyWindow,"help:0;resizable:1;dialogWidth:"+mwidth+"px;dialogHeight:"+mheight+"px;dialogLeft:"+mLeft+"px;dialogTop:"+mTop+"px;status:no;scroll:no");
	}
	else{
		newWindow = window.open(url,MyWindow,"width="+mwidth+"px,height="+mheight+"px,resizable=1,scrollbars=1,left="+mLeft+"px,top="+mTop+"px");
	}

	newWindow.name = "NewWindow";

	return newWindow;
},
disposeInProgressDlg: function()
{
	alert("Calling PMWObject function: disposeInProgressDlg"+functionUnimplemented);
},


getInnerparam:function(vCmdId)
{
	var tempparam=new PMWParam();
	
	//alert("aaa:"+this.hashparam.keys().length);
	//alert("vCmdId:"+vCmdId);
	//alert("bbb:"+this.hashparam.keys().indexOf(""+vCmdId));
	
	//this.hashparam.each(function(pair) {   alert(pair.key + ' = "' + pair.value + '"'); }); 
	
  if(this.hashparam.keys().indexOf(""+vCmdId)!=-1)

   {
    	tempparam=this.hashparam[""+vCmdId];
		  this.hashparam.remove(""+vCmdId);
   	}
  return tempparam;
},

getAllBuddies: function()
{
	
	
     var sRetVal ='';
     
   
                for (var i = 0; i < this.aAllBuddies.length; i++)
                {
                     sRetVal = sRetVal + "\n" + this.aAllBuddies[i].getUserId() + "\t" + this.aAllBuddies[i].getLevel();
               
                }

                  
                if (sRetVal.length >1)
                        sRetVal = sRetVal.substring(1);

                return sRetVal;
	
},
getController: function()
{
//	alert("Calling PMWObject function: getController");
	return this.sController;
},

getGroupName: function()
{
//	alert("Calling PMWObject function: getGroupName"+functionUnimplemented);
	return this.sGroupName;
},
getHasControl: function()
{
//	alert("Calling PMWObject function: getHasControl"+functionUnimplemented);
	return this.bHasControl;
},
getHelpIndex: function()
{
  return this.sHelpIndex;
},
getJSMessage: function(vPos)
{
//	alert("Calling PMWObject function: getJSMessage"+functionUnimplemented);
},
getJSMessageCount: function()
{
//	alert("Calling PMWObject function: getJSMessageCount"+functionUnimplemented);
// here run recycle.
},
getMeetingId: function()
{
//	alert("Calling PMWObject function: getMeetingId"+functionUnimplemented);
	return this.nMeetingId;
},

	 greaterThan:function( nBuddy,vBuddy,vByLevel)
	{
		var bRetVal;
		
		if (vByLevel)
		{
			if (nBuddy.getLevel()> vBuddy.getLevel())
				bRetVal = true;
			else if (vBuddy.getLevel() == nBuddy.getLevel())
			{
				if(this.CompareTo(nBuddy.getUserId(),vBuddy.getUserId()))
					bRetVal = true;
				else
					bRetVal = false;
			}
			else
				bRetVal = false;
		}
		else
		{
			if(this.CompareTo(nBuddy.getUserId(),vBuddy.getUserId()))
				bRetVal = true;
			else
				bRetVal = false;
		}
		
		return bRetVal;
	},
	
	
	CompareTo:function(str1,str2)
	{
		var len=(str1.length<str2.length?str1.length:str2.length);
		var i;
		for(i=0;i<len;i++)
		{
			str1.charAt(i)<str2.charAt(i)
			return false;
			}
		return true;
		},

getOnlineBuddies: function(vGroupId, vProjectId)
{
	
	
                 var temp=new Array();
                var tempBuddy=new PMBuddy();

                if (vProjectId != 0)
                {   
                	
                        if (vProjectId == this.nProjectId)
                        {
                                for (var i = 0; i < this.aAllBuddies.length; i++)
                                {
                                       // tempBuddy = (PMBuddy)(aAllBuddies[i]);
                                       tempBuddy = this.aAllBuddies[i];
                                        if (tempBuddy.getLevel() != 5 &&
                                                (tempBuddy.getLevel() <= 3|| this.aMyBuddies.indexOf(tempBuddy.getUserId()) != -1))
                                        {
                                                temp.push(tempBuddy.getUserId());
                                        }
                                }
                        }
                        else
                        {
                        	   
                             //   synchronized (this)
                              //  {
                                        this.sOtherProjectBuddies = null;

      var param1=new PMWParam();
	   param1.nMsgId=COMMAND_GETPROJECTBUDDYLIST;
	   param1.callFunction="send";
	   param1.sData=this.vProjectId;
	   param1.callParam="";
	  //  this.send(param);
	                       
  // this.send(param1);
                                      //  if (send(new PMWParam(PMConstant.COMMAND_GETPROJECTBUDDYLIST, vProjectId, 0, "")))
                                   this.send(param1);
                                      if (true) 
                                        {
                                        	
                        
                                            //    temp = utilLib.parseList(sOtherProjectBuddies, "|");

                                                for (var i = 0; i < this.aAllBuddies.length; i++)
                                                {
                                                       // tempBuddy = (PMBuddy)(aAllBuddies[i]);
                                                       tempBuddy = this.aAllBuddies[i];

                                                        if (tempBuddy.getLevel() != 5&&
                                                                temp.indexOf(tempBuddy.getUserId()) == -1 &&
                                                                this.aMyBuddies.indexOf(tempBuddy.getUserId()) != -1)
                                                        {
                                                                temp.push(tempBuddy.getUserId());
                                                        }
                                                }
                                        }
                                //}
                        }
                }
                //on group level
                else if (vGroupId != 0)
                {
                	   
                
                        if (vGroupId == this.nUGId)
                        {
                                for (var i = 0; i < this.aAllBuddies.length; i++)
                                {
                                	
                                        tempBuddy = this.aAllBuddies[i];
                                        if (tempBuddy.getLevel() != 5 &&
                                                (tempBuddy.getLevel() <=3|| this.aMyBuddies.indexOf(tempBuddy.getUserId()) != -1))
                                        {
                                        
                                                temp.push(tempBuddy.getUserId());
                                             
                                        }
                                }
                        }
                        else
                        {
                                
      this.sOtherGroupBuddies = null;
     var param2=new PMWParam();
	   param2.nMsgId=COMMAND_GETGROUPBUDDYLIST;
	   param2.callFunction="send";
	   param2.sData=vGroupId;
	   param2.callParam="";
	   this.send(param2);                      
	                                      if (true)                                      
                                        {
                                        
                                      
                                                for (var i = 0; i < this.aAllBuddies.length; i++)
                                                {
                                                      //  tempBuddy = (PMBuddy)(aAllBuddies[i]);
                                                         tempBuddy = this.aAllBuddies[i];
                                                         
                                                        if (tempBuddy.getLevel() != 5 &&temp.indexOf(tempBuddy.getUserId()) == -1 &&
                                                                this.aMyBuddies.indexOf(tempBuddy.getUserId()) != -1)
                                                        {
                                                        
                                                                temp.push(tempBuddy.getUserId());
                                                        }
                                                }
                                        }
                                      
                                }
                       
                }
                //outside of any groups
                else
                {
                   
                        for (var i = 0; i < this.aAllBuddies.length; i++)
                        {
                                tempBuddy = this.aAllBuddies[i];
                                
                                if (tempBuddy.getLevel() != 5 && this.aMyBuddies.indexOf(tempBuddy.getUserId()) != -1)
                                {
                                
                                        temp.push(tempBuddy.getUserId());
                                        
                                       
                                }
                               
                        }
                        
                }

              
             
                return temp;
	
	
	
	
	
},

getDisconnectParamObj:function()
{
	   var param=new PMWParam();
	   param.nMsgId=COMMAND_HTTP_FAIL;
	   param.callFunction="getDisconnectParamObj";
	   param.sData="";
	   param.nStatus=0;
	   return  this.submitWithResult(param);
},

getParamObj: function(strFormat)
{
//	alert("Calling PMWObject function: getParamObj");
	
	
//alert(strFormat);
			var param=new PMWParam();
			var retvUID=GetParamValue(strFormat,"~PMUserId");
			var retvUniqueId=GetParamValue(strFormat,"~PMUniqueId");
			param.nToolId=parseInt(GetParamValue(strFormat,"~PMToolId"));
			param.nMsgId=parseInt(GetParamValue(strFormat,"~PMMsgId"));
			param.nRow=parseInt(GetParamValue(strFormat,"~PMRow"));
			param.nCol=parseInt(GetParamValue(strFormat,"~PMCol"));
			param.nStatus=parseInt(GetParamValue(strFormat,"~PMStatus"));
			param.sData=GetParamValue(strFormat,"~PMData");
			param.callFunction=GetParamValue(strFormat,"~callFunction");
			param.callParam=GetParamValue(strFormat,"~callParam");
		return param;
		  
},
getProjectId: function()
{
//	alert("Calling PMWObject function: getProjectId");
	return this.nProjectId;
},
getProjectName: function()
{
//	alert("Calling PMWObject function: getProjectName");
	return this.sProjectName;
},
getSortStr: function()
{
//	alert("Calling PMWObject function: getSortStr");
	return this.sSortStr;
},
setSortStr: function(vSortStr)
{
	this.sSortStr = vSortStr;
},	
getSortBy: function()
{
	/*
	alert('getsortby');
	alert(this.sUserId);
	    var param=new PMWParam();
	 
	   param.nMsgId=500;
	   param.callFunction="run";
	   param.sData=this.sUserId;
	   param.callParam="";
	    this.send(param);
	    alert('getsortby send finished');
	    */
	    return this.bSortByLevel;
},

Initiate: function()
{
	    var param=new PMWParam();
	
	   param.nMsgId=500;
	   param.callFunction="Initiate";
	   param.sData=this.sUserId;
	   param.callParam="";
	    this.send(param);
	
},

getToolId: function()
{
//	alert("Calling PMWObject function: getToolId"+functionUnimplemented);
	return this.nToolId;
},
getToolType: function()
{
//	alert("Calling PMWObject function: getToolType"+functionFinished);
	return this.nToolType ;
},
getUGId: function()
{
	//alert("Calling PMWObject function: getUGId"+functionUnimplemented);
	return this.nUGId;
},
getUserId: function()
{
//	alert("Calling PMWObject function: getUserId"+functionFinished);
 	return this.sUserId ;
},
hasHelp: function()
{
    return this.sHelpIndex=="";
},
hasJSMessage: function(vMsgId)
{
//	alert("Calling PMWObject function: hasJSMessage"+functionUnimplemented);
},

isConnected: function()
{
//	alert("Calling PMWObject function: isConnected"+functionFinished);
	return this.bConnected;
},
isInitialized: function()
{
//	alert("Calling PMWObject function: isInitialized"+functionFinished);
 	return bInitialized;
},
playSound: function(vFileName)
{
//	alert("Calling PMWObject function: playSound"+functionUnimplemented);
},
privateMessage: function(sReceiver)
{
//	alert("Calling PMWObject function: privateMessage"+functionUnimplemented);
},
processEvent: function(e)
{
//	alert("Calling PMWObject function: processEvent"+functionUnimplemented);
},
run: function()
{
//	alert("Calling PMWObject function: run"+functionWorking);	
	PMWApplet.sendNormalCommand(COMMAND_HTTP_GETMESSAGE,"run","",false);		
},
send: function(vParam)
{
//	alert("Calling PMWObject function: send"+functionWorking);
	var commandStr=escape(createParamessage(this.sUserId, this.sUniqueId, vParam));
	//alert(commandStr);
	
	if(commandStr != "")
	{
		var reqOptions={
	      method:       'post',
	      asynchronous: false,
	      contentType:  'application/x-www-form-urlencoded',
	      parameters:   commandStr,
	      encoding:     'UTF-8',
	      onComplete:		this.processResponse 
	    };
		var aAjax= new Ajax.Request(this.SERVERLOCATION,reqOptions);
	//		alert("Calling PMWObject function: send end");
	}
},



sendDirect:function(vParam)
  {
//	alert("Calling PMWObject function: direct send");
	var commandStr=escape(createParamessage(this.sUserId, this.sUniqueId, vParam));
	if(commandStr != "")
	{
		var directreponse;
		var reqOptions={
	      method:       'post',
	      asynchronous: false,
	      contentType:  'application/x-www-form-urlencoded',
	      parameters:   commandStr,
	      encoding:     'UTF-8',
	      onComplete:		this.processDirectResponse 
	    };
		var aAjax= new Ajax.Request(this.SERVERLOCATION,reqOptions);
		
	//	var reponsevalue=this.processDirectResponse ();
		return PMWApplet.directResponse;
	}
	else
		return null;
	
	},
	
	processDirectResponse:function(request)
	{
			//var	commandStr = new String(request.responseText);
			var obj2=PMWApplet;
		
			obj2.directResponse= new String(request.responseText);
			
			//alert(PMWApplet.directResponse);
		  
		},
	
sendInvitingMessage: function(vFrom, vTo, vMsg)
{

	var sMsg = PREFIX_USERID + vFrom + END_CONTROL +
                                   PREFIX_DESTID + vTo + END_CONTROL +
                                   PREFIX_MESSAGE + vMsg + END_CONTROL;
  var param=new PMWParam();
  param.nMsgId=COMMAND_INVITING_MESSAGE;
  param.sData=sMsg;
 
  this.send(param);
},
sendPrivateMessage: function(vFrom, vTo, vMsg)
{

     var sMsg =PREFIX_USERID + vFrom + END_CONTROL +
                                   PREFIX_DESTID + vTo + END_CONTROL +
                                   PREFIX_MESSAGE + vMsg + END_CONTROL;
           var param=new PMWParam();
           param.nMsgId=COMMAND_PRIVATEMESSAGE;
           param.sData=sMsg;                       
           this.send(param);                        	
},
setCandidateId: function(vCan)
{
//	alert("Calling PMWObject function: setCandidateId"+functionUnimplemented);
},
setCellValue: function(vValue)
{
     this.sCellValue = vValue;
},
setCol: function(vCol)
{
//	alert("Calling PMWObject function: setCol");
	this.nCol=vCol;
},
setController: function(vController)
{
//	alert("Calling PMWObject function: setController");
	this.sController=vController;
},
setCriteriaId: function(vCri)
{
//	alert("Calling PMWObject function: setCriteriaId"+functionUnimplemented);
},
setHasControl: function(vHasControl)
{
//	alert("Calling PMWObject function: setHasControl");
	 this.bHasControl=vHasControl;
},
setHeaderId: function(vId)
{

	var param=new PMWParam();
	param.nMsgId=COMMAND_SETHEADERID;
	param.sData=vId;
	param.callFunction="setHeaderId";
	param.callParam="";
	this.send(param);                
  },
setHelpIndex : function(sHelpIndex)
{
  this.sHelpIndex=sHelpIndex;
},
setLevel: function(vGroupId, vProjectId, vToolId)
{

  this.nUGId = vGroupId;
  this.nProjectId = vProjectId;
  this.nToolId = vToolId;
	var param=new PMWParam();
	param.nMsgId=COMMAND_SET_CURRENT_LEVEL;
	param.sData=vGroupId + DIV_TAB + vProjectId + DIV_TAB + vToolId;
	param.callFunction="setLevel";
	param.callParam="";
  this.send(param);
},
setMeetingId: function(vValue)
{

	  if (this.nMeetingId == vValue)
     return;
    this.nMeetingId = vValue;
    var param=new PMWParam();            
    param.nMsgId=COMMAND_SETCURRENTMEETINGID;  
    param.sData=vValue;
    param.callFunction="setMeetingId"; 
    param.callParam="";
    this.send(param);        
},
setRow: function(vRow)
{
//	alert("Calling PMWObject function: setRow"+functionUnimplemented);
	   this.nRow=vRow;
},
setSelectResult: function(vValue)
{
window.top.Working.submitcauseResult(vValue);
},
getSelectResult: function()
{
return this.moveBranchvalue;

//window.top.Working.submitcauseResult();
},
setSortBy: function(vSortByLevel)
{
//	alert("Calling PMWObject function: setSortBy"+functionUnimplemented);
	    if (this.bSortByLevel != vSortByLevel)
                {
                        bSortByLevel = vSortByLevel;
     
                        var i;
                        var j;                
                          for (i = 0; i < this.aAllBuddies.length; i++)
                        {
                                var minIndex = i;
                                
                                var tempBuddy=this.aAllBuddies[minIndex];
                                for ( j = i ; j < this.aAllBuddies.length; j++)
                                {
                                       // if (tempBuddy.greaterThan(aAllBuddies[j], bSortByLevel))
                                          if (this.greaterThan(tempBuddy,this.aAllBuddies[j], bSortByLevel))
                                        {
                                             
                                      tempBuddy=this.aAllBuddies[i];
                                       this.aAllBuddies[i]=this.aAllBuddies[j];
                                       this.aAllBuddies[j]=tempBuddy;
                                        }
                                }
                        }
                             
                }
},
setToolId: function(vToolId)
{
//	alert("Calling PMWObject function: setToolId"+functionUnimplemented);
	
	  if (this.nToolId == vToolId)
    return;
    this.nToolId=vToolId;
    var param=new PMWParam();
    param.nMsgId=COMMAND_SETCURRENTTOOLID;
    param.sData=vToolId;
    param.callFunction="setToolId";
	  param.callParam="";
    this.send(param);          
},
setToolType: function(vToolType)
{
	 this.nToolType=vToolType;
	 var param=new PMWParam();
    param.nMsgId=COMMAND_SETCURRENTTOOLTYPE;
    param.sData=vToolType;
    param.callFunction="setToolType";
	  param.callParam="";
    this.send(param); 
},
setUserId: function(vValue)
{
//	alert("Calling PMWObject function: setUserId"+functionWorking);
	this.sUserId = vValue;
},
showInProgressDlg: function()
{
	alert("Calling PMWObject function: showInProgressDlg"+functionUnimplemented);
},
showMessage: function(vTitle, vMsg)
{
//	alert("Calling PMWObject function: showMessage"+functionUnimplemented);
	alert(vMsg);
},
sleep: function(vDelay)
{
	//alert("Calling PMWObject function: sleep"+functionUnimplemented);
},

testA: function(vValue)
{
	return vValue;
},

getSubstring:function(str,sStart)
{
    	var sRetVal = "";
    	try
    	{
    		var nStart = str.indexOf(sStart) + sStart.length;
    		if (nStart >= sStart.length)
			{
	    	var nEnd = str.indexOf(END_CONTROL, nStart+1);
				if (nEnd-1 < nStart)
					// Not a closed string.
					sRetVal = "";
				else
					sRetVal = str.substring(nStart, nEnd);
			}
    	}
    	catch (e)
    	{
    	alert('substring is wrong');
    	}
		return sRetVal;
},


start: function()
{
//	alert("Calling PMWObject function: start"+functionFinished);
	if(this.autoChecker!=null)
	  return;
	
	this.autoChecker = new PeriodicalExecuter(this.run,5);

},
//other parameter should get from the environment
submit: function(vCommand)
{

    if (vCommand == 0)
            return false;
            
     try{
         var param=new PMWParam();
         param.nToolId=this.nToolId;
         param.nMsgId=vCommand;
//alert("param.nMsgId="+param.nMsgId);         
         param.nRow=this.nRow;
         param.nCol=this.nCol;
         param.sData=this.sCellValue;
         param.nStatus='0';
        // param.nToolType=this.
         param.callFunction='submit';
         param.callParam='submit';
         this.send(param);  
         return true;
        }
        catch(ex)
        {
    		return false;
    	}
},


submitWithResult: function(vCommand)
{
	         if (vCommand == 0)
                        return "";
      var param=new PMWParam();
       param.nToolId=this.nToolId;
       param.nMsgId=vCommand;
       param.nRow=this.nRow;
       param.nCol=this.nCol;
       param.sData=this.sCellValue;
       return this.sendDirect(param);
       
	},

sendNormalCommand: function(vMsgId,vCallFunction,vCallParam,isAsynchronous)
{
	var param=new PMWParam();
	param.nMsgId=vMsgId;
	param.sData=this.sUserId;
	param.callFunction=vCallFunction;
	param.callParam=vCallParam;

	var commandStr=escape(createParamessage(this.sUserId, this.sUniqueId, param));
	
	if(commandStr != "")
	{
		var reqOptions={
	      method:       'post',
	      asynchronous: isAsynchronous,
	      contentType:  'application/x-www-form-urlencoded',
	      parameters:   commandStr,
	      encoding:     'UTF-8',
	      onComplete:		this.processResponse 
	    };
		var aAjax= new Ajax.Request(this.SERVERLOCATION,reqOptions);
	}
},

processResponse: function(request)
{
//alert("processResponse");
	var	commandStr = new String(request.responseText);
	var aCommand = commandStr.split(HTTP_MESSAGE_DIVIDER);
	for(var i=0;i<aCommand.length;i++)
	{
		
			if(aCommand[i].length<100){//not a PMWParam	
			   break;
			  }
	//	alert(aCommand[i]);	  
		  var obj=PMWApplet;	 
			var param=new PMWParam();
			var retvUID=GetParamValue(aCommand[i],"~PMUserId");
			var retvUniqueId=GetParamValue(aCommand[i],"~PMUniqueId");
			param.nToolId=parseInt(GetParamValue(aCommand[i],"~PMToolId"));
			param.nMsgId=parseInt(GetParamValue(aCommand[i],"~PMMsgId"));
//alert(GetParamValue(aCommand[i],"~PMMsgId"));			
			param.nRow=parseInt(GetParamValue(aCommand[i],"~PMRow"));
			param.nCol=parseInt(GetParamValue(aCommand[i],"~PMCol"));
			param.nStatus=parseInt(GetParamValue(aCommand[i],"~PMStatus"));
			param.sData=GetParamValue(aCommand[i],"~PMData");
			param.callFunction=GetParamValue(aCommand[i],"~callFunction");
			param.callParam=GetParamValue(aCommand[i],"~callParam");
		   
		
		
		
		
			if((param.callFunction=='submit'&&param.nMsgId=='517')||param.nMsgId=='102' || (param.callFunction=='submit'&&param.nMsgId==COMMAND_GET_FREE_CHAT_ID)||param.nMsgId==COMMAND_SELECTING_RESULT)
			{
				obj.hashparam[""+param.nMsgId]=param;			
				
			}

			if(!obj.processCommand(param))
			{
			
				}
			//	alert("Calling PMWObject function: processResponse\n"+aCommand[i]);
	//	if(!obj.processCommand(param))
	//	{}	
		  aCommand[i]=null;
	}
	commandStr=null;
	aCommand=null;
	return;
},

processCommand: function(param)
{

		if(param.callFunction !="connectToServer")
		   {
		  

			 if ((param.nMsgId >= RANGE_BASIC_COMMAND_START) && (param.nMsgId <= RANGE_BASIC_COMMAND_END))
                               this.processBasicCommand(param);
            else if ((param.nMsgId >= RANGE_USER_COMMAND_START) && (param.nMsgId <=RANGE_USER_COMMAND_END))
                                this.processUserCommand(param);
       		  else if ((param.nMsgId >= RANGE_DB_COMMAND_START) && (param.nMsgId <=RANGE_DB_COMMAND_END))
                                this.processDBCommand(param);
            else if ((param.nMsgId >= RANGE_PROJECT_COMMAND_START) && (param.nMsgId <=RANGE_PROJECT_COMMAND_END))
                                this.processProjectCommand(param);
            else if ((param.nMsgId >= RANGE_GROUP_COMMAND_START) && (param.nMsgId<=RANGE_GROUP_COMMAND_END))
                                this.processGroupCommand(param);
            else if ((param.nMsgId >= RANGE_CHAT_COMMAND_START) && (param.nMsgId <= RANGE_CHAT_COMMAND_END))
                                this.processChatCommand(param);
            else
            	{
            	
                return;
              }
  
		}
		
		if(param.callFunction =="Initiate"){	
	 if((param.nMsgId >= RANGE_USER_COMMAND_START) && (param.nMsgId <=RANGE_USER_COMMAND_END))
                                this.processUserCommand(param);
	 }
	 
		if(param.callFunction =="connectToServer"){	
		
			  if(param.nMsgId==COMMAND_HTTP_SUCCESS)
			  {
			  	this.sUniqueId = param.sData;
			  
			  	this.bConnected=true;
			  	this.start();
			  }
			  else 
			  	this.showMessage("","The program could not connect to the server.");                          
			  return true;
		}
		return false;
},

processBasicCommand: function(param)
{ 
	
    switch (param.nMsgId)
                {
               
                      case COMMAND_INVITING_MESSAGE:
                       
                       
                               var sChatSender 	= this.getSubstring(param.sData, PREFIX_USERID);
                               var sChatMsg		= this.getSubstring(param.sData,PREFIX_MESSAGE);
                           
                           //  alert('sdata--'+param.sData);
                              var aInfo=new Array();
                              aInfo = this.parseString(param.sData, "|");
                             var vMessage = aInfo[0];
			var sRoomId = aInfo[1];
			var sRoomName = aInfo[2];
			var sSender = aInfo[3];       
       var  END_CONTROLPosition=sSender.indexOf(END_CONTROL);                 
      sSender=sSender.substring(0,END_CONTROLPosition);
       var message='Your buddy '+ sSender+ ' is asking you  to join a chat.';  
               
                                   if(confirm(message))
                                {
                                	/*
      var param=new PMWParam();	
	   param.nMsgId=COMMAND_OPEN_INVITED_CHAT;
	   param.callFunction="Initiate chatroom";
	   param.sData=sRoomId;
	   param.callParam="";
	    this.send(param);
	    */
	    param.nMsgId=COMMAND_OPEN_INVITED_CHAT;
	    param.sData=sRoomId;
	      this.checkAppletMessageNew(param);
	   // (PMConstant.COMMAND_OPEN_INVITED_CHAT, sRoomId);
                                	
                                	}
                                else
                                	{
        break;
                            }
                              
                              
                                break;
                        case COMMAND_PRIVATEMESSAGE:
                      
                              var sSender 	= this.getSubstring(param.sData,PREFIX_USERID);
                              
                              
                              var sMsg		= this.getSubstring(param.sData,PREFIX_MESSAGE);
                              // this.showMessage("Private Message","Your buddy " + sSender + " sent a private message to you: \n" + sMsg);
                              alert("Your buddy " + sSender + " sent a private message to you: \n" + sMsg);
                                break;
                        case COMMAND_REFRESH:
                               param.nMsgId=COMMAND_REFRESH;
                               //jsMessageAgent.appendJSMessage(PMConstant.COMMAND_REFRESH);
                               this.checkAppletMessageNew(param);
                                break;
                        case COMMAND_SET_RESULT:
                        case COMMAND_SET_CONTROLLER:
                              this.checkAppletMessageNew(param);
                              //jsMessageAgent.appendJSMessage(param, true);
                                break;
                        case COMMAND_OFFLINE_MESSAGE:
                              //  this.showMessage("Offline Message", param.sData);
                              alert('Offline Message '+param.sData);
                                break;
                        case COMMAND_ONLINE_MESSAGE:
                              //  this.showMessage("Online Message", param.sData);
                                alert('Online Message '+param.sData);
                                break;
                        case COMMAND_EVENT_REMIND:
                               // this.showMessage("Online Message", param.sData);
                                 alert('Online Message '+param.sData);
                                break;
                    
                        default:
                               alert("Unhandled basic command. Id=" + param.nMsgId);
                }  
 
 
 
	},



  processChatCommand:function(vReceived)
        {
                switch (vReceived.nMsgId)
                {
                        case COMMAND_REFRESH_CHAT_USER_NUMBER:
                        case COMMAND_OPEN_INVITED_CHAT:
                        case COMMAND_GET_FREE_CHAT_ID:
                        
                   //     obj.hashparam[COMMAND_GET_FREE_CHAT_ID]=vReceived;	
                  
                             this.checkAppletMessageNew(vReceived);
                                break;
                        default:
                               return;    
                     }
        },

processUserCommand:function(param)
{
	
	  var sData = param.sData;
                var i;
                switch (param.nMsgId)
                {            
                       case COMMAND_INIT_BUDDY_LIST:  
                     
                      
                                var temp1 = this.parseString(sData, DIV_NL);
                                var userId1, data1;
                                var level1;
                                var i=0;//0?  -1??
                                var k=0;
                                var j;
                          			this.aAllBuddies=null;
                          			this.aMyBuddies=null;
                                this.aMyBuddies = new Array();
                               this.aAllBuddies = new Array();
                              
                                for( j = 0; j < temp1.length; j++)
                                   {
                                   
                                        data1 = temp1[j];
                                        userId1 = data1.substring(0, data1.indexOf(DIV_TAB));
                                        level1 = parseInt(data1.substring(data1.indexOf(DIV_TAB)+DIV_TAB.length));
                                       // aMyBuddies.addElement(userId1);
                                       // aAllBuddies.addElement(new PMBuddy(userId1, level1));
                                  //   var tpmbuddy=new PMBuddy(userId1,level1);
                                   var tpmbuddy=new PMBuddy();
                                   tpmbuddy.sUserId=userId1;
	                                 tpmbuddy.nLevel=level1;
                                    // aMyBuddies[i++]=userId1;
                                    // aAllBuddies[k++]=tpmbuddy;
                                     this.aMyBuddies[i++]=userId1;
                                     this.aAllBuddies[k++]=tpmbuddy;
                                  }
                                 break;
                         case COMMAND_SET_CURRENT_LEVEL:
                               
                              
                                var temp2 = this.parseString(sData, DIV_TAB);
                                var userId2 = temp2[0];
                                var groupId2 = parseInt(temp2[1]);
                                var projectId2 = parseInt(temp2[2]);
                                var toolId2 = parseInt(temp2[3]);
                                var level2 = -1;

                                if (this.nToolId != 0 && toolId2 == this.nToolId)
                                {
                                        level2 = 1;
                                }
                                else if (this.nProjectId != 0 && projectId2 == this.nProjectId)
                                {
                                        level2 = 2;
                                }
                                else if (this.nUGId != 0 && groupId2 ==this.nUGId)
                                {
                                        level2 = 3;
                                }
                                else if (this.aMyBuddies.indexOf(userId2) != -1)
                                {
                                       level2 = 4;
                                }


                                if (level2 != -1)
                                {
                                	
                                	//var tt=new  PMBuddy(userId2, level2);
                                	var ttemp=new  PMBuddy();
                                	ttemp.sUserId=userId2;
                                	ttemp.nLevel=level2;
                                	
                                
                                        if (this.insertOrChangeBuddy(ttemp, true))
                                        {
                                           
                                              param.nMsgId=COMMAND_REFRESH_BUDDY_LIST;
                                              this.checkAppletMessageNew(param);
                                               
                                        }
                                }
                                else
                                {
                                        if (this.removeOnlineBuddy(userId2))
                                            
                                               param.nMsgId=COMMAND_REFRESH_BUDDY_LIST;
                                               this.checkAppletMessageNew(param);
                                
                                 }

                                if (userId2==sController&& level2 !=1)
                                       // jsMessageAgent.appendJSMessage(PMConstant.COMMAND_UPDATE_CONTROLLER, "");

                                         param.nMsgId=COMMAND_UPDATE_CONTROLLER;
                                         this.checkAppletMessageNew(param);
                                break;
    
    
    
    
                                case COMMAND_CHANGE_BUDDY_LIST:
                                var temp3 = this.parseString(sData, DIV_NL);
                                var userId3, data3;
                                var level3;
                                var bRefresh = false;
                              //  Vector tempChanged = new Vector();
                                 var tempChanged=new Array();
                               
                                var tempBuddy3;
                                //change the status of buddies in the current group
                               var j;
                               var k=0;
                                for (j = 0; j < temp3.length; j++)
                                {
                                        data3 = temp3[j];
                                        userId3 = data3.substring(0, data3.indexOf(DIV_TAB));
                                        level3 = parseInt(data3.substring(data3.indexOf(DIV_TAB) + DIV_TAB.length()));

                                         var tmpbuddy3=new  PMBuddy();
                                         tmpbuddy3.sUserId=userId3;
                                         tmpbuddy3.nLevel=level3;
                                	
                                       // if (this.insertOrChangeBuddy(new PMBuddy(userId3, level3), false))
                                       if (this.insertOrChangeBuddy(tmpbuddy3, false))
                                                bRefresh = true;

                                      //  tempChanged.addElement(userId3);
                                          tempChanged[k]=userId3;
                                }

                                //update the status of buddies that didn't get updated
                                var j;
                                for (j = 0; j < this.aAllBuddies.length; j++)
                                {
                                      
                                        tempBuddy3 = this.aAllBuddies[j];
                                        if (tempChanged.indexOf(tempBuddy3.getUserId()) == -1)
                                        {
                                                if (this.aMyBuddies.indexOf(tempBuddy3.getUserId()) != -1)
                                                {
                                                        if (tempBuddy3.getLevel() != 5 && tempBuddy3.getLevel() != 4)
                                                        {
                                                                tempBuddy3.setLevel(4);
                                                                bRefresh = true;
                                                        }
                                                }
                                                else
                                                {
                                                      //  aAllBuddies.removeElement(tempBuddy3);
                                                       var jj;
                                                       var jk;
                                                       for(jj=0;jj<this.aAllBuddies.length;jj++)
                                                       {
                                                       	if(this.aAllBuddies[jj]==tempBuddy3)
                                                       	jk=jj;
                                                       	break;
                                                       	}
                                                       	this.aAllBuddies.del[jk];
                                                        bRefresh = true;
                                                        j--;
                                                }
                                        }
                                }

                                if (bRefresh)
                                     { 
                                param.nMsgId=COMMAND_REFRESH_BUDDY_LIST;        
                               this.checkAppletMessageNew(param);
                              }
                                break;
                        case COMMAND_REMOVE_ONLINE_BUDDY:
                       
                                if (this.removeOnlineBuddy(sData))
                        
                               param.nMsgId=COMMAND_REFRESH_BUDDY_LIST;        
                               this.checkAppletMessageNew(param);
                                break;
                        case  COMMAND_ADD_BUDDY:
                        
                                var temp4 = this.parseString(sData, DIV_TAB);
                                var userId4 = temp4[0];
                                var level4 = parseInt(temp4[1]);
                              
                               var tempBuddy=new PMBuddy();
                               tempBuddy.sUserId=userId4;
                                tempBuddy.nLevel=level4;
                               
                              
                                if (this.addBuddy(tempBuddy))
                                {
                                     //   jsMessageAgent.appendJSMessage(COMMAND_REFRESH_BUDDY_LIST);
                                       // jsMessageAgent.appendJSMessage(COMMAND_REFRESH_MY_BUDDY_LIST);
                                	param.nMsgId=COMMAND_REFRESH_BUDDY_LIST;
                                	this.checkAppletMessageNew(param);
                                	
                                	param.nMsgId=COMMAND_REFRESH_MY_BUDDY_LIST;
                                	this.checkAppletMessageNew(param);
                                }
                                break;
                        case COMMAND_REMOVE_BUDDY:
                                if (this.removeBuddy(sData))
                                {
                                	
                                	param.nMsgId=COMMAND_REFRESH_BUDDY_LIST;
                                        this.checkAppletMessageNew(param);
                                }
                                
                                break;
                        case COMMAND_REFRESH_MY_BUDDY_LIST:
                              
                                this.checkAppletMessageNew(param);
                                break;
                        case COMMAND_UPDATE_CONTROLLER:
                             
                                this.checkAppletMessageNew(param);
                                break;
                        case COMMAND_CHECK_GROUPUSER:
                        case COMMAND_WARN_DELETE_GROUP:
                        case COMMAND_CHECK_PROJECTUSER:
                        case COMMAND_WARN_DELETE_PROJECT:
                        case COMMAND_WARN_DELETE_GROUPUSER:
                        case COMMAND_DELETE_GROUPUSER:
                        case COMMAND_WARN_DELETE_PROJECTUSER:
                        case COMMAND_DELETE_PROJECTUSER:
                        case COMMAND_REMOVE_DUP_USER:
                        
                        	      
                                this.checkAppletMessageNew(param);
                         
                                break;
                        case COMMAND_REFRESH_UG_NAME:
                                this.sGroupName = sData;
                               param.nMsgId=COMMAND_REFRESH_UG_NAME;
                                this.checkAppletMessageNew(param);
                                break;
                        case COMMAND_GETGROUPBUDDYLIST:
                                this.sOtherGroupBuddies = sData;
                                break;
                        case COMMAND_GETPROJECTBUDDYLIST:
                                this.sOtherProjectBuddies = sData;
                                break;
                        case COMMAND_INVITE_BUDDY:
                               
//alert('sdata '+sData);
  var	sContent = sData.substring(0,sData.lastIndexOf("|"));
  //alert('her buddy');
			var sSender 	= sContent.substring(0, sContent.indexOf("|"));
			var message=sSender+ " has invited you to be his/her buddy.";
                                if(confirm(message))
                                {
      var param=new PMWParam();
	
	   param.nMsgId=COMMAND_ACCEPT_BUDDY;
	   param.callFunction="invite buddy";
	   param.sData=sContent;
	   param.callParam="";
	    this.send(param);
                                	
                                	}
                                else
                                	{
     var param=new PMWParam();
	
	   param.nMsgId=COMMAND_REJECT_BUDDY;
	   param.callFunction="reject";
	   param.sData=sContent;
	   param.callParam="";
	    this.send(param);
                                		
                                		
                                		}
                              //  this.showMessage("Invite-buddy Message", "INVITEBUDDY|" + vReceived.sData);
                                //here should be improved, allow client to select accept or reject
                                break;
                        default:
                               return;                
                 }
	},
	
		
	  showDialoge:function(content)
	  {
	  	   var sub;
	  	   sub=window.open('selectdialog.html','','width=80px,height=500x,resizable=1,scrollbars=0,statusbar=0,menubar=0,left=150px,top=150px');      
          sub.document.write('<center>');
          sub.document.write(aList);     
          sub.document.write('</center>');    
          sub.document.close() 
	  	
	  	},

	     processDBCommand:function(vReceived)
        {
            switch (vReceived.nMsgId)
            {
                        case COMMAND_UPDATE:                        
                        case COMMAND_DELETE_RESULT :
                        this.checkAppletMessageNew(vReceived);
                             break;
                        default:
                        return;
          
            }

        },
	  
	  
	
	  processProjectCommand:function(vReceived)
        {
        	//alert("vReceived.nMsgId: "+vReceived.nMsgId);
                var sData = vReceived.sData;
                switch (vReceived.nMsgId)
                {

                        case COMMAND_SETTOOLID:
                        case COMMAND_SETENDMEETINGID:
                        case COMMAND_SETSCAMPERID:
                        case COMMAND_SETICONFILENAME:
                        case COMMAND_SETDESCRIPTION:
                        case COMMAND_SETLINEFILENAME:
                        case COMMAND_SETHEADERID:
                        case COMMAND_SETCANDIDATEID:
                        case COMMAND_SETCRITERIAID:
                        case COMMAND_REFRESH_PATHWAY:
                        case COMMAND_REFRESH_PROJINFO:
                        case COMMAND_REFRESH_ACTIONITEM:
                        case COMMAND_REFRESH_TEAMMEMBER:
                        case COMMAND_OPENFLOORMODE:
                        case COMMAND_UPDATE_FF_QUESTION:
                        case COMMAND_CB_REFRESH_RESULT:
                        case COMMAND_CB_RESETUP:
                        case COMMAND_SETTOOLTYPE:
                        case COMMAND_SETMEETINGID:
                        case COMMAND_UPDATE_MEETINGINFO:
                        case COMMAND_UPDATE_MEETINGMISC:
                        case COMMAND_UPDATE_MEETINGAI:
                        case COMMAND_UPDATE_MEETINGTOOL:
                        case COMMAND_UPDATE_MANUALSTEP:
                        case COMMAND_INSERT_ROW_MS:
                        case COMMAND_DELETE_ROW_MS:
                        case COMMAND_UPDATE_COLWIDTH:
                        case COMMAND_DA_CHANGE_BREAKS:
                        case COMMAND_CB_UPDATE_VOTEMODE:
                        case COMMAND_REFRESH_MEETING:	
                        case COMMAND_NotSaved: 
                        case COMMAND_CB_UPDATE_NOTE:
                        case COMMAND_CB_SHOW_VOTERLIST:
                        case COMMAND_CHANGE_TM_PRIVILEGES:
                        case COMMAND_AI_ADD_NOTE:
                        case COMMAND_SET_BS_NEWIDEAIDS:
                        case COMMAND_SET_AF_NEWIDEAIDS:
                        case COMMAND_UPDATE_FMEAINFO:
                        case COMMAND_UPDATE_FMEAPARTICIPANT:
                        case COMMAND_UPDATE_FMEALIST:
                        case COMMAND_UPDATE_RCA_ACTION:
                        case COMMAND_FMEA_UPDATE_ACTION:
                        case COMMAND_CB_SHOW_UNSELECTEDMEMBER:                         
                        case COMMAND_UPDATE_MEETINGMEMBERS:
                        case COMMAND_CHOOSE_VOTER:
                        case COMMAND_UNCHOOSE_VOTER:
                        case COMMAND_BS_OPENMODE_ADDROW:
                        case COMMAND_BS_ADDIDEA:
                        case COMMAND_BS_SET_IDEAID:
                        case COMMAND_CB_SELECTALL:
                        case COMMAND_CB_DESELECTALL:
                        case COMMAND_DD_BSBS:
                        case COMMAND_DD_BSAFF:
                        case COMMAND_DD_AFFAFF:
                        case COMMAND_DD_AFFHAFFH:
                        case COMMAND_DD_AFFBS:
                        case COMMAND_DD_AFFHBS:
                        case COMMAND_SETVIEWSTATUS:
                        case COMMAND_DELETE_ROW_FMEA:   
                        case COMMAND_SET_MS_ID:
                               this.checkAppletMessageNew(vReceived);
                                break;                    
                        case COMMAND_REFRESH_PROJNAME:   
                        case COMMAND_NEW_TEAMMEMBER:                        	
                        	this.checkAppletMessageNew(vReceived);
                                break;    
                        default:
                                return;
                }
        },

	
	
	
	
	  processGroupCommand:function( vReceived)
        {
                var sData = vReceived.sData;

                switch (vReceived.nMsgId)
                {
                        case COMMAND_REFRESH_FILEMANAGEMENT:
                        case COMMAND_REFRESH_DISCUSSION:
                        case COMMAND_REFRESH_CONTACT:        // add by linliming 05/12/2005, task id 1132.
			                  case COMMAND_REFRESH_SCORECARD:      // add by linliming 05/13/2005, task id 1131.
			                  case COMMAND_REFRESH_FORUM:          // add by linliming 05/13/2005, task id 1129.
                        case COMMAND_REFRESH_MEMBER :
                        case COMMAND_REFRESH_CALMONTH:   // add by lianying 05/16/2005. bug id 1126.
                        case COMMAND_REFRESH_NEWS:           // add by linliming 05/31/2005, task id 1130.
                               // jsMessageAgent.appendJSMessage(vReceived, true);
                               this.checkAppletMessageNew(vReceived);
                                break;
                        default:
                               rerurn;
                }
        },
	
	parseString:function(vList, vDelimiter)
	{
		var tempArray=new Array();
		var end;
		var i=0;
		while(vList.length>0)
		{
			end=vList.indexOf(vDelimiter);
			if(end!=-1)
			{
			tempArray[i++]=vList.substring(0,end);
			vList=vList.substring(end+vDelimiter.length);
		  }
		else
			  {
				tempArray[i++]=vList;
				vList = "";
				
				}
			}
		return tempArray;
		},
	
	
	
	
	
	
	insertOrChangeBuddy:function(vBuddy,bBuddyChanged)
	{
		            var tempBuddy;
                var bRetVal = true;
                var bNotify = false;		//go online sound
                var bHasBuddy = false;
                var i;
               
                
                for (i = 0; i < this.aAllBuddies.length; i++)
                {
                	
                	
                        tempBuddy=this.aAllBuddies[i];
                        if (vBuddy.sUserId==tempBuddy.sUserId)//here can get the right result?is it need to write to vBuddy.getuserid()??
                        {
                     
                                var oldLevel = tempBuddy.getLevel();
                                var newLevel = vBuddy.getLevel();

                                if (bBuddyChanged && oldLevel ==5 && newLevel != 5)
                                        bNotify = true;

                                bHasBuddy = true;

                                if (newLevel == oldLevel)
                                {
                                        //no change needed.
                                       
                                        bRetVal = false;
                                        break;
                                }
                                else
                                {
                                	
                                        this.aAllBuddies=this.aAllBuddies.del(i);
                                       
                                        break;
                                }
                        }
                }

                if (bRetVal)
                {
                        var index = 0;
/*
                        for (index = 0; index < aAllBuddies.length; index++)
                        {
                        	alert('bretval begin');
                               // if (!vBuddy.greaterThan(aAllBuddies[index], bSortByLevel))
                            //   if (!this.greaterThan(vBuddy,aAllBuddies[index],bSortByLevel))
                            if (!this.greaterThan(vBuddy,aAllBuddies[index],true))
                                {
                                        break;
                                }
                        }
                        */

                       // if (index < aAllBuddies.length)
                         //       aAllBuddies.insertElementAt(vBuddy, index);
                        //else
                                this.aAllBuddies.push(vBuddy);
                        if (bBuddyChanged && !bHasBuddy && vBuddy.getLevel() != 5)
                                bNotify = true;         
                }

                return bRetVal;
	 	},
	
	
	  addBuddy:function(vBuddy)
	  {
		  var bRetVal = true;

                if (this.aMyBuddies.indexOf(vBuddy.getUserId()) == -1)
                {
                	 
                        this.aMyBuddies.push(vBuddy.getUserId());
                         
                        this.insertOrChangeBuddy(vBuddy, true);
                }
                else
                        bRetVal = false;
                return bRetVal;		
		},
	
	
	removeOnlineBuddy:function(vUserId)
	{
		            var tempUserId;
                var bRetVal = false;
                 var i;
                for ( i = 0; i < this.aAllBuddies.length; i++)
                { 
                         tempUserId = (this.aAllBuddies[i]).getUserId();

                        if (vUserId==tempUserId)
                        {
                                if (this.aMyBuddies.indexOf(vUserId) == -1)
                                {
                                        
                                        this.aAllBuddies.del(i);
                                }
                                else
                                {      
                             this.aAllBuddies[i].setLevel(5);
                                }

                                bRetVal = true;
                                break;
                        }
                }
                return bRetVal;
		},
	
	removeBuddy:function(vUserId)
	{
		     var bRetVal = false;

                if (this.aMyBuddies.indexOf(vUserId) != -1)
                {
                        //aMyBuddies.removeElement(vUserId);
                        var i;
                        var marki;
                        for(i=0;i<this.aMyBuddies.length;i++)
                        {
                        
                        	if(this.aMyBuddies[i]==vUserId)
                        	{
                        	marki=i;
                        
                        	break;
                        }
                        	}
                        
                        this.aMyBuddies=this.aMyBuddies.del(marki);
                        var tempBuddy=new PMBuddy();
                        var ii;
                        for ( ii = 0; ii < this.aAllBuddies.length; ii++)
                        {   
                                tempBuddy = this.aAllBuddies[ii];

                                if (tempBuddy.getUserId()==vUserId)
                                {
                                	
                                      this.aAllBuddies=this.aAllBuddies.del(ii);
                                        bRetVal = true;
                                        break;
                                }
                        }
                }

                return bRetVal;
		
		
		},
	
	
   // Processes messages gets from server.
 checkAppletMessageNew:function(param)
{
	
	var myApplet = window.top.PMWApplet;

	//if (bAllowCheckAppletMsg=="true")
	//{
		var temp = 0;
		var nMsg = 0;	
		
	 var msg = param;

			if (msg == null)
				return;
			
			var bProcessed = true;
			
	//alert("msg.nMsgId="+msg.nMsgId);	
			if (msg.nMsgId == COMMAND_REFRESH)
			{
				if (!window.top.Working.isEditing() && window.top.Working.bLoaded)
					window.top.Working.reloadPage();
				else
					bProcessed = false;
			}
			else if (msg.nMsgId == COMMAND_REFRESH_PATHWAY)
			{		
			//	alert(111);		
				if (window.top.Working.isEditing())
					window.top.Working.bProcessed = false;
				else if (this.getToolType() == TOOL_PATHWAY && this.getHelpIndex() == "Pathway")
						window.top.Working.reloadPage(); // use a cover method in  Pathway.js
			}
			else if (msg.nMsgId == COMMAND_REFRESH_PROJINFO)
			{
				if (window.top.Working.isEditing())
					window.top.Working.bProcessed = false;
				else if (this.getToolType() == TOOL_PROJECTINFORMATION)
						window.top.Working.reloadPage();
			}
			else if ((msg.nMsgId == COMMAND_REFRESH_TEAMMEMBER))
			{
				if (window.top.Working.isEditing())
					window.top.Working.bProcessed = false;
				else
					window.top.Working.refreshIfAtPage("TeamMember.jsp");
			}
			// add by linliming 05/12/2005, task id 1132.
			else if ((msg.nMsgId == COMMAND_REFRESH_CONTACT))
			{
				if (window.top.Working.isEditing())
					window.top.Working.bProcessed = false;
				else
					window.top.Working.refreshIfAtPage("Contact0.jsp");
			}
			else if ((msg.nMsgId == COMMAND_REFRESH_SCORECARD))
			{
				if (window.top.Working.isEditing())
					//window.top.Working.bProcessed = false;
					{}
				else
					window.top.Working.refreshIfAtPage("ScoreCard0.jsp");
			}

			// add by linliming 05/13/2005, task id 1129.
			else if ((msg.nMsgId == COMMAND_REFRESH_FORUM))
			{
				if (window.top.Working.isEditing())
				//	window.top.Working.bProcessed = false;
				{}
				else
					window.top.Working.refreshIfAtPage("Forum_Home.jsp");
			}
		   else if(msg.nMsgId == COMMAND_REFRESH_NEWS)
		   {
		        if(window.top.Working.isEditing())
		        {
		        //	window.top.Working.bProcessed = false;
		        }
		        else
		        	window.top.Working.refreshIfAtPage("News0.jsp");
		   }

			else if ((msg.nMsgId == COMMAND_REFRESH_ACTIONITEM))
			{
				if (window.top.Working.isEditing())
				{}
					//window.top.Working.bProcessed = false;
				else
					window.top.Working.refreshIfAtPage("ActionItem.jsp");
			}
			else if ((msg.nMsgId == COMMAND_REFRESH_DISCUSSION))
			{
				if (window.top.Working.isEditing())
				{}
					//window.top.Working.bProcessed = false;
				else
					window.top.Working.refreshIfAtPage("ChatManagement.jsp");
			}
    else if (msg.nMsgId == COMMAND_REFRESH_CALMONTH)
            		{
                		if (window.top.Working.isEditing())
        {
					//window.top.Working.bProcessed = false;
				}
				else
					window.top.Working.refreshIfAtPage("CalMonth.jsp");
            		}
			else if ((msg.nMsgId == COMMAND_REFRESH_FILEMANAGEMENT))
			{
				if (window.top.Working.isEditing())
				{
					//window.top.Working.bProcessed = false;
				}
				else
					window.top.Working.refreshIfAtPage("FileManagement.jsp");
			}
			else if (msg.nMsgId == COMMAND_REFRESH_PROJNAME)
			{
				window.top.refreshProjectName();
			}
			else if (msg.nMsgId == COMMAND_REFRESH_UG_NAME)
			{
				if(window.top.refreshUGName())
				window.top.refreshUGName();
			}
			else if (msg.nMsgId == COMMAND_REFRESH_BUDDY_LIST)
			{
				if(window.top.refreshBuddyList())
				window.top.refreshBuddyList();
				
			}
			else if (msg.nMsgId == COMMAND_REFRESH_MY_BUDDY_LIST)
			{
				if(window.top.refreshMyBuddyList())
				window.top.refreshMyBuddyList();
					
			}
			else if (msg.nMsgId == COMMAND_UPDATE_CONTROLLER)
			{
				var sController = msg.sData;
				window.top.PMWApplet.setController(sController);
				window.top.Working.updateController();
			}
			else if (msg.nMsgId == COMMAND_OPENFLOORMODE)
			{
				window.top.Working.openFloorStatus(strToInt(msg.sData), true, true);
			}
			else if (msg.nMsgId == COMMAND_UPDATE)
			{			
				window.top.Working.updateCell(msg);
			}	
			/*		
			else if (msg.nMsgId == COMMAND_DELROW)
			{		
				alert("msg.nToolId="+msg.nToolId);
				if(msg.nToolId == TOOL_BRAINSTORM || msg.nToolId == TOOL_AFFINITIES)	
					window.top.Working.onDeleteRowForBuddy(msg);
			} */
			else if (msg.nMsgId == COMMAND_UPDATE_FF_QUESTION)
			{
				window.top.Working.updateFFQuestion(msg);
			}
			else if (msg.nMsgId == COMMAND_CHOOSE_VOTER)
			{
				window.top.Working.updateVoterSelection(msg, true);
			}
			else if (msg.nMsgId == COMMAND_UNCHOOSE_VOTER)
			{
				window.top.Working.updateVoterSelection(msg, false);
			}
			else if (msg.nMsgId == COMMAND_CB_REFRESH_RESULT)
			{
				window.top.Working.refreshResult(msg);
			}
			else if (msg.nMsgId == COMMAND_BS_OPENMODE_ADDROW)
			{
				window.top.Working.addIdeaFromBuddy(msg);
			}
			else if (msg.nMsgId == COMMAND_BS_ADDIDEA)
			{
				window.top.Working.addIdeaFromBuddy(msg);
			}
			else if (msg.nMsgId == COMMAND_DD_BSBS)
			{
				window.top.Working.adjust_DD_BSBS(msg);
			}
			else if (msg.nMsgId == COMMAND_DD_BSAFF)
			{
				window.top.Working.adjust_DD_BSAFF(msg);
			}
			else if (msg.nMsgId == COMMAND_DD_AFFAFF)
			{
				window.top.Working.adjust_DD_AFFAFF(msg);
			}
			else if (msg.nMsgId == COMMAND_DD_AFFHAFFH)
			{
				window.top.Working.adjust_DD_AFFHAFFH(msg);
			}
			else if (msg.nMsgId == COMMAND_DD_AFFBS)
			{
				window.top.Working.adjust_DD_AFFBS(msg);
			}
			else if (msg.nMsgId == COMMAND_DD_AFFHBS)
			{
				window.top.Working.adjust_DD_AFFHBS(msg);
			}
			else if (msg.nMsgId == COMMAND_BS_SET_IDEAID)
			{
				window.top.Working.setIdeaId(msg);
			}
			else if (msg.nMsgId == COMMAND_CB_SELECTALL)
			{
				window.top.Working.updateAllVoters(msg, true);
			}
			else if (msg.nMsgId == COMMAND_CB_DESELECTALL)
			{
				window.top.Working.updateAllVoters(msg, false);
			}
			else if (msg.nMsgId == COMMAND_REFRESH_CHAT_USER_NUMBER)
			{
				window.top.Working.refreshChatOnlineNum(msg);
			}
			else if (msg.nMsgId == COMMAND_OPEN_INVITED_CHAT)
			{
			
				window.top.displayInvitedChat(strToInt(msg.sData));
			}
			else if (msg.nMsgId == COMMAND_WARN_DELETE_GROUP)
			{
				alert(msg.sData);
			}
			else if (msg.nMsgId == COMMAND_WARN_DELETE_PROJECT)
			{
				alert(msg.sData);
			}
			else if (msg.nMsgId == COMMAND_REMOVE_DUP_USER)
			{				
				window.top.Working.onForcedLogOut(2);
				return ;
			}
			else if (msg.nMsgId == COMMAND_CB_RESETUP)
			{
				self.location.href="CB_Setup.jsp?ToolId=" + msg.nToolId;
			}
			else if (msg.nMsgId == COMMAND_WARN_DELETE_GROUPUSER)
			{
				if (msg.nCol == 0)
				{
					if (msg.nRow == strToInt(this.getUGId()))
					{
						alert("You have been deleted from this Group: " + msg.sData);
						window.top.Working.reloadUser0();
					}
				}
				else
				{
					if (msg.nRow == strToInt(this.getUGId()))
						window.top.Working.refreshIfAtPage("ViewUGMembers.jsp");
				}
			}
			else if (msg.nMsgId == COMMAND_WARN_DELETE_PROJECTUSER)
			{
				//nCol is project id, sData is project name.
				if (msg.nRow == 0)
				{
					alert("You have been deleted from this Project: " + msg.sData);
					if (msg.nCol == strToInt(this.getProjectId()))
					{
						window.location.href="Group0.jsp?GroupId=" + this.top.PMWApplet.getUGId();
					}
					else
					{
						window.top.Working.refreshIfAtPage("User0.jsp");
						window.top.Working.refreshIfAtPage("Group0.jsp");
					}
				}
				else
				{
					if (this.getToolType() == TOOL_TEAMMEMBERS)
						window.top.Working.reloadPage();
				}
			}
			else if (msg.nMsgId == COMMAND_NEW_TEAMMEMBER)
			{
				alert("You have been selected as a team member of the Project: " + msg.sData);
				//window.top.Working.refreshIfAtPage("User0.jsp");
				window.top.Working.refreshIfAtPage("Group0.jsp");
			}
			else if (msg.nMsgId == COMMAND_UPDATE_MEETINGINFO)
			{
				window.top.Working.updateMeetingInfo(msg);
			}
			else if (msg.nMsgId == COMMAND_UPDATE_MEETINGMISC)
			{
				window.top.Working.updateMeetingMisc(msg);
			}
			else if (msg.nMsgId == COMMAND_UPDATE_MEETINGMEMBERS)
			{
				window.top.Working.updateMeetingMembers(msg);
			}
			else if	(msg.nMsgId == COMMAND_UPDATE_MEETINGAI)
			{
				window.top.Working.updateMeetingAI(msg);
			}
			else if (msg.nMsgId == COMMAND_UPDATE_MEETINGTOOL)
			{
				window.top.Working.updateMeetingTool(msg);
			}
			else if (msg.nMsgId == COMMAND_INSERT_ROW_MS)
			{				
				//alert("aaa");
				window.top.Working.insertManualStepRow(msg);
			}
			else if (msg.nMsgId == COMMAND_UPDATE_MANUALSTEP)
			{
				window.top.Working.updateMeetingTool(msg);
			}
			else if (msg.nMsgId == COMMAND_DELETE_ROW_MS)
			{
				window.top.Working.deleteMeetingRow(msg);
			}
			else if (msg.nMsgId == COMMAND_UPDATE_COLWIDTH)
			{
				window.top.Working.onUpdateColWidth(msg);
			}
			else if (msg.nMsgId == COMMAND_DA_CHANGE_BREAKS)
			{
				window.top.Working.changeDASerieBreaks(msg);
			}
			else if (msg.nMsgId == COMMAND_SETVIEWSTATUS)
			{
				window.top.Working.updateViewStatus(msg);
			}
		
			else if (msg.nMsgId == COMMAND_DISCONNECTED)
			{
				alert("Your connection to the server has been interrupted. Please log in again.");

				window.top.Working.onForcedLogOut(1);
			}
			else if (msg.nMsgId == COMMAND_CB_UPDATE_VOTEMODE){
				window.top.Working.updateVoteMode(msg);
			}
			else if (msg.nMsgId == COMMAND_FMEA_UPDATE_ACTION){
				window.top.Working.updateFmeaIcon(msg);
			}
			else if (msg.nMsgId == COMMAND_CB_SHOW_VOTERLIST){
				window.top.Working.showVoterList(msg);
			}
			
			else if (msg.nMsgId == COMMAND_CB_SHOW_UNSELECTEDMEMBER){
				window.top.Working.showUnselectedMember(msg);
			}
			else if (msg.nMsgId == COMMAND_CHANGE_TM_PRIVILEGES)
			{
				if (msg.sData == this.getUserId())
				{
					window.top.nTMPrivileges = msg.nRow;
					window.top.Working.updateButtonStatus();

					if (window.top.Working.hasControl() && (msg.nRow == TM_PRIVILEGES_VIEWER))
					{
						alert("Your project privileges have been changed to: Viewer");
						window.top.Working.releaseControl();
					}
				}
			}
			else if (msg.nMsgId == COMMAND_AI_ADD_NOTE)
			{
				window.top.Working.updateAICommentIcon(msg);
				window.top.Working.updateAICommentStuts(msg);
			}
			else if (msg.nMsgId == COMMAND_SET_BS_NEWIDEAIDS)
			{
				window.top.Working.setIdeaIDs("workingArea", msg);
			}
			//else if (msg.nMsgId == COMMAND_SET_AF_NEWIDEAIDS || msg.nMsgId == COMMAND_SETHEADERID)
			//{
			//	window.top.Working.setIdeaIDs("affinityArea", msg);
			//}
			else if (msg.nMsgId == COMMAND_UPDATE_FMEAINFO || msg.nMsgId == COMMAND_UPDATE_FMEAPARTICIPANT)
			{
				window.top.Working.updateFmeaInfo(msg);
			}
			else if (msg.nMsgId == COMMAND_UPDATE_FMEALIST)
			{
				window.top.Working.updateFmeaList(msg);

				if((msg.nCol > 3) && (msg.nCol < 7))
					window.top.Working.changeListNum(msg.nRow);
			}
			else if (msg.nMsgId == COMMAND_DELETE_ROW_FMEA)
			{
				window.top.Working.removeListRow(msg.nRow);
			}
			else if (msg.nMsgId == COMMAND_UPDATE_RCA_ACTION)
			{
				window.top.Working.updateActionList(msg);
			}
			else if (msg.nMsgId == COMMAND_FMEA_UPDATE_ACTION)
			{
				window.top.Working.updateNoteIcon(msg);
			}
			else if ((msg.nMsgId == COMMAND_REFRESH_MEETING))	//add by xiahaobo,01/18/2005,bug id 578,description:if delete ,refresh meeting
			{
				if (window.top.Working.bHasControl)				//whether user is editing
				{
					if(window.confirm("Another team member has changed one of the action items or one of agenda items. Do you want to reload this page?"))
						window.top.Working.refreshIfAtPage("Meeting.jsp") ;
				}
				else
					window.top.Working.refreshIfAtPage("Meeting.jsp");
			}
			else if(msg.nMsgId ==COMMAND_NotSaved)
				{
					//alert('The operation does not succeed');
					}
			else if ((msg.nMsgId == COMMAND_REFRESH_MEMBER))	//add by xiahaobo,01/18/2005,bug id 578,description:if delete ,refresh meeting
			{
				
				window.location.href= "ViewUGMembers.jsp?ugId=" + this.getProjectId() ;
			}
			else if (msg.nMsgId == COMMAND_SETCANDIDATEID)
			{
				//alert("msg.sData:" + msg.sData);
				window.top.Working.addNewCandidate(msg.sData);
			}
			else if (msg.nMsgId == COMMAND_SETCRITERIAID)
			{				
				window.top.Working.addNewCriteria(msg.sData);
			}
			else if (msg.nMsgId == COMMAND_SET_MS_ID)
			{				
				window.top.Working.insertRowManualStep(msg.sData);
			}
			else
			{
			
				// In some cases, the message should be processed by another
				// routine, not this general routine.
				// For example, an action that requires response from server.
				//bProcessed = false;
				//	alert("Un-handled message. Message = " + msg.nMsgId);
			}

},




  aboutMe: function() 
  {
 	alert('IPathMaker Ver3.0\nPMWObject:1.0\nAuth:SkyMark\nDate:08-2008');
  }
  
};


