// http://www.quirksmode.org/js/detect.html // (c) Peter-Paul Koch var BrowserDetect = { init: function () { this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version"; this.OS = this.searchString(this.dataOS) || "an unknown OS"; }, searchString: function (data) { for (var i=0;i" + _message + " sent to " + _to + "."); return true; } else { VZOPrintMessageToConsole("State " + VZO_LastState + " do not allow to send a message."); return false; } } function VZOGetServer() { return VZOGetWX().Server; } function VZOUpdateStates() { VZO_AllowLogin = VZOGetWX().AllowLogin; VZO_AllowLogout = VZOGetWX().AllowLogout; VZO_AllowCall = VZOGetWX().AllowCall; VZO_AllowEject = VZOGetWX().AllowEject; VZO_AllowChat = VZOGetWX().AllowAnyChat; } function VZOGetOtherID() { return VZOGetWX().OtherID; } function VZOGetOtherDisplayName() { var name = VZO_OtherUserDisplayName.length > 0 ? VZO_OtherUserDisplayName : VZOGetOtherID(); if (/^@g.*$/i.test(name)) name = _("[js/]Internet User"); return name; } function VZOGetLoginDisplayName() { var name = VZO_LoggedUserDisplayName.length > 0 ? VZO_LoggedUserDisplayName : VZOGetLoginID(); if (/^@g.*$/i.test(name)) name = _("[js/]Internet User"); return name; } function VZOGetLoginID() { return VZOGetWX().LoginID; } function VZOToggleChatControls(_flag) { var send_btn = document.getElementById(VZO_SendButton); var send_input = document.getElementById(VZO_MsgInput); send_btn.disabled = !_flag; send_input.disabled = !_flag; } function VZOUpdateGUI() { if (!VZO_AllowChat) { VZOToggleChatControls(false); VZOPrintMessageToConsole("Chat not available in state "+VZO_LastState+""); } else { VZOToggleChatControls(true); } } function VZORequestDisplayName(_call_id) { if (VZOGetWX().RequestUserInfo) VZOGetWX().RequestUserInfo(_call_id, "DisplayName"); } function VZOAcceptCall() { VZOGetWX().AcceptCall(); } function VZORejectCall() { VZOGetWX().RejectCall(); } function VZOPrintStates() { VZOPrintMessageToConsole("AllowCall = " + VZOGetWX().AllowCall); VZOPrintMessageToConsole("AllowEject = " + VZOGetWX().AllowEject); VZOPrintMessageToConsole("AllowLogin = " + VZOGetWX().AllowLogin); VZOPrintMessageToConsole("AllowLogout = " + VZOGetWX().AllowLogout); VZOPrintMessageToConsole("AllowChat = " + VZOGetWX().AllowAnyChat); } function VZOSendChatMessage(_to, _message) { return VZOSendMessage(false, _to, _message); } function VZOSendSystemMessage(_to, _message) { return VZOSendMessage(true, _to, _message); } function VZOResizeWebClientX(_width) { VZOGetWX().Width = _width; VZOGetWX().style.width = _width + "px"; } function VZOChatButtonClick() { VZOGetWX().ChatButtonClick(); } function VZOSetSoundNotification(_state) { VZOGetWX().SoundNotifications = _state; } function VZOSetLanguage(_lang) { // Sometimes OnLoad() from WX comes ahead of init.js // so we need to define manually our main object var WebClientX = VZOGetWX(); if (_lang && _lang.length == 2) { VZOGetWX().Language = _lang; VZOPrintMessageToConsole("Language changed to '" + _lang + "'."); } } function VZOUpdateWindowSize() { var WebClientX = VZOGetWX(); var height = VZOGetWX().GetOptimalExtHeight(); //if (typeof(VZOGetWX().height) != "undefined") //VZOGetWX().height = height; //if (typeof(VZOGetWX().Height) != "undefined") //VZOGetWX().Height = height; var panel = document.getElementById(VZO_ActiveXPanel); if (panel) panel.style.height = VZOGetWX().GetOptimalExtHeight() + "px"; } /* Variable will be defined on initialization*/ var VZO_ServerUrl = "http://share.vzochat.com"; var VZO_DefaultUrl = "http://vzochat.com"; var VZO_IsProduction = true; var VZO_Language = "en"; var VZO_WxObjectHTML = ""; var VZO_ActiveXVersion = "9.9.9"; var VZO_NPAPIVersion = "9.9.9"; var VZO_IEInstaller = ""; var VZO_FirefoxInstaller = ""; var VZO_OperaInstaller = ""; var VZO_SafariInstaller = ""; var VZO_ClientBrowser = ""; var VZO_CredentialsParams = ""; var VZO_CredentialsAttribs = ""; var VZO_CallID = ""; var VZO_WxUrl = ""; /* Global Variables */ var VZO_LastState = ""; var VZO_AllowLogin = false; var VZO_AllowLogout = false; var VZO_AllowCall = false; var VZO_AllowEject = false; var VZO_AllowChat = false; var VZO_Stack = []; var VZO_ChatPanel = "vzo_chat"; var VZO_ChatBoardPanel = "vzo_chat_board"; var VZO_ToChat = "vzo_chat_board"; var VZO_ToConsole = "vzo_console"; var VZO_MsgInput = "vzo_msg"; var VZO_SendButton = "vzo_send_msg"; var VZO_IsChatPanelOpen = false; var VZO_LoggedUserDisplayName = ""; var VZO_OtherUserDisplayName = ""; var VZO_CallPanel = "vzo_call"; var VZO_Panel = "vzo_panel"; var VZO_ChatInfoPanel = "vzo-chat-info"; var VZO_DefaultTitle = "VZOchat Web Client"; var VZO_ActiveXPanel = "vzo_activex"; var VZO_LoaderPanel = "vzo_loader"; var VZO_SoundIcon = "vzo-sound-icon"; var VZO_OtherUserStatus = -1; /* System Methods */ function VZOGetWX() { return WebClientX ? WebClientX : document.getElementById("WebClientX"); } function VZOProcessStack() { var exec = ""; // Process for (var i=0;i 0) { eval(exec); VZOPrintMessageToConsole("["+exec+"] executed."); } } function VZOAddToStack(_method, _allow) { VZO_Stack.push([_method,_allow]); } function VZOFocusChatInput() { var input = document.getElementById(VZO_MsgInput); if (input && !input.disabled) input.focus(); } function VZOScrollChatPanel() { var panel = document.getElementById(VZO_ChatBoardPanel); if (panel) panel.scrollTop = panel.scrollHeight; } function VZOScrollChatInput() { var panel = document.getElementById(VZO_MsgInput); if (panel) panel.scrollTop = panel.scrollHeight; } function VZOScrollWindowToTop() { var panel = document.getElementById(VZO_Panel); if (panel) panel.scrollTop = 0; } function VZOToggleChatPanel(_force, _releaseButton) { var panel = document.getElementById(VZO_ChatPanel); if (panel) { var toOpen = !VZO_IsChatPanelOpen; if (_force != null) toOpen = _force; if (_releaseButton != null && _releaseButton == true) VZOChatButtonClick(); if (toOpen) { panel.style.display = ""; var info = document.getElementById("vzo-chat-info"); if (info) info.innerHTML = _("[js/]Chat: %user% with %other%").replace("%user%",VZOParseName(VZOGetLoginDisplayName())).replace("%other%",VZOParseName(VZOGetOtherDisplayName())); VZOScrollChatPanel(); } else { panel.style.display = "none"; } VZOScrollWindowToTop(); VZO_IsChatPanelOpen = !VZO_IsChatPanelOpen; } VZOFocusChatInput(); } function UpdateRequestsStack(_user_id, _prop_name, _prop_value) { if (_prop_name != "DisplayName") return; if (_user_id == VZOGetWX().LoginID) VZO_LoggedUserDisplayName = _prop_value; else VZO_LoggedUserDisplayName = VZOGetWX().LoginID; if (_user_id == VZOGetWX().OtherID) VZO_OtherUserDisplayName = _prop_value; else VZO_OtherUserDisplayName = VZOGetWX().OtherID; } function VZOSendMessageButtonClick() { // Validation var input = document.getElementById(VZO_MsgInput); if (!input) { VZOPrintMessageToConsole("Chat input not exist"); VZOFocusChatInput(); return; } var msg = input.value; var to = VZOGetOtherID(); if (msg.replace(/[\n\t\x0a\x0d\s]+/g,'').length == 0) { VZOPrintMessageToConsole("Chat input is empty"); VZOFocusChatInput(); return; } // Validation msg = msg.substring(0,2000); // Sending if (VZOSendChatMessage(to, msg)) { var to_name = VZO_LoggedUserDisplayName.length > 0 ? VZO_LoggedUserDisplayName : VZOGetWX().LoginID; if (/^@g.*$/i.test(to_name)) to_name = "" + VZOParseName(to_name, _("[js/]Guest %id"))+""; // Echo print to chat board msg = msg.replace(/ /g," "); msg = msg.replace(/\n/g,"
"); VZOPrintMessageToChat("" + to_name + " " + VZODate() + ": " + msg); // Check if OtherUser is offline if (VZOGetWX().OtherID_Status == 0) VZOPrintMessageToChat(_("[js/][i]message was sent to offline[/i]")); // Clean input field input.value = ""; } // Scroll chat panel to bottom VZOScrollChatPanel(); // Set focus on input field VZOFocusChatInput(); // Return title to default state // document.title = VZO_DefaultTitle; } function VZOAutoLoginState() { VZOPrintMessageToConsole("AutoLoginState. LoginID: "+VZOGetWX().LoginID+", Session: "+VZOGetWX().Session+", Password: " + VZOGetWX().Password + "."); } function VZOProcessKeyStrokeInChatInput(e) { var code = (e.which) ? e.which : e.keyCode; var chat = document.getElementById(VZO_MsgInput); if (code == 13) { if (e.ctrlKey) { chat.value += "\x0a"; VZOScrollChatInput(); } else { VZOSendMessageButtonClick(); } e.returnValue = false; e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); } return e; } function VZOCleanUpChatInput(e) { var chat = document.getElementById(VZO_MsgInput); if (chat.value.replace(/[\n\t\x0a\x0d\s]+/g,'').length == 0) chat.value = ""; } function VZODate() { var date = new Date(); return "(" + date.toLocaleTimeString() + ")"; } var VZO__last_message = ""; function VZOPrintSystemMessage(_msg) { if (_msg != VZO__last_message) VZOPrintMessageToChat("" + _msg + ""); VZO__last_message = _msg; } function VZOPrintOuterMessage(_msg) { VZOPrintMessageToChat(""+_("[js/][i]Message received from another user, you cannot reply on it.[/i]")+"
" + _msg + "
"); } function VZOPrintMessageToConsole(_msg) { var place = document.getElementById(VZO_ToConsole); if (place) place.innerHTML = "

" + _msg + "

\n" + place.innerHTML; } function VZOPrintMessageToChat(_msg) { var place = document.getElementById(VZO_ToChat); if (place) place.innerHTML += "

" + _msg + "

\n"; } function VZOTwoDigits(_x) { return (new String(_x).length < 2) ? "0" + _x : _x; } function VZOToggleSoundNotifications() { var img = document.getElementById(VZO_SoundIcon); if (!img) return; if (/none/i.test(img.src)) { // Disabled img.src = VZO_ServerUrl + "/images/sound.gif"; VZOSetSoundNotification(true) } else { // Enabled img.src = VZO_ServerUrl + "/images/sound_none.gif"; VZOSetSoundNotification(false); } } function VZOCreateTag(_id, _tag) { var layer = document.createElement(_tag); if (_id.length > 0) layer.id = _id; return layer; } function VZOCreateLayer(_id) { return VZOCreateTag(_id, "div"); } function VZORenderLayer(_layer, _parent) { document.getElementById(_parent).appendChild(_layer); } function VZOPrintAnchor(_id) { document.write("
"); } function VZOCreateEventHandler(_for, _event) { document.write(""); } function VZOHide(id) { var div = document.getElementById(id); if (div) div.style.display = "none"; } function VZOShow(id) { var div = document.getElementById(id); if (div) div.style.display = ""; } function _(_key) { var text = "" if (typeof(vzoL10n) == 'undefined' || typeof(vzoL10n[_key]) == 'undefined') text = _key; else text = vzoL10n[_key]; return text.replace(/\[js\/?\]/ig,"").replace(/\[([^\]]+)\]/g,"<$1>"); } function VZOParseName(_gName, _defString) { if (/^@g.*$/i.test(_gName)) { var name = _defString == null ? _("[js/]Internet User %id") : _defString; if (name.length < 3) return name.replace('%id',''); var id = parseInt(_gName.substring(_gName.length - 3), 16); return name.replace('%id', id); } else { return _gName; } }var dragObject = null; var mouseOffset = null; function VZOGetPosition(e) { var left = 0; var top = 0; while (e.offsetParent) { left += e.offsetLeft; top += e.offsetTop; e = e.offsetParent; } left += e.offsetLeft; top += e.offsetTop; return {x:left, y:top}; } function VZOMouseMove(ev) { ev = ev || window.event; var mousePos = VZOMouseCoords(ev); if (!dragObject) return false; var objPos = VZOGetPosition(dragObject); var width = mousePos.x - objPos.x; var height = mousePos.y - objPos.y - 50; width = width<480 ? 480 : (width>800 ? 800 : width); height = height<100 ? 100 : (height>400 ? 400 : height); //dragObject.style.width = width + 'px'; dragObject.style.height = height + 'px'; //document.getElementById('vzo_msg').value = width + "x" + height; //VZOResizeWebClientX(width); } function VZOMouseUp() { dragObject = null; document.onmousemove = null; document.onmouseup = null; } function VZOMakeResizable() { var handler = document.getElementById('vzo_drag_handler'); var panel = document.getElementById('vzo_chat_board'); if (handler && panel) { handler.onmousedown = function() { dragObject = panel; document.onmousemove = VZOMouseMove; document.onmouseup = VZOMouseUp; return false; } } } function VZOMouseCoords(ev) { if(ev.pageX || ev.pageY) return {x:ev.pageX, y:ev.pageY}; return { x:ev.clientX + document.body.scrollLeft - document.body.clientLeft, y:ev.clientY + document.body.scrollTop - document.body.clientTop }; }/* Event Handlers */ function OnIncommingMessage(AIsSystem, AMessageString, AUserName, aTo, AUid, AIsOnlyActivate, ADoNotShowWindow, AIsOpenByUser) { var msg = ""; var name = ""; name = VZOParseName(AUserName); msg += ""+name+" " + VZODate() + ": "; msg += AMessageString; if (AUid.toLowerCase() == VZOGetOtherID().toLowerCase()) VZOPrintMessageToChat(msg.replace(/\x0a\x0d/g,"
")); else VZOPrintOuterMessage(msg); //document.title = _("[js/]VZOchat Web Client - %name% says...").replace("%name%",name); VZOScrollChatInput(); VZOToggleChatPanel(true); } function OnDebugMessage(message) { VZOPrintMessageToConsole(message); } function OnChangeState(state, message) { VZOPrintMessageToConsole("New state " + message + " ["+state+"]"); VZO_LastState = message + "["+state+"]"; VZOUpdateStates(); VZOProcessStack(); VZOUpdateGUI(); //VZOPrintStates(); // Update plugin height VZOUpdateWindowSize(); } function OnChatButtonClick(bStart) { VZOToggleChatPanel(bStart, false); } function OnReceiveUserInfo(sUserID, sPropName, sPropValue) { UpdateRequestsStack(_user_id, _prop_name, _prop_value) } function OnIncomingQuery(sMessag, bStart) { // FF tab test /* netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); var browserEnumerator = wm.getEnumerator("navigator:browser"); // Check each browser instance for our URL while (browserEnumerator.hasMoreElements()) { var browserInstance = browserEnumerator.getNext().getBrowser(); // Check each tab of this browser instance var numTabs = browserInstance.tabContainer.childNodes.length; for(var index=0; index

"+_("[js/]Usually it takes less than 30 seconds for initial download.")+"

"+_("[js/]And only couple of seconds next time.")+"

"+_("[js/]Please wait for a while. Thank you!")+"

"; VZORenderLayer(divLoader, "vzo_panel"); // reinstall wrapper layers var divReinstallFirefox = VZOCreateLayer("vzo_reinstall_firefox"); divReinstallFirefox.innerHTML = ""+_("[js/]Version outdated...")+"

"+_("[js/]Please upgrade to a newer version:")+"

"+_("[js/]Upgrade")+"

"; divReinstallFirefox.style.display = "none"; VZORenderLayer(divReinstallFirefox, "vzo_panel"); var divReinstallOpera = VZOCreateLayer("vzo_reinstall_opera"); divReinstallOpera.innerHTML = ""+_("[js/]Opera VZOchat Web Client version is outdated")+"

"+_("[js/]Please upgrade to a newer version:")+"

"+VZO_OperaInstaller+"

"; divReinstallOpera.style.display = "none"; VZORenderLayer(divReinstallOpera, "vzo_panel"); var divReinstallSafari = VZOCreateLayer("vzo_reinstall_safari"); divReinstallSafari.innerHTML = ""+_("[js/]Safari VZOchat Web Client version is outdated")+"

"+_("[js/]Please upgrade to a newer version:")+"

"+VZO_SafariInstaller+"

"; divReinstallSafari.style.display = "none"; VZORenderLayer(divReinstallSafari, "vzo_panel"); // ActiveX Layer var divActiveX = VZOCreateLayer("vzo_activex"); VZORenderLayer(divActiveX, "vzo_panel"); // Debug if (!VZO_IsProduction) { var divConsole = VZOCreateLayer("vzo_console"); VZORenderLayer(divConsole, "vzo_panel"); } // Chat var divChat = VZOCreateLayer("vzo_chat"); divChat.style.display = "none"; VZORenderLayer(divChat, "vzo_panel"); // Chat Header var divChatHeader = VZOCreateLayer("vzo_chat_header"); divChatHeader.innerHTML = ""; VZORenderLayer(divChatHeader, "vzo_chat"); // Chat Close Button var divChatHeader = VZOCreateLayer("vzo_chat_header_close"); divChatHeader.innerHTML = " "; VZORenderLayer(divChatHeader, "vzo_chat_header"); // Chat Board var divChatBoard = VZOCreateLayer("vzo_chat_board"); VZORenderLayer(divChatBoard, "vzo_chat"); // Chat Footer var divChatFooter = VZOCreateLayer("vzo_chat_footer"); divChatFooter.innerHTML = "
"; divChatFooter.innerHTML += "
"; divChatFooter.innerHTML += "
"; divChatFooter.innerHTML += "
"; VZORenderLayer(divChatFooter, "vzo_chat"); } VZOCreateEventHandler('WebClientX', 'OnIncommingMessage(AIsSystem, AMessageString, AUserName, aTo, AUid, AIsOnlyActivate, ADoNotShowWindow, AIsOpenByUser)');VZOCreateEventHandler('WebClientX', 'OnDebugMessage(message)');VZOCreateEventHandler('WebClientX', 'OnChangeState(state, message)');VZOCreateEventHandler('WebClientX', 'OnChatButtonClick(bStart)');VZOCreateEventHandler('WebClientX', 'OnReceiveUserInfo(sUserID, sPropName, sPropValue)');VZOCreateEventHandler('WebClientX', 'OnReceiveUserInfo(sUserID, sPropName, sPropValue)');VZOCreateEventHandler('WebClientX', 'OnIncomingQuery(sMessag, bStart)');VZOCreateEventHandler('WebClientX', 'OnChangeOtherState(iState)');VZOCreateEventHandler('WebClientX', 'OnLoad(CanStart)');VZOCreateEventHandler('WebClientX', 'OnIncomingRecordQuery(sCallID, bDefault)');