

function watchitooShow(jsCallableNameOfWatchitooShowOutboundInterfaceFunction,jsCallableNameOfWatchitooShowSWFInboundAccessFunction,_baseURL)
{
	this.WatchitooShowSWFInboundAccessFunction=jsCallableNameOfWatchitooShowSWFInboundAccessFunction;
	this.WatchitooShowOutboundInterfaceFunction=jsCallableNameOfWatchitooShowOutboundInterfaceFunction;
	this.bOwnerChoseToEndTheSession=false;
	this.baseURL=_baseURL;
	
this.WatchitooShowInboundFunction = function (functionName,paramsObj)
{
	//alert("this.WatchitooShowInboundFunction - "+functionName);
	switch (functionName)
	{
		case "LoadWatchitooShow":
				return this.LoadWatchitooShow(paramsObj.userName,paramsObj.certificate,paramsObj);
			break;
			
	/*	// switching to internal calling this function, external calls are LoadExistingShow & CreateNewShow
		case "LoadShow":
			// need to check for the avaratURL & accountType. They may be present
			var accountType="";
			var avatarURL="";
			if(paramsObj.accountType&&paramsObj.accountType!='null'&&paramsObj.accountType.length>0)
				accountType=paramsObj.accountType;		
			//alert(accountType);				
						
			return this.LoadShow(paramsObj.tblGUID,paramsObj.ownerName,paramsObj.ownerNickName,paramsObj.userName,paramsObj.certificate,paramsObj.escapedSharedMediaInfo,paramsObj.avatarURL,paramsObj.encodedTableSettingsAsJsonFromDatabase,paramsObj.tableInitialStateSetting,paramsObj.tableState,paramsObj.fmsAddress,paramsObj.showSettingPublicOrPrivate,paramsObj.showAvatar,paramsObj.numShowViews,paramsObj.showTitle,paramsObj.showDescription,paramsObj.showAllCanControl,accountType);
		break;
	*/	
	};
}

this.OnUnhandledWatchitooShowOutboundInterfaceCall = function (functionName,paramsObj)
{
	// check the function name
	//alert(functionName);
	switch (functionName)
	{
		case "AddItemToScrollerSharedObject":
			return this.wi2_AddItemToScrollerSharedObject(paramsObj);
		break;
		case "RemoveItemFromScrollerSharedObject":
			return this.wi2_RemoveItemFromScrollerSharedObject(paramsObj);
		break;
		case "GetAvatarURL":
			return this.wi2_GetAvatarURL(paramsObj);
		break;
		case "SendTableSettingsCSVToServer":
			return this.wi2_SendTableSettingsCSVToServer(paramsObj);
		break;
		default:
			// forward anything else deirectly to the swf
			return WatchitooShowSWFInboundAccessFunction(functionName,paramsObj);
			break;
		break;
	}
}

this.wi2_SharingSessionSelfCheck = function ()
{
	var ss = getSWF("SharingSession");
	var returnValueFromSelfReadyCheck="";
	try{
		if(ss)
		{
			returnValueFromSelfReadyCheck=ss.SelfReadyCheck();
		}
	}
	catch(e){}
	return returnValueFromSelfReadyCheck;					
}

this.PreShowDestroy = function (bEndFMSSessionAlso)
{
	var swf=getSWF("SharingSession");
	if(!swf)
		return;
		
	swf.PreShowDestroy(bEndFMSSessionAlso);
}


this.wi2_popupwin = function (url,myname,w,h,s)
{ 
	var settings='height='+h+',width='+w+',scrollbars='+s+',toolbar=no,location=no,status=no,menubar=no,resizable=no,dependent=no';
	var openwin=window.open(url,myname,settings);
	return openwin;
}

this.wi2_synchronousRemoteGet = function (url){

	//alert(url);
	var returnString="";
	var xmlobj=null;
    // check for existing requests
    try{
        // instantiate object for Mozilla, Nestcape, etc.
        xmlobj=new XMLHttpRequest();
    }
    catch(e){
        try{
            // instantiate object for Internet Explorer
            xmlobj=new ActiveXObject('Microsoft.XMLHTTP');
        }
        catch(e){
            // Ajax is not supported by the browser
            xmlobj=null;
            return false;
        }
    }
    // open socket connection
    xmlobj.open('GET',url,false);
    // send GET request
    xmlobj.send(null);
	if (xmlobj.status >= 200&&xmlobj.status<300)
	{
		returnString=xmlobj.responseText;
	}
	return returnString;
}


this.wi2_DontDisplayBeforeUnloadWarning = function ()
{
	//alert("DontDisplayBeforeUnloadWarning");//555
	this.bOwnerChoseToEndTheSession=true;
}

this.isString = function(testObj) 
{
	if (typeof testObj == 'string') 
		return true;
		
	if (typeof testObj == 'object') 
	{  
		var criterion =testObj.constructor.toString().match(/string/i); 
		return (criterion != null);  
	}
	return false;
}



this.LoadWatchitooShow = function (userName,certificate,_paramsObj)
{
	//alert(certificate);
	//alert(userName);
	if(userName==null||userName.length==0||certificate==null||certificate.length==0)
		return "missing username or certificate";
		
	
	var paramsObj=null;
	
	if(this.isString(_paramsObj))
	{
		paramsObj=new Object;
		paramsObj.showGUID=_paramsObj;
	}
	else
	{
		paramsObj=_paramsObj;
	}
	//alert(paramsObj.showGUID);
	if(paramsObj.escapedSharedMediaInfo==null)
		paramsObj.escapedSharedMediaInfo=""; // this isnt needed for an existing show
	if(paramsObj.tableInitialStateSetting==null)
		paramsObj.tableInitialStateSetting=""; // not sure about the use for this
	
	//alert(paramsObj.escapedSharedMediaInfo);
	
	/*
	tblGUID,
	//_ownerName,
	_ownerNickName,
//	_userName,
//	_certificate,
	escapedSharedMediaInfo,
	_avatarURL,
	//encodedTableSettingsAsJsonFromDatabase,
	tableInitialStateSetting,
	//_tableState,
	//fmsAddress,
	//_showSettingPublicOrPrivate,
	//_showAvatar,
	//_numShowViews,
	//_showTitle,
	//_showDescription,
	//_showAllCanControl,
	_accountType
	*/
	
	//alert(paramsObj.ownerName);
	
	// if its an existing show and any of these params are missing, retrieve them
		if(paramsObj.showGUID&&paramsObj.showGUID.length>0)
		{
		if(paramsObj.fmsAddress==null||
			paramsObj.ownerName==null||
			paramsObj.tableState==null||
			paramsObj.encodedTableSettingsAsJsonFromDatabase==null||
			paramsObj.showSettingPublicOrPrivate==null||
			paramsObj.showAvatar==null||
			paramsObj.numShowViews==null||
			paramsObj.showTitle==null||
			paramsObj.showDescription==null||
			paramsObj.showAllCanControl==null)
			{
				//alert("getting show info");
				var tableInfo=this.getTableInfo(paramsObj.showGUID)
				// make sure its an existing show
				paramsObj.fmsAddress=tableInfo.fmsAddress
				paramsObj.ownerName=tableInfo.ownerName;
				paramsObj.tableState=tableInfo.tableState;
				paramsObj.encodedTableSettingsAsJsonFromDatabase=tableInfo.encodedTableSettingsAsJsonFromDatabase;
				paramsObj.showSettingPublicOrPrivate=tableInfo.showSettingPublicOrPrivate;
				paramsObj.showAvatar=tableInfo.showAvatar;
				paramsObj.numShowViews=tableInfo.numShowViews;
				paramsObj.showTitle=tableInfo.showTitle;
				paramsObj.showDescription=tableInfo.showDescription;
				paramsObj.showAllCanControl=tableInfo.showAllCanControl;
				
			}
		}
		else
		{
			// if the fms address isnt set get it here....we should have it returned from the register table instead!!
			if(paramsObj.fmsAddress==null||paramsObj.fmsAddress.length==0)
			{
				paramsObj.fmsAddress=this.getFMSAddress();
				//alert("fmsAddress="+paramsObj.fmsAddress);
			}
		}
	
		if(paramsObj.avatarURL==null||
			paramsObj.accountType==null||
			paramsObj.nickname==null)
		{
			//alert(paramsObj.userName);
			var userInfo=this.getUserInfo(userName);
			if(userInfo)
			{
				//retObj.userName=userName;
				paramsObj.nickname=userInfo.nickname;
				paramsObj.avatarURL=userInfo.avatarURL;
				//alert(paramsObj.avatarURL);
				//retObj.status=status;
				paramsObj.accountType=userInfo.userType;
				//alert(paramsObj.accountType);
				//retObj.sendNewsletter=sendNewsletter;
			}
		}
		
		if(paramsObj.ownerName==null||paramsObj.ownerName=='undefined'||paramsObj.ownerName.length==0)
		{
			paramsObj.ownerName=paramsObj.userName;
			paramsObj.ownerNickName=paramsObj.nickname;
			paramsObj.ownerAvatarURL=paramsObj.avatarURL;
			//alert(paramsObj.ownerAvatarURL);
		}
	
		if(paramsObj.ownerNickName==null||
			paramsObj.ownerAvatarURL==null)
		{
			//alert("getting owner info");
			var ownerInfo=this.getUserInfo(paramsObj.ownerName);
			if(ownerInfo)
			{
				paramsObj.ownerNickName=ownerInfo.nickname;
				paramsObj.ownerAvatarURL=ownerInfo.avatarURL;
				//alert(paramsObj.ownerAvatarURL);
			}
		}
		
		return this.LoadShow(userName,certificate,paramsObj);
}

this.CreateNewShow = function (userName,certificate,fmsAddress,escapedSharedMediaInfo,showInitString)
{
	
}

this.LoadShow = function (_userName,_certificate,paramsObj)
//tblGUID,_ownerName,_ownerNickName,_userName,_certificate,escapedSharedMediaInfo,_avatarURL,encodedTableSettingsAsJsonFromDatabase,tableInitialStateSetting,_tableState,fmsAddress,_showSettingPublicOrPrivate,_showAvatar,_numShowViews,_showTitle,_showDescription,_showAllCanControl,_accountType)//,userName,certificate)
{
	//alert("InitializeTable");//555
	//alert(_ownerNickName);//555
	//alert(escapedSharedMediaInfo);
	//alert("InitializeTable");
	//alert(baseURL);
	//alert(tblGUID);
	//alert(encodedTableSettingsAsJsonFromDatabase); //777
	//document["mocChatControl"]=new wi2ChatControl(baseURL,"",1000,false); // moved this to onload
	
	// example of a table url. going to assume that ownerName, userName, sharedMediaInfo, tableGUID could all be empty
	//http://www.meetoncircle.com/mikesdev/moc/chatTable/chatShareTable2.php?tableGUID=YEMCExyfG-T5Mi-fkS2-S2ti-lDlqn9HUhXLY&ownerName=user8&sharedMediaInfo=%3cMeetOnCircleContent+type%3d%22youtube%5fvideo%22+id%3d%22QfC2nL%2dIFxE%22%2f%3e
	//alert(escapedSharedMediaInfo);
	
	/* // not doing this here...need to do it inside the sharingsession
	// may be an owner change
	var isOwnerChange=false;
	var previousOwnerName="":
	if(paramsObj.isOwnerChange)
		bIsOwnerChange=paramsObj.isOwnerChange;
	if(paramsObj.previousOwnerName)
		previousOwnerName=paramsObj.previousOwnerName;
	*/
		
	var accountType=paramsObj.accountType;//_accountType;
	var ownerName=paramsObj.ownerName;//_ownerName;
	var ownerNickName=paramsObj.ownerNickName;//_ownerNickName;
	var userName=_userName;//_userName;
	var certificate=_certificate;
	var avatarURL=paramsObj.avatarURL;//_avatarURL;
	var showSettingPublicOrPrivate=paramsObj.showSettingPublicOrPrivate;//_showSettingPublicOrPrivate;
	var showAvatar=paramsObj.showAvatar;//_showAvatar;
	var numShowViews=paramsObj.numShowViews;//_numShowViews;
	var showTitle=paramsObj.showTitle;//_showTitle;
	var showDescription=paramsObj.showDescription;//_showDescription;
	var showAllCanControl=paramsObj.showAllCanControl;//_showAllCanControl;
	var show_state=paramsObj.tableState;//_tableState;
	var tblGUID=paramsObj.showGUID;
	var escapedSharedMediaInfo=paramsObj.escapedSharedMediaInfo;
	var encodedTableSettingsAsJsonFromDatabase=paramsObj.encodedTableSettingsAsJsonFromDatabase;
	var tableInitialStateSetting=paramsObj.tableInitialStateSetting;
	var fmsAddress=paramsObj.fmsAddress;
	var ownerAvatarURL=paramsObj.ownerAvatarURL;
	
	//alert(paramsObj.escapedSharedMediaInfo);
	
	var userInfo;

	//alert(avatarURL);
	if(ownerName==null||ownerName=='undefined')
		ownerName="";
	
	// moved this code to the InitiateSignIn function

	//alert(fmsAddress); //555
	//alert(tblGUID);//555
	//alert(ownerName);
	
	if(tblGUID.length==0) // if table guid is blank, this is a brand new table
	{
		//alert(userName);
		
		//else
		//	ownerName=tempUserName;
		
		
		// if the guid is blank, neet to call registerTable to register the new table
		
		if(tblGUID.length==0)
		{
		
			var url=this.baseURL;
			url+="moc/dbaseRoutines/registerTable.php?ownerID=";
			url+=ownerName;
			url+="&rand="; // prevents caching
			url+=new Date().getTime()
			//url+="&initialParticipants=";
			//url+="";
			url+="&certificate=";
			url+=certificate;
			//url+="&windowURL=";
			//url+="";
			url+="&tableVersion=";
			url+="";
			//url+="&windowInfo=";
			//url+=ownerName;
			// temp set the windowInfo to the fms server ip
			//url+="";
			url+="&tableInfo=";
			
			//escapedTableInfo=pTableInfo->initializationString.c_str();
			//URLEscape::URLEscapeString(escapedTableInfo);
			//url+=escapedTableInfo.c_str();
			url+="";//pTableInfo->initializationString.c_str();
			
			url+="&flashMediaURL=";
			url+=fmsAddress;
			
			//alert(g_fmsIPAddress);
			//alert(url);

			var newGuid = this.wi2_synchronousRemoteGet(url);
			// need to check the return reslults here, it should return an error indication if the user
			// has reached their limit of open active tables
			// hard code show_state open for now
			if(newGuid=="-2")
				show_state="failed_to_register_show|-2";
			else
				show_state="open";
			
			
			tblGUID=newGuid;
			//alert(newGuid);
			if(tblGUID=="-1")
			{
				return "unable to register new show";
			}
		}
		
	}
	//else
	//{
	//	if(userName!=ownerName) // if not the owner, update the view count on the server
	//	{
	if(tblGUID.length>0&&tblGUID!="-1")
	{
			// update the table views
			var url=this.baseURL;
			url+="moc/dbaseRoutines/updateTableViews.php?tableID=";
			url+=tblGUID;
			//alert(url);//555
			var currentNumViews = this.wi2_synchronousRemoteGet(url);
			//alert(currentNumViews);
	}
	//	}
	//}
	//alert(userName);//555
	
	//if(userName.length==0)
	//	userName=tempUserName;
	
	//alert(userName);
	
	//wi2if(login)
	//wi2{
	//wi2	userInfo=login.getUserInfo();
	//wi2	accountType=userInfo.accountType;
	//wi2}
		
	//alert(accountType);//555
	//if(userName==ownerName&&accountType=="Member")
	//	ShowEndSessionButton(true);
	//else 
	//	ShowEndSessionButton(false);
		
	
	//alert("Calling new wi2Table with params: \nbaseURL="+this.baseURL+" \ntblGUID="+tblGUID+" \nownerName="+ownerName+" \nownerNickName="+ownerNickName+" \nuserName="+userName+" \ncertificate="+certificate+" \nescapedSharedMediaInfo="+escapedSharedMediaInfo+" \naccountType="+accountType+" \navatarURL="+avatarURL+" \nencodedTableSettingsAsJsonFromDatabase="+encodedTableSettingsAsJsonFromDatabase+" \ntableInitialStateSetting="+tableInitialStateSetting); //555
	
	mocTable=new wi2Table(this.baseURL,tblGUID,ownerName,ownerNickName,userName,certificate,escapedSharedMediaInfo,accountType,avatarURL,encodedTableSettingsAsJsonFromDatabase,tableInitialStateSetting);
	//alert(paramsObj.escapedSharedMediaInfo);
	//alert("mocTable created");
	// set the table settings if they were read from the server
	//alert(showSettingPublicOrPrivate);
	if(showSettingPublicOrPrivate!=null&&showSettingPublicOrPrivate!='undefined'&&showSettingPublicOrPrivate.length>0)
	{
		//alert(showSettingPublicOrPrivate);
		// need to build the settings
		var settings="";
		if(showSettingPublicOrPrivate=="public")
			settings+="public";
		else
			settings+="private";
		settings+=",";

		settings+=showDescription;
		settings+=",";
		settings+=showTitle;
		settings+=",";
		if(showAllCanControl=="1")
			settings+="true";
		else
			settings+="false";
		
		//alert("Setting table settings to: "+settings);
		//"private,"+nameToUse+"'s Show,Come and join "+nameToUse+"'s show!,true"; // intialil settings
		mocTable.PutTableSettingsCSV(settings,false);
	}
	//alert(tblGUID);
	
	//this.loadPage();
	var tblguid=mocTable.GetTableGUID();
	var un=mocTable.GetUsername();
	var cert=mocTable.GetCertificate();
	var nn=mocTable.GetNickname();
	var acctType=mocTable.GetAccountType();
	var on=mocTable.GetOwnername();
	var onn=mocTable.GetOwnerNickName();
	var avt=mocTable.GetUserAvatarURL();
	var itss=mocTable.GetInitialTableStateSetting();
	
	//this.WatchitooShowSWFInboundAccessFunction=jsCallableNameOfWatchitooShowSWFInboundAccessFunction;
	//this.WatchitooShowOutboundInterfaceFunction=jsCallableNameOfWatchitooShowOutboundInterfaceFunction;
	
	//UpdateBrowserTitleWithProgress(0); // puts title back to normal
	
	//alert(tblguid);
	// now need to call setSessionInfo
	
	var paramsObj2=new Object();
	paramsObj2.tblGuid=tblguid;
	paramsObj2.userName=un;
	paramsObj2.certificate=cert;
	paramsObj2.nickName=nn;
	paramsObj2.accountType=acctType;
	paramsObj2.baseURL=this.baseURL;
	//alert(this.baseURL);
	paramsObj2.ownerName=on;
	paramsObj2.ownerNickName=onn;
	paramsObj2.ownerAvatarURL=ownerAvatarURL;
	paramsObj2.avatarURL=avt;
	//alert(paramsObj2.avatarURL);
	paramsObj2.fmsAddress=fmsAddress;
	paramsObj2.tableInitialState=itss;
	paramsObj2.showState=show_state;
	paramsObj2.escapedSharedMediaInfo=escapedSharedMediaInfo;
	paramsObj2.encodedTableSettingsAsJsonFromDatabase=encodedTableSettingsAsJsonFromDatabase;
	
	//alert(paramsObj2.escapedSharedMediaInfo);
	
	this.WatchitooShowSWFInboundAccessFunction("SetSessionInfo",paramsObj2);
	/*
	{
	tblguid,
	un,
	cert,
	nn,
	acctType,
	baseURL,
	on,
	onn,
	avt,
	g_fmsIPAddress,
	itss,
	show_state
	}
	);
	*/
	
}

this.getTableInfo = function(tableGuid)
{
	var url=this.baseURL+"moc/dbaseRoutines/getTableInfo.php?tableID="+tableGuid;
	
	//alert(url);
	var returnString=this.wi2_synchronousRemoteGet(url);

	// save the json settigns for use by javascript
	var escaped_table_settings_as_json=escape(returnString);
	//alert(escaped_table_settings_as_json);
	var owner_name="";
	var fms_ip_address="";
	var show_setting_public_or_private="";
	var showAvatar="";
	var numShowViews="";
	var showTitle="";
	var showDescription="";
	var showAllCanControl="";
	
	var table_state="unknown";
	//alert(returnString);
	if(returnString.length>0&&returnString!="-1")
	{
		var returnedArray=$.evalJSON(returnString);
		//alert(returnedArray);
		//var returnString2=returnString.substr(1,returnString.length-2);
		//var returnedArray=returnString2.split ( "," );

		if(returnedArray.length>7)
		{
			var temp=returnedArray[0];//.substr(1,returnedArray[0].length-2);
			if(temp.length>0)
				owner_name=temp;

			
			temp=returnedArray[3];//.substr(1,returnedArray[3].length-2);
			if(temp.length>0)
				fms_ip_address=temp;
				
				
			table_state=returnedArray[2];//.substr(1,returnedArray[2].length-2);

			
			temp=returnedArray[1];//.substr(1,returnedArray[1].length-2);
			if(temp.length>0)
				show_setting_public_or_private=temp;

				
			temp=returnedArray[4];//.substr(1,returnedArray[4].length-2);
			if(temp.length>0)
				showAvatar=temp;

			
			temp=returnedArray[5];//.substr(1,returnedArray[5].length-2);
			if(temp.length>0)
				numShowViews=temp;

				
			temp=returnedArray[6];//.substr(1,returnedArray[6].length-2);
			if(temp.length>0)
				showTitle=temp;

			temp=returnedArray[7];//.substr(1,returnedArray[7].length-2);
			if(temp.length>0)
				showDescription=temp;

				
			temp=returnedArray[8];//.substr(1,returnedArray[8].length-2);
			if(temp.length>0)
				showAllCanControl=temp;

				
			//4 avatar
			//5 # views
			//6 title
			//7 description
			//8 all can control
		}	
		else
		{
			return null;
		}
	}
	var retObj=new Object();
	retObj.fmsAddress=fms_ip_address;
	retObj.ownerName=owner_name;
	retObj.tableState=table_state;
	retObj.encodedTableSettingsAsJsonFromDatabase=escaped_table_settings_as_json;
	retObj.showSettingPublicOrPrivate=show_setting_public_or_private;
	retObj.showAvatar=showAvatar;
	retObj.numShowViews=numShowViews;
	retObj.showTitle=showTitle;
	retObj.showDescription=showDescription;
	retObj.showAllCanControl=showAllCanControl;
	
	return retObj;
}

this.wi2_EncryptPassword = function (password)
{
	//alert(password);
	// need to get a key
	var url=this.baseURL+"framework/getKey.php";
	//alert(url);
	var key=this.wi2_synchronousRemoteGet(url);
	//alert(key);
	// encrypt password
	var ciphertext = this.wi2_des(key, password, 1, 0);
	//alert(ciphertext);
	var pass = key + this.wi2_stringToHex(ciphertext);
	//alert(pass);
	return pass;
}
//-----------------------------------------------
//des
//this takes the key, the message, and whether to encrypt or decrypt
//var ciphertext = des (key, message, 1, 0);
//document.writeln ("DES Test: " + stringToHex (ciphertext));
this.wi2_des  = function (key, message, encrypt, mode, iv, padding) {
  //declaring this locally speeds things up a bit
  var spfunction1 = new Array (0x1010400,0,0x10000,0x1010404,0x1010004,0x10404,0x4,0x10000,0x400,0x1010400,0x1010404,0x400,0x1000404,0x1010004,0x1000000,0x4,0x404,0x1000400,0x1000400,0x10400,0x10400,0x1010000,0x1010000,0x1000404,0x10004,0x1000004,0x1000004,0x10004,0,0x404,0x10404,0x1000000,0x10000,0x1010404,0x4,0x1010000,0x1010400,0x1000000,0x1000000,0x400,0x1010004,0x10000,0x10400,0x1000004,0x400,0x4,0x1000404,0x10404,0x1010404,0x10004,0x1010000,0x1000404,0x1000004,0x404,0x10404,0x1010400,0x404,0x1000400,0x1000400,0,0x10004,0x10400,0,0x1010004);
  var spfunction2 = new Array (-0x7fef7fe0,-0x7fff8000,0x8000,0x108020,0x100000,0x20,-0x7fefffe0,-0x7fff7fe0,-0x7fffffe0,-0x7fef7fe0,-0x7fef8000,-0x80000000,-0x7fff8000,0x100000,0x20,-0x7fefffe0,0x108000,0x100020,-0x7fff7fe0,0,-0x80000000,0x8000,0x108020,-0x7ff00000,0x100020,-0x7fffffe0,0,0x108000,0x8020,-0x7fef8000,-0x7ff00000,0x8020,0,0x108020,-0x7fefffe0,0x100000,-0x7fff7fe0,-0x7ff00000,-0x7fef8000,0x8000,-0x7ff00000,-0x7fff8000,0x20,-0x7fef7fe0,0x108020,0x20,0x8000,-0x80000000,0x8020,-0x7fef8000,0x100000,-0x7fffffe0,0x100020,-0x7fff7fe0,-0x7fffffe0,0x100020,0x108000,0,-0x7fff8000,0x8020,-0x80000000,-0x7fefffe0,-0x7fef7fe0,0x108000);
  var spfunction3 = new Array (0x208,0x8020200,0,0x8020008,0x8000200,0,0x20208,0x8000200,0x20008,0x8000008,0x8000008,0x20000,0x8020208,0x20008,0x8020000,0x208,0x8000000,0x8,0x8020200,0x200,0x20200,0x8020000,0x8020008,0x20208,0x8000208,0x20200,0x20000,0x8000208,0x8,0x8020208,0x200,0x8000000,0x8020200,0x8000000,0x20008,0x208,0x20000,0x8020200,0x8000200,0,0x200,0x20008,0x8020208,0x8000200,0x8000008,0x200,0,0x8020008,0x8000208,0x20000,0x8000000,0x8020208,0x8,0x20208,0x20200,0x8000008,0x8020000,0x8000208,0x208,0x8020000,0x20208,0x8,0x8020008,0x20200);
  var spfunction4 = new Array (0x802001,0x2081,0x2081,0x80,0x802080,0x800081,0x800001,0x2001,0,0x802000,0x802000,0x802081,0x81,0,0x800080,0x800001,0x1,0x2000,0x800000,0x802001,0x80,0x800000,0x2001,0x2080,0x800081,0x1,0x2080,0x800080,0x2000,0x802080,0x802081,0x81,0x800080,0x800001,0x802000,0x802081,0x81,0,0,0x802000,0x2080,0x800080,0x800081,0x1,0x802001,0x2081,0x2081,0x80,0x802081,0x81,0x1,0x2000,0x800001,0x2001,0x802080,0x800081,0x2001,0x2080,0x800000,0x802001,0x80,0x800000,0x2000,0x802080);
  var spfunction5 = new Array (0x100,0x2080100,0x2080000,0x42000100,0x80000,0x100,0x40000000,0x2080000,0x40080100,0x80000,0x2000100,0x40080100,0x42000100,0x42080000,0x80100,0x40000000,0x2000000,0x40080000,0x40080000,0,0x40000100,0x42080100,0x42080100,0x2000100,0x42080000,0x40000100,0,0x42000000,0x2080100,0x2000000,0x42000000,0x80100,0x80000,0x42000100,0x100,0x2000000,0x40000000,0x2080000,0x42000100,0x40080100,0x2000100,0x40000000,0x42080000,0x2080100,0x40080100,0x100,0x2000000,0x42080000,0x42080100,0x80100,0x42000000,0x42080100,0x2080000,0,0x40080000,0x42000000,0x80100,0x2000100,0x40000100,0x80000,0,0x40080000,0x2080100,0x40000100);
  var spfunction6 = new Array (0x20000010,0x20400000,0x4000,0x20404010,0x20400000,0x10,0x20404010,0x400000,0x20004000,0x404010,0x400000,0x20000010,0x400010,0x20004000,0x20000000,0x4010,0,0x400010,0x20004010,0x4000,0x404000,0x20004010,0x10,0x20400010,0x20400010,0,0x404010,0x20404000,0x4010,0x404000,0x20404000,0x20000000,0x20004000,0x10,0x20400010,0x404000,0x20404010,0x400000,0x4010,0x20000010,0x400000,0x20004000,0x20000000,0x4010,0x20000010,0x20404010,0x404000,0x20400000,0x404010,0x20404000,0,0x20400010,0x10,0x4000,0x20400000,0x404010,0x4000,0x400010,0x20004010,0,0x20404000,0x20000000,0x400010,0x20004010);
  var spfunction7 = new Array (0x200000,0x4200002,0x4000802,0,0x800,0x4000802,0x200802,0x4200800,0x4200802,0x200000,0,0x4000002,0x2,0x4000000,0x4200002,0x802,0x4000800,0x200802,0x200002,0x4000800,0x4000002,0x4200000,0x4200800,0x200002,0x4200000,0x800,0x802,0x4200802,0x200800,0x2,0x4000000,0x200800,0x4000000,0x200800,0x200000,0x4000802,0x4000802,0x4200002,0x4200002,0x2,0x200002,0x4000000,0x4000800,0x200000,0x4200800,0x802,0x200802,0x4200800,0x802,0x4000002,0x4200802,0x4200000,0x200800,0,0x2,0x4200802,0,0x200802,0x4200000,0x800,0x4000002,0x4000800,0x800,0x200002);
  var spfunction8 = new Array (0x10001040,0x1000,0x40000,0x10041040,0x10000000,0x10001040,0x40,0x10000000,0x40040,0x10040000,0x10041040,0x41000,0x10041000,0x41040,0x1000,0x40,0x10040000,0x10000040,0x10001000,0x1040,0x41000,0x40040,0x10040040,0x10041000,0x1040,0,0,0x10040040,0x10000040,0x10001000,0x41040,0x40000,0x41040,0x40000,0x10041000,0x1000,0x40,0x10040040,0x1000,0x41040,0x10001000,0x40,0x10000040,0x10040000,0x10040040,0x10000000,0x40000,0x10001040,0,0x10041040,0x40040,0x10000040,0x10040000,0x10001000,0x10001040,0,0x10041040,0x41000,0x41000,0x1040,0x1040,0x40040,0x10000000,0x10041000);

  //create the 16 or 48 subkeys we will need
  var keys = des_createKeys (key);
  var m=0, i, j, temp, temp2, right1, right2, left, right, looping;
  var cbcleft, cbcleft2, cbcright, cbcright2
  var endloop, loopinc;
  var len = message.length;
  var chunk = 0;
  //set up the loops for single and triple des
  var iterations = keys.length == 32 ? 3 : 9; //single or triple des
  if (iterations == 3) {looping = encrypt ? new Array (0, 32, 2) : new Array (30, -2, -2);}
  else {looping = encrypt ? new Array (0, 32, 2, 62, 30, -2, 64, 96, 2) : new Array (94, 62, -2, 32, 64, 2, 30, -2, -2);}

  //pad the message depending on the padding parameter
  if (padding == 2) message += "        "; //pad the message with spaces
  else if (padding == 1) {temp = 8-(len%8); message += String.fromCharCode (temp,temp,temp,temp,temp,temp,temp,temp); if (temp==8) len+=8;} //PKCS7 padding
  else if (!padding) message += "\0\0\0\0\0\0\0\0"; //pad the message out with null bytes

  //store the result here
  result = "";
  tempresult = "";

  if (mode == 1) { //CBC mode
    cbcleft = (iv.charCodeAt(m++) << 24) | (iv.charCodeAt(m++) << 16) | (iv.charCodeAt(m++) << 8) | iv.charCodeAt(m++);
    cbcright = (iv.charCodeAt(m++) << 24) | (iv.charCodeAt(m++) << 16) | (iv.charCodeAt(m++) << 8) | iv.charCodeAt(m++);
    m=0;
  }

  //loop through each 64 bit chunk of the message
  while (m < len) {
    left = (message.charCodeAt(m++) << 24) | (message.charCodeAt(m++) << 16) | (message.charCodeAt(m++) << 8) | message.charCodeAt(m++);
    right = (message.charCodeAt(m++) << 24) | (message.charCodeAt(m++) << 16) | (message.charCodeAt(m++) << 8) | message.charCodeAt(m++);

    //for Cipher Block Chaining mode, xor the message with the previous result
    if (mode == 1) {if (encrypt) {left ^= cbcleft; right ^= cbcright;} else {cbcleft2 = cbcleft; cbcright2 = cbcright; cbcleft = left; cbcright = right;}}

    //first each 64 but chunk of the message must be permuted according to IP
    temp = ((left >>> 4) ^ right) & 0x0f0f0f0f; right ^= temp; left ^= (temp << 4);
    temp = ((left >>> 16) ^ right) & 0x0000ffff; right ^= temp; left ^= (temp << 16);
    temp = ((right >>> 2) ^ left) & 0x33333333; left ^= temp; right ^= (temp << 2);
    temp = ((right >>> 8) ^ left) & 0x00ff00ff; left ^= temp; right ^= (temp << 8);
    temp = ((left >>> 1) ^ right) & 0x55555555; right ^= temp; left ^= (temp << 1);

    left = ((left << 1) | (left >>> 31)); 
    right = ((right << 1) | (right >>> 31)); 

    //do this either 1 or 3 times for each chunk of the message
    for (j=0; j<iterations; j+=3) {
      endloop = looping[j+1];
      loopinc = looping[j+2];
      //now go through and perform the encryption or decryption  
      for (i=looping[j]; i!=endloop; i+=loopinc) { //for efficiency
        right1 = right ^ keys[i]; 
        right2 = ((right >>> 4) | (right << 28)) ^ keys[i+1];
        //the result is attained by passing these bytes through the S selection functions
        temp = left;
        left = right;
        right = temp ^ (spfunction2[(right1 >>> 24) & 0x3f] | spfunction4[(right1 >>> 16) & 0x3f]
              | spfunction6[(right1 >>>  8) & 0x3f] | spfunction8[right1 & 0x3f]
              | spfunction1[(right2 >>> 24) & 0x3f] | spfunction3[(right2 >>> 16) & 0x3f]
              | spfunction5[(right2 >>>  8) & 0x3f] | spfunction7[right2 & 0x3f]);
      }
      temp = left; left = right; right = temp; //unreverse left and right
    } //for either 1 or 3 iterations

    //move then each one bit to the right
    left = ((left >>> 1) | (left << 31)); 
    right = ((right >>> 1) | (right << 31)); 

    //now perform IP-1, which is IP in the opposite direction
    temp = ((left >>> 1) ^ right) & 0x55555555; right ^= temp; left ^= (temp << 1);
    temp = ((right >>> 8) ^ left) & 0x00ff00ff; left ^= temp; right ^= (temp << 8);
    temp = ((right >>> 2) ^ left) & 0x33333333; left ^= temp; right ^= (temp << 2);
    temp = ((left >>> 16) ^ right) & 0x0000ffff; right ^= temp; left ^= (temp << 16);
    temp = ((left >>> 4) ^ right) & 0x0f0f0f0f; right ^= temp; left ^= (temp << 4);

    //for Cipher Block Chaining mode, xor the message with the previous result
    if (mode == 1) {if (encrypt) {cbcleft = left; cbcright = right;} else {left ^= cbcleft2; right ^= cbcright2;}}
    tempresult += String.fromCharCode ((left>>>24), ((left>>>16) & 0xff), ((left>>>8) & 0xff), (left & 0xff), (right>>>24), ((right>>>16) & 0xff), ((right>>>8) & 0xff), (right & 0xff));

    chunk += 8;
    if (chunk == 512) {result += tempresult; tempresult = ""; chunk = 0;}
  } //for every 8 characters, or 64 bits in the message

  //return the result as an array
  return result + tempresult;
} //end of des

//des_createKeys
//this takes as input a 64 bit key (even though only 56 bits are used)
//as an array of 2 integers, and returns 16 48 bit keys
this.des_createKeys  = function (key) {
  //declaring this locally speeds things up a bit
  pc2bytes0  = new Array (0,0x4,0x20000000,0x20000004,0x10000,0x10004,0x20010000,0x20010004,0x200,0x204,0x20000200,0x20000204,0x10200,0x10204,0x20010200,0x20010204);
  pc2bytes1  = new Array (0,0x1,0x100000,0x100001,0x4000000,0x4000001,0x4100000,0x4100001,0x100,0x101,0x100100,0x100101,0x4000100,0x4000101,0x4100100,0x4100101);
  pc2bytes2  = new Array (0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808,0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808);
  pc2bytes3  = new Array (0,0x200000,0x8000000,0x8200000,0x2000,0x202000,0x8002000,0x8202000,0x20000,0x220000,0x8020000,0x8220000,0x22000,0x222000,0x8022000,0x8222000);
  pc2bytes4  = new Array (0,0x40000,0x10,0x40010,0,0x40000,0x10,0x40010,0x1000,0x41000,0x1010,0x41010,0x1000,0x41000,0x1010,0x41010);
  pc2bytes5  = new Array (0,0x400,0x20,0x420,0,0x400,0x20,0x420,0x2000000,0x2000400,0x2000020,0x2000420,0x2000000,0x2000400,0x2000020,0x2000420);
  pc2bytes6  = new Array (0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002,0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002);
  pc2bytes7  = new Array (0,0x10000,0x800,0x10800,0x20000000,0x20010000,0x20000800,0x20010800,0x20000,0x30000,0x20800,0x30800,0x20020000,0x20030000,0x20020800,0x20030800);
  pc2bytes8  = new Array (0,0x40000,0,0x40000,0x2,0x40002,0x2,0x40002,0x2000000,0x2040000,0x2000000,0x2040000,0x2000002,0x2040002,0x2000002,0x2040002);
  pc2bytes9  = new Array (0,0x10000000,0x8,0x10000008,0,0x10000000,0x8,0x10000008,0x400,0x10000400,0x408,0x10000408,0x400,0x10000400,0x408,0x10000408);
  pc2bytes10 = new Array (0,0x20,0,0x20,0x100000,0x100020,0x100000,0x100020,0x2000,0x2020,0x2000,0x2020,0x102000,0x102020,0x102000,0x102020);
  pc2bytes11 = new Array (0,0x1000000,0x200,0x1000200,0x200000,0x1200000,0x200200,0x1200200,0x4000000,0x5000000,0x4000200,0x5000200,0x4200000,0x5200000,0x4200200,0x5200200);
  pc2bytes12 = new Array (0,0x1000,0x8000000,0x8001000,0x80000,0x81000,0x8080000,0x8081000,0x10,0x1010,0x8000010,0x8001010,0x80010,0x81010,0x8080010,0x8081010);
  pc2bytes13 = new Array (0,0x4,0x100,0x104,0,0x4,0x100,0x104,0x1,0x5,0x101,0x105,0x1,0x5,0x101,0x105);

  //how many iterations (1 for des, 3 for triple des)
  var iterations = key.length > 8 ? 3 : 1; //changed by Paul 16/6/2007 to use Triple DES for 9+ byte keys
  //stores the return keys
  var keys = new Array (32 * iterations);
  //now define the left shifts which need to be done
  var shifts = new Array (0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0);
  //other variables
  var lefttemp, righttemp, m=0, n=0, temp;

  for (var j=0; j<iterations; j++) { //either 1 or 3 iterations
    left = (key.charCodeAt(m++) << 24) | (key.charCodeAt(m++) << 16) | (key.charCodeAt(m++) << 8) | key.charCodeAt(m++);
    right = (key.charCodeAt(m++) << 24) | (key.charCodeAt(m++) << 16) | (key.charCodeAt(m++) << 8) | key.charCodeAt(m++);

    temp = ((left >>> 4) ^ right) & 0x0f0f0f0f; right ^= temp; left ^= (temp << 4);
    temp = ((right >>> -16) ^ left) & 0x0000ffff; left ^= temp; right ^= (temp << -16);
    temp = ((left >>> 2) ^ right) & 0x33333333; right ^= temp; left ^= (temp << 2);
    temp = ((right >>> -16) ^ left) & 0x0000ffff; left ^= temp; right ^= (temp << -16);
    temp = ((left >>> 1) ^ right) & 0x55555555; right ^= temp; left ^= (temp << 1);
    temp = ((right >>> 8) ^ left) & 0x00ff00ff; left ^= temp; right ^= (temp << 8);
    temp = ((left >>> 1) ^ right) & 0x55555555; right ^= temp; left ^= (temp << 1);

    //the right side needs to be shifted and to get the last four bits of the left side
    temp = (left << 8) | ((right >>> 20) & 0x000000f0);
    //left needs to be put upside down
    left = (right << 24) | ((right << 8) & 0xff0000) | ((right >>> 8) & 0xff00) | ((right >>> 24) & 0xf0);
    right = temp;

    //now go through and perform these shifts on the left and right keys
    for (i=0; i < shifts.length; i++) {
      //shift the keys either one or two bits to the left
      if (shifts[i]) {left = (left << 2) | (left >>> 26); right = (right << 2) | (right >>> 26);}
      else {left = (left << 1) | (left >>> 27); right = (right << 1) | (right >>> 27);}
      left &= -0xf; right &= -0xf;

      //now apply PC-2, in such a way that E is easier when encrypting or decrypting
      //this conversion will look like PC-2 except only the last 6 bits of each byte are used
      //rather than 48 consecutive bits and the order of lines will be according to 
      //how the S selection functions will be applied: S2, S4, S6, S8, S1, S3, S5, S7
      lefttemp = pc2bytes0[left >>> 28] | pc2bytes1[(left >>> 24) & 0xf]
              | pc2bytes2[(left >>> 20) & 0xf] | pc2bytes3[(left >>> 16) & 0xf]
              | pc2bytes4[(left >>> 12) & 0xf] | pc2bytes5[(left >>> 8) & 0xf]
              | pc2bytes6[(left >>> 4) & 0xf];
      righttemp = pc2bytes7[right >>> 28] | pc2bytes8[(right >>> 24) & 0xf]
                | pc2bytes9[(right >>> 20) & 0xf] | pc2bytes10[(right >>> 16) & 0xf]
                | pc2bytes11[(right >>> 12) & 0xf] | pc2bytes12[(right >>> 8) & 0xf]
                | pc2bytes13[(right >>> 4) & 0xf];
      temp = ((righttemp >>> 16) ^ lefttemp) & 0x0000ffff; 
      keys[n++] = lefttemp ^ temp; keys[n++] = righttemp ^ (temp << 16);
    }
  } //for each iterations
  //return the keys we've created
  return keys;
} //end of des_createKeys

this.wi2_stringToHex  = function (s) {
  var r = "0x";
  var hexes = new Array ("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
  for (var i=0; i<s.length; i++) {r += hexes [s.charCodeAt(i) >> 4] + hexes [s.charCodeAt(i) & 0xf];}
  return r;
}

this.getFMSAddress = function()
{
	var url=this.baseURL+"moc/dbaseRoutines/getMediaServerURL.php";
	var returnString=this.wi2_synchronousRemoteGet(url);
	return returnString;
}

this.GetAvatarURLWithDimensions = function(_avatarURL,dimension,bMakeUnique)
{
	//return _avatarURL;
	if(!bMakeUnique) { //If the optional argument is not there, create a new variable with that name.
		var bMakeUnique = false;
	}

	
	if(_avatarURL==null||_avatarURL.length==0)
		return "";

	var lcAvatarURL=_avatarURL.toLowerCase();
			

	//http://192.168.0.106/content/memberAvatars/mikemarsico@juno.com.jpg?rand=1247821274695
	// find either the .jp, .gif, .swf
	var extensionWithDot="";
	var extensionOffset=lcAvatarURL.lastIndexOf(".jpg");
	
	if(extensionOffset>0)
	{	    		
		extensionWithDot=_avatarURL.substr(	extensionOffset,4);
	}
	else
	{
		extensionOffset=lcAvatarURL.lastIndexOf(".jpeg");
		if(extensionOffset>0)
		{	    	
			extensionWithDot=_avatarURL.substr(	extensionOffset,5);
		}
		else
		{
			extensionOffset=lcAvatarURL.lastIndexOf(".swf");
			if(extensionOffset>0)
			{	    	
				extensionWithDot=_avatarURL.substr(	extensionOffset,4);
			}
			else
			{
				extensionOffset=lcAvatarURL.lastIndexOf(".gif");
				if(extensionOffset>0)
				{	    	
					extensionWithDot=_avatarURL.substr(	extensionOffset,4);
				}
			}
		}
	}	
	
	if(extensionOffset<0&&extensionWithDot.length==0)
		return _avatarURL+(bMakeUnique?"?rand="+new Date().getTime().toString():"");
		
	

	var newURL=_avatarURL.substr(0,extensionOffset);
	
	// temp /////////////////////////////
	var lastSlash=newURL.lastIndexOf("/");
	if(lastSlash<0||extensionOffset<lastSlash)
		return _avatarURL+(bMakeUnique?"?rand="+new Date().getTime().toString():"");
		
	var imageName=newURL.substr(lastSlash+1,(extensionOffset-lastSlash)-1);
	// if this string has no periods, and is either 10 chars long, or is equal to "defaultAvatar"
	// then its an old style, just return the original url
	if((imageName.indexOf(".")==-1&&imageName.length==10)||imageName.toLowerCase()=="dafaultavatar")
		return newURL+extensionWithDot+(bMakeUnique?"?rand="+new Date().getTime().toString():"");//_avatarURL;
	    	////////////////////////////////////////
			
	if(newURL.length>0)
	{
		while(isNaN(parseInt(newURL.substr(newURL.length-1,1)))==false)
			newURL=newURL.substr(0,newURL.length-1);
	}
	
	if(newURL.substr(newURL.length-1,1)==".")
		newURL=newURL.substr(0,newURL.length-1);
		
	// temp extract just find the filename without the extension to test for old style
	// avatars
	var lastSlash=newURL.lastIndexOf("/");
	if(lastSlash<0||extensionOffset<lastSlash)
		return _avatarURL+(bMakeUnique?"?rand="+new Date().getTime().toString():"");
		
	var imageName=newURL.substr(lastSlash+1,(extensionOffset-lastSlash)-1);
	// if this string has no periods, and is either 10 chars long, or is equal to "defaultAvatar"
	// then its an old style, just return the original url
	if((imageName.indexOf(".")==-1&&imageName.length==10)||imageName.toLowerCase()=="dafaultavatar")
		return newURL+extensionWithDot+(bMakeUnique?"?rand="+new Date().getTime().toString():"");//_avatarURL;
	
	if(dimension>0)
	{
		// overcome the fact that 56x56 seems to be not created
		//if(dimension==56)
		//	newURL+=(".78");
		//else
			newURL+=("."+dimension.toString());
	}
	newURL+=extensionWithDot;
	return newURL+(bMakeUnique?"?rand="+new Date().getTime().toString():"");
	
	return _avatarURL+(bMakeUnique?"?rand="+new Date().getTime().toString():"");
	
}

this.getUserInfo = function (userName)
{
	var url=this.baseURL+"moc/dbaseRoutines/getUserInfo.php?userID="+userName;
	
	//alert(url);
	var returnString=this.wi2_synchronousRemoteGet(url);
	
	//alert(returnString);
	var userName="";
	var nickname="";
	var avatarURL="";
	var status="";
	var userType="";
	var sendNewsletter="";

	//["mikemarsico@juno.com","Mike Marsico","Y","http:\/\/212.199.133.39\/content\/memberAvatars\/lBgOoEyoKo.jpg","Member","0"]

	
	if(returnString.length>0&&returnString!="-1")
	{
		var returnedArray=$.evalJSON(returnString);
		
		//alert(returnedArray);
		//var returnString2=returnString.substr(1,returnString.length-2);
		//var returnedArray=returnString2.split ( "," );
		//alert(returnedArray.length);
		if(returnedArray.length>4)
		{
			var temp=returnedArray[0];//.substr(1,returnedArray[0].length-2);
			if(temp.length>0)
				userName=temp;

			
			temp=returnedArray[1];//.substr(1,returnedArray[1].length-2);
			if(temp.length>0)
				nickname=temp;

				
			temp=returnedArray[2];//.substr(1,returnedArray[2].length-2);
			if(temp.length>0)
				status=temp;

			
			temp=returnedArray[3];//.substr(1,returnedArray[3].length-2);
			if(temp.length>0)
			{
				while(temp.indexOf("\\/")!=-1)
					temp=temp.replace("\\/","/");
					
				
				avatarURL=this.GetAvatarURLWithDimensions(temp,230);
				//alert(avatarURL);
			}

				
			temp=returnedArray[4];//.substr(1,returnedArray[4].length-2);
			if(temp.length>0)
				userType=temp;
				
			
			temp=returnedArray[5];//.substr(1,returnedArray[5].length-2);
			if(temp.length>0)
				sendNewsletter=temp;
				
		}	
	}
	var retObj=new Object();
	retObj.userName=userName;
	retObj.nickname=nickname;
	retObj.avatarURL=avatarURL;
	retObj.status=status;
	retObj.userType=userType;
	retObj.sendNewsletter=sendNewsletter;
	return retObj;
}

	
this.wi2_GetAvatarURL = function (userName)
{
	var userInfo=this.getUserInfo(userName);
	if(userInfo&&userInfo.avatarURL)
		return userInfo.avatarURL;
	return "";
	/*
	//var url=baseURL+"moc/dbaseRoutines/getUserAvatar.php?userID="; // this return xml now
	//url+=userName;
	//var avatarURL=synchronousRemoteGet(url);
	//return avatarURL;
	
	//alert("getting avatar for "+userName);//555
	
	var data = "userID="+userName; 
	var requestFile = this.baseURL + 'moc/dbaseRoutines/getUserInfo.php';
	var result = runSyncAjaxPost(requestFile, data);
	//alert(result);
	var avatarsURL="";
	var returnValues=result.parseJSON();
	if(returnValues&&returnValues.length>2&&returnValues[3])
	{
		avatarsURL=returnValues[3];
	}
	//alert("avatars url="+avatarsURL);//555
	return avatarsURL;
	*/
}

// *** REALLY NEED TO GET RID OF THESE 2 FUNCTIONS (need to do this stuff inside the sharingsession swf...its just easier to use this existing code for now!!!)
this.wi2_RemoveItemFromScrollerSharedObject = function (itemToRemoveXmlTag)
{
	//alert("removing "+itemToRemoveXmlTag); //999

	//var sharingSession = getSWF("SharingSession");
	if(1)//sharingSession&&sharingSession!=null)
	{
		//var returnArray=sharingSession.getSharedObject("ScrollerContentsArray",true);
		var returnArray=WatchitooShowSWFInboundAccessFunction("GetSharedObject",{sharedObjectName:"ScrollerContentsArray",persistantFlag:true});
		//alert(returnArray);
		// temp
		//for (i=0;i<returnArray.length;i++)
		//	alert("item in shared object at "+i+" "+returnArray[i][0]);
		if(returnArray!=null&&returnArray!=undefined)//&&itemToRemoveInfoArray.length>1)
		{
				var bFoundIt=false;
				var indexOfItem=-1;
				// find the item in the array and remove it
				for (i=0;i<returnArray.length&&bFoundIt==false;i++)
				{
					//alert(returnArray[i][0]);
					//alert(stringIdentifier);
					var itemInfoArray=returnArray[i];
					//alert(itemInfoArray[0]);
					//alert("checking "+itemInfoArray[0]+" against \r\n"+itemToRemoveXmlTag);//999
					if(itemInfoArray.length>0&&itemInfoArray[0]==itemToRemoveXmlTag||
					itemInfoArray.length>0&&unescape(itemInfoArray[0])==itemToRemoveXmlTag
					)
					{
						indexOfItem=i;
						bFoundIt=true;
						//alert("Found match at "+i);
					}
					//else
					//	alert("no match");
				}
				
				if(bFoundIt)
				{
					// remove it
					returnArray.splice(indexOfItem,1);
					//alert(returnArray);
					//alert("Not found - "+itemToRemoveXmlTag);
					//sharingSession.setSharedObject("ScrollerContentsArray",returnArray,true);
					WatchitooShowSWFInboundAccessFunction("SetSharedObject",{sharedObjectName:"ScrollerContentsArray",object:returnArray,persistantFlag:true});
					return true;
				}
				//alert(returnArray.length);
				
		}
		else
		{

		}
	}
	return false;
}

this.wi2_AddItemToScrollerSharedObject = function (itemToAddArray)
{
	//alert("wi2_AddItemToScrollerSharedObject");
	//var sharingSession = getSWF("SharingSession");
	//if(sharingSession&&sharingSession!=null&&itemToAddArray.length>2)
	if(itemToAddArray.length>2)
	{
		//var returnArray=sharingSession.getSharedObject("ScrollerContentsArray",true);
		var returnArray=WatchitooShowSWFInboundAccessFunction("GetSharedObject",{sharedObjectName:"ScrollerContentsArray",persistantFlag:true});
		if(returnArray!=null&&returnArray!=undefined)
		{
				//alert(itemToAddArray[2]);
				//alert("setting shared object to: "+itemToAddArray);
				returnArray[returnArray.length]=itemToAddArray;
				//sharingSession.setSharedObject("ScrollerContentsArray",returnArray,true);
				WatchitooShowSWFInboundAccessFunction("SetSharedObject",{sharedObjectName:"ScrollerContentsArray",object:returnArray,persistantFlag:true});
		}
		else
		{
			//alert("creating shared object with: "+itemToAddArray);
			var tempArray=new Array();
			tempArray[0]=itemToAddArray;
			//sharingSession.createNewSharedObject("ScrollerContentsArray",tempArray,true);
			WatchitooShowSWFInboundAccessFunction("CreateNewSharedObject",{sharedObjectName:"ScrollerContentsArray",object:tempArray,persistantFlag:true});
		}
	}
}

this.wi2_SendTableSettingsCSVToServer = function (settingsCSV)
{
	//alert("SendTableSettingsCSVToServer: "+settingsCSV);
	mocTable.PutTableSettingsCSV(settingsCSV,true);
}

	
} // end watchitooShow




