/* OmnomIRC COPYRIGHT 2010,2011 Netham45 This file is part of OmnomIRC. OmnomIRC is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OmnomIRC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OmnomIRC. If not, see . */ document.domain=HOSTNAME; messageList = Array(); UserListArr = Array(); curLine = 0; //messageBox = document.getElementById("MessageBox"); messageBox = document.createElement("table"); messageBox.style.width="100%"; messageBox.style.height="100%"; messageBox.className='MessageBox'; mBoxCont = document.getElementById("mboxCont"); Userlist = Array(); scrolledDown = true; //****************************** // Start Request Loop functions* //****************************** function startLoop() { xmlhttp=getAjaxObject(); if (xmlhttp==null) { alert ("Your browser does not support AJAX! Please update for OmnomIRC compatibility."); return; } xmlhttp.onreadystatechange=getIncomingLine; sendRequest(); } inRequest = false; errorCount = 0; function cancelRequest() { xmlhttp.abort(); inRequest = false; } function sendRequest() { if (inRequest) return; url = "Update.php?lineNum=" + curLine + "&channel=" + getChannelEn() + "&nick=" + base64.encode(userName) + "&signature=" + base64.encode(Signature); xmlhttp.open("GET",url,true); if (isBlurred()){ setTimeout("xmlhttp.send(null);",2500); //Only query every 2.5 seconds maximum if not foregrounded. } else { setTimeout("xmlhttp.send(null);",75); //Wait for everything to get parsed before requesting again. } inRequest = true; } function getIncomingLine() { if (xmlhttp.readyState==4 || xmlhttp.readyState=="complete") { inRequest = false; if (xmlhttp.responseText == "Could not connect to SQL DB." || xmlhttp.status != 200) { errorCount++; if (errorCount == 10) { OmnomIRC_Error("OmnomIRC has lost connection to server. Please refresh to reconnect."); return; } else { sendRequest(); return; } } if (xmlhttp.status == 200) addLines(xmlhttp.responseText); //Filter out 500s from timeouts errorCount = 0; sendRequest(); } } function getAjaxObject() { xmlhttp=new XMLHttpRequest(); //Decent Browsers if (!xmlhttp || xmlhttp == undefined || xmlhttp == null) xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); //IE7+ if (!xmlhttp || xmlhttp == undefined || xmlhttp == null) xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); //IE6- return xmlhttp; } //****************************** // End Request Loop functions * //****************************** //****************************** // Start Parser * //****************************** function addLines(message) { parts = message.split("\n"); for (var i=0;i 2) { addLine(parts[i]); } } } function addLine(message) { if (!message || message == null || message == undefined) return; lnNum = parseInt(message.split(":")[0]); curLine = parseInt(curLine); if (lnNum > curLine) curLine = lnNum; doScroll = false; if (mBoxCont.clientHeight + mBoxCont.scrollTop > mBoxCont.scrollHeight - 50) doScroll = true; //messageBox = document.getElementById("MessageBox"); /* if ("\v" != "v") //If IE, take the slow but sure route (This is enough of a performance hit in all browsers to use the optimized code if possible. Also, IE can go fuck itself.) mBoxCont.innerHTML = '' + messageBox.innerHTML + parseMessage(message) + '
'; else //If not IE, yay! messageBox.innerHTML = messageBox.innerHTML + parseMessage(message);*/ var row = parseMessage(message); if (row) messageBox.appendChild(row); if (doScroll)mBoxCont.scrollTop = mBoxCont.scrollHeight + 50; } function parseMessage(message) //type of message { a = message; var parts = message.split(":"); lnumber = parts[0]; type = parts[1]; online = parts[2]; parsedMessage = ""; for (i = 4;i < parts.length;i++) parts[i] = base64.decode(parts[i]); name = clickable_names(parts[4],online); var undefined; if (parts[5] == undefined || parts[5] == "") parts[5] = " "; if (parts[5] != undefined && parts[5] != null) { parsedMessage = parseColors(parts[5]); if (parts[5].toLowerCase().indexOf(userName.toLowerCase().substr(0,4)) >= 0 && hasLoaded && notifications && parts[4].toLowerCase() != "new") { showNotification("<" + parts[4] + "> " + parts[5]); if (highDing) { document.getElementById('ding').play(); } } } if ((type == "message" || type == "action") && parts[4].toLowerCase() != "new") { parsedMessage = parseHighlight(parsedMessage); } retval = ""; displayMessage = true; tdTime = document.createElement('td'); tdTime.className="irc-date"; tdName = document.createElement('td'); tdName.className="name"; tdName.innerHTML = '*'; tdMessage = document.createElement('td'); tdMessage.className=type; switch (type) { case "reload": startIndicator(); cancelRequest(); hasLoaded = false; scrolledDown = true; curLine = 0; UserListArr = Array(); userListDiv.innerHTML = ""; drawChannels(); var body= document.getElementsByTagName('body')[0]; var script= document.createElement('script'); script.type= 'text/javascript'; script.src= 'Load.php?count=125&channel=' + getChannelEn() + "&nick=" + base64.encode(userName) + "&signature=" + base64.encode(Signature) + "&time=" + (new Date).getTime();; script.onload= function(){parseUsers();startLoop();mBoxCont.scrollTop = mBoxCont.scrollHeight;hasLoaded = true;stopIndicator();}; body.appendChild(script); displayMessage = false; break; case "join": tdMessage.innerHTML = name + " has joined "+getChannelDe(); addUserJoin(parts[4],online); if (online == "1") return ""; break; case "part": tdMessage.innerHTML = name + " has left "+getChannelDe()+" (" + parsedMessage + ")"; removeUser(parts[4]); if (online == "1") return ""; break; case "quit": tdMessage.innerHTML = name + " has quit IRC (" + parsedMessage + ")"; removeUser(parts[4]); break; case "kick": tdMessage.innerHTML = name + " has kicked " + parts[5] + " from "+getChannelDe()+" (" + parts[6] + ")"; removeUser(parts[4]); break; case "message": tdName.innerHTML = name; tdMessage.innerHTML = parsedMessage;break; case "action": tdMessage.innerHTML = name + " " + parsedMessage;break; case "mode": tdMessage.innerHTML = name + " set "+getChannelDe()+" mode " + parts[5];break; case "nick": tdMessage.innerHTML = name + " has changed his nick to " + parsedMessage; removeUser(parts[4]); addUserJoin(parts[5],online); break; case "topic": if (name!="" && name!="undefined" && name!=" " && (typeof name != 'undefined')) { tdMessage.innerHTML = name + " has changed the topic to " + parsedMessage; } else { displayMessage = false; } setTopic(parsedMessage); break; case "internal": tdMessage.innerHTML = parts[4]; break; case "server": tdMessage.innerHTML = parsedMessage; break; case "pm": if (getChannelDe().toLowerCase() != ("*" + parts[4]).toLowerCase() && parts[4] != userName)//Not in the PM window { if (!hasLoaded) return ""; tdMessage.innerHTML = parsedMessage; tdName.innerHTML = "(PM)" + name; if (hasLoaded) { openPMWindow(parts[4]); if (notifications) showNotification("(PM) <" + parts[4] + "> " + parts[5]); if (highDing) document.getElementById('ding').play(); document.getElementById("*" + parts[4]).style.color="#C22"; } } else { tdMessage.className="message"; tdMessage.innerHTML = parsedMessage; //In the PM window tdName.innerHTML = name; } break; case "curline": return ""; break; case "highlight": if (parts[6].toLowerCase() == "new") return ""; //document.getElementById(parts[4]).style.color="#C22"; //This call will fail if they aren't in the chan. Crude, but effective. if (notifications) showNotification("(" + parts[4] + ") <" + parts[6] + "> " + parts[7]); if (highDing) document.getElementById('ding').play(); return ""; break; case "default": return ""; break; } var row = document.createElement("tr"); //pretag = ''; doHigh = !doHigh; if (lineHigh && doHigh && displayMessage) { //pretag = ''; row.className = "linehigh"; } doLineHigh = !doLineHigh; if (type != "internal") d = new Date(parts[3]*1000); if (type == "internal") { d = new Date(); } tdTime.innerHTML = '[' + d.toLocaleTimeString() + ']'; tdTime.style.height="1px"; tdName.style.height="1px"; tdMessage.style.height="1px"; if (showTime) row.appendChild(tdTime); row.appendChild(tdName); row.appendChild(tdMessage); row.style.width="100%"; row.style.height="1px"; refreshThis(row); if (tdName.innerHTML == "*") statusTxt = tdName.innerHTML + " "; else statusTxt = "<" + StripHTML(tdName.innerHTML) + "> "; if (showTime) statusTxt = "[" + d.toLocaleTimeString() + "] " + statusTxt; statusTxt = statusTxt + StripHTML(tdMessage.innerHTML); changeStatusBarText(statusTxt); if (displayMessage) return row; else return; } function fixMBoxContHeight() { mBoxCont.scrollTop = mBoxCont.scrollHeight; } function parseSmileys(s) { //smileys if (showSmileys) { var addStuff = ""; if (scrolledDown) addStuff = "onload='fixMBoxContHeight();'"; s = s.replace(/(^| )(::\)|::-\))/g,"$1Roll Eyes"); s = s.replace(/(^| )(:\)|:-\))/g,"$1smiley"); s = s.replace(/(^| )(;\)|;-\))/g,"$1Wink"); s = s.replace(/(^| )(>:D|>:-D)/g,"$1Evil"); s = s.replace(/(^| )(:D|:-D)/g,"$1Cheesy"); s = s.replace(/(^| )(;D|;-D)/g,"$1Grin"); s = s.replace(/(^| )(>:\(|>:-\()/g,"$1Angry"); s = s.replace(/(^| )(:\(|:-\()/g,"$1Sad"); s = s.replace(/(^| )(:o|:O|:-o|:-O)/g,"$1Shocked"); s = s.replace(/(^| )(8\))/g,"$1Cool"); s = s.replace(/(^| )\?\?\?/g,"$1Huh"); s = s.replace(/(^| )(:P|:-P|:p|:-p)/g,"$1Tongue"); s = s.replace(/(^| )(:\[|:-\[)/g,"$1Embarrassed"); s = s.replace(/(^| )(:x|:-x|:X|:-X)/g,"$1Lips Sealed"); s = s.replace(/(^| )(:\\|:-\\)/g,"$1Undecided"); s = s.replace(/(^| ):-\*/g,"$1Kiss"); s = s.replace(/(^| )(:'\(|:'-\()/g,"$1Cry"); s = s.replace(/:thumbsup:/g,"Thumbs Up"); s = s.replace(/(^| )O\.O/g,"$1Shocked"); s = s.replace(/(^| )\^-\^/g,"$1Azn"); s = s.replace(/(^| )>B\)/g,"$1Alien"); s = s.replace(/(:banghead:|:headbang:)/g,"Bandhead"); s = s.replace(/:angel:/g,"Angel"); s = s.replace(/(^| )\._\./g,"$1Blah"); s = s.replace(/:devil:/g,"Devil"); s = s.replace(/(^| )<_</g,"$1Dry"); s = s.replace(/:evillaugh:/g,"Evil Laugh"); s = s.replace(/:crazy:/g,"Crazy"); s = s.replace(/:hyper:/g,"Hyper"); s = s.replace(/:love:/g,"Love"); s = s.replace(/:mad:/g,"Mad"); s = s.replace(/:w00t:/g,"w00t"); s = s.replace(/(^| )\*\.\*/g,"$1O.O.O"); s = s.replace(/(^| )D:/g,"$1Big Frown"); s = s.replace(/(^| )(XD|xD)/g,"$1XD"); s = s.replace(/(^| )x\.x/g,"$1x.x"); s = s.replace(/:ninja:/g,"Ninja"); } return s; } function parseColors(colorStr) //colors { if (!colorStr || colorStr == null || colorStr == undefined) return; colorStr = clickable_links(colorStr); colorStr = parseSmileys(colorStr); //lcount = 0; //a = colorStr; var arrayResults = Array(); colorStr+="\x0f"; arrayResults = colorStr.split(RegExp("([\x02\x03\x0f\x16\x1d\x1f])")); colorStr=""; var isBool = false; var numSpan = 0; var isItalic = false; var isUnderline = false; var s; var colorStrTemp = "1,0"; for (var i=0;i"); if (s==arrayResults[i]) { s=arrayResults[i].replace(/^([0-9]{1,2})/g,""); } else { numSpan++; } colorStr+=s; break; case "\x02": isBool = !isBool; if (isBool) { colorStr+=""; } else { colorStr+=""; } break; case "\x1d": isItalic = !isItalic; if (isItalic) { colorStr+=""; } else { colorStr+=""; } break; case "\x16": for (var j=0;j"); stemp=colorStrTemp.replace(/^([0-9]{1,2}),([0-9]{1,2}).+/g,"$2,$1"); if (s==colorStrTemp) { s=colorStrTemp.replace(/^([0-9]{1,2}).+/g,""); stemp=colorStrTemp.replace(/^([0-9]{1,2}).+/g,"0,$1"); } colorStrTemp = stemp; colorStr+=s; break; case "\x1f": isUnderline = !isUnderline; if (isUnderline) { colorStr+=""; } else { colorStr+=""; } break; case "\x0f": if (isUnderline) { colorStr+=""; isUnderline=false; } if (isItalic) { colorStr+=""; isItalic=false; } if (isBool) { colorStr+="" isBool = false; } for (var j=0;j= 0) { style = ""; if (highRed) style = style + "color:#C73232;"; if (highBold) style = style + "font-weight:bold;"; return '' + text + ""; } return text; } function clickable_links(text) //urls { if (!text || text == null || text == undefined) return; //text = text.replace(/http:\/\/www\.omnimaga\.org\//g,"h111://www.omnimaga.org/"); //text = text.replace(/http:\/\/ourl\.ca\//g,"h111://ourl.ca/"); //text = text.replace(/((h111:\/\/(www\.omnimaga\.org\/|ourl\.ca))[-a-zA-Z0-9@:;%_+.~#?&//=]+)/, '$1'); text = text.replace(RegExp("(^|.)(((f|ht)(tp|tps):\/\/)[^\\s\x02\x03\x0f\x16\x1d\x1f]*)","g"),'$1$2'); text = text.replace(RegExp("(^|\\s)(www\.[^\\s\x02\x03\x0f\x16\x1d\x1f]*)","g"),'$1$2'); //text = text.replace(/h111/g,"http"); return text; } function clickable_names(name,isOnline) //omnomirc names { if (isOnline == "1") return '' + colored_names(name) + ''; return colored_names(name); } function colored_names(name) //colored neames (duh) { if (!coloredNames) return name; if (!name || name == null || name == undefined) return; rcolors = Array(19, 20, 22, 24, 25, 26, 27, 28, 29); sum = i = 0; while (name[i]) sum += name.charCodeAt(i++); sum %= 9; return ''+name+''; } function refreshThis(elementOnShow){ var msie = 'Microsoft Internet Explorer'; var tmp = 0; if (navigator.appName == msie){ tmp = elementOnShow.offsetTop + 'px'; }else{ tmp = elementOnShow.offsetTop; } } //****************************** // End Parser * //****************************** //****************************** // Userlist Start * //****************************** userListContainer = document.getElementById("UserListArrContainer"); userListDiv = document.getElementById("UserList"); function addUser(user) { UserListArr.push(user); } function addUserJoin(user,online) { if(!hasLoaded) return; var userp = base64.encode(user) + ":" + online; UserListArr.push(userp); parseUsers(); } function parseUsers() { if (!userListDiv || userListDiv == null) userListDiv = document.getElementById("UserList"); userText = ""; i = 0; UserListArr.sort(function(a,b) { var al=base64.decode(a).toLowerCase(),bl=base64.decode(b).toLowerCase(); return al==bl?(a==b?0:a"; if (parts[1] == "1") userText = userText + 'Omnimaga User' + base64.decode(parts[0]) + '
'; if (parts[1] == "2") userText = userText + "!" + base64.decode(parts[0]) + "
"; } userText = userText + "

"; userListDiv.innerHTML = userText; } function removeUser(user) { if(!hasLoaded) return; for (i in UserListArr) { parts = UserListArr[i].split(":"); if (base64.decode(parts[0]) == user) UserListArr.splice(i,1); } parseUsers(); } //****************************** // Userlist End * //****************************** //****************************** // Load Start * //****************************** function load() { cookieLoad(); lineHigh = getOption(6,"T") == "T"; doHigh = false; coloredNames = getOption(3,"F") == "T"; highRed = getOption(2,"T") == "T"; highBold = getOption(1,"T") == "T"; enabled = getOption(5,"T") == "T"; notifications = getOption(7,"F") == "T"; highDing = getOption(8,"F") == "T"; showExChans = getOption(9,"F") == "T"; showTime = getOption(10,"F") == "T"; doStatusUpdates = getOption(11,"T") == "T"; showSmileys = getOption(12,"T") == "T"; hasLoaded = false; if (!showSmileys) { document.getElementById('smileyMenuButton').src='smileys/smiley_grey.png'; document.getElementById('smileyMenuButton').style.cursor='default'; } if (!enabled) { mboxCont.appendChild(messageBox); messageBox.innerHTML = 'OmnomIRC is disabled. Click here to enable.'; return false; } doLineHigh=true; var body= document.getElementsByTagName('body')[0]; var chanScr= document.createElement('script'); chanScr.type= 'text/javascript'; chanScr.src= 'Channels.php'; chanScr.onload= function(){channelSelectorCallback();readOldMessagesCookies();}; body.appendChild(chanScr); chanList = document.getElementById('chanList'); isBlurred(); if (userName == "Guest"){ var message = document.getElementById("message"); message.disabled = "true"; message.value = "You need to login if you want to chat!"; } } //window.onLoad = load(); //****************************** // Load End * //****************************** //****************************** // Links Start * //****************************** function toggleEnable() { setOption(5,!(getOption(5,'T') == 'T')?'T':'F'); window.location.reload(true); } //****************************** // Links End * //****************************** //****************************** // Message Send Start * //****************************** function sendAJAXMessage(name,signature,message,chan) //'chan' kept for legacy purposes. { if (message[0] == "/") { if (parseCommand(message.substr(1))) return; } if (getChannelDe()[0] == "*") { d = new Date(); str="0:pm:0:" + d.getTime()/1000 + ":" + base64.encode(name) + ":" + base64.encode(HTMLEncode(message)); //Print PMs locally. //addLine(str); } var theURL = "message.php?nick=" + base64.encode(name) + "&signature="+base64.encode(signature)+"&message=" + base64.encode(message) +"&channel=" + getChannelEn(); xmlhttp2=new XMLHttpRequest(); xmlhttp2.open("GET", theURL ,false); xmlhttp2.send(null); } //****************************** // Message Send End * //****************************** //****************************** // Channel Selector Start * //****************************** function channelSelectorCallback() { messageBox.cellPadding = "0px"; messageBox.cellSpacing = "0px"; if (showExChans) for (i in exChannels) channels.push(exChannels[i]); /*if (moreChans) for(i in moreChans) channels.push(base64.encode(moreChans[i]));*/ loadChannels(); //From cookies drawChannels(); scrolledDown = true; var body= document.getElementsByTagName('body')[0]; var script= document.createElement('script'); script.type= 'text/javascript'; script.src= 'Load.php?count=125&channel=' + getChannelEn() + "&nick=" + base64.encode(userName) + "&signature=" + base64.encode(Signature) + "&time=" + (new Date).getTime(); script.onload= function(){mBoxCont.appendChild(messageBox);parseUsers();startLoop();mBoxCont.scrollTop = mBoxCont.scrollHeight;hasLoaded = true;stopIndicator();}; body.appendChild(script); } function changeChannel() { //Empty out dirty holders cancelRequest(); startIndicator(); mBoxCont.innerHTML = ''; messageBox = document.createElement("table"); messageBox.className='MessageBox'; messageBox.style.width="100%"; messageBox.style.height="100%"; messageBox.cellPadding = "0px"; messageBox.cellSpacing = "0px"; hasLoaded = false; scrolledDown = true; curLine = 0; UserListArr = Array(); userListDiv.innerHTML = ""; drawChannels(); var body= document.getElementsByTagName('body')[0]; var script= document.createElement('script'); script.type= 'text/javascript'; script.src= 'Load.php?count=125&channel=' + getChannelEn() + "&nick=" + base64.encode(userName) + "&signature=" + base64.encode(Signature) + "&time=" + (new Date).getTime();; script.onload= function(){mBoxCont.appendChild(messageBox);parseUsers();startLoop();mBoxCont.scrollTop = mBoxCont.scrollHeight;hasLoaded = true;stopIndicator();}; body.appendChild(script); } function drawChannels() { var chanText = '';//''; for (i in channels) { var chanName = base64.decode(channels[i]); //partChannel style = "chan"; chanText += '
x '; chanText += ''; chanText += chanName; chanText += ""; chanText += "
"; } //chanText += ""; document.getElementById("ChanList").innerHTML = chanText; } function selectChannel(index) { setOption(4,String.fromCharCode(index + 32),true); changeChannel(); readOldMessagesCookies(); } function getChannelEn() { return channels[getChannelIndex()]; } function getChannelDe() { return base64.decode(channels[getChannelIndex()]); } function getChannelIndex() { var index = getOption(4,String.fromCharCode(32)).charCodeAt(0) - 32; if (index > (channels.length - 1)) index = 0; return index; } //****************************** // Channel Selector End * //****************************** //****************************** // Tab Completion Start * //****************************** function searchUser(start,startAt) { if(!startAt) startAt = 0; for (i=0;i'+message+"
"); } function joinChannel(paramaters) { if (paramaters.substr(0,1) != "@" && paramaters.substr(0,1) != "#") paramaters = "@" + paramaters; //Check if it already exists or not. If so, try to join it. var count = 0; for (i in channels) { if (base64.decode(channels[i]).toLowerCase() == paramaters.toLowerCase()) { selectChannel(count); return; } count++; } //Channel not in existance. if (paramaters.substr(0,1) == "#") { sendInternalMessage(' Join Error: Cannot join new channels starting with #.'); return; } //Valid chan, add to list. channels.push(base64.encode(paramaters)); saveChannels(); selectChannel(channels.length-1); } function openPMWindow(paramaters) { if (paramaters.substr(0,1) == "@" && paramaters.substr(0,1) == "#") sendInternalMessage(' Query Error: Cannot query a channel. Use /join instead.'); if (paramaters.substr(0,1) != "*") paramaters = "*" + paramaters; for (i in channels) if (base64.decode(channels[i]).toLowerCase() == paramaters.toLowerCase()) return; //PM already opened, don't open another. channels.push(base64.encode(paramaters)); saveChannels(); drawChannels(); } function partChannel(paramaters) { if (paramaters == "") { partChannel(getChannelDe()); return; } if (paramaters.substr(0,1) != "#") { for (i in channels) { if (base64.decode(channels[i]) == paramaters) { if (getChannelDe() == paramaters) { channels.splice(i,1); selectChannel(i-1); } else { channels.splice(i,1); drawChannels(); } saveChannels(); return; } } if (paramaters.substr(0,1) != "@" && paramaters.substr(0,1) != "#") { paramaters = "@" + paramaters; partChannel(paramaters); } else { sendInternalMessage(' Part Error: I cannot part ' + paramaters + '. (You are not in it.)'); } } else sendInternalMessage(' Part Error: I cannot part ' + paramaters + '. (That is not an OmnomIRC channel.)'); } function parseCommand(message) { var command = message.split(" ")[0]; var paramaters = message.substr(command.length+1).toLowerCase(); switch(command) { case "j": case "join": joinChannel(paramaters); return true; case "q": case "query": openPMWindow(paramaters); return true; case "win": case "w": case "window": if (parseInt(paramaters) > channels.length || parseInt(paramaters) <= 0) sendInternalMessage(' Invalid window selection. Valid options: 1-'+channels.length+''); else selectChannel(parseInt(paramaters)-1); return true; case "p": case "part": partChannel(paramaters); return true; case "test": sendInternalMessage(Signature); return true; default: return false; } } //****************************** // Commands End * //****************************** //****************************** // Dynamic Channels Start * //****************************** function loadChannels() { if (document.cookie.indexOf("OmnomChannels") >= 0) { var moreChans = document.cookie.split(";")[0].replace(/^.*OmnomChannels=(.+?)|.*/, "\$1").split("%"); for (i in moreChans) { if (moreChans[i][0] != "#" && moreChans[i] != "") { if (moreChans[i][0] == "^") moreChans[i][0] = "#"; channels.push(moreChans[i]); } } } } function saveChannels() { var chanList = ""; for (i in channels) { if (base64.decode(channels[i]).substr(0,1) != "#") { chanList = chanList + channels[i] + "%"; } } chanList = chanList.substr(0,chanList.length-1); document.cookie = "OmnomChannels=" + chanList + ";expires=Sat, 20 Nov 2286 17:46:39 GMT;"; } //****************************** // Dynamic Channels End * //****************************** //****************************** // Focus Handler Start * //****************************** var focusHandlerRegistered = false; function isBlurred() { if (focusHandlerRegistered == undefined) focusHandlerRegistered = false; if (!focusHandlerRegistered) registerFocusHandler(); if (parent != undefined) return parent.window.bIsBlurred; else return bIsBlurred; } function registerFocusHandler() { focusHandlerRegistered = true; if (parent != undefined)//Child(iframe) { parent.window.bIsBlurred = false; parent.window.onblur = function(){ parent.window.bIsBlurred=true;if(console.log)console.log("Blur");return true; } parent.window.onfocus= function(){ parent.window.bIsBlurred=false;resize();if(console.log)console.log("Focus");return true;} } else //Not a child { window.onblur = function(){ bIsBlurred=true;if(console.log)console.log("Blur");return true; } window.onfocus= function(){ bIsBlurred=false;resize();if(console.log)console.log("Focus");return true;} } } //****************************** // Focus Handler End * //****************************** //****************************** // Status Bar Updater Start * //****************************** statusTxt = ""; statusStarted = false; function startStatusBarUpdate() { if (!doStatusUpdates) return; if (!statusStarted) setInterval(doStatusBarUpdate,500); statusStarted = true; } function doStatusBarUpdate() { window.status=statusTxt; if (parent) parent.window.status=statusTxt; } function changeStatusBarText(msg) { statusTxt = msg; if (!statusStarted) startStatusBarUpdate(); } //****************************** // Status Bar Updater End * //****************************** //****************************** // HTML Tools Start * //****************************** function HTMLEncode(str) { var div = document.createElement('div'); var text = document.createTextNode(str); div.appendChild(text); return div.innerHTML; } function StripHTML(str) { var tmp = document.createElement("div"); tmp.innerHTML = str; return tmp.textContent||tmp.innerText; } String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); }; //****************************** // HTML Tools End * //******************************