Ian's profileIan Tien's Unofficial Pe...PhotosBlogListsMore ![]() | Help |
|
June 20 Unified Communications and your business application solutionSurely you’ve been on an intranet site or reviewing a report and you see someone’s name who you’d like to reach out to. Imagine if it were possible to: - See the person’s availability status Would you believe you could do this all TODAY using Microsoft Office Live Communication Server? You can! Learn more and download the trial version of Live Communication Server here: http://office.microsoft.com/en-us/communicationsserver If you’re building out a Duet solution, a Microsoft BI solution, or a custom solution, you can take advantage of the native functionality in Internet Explorer and Outlook for presence information. Below is a sample HTML page with icons and scripts showing how you can integrate Microsoft Office presence information and functionality into anything with a modern HTML reader, such the one that comes in Outlook (see screenshot below). Many thanks to Ramesh for putting together the sample. Interestingly, Ramesh was originally on the Duet team in 2005 and moved over to the Microsoft BI team; I was originally on the Microsoft BI team and moved over to Duet some years later. Small world J RTC.htm <HTML><SCRIPT LANGUAGE="JavaScript" SRC="rtc.js"></SCRIPT><link href="style.css" type="text/css" rel="stylesheet"><table ><tr class="TableHeaderCellStyle1"><td>Name</td><td>Title</td></tr><tr><td><span>Ian Tien<img border='0' height='1' width='3' src='images/IMblank.gif'/> <img order='0' height='12' width='12' src='images/IMblank.gif' onload="IMNRC('iantien@microsoft.com')" id='RTC_iantien'></span></td><td> Program Manager</td></tr><tr><td><span>Corey Hulen<img border='0' height='1' width='3' src='images/IMblank.gif'/> <img border='0' height='12' width='12' rc='images/IMblank.gif' onload="IMNRC('coreyh@microsoft.com')" id='RTC_coreyh'></span></td><td>Software Design Engineer Lead</td></tr><tr><td><span>Chen-I im<img border='0' height='1' width='3' src='images/IMblank.gif'/> <img border='0' height='12' width='12' src='images/IMblank.gif' nload="IMNRC('chenilim@microsoft.com')" id='RTC_chenilim'></span></td><td>Software Dev Engineer</td></tr><tr><td><span>Ramesh Arimilli<img border='0' eight='1' width='3' src='images/IMblank.gif'/> <img border='0' height='12' width='12' src='images/IMblank.gif' onload="IMNRC('a-raarim@microsoft.com')" id='RTC_a-aarim'></span></td></tr></HTML> style.css /* Blue faded header */.TableHeaderCellStyle1{color: #ffffff; font-weight: bold; background-color: #C4CBE9; border-top: solid 1px #DADEEE; border-bottom: olid 1px #4A5A9A; filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#ABB1CB', EndColorStr='#4A5A9A'); padding: 2px; vertical-align: bottom;}.FramedTable{ border: solid 1px #ABB1CB ;}.ReportTableOverlineCell{ border-top: solid 1px #f0f0f0;} rtc.js var IMNControlObj = null;var bIMNControlInited = false;var IMNDictionaryObj = null;var bIMNSorted = false;var bIMNOnloadAttached = false;var IMNOrigScrollFunc = ull;var bIMNInScrollFunc = false;var IMNSortableObj = null;var IMNHeaderObj = null;var IMNNameDictionaryObj = null;var IMNShowOfflineObj = null;function nsureIMNControl(){ if (!bIMNControlInited) { if (browseris.ie5up && browseris.win32) {//@cc_on//@if (@_jscript_version >= 5)//@ try//@ {//@ MNControlObj = new ActiveXObject("Name.NameCtrl.1");//@ } catch(e)//@ {//@ //@ };//@else//@end } bIMNControlInited = true; f (IMNControlObj) { IMNControlObj.OnStatusChange = IMNOnStatusChange; } } return IMNControlObj;}function IMNGetStatusImage(state, howoffline){ var img = "blank.gif"; switch (state) { case 0: img = "imnon.gif"; break; case 1: if (showoffline) { img = imnoff.gif"; } else { img = "blank.gif"; } break; case 2: img = "imnaway.gif"; break; case 3: img = imnbusy.gif"; break; case 4: img = "imnaway.gif"; break; case 5: img = "imnbusy.gif"; break; case 6: img = "imnaway.gif"; reak; } return img;}function IMNGetHeaderImage(){ return "imnhdr.gif";}function IMNIsOnlineState(state){ if (state == 1) { return false; } return true;}function IMNSortList(j, oldState, state){ var objTable = null; var objRow = null; if (IMNSortableObj && IMNSortableObj[j]) { objRow = ocument.getElementById(j); while (objRow && !(objRow.tagName == "TR" && typeof(objRow.Sortable) != "undefined")) { objRow = bjRow.parentNode; } objTable = objRow; while (objTable && objTable.tagName != "TABLE") { objTable = objTable.parentNode; } if objTable = null && objRow != null) { if (objTable.rows[1].style.display == "none") { for (i=1; i<4; i++) { objTable.rows[i].style.display = block"; } } if (!IMNIsOnlineState(oldState) && IMNIsOnlineState(state)) { objTable.rows[2].style.display = "none"; i = 3; hile (objTable.rows[i].id != "Offline" && objTable.rows[i].innerText < objRow.innerText) i++; objTable.moveRow(objRow.rowIndex, i); if objTable.rows[objTable.rows.length - 3].id == "Offline") { objTable.rows[objTable.rows.length - 2].style.display = "block"; } } lse if (IMNIsOnlineState(oldState) && !IMNIsOnlineState(state)) { if (objRow.rowIndex == 3 && objTable.rows[objRow.rowIndex + 1].id == Offline") { objTable.rows[2].style.display = "block"; } if (objTable.rows[objTable.rows.length - 3].id == "Offline") { bjTable.rows[objTable.rows.length - 2].style.display = "none"; } i = objTable.rows.length - 2; while (objTable.rows[i - 1].id != "Offline" && bjTable.rows[i].innerText > objRow.innerText) i--; objTable.moveRow(objRow.rowIndex, i); } } }}function IMNOnStatusChange(name, tate, id){ if (IMNDictionaryObj) { var img = IMNGetStatusImage(state, IMNSortableObj[id] || IMNShowOfflineObj[id]); if IMNDictionaryObj[id] != state) { if (bIMNSorted) IMNSortList(id, IMNDictionaryObj[id], state); IMNUpdateImage(id, img); MNDictionaryObj[id] = state; } }}function IMNUpdateImage(id, img){ var obj = document.images(id); if (obj) { var oldImg = obj.src; var index = ldImg.lastIndexOf("/"); var newImg = oldImg.slice(0, index + 1); newImg += img; if (oldImg != newImg) obj.src = newImg; if (obj.altbase) { bj.alt = obj.altbase; } }}function IMNHandleAccelerator(){ if (IMNControlObj) { if (event.altKey && event.shiftKey && event.keyCode==121) { MNControlObj.DoAccelerator(); } }}function IMNGetOOUILocation(obj){ var objRet = new Object; var objSpan = obj; var objOOUI = obj; var oouiX = 0, oouiY , objDX = 0; var fRtl = document.dir == "rtl"; while (objSpan && objSpan.tagName != "SPAN" && objSpan.tagName != "TABLE") { objSpan = objSpan.parentNode; f (objSpan) { var collNodes = objSpan.tagName == "TABLE" ? objSpan.rows(0).cells(0).childNodes : objSpan.childNodes; var i; for (i = ; ollNodes.length; ++i) { if (collNodes.item(i).tagName == "IMG" && collNodes.item(i).id) { objOOUI = collNodes.item(i); break; } } bj = objOOUI; while (obj) { if (fRtl) { if (obj.scrollWidth >= obj.clientWidth + obj.scrollLeft) objDX = obj.scrollWidth - obj.clientWidth - bj.scrollLeft; else objDX = obj.clientWidth + obj.scrollLeft - obj.scrollWidth; oouiX += obj.offsetLeft + objDX; } else oouiX += bj.offsetLeft - obj.scrollLeft; oouiY += obj.offsetTop - obj.scrollTop; obj = obj.offsetParent; } try { obj = window.frameElement; while (obj) f (fRtl) { if (obj.scrollWidth >= obj.clientWidth + obj.scrollLeft) objDX = obj.scrollWidth - obj.clientWidth - obj.scrollLeft; else bjDX = obj.clientWidth + obj.scrollLeft - obj.scrollWidth; oouiX += obj.offsetLeft + objDX; } else oouiX += obj.offsetLeft - obj.scrollLeft; ouiY += obj.offsetTop - obj.scrollTop; obj = obj.offsetParent; } } catch(e) { }; objRet.objSpan = objSpan; objRet.objOOUI = objOOUI; objRet.oouiX = ouiX; objRet.oouiY = oouiY; if (fRtl) objRet.oouiX += objOOUI.offsetWidth; return objRet;}function IMNShowOOUIMouse(){ IMNShowOOUI(0);}function MNShowOOUIKyb(){ IMNShowOOUI(1);}function IMNShowOOUI(inputType){ if (browseris.ie5up && browseris.win32) { var obj = window.event.srcElement; ar objSpan = obj; var objOOUI = obj; var oouiX = 0, oouiY = 0; if (EnsureIMNControl() && IMNNameDictionaryObj) { var objRet = MNGetOOUILocation(obj); objSpan = objRet.objSpan; objOOUI = objRet.objOOUI; oouiX = objRet.oouiX; oouiY = objRet.oouiY; var name = MNNameDictionaryObj[objOOUI.id]; if (objSpan) objSpan.onkeydown = IMNHandleAccelerator; IMNControlObj.ShowOOUI(name, inputType, ouiX, ouiY); } }}function IMNHideOOUI(){ if (IMNControlObj) { IMNControlObj.HideOOUI(); return false; } return true;}function IMNScroll(){ if !bIMNInScrollFunc) { bIMNInScrollFunc = true; IMNHideOOUI(); } bIMNInScrollFunc = false; return IMNOrigScrollFunc ? IMNOrigScrollFunc() : true; }function IMNRC(name){ if (name == null || name == '') return; if (browseris.ie5up && browseris.win32) { var obj = window.event.srcElement; var bjSpan bj; var id = obj.id; var fFirst = false; if (!IMNDictionaryObj) { IMNDictionaryObj = new Object(); IMNNameDictionaryObj = new Object(); MNSortableObj = new Object(); IMNShowOfflineObj = new Object(); if (!IMNOrigScrollFunc) { IMNOrigScrollFunc = window.onscroll; indow.onscroll = IMNScroll; } } if (IMNDictionaryObj) { if (!IMNNameDictionaryObj[id]) { IMNNameDictionaryObj[id] = name; First = true; } if (typeof(IMNDictionaryObj[id]) == "undefined") { IMNDictionaryObj[id] = 1; } if (!IMNSortableObj[id] && typeof(obj.Sortable) != "undefined")) { IMNSortableObj[id] = obj.Sortable; if (!bIMNOnloadAttached) { if (EnsureIMNControl() & MNControlObj.PresenceEnabled) window.attachEvent("onload", IMNSortTable); bIMNOnloadAttached = true; } } if !IMNShowOfflineObj[id] && (typeof(obj.ShowOfflinePawn) != "undefined")) { IMNShowOfflineObj[id] = obj.ShowOfflinePawn; } if fFirst && EnsureIMNControl() && IMNControlObj.PresenceEnabled) { var state = 1, img; state = IMNControlObj.GetStatus(name, id); if IMNIsOnlineState(state) || IMNSortableObj[id] || IMNShowOfflineObj[id]) { img = IMNGetStatusImage(state, IMNSortableObj[id] || MNShowOfflineObj[id]); IMNUpdateImage(id, img); IMNDictionaryObj[id] = state; } } } if (fFirst) { var objRet = MNGetOOUILocation(obj); objSpan = objRet.objSpan; if (objSpan) { objSpan.onmouseover = IMNShowOOUIMouse; bjSpan.onfocusin MNShowOOUIKyb; objSpan.onmouseout = IMNHideOOUI; objSpan.onfocusout = IMNHideOOUI; } } }}function IMNSortTable(){ var id; for id in IMNDictionaryObj) { IMNSortList(id, 1, IMNDictionaryObj[id]); } bIMNSorted = true;}function IMNRegisterHeader(){ if (browseris.ie5up && rowseris.win32) { var obj = window.event.srcElement; if (!IMNHeaderObj) { IMNHeaderObj = new Object(); } if (IMNHeaderObj) { var d = obj.id; if (!IMNHeaderObj[id]) { IMNHeaderObj[id] = id; var img; img = IMNGetHeaderImage(); IMNUpdateImage(id, mg); } } }}function Browseris () { var agt = navigator.userAgent.toLowerCase(); this.osver = 1.0; if (agt) { var stOSVer = gt.substring(agt.indexOf("windows ") + 11); this.osver = parseFloat(stOSVer); } this.major = parseInt(navigator.appVersion); this.nav = (agt.indexOf('mozilla')!=-1)&&((agt.indexOf('spoofer')==-1) && (agt.indexOf('compatible')==-1))); this.nav2 = (this.nav && (this.major == 2)); this.nav3 = this.nav && (this.major == 3)); this.nav4 = (this.nav && (this.major == 4)); this.nav6 = this.nav && (this.major == 5); this.nav6up = this.nav && (this.major >= ); this.nav7up = false; if (this.nav6up) { var navIdx = agt.indexOf("netscape/"); if (navIdx >=0 ) this.nav7up = arseInt(agt.substring(navIdx+9)) >= 7; } this.ie = (agt.indexOf("msie")!=-1); this.aol = this.ie && agt.indexOf(" aol ")!=-1; if (this.ie) { var stIEVer = agt.substring(agt.indexOf("msie ") + 5); this.iever = parseInt(stIEVer); this.verIEFull = parseFloat(stIEVer); } else this.iever = 0; this.ie3 = ( this.ie && (this.major == 2)); this.ie4 = ( this.ie && (this.major == 4)); this.ie4up = this.ie && (this.major >=4); this.ie5up = this.ie && (this.iever >= 5); this.ie55up = this.ie && (this.verIEFull >= 5.5); this.ie6up = this.ie && (this.iever >= 6); this.win16 = (agt.indexOf("win16")!=-1) || (agt.indexOf("16bit")!=-1) || (agt.indexOf("windows 3.1")!=-1) || (agt.indexOf("windows 16-bit")!=-1) ); this.win31 = agt.indexOf("windows 3.1")!=-1) || (agt.indexOf("win16")!=-1) || (agt.indexOf("windows 16-bit")!=-1); this.win98 = ((agt.indexOf("win98")!=-)||(agt.indexOf("windows 98")!=-1)); this.win95 = ((agt.indexOf("win95")!=-1)||(agt.indexOf("windows 95")!=-1)); this.winnt = ((agt.indexOf("winnt")!=-)||(agt.indexOf("windows nt")!=-1)); this.win32 = this.win95 || this.winnt || this.win98 || ((this.major >= 4) && (navigator.platform == "Win32")) || agt.indexOf("win32")!=-1) || (agt.indexOf("32bit")!=-1); this.os2 = (agt.indexOf("os/2")!=-1) || (navigator.appVersion.indexOf("OS/2")!=-1) || agt.indexOf("ibm-webexplorer")!=-1); this.mac = (agt.indexOf("mac")!=-1); this.mac68k = this.mac && ((agt.indexOf("68k")!=-1) || agt.indexOf("68000")!=-1)); this.macppc = this.mac && ((agt.indexOf("ppc")!=-1) || (agt.indexOf("powerpc")!=-1)); this.w3c = this.nav6up;}var rowseris = new Browseris(); Comments (2)
Ian Tien
has turned off comments on this page.
TrackbacksThe trackback URL for this entry is: http://iantien.spaces.live.com/blog/cns!749F6111096DD58C!3388.trak Weblogs that reference this entry
|
|
|