/***	@fileoverview		WIMZI Widget*	@author	Steven G. Chipman - AOL - http://developer.aim.com*	@filename wimzi.js*	@copyright Copyright (c) 2007 AOL LLC. All rights reserved*	@version	0.05r3*	@revision	08.23.2007*	@dependency http://o.aolcdn.com/aim/web-aim/aimapi.js*/ var wimzi = {	key:null,	creator:null,	cssURI: "http://o.aolcdn.com/aim/wimzi/snowdust_standard.css",	link: {		href:"http://wimzi.aim.com",		text:"Get your widget at wimzi.com"	},	text: {		offlineMsg:null,		greetingMsg:null,		widgetTitle:null,		initialInputValue:"Type here, press \"Enter\" to send.",		nicknameLabel:"Your Name: "	},	init: function() {		var fn = function() {			AIM.params.DEBUG = false;			AIM.params.RENDER_SEND_BUTTON = false;			AIM.params.USE_EMOTICONS = true;			AIM.params.callbacks.startSession = ["wimzi.callbacks.startSession"];			AIM.params.callbacks.changeFriendly = ["wimzi.callbacks.changeFriendly"];			AIM.params.callbacks.endSession = ["wimzi.callbacks.endSession"];			AIM.params.callbacks.listener.buddylist = ["wimzi.callbacks.buddylist"];			AIM.params.callbacks.listener.presence = ["wimzi.callbacks.updatePresence","AIM.ui.displayStatusChange"];			AIM.params.SHOW_TIMESTAMP = false;			AIM.core.subscriptions = "buddylist,presence,im"			wimzi.key = document.getElementById("wimziContainer").getAttribute("wimzi_key");			AIM.params.wimKey = wimzi.key;			// much of the WIM API requires this element as a container element for various things it creates. Create it if its not there.			if(!document.getElementById("AIMBuddyListContainer")) {				var o = document.createElement("div");				o.setAttribute("id","AIMBuddyListContainer");				o.style.height = "1px"; o.style.width="1px";				document.getElementsByTagName("body")[0].appendChild(o);			}			AIM.util.createSoundObjects();			wimzi.startSession();					}		window.addEventListener?window.addEventListener("load",fn,false):window.attachEvent("onload",fn);		window.addEventListener?window.addEventListener("beforeunload",wimzi.endSession,false):window.attachEvent("onbeforeunload",wimzi.endSession);	},		startSession: function() {		var tObj = {			dataURI:AIM.params.baseTransactionURI + AIM.params.transactions.startSession + "?anonymous=1&k=" + wimzi.key + "&f=json&events=" + AIM.core.subscriptions + "&c=AIM%2Ecore%2EacceptData",			type:"startSession"		}		AIM.core.requestData(tObj);	},		endSession: function() {		var tObj = {			dataURI: AIM.params.baseTransactionURI + AIM.params.transactions.endSession + "?k=" + AIM.params.wimKey + "&aimsid=" + AIM.params.sessionId + "&f=json&c=AIM%2Ecore%2EacceptData",			type:"endSession"		}		AIM.core.requestData(tObj);	},		changeFriendly: function(fName) {		if(fName.length > 16) fName = fName.substring(0,16);		var tObj = {			dataURI: AIM.params.baseTransactionURI + "presence/setState?aimsid=" + AIM.params.sessionId + "&view=online&f=json&c=AIM%2Ecore%2EacceptData&friendly=" + fName,			type:"changeFriendly",			friendlyName:fName		}		AIM.core.requestData(tObj);	},		createWidget: function(json) {		var data = json.groups[0].buddies[0];		var windowId = data.aimId;		var aimId = windowId;		AIM.util.createStyleSheet(wimzi.cssURI);		wimzi.greeting = data.greetingMsg;		wimzi.goodbye = data.offlineMsg;		if(document.getElementById(windowId + "_AIMwindow")) return;		var mObj = document.getElementById("wimziContainer");		var win = AIM.ui.createWindowFrame(windowId,"AIMBuddyListIMWindow", wimzi.text.widgetTitle);		win.style.display = "block";		var txtArea = document.createElement("div");		txtArea.className = "AIMBuddyListIMWindowTextArea";		txtArea.setAttribute("id","AIMTextArea_" + windowId);				var h2 = win.getElementsByTagName("h2")[0];		var ownerStatus = document.createElement("div");		ownerStatus.setAttribute("id","wimziOwnerStatus");		ownerStatus.className = "wimziOwnerStatus_" + data.state;		ownerStatus.innerHTML = data.displayId + " is " + data.state + ".";		wimzi.creator = data.displayId;		win.insertBefore(ownerStatus,h2.nextSibling);				var txtInput = document.createElement("input");		txtInput.setAttribute("type","text");		txtInput.className = "AIMBuddyListIMWindowTextInput";		txtInput.setAttribute("id","AIMTextInput_" + windowId);		txtInput.setAttribute("wim_aimId",aimId);		txtInput.setAttribute("maxlength","1024");		txtInput.setAttribute("value",wimzi.text.initialInputValue);		txtInput.onfocus = function() {			if(!this.cleared) {				this.value = "";				this.cleared = true;			}		}		AIM.util.addEvent(txtInput,AIM.eventHandlers.handleKeyUp,"keyup");				if(AIM.params.RENDER_SEND_BUTTON) {			var okBtn = document.createElement("button");			okBtn.setAttribute("type","button");			okBtn.className="AIMBuddyListIMWindowButton";			okBtn.setAttribute("id","AIMBuddyListIMWindowButton_" + windowId);			okBtn.setAttribute("wim_aimId",aimId);			okBtn.appendChild(document.createTextNode(AIM.params.text.sendButtonText));			AIM.util.addEvent(okBtn,AIM.eventHandlers.handleClick,"click");		}				var typingStatus = document.createElement("span");		typingStatus.className = "AIMBuddyListTypingStatus";		typingStatus.setAttribute("id",windowId + "_typingStatus");				//if(AIM.params.CREATE_AVAILABILITY_MENU_IM) win.appendChild(AIM.ui.createAvailabilityMenu());		win.appendChild(txtArea); 		win.appendChild(txtInput); 		if(AIM.params.RENDER_SEND_BUTTON) win.appendChild(okBtn);		win.appendChild(typingStatus);						var oNick = document.createElement("input");		oNick.setAttribute("type","text");		oNick.setAttribute("maxlength","16");		oNick.className = "AIMBuddyListIMWindowTextInput";		oNick.setAttribute("value",AIM.params.user);		oNick.onkeyup = function(e) {			var keyCode = e?e.keyCode:event.keyCode;			if(keyCode == 13) {				if(this.value.trim() == "") return;				wimzi.changeFriendly(this.value);			}		}		oLbl = document.createElement("label");		oLbl.style.display = "block";		oLbl.appendChild(document.createTextNode(wimzi.text.nicknameLabel));		oLbl.appendChild(oNick);			win.appendChild(oLbl);				var promoLink = document.createElement("a");		promoLink.appendChild(document.createTextNode(wimzi.link.text));		promoLink.setAttribute("href",wimzi.link.href);		promoLink.setAttribute("target","_blank");		promoLink.className = "wimziPromoLink";		win.appendChild(promoLink);				mObj.appendChild(win);				if(data.state == "offline") { // || data.state == "away") {			var msg = decodeURIComponent(wimzi.text.offlineMsg);		} else {			var msg = decodeURIComponent(wimzi.text.greetingMsg);		}		AIM.params.text.errors.serverErrors["401"] = "The connection has been lost. <a href=\"javascript:location.reload();\">Click here</a> to reload the page to continue your conversation.";		AIM.params.text.errors.serverErrors["602"] = "That user is offline and unable to receive messages at this time.";		var ts = AIM.params.SHOW_TIMESTAMP?AIM.util.formatTimeStamp(new Date()):"";		document.getElementById("AIMTextArea_" + data.aimId).innerHTML =  "<p class=\"odd\">" + msg + "</p>";	},		callbacks: {		startSession: function(json) {			var obj = json.response;			switch(obj.statusCode) {				case 200:					AIM.params.user = obj.data.myInfo.displayId;					AIM.params.sessionId = obj.data.aimsid;					AIM.params.listenerURI = obj.data.fetchBaseURL + "&f=json&c=AIM%2Ecore%2Elisten&timeout=" + AIM.params.REQUEST_TIMEOUT;					AIM.core.destroyListenerObject(true);					AIM.core.activeSession = true;					wimzi.text.widgetTitle= obj.data.widgetTitle;					wimzi.text.greetingMsg = obj.data.greetingMsg;					wimzi.text.offlineMsg = obj.data.offlineMsg;					if(obj.data.cssURI) wimzi.cssURI = obj.data.cssURI;					break;				case 603:					//widget is disabled. stub out the data needed to build the widget					AIM.params.user = "AIMGuest";					wimzi.text.widgetTitle = obj.data.widgetTitle;					wimzi.text.offlineMsg = obj.data.offlineMsg;					var oData = {						groups:[{							buddies:[{								aimId:obj.data.creatorDisplayName,								state:"offline",								displayId:obj.data.creatorDisplayName							}]						}]					}					wimzi.createWidget(oData);					break;				default:					return alert("Unable to start anonymous IM session.");					break;			}		},				endSession: function(json) {				},				changeFriendly: function(json) {			if(json.response.statusCode == 200) {				AIM.params.user = AIM.core.AIMData[json.response.requestId].objData.friendlyName;			} 		},				buddylist: function(json) {			wimzi.createWidget(json);		},						updatePresence: function(json) {			var oElement = document.getElementById("wimziOwnerStatus");			if(oElement) {				oElement.innerHTML = wimzi.creator + " is " + json.state;				oElement.className = "wimziOwnerStatus_" + json.state;			}		}	}}wimzi.init();