if(tucent){alert('Tucent [Error]: Already included.')}else{var tucent={init:function(){this.bind=function(inst,fn){var cargs=new Array();for(var i=2,ix=arguments.length;i<ix;i++){cargs.push(arguments[i])}return function(){var args=cargs.slice();a=args;for(var i=0,ix=arguments.length;i<ix;i++){args.push(arguments[i])}b=args;fn.apply(inst,args)}};this.showList=function(){_tucent.showList()};this.refresh=function(){_tucent.refresh()};this.validParseInt=function(v){var i=parseInt(v);if(isNaN(i))throw'Integer not valid.';return i};this.cumulativeOffset=function(element){var y=0,x=0;do{y+=element.offsetTop||0;x+=element.offsetLeft||0;element=element.offsetParent}while(element);return[x,y]};this.getEventTarget=function(e){var targ;if(!e)var e=window.event;if(e.target)targ=e.target;else if(e.srcElement)targ=e.srcElement;if(targ.nodeType==3)targ=targ.parentNode;return targ};this.descendantOf=function(e,a){while(e=e.parentNode){if(e==a)return true}return false};this.truncDots=function(str,maxlen){if(!str)return'';if(str.length>maxlen)return str.substr(0,maxlen-3)+'...';return str};this.getMousePos=function(e){var posx=0;var posy=0;if(!e)var e=window.event;if(e.pageX||e.pageY){posx=e.pageX;posy=e.pageY}else if(e.clientX||e.clientY){posx=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;posy=e.clientY+document.body.scrollTop+document.documentElement.scrollTop}return{x:posx,y:posy}};this.stopEvent=function(e){if(!e)var e=window.event;e.cancelBubble=true;if(e.stopPropagation)e.stopPropagation()};this.setStyle=function(element,styles){var elementStyle=element.style;if(typeof styles=='string'){element.style.cssText+=';'+styles;return}for(var property in styles){if(property=='opacity')element.setOpacity(styles[property]);else{elementStyle[(property=='float'||property=='cssFloat')?(elementStyle.styleFloat===undefined?'cssFloat':'styleFloat'):property]=styles[property]}}};this.getScrollOffsets=function(){return{left:window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,top:window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop}};this.getViewport=function(){var w,h;if(typeof window.innerWidth!='undefined'){w=window.innerWidth;h=window.innerHeight}else if(typeof document.documentElement!='undefined'&&typeof document.documentElement.clientWidth!='undefined'&&document.documentElement.clientWidth!=0){w=document.documentElement.clientWidth;h=document.documentElement.clientHeight}else{w=document.getElementsByTagName('body')[0].clientWidth;h=document.getElementsByTagName('body')[0].clientHeight}return{width:w,height:h}};this.isIE=function(){return/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent)};this.injectCssRule=function(selector,newCss){var sheet=document.styleSheets[0];if(tucent.isIE()){sheet.addRule(selector,newCss,0)}else{sheet.insertRule(selector+' {'+newCss+'}',0)}};this.addEvent=function(element,listener,handler){if(typeof element[listener]!='function'||typeof element[listener+'_num']=='undefined'){element[listener+'_num']=0;if(typeof element[listener]=='function'){element[listener+0]=element[listener];element[listener+'_num']++}element[listener]=function(e){var r=true;e=(e)?e:window.event;for(var i=0;i<element[listener+'_num'];i++)if(element[listener+i](e)===false)r=false;return r}}for(var i=0;i<element[listener+'_num'];i++)if(element[listener+i]==handler)return;element[listener+element[listener+'_num']]=handler;element[listener+'_num']++};this.removeEvent=function(element,listener,handler){if(typeof element[listener]!='function'||typeof element[listener+'_num']=='undefined'||element[listener+'_num']==0)return;var found=false;for(var i=0;i<element[listener+'_num'];i++){if(!found)found=element[listener+i]==handler;if(found&&(i+1)<element[listener+'_num'])element[listener+i]=element[listener+(i+1)]}if(found)element[listener+'_num']--};this.hideElement=function(e){e.style.display='none'};this.showElement=function(e){e.style.display=''};this.$=function(id){return document.getElementById(id)};this.toQueryString=function(a){var q='';for(k in a){q+='&'+k+'='+a[k]}return q.substr(1);};this.haltonSeqFx=function(idx){var frac=0.5;var h=0.0;while(idx>=1.0){var c=idx%2.0;h+=c*frac;idx=Math.floor(idx/2.0);frac=frac/2.0}return h};this.haltonSeq=new Array();for(var i=0;i<32;++i){this.haltonSeq.push(this.haltonSeqFx(i+1))}this.getText=function(node){if(node.textContent!=null){return node.textContent}return node.innerText;};this.removeNode=function(node){node.parent.removeChild(node)};this.setText=function(node,text){if(node.innerText!=null){node.innerText=text}else{node.textContent=text}};this.insertAfter=function(node,referenceNode){referenceNode.parentNode.insertBefore(node,referenceNode.nextSibling)};this.removeNode=function(e){e.parentNode.removeChild(e)};this.isEmpty=function(node){return(node.nodeType==8)||((node.nodeType==3)&&!(/[^\t\n\r ]/.test(node.data)));};this.reverseString=function(str){var splitext=str.split('');var revertext=splitext.reverse();return revertext.join('')};this.getUrlParam=function(p){var re=new RegExp('&'+p+'=([^&]*)','i');var c=window.location.search;return(c=c.replace(/^\?/,'&').match(re))?c=c[1]:c=''};this.generateCssSprite=function(def,id,title){id_str=id?'id="'+id+'"':'';title=title||'';hoover_str=def.hoover?'onmouseover="this.style.backgroundPosition=\''+def.hoover.on+'\';" onmouseout="this.style.backgroundPosition=\''+def.hoover.off+'\';"':'';return'<img '+id_str+' alt="" title="'+title+'" border="0" src="'+def.transp+'" style="'+def.style+'" '+hoover_str+' />'};this.formatDate=function(d,f){function zf(n){if(n<10)return'0'+n;return n}return f.replace(/(yyyy|yy|mmmm|mmm|mm|dddd|ddd|dd|kk|hh|nn|ss|a\/p)/gi,function($1){switch($1.toLowerCase()){case'yyyy':return d.getFullYear();case'yy':return zf(d.getFullYear()%100);case'mm':return zf((d.getMonth()+1));case'dd':return zf(d.getDate());case'kk':return zf(d.getHours());case'hh':return zf(((h=d.getHours()%12)?h:12));case'nn':return zf(d.getMinutes());case'ss':return zf(d.getSeconds());case'a/p':return d.getHours()<12?'a':'p'}})};this.Logger=function(){this.logConsole=null;this.log=function(loc,msg){if(!loc&&!msg){this.writeln('<hr/>')}else{msg=(''+msg).replace(/\n/g,'<br>');this.writeln('<p><b>'+loc+':</b> '+msg+'</p>')}};this.writeln=function(str){if(this.logConsole&&!this.logConsole.closed){this.logConsole.document.writeln(str)}};this.init=function(){this.logConsole=window.open('','_blank');this.log('Logger.init()',new Date())}};this.loggerInst=null;this.log=function(loc,msg){if(tucent.loggerInst)tucent.loggerInst.log(loc,msg)};this.Main=function(){this.settings=null;this.url=null;this.recource_idf=null;this.trackbackUrl=null;this.pendingData=new Array();this.multiControl=null;this.window=null;this.windowIdTextmark=null;this.tooltip=null;this.tooltipIdTextmark=null;this.domEngine=null;this.adEngine=null;this.httpRequest=null;this.isMouseDown=false;this.selData=null;this.hoverTextmarkTimeout=null;this.hoverTextmarkTimeout_idTextmark=null;this.unhoverTextmarkTimeout=null;this.unhoverTextmarkTimeout_idTextmark=null;this.unhoverTooltipTimeout=null;this.isMouseOverTooltip=false;this.onMouseOverTextmark=function(e){var idTextmark=tucent.getEventTarget(e).idTextmark;if(this.hoverTextmarkTimeout_idTextmark==idTextmark){return true}if(this.unhoverTextmarkTimeout_idTextmark==idTextmark){window.clearTimeout(this.unhoverTextmarkTimeout);this.unhoverTextmarkTimeout_idTextmark=null}this.hoverTextmarkTimeout=window.setTimeout(tucent.bind(this,this.onHoverTextmark,idTextmark),700);this.hoverTextmarkTimeout_idTextmark=idTextmark;this.domEngine.highlightTextmark(idTextmark,true);return true};this.onMouseOutsideTextmark=function(e){var idTextmark=tucent.getEventTarget(e).idTextmark;if(this.unhoverTextmarkTimeout_idTextmark==idTextmark){return true}window.clearTimeout(this.hoverTextmarkTimeout);this.hoverTextmarkTimeout_idTextmark=null;this.unhoverTextmarkTimeout=window.setTimeout(tucent.bind(this,this.onUnhoverTextmark),1000);this.unhoverTextmarkTimeout_idTextmark=idTextmark;this.domEngine.highlightTextmark(idTextmark,false);return true};this.onMouseOverTooltip=function(e){this.isMouseOverTooltip=true;window.clearTimeout(this.unhoverTooltipTimeout);return true};this.onMouseOutsideTooltip=function(e){this.isMouseOverTooltip=false;if(!this.tooltip.isPermanent()){this.unhoverTooltipTimeout=window.setTimeout(tucent.bind(this,this.onUnhoverTooltip),500)}return true};this.onUnhoverTooltip=function(){if(this.hoverTextmarkTimeout_idTextmark==this.tooltipIdTextmark)return;this.hideTooltip()};this.onClickTooltip=function(){this.showOrCreateAnnotation(this.tooltipIdTextmark);this.hideTooltip()};this.onHoverTextmark=function(idTextmark){tucent.log('Main.onHoverTextmark()','');if(this.isMouseDown)return;if(this.tooltip.isPermanent())return;if(this.window.isVisible()&&idTextmark==this.windowIdTextmark)return;this.showTooltip(idTextmark)};this.onUnhoverTextmark=function(){if(this.isMouseOverTooltip||this.tooltip.isPermanent())return;this.hideTooltip()};this.onMouseUp=function(e){tucent.log('Main.onMouseUp()','');this.isMouseDown=false;var sel=this.domEngine.getSelection();if(!sel){var target=tucent.getEventTarget(e);if(target.idTextmark){this.showOrCreateAnnotation(target.idTextmark)}}else{if(!tucent.descendantOf(tucent.getEventTarget(e),tucent.$('_tucent'))&&!this.tooltip.isPermanent()){this.selData=this.domEngine.convertSel2Db(sel);if(this.selData){var mpos=tucent.getMousePos(e);this.multiControl.showSelectionButton(mpos.x,mpos.y)}}}return true};this.onMouseDown=function(e){this.isMouseDown=true;tucent.log('Main.onMouseDown()','');if(!tucent.descendantOf(tucent.getEventTarget(e),tucent.$('_tucent'))&&!this.tooltip.isPermanent()){this.hideTooltip();this.multiControl.hideSelectionButton();this.selData=null}return true};this.onSelectionBtnClicked=function(e){this.multiControl.hideSelectionButton();if(this.selData){this.createAnnotation()}};this.onFloatingBtnClicked=function(e){this.showList()};this.onCloseWindow=function(){this.domEngine.toggleTextmark(this.windowIdTextmark,false);this.windowIdTextmark=null;this.window.hide()};this.tooltip_onMoveTextmark=function(){var sel=this.domEngine.getSelection();if(sel!=null){var data=this.domEngine.convertSel2Db(sel);if(!data){this.multiControl.printMsg('Annotations are not allowed in this area.');return}this.httpRequest.send({method:'GET',url:'http://tucentserver.appspot.com/aws/1/',search:{action:'update',annotat_id:this.tooltipIdTextmark,data:data},callback:tucent.bind(this,this.onTextmarkUpdated)})}this.tooltip.showWaiting()};this.tooltip_onDelTextmark=function(){this.pendingData['delTextmark']={idTextmark:this.tooltipIdTextmark};this.httpRequest.send({method:'GET',url:'http://tucentserver.appspot.com/aws/1/',search:{action:'delete',annotat_id:this.tooltipIdTextmark},callback:tucent.bind(this,this.onTextmarkDeleted)});this.tooltip.showWaiting()};this.onTextmarkCreated=function(obj){if(obj.error){this.multiControl.printMsg(obj.error.msg);return}var t=this.domEngine.initTextmark(obj.result.id,obj.result.data);if(t)this.domEngine.createTextmark(t);this.showOrCreateAnnotation(t.id);tucent.log('Main.onTextmarkCreated()','Textmark successfully created.')};this.onTextmarkUpdated=function(obj){this.hideTooltip();if(obj.error){this.multiControl.printMsg(obj.error.msg);return}this.domEngine.removeTextmarks();delete this.domEngine.textmarkCache[obj.result.id];this.domEngine.initTextmark(obj.result.id,obj.result.data);this.domEngine.createTextmarks();tucent.log('Main.onTextmarkUpdated()','Textmark successfully updated.')};this.onTextmarkDeleted=function(obj){this.hideTooltip();if(obj.error){this.multiControl.printMsg(obj.error.msg);return}this.domEngine.removeTextmarks();delete this.domEngine.textmarkCache[this.pendingData['delTextmark'].idTextmark];this.domEngine.createTextmarks();tucent.log('Main.onTextmarkDeleted()','Textmark successfully deleted.')};this.onTooltipInfoLoaded=function(obj){if(obj.error){this.hideTooltip();this.multiControl.printMsg(obj.error.msg);return}this.tooltip.showMarkInfo(obj.result)};this.onTextmarksLoaded=function(obj){if(obj.error){if(obj.error.code!=0){this.multiControl.printMsg(obj.error.msg)}return}tucent.log('Main.onInit()',obj.result.length+' textmarks recieved.');tucent.log();for(var i=0;i<obj.result.length;++i){var t=this.domEngine.initTextmark(obj.result[i].id,obj.result[i].data);this.domEngine.createTextmark(t);tucent.log()}var p;if(p=tucent.getUrlParam('_tucent')){p=parseInt(p);var t=this.domEngine.textmarkCache[p];if(t){var pos=tucent.cumulativeOffset(t.labelNode);window.scrollTo(pos[0]-300,pos[1]-200);this.showTooltip(p)}}tucent.log('Main.onTextmarksLoaded()','Processing textmarks finished.')};this.createAnnotation=function(){if(window.getSelection){var userSelection=window.getSelection();userSelection.removeAllRanges()}else if(document.selection){document.selection.empty()}this.httpRequest.send({method:'GET',url:'http://tucentserver.appspot.com/aws/1/',search:{action:'create',forum_id:this.settings.idForum,data:this.selData,atype:'html_textmark',mimetype:'text/html',url:this.url,resource_idf:this.resource_idf,trackback:(this.settings.trackback==true?this.trackbackUrl:'')},callback:tucent.bind(this,this.onTextmarkCreated)});this.selData=null};this.showList=function(){this.showWindow(null,'http://tucentserver.appspot.com/wgt/all_threads/'+this.settings.idForum+'/?resource_idf='+this.resource_idf)};this.refresh=function(){if(this.settings.enabled){this.domEngine.removeTextmarks();this.domEngine.flushCaches();tucent.log('Main.refresh()','Caches flushed.');this.httpRequest.send({method:'GET',url:'http://tucentserver.appspot.com/aws/1/',search:{action:'get',forum_id:this.settings.idForum,atype:'html_textmark',resource_idf:this.resource_idf,amax:this.settings.amax,annotat_id:tucent.getUrlParam('_tucent')},callback:tucent.bind(this,this.onTextmarksLoaded)})}};this.snapWindow=function(wnd,x,y){var w=wnd.size.x;var h=wnd.size.y;var padding=30;var viewport=tucent.getViewport();var scroll=tucent.getScrollOffsets();x=x-scroll.left;y=y-scroll.top;var dir=viewport.width-x>x?1:-1;x=dir==1?x+padding:x-w-padding;dir=viewport.height-y>y?-1:1;y=dir==1?y-h-padding:y+padding;x=Math.round(x/20)*20;y=Math.round(y/20)*20;if(x+w+(2*padding)>viewport.width)x=x-(x+w+(2*padding)-viewport.width);if(y+h+(2*padding)>viewport.height)y=y-(y+h+(2*padding)-viewport.height);if(x<padding)x=padding;if(y<padding)y=padding;x=scroll.left+x;y=scroll.top+y;wnd.setPosition(x,y)};this.showTooltip=function(idTextmark){tucent.log('Main.showTooltip()','');if(this.tooltipIdTextmark==idTextmark)return;if(this.selData||this.isMouseDown)return;var pos=tucent.cumulativeOffset(this.domEngine.textmarkCache[idTextmark].labelNode);this.snapWindow(this.tooltip,pos[0],pos[1]);this.domEngine.toggleTextmark(this.tooltipIdTextmark,false);this.domEngine.toggleTextmark(idTextmark,true);this.tooltipIdTextmark=idTextmark;this.tooltip.showWaiting();this.httpRequest.send({method:'GET',url:'http://tucentserver.appspot.com/aws/1/',search:{action:'info',annotat_id:idTextmark},callback:tucent.bind(this,this.onTooltipInfoLoaded)})};this.hideTooltip=function(){if(this.tooltipIdTextmark!=this.windowIdTextmark){this.domEngine.toggleTextmark(this.tooltipIdTextmark,false)}this.tooltipIdTextmark=null;this.tooltip.hide()};this.showWindow=function(idTextmark,url,adPhrase){if(!this.window.isVisible()){var pos=[300,180];if(idTextmark!=null){pos=tucent.cumulativeOffset(this.domEngine.textmarkCache[idTextmark].labelNode)}this.window.setSize(this.settings.windowSize.width,this.settings.windowSize.height);this.snapWindow(this.window,pos[0],pos[1])}this.domEngine.toggleTextmark(this.windowIdTextmark,false);this.windowIdTextmark=idTextmark;this.domEngine.toggleTextmark(this.windowIdTextmark,true);this.window.showUrl(url);if(this.adEngine){this.adEngine.update(adPhrase)}};this.showOrCreateAnnotation=function(idTextmark){this.showWindow(idTextmark,'http://tucentserver.appspot.com/wgt/annotation/'+idTextmark+'/',this.domEngine.getPhrase(idTextmark))};this.onSiteLoaded=function(){try{if(tucent_settings.enabled!=null)this.settings.enabled=tucent_settings.enabled;if(tucent_settings.ignoreSearch!=null)this.settings.ignoreSearch=tucent_settings.ignoreSearch}catch(e){}if(!this.settings.enabled){tucent.log('Main.onSiteLoaded()','Tucent disabled.');return}this.url=window.location.href.split('#')[0];if(this.settings.ignoreSearch){this.url=this.url.split('?')[0]}else{this.url=this.url.replace(/._tucent.*=.+/,'')}this.resource_idf=this.url.replace(window.location.protocol+'//'+window.location.host,'');this.trackbackUrl='';var erg=document.body.innerHTML.match(/trackback:ping=["|'](.*)["|']/);if(erg){this.trackbackUrl=erg[1]}tucent.log('Main.onSiteLoaded()','\nfull url = '+window.location.href+'\nworking url = '+this.url+'\nrecource idf = '+this.resource_idf+'\ntrackback url = '+this.trackbackUrl);var tucentUi=document.createElement('div');document.body.appendChild(tucentUi);tucentUi.id='_tucent';tucentUi.innerHTML='<span style="display:none;">_tucent_begins</span>'+'<div id="_tucent_dom_engine"></div>'+'<div id="_tucent_multi_control"></div>'+'<div id="_tucent_windows"></div>'+'<span style="display:none;">_tucent_ends</span>';this.multiControl=new tucent.MultiControl();this.multiControl.init({domElement:tucent.$('_tucent_multi_control'),flBtn:this.settings.flBtn,onFloatingBtnClicked:tucent.bind(this,this.onFloatingBtnClicked),onSelectionBtnClicked:tucent.bind(this,this.onSelectionBtnClicked)});this.window=new tucent.Window();this.window.init({domElement:tucent.$('_tucent_windows'),fixedSize:this.settings.windowSize.fixed,minWidth:100,minHeight:80,adSpaceHeight:this.settings.adSpace?this.settings.adSpace.height:0,onClose:tucent.bind(this,this.onCloseWindow)});this.tooltip=new tucent.Tooltip();this.tooltip.init({domElement:tucent.$('_tucent_windows'),onClick:tucent.bind(this,this.onClickTooltip),onMouseOver:tucent.bind(this,this.onMouseOverTooltip),onMouseOutside:tucent.bind(this,this.onMouseOutsideTooltip),onMoveTextmark:tucent.bind(this,this.tooltip_onMoveTextmark),onDelTextmark:tucent.bind(this,this.tooltip_onDelTextmark)});this.tooltip.setSize(this.settings.tooltipSize.width,this.settings.tooltipSize.height);this.domEngine=new tucent.DomEngine();this.domEngine.init({domElement:tucent.$('_tucent_dom_engine'),approveArea:this.settings.approveArea,sensitiveTextmarks:this.settings.sensitiveTextmarks,onMouseOverTextmark:tucent.bind(this,this.onMouseOverTextmark),onMouseOutsideTextmark:tucent.bind(this,this.onMouseOutsideTextmark)});this.httpRequest=new tucent.HttpRequest();this.httpRequest.send({method:'GET',url:'http://tucentserver.appspot.com/aws/1/',search:{action:'get',forum_id:this.settings.idForum,atype:'html_textmark',resource_idf:this.resource_idf,amax:this.settings.amax,annotat_id:tucent.getUrlParam('_tucent')},callback:tucent.bind(this,this.onTextmarksLoaded)});if(this.settings.adSpace){this.adEngine=new tucent.AdFrame();this.adEngine.init({adContainer:this.window.adContainer,url:this.settings.adSpace.url})}var cssNode=document.createElement('link');cssNode.type='text/css';cssNode.rel='stylesheet';cssNode.href=this.settings.css;cssNode.media='screen';document.getElementsByTagName('head')[0].appendChild(cssNode);tucent.addEvent(document,'onmouseup',tucent.bind(this,this.onMouseUp));tucent.addEvent(document,'onmousedown',tucent.bind(this,this.onMouseDown));tucent.addEvent(window,'onscroll',tucent.bind(this,function(){this.isMouseDown=false}))};this.init=function(settings){this.settings=settings;if(tucent.getUrlParam('_tucent_log')=='1'){tucent.loggerInst=new tucent.Logger();tucent.loggerInst.init()}tucent.log('Main.init()','version '+this.settings.version);try{var w=this.settings.windowSize.split(',');this.settings.windowSize={width:tucent.validParseInt(w[0]),height:tucent.validParseInt(w[1]),fixed:w[2]=='1'};var t=this.settings.tooltipSize.split(',');this.settings.tooltipSize={width:tucent.validParseInt(t[0]),height:tucent.validParseInt(t[1])}}catch(e){tucent.log('Main.init()','Parameter not valid.');return}if(!document.getElementsByTagName('head')[0]){tucent.log('Main.init()','No head section found in the HTML document.');return}tucent.addEvent(window,'onload',tucent.bind(this,this.onSiteLoaded))}};this.HttpRequest=function(){this.options={timeout:10000};this.send=function(params){var id=tucent.HttpRequest.uniqueID++;var e=document.createElement('script');e.setAttribute('type','text/javascript');search='';if(params.search)search=tucent.toQueryString(params.search)+'&';var src=params.url+'?'+search+'output=json&callback=tucent.HttpRequest.callback[%5B'+id+'%5D]&noCache='+(new Date()).getTime();e.setAttribute('src',src);var requestData={id:id,callback:params.callback,scriptElement:e,timeout:null,onJSONResult:function(obj){window.clearTimeout(this.timeout);tucent.HttpRequest.callback[this.id]=null;setTimeout(tucent.bind(this,function(e){document.getElementsByTagName('head')[0].removeChild(e)},this.scriptElement),100);if(this.callback)this.callback(obj)}};var t=window.setTimeout(tucent.bind(this,this.onTimeout,requestData),this.options.timeout);requestData.timeout=t;tucent.HttpRequest.callback[id]=tucent.bind(requestData,requestData.onJSONResult);document.getElementsByTagName('head')[0].appendChild(e);tucent.log('HttpRequest.send()','\nGET '+src);return true};this.onTimeout=function(requestData){tucent.HttpRequest.callback[requestData.id]=null;setTimeout(tucent.bind(this,function(e){document.getElementsByTagName('head')[0].removeChild(e)},requestData.scriptElement),100);if(requestData.callback)requestData.callback({result:null,error:{code:0,msg:'No connection to server.'}})};this.init=function(){}};this.HttpRequest.uniqueID=0;this.HttpRequest.callback=new Array();this.MultiControl=function(){this.options=null;this.msgTextLeft=0;this.msgInterval=null;this.showTimeout=null;this.isIE=tucent.isIE();this.unhoverSelectionBtnTimeout=null;this.onMouseOverSelectionBtn=function(){window.clearTimeout(this.unhoverSelectionBtnTimeout)};this.onMouseOutsideSelectionBtn=function(){this.unhoverSelectionBtnTimeout=window.setTimeout(tucent.bind(this,this.hideSelectionButton),1000)};this.onScrollResize=function(){var viewport=tucent.getViewport();if(this.isIE){var scroll=tucent.getScrollOffsets();var msgStyle={position:'absolute',bottom:(0-scroll.top)+'px',width:(scroll.left+viewport.width)+'px'};var btnStyle={position:'absolute',bottom:(25-scroll.top)+'px',right:(25-scroll.left)+'px'}}else{var msgStyle={position:'fixed',bottom:'0px',width:(viewport.width)+'px'};var btnStyle={position:'fixed',bottom:'25px',right:'25px'}}tucent.setStyle(tucent.$('_tucent_msg'),msgStyle);if(this.options.flBtn){tucent.setStyle(tucent.$('_tucent_fl_btn'),btnStyle)}};this.showSelectionButton=function(x,y){window.clearTimeout(this.unhoverSelectionBtnTimeout);var selBtn=tucent.$('_tucent_sel_btn');tucent.setStyle(selBtn,{left:(x+15)+'px',top:(y-5)+'px'});tucent.showElement(selBtn);this.unhoverSelectionBtnTimeout=window.setTimeout(tucent.bind(this,this.hideSelectionButton),2000)};this.hideSelectionButton=function(){window.clearTimeout(this.unhoverSelectionBtnTimeout);tucent.hideElement(tucent.$('_tucent_sel_btn'))};this.printMsg=function(msg){this.msgTextLeft=tucent.getViewport().width;tucent.setStyle(tucent.$('_tucent_msg_text'),{left:this.msgTextLeft+'px'});tucent.setText(tucent.$('_tucent_msg_text'),msg);tucent.showElement(tucent.$('_tucent_msg'));if(this.msgInterval){window.clearInterval(this.msgInterval);this.msgInterval=null}if(this.showTimeout){window.clearTimeout(this.showTimeout);this.showTimeout=null}this.msgInterval=window.setInterval(tucent.bind(this,this.slideMsg),50)};this.slideMsg=function(){this.msgTextLeft-=80;if(this.msgTextLeft<=30){this.msgTextLeft=30;window.clearInterval(this.msgInterval);this.msgInterval=null;this.showTimeout=window.setTimeout(tucent.bind(this,function(){tucent.hideElement(tucent.$('_tucent_msg'))}),3000)}tucent.setStyle(tucent.$('_tucent_msg_text'),{left:this.msgTextLeft+'px'})};this.init=function(options){this.options=options;options.domElement.innerHTML='<div id="_tucent_msg" title="Status report" class="tucent_status_msg" style="display:none;">'+'<div id="_tucent_msg_text" class="text"></div>'+'</div>'+'<img id="_tucent_sel_btn" class="tucent_sel_btn" src="http://tucentserver.appspot.com/media/92/client/brand/default/sel_btn.png" style="display:none;" title="Click to create comment!">';if(this.options.flBtn){options.domElement.innerHTML+='<img id="_tucent_fl_btn" class="tucent_fl_btn" src="http://tucentserver.appspot.com/media/92/client/brand/default/fl_btn.png" title="View comments">'}var selBtn=tucent.$('_tucent_sel_btn');tucent.addEvent(selBtn,'onmouseover',tucent.bind(this,this.onMouseOverSelectionBtn));tucent.addEvent(selBtn,'onmouseout',tucent.bind(this,this.onMouseOutsideSelectionBtn));tucent.addEvent(selBtn,'onclick',this.options['onSelectionBtnClicked']);if(this.options.flBtn){tucent.addEvent(tucent.$('_tucent_fl_btn'),'onclick',this.options['onFloatingBtnClicked'])}this.onScrollResize();tucent.addEvent(window,'onresize',tucent.bind(this,this.onScrollResize));tucent.addEvent(window,'onscroll',tucent.bind(this,this.onScrollResize))}};this.BasicWindow=function(){this.id=null;this.pos=null;this.size=null;this.visible=false;this.options=null;this.drag=null;this.wnd=null;this.boundOnMouseUp=null;this.boundOnMouseMove=null;this.destroy=function(){if(this.drag){tucent.removeEvent(document,'onmouseup',this.boundOnMouseUp);tucent.removeEvent(document,'onmousemove',this.boundOnMouseMove)}tucent.removeNode(this.wnd)};this.setSize=function(width,height){if(width<this.options.minWidth)width=this.options.minWidth;else if(width>this.options.maxWidth)width=this.options.maxWidth;if(height<this.options.minHeight)height=this.options.minHeight;else if(height>this.options.maxHeight)height=this.options.maxHeight;this.size={x:width,y:height};tucent.setStyle(tucent.$(this.id+'_content'),{height:this.size.y+'px',width:this.size.x+'px'})};this.setPosition=function(left,top){this.pos={x:left,y:top};tucent.setStyle(this.wnd,{top:this.pos.y+'px',left:this.pos.x+'px'})};this.show=function(){tucent.showElement(this.wnd);this.visible=true};this.hide=function(){tucent.hideElement(this.wnd);this.visible=false};this.isVisible=function(){return this.visible};this.onMouseUp=function(e){tucent.log('BasicWindow.onMouseUp()','');this.drag=null;tucent.removeEvent(document,'onmouseup',this.boundOnMouseUp);tucent.removeEvent(document,'onmousemove',this.boundOnMouseMove);var cover=tucent.$(this.id+'_cover');if(cover)tucent.hideElement(cover);document.body.ondrag=null;document.body.onselectstart=null;return true};this.onMouseMove=function(e){if(!this.drag)return true;var m=tucent.getMousePos(e);switch(this.drag.type){case'move':this.setPosition(this.drag.oldleft-(this.drag.oldmx-m.x),this.drag.oldtop-(this.drag.oldmy-m.y));break;case'resizeBottom':var w=this.drag.oldwidth-(this.drag.oldmx-m.x);var h=this.drag.oldheight-(this.drag.oldmy-m.y);this.setSize(w,h);break;case'resizeTop':var w=this.drag.oldwidth+(this.drag.oldmx-m.x);var h=this.drag.oldheight+(this.drag.oldmy-m.y);var x=this.drag.oldleft-(this.drag.oldmx-m.x);var y=this.drag.oldtop-(this.drag.oldmy-m.y);this.setPosition(x,y);this.setSize(w,h);break}return true};this.initDrag=function(type,e){var m=tucent.getMousePos(e);this.drag={type:type,oldtop:this.pos.y,oldleft:this.pos.x,oldwidth:this.size.x,oldheight:this.size.y,oldmx:m.x,oldmy:m.y};tucent.addEvent(document,'onmouseup',this.boundOnMouseUp);tucent.addEvent(document,'onmousemove',this.boundOnMouseMove);document.body.focus();var cover=tucent.$(this.id+'_cover');if(cover)tucent.showElement(cover);document.body.ondrag=function(){return false};document.body.onselectstart=function(){return false}};this.init=function(options){this.options=options;this.id='_tucent_window_'+new Date().getTime()+(tucent.BasicWindow.uniqueID++);this.wnd=document.createElement('div');options.domElement.appendChild(this.wnd);this.wnd.id=this.id;this.wnd.className='tucent_basic_window';tucent.hideElement(this.wnd);this.boundOnMouseUp=tucent.bind(this,this.onMouseUp);this.boundOnMouseMove=tucent.bind(this,this.onMouseMove)}};this.BasicWindow.uniqueID=0;this.Window=function(){this.boundOnMouseDown=null;this.boundOnMouseClick=null;this.adContainer=null;this.destroy=function(){tucent.removeEvent(this.wnd,'onmousedown',this.boundOnMouseDown);tucent.removeEvent(this.wnd,'onclick',this.boundOnMouseClick);tucent.Window.prototype.destroy.call(this)};this.onMouseDown=function(e){tucent.log('Window.onMouseDown()','');switch(tucent.getEventTarget(e).id){case this.id+"_resize_top":this.initDrag('resizeTop',e);break;case this.id+"_resize_bottom":this.initDrag('resizeBottom',e);break;case this.id+"_bottom_bar":case this.id+"_top_bar":case this.id+"_logo":this.initDrag('move',e);break}if(e.preventDefault)e.preventDefault();return true};this.onMouseClick=function(e){tucent.log('Window.onMouseClick()','');switch(tucent.getEventTarget(e).id){case this.id+"_close":this.options['onClose']();break}return true};this.onIframeLoaded=function(e){tucent.hideElement(tucent.$(this.id+'_loading'));return true};this.showUrl=function(url){tucent.$(this.id+'_iframe').src=url;tucent.showElement(tucent.$(this.id+'_loading'));this.show()};this.init=function(options){tucent.Window.prototype.init.apply(this,[options]);var adSpaceHtml=this.options.adSpaceHeight>0?'<tr>'+'<td class="tucent_shadow_w"></td>'+'<td id="'+this.id+'_adspace" class="tucent_window_adspace" style="height:'+this.options.adSpaceHeight+'px"></td>'+'<td class="tucent_shadow_e"></td>'+'</tr>':'';var resizeHtml=this.options.fixedSize?'':'<div id="'+this.id+'_resize_top" class="tucent_window_resize_top"></div>'+'<div id="'+this.id+'_resize_bottom" class="tucent_window_resize_bottom"></div>';this.wnd.innerHTML='<div id="'+this.id+'_close" class="tucent_window_close" title="Close"></div>'+'<img id="'+this.id+'_logo" src="http://tucentserver.appspot.com/media/92/client/brand/default/logo_icon.gif" class="tucent_window_logo">'+resizeHtml+'<table>'+'<tr>'+'<td class="tucent_shadow_nw"></td>'+'<td class="tucent_shadow_n"></td>'+'<td class="tucent_shadow_ne"></td>'+'</tr>'+'<tr>'+'<td class="tucent_shadow_w }}"></td>'+'<td id="'+this.id+'_top_bar" class="tucent_window_top_bar"></td>'+'<td class="tucent_shadow_e"></td>'+'</tr>'+'<tr>'+'<td class="tucent_shadow_w"></td>'+'<td class="tucent_window_inner_wnd">'+'<div id="'+this.id+'_content" class="tucent_window_content">'+'<div id="'+this.id+'_cover" class="tucent_window_cover" style="display:none;"></div>'+'<div id="'+this.id+'_loading" class="tucent_window_loading" style="display:none;"></div>'+'<iframe id="'+this.id+'_iframe" frameborder="0" scrolling="auto" onload="this.fn_onload()"></iframe>'+'</div>'+'</td>'+'<td class="tucent_shadow_e"></td>'+'</tr>'+adSpaceHtml+'<tr>'+'<td class="tucent_shadow_w"></td>'+'<td id="'+this.id+'_bottom_bar" class="tucent_window_bottom_bar"></td>'+'<td class="tucent_shadow_e"></td>'+'</tr>'+'<tr>'+'<td class="tucent_shadow_sw"></td>'+'<td class="tucent_shadow_s"></td>'+'<td class="tucent_shadow_se"></td>'+'</tr>';'</table>';this.adContainer=tucent.$(this.id+'_adspace');this.boundOnMouseDown=tucent.bind(this,this.onMouseDown);this.boundOnMouseClick=tucent.bind(this,this.onMouseClick);tucent.addEvent(this.wnd,'onmousedown',this.boundOnMouseDown);tucent.addEvent(this.wnd,'onclick',this.boundOnMouseClick);tucent.$(this.id+'_iframe').fn_onload=tucent.bind(this,this.onIframeLoaded)}};this.Window.prototype=new tucent.BasicWindow();this.Tooltip=function(){this.permanent=false;this.currLayer=null;this.pendingEvent=null;this.boundOnMouseDown=null;this.boundOnMouseClick=null;this.destroy=function(){tucent.removeEvent(this.wnd,'onmousedown',this.boundOnMouseDown);tucent.removeEvent(this.wnd,'onclick',this.boundOnMouseClick);tucent.removeEvent(this.wnd,'onmouseover',this.options['onMouseOver']);tucent.removeEvent(this.wnd,'onmouseout',this.options['onMouseOutside']);tucent.Tooltip.prototype.destroy.call(this)};this.isPermanent=function(){return this.permanent};this.onMouseDown=function(e){tucent.log('Tooltip.onMouseDown()','');switch(tucent.getEventTarget(e).id){case this.id+'_top_bar':case this.id+'_bottom_bar':this.initDrag('move',e);break}return true};this.onMouseClick=function(e){tucent.log('Tooltip.onMouseClick()','');switch(tucent.getEventTarget(e).id){case this.id+'_move_textmark':this.permanent=true;tucent.$(this.id+'_commit_text').innerHTML='Please select text passage...';this.pendingEvent='onMoveTextmark';this.setLayer(tucent.$(this.id+"_commit"));break;case this.id+'_del_textmark':this.permanent=true;tucent.$(this.id+'_commit_text').innerHTML='Delete annotation?';this.pendingEvent='onDelTextmark';this.setLayer(tucent.$(this.id+"_commit"));break;case this.id+'_commit_yes':this.permanent=false;this.options[this.pendingEvent]();break;case this.id+'_commit_no':this.permanent=false;this.setLayer(this.prevLayer);break;case this.id+'_bottom_bar':break;default:this.options['onClick']()}return true},this.setLayer=function(layer){this.prevLayer=this.currLayer;tucent.hideElement(this.currLayer);this.currLayer=layer;tucent.showElement(layer)};this.showWaiting=function(){this.hide();this.linkUrl=null;this.setLayer(tucent.$(this.id+'_waiting'));this.show()};this.showMarkInfo=function(markInfo){this.hide();if(markInfo==null){this.setLayer(tucent.$(this.id+'_no_info'))}else{var subject=tucent.truncDots(markInfo.subject,45);var author=tucent.truncDots(markInfo.author,12);var text=tucent.truncDots(markInfo.text,65);var re=/(\d+)-(\d+)-(\d+) (\d+):(\d+)/;re.exec(markInfo.created);var d=new Date();d.setUTCFullYear(RegExp.$1);d.setUTCMonth(RegExp.$2-1);d.setUTCDate(RegExp.$3);d.setUTCHours(RegExp.$4);d.setUTCMinutes(RegExp.$5);var time=' '+tucent.formatDate(d,'dd.mm.yy, kk:nn');tucent.setText(tucent.$(this.id+'_subject'),subject);tucent.setText(tucent.$(this.id+'_time'),time);tucent.setText(tucent.$(this.id+'_author'),author||'Gast');tucent.setText(tucent.$(this.id+'_replies'),markInfo.replies);tucent.setText(tucent.$(this.id+'_text'),text);this.setLayer(tucent.$(this.id+'_post_info'))}this.show()};this.init=function(options){tucent.Window.prototype.init.apply(this,[options]);this.wnd.innerHTML='<div id="'+this.id+'_move_textmark" class="tucent_tooltip_move" title="Move annotation"></div>'+'<div id="'+this.id+'_del_textmark" class="tucent_tooltip_del" title="Delete annotation"></div>'+'<table>'+'<tr>'+'<td class="tucent_shadow_nw"></td>'+'<td class="tucent_shadow_n"></td>'+'<td class="tucent_shadow_ne"></td>'+'</tr>'+'<tr>'+'<td class="tucent_shadow_w"></td>'+'<td class="tucent_tooltip_inner_wnd">'+'<div id="'+this.id+'_content" class="tucent_tooltip_content">'+'<div id="'+this.id+'_post_info" class="pointer">'+'<p>'+'<span id="'+this.id+'_subject" class="subject"></span>'+'<span id="'+this.id+'_replies" class="replies"></span>'+'</p>'+'<p id="'+this.id+'_text"></p>'+'<p>'+'<span id="'+this.id+'_author" class="author"></span>'+'<span id="'+this.id+'_time"></span>'+'</p>'+'</div>'+'<div id="'+this.id+'_no_info" style="display:none;" class="pointer">'+'<p>No post linked.</p>'+'</div>'+'<div id="'+this.id+'_waiting" style="display:none;">'+'<p>Waiting...</p>'+'</div>'+'<div id="'+this.id+'_commit" style="display:none;">'+'<p id="'+this.id+'_commit_text"></p>'+'<p>'+'<input type="button" id="'+this.id+'_commit_yes" value="Ok">'+'<input type="button" id="'+this.id+'_commit_no" value="Cancel">'+'</p>'+'</div>'+'</div>'+'</td>'+'<td class="tucent_shadow_e"></td>'+'</tr>'+'<tr>'+'<td class="tucent_shadow_w"></td>'+'<td id="'+this.id+'_bottom_bar" class="tucent_tooltip_bottom_bar"></td>'+'<td class="tucent_shadow_e"></td>'+'</tr>'+'<tr>'+'<td class="tucent_shadow_sw"></td>'+'<td class="tucent_shadow_s"></td>'+'<td class="tucent_shadow_se"></td>'+'</tr>'+'</table>';this.boundOnMouseDown=tucent.bind(this,this.onMouseDown);this.boundOnMouseClick=tucent.bind(this,this.onMouseClick);tucent.addEvent(this.wnd,'onmousedown',this.boundOnMouseDown);tucent.addEvent(this.wnd,'onclick',this.boundOnMouseClick);tucent.addEvent(this.wnd,'onmouseover',this.options['onMouseOver']);tucent.addEvent(this.wnd,'onmouseout',this.options['onMouseOutside']);this.currLayer=tucent.$(this.id+"_post_info")}};this.Tooltip.prototype=new tucent.BasicWindow();this.DomEngine=function(){this.options=null;this.textmarkCache=new Object();this.domReplacements=new Array();this.boundOnMouseOverTextmark=null;this.boundOnMouseOutsideTextmark=null;this.sampleCache=null;this.pathCache=null;this.lockedTextmarks=new Object();this.flushCaches=function(){this.textmarkCache=new Object;delete this.sampleCache;delete this.pathCache};this.getPhrase=function(idTextmark){if(idTextmark==null)return'';var phrase='';var textmark=this.textmarkCache[idTextmark];for(var i=0;i<textmark.spanNodes.length;++i){phrase+=tucent.getText(textmark.spanNodes[i])}return phrase};this.isMouseOverTextmark=function(idTextmark){return this.showTooltipTimeout_idTextmark==idTextmark};this.toggleTextmark=function(idTextmark,flag){if(idTextmark==null)return;this.lockedTextmarks[idTextmark]=flag;this.highlightTextmark(idTextmark,flag)};this.highlightTextmark=function(idTextmark,highlight){if(this.lockedTextmarks[idTextmark]&&!highlight){return}var textmark=this.textmarkCache[idTextmark];for(var i=0;i<textmark.spanNodes.length;++i){this.highlightSpan(textmark.spanNodes[i],highlight)}};this.highlightSpan=function(spanNode,highlight){if(highlight){spanNode.className='tucent_textmark_highlight'}else{spanNode.className=spanNode.parentNode.className.indexOf('tucent_textmark')!=-1?'_tucent_textmark':'tucent_textmark'}};this.initTextmark=function(id,data){tucent.log('DomEngine.initTextmark()','\nid = '+id+'\ndata = '+data);if(this.textmarkCache[id]){tucent.log('DomEngine.initTextmark()','Already initialized.');return false}var arr=data.split(',');if(arr.length!=6)return;startPath=arr[0];startSamples=arr[1];startOffset=parseInt(arr[2]);endPath=arr[3];endSamples=arr[4];endOffset=parseInt(arr[5]);var startNode=this.matchNodeCached(startPath,startSamples);if(startNode==null){tucent.log('DomEngine.initTextmark()','startNode - no matching node found.');return null}var endNode=startNode;if(endSamples!=''){endNode=this.matchNodeCached(endPath,endSamples)}if(endNode==null){tucent.log('DomEngine.initTextmark()','endNode - no matching node found.');return null}if(this.options.approveArea&&!this.isApproved(startNode,endNode)){tucent.log('DomEngine.initTextmark()','Textmark not in approved area.');return false}tucent.log('DomEngine.initTextmark()','Matching nodes found.');var textmark=this.textmarkCache[id]=new tucent.DomEngine.Textmark(id,startNode,startOffset,endNode,endOffset);return textmark};this.createTextmarks=function(){for(var i in this.textmarkCache){this.createTextmark(this.textmarkCache[i])}};this.createTextmark=function(textmark){if(!textmark)return;var startNode=textmark.startNode;var endNode=textmark.endNode;var startOffset=textmark.startOffset;var endOffset=textmark.endOffset;while(true){startNode=this.getNextTextNode(startNode);if(startNode==null)return null;var r=this.rawString(startNode.nodeValue).length;if(startOffset<r){break}startOffset-=r}while(true){endNode=this.getNextTextNode(endNode);if(endNode==null)return null;var r=this.rawString(endNode.nodeValue).length;if(endOffset<=r){break}endOffset-=r}startOffset=this.calcRealOffset(startNode.nodeValue,startOffset,false);endOffset=this.calcRealOffset(endNode.nodeValue,endOffset,true);tucent.log('DomEngine.createTextmark()','\nmark = '+startNode.nodeValue.substr(startOffset,10)+'...|'+endNode.nodeValue.substr(endOffset,10)+'...');for(var len=endNode.nodeValue.length;(endOffset<len)&&(!endNode.nodeValue.charAt(endOffset).match(/\s|\.|,|-|!|\?|;|:/));++endOffset);for(;(startOffset>0)&&(!startNode.nodeValue.charAt(startOffset-1).match(/\s|\.|,|-|!|\?|;|:/));--startOffset);tucent.log('DomEngine.createTextmark()','\nadjusted = '+startNode.nodeValue.substr(startOffset,10)+'...|'+endNode.nodeValue.substr(endOffset,10)+'...');var node=startNode;var startO=startOffset;var lastSpanNode=null;var done=false;while(!done){var endO=node.nodeValue.length;if(node==endNode){endO=endOffset;done=true}if(!tucent.isEmpty(node)){lastSpanNode=this.spanTextNodeInt(node,startO,endO,textmark);node=lastSpanNode.firstChild}node=this.getNextTextNode(node);startO=0}var labelNode=tucent.$('_tucent_label').cloneNode(true);labelNode.id=null;labelNode.idTextmark=textmark.id;if(!this.options.sensitiveTextmarks){tucent.addEvent(labelNode,'onmouseover',this.boundOnMouseOverTextmark);tucent.addEvent(labelNode,'onmouseout',this.boundOnMouseOutsideTextmark)}lastSpanNode.appendChild(labelNode);tucent.showElement(labelNode);return textmark.labelNode=labelNode};this.isApproved=function(startNode,endNode){var p=startNode;if(startNode!=endNode){while(p=p.parentNode){if(tucent.descendantOf(endNode,p))break}}do{if(p.className.match(/tucent/))return true}while((p.nodeName.toLowerCase()!='body')&&(p=p.parentNode));return false};this.removeTextmarks=function(){for(var i in this.textmarkCache){var t=this.textmarkCache[i];if(!this.options.sensitiveTextmarks){tucent.removeEvent(t.labelNode,'onmouseover',this.boundOnMouseOverTextmark);tucent.removeEvent(t.labelNode,'onmouseout',this.boundOnMouseOutsideTextmark)}else{for(var s=0;s<t.spanNodes.length;++s){tucent.removeEvent(t.spanNodes[s],'onmouseover',this.boundOnMouseOverTextmark);tucent.removeEvent(t.spanNodes[s],'onmouseout',this.boundOnMouseOutsideTextmark)}}t.spanNodes=new Array();t.labelNode=null}for(var repl;repl=this.domReplacements.pop();){if(repl.origNode.parentNode==null){tucent.insertAfter(repl.origNode,repl.currNode)}tucent.removeNode(repl.currNode)}tucent.log('DomEngine.removeTextmarks()','DOM cleaned up.')};this.spanTextNodeInt=function(node,startOffset,endOffset,textmark){var clone=node;if(startOffset!=0){clone=node.cloneNode(true);clone.nodeValue=clone.nodeValue.substring(0,startOffset);tucent.insertAfter(clone,node);this.domReplacements.push({origNode:node,currNode:clone})}var spanNode=document.createElement('span');if(node.parentNode.className.indexOf('tucent_textmark')!=-1){spanNode.className='_tucent_textmark';if(this.checkTextmarkOrder(this.textmarkCache[node.parentNode.idTextmark],textmark)){spanNode.idTextmark=node.parentNode.idTextmark}else{spanNode.idTextmark=textmark.id}}else{spanNode.className='tucent_textmark';spanNode.idTextmark=textmark.id;}tucent.insertAfter(spanNode,clone);if(this.options.sensitiveTextmarks){tucent.addEvent(spanNode,'onmouseover',this.boundOnMouseOverTextmark);tucent.addEvent(spanNode,'onmouseout',this.boundOnMouseOutsideTextmark)}textmark.spanNodes.push(spanNode);this.domReplacements.push({origNode:node,currNode:spanNode});clone=node.cloneNode(true);clone.nodeValue=clone.nodeValue.substring(startOffset,endOffset);spanNode.appendChild(clone);if(endOffset!=node.nodeValue.length){clone=node.cloneNode(true);clone.nodeValue=clone.nodeValue.substring(endOffset);tucent.insertAfter(clone,spanNode);this.domReplacements.push({origNode:node,currNode:clone})}tucent.removeNode(node);return spanNode};this.matchNodeCached=function(nodePath,textSamples){if(!this.pathCache){this.sampleCache=new Object();this.pathCache=new Object();this.pathCache['B']=new Array(document.body);return this.matchNode(document.body,1,nodePath,textSamples)}var n;if(n=this.sampleCache[textSamples])return n;var teilbaum=null;for(var plen=nodePath.length;plen>0;--plen){var currPath=nodePath.substr(0,plen);var nodes;if(nodes=this.pathCache[currPath]){for(var i=0;i<nodes.length;++i){if(teilbaum){if(teilbaum==nodes[i])teilbaum=null;continue}if(n=this.matchNode(nodes[i],plen,nodePath,textSamples))return n}teilbaum=(nodes[nodes.length-1]).parentNode}}return null};this.matchNode=function(node,plen,nodePath,textSamples){if(plen>=nodePath.length){var text=this.rawString(tucent.getText(node));if(node.nodeName.toLowerCase()=='body'){var i=text.search(/_tucent_begins/);var j=text.search(/_tucent_ends/);text=text.substring(0,i)+text.substring(j+12)}var nodeSamples='';for(var k=0;k<32;++k){nodeSamples+=text.charAt(tucent.haltonSeq[k]*text.length)}this.sampleCache[nodeSamples]=node;if(textSamples==nodeSamples){return node;}}plen++;var found=null;if(plen<=nodePath.length||nodePath.length>=32){var currPath=nodePath.substr(0,plen);for(var i=0;i<node.childNodes.length;++i){var c=node.childNodes[i];if(c.nodeType!=1||(plen<=32&&nodePath.charAt(plen-1)!=c.nodeName.charAt(0)))continue;if(plen<=32){if(!this.pathCache[currPath]){this.pathCache[currPath]=new Array()}this.pathCache[currPath].push(c);if(!found){found=this.matchNode(c,plen,nodePath,textSamples);}}else{if(found=this.matchNode(c,plen,nodePath,textSamples))return found}}}return found};this.getSignificantNode=function(node){while(true){if(node.nodeName.toLowerCase()=='body')break;if(node.nodeType==1&&(node.nodeName.toLowerCase()!='span'||node.className.indexOf('tucent_textmark')==-1)){var text=tucent.getText(node);if(text!=null&&text.length>=50)break}node=node.parentNode}return node};this.calcSigOffset=function(currNode,node,offset){while(true){currNode=this.getNextTextNode(currNode);if(currNode==null)return null;if(currNode==node)break;offset+=this.rawString(currNode.nodeValue).length}return offset};this.getNodeData=function(node){var text=this.rawString(tucent.getText(node));if(node.nodeName.toLowerCase()=='body'){var i=text.search(/_tucent_begins/);var j=text.search(/_tucent_ends/);text=text.substring(0,i)+text.substring(j+12)}var samples='';for(var j=0;j<32;++j){samples+=text.charAt(tucent.haltonSeq[j]*text.length)}var path='';while(true){path+=node.nodeName.charAt(0);if(node.nodeName.toLowerCase()=='body')break;node=node.parentNode}return{path:tucent.reverseString(path),samples:samples}};this.convertSel2Db=function(sel){var startSigNode=this.getSignificantNode(sel.startNode);var startSigOffset=this.calcSigOffset(startSigNode,sel.startNode,sel.startOffset);var startNodeData=this.getNodeData(startSigNode);var data=startNodeData.path+','+startNodeData.samples+','+startSigOffset+',';if(sel.startNode!=sel.endNode){var endSigNode=this.getSignificantNode(sel.endNode);var endSigOffset=this.calcSigOffset(endSigNode,sel.endNode,sel.endOffset);var endNodeData=this.getNodeData(endSigNode);data+=endNodeData.path+','+endNodeData.samples+','+endSigOffset}else{var endSigOffset=(startSigOffset-sel.startOffset)+sel.endOffset;data+=',,'+endSigOffset}if(this.options.approveArea&&!this.isApproved(startSigNode,endSigNode||startSigNode)){tucent.log('DomEngine.convertSel2Db()','Textmark not in approved area.');return false}tucent.log('DomEngine.convertSel2Db()','\ndata = '+data);return data};this.getNextTextNode=function(node){while(true){if(!node.hasChildNodes()){while(node.nextSibling==null){node=node.parentNode;if(node.nodeName.toLowerCase()=='body'){return null;}}node=node.nextSibling}while(node.hasChildNodes()){node=node.firstChild}if(node.nodeType==3)return node}};this.rawString=function(str){return str.replace(/\W/g,'')};this.calcRealOffset=function(str,offset,wsAllowed){var cnt=0;var i=0;do{var substr=str.substring(i,offset);cnt=offset-i-this.rawString(substr).length;i=offset;offset+=cnt}while(cnt);if(!wsAllowed){while(str.charAt(offset).match(/\W/)){++offset}}return offset};this.checkTextmarkOrder=function(textmark1,textmark2){if(textmark1.endNode==textmark2.endNode){return textmark1.endOffset<=textmark2.endOffset}node=textmark1.endNode;do{node=node.parentNode}while(!tucent.descendantOf(textmark2.endNode,node));for(var i=0;i<node.childNodes.length;++i){if(tucent.descendantOf(textmark1.endNode,node.childNodes[i]))return true;else if(tucent.descendantOf(textmark2.endNode,node.childNodes[i]))return false}};this.isSelected=function(){if(window.getSelection){var userSelection=window.getSelection();if(userSelection.rangeCount==0)return false;var rangeObj;if(userSelection.getRangeAt){rangeObj=userSelection.getRangeAt(0)}else{rangeObj=document.createRange();rangeObj.setStart(userSelection.anchorNode,userSelection.anchorOffset);rangeObj.setEnd(userSelection.focusNode,userSelection.focusOffset)}if(rangeObj=='')return false}else if(document.selection){var txtRangeObj=document.selection.createRange();if(txtRangeObj.text==""){return false}}return true};this.getSelection=function(){var sel=null;if(window.getSelection){var userSelection=window.getSelection();if(userSelection.rangeCount==0)return null;var rangeObj;if(userSelection.getRangeAt){rangeObj=userSelection.getRangeAt(0)}else{rangeObj=document.createRange();rangeObj.setStart(userSelection.anchorNode,userSelection.anchorOffset);rangeObj.setEnd(userSelection.focusNode,userSelection.focusOffset)}if(rangeObj=='')return null;var parentNode=rangeObj.commonAncestorContainer;if(parentNode.nodeType==3){parentNode=parentNode.parentNode}var len=this.rawString(rangeObj.toString()).length;var parentRangeObj=document.createRange();parentRangeObj.selectNodeContents(parentNode);var cpRangeObj=rangeObj.cloneRange();cpRangeObj.setStart(parentRangeObj.startContainer,parentRangeObj.startOffset);var startOffset=this.rawString(cpRangeObj.toString()).length-len}else if(document.selection){var txtRangeObj=document.selection.createRange();if(txtRangeObj.text=="")return null;var parentNode=txtRangeObj.parentElement();var len=this.rawString(txtRangeObj.text).length;var parentTxtRangeObj=document.selection.createRange();parentTxtRangeObj.moveToElementText(parentNode);var cpTxtRangeObj=txtRangeObj.duplicate();cpTxtRangeObj.setEndPoint('StartToStart',parentTxtRangeObj);var startOffset=this.rawString(cpTxtRangeObj.text).length-len}var node=parentNode;var count=startOffset;while(node=this.getNextTextNode(node)){count-=this.rawString(node.nodeValue).length;if(count<0)break}var startNode=node;startOffset=this.rawString(node.nodeValue).length+count;count=startOffset+len;do{count-=this.rawString(node.nodeValue).length;if(count<=0)break}while(node=this.getNextTextNode(node));var endNode=node;var endOffset=this.rawString(node.nodeValue).length+count;sel={startNode:startNode,startOffset:startOffset,endNode:endNode,endOffset:endOffset};tucent.log('DomEngine.getSelection()','sel = '+this.rawString(sel.startNode.nodeValue).substr(sel.startOffset,10)+'...|'+this.rawString(sel.endNode.nodeValue).substr(sel.endOffset,10));return sel};this.init=function(options){this.options=options;options.domElement.innerHTML='<img id="_tucent_label" src="http://tucentserver.appspot.com/media/92/client/brand/default/textmark_icon.gif" class="tucent_textmark_label">';tucent.hideElement(tucent.$('_tucent_label'));this.boundOnMouseOverTextmark=this.options['onMouseOverTextmark'];this.boundOnMouseOutsideTextmark=this.options['onMouseOutsideTextmark']}};this.DomEngine.Textmark=function(id,startNode,startOffset,endNode,endOffset){this.id=id;this.spanNodes=new Array();this.labelNode=null;this.startNode=startNode;this.startOffset=startOffset;this.endNode=endNode;this.endOffset=endOffset};this.BasicAdEngine=function(){this.options=null;this.update=null;this.init=function(options){this.options=options}};this.AdFrame=function(){this.update=function(q){};this.init=function(options){tucent.AdFrame.prototype.init.apply(this,[options]);this.options.adContainer.innerHTML='<iframe id="_tucent_adframe_iframe" frameborder="0" scrolling="no" src="'+this.options.url+'"></iframe>'}};this.AdFrame.prototype=new tucent.BasicAdEngine()}};tucent.init();var _tucent=new tucent.Main();_tucent.init({"lang":"en","adSpace":null,"selectionBtn":true,"approveArea":false,"sensitiveTextmarks":true,"enabled":true,"idForum":"32","windowSize":"468,400,1","ignoreSearch":false,"version":"1.119","tooltipSize":"200,70","trackback":true,"amax":"8","css":"http://tucentserver.appspot.com/media/119/client/theme/default/theme.css","flBtn":true})}