var Browser={isIE:(!navigator.userAgent.match(/Gecko/)&&!window.opera),isIE7:(navigator.userAgent.match(/MSIE\s+7/i)),isIE8:(navigator.userAgent.match(/MSIE\s+8/i)),isIE6:(!navigator.userAgent.match(/Gecko/)&&!window.opera)&&(!navigator.userAgent.match(/MSIE\s+7/i))&&(!navigator.userAgent.match(/MSIE\s+8/i)),isSafari:(navigator.userAgent.match(/Safari/i)),isChrome:(navigator.userAgent.toLowerCase().indexOf("chrome")>-1),isMac:(navigator.platform.match(/mac/i)),isOpera:!!window.opera,isWindows:navigator.platform.match(/win[0-9]+/i)};var timer={};var effects={};function effectsCancel(a){if(effects[a]){effects[a].cancel();effects[a]=null}}var Util={eventSrc:function(b,a){var c=(Browser.isIE)?b.srcElement:b.target;if(c&&a){return Util.findParent(c,a)}return c},findParent:function(d,c){var b;if(c.className){b="className"}else{if(c.id){b="id"}else{if(c.tagName){b="tagName"}}}if(b){for(var a=0;a<10&&d;d=d.parentNode,a++){if(d[b]==c[b]){return d}}}return null},prepend:function(b,a){if(b.firstChild){b.insertBefore(a,b.firstChild)}else{b.appendChild(a)}},insertAfter:function(b,a){if(a.nextSibling){a.parentNode.insertBefore(b,a.nextSibling)}else{a.parentNode.appendChild(b)}},wrapText:function(a){return a.replace(/([^& ]{7})/g,"$1<wbr />")},append:function(f,a,b,e,d){if(!f){return null}var c;if(f.ownerDocument){c=f.ownerDocument.createElement(a)}else{c=document.createElement(a)}if(b){switch(a){case"IMG":case"IFRAME":c.src=b;break;case"FORM":c.NAME=b;break;case"INPUT":if(d){c.type=d}c.name=b;break;default:c.innerHTML=b;break}}if(e){c.className=e}f.appendChild(c);return c},truncate:function(b,a){if(!a){a=0}if(!b){return}if(b.tagName=="TABLE"||b.tagName=="THEAD"||b.tagName=="TBODY"){while(b.rows.length>a){b.deleteRow(a)}}else{if(b.tagName=="TR"){while(b.cells.length>a){b.deleteCell(a)}}else{if(b.tagName=="SELECT"){while(b.options.length>a){b.remove(a)}}else{if(!a){b.innerHTML=""}else{while(b.childNodes.length>a){b.removeChild(b.childNodes[a])}}}}}},removeElementsByID:function(b){var a=$(b);while(a){a.parentNode.removeChild(a);a=$(b)}},contains:function(b,a){if(Browser.isIE){return b.contains(a)}else{var c=a;if(c==b){return true}if(!c.parentNode){return false}while(c){if(c.parentNode==b){return true}c=c.parentNode}return false}},loadJS:function(c,b){var a=document.createElement("SCRIPT");a.src=c+(b?"":"?"+Math.random());a.charset="UTF-8";a.type="text/javascript";document.body.appendChild(a)},importCSS:function(b,a,d){if(!d){d=document}var c=d.createElement("STYLE");c.type="text/css";d.getElementsByTagName("HEAD")[0].appendChild(c);if(Browser.isIE){c.styleSheet.addImport(b+"?"+Math.random())}else{c.sheet.insertRule('@import "'+b+'";',(typeof a!="undefined")?a:c.sheet.cssRules.length)}},isImage:function(a){return a.match(/\.jpg$|\.gif$|\.bmp$|\.png$|\.jpeg$|\.tif$|\.tiff$/i)},innerText:function(b,a){if(typeof a=="undefined"){if(Browser.isIE){return b.innerText}else{return b.textContent}}else{if(Browser.isIE){b.innerText=a}else{b.textContent=a}}},_field:null,fieldFocus:function(a){Util._field=a;setTimeout('if (Util._field) {try{Util._field.focus();if (Util._field.tagName == "INPUT") Util._field.select();}catch(e){}}',10)},getCookie:function(c,f){var b=document.cookie;var e=c+"=";var d=b.indexOf("; "+e);if(d==-1){d=b.indexOf(e);if(d!=0){return f}}else{d+=2}var a=document.cookie.indexOf(";",d);if(a==-1){a=b.length}if(unescape(b.substring(d+e.length,a))){return unescape(b.substring(d+e.length,a))}else{return f}},setCookie:function(b,d,e,c,a){document.cookie=b+"="+d+((e)?"; path="+e:"")+((c)?"; domain="+c:"")+(a?("; expires="+a):"")},deleteCookie:function(a,c,b){if(this.getCookie(a)){document.cookie=a+"="+((c)?"; path="+c:"")+((b)?"; domain="+b:"")+"; expires=Thu, 01-Jan-70 00:00:01 GMT"}},objPost:function(c){var a="";for(var b in c){a+="&"+encodeURIComponent(b)+"="+encodeURIComponent(c[b])}return a},toPost:function(c){var a="";for(var b=0;b<c.elements.length;b++){if(c.elements[b].tagName=="FIELDSET"){continue}if(c.elements[b].tagName=="SELECT"){if(c.elements[b].multiple==true){for(var d=0;d<c.elements[b].options.length;d++){if(c.elements[b].options[d].selected==true){a+="&"+encodeURIComponent(c.elements[b].name)+"="+(encodeURIComponent(c.elements[b].options[d].value))}}}else{a+="&"+encodeURIComponent(c.elements[b].name)+"="+(encodeURIComponent(c.elements[b].value))}}else{switch(c.elements[b].type){case"checkbox":case"radio":if(c.elements[b].checked!=true){continue}default:a+="&"+encodeURIComponent(c.elements[b].name)+"="+(encodeURIComponent(c.elements[b].value));break}}}return a},imgError:function(b,a){try{(a?b.parentNode:b).style.display="none"}catch(c){}},focusFirstBlankField:function(b,d){var c;for(var a=0;a<document.forms.length;a++){c=b?b:document.forms[a];for(var h=0;h<c.elements.length;h++){if((d||!c.elements[h].value.trim())&&c.elements[h].type!="hidden"){try{c.elements[h].focus();Util.fieldFocus(c.elements[h]);return true}catch(g){}}}if(b){break}}return false},escapeURL:function(a){return encodeURIComponent(a)}};var Dialog={curtain:null,container:null,outer:null,IEEmbeds:[],archive:null,noHideOnESC:false,show:function(b,a){b=$(b);if(!b){return}if(!a){a={}}if(!this.archive){this.archive=Util.append(document.body,"DIV","","none")}if(!a.noCurtain){this.curtain=this.showCurtain(this.curtain,a.curtainOpacity);this.curtain.style.zIndex=a.zIndex?a.zIndex:""}if(!this.container){this.container=this.makeContainer();if(!this.outer){this.outer=Util.append(document.body,"DIV","","LFdialog-outer");this.outer.appendChild(this.container);this.container.style.display="block"}Event.observe(document,"keyup",function(c){if(!Dialog.noHideOnESC&&c.keyCode==27){Dialog.hide();Event.stop(c)}})}this.noHideOnESC=a.noHideOnESC;while(this.container.firstChild.rows[1].cells[1].childNodes.length>0){this.archive.appendChild(this.container.firstChild.rows[1].cells[1].childNodes[0])}this.container.firstChild.rows[1].cells[1].appendChild(b);this.outer.style.display="block";if(Browser.isWindows||Browser.isOpera){this.restoreEmbeds();this.hideEmbeds()}this.container.className="LFdialog-container"+(a.round?" LFdialog-container-round":"");this.setCenter(this.container,a.base);this.outer.style.zIndex=a.zIndex?a.zIndex+1:"";if(a.hideCallback){this.hideCallback=a.hideCallback}if(a.onShow){a.onShow()}},makeContainer:function(){return Util.append(document.body,"DIV",'<table class="LFdialog-container-table"><tbody><tr><td class="LFdialog-container-lt"></td><td class="LFdialog-container-t"></td><td class="LFdialog-container-rt"></td></tr><tr><td class="LFdialog-container-l"></td><td class="LFdialog-container-body"></td><td class="LFdialog-container-r"></td></tr><tr><td class="LFdialog-container-lb"></td><td class="LFdialog-container-b"></td><td class="LFdialog-container-rb"></td></tr></tbody></table>',"LFdialog-container")},setCenter:function(c,a){c.style.width="";c.style.height="";if(Browser.isIE6||Browser.isIE7){c.style.width=c.firstChild.rows[1].cells[1].firstChild.clientWidth+c.firstChild.rows[1].cells[0].offsetWidth+c.firstChild.rows[0].cells[2].offsetWidth+(c.className.match(/round/)?15:0)+"px"}if(a){c.style.marginLeft=c.style.marginTop="0px";var b=Position.positionedOffset(a);c.style.left=b[0]+((a.clientWidth-c.offsetWidth)/2)+"px";c.style.top=b[1]+((a.clientHeight-c.offsetHeight)/2)+"px"}else{if(c.offsetHeight>document.documentElement.offsetHeight){c.style.height=document.documentElement.offsetHeight+"px"}c.style.top=c.style.left="50%";c.style.marginLeft="-"+(c.offsetWidth/2)+"px";c.style.marginTop="-"+(c.offsetHeight/2)+"px"}},makeCurtain:function(){var a=$("_DIALOG_CURTAIN_");if(!a){a=Util.append(document.body,"DIV","","LFdialog-curtain");a.id="_DIALOG_CURTAIN_"}return a},curtainIsVisible:function(){if(this.curtain){return this.curtain.style.display!="none"}else{var a=$("_DIALOG_CURTAIN_");return a&&a.style.display!="none"}},showCurtain:function(b,a){if(!b){b=this.makeCurtain()}b.style.display="block";Element.setOpacity(b,typeof a!="undefined"?a:0.3);return b},hideCurtain:function(){if(this.curtain){this.curtain.style.display="none"}else{var a=$("_DIALOG_CURTAIN_");if(a){a.style.display="none"}}},hideCallback:null,hide:function(){if(this.container){if(this.outer){if(this.outer.style.display=="none"){return}this.outer.style.display="none"}else{if(this.container.style.display=="none"){return}this.container.style.display="none"}}this.hideCurtain();this.restoreEmbeds();if(this.hideCallback){this.hideCallback();this.hideCallback=null}return},restoreEmbeds:function(){if(!this.IEEmbeds||this.IEEmbeds.length<=0){return}for(var a=this.IEEmbeds.length;a--;){try{this.IEEmbeds[a].style.visibility=""}catch(b){}}this.IEEmbeds.splice(0,this.IEEmbeds.length)},hideEmbeds:function(){this._hideEmbeds(document,true);for(var a=window.frames.length;a--;){try{this._hideEmbeds(window.frames[a].document)}catch(b){}}},_hideEmbeds:function(c,a){var d=c.getElementsByTagName("OBJECT");for(var b=d.length;b--;){if(a&&Util.contains(this.container,d[b])){continue}if(d[b].style.visibility!="hidden"){d[b].style.visibility="hidden";this.IEEmbeds.push(d[b])}}d=c.getElementsByTagName("EMBED");for(var b=d.length;b--;){if(a&&Util.contains(this.container,d[b])){continue}if(d[b].style.visibility!="hidden"){d[b].style.visibility="hidden";this.IEEmbeds.push(d[b])}}}};Number.parseInt=function(a){a=parseInt(a);if(isNaN(a)){return 0}return a};Number.prototype.format=function(){var b=this.toString();var a="";for(var c=b.length;c--;){a+=b.charAt(b.length-c-1);if(c>0&&c%3==0){a+=","}}return a};Array.ize=function(d){var a=[];for(var c=0,b=d.length;c<b;c++){a.push(d[c])}return a};Array.prototype.unique=function(a,c){if(!a){this.sort()}if(this.length<=1){return this}for(var b=this.length-1;b--;){if(this[b]==this[b+1]){this.splice(b,1)}if(this[b]==c){this.splice(b,1)}}return this};Array.prototype.search=function(b){for(var a in this){if(this[a]==b){return a}}return -1};Array.prototype.del=function(b){if(!b){return this}var a=this.search(b);if(a>-1){this.splice(a,1)}return this};Array.prototype.searchByKey=function(b,c){for(var a in this){if(this[a][b]==c){return this[a]}}return null};String.prototype.trim=function(){re=/^\s+|\s+$/g;return this.replace(re,"")};String.prototype.ltrim=function(){re=/^\s+/g;return this.replace(re,"")};String.prototype.rtrim=function(){re=/\s+$/g;return this.replace(re,"")};String.prototype.repeat=function(c){if(!this||!c||isNaN(parseInt(c))){return""}c=parseInt(c);var a="";for(var b=c;b--;){a+=this}return a};String.prototype.ucfirst=function(){return this.charAt(0).toUpperCase()+this.substr(1)};String.prototype.write=function(){document.write(this)};String.prototype.bytes=function(){return(this.length+(escape(this)+"/%u").match(/%u/g).length-1)};String.prototype.wcut=function(b,a){var c=this.bytes();if(!b||b<=0||b>=c){return this}var d=this;while(b<d.bytes()){d=d.substr(0,d.length-1)}return d+(a?a:"")};String.prototype.lpad=function(b,a){var c=this;while(c.length<b){c=a+c}return c};String.prototype.rpad=function(b,a){var c=this;while(c.length<b){c+=a}return c};Date.prototype.toString2=function(e){var b="";for(var d=0;d<e.length;d++){if(e.charAt(d)=="\\"){continue}if(e.charAt(d-1)=="\\"){b+=e.charAt(d);continue}switch(e.charAt(d)){case"a":b+=this.getHours()>=12?"pm":"am";break;case"A":b+=this.getHours()>=12?"PM":"AM";break;case"d":b+=this.getDate().toString().lpad(2,0);break;case"D":b+=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"][this.getDay()];break;case"l":b+=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"][this.getDay()];break;case"M":b+=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][this.getMonth()];break;case"F":b+=["January","February","March","April","May","June","July","August","September","October","November","December"][this.getMonth()];break;case"h":var a=this.getHours();if(a>12){a%=12}b+=(a).toString().lpad(2,0);break;case"H":b+=this.getHours().toString().lpad(2,0);break;case"i":b+=this.getMinutes().toString().lpad(2,0);break;case"j":b+=this.getDate().toString();break;case"m":b+=this.getMonth().toString().lpad(2,0);break;case"s":b+=this.getSeconds().toString().lpad(2,0);break;case"Y":b+=this.getFullYear().toString();break;case"y":b+=((this.getYear())%100).toString().lpad(2,0);break;case"O":var c=this.getTimezoneOffset();b+=(c>0?"+":"-")+((c/60).toString().lpad(2,0))+"00";break;case"Z":b+=this.getTimezoneOffset().toString();break;default:b+=e.charAt(d);break}}return b};Date.toIntervalString=function(e,b){var a=new Date();var d=(b?b:Math.floor(a.getTime()/1000))-e;if(!d||d<=0){return"now"}var c;if(d>=60*60*24*7){a.setTime(e*1000);return a.toString2("M d, Y")}else{if(d>=60*60*24){c=Math.floor(d/(60*60*24));return c+(" day"+(c>1?"s":"")+" ago")}else{if(d>=60*60){c=Math.floor(d/(60*60));return c+(" hour"+(c>1?"s":"")+" ago")}else{if(d>=60){c=Math.floor(d/(60));return c+(" minute"+(c>1?"s":"")+" ago")}else{if(d>0){return d+(" second"+(d>1?"s":"")+" ago")}else{return"now"}}}}}};Date.printTime=function(b){if(!b){return""}b=parseInt(b);if(!b||isNaN(b)){return""}var a=new Date(b);return(a.toString2("h:i:s A M j\\t\\h"))};if(!window.XMLHttpRequest){XMLHttpRequest=function(){try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(a){}try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(a){}throw new Error("Could not find an XMLHttpRequest alternative.")}}function XMLHttp(url,post,callback,callbackData,async,progressCallback,retry){var request=new XMLHttpRequest();if(!retry){retry=1}if(!post){post=""}var method=(post=="GET"?"GET":"POST");request.open(method,url,async);if(method=="POST"){request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8")}if(async){var a=url,b=post,c=callback,d=callbackData,e=async,f=progressCallback,g=retry;request.onreadystatechange=function(){if(f){f(request.readyState,d)}if(request.readyState==4){if(request.status==200){if(request.responseText&&c){try{var o=eval("("+request.responseText+")")}catch(e){if(g<3){setTimeout(function(){XMLHttp(a,b,c,d,e,f,g+1)},1000);delete request;return}}if(o&&o.__need_refresh){}if(c){c(o,d)}delete request;return}}else{if(request.status>12000&&request.status<12157){if(g<3){XMLHttp(a,b,c,d,e,f,g+1);delete request;return}}else{}}if(c){c({error:true,msg:"Error"},d)}delete request}}}request.send((method=="POST")?post:null);return request}function ajax(b,c,e,a,d){return XMLHttp(b,c,e,a,true,d)}function jax(url,post){var ajax=XMLHttp(url,post,null,null,false);if(ajax){if(ajax.status==200){if(ajax.responseText){return eval("("+ajax.responseText+")")}}}return{error:true,msg:"Error"}}var UserLevel={min:0,max:0,val:0,lv:0,set:function(f,b,a,e,d){var c=$("level-bar");f=Number.parseInt(f);b=Number.parseInt(b);a=Number.parseInt(a);e=Number.parseInt(e);if(f<=0||a<=0||b>=a){c.style.display="none";return}this.min=b;this.max=a;this.val=e;this.lv=f;$("level-bar-current").innerHTML="Level "+f;$("level-gauge-value").innerHTML=d?d:e+"/"+a;$("level-gauge-fill").style.left="-"+Math.min(100,Math.max(0,(100-(((e-b)/(a-b))*100))))+"%";c.style.display="block"},setLevel:function(a){$("level-bar-current").innerHTML="Level "+a;this.lv=a}};var Prototype={Version:"1.6.1",Browser:(function(){var b=navigator.userAgent;var a=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!a,Opera:a,WebKit:b.indexOf("AppleWebKit/")>-1,Gecko:b.indexOf("Gecko")>-1&&b.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile.*Safari/.test(b)}})(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:(function(){var a=window.Element||window.HTMLElement;return !!(a&&a.prototype)})(),SpecificElementExtensions:(function(){if(typeof window.HTMLDivElement!=="undefined"){return true}var c=document.createElement("div");var b=document.createElement("form");var a=false;if(c.__proto__&&(c.__proto__!==b.__proto__)){a=true}c=b=null;return a})()},ScriptFragment:"<script[^>]*>([\\S\\s]*?)<\/script>",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(a){return a}};if(Prototype.Browser.MobileSafari){Prototype.BrowserFeatures.SpecificElementExtensions=false}var Abstract={};var Try={these:function(){var c;for(var b=0,d=arguments.length;b<d;b++){var a=arguments[b];try{c=a();break}catch(f){}}return c}};var Class=(function(){function a(){}function b(){var g=null,f=$A(arguments);if(Object.isFunction(f[0])){g=f.shift()}function d(){this.initialize.apply(this,arguments)}Object.extend(d,Class.Methods);d.superclass=g;d.subclasses=[];if(g){a.prototype=g.prototype;d.prototype=new a;g.subclasses.push(d)}for(var e=0;e<f.length;e++){d.addMethods(f[e])}if(!d.prototype.initialize){d.prototype.initialize=Prototype.emptyFunction}d.prototype.constructor=d;return d}function c(k){var f=this.superclass&&this.superclass.prototype;var e=Object.keys(k);if(!Object.keys({toString:true}).length){if(k.toString!=Object.prototype.toString){e.push("toString")}if(k.valueOf!=Object.prototype.valueOf){e.push("valueOf")}}for(var d=0,g=e.length;d<g;d++){var j=e[d],h=k[j];if(f&&Object.isFunction(h)&&h.argumentNames().first()=="$super"){var l=h;h=(function(i){return function(){return f[i].apply(this,arguments)}})(j).wrap(l);h.valueOf=l.valueOf.bind(l);h.toString=l.toString.bind(l)}this.prototype[j]=h}return this}return{create:b,Methods:{addMethods:c}}})();(function(){var d=Object.prototype.toString;function i(q,s){for(var r in s){q[r]=s[r]}return q}function l(q){try{if(e(q)){return"undefined"}if(q===null){return"null"}return q.inspect?q.inspect():String(q)}catch(r){if(r instanceof RangeError){return"..."}throw r}}function k(q){var s=typeof q;switch(s){case"undefined":case"function":case"unknown":return;case"boolean":return q.toString()}if(q===null){return"null"}if(q.toJSON){return q.toJSON()}if(h(q)){return}var r=[];for(var u in q){var t=k(q[u]);if(!e(t)){r.push(u.toJSON()+": "+t)}}return"{"+r.join(", ")+"}"}function c(q){return $H(q).toQueryString()}function f(q){return q&&q.toHTML?q.toHTML():String.interpret(q)}function o(q){var r=[];for(var s in q){r.push(s)}return r}function m(q){var r=[];for(var s in q){r.push(q[s])}return r}function j(q){return i({},q)}function h(q){return !!(q&&q.nodeType==1)}function g(q){return d.call(q)=="[object Array]"}function p(q){return q instanceof Hash}function b(q){return typeof q==="function"}function a(q){return d.call(q)=="[object String]"}function n(q){return d.call(q)=="[object Number]"}function e(q){return typeof q==="undefined"}i(Object,{extend:i,inspect:l,toJSON:k,toQueryString:c,toHTML:f,keys:o,values:m,clone:j,isElement:h,isArray:g,isHash:p,isFunction:b,isString:a,isNumber:n,isUndefined:e})})();Object.extend(Function.prototype,(function(){var k=Array.prototype.slice;function d(o,l){var n=o.length,m=l.length;while(m--){o[n+m]=l[m]}return o}function i(m,l){m=k.call(m,0);return d(m,l)}function g(){var l=this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1].replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g,"").replace(/\s+/g,"").split(",");return l.length==1&&!l[0]?[]:l}function h(n){if(arguments.length<2&&Object.isUndefined(arguments[0])){return this}var l=this,m=k.call(arguments,1);return function(){var o=i(m,arguments);return l.apply(n,o)}}function f(n){var l=this,m=k.call(arguments,1);return function(p){var o=d([p||window.event],m);return l.apply(n,o)}}function j(){if(!arguments.length){return this}var l=this,m=k.call(arguments,0);return function(){var n=i(m,arguments);return l.apply(this,n)}}function e(n){var l=this,m=k.call(arguments,1);n=n*1000;return window.setTimeout(function(){return l.apply(l,m)},n)}function a(){var l=d([0.01],arguments);return this.delay.apply(this,l)}function c(m){var l=this;return function(){var n=d([l.bind(this)],arguments);return m.apply(this,n)}}function b(){if(this._methodized){return this._methodized}var l=this;return this._methodized=function(){var m=d([this],arguments);return l.apply(null,m)}}return{argumentNames:g,bind:h,bindAsEventListener:f,curry:j,delay:e,defer:a,wrap:c,methodize:b}})());Date.prototype.toJSON=function(){return'"'+this.getUTCFullYear()+"-"+(this.getUTCMonth()+1).toPaddedString(2)+"-"+this.getUTCDate().toPaddedString(2)+"T"+this.getUTCHours().toPaddedString(2)+":"+this.getUTCMinutes().toPaddedString(2)+":"+this.getUTCSeconds().toPaddedString(2)+'Z"'};RegExp.prototype.match=RegExp.prototype.test;RegExp.escape=function(a){return String(a).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")};var PeriodicalExecuter=Class.create({initialize:function(b,a){this.callback=b;this.frequency=a;this.currentlyExecuting=false;this.registerCallback()},registerCallback:function(){this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000)},execute:function(){this.callback(this)},stop:function(){if(!this.timer){return}clearInterval(this.timer);this.timer=null},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.execute();this.currentlyExecuting=false}catch(a){this.currentlyExecuting=false;throw a}}}});Object.extend(String,{interpret:function(a){return a==null?"":String(a)},specialChar:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r","\\":"\\\\"}});Object.extend(String.prototype,(function(){function prepareReplacement(replacement){if(Object.isFunction(replacement)){return replacement}var template=new Template(replacement);return function(match){return template.evaluate(match)}}function gsub(pattern,replacement){var result="",source=this,match;replacement=prepareReplacement(replacement);if(Object.isString(pattern)){pattern=RegExp.escape(pattern)}if(!(pattern.length||pattern.source)){replacement=replacement("");return replacement+source.split("").join(replacement)+replacement}while(source.length>0){if(match=source.match(pattern)){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0){return match[0]}return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img");var matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function unescapeHTML(){return this.stripTags().replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match){return{}}return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift());var value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key])){hash[key]=[hash[key]]}hash[key].push(value)}else{hash[key]=value}}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){var parts=this.split("-"),len=parts.length;if(len==1){return parts[0]}var camelized=this.charAt(0)=="-"?parts[0].charAt(0).toUpperCase()+parts[0].substring(1):parts[0];for(var i=1;i<len;i++){camelized+=parts[i].charAt(0).toUpperCase()+parts[i].substring(1)}return camelized}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes){return'"'+escapedString.replace(/"/g,'\\"')+'"'}return"'"+escapedString.replace(/'/g,"\\'")+"'"}function toJSON(){return this.inspect(true)}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank()){return false}str=this.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,"");return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str)}function evalJSON(sanitize){var json=this.unfilterJSON();try{if(!sanitize||json.isJSON()){return eval("("+json+")")}}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern){return this.indexOf(pattern)===0}function endsWith(pattern){var d=this.length-pattern.length;return d>=0&&this.lastIndexOf(pattern)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim?String.prototype.trim:strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,toJSON:toJSON,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:evalJSON,include:include,startsWith:startsWith,endsWith:endsWith,empty:empty,blank:blank,interpolate:interpolate}})());var Template=Class.create({initialize:function(a,b){this.template=a.toString();this.pattern=b||Template.Pattern},evaluate:function(a){if(a&&Object.isFunction(a.toTemplateReplacements)){a=a.toTemplateReplacements()}return this.template.gsub(this.pattern,function(d){if(a==null){return(d[1]+"")}var f=d[1]||"";if(f=="\\"){return d[2]}var b=a,g=d[3];var e=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;d=e.exec(g);if(d==null){return f}while(d!=null){var c=d[1].startsWith("[")?d[2].replace(/\\\\]/g,"]"):d[1];b=b[c];if(null==b||""==d[3]){break}g=g.substring("["==d[3]?d[1].length:d[0].length);d=e.exec(g)}return f+String.interpret(b)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=(function(){function c(y,x){var w=0;try{this._each(function(A){y.call(x,A,w++)})}catch(z){if(z!=$break){throw z}}return this}function r(z,y,x){var w=-z,A=[],B=this.toArray();if(z<1){return B}while((w+=z)<B.length){A.push(B.slice(w,w+z))}return A.collect(y,x)}function b(y,x){y=y||Prototype.K;var w=true;this.each(function(A,z){w=w&&!!y.call(x,A,z);if(!w){throw $break}});return w}function i(y,x){y=y||Prototype.K;var w=false;this.each(function(A,z){if(w=!!y.call(x,A,z)){throw $break}});return w}function j(y,x){y=y||Prototype.K;var w=[];this.each(function(A,z){w.push(y.call(x,A,z))});return w}function t(y,x){var w;this.each(function(A,z){if(y.call(x,A,z)){w=A;throw $break}});return w}function h(y,x){var w=[];this.each(function(A,z){if(y.call(x,A,z)){w.push(A)}});return w}function g(z,y,x){y=y||Prototype.K;var w=[];if(Object.isString(z)){z=new RegExp(RegExp.escape(z))}this.each(function(B,A){if(z.match(B)){w.push(y.call(x,B,A))}});return w}function a(w){if(Object.isFunction(this.indexOf)){if(this.indexOf(w)!=-1){return true}}var x=false;this.each(function(y){if(y==w){x=true;throw $break}});return x}function q(x,w){w=Object.isUndefined(w)?null:w;return this.eachSlice(x,function(y){while(y.length<x){y.push(w)}return y})}function l(w,y,x){this.each(function(A,z){w=y.call(x,w,A,z)});return w}function v(x){var w=$A(arguments).slice(1);return this.map(function(y){return y[x].apply(y,w)})}function p(y,x){y=y||Prototype.K;var w;this.each(function(A,z){A=y.call(x,A,z);if(w==null||A>=w){w=A}});return w}function n(y,x){y=y||Prototype.K;var w;this.each(function(A,z){A=y.call(x,A,z);if(w==null||A<w){w=A}});return w}function e(z,x){z=z||Prototype.K;var y=[],w=[];this.each(function(B,A){(z.call(x,B,A)?y:w).push(B)});return[y,w]}function f(x){var w=[];this.each(function(y){w.push(y[x])});return w}function d(y,x){var w=[];this.each(function(A,z){if(!y.call(x,A,z)){w.push(A)}});return w}function m(x,w){return this.map(function(z,y){return{value:z,criteria:x.call(w,z,y)}}).sort(function(B,A){var z=B.criteria,y=A.criteria;return z<y?-1:z>y?1:0}).pluck("value")}function o(){return this.map()}function s(){var x=Prototype.K,w=$A(arguments);if(Object.isFunction(w.last())){x=w.pop()}var y=[this].concat(w).map($A);return this.map(function(A,z){return x(y.pluck(z))})}function k(){return this.toArray().length}function u(){return"#<Enumerable:"+this.toArray().inspect()+">"}return{each:c,eachSlice:r,all:b,every:b,any:i,some:i,collect:j,map:j,detect:t,findAll:h,select:h,filter:h,grep:g,include:a,member:a,inGroupsOf:q,inject:l,invoke:v,max:p,min:n,partition:e,pluck:f,reject:d,sortBy:m,toArray:o,entries:o,zip:s,size:k,inspect:u,find:t}})();function $A(c){if(!c){return[]}if("toArray" in Object(c)){return c.toArray()}var b=c.length||0,a=new Array(b);while(b--){a[b]=c[b]}return a}function $w(a){if(!Object.isString(a)){return[]}a=a.strip();return a?a.split(/\s+/):[]}Array.from=$A;(function(){var s=Array.prototype,m=s.slice,o=s.forEach;function b(w){for(var v=0,x=this.length;v<x;v++){w(this[v])}}if(!o){o=b}function l(){this.length=0;return this}function d(){return this[0]}function g(){return this[this.length-1]}function i(){return this.select(function(v){return v!=null})}function u(){return this.inject([],function(w,v){if(Object.isArray(v)){return w.concat(v.flatten())}w.push(v);return w})}function h(){var v=m.call(arguments,0);return this.select(function(w){return !v.include(w)})}function f(v){return(v!==false?this:this.toArray())._reverse()}function k(v){return this.inject([],function(y,x,w){if(0==w||(v?y.last()!=x:!y.include(x))){y.push(x)}return y})}function p(v){return this.uniq().findAll(function(w){return v.detect(function(x){return w===x})})}function q(){return m.call(this,0)}function j(){return this.length}function t(){return"["+this.map(Object.inspect).join(", ")+"]"}function r(){var v=[];this.each(function(w){var x=Object.toJSON(w);if(!Object.isUndefined(x)){v.push(x)}});return"["+v.join(", ")+"]"}function a(x,v){v||(v=0);var w=this.length;if(v<0){v=w+v}for(;v<w;v++){if(this[v]===x){return v}}return -1}function n(w,v){v=isNaN(v)?this.length:(v<0?this.length+v:v)+1;var x=this.slice(0,v).reverse().indexOf(w);return(x<0)?x:v-x-1}function c(){var A=m.call(this,0),y;for(var w=0,x=arguments.length;w<x;w++){y=arguments[w];if(Object.isArray(y)&&!("callee" in y)){for(var v=0,z=y.length;v<z;v++){A.push(y[v])}}else{A.push(y)}}return A}Object.extend(s,Enumerable);if(!s._reverse){s._reverse=s.reverse}Object.extend(s,{_each:o,clear:l,first:d,last:g,compact:i,flatten:u,without:h,reverse:f,uniq:k,intersect:p,clone:q,toArray:q,size:j,inspect:t,toJSON:r});var e=(function(){return[].concat(arguments)[0][0]!==1})(1,2);if(e){s.concat=c}if(!s.indexOf){s.indexOf=a}if(!s.lastIndexOf){s.lastIndexOf=n}})();function $H(a){return new Hash(a)}var Hash=Class.create(Enumerable,(function(){function e(q){this._object=Object.isHash(q)?q.toObject():Object.clone(q)}function f(r){for(var q in this._object){var s=this._object[q],t=[q,s];t.key=q;t.value=s;r(t)}}function k(q,r){return this._object[q]=r}function c(q){if(this._object[q]!==Object.prototype[q]){return this._object[q]}}function n(q){var r=this._object[q];delete this._object[q];return r}function p(){return Object.clone(this._object)}function o(){return this.pluck("key")}function m(){return this.pluck("value")}function g(r){var q=this.detect(function(s){return s.value===r});return q&&q.key}function i(q){return this.clone().update(q)}function d(q){return new Hash(q).inject(this,function(r,s){r.set(s.key,s.value);return r})}function b(q,r){if(Object.isUndefined(r)){return q}return q+"="+encodeURIComponent(String.interpret(r))}function a(){return this.inject([],function(s,t){var r=encodeURIComponent(t.key),q=t.value;if(q&&typeof q=="object"){if(Object.isArray(q)){return s.concat(q.map(b.curry(r)))}}else{s.push(b(r,q))}return s}).join("&")}function l(){return"#<Hash:{"+this.map(function(q){return q.map(Object.inspect).join(": ")}).join(", ")+"}>"}function j(){return Object.toJSON(this.toObject())}function h(){return new Hash(this)}return{initialize:e,_each:f,set:k,get:c,unset:n,toObject:p,toTemplateReplacements:p,keys:o,values:m,index:g,merge:i,update:d,toQueryString:a,inspect:l,toJSON:j,clone:h}})());Hash.from=$H;Object.extend(Number.prototype,(function(){function d(){return this.toPaddedString(2,16)}function e(){return this+1}function a(k,j){$R(0,this,true).each(k,j);return this}function b(l,k){var j=this.toString(k||10);return"0".times(l-j.length)+j}function f(){return isFinite(this)?this.toString():"null"}function i(){return Math.abs(this)}function h(){return Math.round(this)}function g(){return Math.ceil(this)}function c(){return Math.floor(this)}return{toColorPart:d,succ:e,times:a,toPaddedString:b,toJSON:f,abs:i,round:h,ceil:g,floor:c}})());function $R(c,a,b){return new ObjectRange(c,a,b)}var ObjectRange=Class.create(Enumerable,(function(){function b(f,d,e){this.start=f;this.end=d;this.exclusive=e}function c(d){var e=this.start;while(this.include(e)){d(e);e=e.succ()}}function a(d){if(d<this.start){return false}if(this.exclusive){return d<this.end}return d<=this.end}return{initialize:b,_each:c,include:a}})());var Ajax={getTransport:function(){return Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")})||false},activeRequestCount:0};Ajax.Responders={responders:[],_each:function(a){this.responders._each(a)},register:function(a){if(!this.include(a)){this.responders.push(a)}},unregister:function(a){this.responders=this.responders.without(a)},dispatch:function(d,b,c,a){this.each(function(f){if(Object.isFunction(f[d])){try{f[d].apply(f,[b,c,a])}catch(g){}}})}};Object.extend(Ajax.Responders,Enumerable);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++},onComplete:function(){Ajax.activeRequestCount--}});Ajax.Base=Class.create({initialize:function(a){this.options={method:"post",asynchronous:true,contentType:"application/x-www-form-urlencoded",encoding:"UTF-8",parameters:"",evalJSON:true,evalJS:true};Object.extend(this.options,a||{});this.options.method=this.options.method.toLowerCase();if(Object.isString(this.options.parameters)){this.options.parameters=this.options.parameters.toQueryParams()}else{if(Object.isHash(this.options.parameters)){this.options.parameters=this.options.parameters.toObject()}}}});Ajax.Request=Class.create(Ajax.Base,{_complete:false,initialize:function($super,b,a){$super(a);this.transport=Ajax.getTransport();this.request(b)},request:function(b){this.url=b;this.method=this.options.method;var d=Object.clone(this.options.parameters);if(!["get","post"].include(this.method)){d._method=this.method;this.method="post"}this.parameters=d;if(d=Object.toQueryString(d)){if(this.method=="get"){this.url+=(this.url.include("?")?"&":"?")+d}else{if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){d+="&_="}}}try{var a=new Ajax.Response(this);if(this.options.onCreate){this.options.onCreate(a)}Ajax.Responders.dispatch("onCreate",this,a);this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);if(this.options.asynchronous){this.respondToReadyState.bind(this).defer(1)}this.transport.onreadystatechange=this.onStateChange.bind(this);this.setRequestHeaders();this.body=this.method=="post"?(this.options.postBody||d):null;this.transport.send(this.body);if(!this.options.asynchronous&&this.transport.overrideMimeType){this.onStateChange()}}catch(c){this.dispatchException(c)}},onStateChange:function(){var a=this.transport.readyState;if(a>1&&!((a==4)&&this._complete)){this.respondToReadyState(this.transport.readyState)}},setRequestHeaders:function(){var e={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){e["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005){e.Connection="close"}}if(typeof this.options.requestHeaders=="object"){var c=this.options.requestHeaders;if(Object.isFunction(c.push)){for(var b=0,d=c.length;b<d;b+=2){e[c[b]]=c[b+1]}}else{$H(c).each(function(f){e[f.key]=f.value})}}for(var a in e){this.transport.setRequestHeader(a,e[a])}},success:function(){var a=this.getStatus();return !a||(a>=200&&a<300)},getStatus:function(){try{return this.transport.status||0}catch(a){return 0}},respondToReadyState:function(a){var c=Ajax.Request.Events[a],b=new Ajax.Response(this);if(c=="Complete"){try{this._complete=true;(this.options["on"+b.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(b,b.headerJSON)}catch(d){this.dispatchException(d)}var f=b.getHeader("Content-type");if(this.options.evalJS=="force"||(this.options.evalJS&&this.isSameOrigin()&&f&&f.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))){this.evalResponse()}}try{(this.options["on"+c]||Prototype.emptyFunction)(b,b.headerJSON);Ajax.Responders.dispatch("on"+c,this,b,b.headerJSON)}catch(d){this.dispatchException(d)}if(c=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var a=this.url.match(/^\s*https?:\/\/[^\/]*/);return !a||(a[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""}))},getHeader:function(a){try{return this.transport.getResponseHeader(a)||null}catch(b){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(a){(this.options.onException||Prototype.emptyFunction)(this,a);Ajax.Responders.dispatch("onException",this,a)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(c){this.request=c;var d=this.transport=c.transport,a=this.readyState=d.readyState;if((a>2&&!Prototype.Browser.IE)||a==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(d.responseText);this.headerJSON=this._getHeaderJSON()}if(a==4){var b=d.responseXML;this.responseXML=Object.isUndefined(b)?null:b;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(a){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(a){return null}},getResponseHeader:function(a){return this.transport.getResponseHeader(a)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var a=this.getHeader("X-JSON");if(!a){return null}a=decodeURIComponent(escape(a));try{return a.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(b){this.request.dispatchException(b)}},_getResponseJSON:function(){var a=this.request.options;if(!a.evalJSON||(a.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json"))||this.responseText.blank()){return null}try{return this.responseText.evalJSON(a.sanitizeJSON||!this.request.isSameOrigin())}catch(b){this.request.dispatchException(b)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,a,c,b){this.container={success:(a.success||a),failure:(a.failure||(a.success?null:a))};b=Object.clone(b);var d=b.onComplete;b.onComplete=(function(e,f){this.updateContent(e.responseText);if(Object.isFunction(d)){d(e,f)}}).bind(this);$super(c,b)},updateContent:function(d){var c=this.container[this.success()?"success":"failure"],a=this.options;if(!a.evalScripts){d=d.stripScripts()}if(c=$(c)){if(a.insertion){if(Object.isString(a.insertion)){var b={};b[a.insertion]=d;c.insert(b)}else{a.insertion(c,d)}}else{c.update(d)}}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,a,c,b){$super(b);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=a;this.url=c;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(a){if(this.options.decay){this.decay=(a.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=a.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});function $(b){if(arguments.length>1){for(var a=0,d=[],c=arguments.length;a<c;a++){d.push($(arguments[a]))}return d}if(Object.isString(b)){b=document.getElementById(b)}return Element.extend(b)}if(Prototype.BrowserFeatures.XPath){document._getElementsByXPath=function(f,a){var c=[];var e=document.evaluate(f,$(a)||document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);for(var b=0,d=e.snapshotLength;b<d;b++){c.push(Element.extend(e.snapshotItem(b)))}return c}}if(!window.Node){var Node={}}if(!Node.ELEMENT_NODE){Object.extend(Node,{ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12})}(function(c){var b=(function(){var f=document.createElement("form");var e=document.createElement("input");var d=document.documentElement;e.setAttribute("name","test");f.appendChild(e);d.appendChild(f);var g=f.elements?(typeof f.elements.test=="undefined"):null;d.removeChild(f);f=e=null;return g})();var a=c.Element;c.Element=function(f,e){e=e||{};f=f.toLowerCase();var d=Element.cache;if(b&&e.name){f="<"+f+' name="'+e.name+'">';delete e.name;return Element.writeAttribute(document.createElement(f),e)}if(!d[f]){d[f]=Element.extend(document.createElement(f))}return Element.writeAttribute(d[f].cloneNode(false),e)};Object.extend(c.Element,a||{});if(a){c.Element.prototype=a.prototype}})(this);Element.cache={};Element.idCounter=1;Element.Methods={visible:function(a){return $(a).style.display!="none"},toggle:function(a){a=$(a);Element[Element.visible(a)?"hide":"show"](a);return a},hide:function(a){a=$(a);a.style.display="none";return a},show:function(a){a=$(a);a.style.display="";return a},remove:function(a){a=$(a);a.parentNode.removeChild(a);return a},update:(function(){var b=(function(){var e=document.createElement("select"),f=true;e.innerHTML='<option value="test">test</option>';if(e.options&&e.options[0]){f=e.options[0].nodeName.toUpperCase()!=="OPTION"}e=null;return f})();var a=(function(){try{var f=document.createElement("table");if(f&&f.tBodies){f.innerHTML="<tbody><tr><td>test</td></tr></tbody>";var h=typeof f.tBodies[0]=="undefined";f=null;return h}}catch(g){return true}})();var d=(function(){var f=document.createElement("script"),h=false;try{f.appendChild(document.createTextNode(""));h=!f.firstChild||f.firstChild&&f.firstChild.nodeType!==3}catch(g){h=true}f=null;return h})();function c(f,g){f=$(f);if(g&&g.toElement){g=g.toElement()}if(Object.isElement(g)){return f.update().insert(g)}g=Object.toHTML(g);var e=f.tagName.toUpperCase();if(e==="SCRIPT"&&d){f.text=g;return f}if(b||a){if(e in Element._insertionTranslations.tags){while(f.firstChild){f.removeChild(f.firstChild)}Element._getContentFromAnonymousElement(e,g.stripScripts()).each(function(h){f.appendChild(h)})}else{f.innerHTML=g.stripScripts()}}else{f.innerHTML=g.stripScripts()}g.evalScripts.bind(g).defer();return f}return c})(),replace:function(b,c){b=$(b);if(c&&c.toElement){c=c.toElement()}else{if(!Object.isElement(c)){c=Object.toHTML(c);var a=b.ownerDocument.createRange();a.selectNode(b);c.evalScripts.bind(c).defer();c=a.createContextualFragment(c.stripScripts())}}b.parentNode.replaceChild(c,b);return b},insert:function(c,e){c=$(c);if(Object.isString(e)||Object.isNumber(e)||Object.isElement(e)||(e&&(e.toElement||e.toHTML))){e={bottom:e}}var d,f,b,g;for(var a in e){d=e[a];a=a.toLowerCase();f=Element._insertionTranslations[a];if(d&&d.toElement){d=d.toElement()}if(Object.isElement(d)){f(c,d);continue}d=Object.toHTML(d);b=((a=="before"||a=="after")?c.parentNode:c).tagName.toUpperCase();g=Element._getContentFromAnonymousElement(b,d.stripScripts());if(a=="top"||a=="after"){g.reverse()}g.each(f.curry(c));d.evalScripts.bind(d).defer()}return c},wrap:function(b,c,a){b=$(b);if(Object.isElement(c)){$(c).writeAttribute(a||{})}else{if(Object.isString(c)){c=new Element(c,a)}else{c=new Element("div",c)}}if(b.parentNode){b.parentNode.replaceChild(c,b)}c.appendChild(b);return c},inspect:function(b){b=$(b);var a="<"+b.tagName.toLowerCase();$H({id:"id",className:"class"}).each(function(f){var e=f.first(),c=f.last();var d=(b[e]||"").toString();if(d){a+=" "+c+"="+d.inspect(true)}});return a+">"},recursivelyCollect:function(a,c){a=$(a);var b=[];while(a=a[c]){if(a.nodeType==1){b.push(Element.extend(a))}}return b},ancestors:function(a){return Element.recursivelyCollect(a,"parentNode")},descendants:function(a){return Element.select(a,"*")},firstDescendant:function(a){a=$(a).firstChild;while(a&&a.nodeType!=1){a=a.nextSibling}return $(a)},immediateDescendants:function(a){if(!(a=$(a).firstChild)){return[]}while(a&&a.nodeType!=1){a=a.nextSibling}if(a){return[a].concat($(a).nextSiblings())}return[]},previousSiblings:function(a){return Element.recursivelyCollect(a,"previousSibling")},nextSiblings:function(a){return Element.recursivelyCollect(a,"nextSibling")},siblings:function(a){a=$(a);return Element.previousSiblings(a).reverse().concat(Element.nextSiblings(a))},match:function(b,a){if(Object.isString(a)){a=new Selector(a)}return a.match($(b))},up:function(b,d,a){b=$(b);if(arguments.length==1){return $(b.parentNode)}var c=Element.ancestors(b);return Object.isNumber(d)?c[d]:Selector.findElement(c,d,a)},down:function(b,c,a){b=$(b);if(arguments.length==1){return Element.firstDescendant(b)}return Object.isNumber(c)?Element.descendants(b)[c]:Element.select(b,c)[a||0]},previous:function(b,d,a){b=$(b);if(arguments.length==1){return $(Selector.handlers.previousElementSibling(b))}var c=Element.previousSiblings(b);return Object.isNumber(d)?c[d]:Selector.findElement(c,d,a)},next:function(c,d,b){c=$(c);if(arguments.length==1){return $(Selector.handlers.nextElementSibling(c))}var a=Element.nextSiblings(c);return Object.isNumber(d)?a[d]:Selector.findElement(a,d,b)},select:function(b){var a=Array.prototype.slice.call(arguments,1);return Selector.findChildElements(b,a)},adjacent:function(b){var a=Array.prototype.slice.call(arguments,1);return Selector.findChildElements(b.parentNode,a).without(b)},identify:function(a){a=$(a);var b=Element.readAttribute(a,"id");if(b){return b}do{b="anonymous_element_"+Element.idCounter++}while($(b));Element.writeAttribute(a,"id",b);return b},readAttribute:function(c,a){c=$(c);if(Prototype.Browser.IE){var b=Element._attributeTranslations.read;if(b.values[a]){return b.values[a](c,a)}if(b.names[a]){a=b.names[a]}if(a.include(":")){return(!c.attributes||!c.attributes[a])?null:c.attributes[a].value}}return c.getAttribute(a)},writeAttribute:function(e,c,f){e=$(e);var b={},d=Element._attributeTranslations.write;if(typeof c=="object"){b=c}else{b[c]=Object.isUndefined(f)?true:f}for(var a in b){c=d.names[a]||a;f=b[a];if(d.values[a]){c=d.values[a](e,f)}if(f===false||f===null){e.removeAttribute(c)}else{if(f===true){e.setAttribute(c,c)}else{e.setAttribute(c,f)}}}return e},getHeight:function(a){return Element.getDimensions(a).height},getWidth:function(a){return Element.getDimensions(a).width},classNames:function(a){return new Element.ClassNames(a)},hasClassName:function(a,b){if(!(a=$(a))){return}var c=a.className;return(c.length>0&&(c==b||new RegExp("(^|\\s)"+b+"(\\s|$)").test(c)))},addClassName:function(a,b){if(!(a=$(a))){return}if(!Element.hasClassName(a,b)){a.className+=(a.className?" ":"")+b}return a},removeClassName:function(a,b){if(!(a=$(a))){return}a.className=a.className.replace(new RegExp("(^|\\s+)"+b+"(\\s+|$)")," ").strip();return a},toggleClassName:function(a,b){if(!(a=$(a))){return}return Element[Element.hasClassName(a,b)?"removeClassName":"addClassName"](a,b)},cleanWhitespace:function(b){b=$(b);var c=b.firstChild;while(c){var a=c.nextSibling;if(c.nodeType==3&&!/\S/.test(c.nodeValue)){b.removeChild(c)}c=a}return b},empty:function(a){return $(a).innerHTML.blank()},descendantOf:function(b,a){b=$(b),a=$(a);if(b.compareDocumentPosition){return(b.compareDocumentPosition(a)&8)===8}if(a.contains){return a.contains(b)&&a!==b}while(b=b.parentNode){if(b==a){return true}}return false},scrollTo:function(a){a=$(a);var b=Element.cumulativeOffset(a);window.scrollTo(b[0],b[1]);return a},getStyle:function(b,c){b=$(b);c=c=="float"?"cssFloat":c.camelize();var d=b.style[c];if(!d||d=="auto"){var a=document.defaultView.getComputedStyle(b,null);d=a?a[c]:null}if(c=="opacity"){return d?parseFloat(d):1}return d=="auto"?null:d},getOpacity:function(a){return $(a).getStyle("opacity")},setStyle:function(b,c){b=$(b);var e=b.style,a;if(Object.isString(c)){b.style.cssText+=";"+c;return c.include("opacity")?b.setOpacity(c.match(/opacity:\s*(\d?\.?\d*)/)[1]):b}for(var d in c){if(d=="opacity"){b.setOpacity(c[d])}else{e[(d=="float"||d=="cssFloat")?(Object.isUndefined(e.styleFloat)?"cssFloat":"styleFloat"):d]=c[d]}}return b},setOpacity:function(a,b){a=$(a);a.style.opacity=(b==1||b==="")?"":(b<0.00001)?0:b;return a},getDimensions:function(c){c=$(c);var g=Element.getStyle(c,"display");if(g!="none"&&g!=null){return{width:c.offsetWidth,height:c.offsetHeight}}var b=c.style;var f=b.visibility;var d=b.position;var a=b.display;b.visibility="hidden";if(d!="fixed"){b.position="absolute"}b.display="block";var h=c.clientWidth;var e=c.clientHeight;b.display=a;b.position=d;b.visibility=f;return{width:h,height:e}},makePositioned:function(a){a=$(a);var b=Element.getStyle(a,"position");if(b=="static"||!b){a._madePositioned=true;a.style.position="relative";if(Prototype.Browser.Opera){a.style.top=0;a.style.left=0}}return a},undoPositioned:function(a){a=$(a);if(a._madePositioned){a._madePositioned=undefined;a.style.position=a.style.top=a.style.left=a.style.bottom=a.style.right=""}return a},makeClipping:function(a){a=$(a);if(a._overflow){return a}a._overflow=Element.getStyle(a,"overflow")||"auto";if(a._overflow!=="hidden"){a.style.overflow="hidden"}return a},undoClipping:function(a){a=$(a);if(!a._overflow){return a}a.style.overflow=a._overflow=="auto"?"":a._overflow;a._overflow=null;return a},cumulativeOffset:function(b){var a=0,c=0;do{a+=b.offsetTop||0;c+=b.offsetLeft||0;b=b.offsetParent}while(b);return Element._returnOffset(c,a)},positionedOffset:function(b){var a=0,d=0;do{a+=b.offsetTop||0;d+=b.offsetLeft||0;b=b.offsetParent;if(b){if(b.tagName.toUpperCase()=="BODY"){break}var c=Element.getStyle(b,"position");if(c!=="static"){break}}}while(b);return Element._returnOffset(d,a)},absolutize:function(b){b=$(b);if(Element.getStyle(b,"position")=="absolute"){return b}var d=Element.positionedOffset(b);var f=d[1];var e=d[0];var c=b.clientWidth;var a=b.clientHeight;b._originalLeft=e-parseFloat(b.style.left||0);b._originalTop=f-parseFloat(b.style.top||0);b._originalWidth=b.style.width;b._originalHeight=b.style.height;b.style.position="absolute";b.style.top=f+"px";b.style.left=e+"px";b.style.width=c+"px";b.style.height=a+"px";return b},relativize:function(a){a=$(a);if(Element.getStyle(a,"position")=="relative"){return a}a.style.position="relative";var c=parseFloat(a.style.top||0)-(a._originalTop||0);var b=parseFloat(a.style.left||0)-(a._originalLeft||0);a.style.top=c+"px";a.style.left=b+"px";a.style.height=a._originalHeight;a.style.width=a._originalWidth;return a},cumulativeScrollOffset:function(b){var a=0,c=0;do{a+=b.scrollTop||0;c+=b.scrollLeft||0;b=b.parentNode}while(b);return Element._returnOffset(c,a)},getOffsetParent:function(a){if(a.offsetParent){return $(a.offsetParent)}if(a==document.body){return $(a)}while((a=a.parentNode)&&a!=document.body){if(Element.getStyle(a,"position")!="static"){return $(a)}}return $(document.body)},viewportOffset:function(d){var a=0,c=0;var b=d;do{a+=b.offsetTop||0;c+=b.offsetLeft||0;if(b.offsetParent==document.body&&Element.getStyle(b,"position")=="absolute"){break}}while(b=b.offsetParent);b=d;do{if(!Prototype.Browser.Opera||(b.tagName&&(b.tagName.toUpperCase()=="BODY"))){a-=b.scrollTop||0;c-=b.scrollLeft||0}}while(b=b.parentNode);return Element._returnOffset(c,a)},clonePosition:function(b,d){var a=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{});d=$(d);var e=Element.viewportOffset(d);b=$(b);var f=[0,0];var c=null;if(Element.getStyle(b,"position")=="absolute"){c=Element.getOffsetParent(b);f=Element.viewportOffset(c)}if(c==document.body){f[0]-=document.body.offsetLeft;f[1]-=document.body.offsetTop}if(a.setLeft){b.style.left=(e[0]-f[0]+a.offsetLeft)+"px"}if(a.setTop){b.style.top=(e[1]-f[1]+a.offsetTop)+"px"}if(a.setWidth){b.style.width=d.offsetWidth+"px"}if(a.setHeight){b.style.height=d.offsetHeight+"px"}return b}};Object.extend(Element.Methods,{getElementsBySelector:Element.Methods.select,childElements:Element.Methods.immediateDescendants});Element._attributeTranslations={write:{names:{className:"class",htmlFor:"for"},values:{}}};if(Prototype.Browser.Opera){Element.Methods.getStyle=Element.Methods.getStyle.wrap(function(d,b,c){switch(c){case"left":case"top":case"right":case"bottom":if(d(b,"position")==="static"){return null}case"height":case"width":if(!Element.visible(b)){return null}var e=parseInt(d(b,c),10);if(e!==b["offset"+c.capitalize()]){return e+"px"}var a;if(c==="height"){a=["border-top-width","padding-top","padding-bottom","border-bottom-width"]}else{a=["border-left-width","padding-left","padding-right","border-right-width"]}return a.inject(e,function(f,g){var h=d(b,g);return h===null?f:f-parseInt(h,10)})+"px";default:return d(b,c)}});Element.Methods.readAttribute=Element.Methods.readAttribute.wrap(function(c,a,b){if(b==="title"){return a.title}return c(a,b)})}else{if(Prototype.Browser.IE){Element.Methods.getOffsetParent=Element.Methods.getOffsetParent.wrap(function(c,b){b=$(b);try{b.offsetParent}catch(f){return $(document.body)}var a=b.getStyle("position");if(a!=="static"){return c(b)}b.setStyle({position:"relative"});var d=c(b);b.setStyle({position:a});return d});$w("positionedOffset viewportOffset").each(function(a){Element.Methods[a]=Element.Methods[a].wrap(function(f,c){c=$(c);try{c.offsetParent}catch(h){return Element._returnOffset(0,0)}var b=c.getStyle("position");if(b!=="static"){return f(c)}var d=c.getOffsetParent();if(d&&d.getStyle("position")==="fixed"){d.setStyle({zoom:1})}c.setStyle({position:"relative"});var g=f(c);c.setStyle({position:b});return g})});Element.Methods.cumulativeOffset=Element.Methods.cumulativeOffset.wrap(function(b,a){try{a.offsetParent}catch(c){return Element._returnOffset(0,0)}return b(a)});Element.Methods.getStyle=function(a,b){a=$(a);b=(b=="float"||b=="cssFloat")?"styleFloat":b.camelize();var c=a.style[b];if(!c&&a.currentStyle){c=a.currentStyle[b]}if(b=="opacity"){if(c=(a.getStyle("filter")||"").match(/alpha\(opacity=(.*)\)/)){if(c[1]){return parseFloat(c[1])/100}}return 1}if(c=="auto"){if((b=="width"||b=="height")&&(a.getStyle("display")!="none")){return a["offset"+b.capitalize()]+"px"}return null}return c};Element.Methods.setOpacity=function(b,e){function f(g){return g.replace(/alpha\([^\)]*\)/gi,"")}b=$(b);var a=b.currentStyle;if((a&&!a.hasLayout)||(!a&&b.style.zoom=="normal")){b.style.zoom=1}var d=b.getStyle("filter"),c=b.style;if(e==1||e===""){(d=f(d))?c.filter=d:c.removeAttribute("filter");return b}else{if(e<0.00001){e=0}}c.filter=f(d)+"alpha(opacity="+(e*100)+")";return b};Element._attributeTranslations=(function(){var b="className";var a="for";var c=document.createElement("div");c.setAttribute(b,"x");if(c.className!=="x"){c.setAttribute("class","x");if(c.className==="x"){b="class"}}c=null;c=document.createElement("label");c.setAttribute(a,"x");if(c.htmlFor!=="x"){c.setAttribute("htmlFor","x");if(c.htmlFor==="x"){a="htmlFor"}}c=null;return{read:{names:{"class":b,className:b,"for":a,htmlFor:a},values:{_getAttr:function(d,e){return d.getAttribute(e)},_getAttr2:function(d,e){return d.getAttribute(e,2)},_getAttrNode:function(d,f){var e=d.getAttributeNode(f);return e?e.value:""},_getEv:(function(){var d=document.createElement("div");d.onclick=Prototype.emptyFunction;var g=d.getAttribute("onclick");var e;if(String(g).indexOf("{")>-1){e=function(f,h){h=f.getAttribute(h);if(!h){return null}h=h.toString();h=h.split("{")[1];h=h.split("}")[0];return h.strip()}}else{if(g===""){e=function(f,h){h=f.getAttribute(h);if(!h){return null}return h.strip()}}}d=null;return e})(),_flag:function(d,e){return $(d).hasAttribute(e)?e:null},style:function(d){return d.style.cssText.toLowerCase()},title:function(d){return d.title}}}}})();Element._attributeTranslations.write={names:Object.extend({cellpadding:"cellPadding",cellspacing:"cellSpacing"},Element._attributeTranslations.read.names),values:{checked:function(a,b){a.checked=!!b},style:function(a,b){a.style.cssText=b?b:""}}};Element._attributeTranslations.has={};$w("colSpan rowSpan vAlign dateTime accessKey tabIndex encType maxLength readOnly longDesc frameBorder").each(function(a){Element._attributeTranslations.write.names[a.toLowerCase()]=a;Element._attributeTranslations.has[a.toLowerCase()]=a});(function(a){Object.extend(a,{href:a._getAttr2,src:a._getAttr2,type:a._getAttr,action:a._getAttrNode,disabled:a._flag,checked:a._flag,readonly:a._flag,multiple:a._flag,onload:a._getEv,onunload:a._getEv,onclick:a._getEv,ondblclick:a._getEv,onmousedown:a._getEv,onmouseup:a._getEv,onmouseover:a._getEv,onmousemove:a._getEv,onmouseout:a._getEv,onfocus:a._getEv,onblur:a._getEv,onkeypress:a._getEv,onkeydown:a._getEv,onkeyup:a._getEv,onsubmit:a._getEv,onreset:a._getEv,onselect:a._getEv,onchange:a._getEv})})(Element._attributeTranslations.read.values);if(Prototype.BrowserFeatures.ElementExtensions){(function(){function a(e){var b=e.getElementsByTagName("*"),d=[];for(var c=0,f;f=b[c];c++){if(f.tagName!=="!"){d.push(f)}}return d}Element.Methods.down=function(c,d,b){c=$(c);if(arguments.length==1){return c.firstDescendant()}return Object.isNumber(d)?a(c)[d]:Element.select(c,d)[b||0]}})()}}else{if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){Element.Methods.setOpacity=function(a,b){a=$(a);a.style.opacity=(b==1)?0.999999:(b==="")?"":(b<0.00001)?0:b;return a}}else{if(Prototype.Browser.WebKit){Element.Methods.setOpacity=function(a,b){a=$(a);a.style.opacity=(b==1||b==="")?"":(b<0.00001)?0:b;if(b==1){if(a.tagName.toUpperCase()=="IMG"&&a.width){a.width++;a.width--}else{try{var d=document.createTextNode(" ");a.appendChild(d);a.removeChild(d)}catch(c){}}}return a};Element.Methods.cumulativeOffset=function(b){var a=0,c=0;do{a+=b.offsetTop||0;c+=b.offsetLeft||0;if(b.offsetParent==document.body){if(Element.getStyle(b,"position")=="absolute"){break}}b=b.offsetParent}while(b);return Element._returnOffset(c,a)}}}}}if("outerHTML" in document.documentElement){Element.Methods.replace=function(c,e){c=$(c);if(e&&e.toElement){e=e.toElement()}if(Object.isElement(e)){c.parentNode.replaceChild(e,c);return c}e=Object.toHTML(e);var d=c.parentNode,b=d.tagName.toUpperCase();if(Element._insertionTranslations.tags[b]){var f=c.next();var a=Element._getContentFromAnonymousElement(b,e.stripScripts());d.removeChild(c);if(f){a.each(function(g){d.insertBefore(g,f)})}else{a.each(function(g){d.appendChild(g)})}}else{c.outerHTML=e.stripScripts()}e.evalScripts.bind(e).defer();return c}}Element._returnOffset=function(b,c){var a=[b,c];a.left=b;a.top=c;return a};Element._getContentFromAnonymousElement=function(c,b){var d=new Element("div"),a=Element._insertionTranslations.tags[c];if(a){d.innerHTML=a[0]+b+a[1];a[2].times(function(){d=d.firstChild})}else{d.innerHTML=b}return $A(d.childNodes)};Element._insertionTranslations={before:function(a,b){a.parentNode.insertBefore(b,a)},top:function(a,b){a.insertBefore(b,a.firstChild)},bottom:function(a,b){a.appendChild(b)},after:function(a,b){a.parentNode.insertBefore(b,a.nextSibling)},tags:{TABLE:["<table>","</table>",1],TBODY:["<table><tbody>","</tbody></table>",2],TR:["<table><tbody><tr>","</tr></tbody></table>",3],TD:["<table><tbody><tr><td>","</td></tr></tbody></table>",4],SELECT:["<select>","</select>",1]}};(function(){var a=Element._insertionTranslations.tags;Object.extend(a,{THEAD:a.TBODY,TFOOT:a.TBODY,TH:a.TD})})();Element.Methods.Simulated={hasAttribute:function(a,c){c=Element._attributeTranslations.has[c]||c;var b=$(a).getAttributeNode(c);return !!(b&&b.specified)}};Element.Methods.ByTag={};Object.extend(Element,Element.Methods);(function(a){if(!Prototype.BrowserFeatures.ElementExtensions&&a.__proto__){window.HTMLElement={};window.HTMLElement.prototype=a.__proto__;Prototype.BrowserFeatures.ElementExtensions=true}a=null})(document.createElement("div"));Element.extend=(function(){function c(g){if(typeof window.Element!="undefined"){var i=window.Element.prototype;if(i){var k="_"+(Math.random()+"").slice(2);var h=document.createElement(g);i[k]="x";var j=(h[k]!=="x");delete i[k];h=null;return j}}return false}function b(h,g){for(var j in g){var i=g[j];if(Object.isFunction(i)&&!(j in h)){h[j]=i.methodize()}}}var d=c("object");if(Prototype.BrowserFeatures.SpecificElementExtensions){if(d){return function(h){if(h&&typeof h._extendedByPrototype=="undefined"){var g=h.tagName;if(g&&(/^(?:object|applet|embed)$/i.test(g))){b(h,Element.Methods);b(h,Element.Methods.Simulated);b(h,Element.Methods.ByTag[g.toUpperCase()])}}return h}}return Prototype.K}var a={},e=Element.Methods.ByTag;var f=Object.extend(function(i){if(!i||typeof i._extendedByPrototype!="undefined"||i.nodeType!=1||i==window){return i}var g=Object.clone(a),h=i.tagName.toUpperCase();if(e[h]){Object.extend(g,e[h])}b(i,g);i._extendedByPrototype=Prototype.emptyFunction;return i},{refresh:function(){if(!Prototype.BrowserFeatures.ElementExtensions){Object.extend(a,Element.Methods);Object.extend(a,Element.Methods.Simulated)}}});f.refresh();return f})();Element.hasAttribute=function(a,b){if(a.hasAttribute){return a.hasAttribute(b)}return Element.Methods.Simulated.hasAttribute(a,b)};Element.addMethods=function(c){var i=Prototype.BrowserFeatures,d=Element.Methods.ByTag;if(!c){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods)})}if(arguments.length==2){var b=c;c=arguments[1]}if(!b){Object.extend(Element.Methods,c||{})}else{if(Object.isArray(b)){b.each(g)}else{g(b)}}function g(k){k=k.toUpperCase();if(!Element.Methods.ByTag[k]){Element.Methods.ByTag[k]={}}Object.extend(Element.Methods.ByTag[k],c)}function a(m,l,k){k=k||false;for(var o in m){var n=m[o];if(!Object.isFunction(n)){continue}if(!k||!(o in l)){l[o]=n.methodize()}}}function e(n){var k;var m={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(m[n]){k="HTML"+m[n]+"Element"}if(window[k]){return window[k]}k="HTML"+n+"Element";if(window[k]){return window[k]}k="HTML"+n.capitalize()+"Element";if(window[k]){return window[k]}var l=document.createElement(n);var o=l.__proto__||l.constructor.prototype;l=null;return o}var h=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(i.ElementExtensions){a(Element.Methods,h);a(Element.Methods.Simulated,h,true)}if(i.SpecificElementExtensions){for(var j in Element.Methods.ByTag){var f=e(j);if(Object.isUndefined(f)){continue}a(d[j],f.prototype)}}Object.extend(Element,Element.Methods);delete Element.ByTag;if(Element.extend.refresh){Element.extend.refresh()}Element.cache={}};document.viewport={getDimensions:function(){return{width:this.getWidth(),height:this.getHeight()}},getScrollOffsets:function(){return Element._returnOffset(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop)}};(function(b){var g=Prototype.Browser,e=document,c,d={};function a(){if(g.WebKit&&!e.evaluate){return document}if(g.Opera&&window.parseFloat(window.opera.version())<9.5){return document.body}return document.documentElement}function f(h){if(!c){c=a()}d[h]="client"+h;b["get"+h]=function(){return c[d[h]]};return b["get"+h]()}b.getWidth=f.curry("Width");b.getHeight=f.curry("Height")})(document.viewport);Element.Storage={UID:1};Element.addMethods({getStorage:function(b){if(!(b=$(b))){return}var a;if(b===window){a=0}else{if(typeof b._prototypeUID==="undefined"){b._prototypeUID=[Element.Storage.UID++]}a=b._prototypeUID[0]}if(!Element.Storage[a]){Element.Storage[a]=$H()}return Element.Storage[a]},store:function(b,a,c){if(!(b=$(b))){return}if(arguments.length===2){Element.getStorage(b).update(a)}else{Element.getStorage(b).set(a,c)}return b},retrieve:function(c,b,a){if(!(c=$(c))){return}var e=Element.getStorage(c),d=e.get(b);if(Object.isUndefined(d)){e.set(b,a);d=a}return d},clone:function(c,a){if(!(c=$(c))){return}var e=c.cloneNode(a);e._prototypeUID=void 0;if(a){var d=Element.select(e,"*"),b=d.length;while(b--){d[b]._prototypeUID=void 0}}return Element.extend(e)}});var Selector=Class.create({initialize:function(a){this.expression=a.strip();if(this.shouldUseSelectorsAPI()){this.mode="selectorsAPI"}else{if(this.shouldUseXPath()){this.mode="xpath";this.compileXPathMatcher()}else{this.mode="normal";this.compileMatcher()}}},shouldUseXPath:(function(){var a=(function(){var e=false;if(document.evaluate&&window.XPathResult){var d=document.createElement("div");d.innerHTML="<ul><li></li></ul><div><ul><li></li></ul></div>";var c=".//*[local-name()='ul' or local-name()='UL']//*[local-name()='li' or local-name()='LI']";var b=document.evaluate(c,d,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);e=(b.snapshotLength!==2);d=null}return e})();return function(){if(!Prototype.BrowserFeatures.XPath){return false}var b=this.expression;if(Prototype.Browser.WebKit&&(b.include("-of-type")||b.include(":empty"))){return false}if((/(\[[\w-]*?:|:checked)/).test(b)){return false}if(a){return false}return true}})(),shouldUseSelectorsAPI:function(){if(!Prototype.BrowserFeatures.SelectorsAPI){return false}if(Selector.CASE_INSENSITIVE_CLASS_NAMES){return false}if(!Selector._div){Selector._div=new Element("div")}try{Selector._div.querySelector(this.expression)}catch(a){return false}return true},compileMatcher:function(){var e=this.expression,ps=Selector.patterns,h=Selector.handlers,c=Selector.criteria,le,p,m,len=ps.length,name;if(Selector._cache[e]){this.matcher=Selector._cache[e];return}this.matcher=["this.matcher = function(root) {","var r = root, h = Selector.handlers, c = false, n;"];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i=0;i<len;i++){p=ps[i].re;name=ps[i].name;if(m=e.match(p)){this.matcher.push(Object.isFunction(c[name])?c[name](m):new Template(c[name]).evaluate(m));e=e.replace(m[0],"");break}}}this.matcher.push("return h.unique(n);\n}");eval(this.matcher.join("\n"));Selector._cache[this.expression]=this.matcher},compileXPathMatcher:function(){var h=this.expression,j=Selector.patterns,c=Selector.xpath,g,b,a=j.length,d;if(Selector._cache[h]){this.xpath=Selector._cache[h];return}this.matcher=[".//*"];while(h&&g!=h&&(/\S/).test(h)){g=h;for(var f=0;f<a;f++){d=j[f].name;if(b=h.match(j[f].re)){this.matcher.push(Object.isFunction(c[d])?c[d](b):new Template(c[d]).evaluate(b));h=h.replace(b[0],"");break}}}this.xpath=this.matcher.join("");Selector._cache[this.expression]=this.xpath},findElements:function(a){a=a||document;var c=this.expression,b;switch(this.mode){case"selectorsAPI":if(a!==document){var d=a.id,f=$(a).identify();f=f.replace(/([\.:])/g,"\\$1");c="#"+f+" "+c}b=$A(a.querySelectorAll(c)).map(Element.extend);a.id=d;return b;case"xpath":return document._getElementsByXPath(this.xpath,a);default:return this.matcher(a)}},match:function(k){this.tokens=[];var q=this.expression,a=Selector.patterns,f=Selector.assertions;var b,d,g,o=a.length,c;while(q&&b!==q&&(/\S/).test(q)){b=q;for(var j=0;j<o;j++){d=a[j].re;c=a[j].name;if(g=q.match(d)){if(f[c]){this.tokens.push([c,Object.clone(g)]);q=q.replace(g[0],"")}else{return this.findElements(document).include(k)}}}}var n=true,c,l;for(var j=0,h;h=this.tokens[j];j++){c=h[0],l=h[1];if(!Selector.assertions[c](k,l)){n=false;break}}return n},toString:function(){return this.expression},inspect:function(){return"#<Selector:"+this.expression.inspect()+">"}});if(Prototype.BrowserFeatures.SelectorsAPI&&document.compatMode==="BackCompat"){Selector.CASE_INSENSITIVE_CLASS_NAMES=(function(){var c=document.createElement("div"),a=document.createElement("span");c.id="prototype_test_id";a.className="Test";c.appendChild(a);var b=(c.querySelector("#prototype_test_id .test")!==null);c=a=null;return b})()}Object.extend(Selector,{_cache:{},xpath:{descendant:"//*",child:"/*",adjacent:"/following-sibling::*[1]",laterSibling:"/following-sibling::*",tagName:function(a){if(a[1]=="*"){return""}return"[local-name()='"+a[1].toLowerCase()+"' or local-name()='"+a[1].toUpperCase()+"']"},className:"[contains(concat(' ', @class, ' '), ' #{1} ')]",id:"[@id='#{1}']",attrPresence:function(a){a[1]=a[1].toLowerCase();return new Template("[@#{1}]").evaluate(a)},attr:function(a){a[1]=a[1].toLowerCase();a[3]=a[5]||a[6];return new Template(Selector.xpath.operators[a[2]]).evaluate(a)},pseudo:function(a){var b=Selector.xpath.pseudos[a[1]];if(!b){return""}if(Object.isFunction(b)){return b(a)}return new Template(Selector.xpath.pseudos[a[1]]).evaluate(a)},operators:{"=":"[@#{1}='#{3}']","!=":"[@#{1}!='#{3}']","^=":"[starts-with(@#{1}, '#{3}')]","$=":"[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']","*=":"[contains(@#{1}, '#{3}')]","~=":"[contains(concat(' ', @#{1}, ' '), ' #{3} ')]","|=":"[contains(concat('-', @#{1}, '-'), '-#{3}-')]"},pseudos:{"first-child":"[not(preceding-sibling::*)]","last-child":"[not(following-sibling::*)]","only-child":"[not(preceding-sibling::* or following-sibling::*)]",empty:"[count(*) = 0 and (count(text()) = 0)]",checked:"[@checked]",disabled:"[(@disabled) and (@type!='hidden')]",enabled:"[not(@disabled) and (@type!='hidden')]",not:function(f){var j=f[6],c=Selector.patterns,k=Selector.xpath,a,l,h=c.length,b;var d=[];while(j&&a!=j&&(/\S/).test(j)){a=j;for(var g=0;g<h;g++){b=c[g].name;if(f=j.match(c[g].re)){l=Object.isFunction(k[b])?k[b](f):new Template(k[b]).evaluate(f);d.push("("+l.substring(1,l.length-1)+")");j=j.replace(f[0],"");break}}}return"[not("+d.join(" and ")+")]"},"nth-child":function(a){return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ",a)},"nth-last-child":function(a){return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ",a)},"nth-of-type":function(a){return Selector.xpath.pseudos.nth("position() ",a)},"nth-last-of-type":function(a){return Selector.xpath.pseudos.nth("(last() + 1 - position()) ",a)},"first-of-type":function(a){a[6]="1";return Selector.xpath.pseudos["nth-of-type"](a)},"last-of-type":function(a){a[6]="1";return Selector.xpath.pseudos["nth-last-of-type"](a)},"only-of-type":function(a){var b=Selector.xpath.pseudos;return b["first-of-type"](a)+b["last-of-type"](a)},nth:function(g,e){var h,i=e[6],d;if(i=="even"){i="2n+0"}if(i=="odd"){i="2n+1"}if(h=i.match(/^(\d+)$/)){return"["+g+"= "+h[1]+"]"}if(h=i.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(h[1]=="-"){h[1]=-1}var f=h[1]?Number(h[1]):1;var c=h[2]?Number(h[2]):0;d="[((#{fragment} - #{b}) mod #{a} = 0) and ((#{fragment} - #{b}) div #{a} >= 0)]";return new Template(d).evaluate({fragment:g,a:f,b:c})}}}},criteria:{tagName:'n = h.tagName(n, r, "#{1}", c);      c = false;',className:'n = h.className(n, r, "#{1}", c);    c = false;',id:'n = h.id(n, r, "#{1}", c);           c = false;',attrPresence:'n = h.attrPresence(n, r, "#{1}", c); c = false;',attr:function(a){a[3]=(a[5]||a[6]);return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(a)},pseudo:function(a){if(a[6]){a[6]=a[6].replace(/"/g,'\\"')}return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(a)},descendant:'c = "descendant";',child:'c = "child";',adjacent:'c = "adjacent";',laterSibling:'c = "laterSibling";'},patterns:[{name:"laterSibling",re:/^\s*~\s*/},{name:"child",re:/^\s*>\s*/},{name:"adjacent",re:/^\s*\+\s*/},{name:"descendant",re:/^\s/},{name:"tagName",re:/^\s*(\*|[\w\-]+)(\b|$)?/},{name:"id",re:/^#([\w\-\*]+)(\b|$)/},{name:"className",re:/^\.([\w\-\*]+)(\b|$)/},{name:"pseudo",re:/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/},{name:"attrPresence",re:/^\[((?:[\w-]+:)?[\w-]+)\]/},{name:"attr",re:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/}],assertions:{tagName:function(a,b){return b[1].toUpperCase()==a.tagName.toUpperCase()},className:function(a,b){return Element.hasClassName(a,b[1])},id:function(a,b){return a.id===b[1]},attrPresence:function(a,b){return Element.hasAttribute(a,b[1])},attr:function(b,c){var a=Element.readAttribute(b,c[1]);return a&&Selector.operators[c[2]](a,c[5]||c[6])}},handlers:{concat:function(d,c){for(var e=0,f;f=c[e];e++){d.push(f)}return d},mark:function(a){var d=Prototype.emptyFunction;for(var b=0,c;c=a[b];b++){c._countedByPrototype=d}return a},unmark:(function(){var a=(function(){var b=document.createElement("div"),e=false,d="_countedByPrototype",c="x";b[d]=c;e=(b.getAttribute(d)===c);b=null;return e})();return a?function(b){for(var c=0,d;d=b[c];c++){d.removeAttribute("_countedByPrototype")}return b}:function(b){for(var c=0,d;d=b[c];c++){d._countedByPrototype=void 0}return b}})(),index:function(a,d,g){a._countedByPrototype=Prototype.emptyFunction;if(d){for(var b=a.childNodes,e=b.length-1,c=1;e>=0;e--){var f=b[e];if(f.nodeType==1&&(!g||f._countedByPrototype)){f.nodeIndex=c++}}}else{for(var e=0,c=1,b=a.childNodes;f=b[e];e++){if(f.nodeType==1&&(!g||f._countedByPrototype)){f.nodeIndex=c++}}}},unique:function(b){if(b.length==0){return b}var d=[],e;for(var c=0,a=b.length;c<a;c++){if(typeof(e=b[c])._countedByPrototype=="undefined"){e._countedByPrototype=Prototype.emptyFunction;d.push(Element.extend(e))}}return Selector.handlers.unmark(d)},descendant:function(a){var d=Selector.handlers;for(var c=0,b=[],e;e=a[c];c++){d.concat(b,e.getElementsByTagName("*"))}return b},child:function(a){var e=Selector.handlers;for(var d=0,c=[],f;f=a[d];d++){for(var b=0,g;g=f.childNodes[b];b++){if(g.nodeType==1&&g.tagName!="!"){c.push(g)}}}return c},adjacent:function(a){for(var c=0,b=[],e;e=a[c];c++){var d=this.nextElementSibling(e);if(d){b.push(d)}}return b},laterSibling:function(a){var d=Selector.handlers;for(var c=0,b=[],e;e=a[c];c++){d.concat(b,Element.nextSiblings(e))}return b},nextElementSibling:function(a){while(a=a.nextSibling){if(a.nodeType==1){return a}}return null},previousElementSibling:function(a){while(a=a.previousSibling){if(a.nodeType==1){return a}}return null},tagName:function(a,j,c,b){var k=c.toUpperCase();var e=[],g=Selector.handlers;if(a){if(b){if(b=="descendant"){for(var f=0,d;d=a[f];f++){g.concat(e,d.getElementsByTagName(c))}return e}else{a=this[b](a)}if(c=="*"){return a}}for(var f=0,d;d=a[f];f++){if(d.tagName.toUpperCase()===k){e.push(d)}}return e}else{return j.getElementsByTagName(c)}},id:function(a,l,b,c){var k=$(b),g=Selector.handlers;if(l==document){if(!k){return[]}if(!a){return[k]}}else{if(!l.sourceIndex||l.sourceIndex<1){var a=l.getElementsByTagName("*");for(var e=0,d;d=a[e];e++){if(d.id===b){return[d]}}}}if(a){if(c){if(c=="child"){for(var f=0,d;d=a[f];f++){if(k.parentNode==d){return[k]}}}else{if(c=="descendant"){for(var f=0,d;d=a[f];f++){if(Element.descendantOf(k,d)){return[k]}}}else{if(c=="adjacent"){for(var f=0,d;d=a[f];f++){if(Selector.handlers.previousElementSibling(k)==d){return[k]}}}else{a=g[c](a)}}}}for(var f=0,d;d=a[f];f++){if(d==k){return[k]}}return[]}return(k&&Element.descendantOf(k,l))?[k]:[]},className:function(b,a,c,d){if(b&&d){b=this[d](b)}return Selector.handlers.byClassName(b,a,c)},byClassName:function(c,b,f){if(!c){c=Selector.handlers.descendant([b])}var h=" "+f+" ";for(var e=0,d=[],g,a;g=c[e];e++){a=g.className;if(a.length==0){continue}if(a==f||(" "+a+" ").include(h)){d.push(g)}}return d},attrPresence:function(c,b,a,g){if(!c){c=b.getElementsByTagName("*")}if(c&&g){c=this[g](c)}var e=[];for(var d=0,f;f=c[d];d++){if(Element.hasAttribute(f,a)){e.push(f)}}return e},attr:function(a,j,h,k,c,b){if(!a){a=j.getElementsByTagName("*")}if(a&&b){a=this[b](a)}var l=Selector.operators[c],f=[];for(var e=0,d;d=a[e];e++){var g=Element.readAttribute(d,h);if(g===null){continue}if(l(g,k)){f.push(d)}}return f},pseudo:function(b,c,e,a,d){if(b&&d){b=this[d](b)}if(!b){b=a.getElementsByTagName("*")}return Selector.pseudos[c](b,e,a)}},pseudos:{"first-child":function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(Selector.handlers.previousElementSibling(e)){continue}c.push(e)}return c},"last-child":function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(Selector.handlers.nextElementSibling(e)){continue}c.push(e)}return c},"only-child":function(b,g,a){var e=Selector.handlers;for(var d=0,c=[],f;f=b[d];d++){if(!e.previousElementSibling(f)&&!e.nextElementSibling(f)){c.push(f)}}return c},"nth-child":function(b,c,a){return Selector.pseudos.nth(b,c,a)},"nth-last-child":function(b,c,a){return Selector.pseudos.nth(b,c,a,true)},"nth-of-type":function(b,c,a){return Selector.pseudos.nth(b,c,a,false,true)},"nth-last-of-type":function(b,c,a){return Selector.pseudos.nth(b,c,a,true,true)},"first-of-type":function(b,c,a){return Selector.pseudos.nth(b,"1",a,false,true)},"last-of-type":function(b,c,a){return Selector.pseudos.nth(b,"1",a,true,true)},"only-of-type":function(b,d,a){var c=Selector.pseudos;return c["last-of-type"](c["first-of-type"](b,d,a),d,a)},getIndices:function(d,c,e){if(d==0){return c>0?[c]:[]}return $R(1,e).inject([],function(a,b){if(0==(b-c)%d&&(b-c)/d>=0){a.push(b)}return a})},nth:function(c,s,u,r,e){if(c.length==0){return[]}if(s=="even"){s="2n+0"}if(s=="odd"){s="2n+1"}var q=Selector.handlers,p=[],d=[],g;q.mark(c);for(var o=0,f;f=c[o];o++){if(!f.parentNode._countedByPrototype){q.index(f.parentNode,r,e);d.push(f.parentNode)}}if(s.match(/^\d+$/)){s=Number(s);for(var o=0,f;f=c[o];o++){if(f.nodeIndex==s){p.push(f)}}}else{if(g=s.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(g[1]=="-"){g[1]=-1}var v=g[1]?Number(g[1]):1;var t=g[2]?Number(g[2]):0;var w=Selector.pseudos.getIndices(v,t,c.length);for(var o=0,f,k=w.length;f=c[o];o++){for(var n=0;n<k;n++){if(f.nodeIndex==w[n]){p.push(f)}}}}}q.unmark(c);q.unmark(d);return p},empty:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(e.tagName=="!"||e.firstChild){continue}c.push(e)}return c},not:function(a,d,k){var g=Selector.handlers,l,c;var j=new Selector(d).findElements(k);g.mark(j);for(var f=0,e=[],b;b=a[f];f++){if(!b._countedByPrototype){e.push(b)}}g.unmark(j);return e},enabled:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(!e.disabled&&(!e.type||e.type!=="hidden")){c.push(e)}}return c},disabled:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(e.disabled){c.push(e)}}return c},checked:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(e.checked){c.push(e)}}return c}},operators:{"=":function(b,a){return b==a},"!=":function(b,a){return b!=a},"^=":function(b,a){return b==a||b&&b.startsWith(a)},"$=":function(b,a){return b==a||b&&b.endsWith(a)},"*=":function(b,a){return b==a||b&&b.include(a)},"~=":function(b,a){return(" "+b+" ").include(" "+a+" ")},"|=":function(b,a){return("-"+(b||"").toUpperCase()+"-").include("-"+(a||"").toUpperCase()+"-")}},split:function(b){var a=[];b.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,function(c){a.push(c[1].strip())});return a},matchElements:function(f,g){var e=$$(g),d=Selector.handlers;d.mark(e);for(var c=0,b=[],a;a=f[c];c++){if(a._countedByPrototype){b.push(a)}}d.unmark(e);return b},findElement:function(b,c,a){if(Object.isNumber(c)){a=c;c=false}return Selector.matchElements(b,c||"*")[a||0]},findChildElements:function(e,g){g=Selector.split(g.join(","));var d=[],f=Selector.handlers;for(var c=0,b=g.length,a;c<b;c++){a=new Selector(g[c].strip());f.concat(d,a.findElements(e))}return(b>1)?f.unique(d):d}});if(Prototype.Browser.IE){Object.extend(Selector.handlers,{concat:function(d,c){for(var e=0,f;f=c[e];e++){if(f.tagName!=="!"){d.push(f)}}return d}})}function $$(){return Selector.findChildElements(document,$A(arguments))}var Form={reset:function(a){a=$(a);a.reset();return a},serializeElements:function(g,b){if(typeof b!="object"){b={hash:!!b}}else{if(Object.isUndefined(b.hash)){b.hash=true}}var c,f,a=false,e=b.submit;var d=g.inject({},function(h,i){if(!i.disabled&&i.name){c=i.name;f=$(i).getValue();if(f!=null&&i.type!="file"&&(i.type!="submit"||(!a&&e!==false&&(!e||c==e)&&(a=true)))){if(c in h){if(!Object.isArray(h[c])){h[c]=[h[c]]}h[c].push(f)}else{h[c]=f}}}return h});return b.hash?d:Object.toQueryString(d)}};Form.Methods={serialize:function(b,a){return Form.serializeElements(Form.getElements(b),a)},getElements:function(e){var f=$(e).getElementsByTagName("*"),d,a=[],c=Form.Element.Serializers;for(var b=0;d=f[b];b++){a.push(d)}return a.inject([],function(g,h){if(c[h.tagName.toLowerCase()]){g.push(Element.extend(h))}return g})},getInputs:function(g,c,d){g=$(g);var a=g.getElementsByTagName("input");if(!c&&!d){return $A(a).map(Element.extend)}for(var e=0,h=[],f=a.length;e<f;e++){var b=a[e];if((c&&b.type!=c)||(d&&b.name!=d)){continue}h.push(Element.extend(b))}return h},disable:function(a){a=$(a);Form.getElements(a).invoke("disable");return a},enable:function(a){a=$(a);Form.getElements(a).invoke("enable");return a},findFirstElement:function(b){var c=$(b).getElements().findAll(function(d){return"hidden"!=d.type&&!d.disabled});var a=c.findAll(function(d){return d.hasAttribute("tabIndex")&&d.tabIndex>=0}).sortBy(function(d){return d.tabIndex}).first();return a?a:c.find(function(d){return/^(?:input|select|textarea)$/i.test(d.tagName)})},focusFirstElement:function(a){a=$(a);a.findFirstElement().activate();return a},request:function(b,a){b=$(b),a=Object.clone(a||{});var d=a.parameters,c=b.readAttribute("action")||"";if(c.blank()){c=window.location.href}a.parameters=b.serialize(true);if(d){if(Object.isString(d)){d=d.toQueryParams()}Object.extend(a.parameters,d)}if(b.hasAttribute("method")&&!a.method){a.method=b.method}return new Ajax.Request(c,a)}};Form.Element={focus:function(a){$(a).focus();return a},select:function(a){$(a).select();return a}};Form.Element.Methods={serialize:function(a){a=$(a);if(!a.disabled&&a.name){var b=a.getValue();if(b!=undefined){var c={};c[a.name]=b;return Object.toQueryString(c)}}return""},getValue:function(a){a=$(a);var b=a.tagName.toLowerCase();return Form.Element.Serializers[b](a)},setValue:function(a,b){a=$(a);var c=a.tagName.toLowerCase();Form.Element.Serializers[c](a,b);return a},clear:function(a){$(a).value="";return a},present:function(a){return $(a).value!=""},activate:function(a){a=$(a);try{a.focus();if(a.select&&(a.tagName.toLowerCase()!="input"||!(/^(?:button|reset|submit)$/i.test(a.type)))){a.select()}}catch(b){}return a},disable:function(a){a=$(a);a.disabled=true;return a},enable:function(a){a=$(a);a.disabled=false;return a}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers={input:function(a,b){switch(a.type.toLowerCase()){case"checkbox":case"radio":return Form.Element.Serializers.inputSelector(a,b);default:return Form.Element.Serializers.textarea(a,b)}},inputSelector:function(a,b){if(Object.isUndefined(b)){return a.checked?a.value:null}else{a.checked=!!b}},textarea:function(a,b){if(Object.isUndefined(b)){return a.value}else{a.value=b}},select:function(c,f){if(Object.isUndefined(f)){return this[c.type=="select-one"?"selectOne":"selectMany"](c)}else{var b,d,g=!Object.isArray(f);for(var a=0,e=c.length;a<e;a++){b=c.options[a];d=this.optionValue(b);if(g){if(d==f){b.selected=true;return}}else{b.selected=f.include(d)}}}},selectOne:function(b){var a=b.selectedIndex;return a>=0?this.optionValue(b.options[a]):null},selectMany:function(d){var a,e=d.length;if(!e){return null}for(var c=0,a=[];c<e;c++){var b=d.options[c];if(b.selected){a.push(this.optionValue(b))}}return a},optionValue:function(a){return Element.extend(a).hasAttribute("value")?a.value:a.text}};Abstract.TimedObserver=Class.create(PeriodicalExecuter,{initialize:function($super,a,b,c){$super(c,b);this.element=$(a);this.lastValue=this.getValue()},execute:function(){var a=this.getValue();if(Object.isString(this.lastValue)&&Object.isString(a)?this.lastValue!=a:String(this.lastValue)!=String(a)){this.callback(this.element,a);this.lastValue=a}}});Form.Element.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.serialize(this.element)}});Abstract.EventObserver=Class.create({initialize:function(a,b){this.element=$(a);this.callback=b;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=="form"){this.registerFormCallbacks()}else{this.registerCallback(this.element)}},onElementEvent:function(){var a=this.getValue();if(this.lastValue!=a){this.callback(this.element,a);this.lastValue=a}},registerFormCallbacks:function(){Form.getElements(this.element).each(this.registerCallback,this)},registerCallback:function(a){if(a.type){switch(a.type.toLowerCase()){case"checkbox":case"radio":Event.observe(a,"click",this.onElementEvent.bind(this));break;default:Event.observe(a,"change",this.onElementEvent.bind(this));break}}}});Form.Element.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.serialize(this.element)}});(function(){var v={KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,cache:{}};var e=document.documentElement;var w="onmouseenter" in e&&"onmouseleave" in e;var o;if(Prototype.Browser.IE){var h={0:1,1:4,2:2};o=function(y,x){return y.button===h[x]}}else{if(Prototype.Browser.WebKit){o=function(y,x){switch(x){case 0:return y.which==1&&!y.metaKey;case 1:return y.which==1&&y.metaKey;default:return false}}}else{o=function(y,x){return y.which?(y.which===x+1):(y.button===x)}}}function r(x){return o(x,0)}function q(x){return o(x,1)}function k(x){return o(x,2)}function c(z){z=v.extend(z);var y=z.target,x=z.type,A=z.currentTarget;if(A&&A.tagName){if(x==="load"||x==="error"||(x==="click"&&A.tagName.toLowerCase()==="input"&&A.type==="radio")){y=A}}if(y.nodeType==Node.TEXT_NODE){y=y.parentNode}return Element.extend(y)}function m(y,A){var x=v.element(y);if(!A){return x}var z=[x].concat(x.ancestors());return Selector.findElement(z,A,0)}function p(x){return{x:b(x),y:a(x)}}function b(z){var y=document.documentElement,x=document.body||{scrollLeft:0};return z.pageX||(z.clientX+(y.scrollLeft||x.scrollLeft)-(y.clientLeft||0))}function a(z){var y=document.documentElement,x=document.body||{scrollTop:0};return z.pageY||(z.clientY+(y.scrollTop||x.scrollTop)-(y.clientTop||0))}function n(x){v.extend(x);x.preventDefault();x.stopPropagation();x.stopped=true}v.Methods={isLeftClick:r,isMiddleClick:q,isRightClick:k,element:c,findElement:m,pointer:p,pointerX:b,pointerY:a,stop:n};var t=Object.keys(v.Methods).inject({},function(x,y){x[y]=v.Methods[y].methodize();return x});if(Prototype.Browser.IE){function g(y){var x;switch(y.type){case"mouseover":x=y.fromElement;break;case"mouseout":x=y.toElement;break;default:return null}return Element.extend(x)}Object.extend(t,{stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return"[object Event]"}});v.extend=function(y,x){if(!y){return false}if(y._extendedByPrototype){return y}y._extendedByPrototype=Prototype.emptyFunction;var z=v.pointer(y);Object.extend(y,{target:y.srcElement||x,relatedTarget:g(y),pageX:z.x,pageY:z.y});return Object.extend(y,t)}}else{v.prototype=window.Event.prototype||document.createEvent("HTMLEvents").__proto__;Object.extend(v.prototype,t);v.extend=Prototype.K}function l(B,A,C){var z=Element.retrieve(B,"prototype_event_registry");if(Object.isUndefined(z)){d.push(B);z=Element.retrieve(B,"prototype_event_registry",$H())}var x=z.get(A);if(Object.isUndefined(x)){x=[];z.set(A,x)}if(x.pluck("handler").include(C)){return false}var y;if(A.include(":")){y=function(D){if(Object.isUndefined(D.eventName)){return false}if(D.eventName!==A){return false}v.extend(D,B);C.call(B,D)}}else{if(!w&&(A==="mouseenter"||A==="mouseleave")){if(A==="mouseenter"||A==="mouseleave"){y=function(E){v.extend(E,B);var D=E.relatedTarget;while(D&&D!==B){try{D=D.parentNode}catch(F){D=B}}if(D===B){return}C.call(B,E)}}}else{y=function(D){v.extend(D,B);C.call(B,D)}}}y.handler=C;x.push(y);return y}function f(){for(var x=0,y=d.length;x<y;x++){v.stopObserving(d[x]);d[x]=null}}var d=[];if(Prototype.Browser.IE){window.attachEvent("onunload",f)}if(Prototype.Browser.WebKit){window.addEventListener("unload",Prototype.emptyFunction,false)}var j=Prototype.K;if(!w){j=function(y){var x={mouseenter:"mouseover",mouseleave:"mouseout"};return y in x?x[y]:y}}function s(A,z,B){A=$(A);var y=l(A,z,B);if(!y){return A}if(z.include(":")){if(A.addEventListener){A.addEventListener("dataavailable",y,false)}else{A.attachEvent("ondataavailable",y);A.attachEvent("onfilterchange",y)}}else{var x=j(z);if(A.addEventListener){A.addEventListener(x,y,false)}else{A.attachEvent("on"+x,y)}}return A}function i(C,A,D){C=$(C);var z=Element.retrieve(C,"prototype_event_registry");if(Object.isUndefined(z)){return C}if(A&&!D){var B=z.get(A);if(Object.isUndefined(B)){return C}B.each(function(E){Element.stopObserving(C,A,E.handler)});return C}else{if(!A){z.each(function(G){var E=G.key,F=G.value;F.each(function(H){Element.stopObserving(C,E,H.handler)})});return C}}var B=z.get(A);if(!B){return}var y=B.find(function(E){return E.handler===D});if(!y){return C}var x=j(A);if(A.include(":")){if(C.removeEventListener){C.removeEventListener("dataavailable",y,false)}else{C.detachEvent("ondataavailable",y);C.detachEvent("onfilterchange",y)}}else{if(C.removeEventListener){C.removeEventListener(x,y,false)}else{C.detachEvent("on"+x,y)}}z.set(A,B.without(y));return C}function u(A,z,y,x){A=$(A);if(Object.isUndefined(x)){x=true}if(A==document&&document.createEvent&&!A.dispatchEvent){A=document.documentElement}var B;if(document.createEvent){B=document.createEvent("HTMLEvents");B.initEvent("dataavailable",true,true)}else{B=document.createEventObject();B.eventType=x?"ondataavailable":"onfilterchange"}B.eventName=z;B.memo=y||{};if(document.createEvent){A.dispatchEvent(B)}else{A.fireEvent(B.eventType,B)}return v.extend(B)}Object.extend(v,v.Methods);Object.extend(v,{fire:u,observe:s,stopObserving:i});Element.addMethods({fire:u,observe:s,stopObserving:i});Object.extend(document,{fire:u.methodize(),observe:s.methodize(),stopObserving:i.methodize(),loaded:false});if(window.Event){Object.extend(window.Event,v)}else{window.Event=v}})();(function(){var d;function a(){if(document.loaded){return}if(d){window.clearTimeout(d)}document.loaded=true;document.fire("dom:loaded")}function c(){if(document.readyState==="complete"){document.stopObserving("readystatechange",c);a()}}function b(){try{document.documentElement.doScroll("left")}catch(f){d=b.defer();return}a()}if(document.addEventListener){document.addEventListener("DOMContentLoaded",a,false)}else{document.observe("readystatechange",c);if(window==top){d=b.defer()}}Event.observe(window,"load",a)})();Element.addMethods();Hash.toQueryString=Object.toQueryString;var Toggle={display:Element.toggle};Element.Methods.childOf=Element.Methods.descendantOf;var Insertion={Before:function(a,b){return Element.insert(a,{before:b})},Top:function(a,b){return Element.insert(a,{top:b})},Bottom:function(a,b){return Element.insert(a,{bottom:b})},After:function(a,b){return Element.insert(a,{after:b})}};var $continue=new Error('"throw $continue" is deprecated, use "return" instead');var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},within:function(b,a,c){if(this.includeScrollOffsets){return this.withinIncludingScrolloffsets(b,a,c)}this.xcomp=a;this.ycomp=c;this.offset=Element.cumulativeOffset(b);return(c>=this.offset[1]&&c<this.offset[1]+b.offsetHeight&&a>=this.offset[0]&&a<this.offset[0]+b.offsetWidth)},withinIncludingScrolloffsets:function(b,a,d){var c=Element.cumulativeScrollOffset(b);this.xcomp=a+c[0]-this.deltaX;this.ycomp=d+c[1]-this.deltaY;this.offset=Element.cumulativeOffset(b);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+b.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+b.offsetWidth)},overlap:function(b,a){if(!b){return 0}if(b=="vertical"){return((this.offset[1]+a.offsetHeight)-this.ycomp)/a.offsetHeight}if(b=="horizontal"){return((this.offset[0]+a.offsetWidth)-this.xcomp)/a.offsetWidth}},cumulativeOffset:Element.Methods.cumulativeOffset,positionedOffset:Element.Methods.positionedOffset,absolutize:function(a){Position.prepare();return Element.absolutize(a)},relativize:function(a){Position.prepare();return Element.relativize(a)},realOffset:Element.Methods.cumulativeScrollOffset,offsetParent:Element.Methods.getOffsetParent,page:Element.Methods.viewportOffset,clone:function(b,c,a){a=a||{};return Element.clonePosition(c,b,a)}};if(!document.getElementsByClassName){document.getElementsByClassName=function(b){function a(c){return c.blank()?null:"[contains(concat(' ', @class, ' '), ' "+c+" ')]"}b.getElementsByClassName=Prototype.BrowserFeatures.XPath?function(c,e){e=e.toString().strip();var d=/\s/.test(e)?$w(e).map(a).join(""):a(e);return d?document._getElementsByXPath(".//*"+d,c):[]}:function(e,f){f=f.toString().strip();var g=[],h=(/\s/.test(f)?$w(f):null);if(!h&&!f){return g}var c=$(e).getElementsByTagName("*");f=" "+f+" ";for(var d=0,k,j;k=c[d];d++){if(k.className&&(j=" "+k.className+" ")&&(j.include(f)||(h&&h.all(function(i){return !i.toString().blank()&&j.include(" "+i+" ")})))){g.push(Element.extend(k))}}return g};return function(d,c){return $(c||document.body).getElementsByClassName(d)}}(Element.Methods)}Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(a){this.element=$(a)},_each:function(a){this.element.className.split(/\s+/).select(function(b){return b.length>0})._each(a)},set:function(a){this.element.className=a},add:function(a){if(this.include(a)){return}this.set($A(this).concat(a).join(" "))},remove:function(a){if(!this.include(a)){return}this.set($A(this).without(a).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);String.prototype.parseColor=function(){var a="#";if(this.slice(0,4)=="rgb("){var c=this.slice(4,this.length-1).split(",");var b=0;do{a+=parseInt(c[b]).toColorPart()}while(++b<3)}else{if(this.slice(0,1)=="#"){if(this.length==4){for(var b=1;b<4;b++){a+=(this.charAt(b)+this.charAt(b)).toLowerCase()}}if(this.length==7){a=this.toLowerCase()}}}return(a.length==7?a:(arguments[0]||this))};Element.collectTextNodes=function(a){return $A($(a).childNodes).collect(function(b){return(b.nodeType==3?b.nodeValue:(b.hasChildNodes()?Element.collectTextNodes(b):""))}).flatten().join("")};Element.collectTextNodesIgnoreClass=function(a,b){return $A($(a).childNodes).collect(function(c){return(c.nodeType==3?c.nodeValue:((c.hasChildNodes()&&!Element.hasClassName(c,b))?Element.collectTextNodesIgnoreClass(c,b):""))}).flatten().join("")};Element.setContentZoom=function(a,b){a=$(a);a.setStyle({fontSize:(b/100)+"em"});if(Prototype.Browser.WebKit){window.scrollBy(0,0)}return a};Element.getInlineOpacity=function(a){return $(a).style.opacity||""};Element.forceRerendering=function(a){try{a=$(a);var c=document.createTextNode(" ");a.appendChild(c);a.removeChild(c)}catch(b){}};var Effect={_elementDoesNotExistError:{name:"ElementDoesNotExistError",message:"The specified DOM element does not exist, but is required for this effect to operate"},Transitions:{linear:Prototype.K,sinoidal:function(a){return(-Math.cos(a*Math.PI)/2)+0.5},reverse:function(a){return 1-a},flicker:function(a){var a=((-Math.cos(a*Math.PI)/4)+0.75)+Math.random()/4;return a>1?1:a},wobble:function(a){return(-Math.cos(a*Math.PI*(9*a))/2)+0.5},pulse:function(b,a){return(-Math.cos((b*((a||5)-0.5)*2)*Math.PI)/2)+0.5},spring:function(a){return 1-(Math.cos(a*4.5*Math.PI)*Math.exp(-a*6))},none:function(a){return 0},full:function(a){return 1}},DefaultOptions:{duration:1,fps:100,sync:false,from:0,to:1,delay:0,queue:"parallel"},tagifyText:function(a){var b="position:relative";if(Prototype.Browser.IE){b+=";zoom:1"}a=$(a);$A(a.childNodes).each(function(c){if(c.nodeType==3){c.nodeValue.toArray().each(function(d){a.insertBefore(new Element("span",{style:b}).update(d==" "?String.fromCharCode(160):d),c)});Element.remove(c)}})},multiple:function(b,c){var e;if(((typeof b=="object")||Object.isFunction(b))&&(b.length)){e=b}else{e=$(b).childNodes}var a=Object.extend({speed:0.1,delay:0},arguments[2]||{});var d=a.delay;$A(e).each(function(g,f){new c(g,Object.extend(a,{delay:f*a.speed+d}))})},PAIRS:{slide:["SlideDown","SlideUp"],blind:["BlindDown","BlindUp"],appear:["Appear","Fade"]},toggle:function(b,c,a){b=$(b);c=(c||"appear").toLowerCase();return Effect[Effect.PAIRS[c][b.visible()?1:0]](b,Object.extend({queue:{position:"end",scope:(b.id||"global"),limit:1}},a||{}))}};Effect.DefaultOptions.transition=Effect.Transitions.sinoidal;Effect.ScopedQueue=Class.create(Enumerable,{initialize:function(){this.effects=[];this.interval=null},_each:function(a){this.effects._each(a)},add:function(b){var c=new Date().getTime();var a=Object.isString(b.options.queue)?b.options.queue:b.options.queue.position;switch(a){case"front":this.effects.findAll(function(d){return d.state=="idle"}).each(function(d){d.startOn+=b.finishOn;d.finishOn+=b.finishOn});break;case"with-last":c=this.effects.pluck("startOn").max()||c;break;case"end":c=this.effects.pluck("finishOn").max()||c;break}b.startOn+=c;b.finishOn+=c;if(!b.options.queue.limit||(this.effects.length<b.options.queue.limit)){this.effects.push(b)}if(!this.interval){this.interval=setInterval(this.loop.bind(this),15)}},remove:function(a){this.effects=this.effects.reject(function(b){return b==a});if(this.effects.length==0){clearInterval(this.interval);this.interval=null}},loop:function(){var c=new Date().getTime();for(var b=0,a=this.effects.length;b<a;b++){this.effects[b]&&this.effects[b].loop(c)}}});Effect.Queues={instances:$H(),get:function(a){if(!Object.isString(a)){return a}return this.instances.get(a)||this.instances.set(a,new Effect.ScopedQueue())}};Effect.Queue=Effect.Queues.get("global");Effect.Base=Class.create({position:null,start:function(a){if(a&&a.transition===false){a.transition=Effect.Transitions.linear}this.options=Object.extend(Object.extend({},Effect.DefaultOptions),a||{});this.currentFrame=0;this.state="idle";this.startOn=this.options.delay*1000;this.finishOn=this.startOn+(this.options.duration*1000);this.fromToDelta=this.options.to-this.options.from;this.totalTime=this.finishOn-this.startOn;this.totalFrames=this.options.fps*this.options.duration;this.render=(function(){function b(d,c){if(d.options[c+"Internal"]){d.options[c+"Internal"](d)}if(d.options[c]){d.options[c](d)}}return function(c){if(this.state==="idle"){this.state="running";b(this,"beforeSetup");if(this.setup){this.setup()}b(this,"afterSetup")}if(this.state==="running"){c=(this.options.transition(c)*this.fromToDelta)+this.options.from;this.position=c;b(this,"beforeUpdate");if(this.update){this.update(c)}b(this,"afterUpdate")}}})();this.event("beforeStart");if(!this.options.sync){Effect.Queues.get(Object.isString(this.options.queue)?"global":this.options.queue.scope).add(this)}},loop:function(c){if(c>=this.startOn){if(c>=this.finishOn){this.render(1);this.cancel();this.event("beforeFinish");if(this.finish){this.finish()}this.event("afterFinish");return}var b=(c-this.startOn)/this.totalTime,a=(b*this.totalFrames).round();if(a>this.currentFrame){this.render(b);this.currentFrame=a}}},cancel:function(){if(!this.options.sync){Effect.Queues.get(Object.isString(this.options.queue)?"global":this.options.queue.scope).remove(this)}this.state="finished"},event:function(a){if(this.options[a+"Internal"]){this.options[a+"Internal"](this)}if(this.options[a]){this.options[a](this)}},inspect:function(){var a=$H();for(property in this){if(!Object.isFunction(this[property])){a.set(property,this[property])}}return"#<Effect:"+a.inspect()+",options:"+$H(this.options).inspect()+">"}});Effect.Parallel=Class.create(Effect.Base,{initialize:function(a){this.effects=a||[];this.start(arguments[1])},update:function(a){this.effects.invoke("render",a)},finish:function(a){this.effects.each(function(b){b.render(1);b.cancel();b.event("beforeFinish");if(b.finish){b.finish(a)}b.event("afterFinish")})}});Effect.Tween=Class.create(Effect.Base,{initialize:function(c,f,e){c=Object.isString(c)?$(c):c;var b=$A(arguments),d=b.last(),a=b.length==5?b[3]:null;this.method=Object.isFunction(d)?d.bind(c):Object.isFunction(c[d])?c[d].bind(c):function(g){c[d]=g};this.start(Object.extend({from:f,to:e},a||{}))},update:function(a){this.method(a)}});Effect.Event=Class.create(Effect.Base,{initialize:function(){this.start(Object.extend({duration:0},arguments[0]||{}))},update:Prototype.emptyFunction});Effect.Opacity=Class.create(Effect.Base,{initialize:function(b){this.element=$(b);if(!this.element){throw (Effect._elementDoesNotExistError)}if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout)){this.element.setStyle({zoom:1})}var a=Object.extend({from:this.element.getOpacity()||0,to:1},arguments[1]||{});this.start(a)},update:function(a){this.element.setOpacity(a)}});Effect.Move=Class.create(Effect.Base,{initialize:function(b){this.element=$(b);if(!this.element){throw (Effect._elementDoesNotExistError)}var a=Object.extend({x:0,y:0,mode:"relative"},arguments[1]||{});this.start(a)},setup:function(){this.element.makePositioned();this.originalLeft=parseFloat(this.element.getStyle("left")||"0");this.originalTop=parseFloat(this.element.getStyle("top")||"0");if(this.options.mode=="absolute"){this.options.x=this.options.x-this.originalLeft;this.options.y=this.options.y-this.originalTop}},update:function(a){this.element.setStyle({left:(this.options.x*a+this.originalLeft).round()+"px",top:(this.options.y*a+this.originalTop).round()+"px"})}});Effect.MoveBy=function(b,a,c){return new Effect.Move(b,Object.extend({x:c,y:a},arguments[3]||{}))};Effect.Scale=Class.create(Effect.Base,{initialize:function(b,c){this.element=$(b);if(!this.element){throw (Effect._elementDoesNotExistError)}var a=Object.extend({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:"box",scaleFrom:100,scaleTo:c},arguments[2]||{});this.start(a)},setup:function(){this.restoreAfterFinish=this.options.restoreAfterFinish||false;this.elementPositioning=this.element.getStyle("position");this.originalStyle={};["top","left","width","height","fontSize"].each(function(b){this.originalStyle[b]=this.element.style[b]}.bind(this));this.originalTop=this.element.offsetTop;this.originalLeft=this.element.offsetLeft;var a=this.element.getStyle("font-size")||"100%";["em","px","%","pt"].each(function(b){if(a.indexOf(b)>0){this.fontSize=parseFloat(a);this.fontSizeType=b}}.bind(this));this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;this.dims=null;if(this.options.scaleMode=="box"){this.dims=[this.element.offsetHeight,this.element.offsetWidth]}if(/^content/.test(this.options.scaleMode)){this.dims=[this.element.scrollHeight,this.element.scrollWidth]}if(!this.dims){this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth]}},update:function(a){var b=(this.options.scaleFrom/100)+(this.factor*a);if(this.options.scaleContent&&this.fontSize){this.element.setStyle({fontSize:this.fontSize*b+this.fontSizeType})}this.setDimensions(this.dims[0]*b,this.dims[1]*b)},finish:function(a){if(this.restoreAfterFinish){this.element.setStyle(this.originalStyle)}},setDimensions:function(a,e){var f={};if(this.options.scaleX){f.width=e.round()+"px"}if(this.options.scaleY){f.height=a.round()+"px"}if(this.options.scaleFromCenter){var c=(a-this.dims[0])/2;var b=(e-this.dims[1])/2;if(this.elementPositioning=="absolute"){if(this.options.scaleY){f.top=this.originalTop-c+"px"}if(this.options.scaleX){f.left=this.originalLeft-b+"px"}}else{if(this.options.scaleY){f.top=-c+"px"}if(this.options.scaleX){f.left=-b+"px"}}}this.element.setStyle(f)}});Effect.Highlight=Class.create(Effect.Base,{initialize:function(b){this.element=$(b);if(!this.element){throw (Effect._elementDoesNotExistError)}var a=Object.extend({startcolor:"#ffff99"},arguments[1]||{});this.start(a)},setup:function(){if(this.element.getStyle("display")=="none"){this.cancel();return}this.oldStyle={};if(!this.options.keepBackgroundImage){this.oldStyle.backgroundImage=this.element.getStyle("background-image");this.element.setStyle({backgroundImage:"none"})}if(!this.options.endcolor){this.options.endcolor=this.element.getStyle("background-color").parseColor("#ffffff")}if(!this.options.restorecolor){this.options.restorecolor=this.element.getStyle("background-color")}this._base=$R(0,2).map(function(a){return parseInt(this.options.startcolor.slice(a*2+1,a*2+3),16)}.bind(this));this._delta=$R(0,2).map(function(a){return parseInt(this.options.endcolor.slice(a*2+1,a*2+3),16)-this._base[a]}.bind(this))},update:function(a){this.element.setStyle({backgroundColor:$R(0,2).inject("#",function(b,c,d){return b+((this._base[d]+(this._delta[d]*a)).round().toColorPart())}.bind(this))})},finish:function(){this.element.setStyle(Object.extend(this.oldStyle,{backgroundColor:this.options.restorecolor}))}});Effect.ScrollTo=function(c){var b=arguments[1]||{},a=document.viewport.getScrollOffsets(),d=$(c).cumulativeOffset();if(b.offset){d[1]+=b.offset}return new Effect.Tween(null,a.top,d[1],b,function(e){scrollTo(a.left,e.round())})};Effect.ScrollElement=function(c){var b=arguments[1]||{},a=c.scrollTop,e=0,d=c;if(b.offset){e+=b.offset}return new Effect.Tween(null,a,Math.max(0,e),b,function(f){d.scrollTop=f.round()})};Effect.Increment=function(c){var b=arguments[1]||{},d=c;var e=0;var a=100;if(b.start){e=b.start}if(b.end){a=b.end}return new Effect.Tween(null,e,Math.max(0,a),b,function(f){d.innerHTML=f.round()})};Effect.Fade=function(c){c=$(c);var a=c.getInlineOpacity();var b=Object.extend({from:c.getOpacity()||1,to:0,afterFinishInternal:function(d){if(d.options.to!=0){return}d.element.hide().setStyle({opacity:a})}},arguments[1]||{});return new Effect.Opacity(c,b)};Effect.Appear=function(b){b=$(b);var a=Object.extend({from:(b.getStyle("display")=="none"?0:b.getOpacity()||0),to:1,afterFinishInternal:function(c){c.element.forceRerendering()},beforeSetup:function(c){c.element.setOpacity(c.options.from).show()}},arguments[1]||{});return new Effect.Opacity(b,a)};Effect.Puff=function(b){b=$(b);var a={opacity:b.getInlineOpacity(),position:b.getStyle("position"),top:b.style.top,left:b.style.left,width:b.style.width,height:b.style.height};return new Effect.Parallel([new Effect.Scale(b,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new Effect.Opacity(b,{sync:true,to:0})],Object.extend({duration:1,beforeSetupInternal:function(c){Position.absolutize(c.effects[0].element)},afterFinishInternal:function(c){c.effects[0].element.hide().setStyle(a)}},arguments[1]||{}))};Effect.BlindUp=function(a){a=$(a);a.makeClipping();return new Effect.Scale(a,0,Object.extend({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(b){b.element.hide().undoClipping()}},arguments[1]||{}))};Effect.BlindDown=function(b){b=$(b);var a=b.getDimensions();return new Effect.Scale(b,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:a.height,originalWidth:a.width},restoreAfterFinish:true,afterSetup:function(c){c.element.makeClipping().setStyle({height:"0px"}).show()},afterFinishInternal:function(c){c.element.undoClipping()}},arguments[1]||{}))};Effect.SwitchOff=function(b){b=$(b);var a=b.getInlineOpacity();return new Effect.Appear(b,Object.extend({duration:0.4,from:0,transition:Effect.Transitions.flicker,afterFinishInternal:function(c){new Effect.Scale(c.element,1,{duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetup:function(d){d.element.makePositioned().makeClipping()},afterFinishInternal:function(d){d.element.hide().undoClipping().undoPositioned().setStyle({opacity:a})}})}},arguments[1]||{}))};Effect.DropOut=function(b){b=$(b);var a={top:b.getStyle("top"),left:b.getStyle("left"),opacity:b.getInlineOpacity()};return new Effect.Parallel([new Effect.Move(b,{x:0,y:100,sync:true}),new Effect.Opacity(b,{sync:true,to:0})],Object.extend({duration:0.5,beforeSetup:function(c){c.effects[0].element.makePositioned()},afterFinishInternal:function(c){c.effects[0].element.hide().undoPositioned().setStyle(a)}},arguments[1]||{}))};Effect.Shake=function(d){d=$(d);var b=Object.extend({distance:20,duration:0.5},arguments[1]||{});var e=parseFloat(b.distance);var c=parseFloat(b.duration)/10;var a={top:d.getStyle("top"),left:d.getStyle("left")};return new Effect.Move(d,{x:e,y:0,duration:c,afterFinishInternal:function(f){new Effect.Move(f.element,{x:-e*2,y:0,duration:c*2,afterFinishInternal:function(g){new Effect.Move(g.element,{x:e*2,y:0,duration:c*2,afterFinishInternal:function(h){new Effect.Move(h.element,{x:-e*2,y:0,duration:c*2,afterFinishInternal:function(i){new Effect.Move(i.element,{x:e*2,y:0,duration:c*2,afterFinishInternal:function(j){new Effect.Move(j.element,{x:-e,y:0,duration:c,afterFinishInternal:function(k){k.element.undoPositioned().setStyle(a)}})}})}})}})}})}})};Effect.SlideDown=function(c){c=$(c).cleanWhitespace();var a=c.down().getStyle("bottom");var b=c.getDimensions();return new Effect.Scale(c,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:window.opera?0:1,scaleMode:{originalHeight:b.height,originalWidth:b.width},restoreAfterFinish:true,afterSetup:function(d){d.element.makePositioned();d.element.down().makePositioned();if(window.opera){d.element.setStyle({top:""})}d.element.makeClipping().setStyle({height:"0px"}).show()},afterUpdateInternal:function(d){d.element.down().setStyle({bottom:(d.dims[0]-d.element.clientHeight)+"px"})},afterFinishInternal:function(d){d.element.undoClipping().undoPositioned();d.element.down().undoPositioned().setStyle({bottom:a})}},arguments[1]||{}))};Effect.SlideUp=function(c){c=$(c).cleanWhitespace();var a=c.down().getStyle("bottom");var b=c.getDimensions();return new Effect.Scale(c,window.opera?0:1,Object.extend({scaleContent:false,scaleX:false,scaleMode:"box",scaleFrom:100,scaleMode:{originalHeight:b.height,originalWidth:b.width},restoreAfterFinish:true,afterSetup:function(d){d.element.makePositioned();d.element.down().makePositioned();if(window.opera){d.element.setStyle({top:""})}d.element.makeClipping().show()},afterUpdateInternal:function(d){d.element.down().setStyle({bottom:(d.dims[0]-d.element.clientHeight)+"px"})},afterFinishInternal:function(d){d.element.hide().undoClipping().undoPositioned();d.element.down().undoPositioned().setStyle({bottom:a})}},arguments[1]||{}))};Effect.Squish=function(a){return new Effect.Scale(a,window.opera?1:0,{restoreAfterFinish:true,beforeSetup:function(b){b.element.makeClipping()},afterFinishInternal:function(b){b.element.hide().undoClipping()}})};Effect.Grow=function(c){c=$(c);var b=Object.extend({direction:"center",moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.full},arguments[1]||{});var a={top:c.style.top,left:c.style.left,height:c.style.height,width:c.style.width,opacity:c.getInlineOpacity()};var g=c.getDimensions();var h,f;var e,d;switch(b.direction){case"top-left":h=f=e=d=0;break;case"top-right":h=g.width;f=d=0;e=-g.width;break;case"bottom-left":h=e=0;f=g.height;d=-g.height;break;case"bottom-right":h=g.width;f=g.height;e=-g.width;d=-g.height;break;case"center":h=g.width/2;f=g.height/2;e=-g.width/2;d=-g.height/2;break}return new Effect.Move(c,{x:h,y:f,duration:0.01,beforeSetup:function(i){i.element.hide().makeClipping().makePositioned()},afterFinishInternal:function(i){new Effect.Parallel([new Effect.Opacity(i.element,{sync:true,to:1,from:0,transition:b.opacityTransition}),new Effect.Move(i.element,{x:e,y:d,sync:true,transition:b.moveTransition}),new Effect.Scale(i.element,100,{scaleMode:{originalHeight:g.height,originalWidth:g.width},sync:true,scaleFrom:window.opera?1:0,transition:b.scaleTransition,restoreAfterFinish:true})],Object.extend({beforeSetup:function(j){j.effects[0].element.setStyle({height:"0px"}).show()},afterFinishInternal:function(j){j.effects[0].element.undoClipping().undoPositioned().setStyle(a)}},b))}})};Effect.Shrink=function(c){c=$(c);var b=Object.extend({direction:"center",moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.none},arguments[1]||{});var a={top:c.style.top,left:c.style.left,height:c.style.height,width:c.style.width,opacity:c.getInlineOpacity()};var f=c.getDimensions();var e,d;switch(b.direction){case"top-left":e=d=0;break;case"top-right":e=f.width;d=0;break;case"bottom-left":e=0;d=f.height;break;case"bottom-right":e=f.width;d=f.height;break;case"center":e=f.width/2;d=f.height/2;break}return new Effect.Parallel([new Effect.Opacity(c,{sync:true,to:0,from:1,transition:b.opacityTransition}),new Effect.Scale(c,window.opera?1:0,{sync:true,transition:b.scaleTransition,restoreAfterFinish:true}),new Effect.Move(c,{x:e,y:d,sync:true,transition:b.moveTransition})],Object.extend({beforeStartInternal:function(g){g.effects[0].element.makePositioned().makeClipping()},afterFinishInternal:function(g){g.effects[0].element.hide().undoClipping().undoPositioned().setStyle(a)}},b))};Effect.Pulsate=function(c){c=$(c);var b=arguments[1]||{},a=c.getInlineOpacity(),e=b.transition||Effect.Transitions.linear,d=function(f){return 1-e((-Math.cos((f*(b.pulses||5)*2)*Math.PI)/2)+0.5)};return new Effect.Opacity(c,Object.extend(Object.extend({duration:2,from:0,afterFinishInternal:function(f){f.element.setStyle({opacity:a})}},b),{transition:d}))};Effect.Fold=function(b){b=$(b);var a={top:b.style.top,left:b.style.left,width:b.style.width,height:b.style.height};b.makeClipping();return new Effect.Scale(b,5,Object.extend({scaleContent:false,scaleX:false,afterFinishInternal:function(c){new Effect.Scale(b,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(d){d.element.hide().undoClipping().setStyle(a)}})}},arguments[1]||{}))};Effect.Morph=Class.create(Effect.Base,{initialize:function(c){this.element=$(c);if(!this.element){throw (Effect._elementDoesNotExistError)}var a=Object.extend({style:{}},arguments[1]||{});if(!Object.isString(a.style)){this.style=$H(a.style)}else{if(a.style.include(":")){this.style=a.style.parseStyle()}else{this.element.addClassName(a.style);this.style=$H(this.element.getStyles());this.element.removeClassName(a.style);var b=this.element.getStyles();this.style=this.style.reject(function(d){return d.value==b[d.key]});a.afterFinishInternal=function(d){d.element.addClassName(d.options.style);d.transforms.each(function(e){d.element.style[e.style]=""})}}}this.start(a)},setup:function(){function a(b){if(!b||["rgba(0, 0, 0, 0)","transparent"].include(b)){b="#ffffff"}b=b.parseColor();return $R(0,2).map(function(c){return parseInt(b.slice(c*2+1,c*2+3),16)})}this.transforms=this.style.map(function(g){var f=g[0],e=g[1],d=null;if(e.parseColor("#zzzzzz")!="#zzzzzz"){e=e.parseColor();d="color"}else{if(f=="opacity"){e=parseFloat(e);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout)){this.element.setStyle({zoom:1})}}else{if(Element.CSS_LENGTH.test(e)){var c=e.match(/^([\+\-]?[0-9\.]+)(.*)$/);e=parseFloat(c[1]);d=(c.length==3)?c[2]:null}}}var b=this.element.getStyle(f);return{style:f.camelize(),originalValue:d=="color"?a(b):parseFloat(b||0),targetValue:d=="color"?a(e):e,unit:d}}.bind(this)).reject(function(b){return((b.originalValue==b.targetValue)||(b.unit!="color"&&(isNaN(b.originalValue)||isNaN(b.targetValue))))})},update:function(a){var d={},b,c=this.transforms.length;while(c--){d[(b=this.transforms[c]).style]=b.unit=="color"?"#"+(Math.round(b.originalValue[0]+(b.targetValue[0]-b.originalValue[0])*a)).toColorPart()+(Math.round(b.originalValue[1]+(b.targetValue[1]-b.originalValue[1])*a)).toColorPart()+(Math.round(b.originalValue[2]+(b.targetValue[2]-b.originalValue[2])*a)).toColorPart():(b.originalValue+(b.targetValue-b.originalValue)*a).toFixed(3)+(b.unit===null?"":b.unit)}this.element.setStyle(d,true)}});Effect.Transform=Class.create({initialize:function(a){this.tracks=[];this.options=arguments[1]||{};this.addTracks(a)},addTracks:function(a){a.each(function(b){b=$H(b);var c=b.values().first();this.tracks.push($H({ids:b.keys().first(),effect:Effect.Morph,options:{style:c}}))}.bind(this));return this},play:function(){return new Effect.Parallel(this.tracks.map(function(a){var d=a.get("ids"),c=a.get("effect"),b=a.get("options");var e=[$(d)||$$(d)].flatten();return e.map(function(f){return new c(f,Object.extend({sync:true},b))})}).flatten(),this.options)}});Element.CSS_PROPERTIES=$w("backgroundColor backgroundPosition borderBottomColor borderBottomStyle borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderSpacing borderTopColor borderTopStyle borderTopWidth bottom clip color fontSize fontWeight height left letterSpacing lineHeight marginBottom marginLeft marginRight marginTop markerOffset maxHeight maxWidth minHeight minWidth opacity outlineColor outlineOffset outlineWidth paddingBottom paddingLeft paddingRight paddingTop right textIndent top width wordSpacing zIndex");Element.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;String.__parseStyleElement=document.createElement("div");String.prototype.parseStyle=function(){var b,a=$H();if(Prototype.Browser.WebKit){b=new Element("div",{style:this}).style}else{String.__parseStyleElement.innerHTML='<div style="'+this+'"></div>';b=String.__parseStyleElement.childNodes[0].style}Element.CSS_PROPERTIES.each(function(c){if(b[c]){a.set(c,b[c])}});if(Prototype.Browser.IE&&this.include("opacity")){a.set("opacity",this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1])}return a};if(document.defaultView&&document.defaultView.getComputedStyle){Element.getStyles=function(b){var a=document.defaultView.getComputedStyle($(b),null);return Element.CSS_PROPERTIES.inject({},function(c,d){c[d]=a[d];return c})}}else{Element.getStyles=function(b){b=$(b);var a=b.currentStyle,c;c=Element.CSS_PROPERTIES.inject({},function(d,e){d[e]=a[e];return d});if(!c.opacity){c.opacity=b.getOpacity()}return c}}Effect.Methods={morph:function(a,b){a=$(a);new Effect.Morph(a,Object.extend({style:b},arguments[2]||{}));return a},visualEffect:function(c,e,b){c=$(c);var d=e.dasherize().camelize(),a=d.charAt(0).toUpperCase()+d.substring(1);new Effect[a](c,b);return c},highlight:function(b,a){b=$(b);new Effect.Highlight(b,a);return b}};$w("fade appear grow shrink fold blindUp blindDown slideUp slideDown pulsate shake puff squish switchOff dropOut").each(function(a){Effect.Methods[a]=function(c,b){c=$(c);Effect[a.charAt(0).toUpperCase()+a.substring(1)](c,b);return c}});$w("getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles").each(function(a){Effect.Methods[a]=Element[a]});Element.addMethods(Effect.Methods);
var Discover={
ifm: null,
browsed: function(url, tid, childWindow, blind) {
Monitor.browsed(url, tid, childWindow, blind);
},
deleteFinish: function() {
Monitor.Topic.onScroll();
Monitor.Topic.showByQuestionToolTip();
},
topicChanged: function() {
var div=$('stuff-count');
if (div) div.innerHTML='('+parseInt(Topic.total)+')';
div=$('stuff-count2');
if (div) div.innerHTML=Topic.total?'('+parseInt(Topic.total)+' topic'+(Topic.total > 1?'s':'')+' total)':'';
},
streamAction: function(callback) {
try{
if (Monitor.browser.isVisible())
Monitor.browser.iframe.contentWindow.Browse[callback]();
}catch(e){
alert('Error');
}
Dialog.hide();
}
};
var Monitor={
focused: false,
signin: false,
div: {outer:null, contentOuter:null, content:null, header:null, wrapper:null},
event: {},
browser: null,
firstGoURL: null,
isMine: false,
sharedInfo: {},
minWidth:716,
firstGoURLReferrer: null,
init: function() {
if (!this.div.outer) this.div.outer=$('outer-container');
if (!this.div.content) this.div.content=$('content-container');
if (!this.div.contentOuter) this.div.contentOuter=$('content-outer');
if (!this.div.header) this.div.header=$('header-container');
if (!this.div.wrapper) this.div.wrapper=$('content-wrapper');
Util.removeElementsByID('LFBrowserContent');
this.browser=new LFBrowser(document.body);
this.browser.setHideFunc(Monitor.browsedEnd);
Discover.ifm=this.browser.iframe;
this.div.content.scrollTop=0;
Monitor.Topic.init();
Monitor.Preview.init();
Event.observe(window, 'resize', this.resize);
Event.observe(window, 'focus', Monitor.Topic.draw);
//Event.observe(window, 'blur', this.onBlur);
this.resize();
//lagacy
Discover.Cache.init();
if (!Monitor.Guide) {
if (this.firstGoURL) {
Dialog.hide();
this.browse('/browse/'+this.firstGoURL, this.firstGoURLReferrer);
this.firstGoURL=this.firstGoURLReferrer='';
}else{
var div=$('import-dialog');
if (div)
Dialog.show(div, {round:true});
}
}
setInterval(this.playing.bind(this), 1000);
},
_playing: null,
playing: function() {
if (!this._playing) this._playing=$('playing-live');
if (this._playing.parentNode.offsetWidth <= 0) return;
if (this._playing.innerHTML.length >= 3)
this._playing.innerHTML='';
else
this._playing.innerHTML+='.';
},
onFocus: function(e) {
Monitor.focused=true;
},
onBlur: function(e) {
Monitor.focused=false;
},
attachEvent: function(type, func) {
if (!this.event[type]) this.event[type]=[];
if (this.event[type].search(func) < 0)
this.event[type].push(func);
},
runEventFunc: function(type) {
if (!this.event[type]) return;
for (var i=0; i < this.event[type].length; i++) {
try{
this.event[type][i](arguments[1], arguments[2], arguments[3], arguments[4]);
}catch(e) {}
}
},
resizeInitial: function() {
var obj=Monitor;
if (!obj.div.outer) obj.div.outer=$('outer-container');
if (!obj.div.content) obj.div.content=$('content-container');
if (!obj.div.contentOuter) obj.div.contentOuter=$('content-outer');
if (!obj.div.header) obj.div.header=$('header-container');
if (!obj.div.wrapper) obj.div.wrapper=$('content-wrapper');
obj.div.outer.style.width=Math.max(obj.minWidth, document.documentElement.offsetWidth-40)+'px';
obj.div.contentOuter.style.height=Math.max(100, (document.documentElement.offsetHeight-obj.div.header.offsetHeight)-1)+'px';
//obj.div.content.style.height=Math.max(100, (document.documentElement.offsetHeight-obj.div.header.offsetHeight))+'px';
Monitor.Topic.updateColumn(Math.ceil(obj.div.outer.clientWidth/358));
Monitor.Topic.updateTreadmill();
try {
Monitor.Topic.dim.w=obj.div.wrapper.lastChild.offsetWidth-1;
}catch(e){}
},
resize: function() {
var obj=Monitor;
var topic=Monitor.Topic;
obj.resizeInitial();
obj.runEventFunc('resize');
topic.draw();
topic.showByQuestionToolTip();
setTimeout('Monitor.resizeIE6Hack()', 50);
},
resizeIE6Hack: function() {
Monitor.div.contentOuter.style.display='none';
Monitor.div.contentOuter.style.display='block';
Monitor.runEventFunc('resize');
},
go: function(url) {
this.browser.form['address-field'].value=url;
LFBrowser.formSubmit(this.browser.form);
},
browsed: function(url, tid, childWindow, blind) {
this.browser.visitMode=blind;
//this.runEventFunc('browsed', url);
if (childWindow) {
try{
LFBrowser.browsed(childWindow.frameElement, url, tid, childWindow);
}catch(e) {}
}
if (tid == Monitor.Question.lastAddedTid) {
Monitor.Topic.hideByQuestionToolTip();
Monitor.Question.lastAddedTid=null;
}
Monitor.Question.browsed(url, tid);
},
browse: function(url, referrer) {
try{
this.browser.iframe.style.visibility='hidden';
}catch(e){}
Monitor.Question.reset();
this.browser.show(url, referrer);
Monitor.Topic.hideByQuestionToolTip();
},
browsedEnd: function() {
if (Monitor.Preview.isVisible()) return;
Monitor.Topic.updateTreadmill();
Monitor.runEventFunc('browsedEnd');
Monitor.Question.show();
Monitor.Topic.continueAutoRefresh();
setTimeout('Monitor.Topic.addPreviewing=false;', 10);
},
goTop: function() {
Monitor.Topic.noScrollEvent=true;
if (Monitor.Topic.firstEl)
this.div.content.scrollTop=Monitor.Topic.firstEl.offsetTop-20-(Monitor.Topic.firstEl.offsetLeft > 12?0:Monitor.Topic.dim.h);
else
this.div.content.scrollTop=0;
}
};
Monitor.Topic={
timegab: 0,
timeMax: 0,
total: 0,
scrolling: false,
autoRefreshPaused: false,
refreshing: false,
hasDatas: false,
noScrollEvent: false,
scrollEventStop: false,
scrollTop: 0,
scrollDir: 'd',
defaultTopics: [],
div: null,
sort: 'update',
container: null,
category: 0,
firstEl: null,
dim: {w:352, h:175},
numberOfColumn: 0,
numberOfUpdate: 0,
empty: [],
init: function() {
if (!this.timeMax)
this.timeMax=(new Date()).getTime();
this.empty[0]=document.createElement('SPAN');
this.empty[0].className='topics topics-empty';
for (var i=8; i--;)
this.empty.push(this.empty[0].cloneNode(true));
this.container=Monitor.div.content;
this.div=Monitor.div.wrapper;
this.initTreadmill();
var sort=$('monitor-sort');
if (sort)
sort.value=this.sort;
Topic.total=this.total;
this.containerHeightChanged();
Event.observe(window, 'scroll', this.onScroll);
Event.observe(this.container, 'scroll', this.onScroll);
Event.observe(this.container, 'click', this.onClick);
Event.observe(document, 'click', this.onDocumentClick);
//Event.observe(this.container, 'mousemove', this.onMouseMove);
Event.observe(this.container, 'mouseover', this.onMouseOver);
this.drawDo(true);
setTimeout('Monitor.Topic.drawDo(true);', 500);
setInterval('Monitor.Topic.collect();', 27100);
setInterval('Monitor.Topic.autoRefreshDo();', 10000);
},
entryTid: function(id) {
var tid=id.match(/TNG(\d+)/);
if (!tid) return;
return tid[1];
},
_entryData: {},
_entryDataLog: [],
entryQueue: [],
_drawRequestedTid: [],
getEntryData: function(id) {
var data=this._entryData[id];
if (data) {
this._updateEntryDataLog(id);
return data;
}
},
putEntryData: function(id, data) {
this._updateEntryDataLog(id);
this._entryData[id]=data;
},
_updateEntryDataLog: function(id) {
var idx=this._entryDataLog.search(id);
if (idx > -1)
this._entryDataLog.splice(idx, 1);
this._entryDataLog.unshift(id);
},
draw: function() {
clearTimeout(timer['draw']);
timer['draw']=setTimeout('Monitor.Topic.drawDo();', 10);
},
drawDo: function(force) {
if (!this.container || !Monitor.browser || (!force && Monitor.browser.isVisible())) return;
var scrTop=this.container.scrollTop;
var scrLimit=scrTop+this.container.clientHeight;
var tids=[];
for (var p=0; p < this.div.childNodes.length; p++) {
if (this.div.childNodes[p].offsetTop+this.div.childNodes[p].offsetHeight < scrTop) continue;
else if (this.div.childNodes[p].offsetTop > scrLimit) break;
var div=this.div.childNodes[p];
var idx=Math.max(0, Math.floor((this.container.scrollTop-div.offsetTop)/this.dim.h)*this.numberOfColumn);
var topLimit=scrLimit-div.offsetTop+300;
for (var i=idx; i < div.childNodes.length; i++) {
var node=div.childNodes[i];
if (!node || !node.id || node.firstChild) continue;
if (node.offsetTop > topLimit) break;
Util.truncate(node);
var data=this.getEntryData(node.id);
if (data) {
this.entryQueue.push([data, node]);
continue;
}
var tid=this.entryTid(node.id);
if (!tid) continue;
if (this._drawRequestedTid.search(tid) < 0) {
tids.push(tid);
this._drawRequestedTid.push(tid);
}
}
}
this._drawDo(this.entryQueue.length > 0, this.entryQueue.length);
if (tids.length > 0)
ajax('/monitor/topic/data.json', 'tid='+(tids.join(',')), this.drawResponse);
},
drawResponse: function(result) {
if (!result || result.error) return;
var obj=Monitor.Topic;
for (var i=0; i < result.length; i++) {
if (result[i].tid)
obj.putEntryData('TNG'+result[i].tid, result[i]);
}
obj.draw();
},
_drawDo: function(force, cnt) {
if (this.entryQueue.length > 0) {
clearTimeout(timer['_draw']);
if (force)
Monitor.Topic._draw(true, cnt);
else
timer['_draw']=setTimeout('Monitor.Topic._draw();', 0);
}
},
_draw: function(force, cnt) {
for (var i=Math.max(cnt?cnt:this.numberOfColumn, 2); i--;) {
var data=this.scrollDir=='u'?this.entryQueue.pop():this.entryQueue.shift();
if (data)
this.__draw(data[0], data[1], {force:force});
}
this._drawDo();
},
doSort: function(type) {
this.sort=type;
this.container.scrollTop=0;
Util.truncate(this.div);
ajax('/monitor/topic/list/'+type+'.json', null, this.doSortResponse);
this.updateTreadmill();
},
doSortResponse: function(result) {
if (!result || result.error) return;
var obj=Monitor.Topic;
var div=null;
var limit=40-(40%obj.numberOfColumn);
for (var i=0; i < result.length; i++) {
if (!div || div.childNodes.length >= limit) {
if (div) obj.div.appendChild(div);
div=document.createElement('DIV');
}
Util.append(div, 'A', null, 'topics').id='TNG'+result[i];
}
if (div) obj.div.appendChild(div);
obj.updateTreadmill();
obj.drawDo(true);
},
__draw: function(data, node, options) {
if (!data || !data.tid) return;
if (!node) node=$('TNG'+data.tid);
if (!options) options={};
if (!options.force) {
if (!node || !this.isContainsDiv(node, 300, 300) || node.firstChild) return;
}
if (!options.isAdded && node.added) options.isAdded=node.added;
if (options.isNew)
node.className='topics topics-new';
this.setLink(node, data, options.isAdded);
Util.truncate(node);
if (!this._skel.del) {
this._skel.del=document.createElement('SPAN');
this._skel.del.className='topics-delete';
this._skel.del.innerHTML='Delete';
this._skel.del.title='Delete this topic';
}
node.appendChild(this._skel.del.cloneNode(true));
if (options.isAdded) {
node.className+=' topics-added';
Util.append(node, 'SPAN', null, (options.isAlreadyExists || node.alreadyExists)?'topics-icon-found':'topics-icon-added');
//node.added=node.alreadyExists=null;
}
if (data.time_read && data.time_read >= data.time_update)
node.className+=' visited';
var entry=this.makeNode(data);
node.appendChild(entry);
this.showImage(entry);
return node;
},
setLink: function(node, data, isAdded) {
node.href='/browse/'+Util.escapeURL(data.url)+(isAdded?('?t='+(new Date()).getTime()):('?n='+(data.time_update?data.time_update:(new Date()).getTime())));
},
_skel: {del:null, entry:null},
makeNode: function(data, prevImgUrl) {
if (!this._skel.entry) {
this._skel.entry=document.createElement('SPAN');
this._skel.entry.className='topics-outer';
this._skel.entry.innerHTML='<span class="topics-wrapper"><span class="topics-title"><span class="topics-title-text"></span><span class="topics-title-link"></span></span><span class="topics-content-wrap"><span class="topics-image"><img onerror="Monitor.Topic.imgLoadError(this);" onload="Monitor.Topic.imgLoad(this);" /></span></span></span>';
/*
<span class="topics-wrapper">
<span class="topics-title">
<span class="topics-title-text"></span>
<span class="topics-title-link"></span>
</span>
<span class="topics-content-wrap">
<span class="topics-image">
<img onerror="Monitor.Topic.imgLoadError(this);" onload="Monitor.Topic.imgLoad(this);" />
</span>
<span class="topics-content"></span>
<span class="topics-content"></span>
<span class="topics-content"></span>
<span class="topics-content"></span>
</span>
</span>
*/
}
var entry=this._skel.entry.cloneNode(true);
var wrap=entry.firstChild;
wrap.firstChild.firstChild.innerHTML=data.text;
if (data.type == 'tag')
wrap.firstChild.removeChild(wrap.firstChild.lastChild);
else
wrap.firstChild.lastChild.innerHTML=data.url;
var img=[];
//*
if (data.child && data.child.length > 0) {
for (var i=0; i < data.child.length && img.length < 3; i++) {
if (data.child[i].image && data.child[i].image != prevImgUrl)
img.push(data.child[i].image);
}
}
//*/
if (img.length > 0) {
var el=wrap.lastChild.firstChild.firstChild;
if (img[2]) el.altimg2=img[2];
if (img[1]) el.altimg1=img[1];
el.altimg0=img[0];
}else
wrap.lastChild.removeChild(wrap.lastChild.firstChild);
var contents=wrap.lastChild;
if (data.child && data.child.length > 0) {
for (var i=0; i < data.child.length; i++) {
if (data.child[i].text)
Util.append(contents, 'SPAN', Util.wrapText(data.child[i].text.escapeHTML()), 'topics-content');
}
}else{
Util.append(contents, 'SPAN', null, 'topics-content-empty');
}
return entry;
},
collect: function() {
while (this._entryDataLog.length > 300) {
var id=this._entryDataLog.pop();
this._entryData[id]=null;
delete this._entryData[id];
var tid=this.entryTid(id);
if (tid) {
var idx=this._drawRequestedTid.search(tid);
if (idx > -1)
this._drawRequestedTid.splice(idx, 1);
}
}
if (this.div.childNodes.length < 3) return;
var ltop=this.container.scrollTop-1000;
var lbot=this.container.scrollTop+this.container.offsetHeight+1000;
if (this.container.getElementsByClassName) {
var span=this.container.getElementsByClassName('topics-outer');
if (!span.length) return;
for (var i=span.length, cnt=0; i--;) {
var el=span[i].parentNode;
var top=this.entryTop(el);
if (lbot < top || top+el.offsetHeight < ltop) {
Util.truncate(el);
cnt++;
if (cnt > 10)
break;
}
}
}else{
}
},
updateColumn: function(n) {
n=Math.min(n, 10);
if (this.numberOfColumn != n) {
this.numberOfColumn=n;
if (!this.div) this.div=Monitor.div.wrapper;
if (!this.container) this.container=Monitor.div.content;
this.truncateEmpty();
Monitor.div.contentOuter.className='topics-list-column'+n;
this.realign();
this.draw();
if (Monitor.Preview.isVisible())
Monitor.Preview.columnUpdated();
return true;
}
return false;
},
onMouseOver: function(e) {
var el=Util.eventSrc(e, {tagName:'A'});
if (!el /*|| !el.className.match(/-new/)*/) return;
while (el && el.offsetLeft > 5)
el=el.previousSibling;
if (!el) return;
if (el.className.match(/-new/))
el.className=el.className.replace(/topics-new/g, '');
el=el.nextSibling;
while (el && el.offsetLeft > 5) {
if (el.className.match(/-new/))
el.className=el.className.replace(/topics-new/g, '');
el=el.nextSibling;
}
},
onDocumentClick: function(e) {
var el=Util.eventSrc(e);
if (!el) return;
Monitor.Topic.addHideByClick(el);
Monitor.Preview.hideByClick(el);
},
onClick: function(e) {
var el=Util.eventSrc(e);
if (el.className == 'topics-delete') {
Monitor.Topic.del(el);
Event.stop(e);
Monitor.Topic.onDocumentClick(e);
return;
}
var link=Util.findParent(el, {tagName:'A'});
if (link && link.href) {
if (link.className.match(/topics-added/))
link.className=link.className.replace(/topics-added|visited/g, '')+' visited';
else
link.className=link.className.replace(/visited/g, '')+' visited';
link.count=0;
link.added=link.alreadyExists=null;
Event.stop(e);
Monitor.Topic.onDocumentClick(e);
//try{
if (!Monitor.Preview.show(link))
Monitor.browse(link.href);
//}catch(e) {
//Monitor.browse(link.href);
//}
Monitor.Topic.updateTreadmill();
}
},
onScroll: function(e) {
var obj=Monitor.Topic;
clearTimeout(timer['MonitorTopicDraw']);
timer['MonitorTopicDraw']=setTimeout('Monitor.Topic.draw();', 100);
if (obj.scrollEventStop || !e) return;
if (obj.noScrollEvent) {
obj.noScrollEvent=false;
return;
}
if ((obj.scrollTop < 25 && obj.container.scrollTop >= 25) || (obj.scrollTop > 25 && obj.container.scrollTop <= 25))
obj.updateTreadmill();
obj.showPageInfo();
obj.setFirstEl();
obj.scrollDir=obj.scrollTop > obj.container.scrollTop?'u':'d';
obj.scrollTop=obj.container.scrollTop;
Monitor.runEventFunc('contentScroll');
},
setFirstEl: function() {
var obj=Monitor.Topic;
var el=obj.getNowEntry();
if (el && el != obj.firstEl) obj.firstEl=el;
},
realign: function() {
for (var i=0; i < this.div.childNodes.length; i++) {
var div=this.div.childNodes[i];
//split large block
if (div.childNodes.length > 50) {
var newDiv=document.createElement('DIV');
for (var p=Math.ceil(div.childNodes.length/2); p--;)
newDiv.appendChild(div.firstChild);
this.div.insertBefore(newDiv, div);
div=newDiv;
}
if (div.childNodes.length <= 0) {
this.div.removeChild(div);
i--;
continue;
}
if (!div.nextSibling || div.childNodes.length%this.numberOfColumn == 0) continue;
while (div.lastChild && div.childNodes.length%this.numberOfColumn != 0)
Util.prepend(div.nextSibling, div.lastChild);
}
this.containerHeightChanged();
},
containerHeightChanged: function() {
if (!this.container || !this.div) return;
if (Browser.isIE6 || Browser.isIE7) {
this.div.style.height='';
this.div.style.height=this.div.scrollHeight+'px';
}
this.updateTreadmill();
},
pauseAutoRefresh: function() {
this.autoRefreshPaused=true;
},
resumeAutoRefresh: function() {
this.autoRefreshPaused=false;
this.continueAutoRefresh();
},
toggleUpdate: function() {
var el=$('toggle-update');
if (!el) return;
var p=el.parentNode;
if (p.className.match(/play/)) {
p.className=p.className.replace(/play/, 'pause');
this.pauseAutoRefresh();
}else if (p.className.match(/pause/)) {
p.className=p.className.replace(/pause/, 'play');
this.resumeAutoRefresh();
}
this.updateTreadmill();
},
updated: null,
showUpdateBar: function(n) {
var obj=Monitor.Topic;
obj.scrollEventStop=true;
if (!obj.updated)
obj.updated=$('now-updated');
if (n) {
obj.updated.innerHTML='Incoming: <strong>'+n+'</strong> updated topic'+(n>1?'s':'')+'!';
setTimeout('Monitor.Topic.hideUpdateBar();', 2500);
}
obj.updated.parentNode.className+=' updating';
},
hideUpdateBar: function() {
Monitor.Topic.scrollEventStop=false;
clearTimeout(timer['hideUpdateBar']);
timer['hideUpdateBar']=setTimeout('Monitor.Topic._hideUpdateBar();', 100);
},
/*
emphasizeUpdateBar: function() {
if (Monitor.Topic.updated)
Element.setOpacity(Monitor.Topic.updated, 0.9);
},
weakenUpdateBar: function() {
return;
if (!Monitor.Topic.updated)
Monitor.Topic.updated=Util.append(document.body, 'DIV', null, 'now-updated');
Element.setOpacity(Monitor.Topic.updated, 0.2);
},
*/
_hideUpdateBar: function() {
var obj=Monitor.Topic;
if (!obj.updated) return;
obj.updated.parentNode.className=obj.updated.parentNode.className.replace(/\s+updating/, '');
if (!obj.container) return;
if (obj.container.className)
obj.container.className='';
if (obj.container.status)
setTimeout('Monitor.Topic.container.status=""; Monitor.Topic.updateTreadmill();', 1200);
},
pageInfo: null,
showPageInfo: function() {
var obj=Monitor.Topic;
if (!obj.container) return;
if (!obj.pageInfo) {
obj.pageInfo=Util.append(Monitor.Topic.container, 'DIV', null, 'page-info');
Util.insertAfter(obj.pageInfo, Monitor.Topic.container);
}
var pageHeight=Math.floor((obj.container.clientHeight+obj.dim.h-20)/obj.dim.h)*obj.dim.h;
var totalPage=Math.floor(obj.div.clientHeight/pageHeight);
var nowPage=Math.min(Math.floor((obj.container.scrollTop+pageHeight-obj.dim.h)/pageHeight)+1, totalPage);
var html=nowPage+'/'+totalPage;
if (obj.pageInfo.innerHTML != html)
obj.pageInfo.innerHTML=html;
var top=Math.floor((obj.container.clientHeight-27)*(obj.container.scrollTop/(obj.div.clientHeight-obj.container.clientHeight)))+'px';
if (obj.pageInfo.style.top != top)
obj.pageInfo.style.top=top;
if (obj.pageInfo.style.display != 'block')
obj.pageInfo.style.display='block';
clearTimeout(timer['hidePageInfo']);
timer['hidePageInfo']=setTimeout('Monitor.Topic.hidePageInfo()', 2000);
},
hidePageInfo: function(timestamp) {
var obj=Monitor.Topic;
if (!obj.pageInfo) return;
if (obj.pageInfo.style.display != 'none')
obj.pageInfo.style.display='none';
},
entryTop: function(node) {
return (node.parentNode?node.parentNode.offsetTop:0)+node.offsetTop;
},
continueAutoRefresh: function() {
if (Monitor.browser.isVisible() || Monitor.Preview.isVisible() || this.autoRefreshPaused) return;
if (this.autoRefreshData.length > 0) {
this._autoRefreshResponse(this.autoRefreshData, {noScroll:true});
this.autoRefreshData.splice(0, this.autoRefreshData.length);
}else
this.draw();
},
autoRefreshData: [],
autoRefreshDo: function() {
if (!this.hasDatas || this.autoRefreshPaused || this.refreshing) return;
this.refreshing=true;
ajax('/monitor/new.json', 'timeMax='+(Number.parseInt(this.timeMax)+1), this.autoRefreshResponse);
},
autoRefreshResponse: function(result, options) {
var obj=Monitor.Topic;
obj.refreshing=false;
if (!result || result.error || result.length <= 0) return;
if (result[0] && result[0].time_update)
obj.timeMax=Math.max(obj.timeMax, result[0].time_update);
if (Monitor.browser.isVisible() || Monitor.Preview.isVisible()) {
for (var i=result.length; i--;) {
for (var p=obj.autoRefreshData.length; p--;) {
if (obj.autoRefreshData[p].tid == result[i].tid) {
obj.autoRefreshData.splice(p, 1);
break;
}
}
obj.autoRefreshData.unshift(result[i]);
}
return;
}
obj.showUpdateBar(result.length);
var time=(new Date()).getTime();
var wait=4000;
if (Topic.lastSavedTime > time-wait) {
var a=result, b=options;
setTimeout(function() {
Monitor.Topic._autoRefreshResponse(a, b);
}, Topic.lastSavedTime-(time-wait));
return;
}else
obj._autoRefreshResponse(result, options);
},
_autoRefreshResponse: function(result, options) {
var obj=Monitor.Topic;
if (!options) options={};
var forceScroll=!Monitor.browser.isVisible() && (obj.container.scrollTop < 25 || options.scroll);
obj.setFirstEl();
var firstEl=obj.firstEl;
var top=0;
var left=0;
if (firstEl) {
top=obj.container.scrollTop-obj.entryTop(firstEl);
left=firstEl.offsetLeft;
}
var elInsert=[];
var elReplace=[];
for (var i=result.length; i--;) {
if (!result[i].tid) continue;
obj.putEntryData('TNG'+result[i].tid, result[i]);
var node=$('TNG'+result[i].tid);
if (!node) {
node=document.createElement('A');
node.id='TNG'+result[i].tid;
node.className='topics topics-new';
elInsert.push(node);
}else{
if (!options.added && obj.isContainsDiv(node)) {
if (node.className.match(/visited/))
node.className=node.className.replace(/visited/g, '');
elReplace.push(node);
}else{
node.className='topics topics-new';
Util.truncate(node);
elInsert.push(node);
}
}
if (options.added) {
node.added=true;
if (options.alreadyExists)
node.alreadyExists=true;
}
node.count=result[i].count?Number.parseInt(result[i].count):0;
}
if (obj.sort == 'update' || options.added) {
obj.truncateEmpty();
if (elInsert.length > 0) {
//raise block
for (var i=0; i < elInsert.length; i++) {
//prepend node
Util.prepend(obj.div.firstChild, elInsert[i]);
}
}
obj.realign();
}
if (firstEl) {
if (Math.abs(firstEl.offsetLeft-left) > 10) {
var idx1=Math.round(Math.abs(firstEl.offsetLeft)/firstEl.offsetWidth);
var idx2=Math.round(Math.abs(left)/firstEl.offsetWidth);
var limit;
if (firstEl.offsetLeft > left)
limit=obj.numberOfColumn-idx1+idx2;
else
limit=idx2-idx1;
for (var i=0; i < limit; i++)
Util.prepend(obj.div.firstChild, obj.empty[i]);
obj.realign();
}
obj.container.scrollTop=obj.entryTop(firstEl)+top;
obj.firstEl=firstEl;
}
if (elReplace.length > 0 && elInsert.length > 0 && obj.sort == 'update')
obj.container.className='updating';
if (elInsert.length > 0 && obj.sort == 'update') {
obj.container.status='updating';
setTimeout('Monitor.Topic.container.status=""; Monitor.Topic.updateTreadmill();', 3000);
}
var overflow=false;
if (forceScroll && (obj.sort == 'update' || options.added)) {
if (!options.added) {
for (var i=elInsert.length; i--;) {
if (!obj.isContainsDiv(elInsert[i])) {
elInsert.splice(i, 1);
overflow=true;
}
}
if (overflow) {
Monitor.runEventFunc('overflow');
}
}
if (elInsert.length > 0)
obj.insertEntry(elInsert, {now:elReplace.length <= 0, noScroll:options.noScroll});
else if (elReplace.length <= 0 && elInsert.length <= 0 && !options.noScroll)
obj.doScroll({offset:0, speed:2, fps:15});
}
obj.replaceEntry(elReplace, forceScroll && overflow && !options.noScroll && obj.sort == 'update');
setTimeout('Monitor.Topic.draw();', 0);
obj.showByQuestionToolTip();
Monitor.runEventFunc('update');
},
_entryCancel: function(el) {
Util.truncate(el);
},
_insertEntries: [],
insertEntry: function(el, option) {
clearTimeout(timer['insertEntryDo']);
if (!option) option={};
option.force=true;
for (var i=0; i < el.length; i++) {
if (!el[i]) continue;
if (!el[i].parentNode || !el[i].id) {
this._entryCancel(el[i]);
continue;
}
if (el[i].firstChild)
Util.truncate(el[i]);
var data=this.getEntryData(el[i].id);
if (!data) {
this._entryCancel(el[i]);
continue;
}
var node=this.__draw(data, el[i], option);
if (!node) {
this._entryCancel(el[i]);
continue;
}
if (el[i].childNodes[1].className.match(/topics-icon-/))
el[i].childNodes[1].style.display='none';
node.lastChild.style.marginTop='-176px';
var idx=this._insertEntries.search(node);
if (idx > -1) this._insertEntries.splice(idx, 1);
this._insertEntries.push(node);
}
Monitor.Topic.showByQuestionToolTip();
timer['insertEntryDo']=setTimeout('Monitor.Topic.insertEntryDo('+(option.noScroll?false:true)+');', option.now?100:1500);
},
insertEntryDo: function(scroll) {
var effects=[];
var el=this._insertEntries;
for (var i=0; i < el.length; i++) {
if (!el[i].lastChild)
continue;
effects.push(new Effect.Morph(el[i].lastChild, {
style: 'margin-top: 0px;',
sync:true
}));
}
this._insertEntries.splice(0, this._insertEntries.length);
this.hideUpdateBar();
if (effects.length > 0) {
if (scroll)
this.doScroll({offset:0, speed:2, fps:15});
new Effect.Parallel(effects, {
duration:0.6,
fps:10,
afterFinish: function(effect) {
for (var i=effect.effects.length; i--;) {
if (effect.effects[i].element.previousSibling && effect.effects[i].element.previousSibling.className && effect.effects[i].element.previousSibling.className.match(/topics-icon-/))
effect.effects[i].element.previousSibling.style.display='';
}
}
});
}else if (scroll)
this.doScroll({offset:0, speed:2, fps:15});
Monitor.Topic.showByQuestionToolTip();
},
_replaceSkel: null,
replaceEntry: function(el, scroll) {
if (!this._replaceSkel) {
this._replaceSkel=document.createElement('SPAN');
this._replaceSkel.className='topics-wrapper-middle-update';
this._replaceSkel.innerHTML='<span class="bolder"></span> update<span></span>';
this._replaceSkel.style.marginTop='-30px';
}
var effects=[];
for (var i=0; i < el.length; i++) {
if (!el[i]) continue;
if (!el[i].parentNode || !el[i].firstChild || !el[i].id) {
this._entryCancel(el[i]);
continue;
}
var data=this.getEntryData(el[i].id);
if (!data) {
this._entryCancel(el[i]);
continue;
}
this.setLink(el[i], data);
var middle=this._replaceSkel.cloneNode(true);
if (el[i].count) {
var count=el[i].count-Number.parseInt(el[i].curCount?el[i].curCount:0);
middle.firstChild.innerHTML=count > 0?count:el[i].count;
el[i].curCount=el[i].count;
if (middle.firstChild.innerHTML > 1)
middle.lastChild.innerHTML='s';
}else{
middle.firstChild.innerHTML='1';
el[i].curCount=el[i].count=0;
}
Util.prepend(el[i].lastChild, middle);
if (middle.nextSibling && middle.nextSibling.className == 'topics-wrapper-middle-update')
middle.parentNode.removeChild(middle.nextSibling);
effects.push(new Effect.Morph(middle, {
style: 'margin-top: 0px;',
sync:true
}));
}
var s=scroll;
if (effects.length > 0) {
new Effect.Parallel(effects, {
duration:0.6,
fps:10,
afterFinish:function(effect) {
clearTimeout(timer['insertEntryDo']);
timer['insertEntryDo']=setTimeout('Monitor.Topic.insertEntryDo('+(s?'true':'false')+');', 1000);
var effects=[];
var entry;
for (var i=0; i < effect.effects.length; i++) {
if (!effect.effects[i].element.parentNode || !effect.effects[i].element.parentNode.parentNode)
continue;
entry=effect.effects[i].element.parentNode.parentNode;
if (!entry) continue;
var data=Monitor.Topic.getEntryData(entry.id);
if (!Monitor.Topic.isContainsDiv(entry) || !data) {
Monitor.Topic._entryCancel(entry);
continue;
}
var imgUrl=null;
var imgSpan=effect.effects[i].element.parentNode.lastChild.lastChild.firstChild;
if (imgSpan && imgSpan.firstChild)
imgUrl=imgSpan.firstChild.src;
var el=Monitor.Topic.makeNode(data, imgUrl);
el.firstChild.style.marginTop='-174px';
el.firstChild.className+=' topics-wrapper-new';
effects.push(new Effect.Morph(el.firstChild, {
style: 'margin-top: 0px;',
sync:true
}));
Util.prepend(entry.lastChild, el.firstChild);
}
if (effects.length > 0) {
new Effect.Parallel(effects, {
duration:0.9,
delay:0.7,
fps:Monitor.browser.isVisible()?5:10,
queue:{position:'end', scope:'autoRefreshResponse'},
afterSetup: function() {
Monitor.Topic.hideUpdateBar();
clearTimeout(timer['insertEntryDo']);
timer['insertEntryDo']=setTimeout('Monitor.Topic.insertEntryDo('+(s?'true':'false')+');', 0);
},
afterFinish: function(effect) {
for (var i=0; i < effect.effects.length; i++) {
effect.effects[i].element.style.cssText='';
if (effect.effects[i].element.parentNode) {
while (effect.effects[i].element.nextSibling)
effect.effects[i].element.parentNode.removeChild(effect.effects[i].element.nextSibling);
effect.effects[i].element.className='topics-wrapper';
if (effect.effects[i].element.parentNode.parentNode) {
effect.effects[i].element.parentNode.parentNode.className=effect.effects[i].element.parentNode.parentNode.className.replace(/topics-new/g, '')+' topics-new';
Monitor.Topic.showImage(effect.effects[i].element);
}
}
}
Monitor.Topic.draw();
}
});
}else{
Monitor.Topic.draw();
if (Monitor.Topic.container.className) Monitor.Topic.container.className='';
}
}
});
}
},
showImage: function(el) {
if (!el) return;
var img=el.getElementsByTagName('IMG');
if (!img || !img[0]) return;
if (img[0].altimg0) {
img[0].src=img[0].altimg0;
img[0].altimg0=null;
}
},
doScroll: function(options) {
effectsCancel('doScroll');
if (!options) options={};
var f=options.afterFinish;
options.afterFinish=function() {
Monitor.Topic.scrollEventStop=false;
Monitor.Topic.draw();
if (Monitor.Topic.container.className) Monitor.Topic.container.className='';
if (f) f();
Monitor.Topic.updateTreadmill();
Monitor.Topic.setFirstEl();
};
if (!options.where) options.where=0;
if (!options.speed) options.speed=1.2;
if (!options.fps) options.fps=15;
Monitor.Topic.scrollEventStop=true;
effects['doScroll']=Effect.ScrollElement(Monitor.Topic.container, options);
},
isContainsDiv: function(el, t, b) {
var top=this.entryTop(el);
if (!t) t=0;
if (!b) b=0;
return !(top >= this.container.scrollTop+this.container.clientHeight+b || top+this.dim.h <= this.container.scrollTop-t);
},
getNowEntry: function() {
var idx=Math.floor((this.container.scrollTop)/this.dim.h)*this.numberOfColumn;
var div;
for (var p=0; p < this.div.childNodes.length; p++) {
if (this.div.childNodes[p].childNodes.length > idx) {
div=this.div.childNodes[p].childNodes[idx];
break;
}else
idx-=this.div.childNodes[p].childNodes.length;
}
if (!div) return null;
while (div && div.className == 'topics topics-empty')
div=div.nextSibling;
return div;
},
truncateEmpty: function() {
for (var i=0; i < this.empty.length; i++) {
if (this.empty[i].parentNode)
this.empty[i].parentNode.removeChild(this.empty[i]);
}
},
imgResize: function(img, h) {
if (img.offsetWidth < 56 && img.offsetHeight < 20)
return this.imgLoadError(img);
var maxh, minw, minh;
if (h > 93) {
maxh=Math.min(h, 112);
minw=56; minh=60;
}else if (h > 74) {
maxh=93;
minw=62; minh=60;
}else if (h > 54) {
maxh=74;
minw=74; minh=60;
}else{
maxh=54;
minw=81; minh=54;
}
img.title='Original size: '+img.offsetWidth+'px * '+img.offsetHeight+'px';
//if (img.offsetWidth<minw && img.offsetHeight<minh)
if (img.offsetWidth<minw)
return this.imgLoadError(img);
var comp=120*img.offsetHeight - maxh*img.offsetWidth;
try{
if (comp == 0) {
img.style.width=img.parentNode.style.width='120px';
img.parentNode.style.height=img.offsetHeight+'px';
}else if (comp > 0) {	// h>w
if (minw*img.offsetHeight>minh*img.offsetWidth) {
if (h <= 74)
return this.imgLoadError(img);
img.style.width=img.parentNode.style.width=minw+'px';
img.parentNode.style.height=maxh+'px';
}else {
img.style.height=img.parentNode.style.height=Math.min(maxh, img.offsetHeight)+'px';
img.parentNode.style.width=img.offsetWidth+'px';
}
}else {		// w>h
if ((img.offsetHeight*5 < img.offsetWidth) || (((img.offsetHeight*2 < img.offsetWidth && h>54) || (img.offsetHeight*120 < img.offsetWidth*54 && h<=54)) && img.offsetWidth<100)) 
return this.imgLoadError(img);
img.style.width=img.parentNode.style.width=Math.max(minw, Math.min(120, img.offsetWidth))+'px';
img.parentNode.style.height=img.offsetHeight+'px';
}
return true;
}catch(e){
return this.imgLoadError(img);
}
},
_images:[],
imgLoad: function(img) {
clearTimeout(timer['imgLoad']);
this._images.push(img);
timer['imgLoad']=setTimeout('Monitor.Topic._imgLoad();', 20);
},
_imgLoad: function() {
clearTimeout(timer['imgLoad']);
var img=this._images.shift();
if (!img) return;
img.loaded=true;
var image=img.parentNode;
if (image && image.className == 'topics-image') {
if (image && image.parentNode) {
if (Monitor.Topic.imgResize(img, image.parentNode.offsetHeight)) {
image.firstChild.style.visibility='inherit';
//image.style.marginLeft='7px';
}
}
}
timer['imgLoad']=setTimeout('Monitor.Topic._imgLoad();', 20);
},
imgLoadError: function(img) {
if (!img.parentNode || !img.parentNode.parentNode || img._error > 3) return false;
if (!img._error) img._error=0;
img._error++;
img.loaded=false;
var src;
if (img.altimg1) {
src=img.altimg1;
img.altimg1=null;
}else if (img.altimg2) {
src=img.altimg2;
img.altimg2=null;
}
if (src && img.src != src && src.match(/^http/)) {
img.src=src;
return true;
}else{
if (img.parentNode) {
if (img.parentNode.parentNode) {
img.parentNode.parentNode.removeChild(img.parentNode);
}else{
img.parentNode.removeChild(img);
}
}
return false;
}
},
treadmillUnlock: false,
treadmill: null,
initTreadmill: function() {
var obj=Monitor.Topic;
if (!obj.treadmill) obj.treadmill=$('treadmill');
if (obj.treadmillUnlock)
obj.containerHeightChanged();
else
obj.treadmill.className='treadmill-lock';
},
updateTreadmill: function() {
var obj=Monitor.Topic;
if (!obj.container || obj.container.status == 'updating' || !obj.treadmill) return;
if (!obj.treadmillUnlock || obj.sort != 'update') {
if (obj.treadmill.className != 'treadmill-lock')
obj.treadmill.className='treadmill-lock';
return;
}
if (obj.container.scrollTop < 25 && !obj.autoRefreshPaused && !Monitor.Preview.isVisible() && !Monitor.browser.isVisible()) {
if (obj.treadmill.className != 'treadmill-on')
obj.treadmill.className='treadmill-on';
}else{
if (obj.treadmill.className != 'treadmill-off')
obj.treadmill.className='treadmill-off';
}
},
byQuestionToolTip: null,
showByQuestionToolTip: function() {
if (!Monitor.Question.lastAddedTid) {
this.hideByQuestionToolTip();
return;
}
var el=$('TNG'+Monitor.Question.lastAddedTid);
if (!el) {
this.hideByQuestionToolTip();
return;
}
if (!this.byQuestionToolTip)
this.byQuestionToolTip=$('by-question-tooltip');
var title='';
try{
title=Util.innerText(el.lastChild.lastChild.firstChild.firstChild);
}catch(e){}
if (!title) return;
this.byQuestionToolTip.innerHTML='Thank you for answering!<br />Here\'s <span>&ldquo;'+title.wcut(25, '..')+'&rdquo;.</span><br />Check it out. Hope you like it :)';
this.byQuestionToolTip.style.display='block';
this.byQuestionToolTip.style.top=this.entryTop(el)+el.offsetHeight-19+'px';
this.byQuestionToolTip.style.left=el.offsetLeft+3+'px';
},
hideByQuestionToolTip: function() {
if (!this.byQuestionToolTip) return;
this.byQuestionToolTip.style.display='none';
Monitor.Question.lastAddedTid='';
},
add: function(showTip) {
var button=$('button-add');
button.className='active';
if (this._addShowTip) {
showTip=true;
this._addShowTip=null;
}
var div=$('add-dialog');
if (!div) {
var container=$('add-dialog-container');
div=Util.append(container, 'DIV', '<div class="bg"></div><div class="content"> <a class="close" href="javascript:Monitor.Topic.addHide();">Close</a> <div class="wrap"> <h3>Add a topic to your Monitor.</h3> <div class="description">Type in your own interest to watch its live update.</div> <div id="add-dialog-error"></div> <form id="add-dialog-form" onsubmit="Monitor.Topic.addSubmit(this); return false;"> <dl> <dd> <span><input class="text" type="text" name="topic1" title="Type in a topic" value="Type in a topic" onfocus="if (this.value == this.title) this.value=\'\';this.style.color=\'\';" onblur="if (!this.value) this.value=this.title;this.style.color=\'#999\';" onKeyUp="Monitor.Topic.setSaveButton(this);" /></span> <div class="example"> (Example: Celebrities, NFL, Coffee, Beer, Coupons, Recipes, Contest, Jazz, HouseMusic, Breakingnews) </div> </dd> </dl> <div class="add-dialog-buttons"> <input id="add-dialog-button" type="submit" value="Save" class="active" /> <span id="preview-wrapper">or <a href="javascript:Monitor.Topic.preview();">Preview</a></span> </div> </form> <div class="clear"></div> </div> <div class="wrap-tip"> <a class="tip" href="javascript:Monitor.Topic.addShowTip();">Tip <span class="open">▼</span><span class="close">▲</span></a> <div id="add-dialog-tip"> <img src="/common/img/monitor/entry_ani01_s2'+(Browser.isSafari?'_sfr':'')+'.gif" /> When you add a topic, it will look like the left image. As you can see, the topic turns yellow and updates itself whenever there’s new incoming content. You’ll see a lot of this, since over <strong>1.5 million sites</strong> are constantly pumping content to Lazyfeed in <strong>real-time.</strong> </div><div class="clear"></div> </div> </div>');
div.id='add-dialog';
container.insertBefore(div, container.firstChild);
}
$('add-dialog-error').innerHTML='';
div.className=(showTip)?'show-tip':'';
div.style.display='block';
Monitor.runEventFunc('addShow');
var form=$('add-dialog-form');
form['topic1'].value='';
this.setSaveButton(form['topic1']);
form['topic1'].focus();
},
_addShowTip: false,
addShowTip: function(force) {
var div=$('add-dialog');
if (div)
div.className=(div.className == 'show-tip' && !force)?'':'show-tip';
},
addHideByClick: function(el) {
var container=$('add-dialog-container');
if (!el || !container) return;
if (!Util.contains(container, el) && (!Dialog.container || !Util.contains(Dialog.container, el))) {
Monitor.Topic.addHide();
}
},
setSaveButton: function(textArea) {
if (textArea.value.trim()) {
$('preview-wrapper').style.display='block';
$('add-dialog-button').className='active';
}else{
$('preview-wrapper').style.display='none';
//$('add-dialog-button').className='';
$('add-dialog-button').className='active';
}
},
addSubmit: function(form, scheme, callback) {
if (form.submited) return;
effectsCancel('addError');
var val=form['topic1'].value.replace(/\s+/g, '').replace(/^"(.+)"$/, '$1').replace(/^'(.+)'$/, '$1');
if (!val || form['topic1'].value == form['topic1'].title) {
form['topic1'].focus();
form['topic1'].select();
form['topic1'].style.backgroundColor='';
effects['addError']=new Effect.Highlight(form['topic1'], {duration:0.5, fps:10, afterFinish: function(effect) {effect.element.style.backgroundColor='';}});
return;
}
form['topic1'].value=val;
var url=(scheme?scheme:'')+form['topic1'].value;
form['topic1'].value=url;
if (LFBrowser.isNotTag(url)) {
var a=form, b=callback;
LFBrowser.confirmType(url, function(scheme) {Monitor.Topic.addSubmit(a, scheme, b);});
return;
}
form.submited=true;
Topic.saveTags([url], this.addSubmitResponse, callback, 'user_added=t');
},
addSubmitResponse: function(result, callback) {
var form=$('add-dialog-form');
form.submited=false;
var obj=Monitor.Topic;
obj.addFinish(result, true, result.exists);
if (!result || !result.topics) {
if (result && !result.overflow)
$('add-dialog-error').innerHTML='<span>There is no result for the topic you have entered.</span>';
form['topic1'].focus();
form['topic1'].select();
if (callback) callback(result);
return;
}
obj.addHide();
effectsCancel('addMsg');
if (callback) callback(result);
},
addHide: function() {
var div=$('add-dialog');
if (!div || this.addPreviewing) return;
if (div.style.display != 'none') {
div.style.display='none';
Monitor.runEventFunc('addHide');
}
$('button-add').className='';
},
addPreviewing: false,
preview: function() {
var form=$('add-dialog-form');
if (!form || !form['topic1']) return;
var val=form['topic1'].value.replace(/\s+/g, '').replace(/^tag:/i, '').replace(/^"(.+)"$/, '$1').replace(/^'(.+)'$/, '$1');
var url=val.match(/^\s*https?:\/\//i)?val:'tag:'+val;
Monitor.browse('/browse/'+Util.escapeURL(url));
this.addPreviewing=true;
$('add-dialog-error').innerHTML='';
Monitor.Topic.updateTreadmill();
},
addFinish: function(result, scrollEnforce, exists) {
var obj=Monitor.Topic;
if (result && !result.error) {
obj._autoRefreshResponse(result.topics, {scroll:scrollEnforce, added:true, alreadyExists:exists});
obj.total=result.total;
}
Discover.topicChanged();
Monitor.runEventFunc('addFinish', result);
},
del: function(link) {
link=Util.findParent(link, {tagName:'A'});
var tid=this.entryTid(link.id);
if (Topic.isReadonly(tid)) {
Topic.readonlyError();
return;
}
var type=link.className.match(/topics-(link|photo|tag|video)/);
if (type && type[1]) type=type[1];
else type=null;
var titleEl='';
try{
titleEl=link.lastChild.firstChild.firstChild.firstChild;
}catch(e){}
var _isFirstNode=false;
var ps=link.previousSibling;
if ((ps && ps.className.match(/topics-empty/)) || (!ps && !link.parentNode.previousSibling))
_isFirstNode=true;
Topic.hideToggleDo(tid, type, titleEl?Util.innerText(titleEl).wcut(35, '..'):'', function(result) {Monitor.Topic.delFinish(result, _isFirstNode);});
},
delFinish: function(result, isFirstNode) {
var obj=Monitor.Topic;
if (!result || result.error) {
return;
}
if (result)
obj.total=result.total;
obj.showByQuestionToolTip();
if (isFirstNode) {
var attached=[];
var detached=[];
for (var i=0; i < obj.empty.length; i++) {
if (obj.empty[i].parentNode) attached.push(i);
else detached.push(i);
}
if (attached.length == obj.numberOfColumn-1) {
for (var i=0; i < attached.length; i++)
obj.empty[attached[i]].parentNode.removeChild(obj.empty[attached[i]]);
}else if (detached.length>0){
Util.prepend(obj.div.firstChild, obj.empty[detached[0]]);
}
}
obj.draw();
},
savedStuffDiv: {div:null, curtain:null},
savedStuff: function() {
var button=$('button-saved-stuff');
button.className='active';
if (!this.savedStuffDiv.div) {
this.savedStuffDiv.div=Dialog.makeContainer();
var html='<h2>Playlist <span id="stuff-count2"></span></h2><select id="savedstuff-filter" name="range" onchange="Monitor.Topic.savedStuffFilter(this.value);"><option value="">All</option>';
for (var i=65; i < 90; i+=2)
html+=('<option value="'+String.fromCharCode(i)+','+String.fromCharCode(i+1)+'">'+String.fromCharCode(i)+' ~ '+String.fromCharCode(i+1)+'</option>');
html+='<option value="_">etc.</option></select><div class="description">All your added topics sorted in alphabetical order.<br />Use this page to search and scan topics quickly.</div><div id="topics-saved" class="topics-list"></div><a class="done" href="javascript:Monitor.Topic.savedStuffHide();">Done</a>';
Util.append(this.savedStuffDiv.div.firstChild.rows[1].cells[1], 'DIV', html, 'dialog-modal').id='savedstuff-dialog';
this.savedStuffDiv.div.style.zIndex=9000;
Event.observe($('topics-saved'), 'click', this.onClick);
}
if (!this.savedStuffDiv.div.curtain) {
this.savedStuffDiv.div.curtain=Util.append(document.body, 'DIV', null, 'LFdialog-curtain');
this.savedStuffDiv.div.curtain.style.zIndex=8999;
}
Discover.topicChanged();
$('topics-saved').style.height=document.documentElement.offsetHeight-200+'px';
this.savedStuffDiv.div.style.display=this.savedStuffDiv.div.curtain.style.display='block';
Dialog.setCenter(this.savedStuffDiv.div);
$('savedstuff-filter').selectedIndex=0;
Topic.Saved.range='';
Topic.Saved.noDescription=true;
Topic.Saved.view();
},
savedStuffFilter: function(val) {
Topic.Saved.range=val;
Topic.Saved.view();
},
savedStuffHide: function() {
$('button-saved-stuff').className='';
this.savedStuffDiv.div.style.display=this.savedStuffDiv.div.curtain.style.display='none';
},
imported: false,
importDo: function(ans) {
this.imported=(ans == 'yes');
ajax('/monitor/import/'+ans+'.json', null, Topic.saveResponse, [this.importResponse, null]);
},
importResponse: function(result) {
Dialog.hide();
if (!result || result.error) return;
var div=$('import-dialog');
if (div) div.parentNode.removeChild(div);
result.fromImport=true;
Monitor.Topic.addFinish(result, true);
}
};
Monitor.Question={
tid: null,
enable: true,
data: null,
lastAddedTid: null,
div: {container:null, wrap:null, question:null, form:null, field:null, error:null},
reset: function() {
this.tid=null;
},
isFocus: false,
isOver: false,
show: function(html) {
var obj=Monitor.Question;
if (!obj.enable) return;
if (html)
obj._show(html);
else{
if (!obj.enable) return;
if (obj.data)
obj._show();
else if (obj.tid) {
ajax('/question/get/'+obj.tid+'.json', null, obj.response);
obj.tid=null;
}
}
},
makeContainer: function() {
if (this.div.container) return;
this.div.container=Util.append(document.body, 'DIV', '<div class="bg"></div><div class="wrap"><div class="image"><img src="/common/img/monitor/mrlazy.gif" /></div><div class="content-html"></div><div class="content"><div class="description-wrap"><h3 id="question-alert-text"></h3></div><div id="question-alert-error"></div><form action="/topic/save" method="post" onsubmit="Monitor.Question.submit(this); return false;"><input type="hidden" name="no_question" /><input class="text" type="text" name="topic1" title="Type in your answer" /><input class="submit" type="submit" value="Answer" /> or <a href="javascript:Monitor.Question.later();">later</a></form></div></div>');
this.div.container.id='question-alert';
this.div.container.style.top='-200px';
this.div.wrap=this.div.container.lastChild;
this.div.html=this.div.wrap.childNodes[1];
this.div.questions=this.div.wrap.childNodes[2];
this.div.question=$('question-alert-text');
this.div.form=this.div.container.getElementsByTagName('FORM')[0];
this.div.field=this.div.form['topic1'];
this.div.error=$('question-alert-error');
//Event.observe(this.div.container, 'mouseover', this.onOver.bind(this));
//Event.observe(this.div.container, 'mouseout', this.onOut.bind(this));
return this.div.container;
},
_show: function(html) {
this.tid=null;
if (!this.data && !html) return;
if (!this.div.container)
this.div.container=this.makeContainer();
if (html) {
this.div.html.innerHTML=html;
this.div.html.style.display='block';
this.div.questions.style.display='none';
}else if (this.data) {
if (this.data.type && this.data.answer && this.data.answerText) {
this.div.html.innerHTML=this.data.text+'<div class="yesno"><a href="javascript:Monitor.Question.yes('+this.data.answer+');"><img class="yes" src="/common/img/monitor/question_yes.gif" /></a> <a href="javascript:Monitor.Question.no('+this.data.answer+');"><img class="no" src="/common/img/monitor/question_no.gif" /></a></div>';
this.div.html.style.display='block';
this.div.questions.style.display='none';
}else{
this.div.question.innerHTML=this.data.text;
this.div.html.style.display='none';
this.div.questions.style.display='block';
}
this.div.form['no_question'].value=this.data.no;
this.data=null;
}
this.div.error.innerHTML='';
this.div.form.submited=false;
this.div.field.value='';
this.visible();
},
submit: function(form) {
if (form.submited) return;
effectsCancel('addError');
this.div.error.innerHTML='';
form['topic1'].value=form['topic1'].value.replace(/"+/g, '');
if (!form['topic1'].value.trim() || form['topic1'].value == form['topic1'].title) {
form['topic1'].focus();
form['topic1'].select();
form['topic1'].style.backgroundColor='';
effects['addError']=new Effect.Highlight(form['topic1'], {duration:0.5, fps:10, afterFinish: function(effect) {effect.element.style.backgroundColor='';}});
this.visible();
return;
}
form['topic1'].value=form['topic1'].value.replace(/\s+/g, '');
form.submited=true;
Topic.saveTags([form['topic1'].value], this.addSubmitResponse, null, 'question_no='+(form['no_question'].value?form['no_question'].value:''));
},
addSubmitResponse: function(result) {
var obj=Monitor.Question;
var form=obj.div.form;
form.submited=false;
try{
obj.lastAddedTid=result.topics[0].tid;
}catch(e){}
Monitor.Topic.addFinish(result, true);
if (!result || !result.topics) {
if (result && !result.overflow)
$('question-alert-error').innerHTML='<span>Sorry, I couldn’t find that topic. Please try something else :)</span>';
try{
form['topic1'].focus();
form['topic1'].select();
}catch(e){}
obj.visible();
return;
}
obj.later();
},
isVisible: function() {
if (this.div.container && this.div.container.offsetTop > -190)
return true;
return false;
},
visible: function(delay) {
this.div.wrap.style.paddingTop='';
var h=this.div.wrap.offsetHeight;
this.div.wrap.style.paddingTop=185-h+'px';
var option={
style:'top: -0'+(180-h)+'px;',
duration:0.8,
fps:15,
transition:Effect.Transitions.spring,
afterFinish: function() {
if (!Monitor.browser.isVisible() && !Dialog.curtainIsVisible()) {
try{
if (Monitor.Question.div.field.offsetWidth > 0)
Monitor.Question.div.field.focus();
}catch(e){}
}
}
};
if (delay)
option.delay=delay;
effectsCancel('question');
effects['question']=new Effect.Morph(this.div.container, option);
},
later: function() {
if (Number.parseInt(this.div.form['no_question'].value)) {
ajax('/question/check/'+(this.div.form['no_question'].value)+'.json');
this.div.form['no_question'].value=null;
}
this.hide();
},
yes: function(tid) {
Topic.save(tid, this.addSubmitResponse, null, 'question_no='+this.div.form['no_question'].value);
this.later();
},
no: function(tid) {
this.later();
},
hide: function(afterFinish) {
if (!this.div.container) return;
var option={
style:'top: -200px;',
duration:0.5,
fps:15
};
if (afterFinish) option.afterFinish=afterFinish;
effectsCancel('question');
effects['question']=new Effect.Morph(this.div.container, option);
},
browsed: function(url, tid) {
if (!this.enable) return;
if (!this.tid && url && tid && url.match(/^tag:/)) {
this.tid=tid;
}
this.hide();
},
response: function(result) {
if (!result || result.error) return;
Monitor.Question.data=result;
Monitor.Question.show();
}
};
Discover.Cache={
init: function() {
setInterval('Discover.Cache.truncate();', 20000);
},
data: [],
truncate: function() {
while (this.data.length > 40) {
var minTime=new Date().getTime();
var minIdx=-1;
for (var i=0; i < this.data.length; i++) {
if (this.data[i][4] < minTime) {
minTime=this.data[i][4];
minIdx=i;
}
}
if (minIdx < 0)
return;
this.data.splice(minIdx, 1);
}
},
push: function(url, scroll, html, offset) {
for (var i=0; i < this.data.length; i++) {
if (this.data[i][0] == url) {
this.data[i][1]=scroll;
this.data[i][2]=html;
this.data[i][3]=offset;
this.data[i][4]=new Date().getTime();
return;
}
}
this.data.push([url, scroll, html, offset, new Date().getTime()]);
},
get: function(url) {
for (var i=0; i < this.data.length; i++) {
if (this.data[i][0] == url)
return this.data[i];
}
}
};
var Topic={
timeMin: 0,
timeMax: 0,
total: 0,
div: null,
paused: null,
hideTip: null,
hasDatas: false,
isLastPage: false,
scrolling: false,
mouseovered: false,
refreshing: false,
refreshQueue: [],
readonlyTID: [],
autoRefreshPaused: false,
lastSavedTime: (new Date()).getTime()-4000,
added: 0,
init: function() {
this.div=$('topics-list');
this.paused=$('content-paused');
Event.observe(this.div, 'click', this.onClick);
Event.observe(this.div, 'mouseover', this.onOver);
Event.observe(this.div, 'mouseout', this.onOut);
Event.observe(this.div, 'scroll', this.onScroll);
this.onScroll();
setInterval('Topic.autoRefreshPusher();', 1000);
this.initialFetch();
this.autoRefresh();
//Topic.Inbox.init();
},
onClick: function(e) {
var node=Event.findElement(e, 'a');
if (!node) return;
try{
node.blur();
}catch(e){}
},
onOver: function(e) {
var obj=Topic;
if (obj.hasDatas) {
clearTimeout(timer.paused);
obj.paused.style.display='block';
if (obj.paused.className != 'paused') {
obj.paused.className='paused';
obj.paused.innerHTML='Paused';
}
}
obj.mouseovered=true;
var el=Event.element(e);
if (!el || !el.parentNode) return;
el=el.parentNode;
if (!el.className || el.className != 'topics-toggle') return;
if (!obj.hideTip) {
obj.hideTip=Util.append(document.body, 'DIV', '<div>Delete this</div><img src="/common/img/discover/hide_tooltip_tail.gif" />', 'hide-tooltip');
obj.div.parentNode.insertBefore(obj.hideTip, obj.div);
}
obj.hideTip.style.display='';
var pos=Position.cumulativeOffset(el);
obj.hideTip.style.top=pos[1]-25-obj.div.scrollTop+'px';
obj.hideTip.style.left=pos[0]-obj.hideTip.offsetWidth+23+'px';
},
onOut: function() {
var obj=Topic;
obj.hidePaused();
obj.mouseovered=false;
obj.hideHideTip();
setTimeout('Topic.autoRefreshPusher();', 50);
},
hidePaused: function() {
clearTimeout(timer.paused);
this.paused.style.display='none';
},
hideHideTip: function() {
if (!this.hideTip || this.hideTip.style.display == 'none') return;
this.hideTip.style.display='none';
},
onScroll: function() {
var obj=Topic;
if (obj.scrolling || obj.isLastPage) return;
if (obj.div.scrollTop+obj.div.clientHeight < obj.div.scrollHeight-300) return;
obj.fetch();
},
refresh: function() {
this.timeMin=this.timeMax=(new Date()).getTime();
this.isLastPage=false;
Util.truncate(this.div);
this.fetch();
},
initialFetch: function() {
var obj=Topic;
if (obj.div.clientHeight >= obj.div.scrollHeight)
Topic.fetch(Topic.initialFetch);
},
fetch: function(callback) {
if (this.scrolling || this.isLastPage) return;
this.scrolling=true;
ajax('/topic/fetch.json', 'timeMin='+(this.timeMin-1), this.fetchResponse, callback);
},
fetchResponse: function(result, callback) {
var obj=Topic;
obj.scrolling=false;
if (!result || result.error) {
obj.isLastPage=true;
if (callback) callback();
return;
}
obj.showBlankMsg();
obj.removeToDelete();
for (var i=0; i < result.length; i++) {
var node=obj.makeNode(result[i]);
obj.div.appendChild(node);
obj.timeMin=Math.min(obj.timeMin, result[i].time_update);
}
if (result.length > 0)
obj.hasDatas=true;
if (callback) callback();
},
pauseAutoRefresh: function() {
this.autoRefreshPaused=true;
},
resumeAutoRefresh: function() {
this.autoRefreshPaused=false;
},
autoRefresh: function(now) {
clearTimeout(timer.autoRefresh);
timer.autoRefresh=setInterval('Topic.autoRefreshDo()', 10000);
if (now)
this.autoRefreshDo();
},
autoRefreshDo: function() {
if (this.mouseovered || this.autoRefreshPaused || !this.hasDatas || this.refreshing) return;
this.refreshing=true;
ajax('/topic/new.json', 'timeMax='+this.timeMax, this.autoRefreshResponse);
},
autoRefreshResponse: function(result) {
var obj=Topic;
obj.refreshing=false;
if (!result || result.error) return;
if (result.length > 0 && result[0] && result[0].time_update)
obj.timeMax=result[0].time_update;
clearTimeout(timer.paused);
obj.paused.className='';
obj.paused.innerHTML='Incoming: <span class="bold">'+result.length+'</span> update'+(result.length > 1?'s':'');
obj.paused.style.display='block';
timer.paused=setTimeout('Topic.hidePaused();', 3000);
for (var i=result.length; i--;)
obj.refreshQueue.push(result[i]);
},
autoRefreshPusher: function() {
if (this.mouseovered || this.refreshQueue.length <= 0) return;
var div=document.createElement('DIV');
for (var i=0; i < this.refreshQueue.length; i++)
this.insertBefore(this.refreshQueue[i], true, div);
if (this.div.firstChild)
this.div.insertBefore(div, this.div.firstChild);
else
this.div.appendChild(div);
new Effect.BlindDown(div);
new Effect.Highlight(div, {startcolor:'#ffff99', endcolor:'#ffffff', duration:3, keepBackgroundImage:true, afterFinish: function(effect) {
effect.element.style.backgroundColor='';
}});
this.refreshQueue.splice(0, this.refreshQueue.length);
},
imgLoad: function(img) {
try{
if (!img.style || !img.parentNode || img.parentNode.offsetWidth <= 0) return false;
var st=img.style;
var pst=img.parentNode.style;
if (img.offsetHeight > img.offsetWidth*2) {
//vertical
if (img.offsetWidth < 60) return false;
st.width='60px';
pst.width='60px';
pst.height='120px';
pst.marginRight='7px';
pst.visibility='visible';
return true;
}
if (img.offsetWidth > img.offsetHeight*2) {
//hr
if (img.offsetWidth < 100 || img.offsetWidth > img.offsetHeight*5) return false;
st.width='100px';
pst.width='100px';
pst.height=img.offsetHeight+'px';
pst.marginRight='7px';
pst.visibility='visible';
return true;
}
if (img.offsetWidth < 75 || img.offsetHeight < 75) return false;
if (img.offsetWidth > img.offsetHeight) {
st.height='75px';
}else{
st.width='75px';
}
pst.width=img.offsetWidth+'px';
pst.height=img.offsetHeight+'px';
pst.marginRight='7px';
pst.visibility='visible';
return true;
}catch(e) {}
},
makeNode: function(data, options) {
if (!options) options={};
var node=document.createElement('A');
var html=options.prepend?options.prepend:'';
if (!options.noDelete)
html+='<span class="topics-toggle" onclick="Topic.hideToggle(event); return false;"><img src="/common/img/discover/topic_hide.gif" /></span>';
html+=' <span class="topics-entry"> ';
if (data.image)
html+='<div class="topics-image"><img class="topics-image" src="'+data.image+'" onload="Topic.imgLoad(this);" onerror="Util.imgError(this, true);" /></div>';
html+='<span class="topics-title">'+(data.text)+' '+(options.isNew?'':'')+'</span> ';
//if (data.time_update)
//	html+='<span class="topics-time">'+Date.printTime(data.time_update)+'</span>';
if (data.description) {
html+='<span class="topics-description">'+data.description+'</span>';
if (data.type != 'tag' && (data.time || data.ownerTitle)) {
html+='<span class="topics-info"><img src="/common/img/discover/icon_source_'+(data.service?data.service:'blog')+'.gif" />';
if (data.time) html+=' '+data.time;
if (data.time && data.ownerTitle) html+=' by ';
if (data.ownerTitle) html+=' '+data.ownerTitle;
html+='</span>';
}
}else
if (data.type != 'tag') html+='<span class="topics-url">'+(data.url.replace(/^\s*http:\/\/(www\.)?/i, '').wcut(40, '..'))+' </span> ';
node.innerHTML=html+' </span>';
node.className='topics topics-'+(data.type);
node.href='/browse/'+(Util.escapeURL(data.url))+(options.noUpdate || !data.time_update?'':'?n='+(data.time_update));
node.id='TNG'+data.tid;
node.target='stream-content';
return node;
},
insertBefore: function(data, noAnimate, div) {
var tid=data.tid;
var el=$('TNG'+tid);
if (el && el.parentNode && el.parentNode.className != 'topic-inbox-entry' && el.parentNode.id != 'topics-saved')
Effect.BlindUp(el, {afterFinish: function(effect) {effect.element.parentNode.removeChild(effect.element);}});
var node=this.makeNode(data, {isNew:true});
node.className+=' topics-new';
if (!div) div=this.div;
if (div.firstChild)
div.insertBefore(node, div.firstChild);
else
div.appendChild(node);
if (!noAnimate) {
new Effect.BlindDown(node);
new Effect.Highlight(node, {startcolor:'#ffff99', endcolor:'#ffffff', duration:3, keepBackgroundImage:true, afterFinish: function(effect) {
effect.element.style.backgroundColor='';
}});
}
this.removeToDelete();
},
removeToDelete: function() {
Util.removeElementsByID('to-delete');
},
hideToggle: function(e) {
this.hideHideTip();
var node=Event.findElement(e, 'a');
if (!node || node.alreadyHide) return false;
Event.stop(e);
var tid=node.id.replace(/^TNG/, '');
if (this.isReadonly(tid)) {
this.readonlyError();
return;
}
var type=node.className.match(/topics-(link|photo|tag|video)/);
if (type && type[1]) type=type[1];
else type=null;
var titleEl=Element.down(node, '.topics-title');
this.hideToggleDo(tid, type, titleEl?Util.innerText(titleEl).wcut(35, '..'):'');
},
isReadonly: function(tid) {
return (this.readonlyTID.search(tid) > -1);
},
readonlyError: function() {
if (Monitor.Public) Monitor.Public.showDeleteGeneralTopicDialog();
else alert('READONLY ERROR');
},
hideToggleDo: function(tid, type, title, callback) {
var div=$('topic-delete');
if (!div) {
div=Util.append(document.body, 'DIV', '<a class="layer-close" href="javascript:Dialog.hide();">Close</a> <h3>Are you sure you want to delete this?</h3> <div id="topic-delete-detail"></div> <div> <input type="hidden" id="topic-delete-tid" /> <a class="button-ok" id="topic-delete-ok" href="javascript:Topic.hideToggleSubmit();">OK</a> <a class="button-cancel" href="javascript:Dialog.hide();">Cancel</a> </div>', 'dialog-modal');
div.id='topic-delete';
}
var field=$('topic-delete-tid');
field.value=tid;
field.alreadyHide=false;
field.data=callback;
Dialog.show(div);
$('topic-delete-ok').focus();
if (title)
$('topic-delete-detail').innerHTML=(title.escapeHTML());
else
$('topic-delete-detail').innerHTML='';
},
hideToggleSubmit: function() {
var field=$('topic-delete-tid');
if (!field) return;
var tid=field.value;
if (!tid || field.alreadyHide) return;
field.alreadyHide=true;
ajax('/topic/delete/'+tid+'.json', null, this.hideToggleResponse, field.data);
},
hideToggleResponse: function(result, callback) {
Dialog.hide();
var obj=Topic;
if (!result || result.error) {
if (callback) callback(false);
return false;
}
if (result.hide) {
obj.total=result.total;
try{
if (window.Discover) {
Discover.topicChanged();
Event.stop(e);
}
}catch(e){}
obj.deleteNode('TNG'+result.tid, callback, result);
try{
Topic.showBlankMsg();
}catch(e){}
}else{
if (callback) callback(result);
}
try{
obj.onScroll();
Topic.Saved.onScroll();
}catch(e) {}
},
deleteNode: function(id, callback, result) {
var node=$(id);
if (!node || !node.parentNode || node.parentNode.className == 'topic-inbox-entry') {
if (callback) callback(result);
return false;
}
var _c=callback;
var _r=result;
new Effect.Fade(node, {duration:0.8, queue:'end', afterFinish: function(effect) {
var id=effect.element.id;
effect.element.parentNode.removeChild(effect.element);
if (!Topic.deleteNode(id, _c, _r)) {
try{
Discover.deleteFinish();
}catch(e){}
}
}});
return true;
/*
new Effect.SlideUp(node, {duration:0.3, queue:'end', afterFinish: function(effect) {
var id=effect.element.id;
effect.element.parentNode.removeChild(effect.element);
Topic.deleteNode(id);
}});
*/
},
savedCheck: function(tid, callback, callbackData) {
ajax('/topic/saved/check/'+tid+'.json', null, this.savedCheckResponse, [callback, callbackData]);
},
savedCheckResponse: function(result, callbackData) {
var obj=Topic;
if (!result || result.error) {
if (callbackData[0])
callbackData[0](false, callbackData[1]);
return;
}
if (callbackData[0])
callbackData[0](result.saved, callbackData[1]);
},
saveTags: function(tags, callback, callbackData, ext) {
if (!tags && tags.length <= 0) {
if (callbackData[0])
callbackData[0](false, callbackData[1]);
return;
}
var str=[];
for (var i=0; i < tags.length; i++)
str.push('topic'+(i+1)+'='+encodeURIComponent(tags[i]));
ajax('/topic/save.json', str.join('&')+(ext?'&'+ext:''), this.saveResponse, [callback, callbackData]);
},
saveTids: function(tids, callback, callbackData, ext) {
var q=[];
for (var i=0; i < tids.length; i++)
q.push('tid[]='+tids[i]);
ajax('/topic/save.json', (q.join('&'))+(ext?'&'+ext:''), this.saveResponse, [callback, callbackData]);
},
save: function(tid, callback, callbackData, ext) {
ajax('/topic/save.json', 'tid='+tid+(ext?'&'+ext:''), this.saveResponse, [callback, callbackData]);
},
saveResponse: function(result, callbackData) {
var obj=Topic;
if (!result || result.error) {
if (callbackData[0])
callbackData[0](result, callbackData[1]);
return;
}
obj.lastSavedTime=(new Date()).getTime();
obj.hasDatas=true;
obj.total=Number.parseInt(result.total);
if (callbackData[0])
callbackData[0](result, callbackData[1]);
if (result.topics && result.topics.length > 0) {
for (var i=0; i < result.topics.length; i++)
obj.refreshQueue.push(result.topics[i]);
}
try{
if (window.Discover) {
Discover.topicChanged();
Discover.Topic.saveFinish();
}
}catch(e){}
obj.added++;
},
saveCheck: function(tagStr, callback, callbackData) {
ajax('/topic/saveCheck.json', 'tag='+encodeURIComponent(tagStr), this.saveCheckResponse.bind(this), [callback, callbackData]);
},
saveCheckResponse: function(result, callbackData) {
if (callbackData[0])
callbackData[0](!(!result || result.error), callbackData[1]);
},
showBlankMsg: function() {
var el=Element.childElements(this.div);
if (el.length > 0) return;
var div=Util.append(this.div, 'DIV', 'This is a space for getting live updates<br /> on your interested topics.<br /><a href="javascript:Discover.showHelp(\'add-topics\');">How do I get live updates?</a>');
div.id='to-delete';
div.className='blank';
this.hasDatas=false;
}
};
Topic.Saved={
title: 'Saved stuff',
inited: false,
div: null,
range: '',
isLastPage: false,
scrolling: false,
noDescription: false,
offset: 0,
seq: (new Date()).getTime(),
view: function() {
if (!this.inited) this.initView();
this.div.scrollTop=0;
Util.truncate(this.div);
this.offset=0;
this.scrolling=this.isLastPage=false;
this.seq=(new Date()).getTime();
this.initialFetch();
},
initView: function() {
this.div=$('topics-saved');
this.inited=true;
Event.observe(this.div, 'scroll', this.onScroll);
},
initialFetch: function() {
var obj=Topic.Saved;
if (obj.div.clientHeight >= obj.div.scrollHeight)
Topic.Saved.fetch(Topic.Saved.initialFetch);
},
onScroll: function() {
var obj=Topic.Saved;
if (!obj.inited) return;
if (obj.scrolling || obj.isLastPage) return;
if (obj.div.scrollTop+obj.div.clientHeight < obj.div.scrollHeight-300) return;
obj.fetch();
},
fetch: function(callback) {
if (this.scrolling || this.isLastPage) return;
this.scrolling=true;
ajax('/topic/saved/offset/'+(this.offset)+'.json', 'range='+(this.range?this.range:''), this.fetchResponse, [callback, this.seq]);
},
fetchResponse: function(result, callbackData) {
var obj=Topic.Saved;
if (callbackData[1] != obj.seq) return;
obj.scrolling=false;
if (!result || result.error) {
obj.isLastPage=true;
if (callbackData[0]) callbackData[0]();
return;
}
if (!result.list || result.list.length <= 0) {
obj.isLastPage=true;
if (callbackData[0]) callbackData[0]();
return;
}
obj.offset=result.offset;
var list=result.list;
for (var i=0; i < list.length; i++) {
if (obj.noDescription)
list[i].description=null;
var node=Topic.makeNode(list[i]);
obj.div.appendChild(node);
}
if (callbackData[0]) callbackData[0]();
}
};
Topic.Inbox={
title: 'Topics from Lazy me',
inited: false,
div: null,
preview: null,
enable: true,
count: 0,
lastRead: 0,
lastCheck: 0,
isLastPage: false,
scrolling: false,
offset: 0,
seq: (new Date()).getTime(),
init: function() {
if (!this.enable) return;
setInterval('Topic.Inbox.check();', 60000);
this.changed();
},
view: function() {
if (!this.inited) this.initView();
this.div.scrollTop=0;
Util.truncate(this.div);
if (!this.header)
this.header=Util.append(this.div, 'DIV', '<a class="topic-connected-list" href="javascript:Topic.Connect.showListDialog();">Connected sites</a><a href="javascript:Topic.Connect.showTypeDialog();"><img src="/common/img/discover/btn_connect.gif" /></a>', 'inbox-header');
else
this.div.appendChild(this.header);
this.offset=0;
this.scrolling=this.isLastPage=false;
this.seq=(new Date()).getTime();
this.initialFetch();
},
initView: function() {
this.div=$('topics-inbox');
this.inited=true;
Event.observe(this.div, 'mouseover', this.onOver);
Event.observe(this.div, 'mouseout', this.onOut);
Event.observe(this.div, 'scroll', this.onScroll);
},
initialFetch: function() {
var obj=Topic.Inbox;
if (obj.div.clientHeight >= obj.div.scrollHeight)
Topic.Inbox.fetch(Topic.Inbox.initialFetch);
},
onScroll: function() {
var obj=Topic.Inbox;
if (!obj.inited) return;
if (obj.scrolling || obj.isLastPage) return;
if (obj.div.scrollTop+obj.div.clientHeight < obj.div.scrollHeight-300) return;
obj.fetch();
},
fetch: function(callback) {
if (this.scrolling || this.isLastPage) return;
this.scrolling=true;
ajax('/topic/inbox/offset/'+(this.offset)+'.json', 'l='+this.lastRead+'&t='+this.lastCheck, this.fetchResponse, callback);
},
fetchResponse: function(result, callback) {
var obj=Topic.Inbox;
obj.scrolling=false;
if (!result || result.error) {
obj.isLastPage=true;
if (callback) callback();
return;
}
if (!result.list || result.list.length <= 0) {
obj.isLastPage=true;
if (callback) callback();
return;
}
obj.offset=result.offset;
obj.drawList(result.list, obj.div);
if (callback) callback();
},
drawList: function(list, div) {
for (var i=0; i < list.length; i++) {
var id='INBOX_'+list[i]['relate']['tid'];
var el=$(id);
if (!el) {
el=Util.append(div, 'DIV', '<div class="topic-inbox-entry-header"><span class="gray">from</span> '+(list[i]['relate']['service'] == 'Twitter'?'"':'')+Util.wrapText(list[i]['relate']['text'])+(list[i]['relate']['service'] == 'Twitter'?'"':'')+' '+(list[i]['relate']['owner']?'<span class="gray">('+list[i]['relate']['owner']+')</span>':'')+'</div>', 'topic-inbox-entry');
el.id=id;
}
var html=list[i]['topic']['saved']?'<span class="topics-saved">Saved</span>':'<span class="topics-save" onclick="Topic.Inbox.save(this, '+list[i]['topic']['tid']+'); return false;"><img src="/common/img/discover/btn_save.gif" alt="Save" /></span>';
var node=Topic.makeNode(list[i]['topic'], {noDelete:true, prepend:html});
el.appendChild(node);
node.child=list[i]['child'];
}
},
onOver: function(e) {
var el=Event.findElement(e, 'a');
if (!el || !el.child) return;
clearTimeout(timer.inboxPreview);
Topic.Inbox.showPreview(el);
},
onOut: function(e) {
clearTimeout(timer.inboxPreview);
timer.inboxPreview=setTimeout('Topic.Inbox.hidePreview();', 300);
},
showPreview: function(el) {
if (!this.preview) {
this.preview=Util.append(document.body, 'DIV', '<div class="topics-inbox-preview-wrap"><div class="topic-inbox-entry-header"></div><table><tbody><tr></tr></tbody></table></div>', 'topics-inbox-preview');
}
this.preview.firstChild.firstChild.innerHTML=el.parentNode.firstChild.innerHTML;
var row=this.preview.getElementsByTagName('TR')[0];
Util.truncate(row);
var child=el.child;
var td, html;
if (child && child.length > 0) {
for (var i=0; i < child.length; i++) {
td=row.insertCell(row.cells.length);
html='';
if (i == 0) td.className='firstChild';
if (child[i]['image'])
html+='<div class="topics-inbox-preview-image"><img class="topics-inbox-preview-image" src="'+child[i]['image']+'" onload="Topic.Inbox.imgLoad(this);" onerror="Util.imgError(this, true);" /></div>';
html+='<div class="topics-inbox-preview-content"><h4>'+Util.wrapText(child[i]['text'])+'</h4><div class="description">'+Util.wrapText(child[i]['description'])+'</div></div>';
td.innerHTML=html;
}
}else{
td=row.insertCell(0);
td.className='firstChild';
td.innerHTML='no preview contents.';
}
var pos=Position.cumulativeOffset(el);
this.preview.style.display='block';
this.preview.style.top=Math.min(document.documentElement.offsetHeight-10-this.preview.offsetHeight, pos[1]-this.div.scrollTop)+'px';
this.preview.style.left=pos[0]+el.offsetWidth+'px';
},
imgLoad: function(img) {
try{
if (!Topic.imgLoad(img)) return;
var td=Element.up(img, 'td');
var table=Element.up(img, 'table');
if (!table) return;
td.style.width='67%';
td.style.display='';
var idx=(td.cellIndex+1)%3;
if (table.rows[0].cells[idx]) {
table.rows[0].cells[idx].style.width='';
var im=table.rows[0].cells[idx].getElementsByTagName('IMG');
if (im && im[0]) im[0].style.display=im[0].parentNode.style.display='none';
}
if (table.rows[0].cells.length < 3)
return;
var idx=(td.cellIndex+2)%3;
if (table.rows[0].cells[idx])
table.rows[0].deleteCell(idx);
if (table.rows[0].cells[0].className != 'firstChild')
table.rows[0].cells[0].className='firstChild';
}catch(e) {}
},
hidePreview: function() {
if (this.preview)
this.preview.style.display='none';
},
save: function(btn, tid) {
Topic.save(tid);
btn.innerHTML='Saved';
btn.onclick=null;
btn.className='topics-saved';
},
changed: function() {
try{
if (window.Discover) {
Discover.inboxChanged();
Event.stop(e);
}
}catch(e) {}
},
check: function() {
if (!this.enable) return;
ajax('/topic/inbox/check.json', null, this.checkResponse);
},
checkResponse: function(result) {
if (!result || result.error || result.count <= 0) return;
var obj=Topic.Inbox;
if (result.lastCheck)
obj.lastCheck=result.lastCheck;
if (result.count > obj.count) {
obj.count=result.count;
if (result.lastRead)
obj.lastRead=result.lastRead;
this.changed();
}
}
};
Topic.Connect={
loadConnect: function(method) {
try{
Connect[method]();
}catch(e) {
Dialog.showCurtain();
Util.importCSS('/screen/stylesheets/connect/connect.css');
Util.loadJS('/common/javascripts/connect/connect.js');
this.callMethod(method);
}
},
callMethod: function(method) {
try{
Connect[method]();
}catch(e) {
setTimeout('Topic.Connect.callMethod("'+method+'")', 300);
}
},
showListDialog: function() {
this.loadConnect('showListDialog');
},
showTypeDialog: function() {
this.loadConnect('showTypeDialog');
}
};
var LFBrowser=function(o) {
this.o=o?o:document.documentElement;
this.curtain=Util.append(document.body, 'DIV', '', 'LFBrowserCurtain');
var defaultAddressValue='';		// TODO: 'What interests you?' => '' => clicked TAG
this.div=Util.append(document.body, 'DIV', '<a class="LFBrowserClose" href="javascript:;" onclick="LFBrowser.hide(this);">Close</a><div class="LFBrowserDeco1"></div><div class="LFBrowserDeco2"></div><div class="LFBrowserDeco3"></div><div class="LFBrowserInner"><div class="LFBrowserHeader"><form onsubmit="LFBrowser.formSubmit(this); return false;"><a class="LFBrowserHistoryBack" href="javascript:;" onclick="LFBrowser.historyBack(this); this.blur(); return false;">Back</a><a class="LFBrowserHistoryForward" href="javascript:;" onclick="LFBrowser.historyForward(this); this.blur(); return false;">Forward</a><div class="LFBrowserAddress"><span><input class="LFBrowserField" name="address-field" type="text" title="'+defaultAddressValue+'" value="'+defaultAddressValue+'" onfocus="if (this.value == this.title) this.value=\'\';" onblur="if (!this.value) {this.value=this.title;}" onkeydown="LFBrowser.addressKey(event);" /></span></div><input class="LFBrowserGo" type="submit" value="Go" /></form></div><div id="LFBrowserAlert"><div class="LFBrowserAlert"><a class="LFBrowserSave" id="LFBrowserSaveButton" href="javascript:;" onclick="LFBrowser.save(this);" onmouseup="this.blur();">Save</a><div id="LFBrowserSaveMessage">Add this topic to your Monitor to watch live updates.</div><div id="LFBrowserSavedMsg">Added. Share with friends?</div><div class="share-buttons" id="LFBrowserTopShareButtons"><div>Share:</div><a class="share-twitter" href="javascript:;" onclick="Browse.Share.twitter(true);">Twitter</a><a class="share-facebook" href="javascript:;" onclick="Browse.Share.facebook(true);">Facebook</a><a class="share-email" href="javascript:;" onclick="Browse.Share.email(true);">Email</a></div></div><div class="LFBrowserVisit"><a id="LFBrowserVisitLink" target="_blank">Visit the link</a></div></div><iframe id="LFBrowserContent" name="LFBrowserContent" frameborder="0"></iframe><div id="LFBrowserStatus"></div></div>', 'LFBrowserContainer');
this.inner=this.div.lastChild;
this.form=this.inner.getElementsByTagName('FORM')[0];
this.alert=$('LFBrowserAlert');
this.alert.obj=this;
this.iframe=this.inner.getElementsByTagName('IFRAME')[0];
this.status=this.iframe.nextSibling;
this.hideFunc=null;
this.onlyShare=false;
this.visitMode=false;
this.referrer=null;
this.div.obj=this;
this.marginW=0;
this.marginH=0;
this.onResize=function() {
if (!this.isVisible()) return;
this.div.style.height=this.o.offsetHeight-this.marginH-40+'px';
this.div.style.width=this.o.offsetWidth>890?'890px':(this.o.offsetWidth<716?'716px':(this.o.offsetWidth+'px'));
this.div.style.left=(this.o.offsetWidth-this.div.offsetWidth)/2+'px';
this.form['address-field'].style.width=this.inner.offsetWidth-187+'px';
if (this.iframe && this.iframe.parentNode)
this.iframe.style.height=this.inner.clientHeight-this.alert.offsetHeight-58+'px';
};
this.isVisible=function() {
return this.div.style.display == 'block';
};
this.go=function(url) {
if (this.iframe && this.iframe.parentNode) {
if (Browser.isSafari && url.match(/(lazyfeed\.com|^)\/browse\//) && !url.match(/[?&][tn]=[0-9]{5,}/))
url+=(url.match(/\?/)?'&':'?')+'t='+(new Date().getTime());
try{
this.iframe.contentWindow.location=url;
return;
}catch(e){
try{
this.iframe.src=url;
return;
}catch(e) {}
}
}
};
this.show=function(url, referrer) {
this.form['address-field'].value='';
this.form['address-field'].onblur();
this.setStatus();
Element.setOpacity(this.curtain, '');
this.curtain.style.display=this.div.style.display='block';
this.hideAlert();
this.referrer=referrer;
this.go(url);
};
this.hideAlert=function() {
this.alert.style.display='none';
this.onResize();
};
this.showAlert=function(isTag) {
this.alert.className=this.visitMode?'LFBrowserVisit':'';
if (this.visitMode) {
try{
$('LFBrowserVisitLink').href=this.iframe.contentWindow.Browse.url;
}catch(e) {}
}
if (isTag) {
$('LFBrowserTopShareButtons').style.display='none';
if (this.onlyShare) {
this.hideAlert();
return;
}
$('LFBrowserSaveMessage').innerHTML='Add this topic to your Monitor to watch live updates.';
}else{
$('LFBrowserTopShareButtons').style.display='block';
$('LFBrowserSaveMessage').innerHTML='Add this link to get updates on related posts.';
}
if (this.onlyShare) {
$('LFBrowserSaveButton').style.display='none';
$('LFBrowserSaveMessage').style.display='none';
}else{
$('LFBrowserSaveButton').style.display='block';
$('LFBrowserSaveMessage').style.display='block';
}
$('LFBrowserSavedMsg').style.display='none';
this.saveEffect=new Effect.BlindDown(this.alert, {duration:0.6, afterFinish: function(effect) {
try{
effect.element.style.height='';
effect.element.obj.onResize();
}catch(e){}
}});
};
this.savedCheck=function(saved, isTag) {
if (!saved)
this.showAlert(isTag);
else
this.hideAlert();
};
this.browsed=function(url, tid, win) {
try{
if (win && win.Browse)
win.Browse.LFBrowser=this;
}catch(e) {}
if (url)
this.form['address-field'].value=url;
else{
this.form['address-field'].value='';
this.form['address-field'].onblur();
}
if (tid) {
var tmp=$('TNG'+tid);
if (tmp)
this.hideAlert();
else{
try{
Topic.savedCheck(tid, this.savedCheck.bind(this), url?url.match(/^tag:/i):false);
}catch(e) {}
}
}else
this.hideAlert();
try{
if (this.iframe.style.visibility == 'hidden')
this.iframe.style.visibility='visible';
if (this.iframe.contentWindow && !Browser.isIE6)
Event.observe(this.iframe.contentWindow, 'beforeunload', this.hideAlert.bind(this));
}catch(e) {}
};
this.saveEffect=null;
this.cancelSaveEffect=function() {
if (this.saveEffect) {
this.saveEffect.cancel();
this.saveEffect=null;
this.alert.style.height='';
}
};
this._save=function() {
this.cancelSaveEffect();
try{
var Browse=this.iframe.contentWindow.Browse;
Topic.save(Browse.tid, LFBrowser.saveFinish, this, 'browser_added=t'+(this.referrer?'&referrer='+this.referrer:''));
$('LFBrowserSaveMessage').style.display='none';
$('LFBrowserSavedMsg').innerHTML=Browse.url.match(/^tag:/)?'Added. Your Monitor is now playing live updates on this topic.':'Added. Share with friends?';
$('LFBrowserSavedMsg').style.display='block';
}catch(e) {}
};
this._saveFinish=function(result) {
try{
if (Monitor && Monitor.Topic)
Monitor.Topic.addFinish(result);
}catch(e) {}
if (!result || !result.topics) return;
$('LFBrowserSaveButton').style.display='none';
};
this.setHideFunc=function(func) {
this.hideFunc=func;
};
this._hide=function(e) {
try{
if (e) Event.stop(e);
}catch(e) {}
try{
if (this.iframe && this.iframe.contentWindow && this.iframe.contentWindow.Browse) {
this.iframe.contentWindow.Browse.blankContent();
}
}catch(e){}
this.div.style.display='none';
Element.setOpacity(this.curtain, 0);
var o=this;
setTimeout(function() {
o.curtain.style.display='none';
}, 10);
if (this.hideFunc) {
setTimeout(function() {
if (o.hideFunc)
o.hideFunc(o);
}, 10);
}
};
this._historyBack=function() {
try{
if (this.iframe && this.iframe.contentWindow)
this.iframe.contentWindow.history.back();
}catch(e) {}
};
this._historyForward=function() {
try{
if (this.iframe && this.iframe.contentWindow)
this.iframe.contentWindow.history.forward();
}catch(e) {}
};
this.setStatus=function(el) {
if (!el || el.nodeType != 1 || el.tagName != 'A' || !el.href || !el.href.match(/^http/)) {
this.status.innerHTML='';
return;
}
var txt='';
if (el.target && el.target == '_blank')
txt='Open '+el.href+' in a new window';
else{
if (el.title && el.title.match(/^(http|tag:)/))
txt=el.title;
}
this.status.innerHTML=txt;
};
if (this.o != document.documentElement && this.o != document.body)
this.o.parentNode.insertBefore(this.div, this.o);
Event.observe(window, 'resize', this.onResize.bind(this));
Event.observe(this.curtain, 'click', this._hide.bind(this));
};
LFBrowser.form=null;
LFBrowser.formSubmitSwitch=function(scheme) {
Dialog.hide();
var callback=LFBrowser.callback;
callback(scheme);
};
LFBrowser.formFocus=function() {
var form=LFBrowser.form;
form['address-field'].focus();
form['address-field'].select();
};
LFBrowser.formSubmit=function(form, scheme) {
var div=Util.findParent(form, {className:'LFBrowserContainer'});
if (!div || !div.obj) return;
var val=form['address-field'].value.replace(/\s+/g,'');
if (form['address-field'].title == val || !val) {
new Effect.Highlight(form['address-field'].parentNode.parentNode.parentNode, {startcolor: '#ffff99', endcolor: '#ffffff', queue:'end', keepBackgroundImage:true, duration:0.5, afterFinish: function(effect) {
effect.element.style.backgroundColor='';
}});
return false;
}
var url=(scheme?scheme:'')+(val.replace(/\s+/g).replace(/^https:\/\//, 'http://'));
if (LFBrowser.isNotTag(url)) {
var d=form;
LFBrowser.confirmType(url, function(scheme) {LFBrowser.formSubmit(d, scheme);});
return;
}
if (!url.match(/^\s*http:\/\//i))
url='tag:'+url.replace(/^\s*tag:/i, '');
form['address-field'].value=url;
div.obj.go('/browse/'+Util.escapeURL(url));
};
LFBrowser.isNotTag=function(url) {
return !url.match(/^\s*(tag:|https?:\/\/)/i) && url.match(/\s*.+(\.AC|\.AD|\.AE|\.AERO|\.AF|\.AG|\.AI|\.AL|\.AM|\.AN|\.AO|\.AQ|\.AR|\.ARPA|\.AS|\.ASIA|\.AT|\.AU|\.AW|\.AX|\.AZ|\.BA|\.BB|\.BD|\.BE|\.BF|\.BG|\.BH|\.BI|\.BIZ|\.BJ|\.BM|\.BN|\.BO|\.BR|\.BS|\.BT|\.BV|\.BW|\.BY|\.BZ|\.CA|\.CAT|\.CC|\.CD|\.CF|\.CG|\.CH|\.CI|\.CK|\.CL|\.CM|\.CN|\.CO|\.COM|\.COOP|\.CR|\.CU|\.CV|\.CX|\.CY|\.CZ|\.DE|\.DJ|\.DK|\.DM|\.DO|\.DZ|\.EC|\.EDU|\.EE|\.EG|\.ER|\.ES|\.ET|\.EU|\.FI|\.FJ|\.FK|\.FM|\.FO|\.FR|\.GA|\.GB|\.GD|\.GE|\.GF|\.GG|\.GH|\.GI|\.GL|\.GM|\.GN|\.GOV|\.GP|\.GQ|\.GR|\.GS|\.GT|\.GU|\.GW|\.GY|\.HK|\.HM|\.HN|\.HR|\.HT|\.HU|\.ID|\.IE|\.IL|\.IM|\.IN|\.INFO|\.INT|\.IO|\.IQ|\.IR|\.IS|\.IT|\.JE|\.JM|\.JO|\.JOBS|\.JP|\.KE|\.KG|\.KH|\.KI|\.KM|\.KN|\.KP|\.KR|\.KW|\.KY|\.KZ|\.LA|\.LB|\.LC|\.LI|\.LK|\.LR|\.LS|\.LT|\.LU|\.LV|\.LY|\.MA|\.MC|\.MD|\.ME|\.MG|\.MH|\.MIL|\.MK|\.ML|\.MM|\.MN|\.MO|\.MOBI|\.MP|\.MQ|\.MR|\.MS|\.MT|\.MU|\.MUSEUM|\.MV|\.MW|\.MX|\.MY|\.MZ|\.NA|\.NAME|\.NC|\.NE|\.NET|\.NF|\.NG|\.NI|\.NL|\.NO|\.NP|\.NR|\.NU|\.NZ|\.OM|\.ORG|\.PA|\.PE|\.PF|\.PG|\.PH|\.PK|\.PL|\.PM|\.PN|\.PR|\.PRO|\.PS|\.PT|\.PW|\.PY|\.QA|\.RE|\.RO|\.RS|\.RU|\.RW|\.SA|\.SB|\.SC|\.SD|\.SE|\.SG|\.SH|\.SI|\.SJ|\.SK|\.SL|\.SM|\.SN|\.SO|\.SR|\.ST|\.SU|\.SV|\.SY|\.SZ|\.TC|\.TD|\.TEL|\.TF|\.TG|\.TH|\.TJ|\.TK|\.TL|\.TM|\.TN|\.TO|\.TP|\.TR|\.TRAVEL|\.TT|\.TV|\.TW|\.TZ|\.UA|\.UG|\.UK|\.US|\.UY|\.UZ|\.VA|\.VC|\.VE|\.VG|\.VI|\.VN|\.VU|\.WF|\.WS|\.XN--0ZWM56D|\.XN--11B5BS3A9AJ6G|\.XN--80AKHBYKNJ4F|\.XN--9T4B11YI5A|\.XN--DEBA0AD|\.XN--G6W251D|\.XN--HGBK6AJ7F53BBA|\.XN--HLCJ6AYA9ESC7A|\.XN--JXALPDLP|\.XN--KGBECHTV|\.XN--ZCKZAH|\.YE|\.YT|\.YU|\.ZA|\.ZM|\.ZW)/i);
};
LFBrowser.confirmType=function(url, callback) {
var div=$('address-which');
if (!div) {
div=Util.append(document.body, 'DIV', '<a class="layer-close" href="javascript:Dialog.hide();">Close</a><h3>Is this a web address?</h3><div class="address-which-wrap"><h4 id="address-which-url"></h4></div><div class="buttons"><a class="button-ok" id="address-which-ok" href="javascript:LFBrowser.formSubmitSwitch(\'http://\');">Yes</a><a class="button-cancel" href="javascript:LFBrowser.formSubmitSwitch(\'tag:\');">No</a></div>', 'dialog-modal');
div.id='address-which';
}
LFBrowser.callback=callback;
Dialog.show(div, {zIndex:10002});
$('address-which-url').innerHTML=url.wcut(30, '..');
$('address-which-ok').focus();
};
LFBrowser.saveFinish=function(result, obj) {
obj._saveFinish(result);
};
LFBrowser.save=function(link) {
var div=Util.findParent(link, {className:'LFBrowserContainer'});
if (!div || !div.obj) return;
div.obj._save();
};
LFBrowser.historyForward=function(link) {
var div=Util.findParent(link, {className:'LFBrowserContainer'});
if (!div || !div.obj) return;
div.obj._historyForward();
};
LFBrowser.historyBack=function(link) {
var div=Util.findParent(link, {className:'LFBrowserContainer'});
if (!div || !div.obj) return;
div.obj._historyBack();
};
LFBrowser.addressError={el: null, effect: null};
LFBrowser.addressKey=function(e) {
var err=LFBrowser.addressError;
var addrField=Util.eventSrc(e);
if (!addrField || addrField.tagName != 'INPUT') return;
if (e.keyCode == 32/*space*/) {
Event.stop(e);
//show error
if (!err.el) {
var el;
el=err.el=document.createElement('DIV');
el.innerHTML='<img src="/common/img/discover/edge_red.gif" /><div style="background-color:#960000;padding:2px 5px;color:white;font-size:8pt;">No space is allowed.</div>';
el.id='address-error';
el.style.position='absolute';
el.style.marginTop='25px';
el.style.display='none';
addrField.parentNode.insertBefore(el, addrField);
}
if (err.effect)
err.effect.cancel();
Effect.Appear(err.el, {duration:0.3});
err.effect=new Effect.Fade(err.el, {delay:2, duration:0.3});
}else if (e.keyCode == Event.KEY_RETURN) {
if (err.effect)
err.effect.cancel();
if (err.el)
err.effect=new Effect.Fade(LFBrowser.addressError.el, {queue:'end', duration:0.2});
}
};
LFBrowser.hide=function(link) {
var div=Util.findParent(link, {className:'LFBrowserContainer'});
if (!div || !div.obj) return;
div.obj._hide();
};
LFBrowser.browsed=function(el, url, tid, win) {
var div=Util.findParent(el, {className:'LFBrowserContainer'});
if (!div || !div.obj) return;
div.obj.browsed(url, tid, win);
};
if (!window.Browse) {
var Browse={urlReg:''};
}
Browse.richizeContent=function(node, noOuter) {
var links=node.getElementsByTagName('A');
if (!links) return;
var img=[];
for (p=links.length; p--;) {
if (links[p].className && links[p].className.match(/no-browse/)) continue;
var txt=Util.innerText(links[p]);
var self=false;
links[p].removeAttribute('target');
if (this.urlReg && (txt.match(this.urlReg) || links[p].href.match(this.urlReg))) {
links[p].className=links[p].className.replace(/topic-link/g, '')+' topic-link';
self=true;
}
if (!noOuter && !links[p].href.match(/^tag:/i) && Util.innerText(links[p]).trim() && !links[p].className.match(/no-open/)) {
var a=document.createElement('A');
a.href=links[p].href;
a.target='_blank';
a.className='outlink';
a.title='Visit this page';
a.innerHTML='<img src="/common/img/discover/outlink.gif" />';
if (links[p].nextSibling)
links[p].parentNode.insertBefore(a, links[p].nextSibling);
else
links[p].parentNode.appendChild(a);
}
links[p].title=links[p].href;
if (self) {
links[p].removeAttribute('href');
if (links[p].className && links[p].className.match(/replaceToLink/))
links[p].innerHTML='[link]';
}else
links[p].href='/browse/'+Util.escapeURL(links[p].href);
}
};
Browse.imgLoad=function(img) {
if (!img.style || !img.parentNode) return Util.imgError(img, true);
if (img.offsetWidth <= 0 && img.offsetHeight <= 0) {
var i=img;
setTimeout(function() {Browse.imgLoad(i);}, 100);
return;
}
img.title='Original size: '+img.offsetWidth+'px * '+img.offsetHeight+'px';
var st=img.style;
var pst=img.parentNode.style;
if (img.offsetHeight > img.offsetWidth*2) {
//vertical
if (img.offsetWidth < 60) return Util.imgError(img, true);
st.width='60px';
pst.width='60px';
pst.height='120px';
pst.marginRight='7px';
pst.visibility='inherit';
return;
}
if (img.offsetWidth > img.offsetHeight*2) {
//hr
if (img.offsetWidth < 100 || img.offsetWidth > img.offsetHeight*5) return Util.imgError(img, true);
st.width='100px';
pst.width='100px';
pst.height=img.offsetHeight+'px';
pst.marginRight='7px';
pst.visibility='inherit';
return;
}
if (img.offsetWidth < 75 || img.offsetHeight < 75) return Util.imgError(img, true);
//pst.width=pst.height='75px';
if (img.offsetWidth > img.offsetHeight) {
st.height='75px';
//st.marginLeft='-'+((img.offsetWidth-img.offsetHeight)/2)+'px';
}else{
st.width='75px';
//st.marginTop='-'+((img.offsetHeight-img.offsetWidth)/2)+'px';
}
pst.width=img.offsetWidth+'px';
pst.height=img.offsetHeight+'px';
pst.marginRight='7px';
pst.visibility='inherit';
};
Browse.getWin=function() {
try{
if (window.parent.Discover)
return window.parent;
else
return window.self;
}catch(e) {
return window.self;
}
};
Browse.blockHostTid=null;
Browse.blockHost=function(tid) {
this.blockHostTid=tid;
var win=this.getWin();
var div=win.$('block-source');
if (!div) {
div=Util.append(win.document.body, 'DIV', '<a class="layer-close" href="javascript:Dialog.hide();">Close</a> <h3>Block this source?</h3>  <div> Click <strong>Block</strong> to remove this source from your results.<br /> Click <strong>Block and Report</strong> to block and also report the source as spam. </div>  <div class="buttons"> <a href="javascript:try{if (!Discover.streamAction(\'blockHostConfirm\')) Browse.blockHostConfirm();}catch(e){Browse.blockHostConfirm();}"><img src="/common/img/discover/btn_block.gif" alt="Block" title="Block" /></a> <a href="javascript:try{if (!Discover.streamAction(\'blockReportHostConfirm\')) Browse.blockReportHostConfirm();}catch(e){Browse.blockReportHostConfirm();}"><img src="/common/img/discover/btn_block_report.gif" alt="Block and report" title="Block and report" /></a> or <a href="javascript:Dialog.hide();">Cancel</a> </div>', 'dialog-modal');
div.id='block-source';
}
win.Dialog.show(div);
};
Browse.blockHostIng=false;
Browse.blockReportHostConfirm=function() {
this.blockHostConfirm('t');
};
Browse.blockHostConfirm=function(report) {
if (!this.blockHostTid) return;
var el=document.getElementsByClassName('host'+this.blockHostTid);
this.offset-=el.length;
for (var i=el.length; i--;) {
var node=Element.up(el[i], '.stream-entry');
if (node) new Effect.SlideUp(node, {duration:0.5, fps:20});
}
ajax('/setting/block/submit', 'tid='+this.blockHostTid+(report=='t'?'&report=t':''), this.onScroll.bind(this));
this.blockHostTid=null;
Dialog.hide();
};
Browse.hackHighlight=null;
Browse.onOverHack=function(e) {
clearTimeout(timer.hack);
var el=Event.element(e);
if (!el) return;
var node=el.className.match(/stream-entry($|\s)/)?el:Element.up(el, '.stream-entry');
if (!node || this.hackHighlight == node) return;
if (this.hackHighlight)
this.hackHighlight.className=this.hackHighlight.className.replace(/hover/, '');
node.className+=' hover';
this.hackHighlight=node;
};
Browse.onOutHack=function(e) {
clearTimeout(timer.hack);
if (!this.hackHighlight) return;
var el=Event.element(e);
if (!el) return;
var node=el.className.match(/stream-entry($|\s)/)?el:Element.up(el, '.stream-entry');
if (!node) return;
timer.hack=setTimeout('Browse._onOutHack();', 100);
};
Browse._onOutHack=function() {
this.hackHighlight.className=this.hackHighlight.className.replace(/hover/, '');
this.hackHighlight=null;
};
if (!window.Browse) {
var Browse={};
}
Browse.Share={
userEmail: '',
userName: '',
getURL: function() {
if (Browse && Browse.url)
return Browse.url;
else{
try{
if (window.Discover) {
return Discover.ifm.contentWindow.Browse.url;
}
}catch(e){}
}
},
twitter: function(afterSave) {
var url=this.getURL();
if (!url) return;
var win=window.open('/share/link/twitter?as='+(afterSave?'t':'')+'&url='+encodeURIComponent(url), 'WinDiscoverShareLink');
win.focus();
},
facebook: function(afterSave) {
var url=this.getURL();
if (!url) return;
var win=window.open('/share/link/facebook?as='+(afterSave?'t':'')+'&url='+encodeURIComponent(url), 'WinDiscoverShareLink', 'width=700, height=550, scrollbars=yes');
win.focus();
},
email: function(afterSave) {
if (window.parent != window.self) {
try{
window.parent.Browse.Share.email(afterSave);
return;
}catch(e){}
}
Browse.Share.emailDialog(afterSave);
},
emailDialog: function(afterSave) {
var div=$('share-email');
if (!div) {
div=Util.append(document.body, 'DIV', '<a class="layer-close" href="javascript:Dialog.hide();">Close</a> <h3>Share with friends on Email</h3>  <div id="share-email-container"> <div class="email-import"> <img class="arrow" src="/common/img/discover/arrow_bl.gif" /> <div id="email-import-recent-container"> <dl> <dt>Import contacts:</dt> <dd> <ul class="service-list"> <li><a href="javascript:Browse.Share.importShowLogin(\'gmail\', \'Gmail\');"><img src="/common/img/discover/btn_import_gmail.gif" /></a> <li><a href="javascript:Browse.Share.importShowLogin(\'hotmail\', \'Windows <span>Live Hotmail</span>\');"><img src="/common/img/discover/btn_import_hotmail.gif" /></a> <li><a href="javascript:Browse.Share.importShowLogin(\'yahoo\', \'Yahoo\');"><img src="/common/img/discover/btn_import_yahoo.gif" /></a> <li><a href="javascript:Browse.Share.importShowLogin(\'aol\', \'AOL\');"><img src="/common/img/discover/btn_import_aol.gif" /></a> </ul> </dd> <dt>Recent contacts:</dt> <dd> <ul class="contacts" id="email-recent-contacts"></ul> </dd> </dl> </div> <div id="email-import-login-container"> <h4><span id="email-import-login-title"></span>&nbsp;Sign in</h4> <div class="email-import-container"> <div id="import-login-result"></div> <form id="import-form" onsubmit="Browse.Share.importLoginSubmit(this); return false;"> <input type="hidden" name="type" /> <dl> <dt>Email address:</dt> <dd> <input class="text" type="text" name="email" /> </dd> <dt>Password:</dt> <dd> <input class="text" type="password" name="password" /> </dd> </dl> <div class="buttons"> <input class="image" type="image" alt="Sign in" src="/common/img/discover/btn_import_login.gif" /> or <a href="javascript:Browse.Share.showImport();">cancel</a> </div> </form> </div> </div> <div id="email-import-list-container"> <h4><span id="email-import-list-title"></span>&nbsp;Sign in</h4> <div class="email-import-container"> <dl> <dt>Contact list:</dt> <dd> <ul class="contacts" id="email-import-lists"></ul> </dd> </dl>  <div class="alignRight"> <a href="javascript:Browse.Share.showImport();">Select another mail service</a>&nbsp;&nbsp; </div> </div> </div> </div> <div class="email-form"> <form id="email-form" onsubmit="Browse.Share.emailSubmit(this); return false;"> <input type="hidden" name="as" /> <input type="hidden" name="url" /> <div id="email-result"></div> <dl> <dt> <a href="javascript:Browse.Share.showImport();"><img src="/common/img/discover/btn_recent.gif" /></a> <a href="javascript:Browse.Share.showImport();"><img src="/common/img/discover/btn_import.gif" /></a> To: </dt> <dd> <textarea name="reciever" onchange="this.onkeyup();" onkeyup="Browse.Share.emailFormChange(this.form);"></textarea> </dd> <dt> From: </dt> <dd> <table> <tbody> <tr> <th>Email</th> <td><input type="text" class="text" name="sender" onchange="this.onkeyup();" onkeyup="Browse.Share.emailFormChange(this.form);" /></td> </tr> <tr> <th>Name</th> <td id="email-shared-name"></td> </tr> </tbody> </table> </dd> <dt> Shared content: </dt> <dd> <span id="email-shared-content">http://www.lazyfeed.com/</span> </dd> <dt> Add note: </dt> <dd> <textarea name="body" onchange="this.onkeyup();" onkeyup="if (this.value.length > 5000) {this.value=this.value.substr(0, 5000);}return true;"></textarea> </dd> </dl> <div class="alignCenter"> <input type="image" id="email-form-submit" alt="Send" src="/common/img/discover/btn_send_off.gif" /> </div> </form>  <div id="email-send-result"> <h4>Your email has been sent!</h4> <a href="javascript:Browse.Share.emailDialog();">Share more</a> </div> </div> </div>', 'dialog-modal');
div.id='share-email';
}
div.style.width='';
$('email-result').innerHTML='';
$('email-form').style.display=$('email-send-result').style.display='';
$('share-email-container').className='';
Dialog.show(div);
var form=$('email-form');
if (!form['sender'].value)
form['sender'].value=this.userEmail;
var senderName=$('email-shared-name');
if (!senderName.innerHTML) {
if (this.userName)
Util.innerText(senderName, this.userName);
else
senderName.innerHTML='<input type="text" class="text" name="senderName" onchange="this.onkeyup();" onkeyup="Browse.Share.emailFormChange(this.form);" />';
}
form['reciever'].value=form['body'].value='';
form['as'].value=afterSave?'t':'';
form['reciever'].onchange();
this.emailSubmitFormReset();
var url=this.getURL();
$('email-shared-content').innerHTML=form['url'].value=url;
this.fetchRecent();
},
emailFormChange: function(form) {
$('email-form-submit').src=(!form['reciever'].value.trim() || !form['sender'].value.trim() || !form['sender'].value.match(/[^@]+@[^.]+\.[^.]+/) || (form['senderName'] && !form['senderName'].value.trim()))?'/common/img/discover/btn_send_off.gif':'/common/img/discover/btn_send.gif';
},
fetchRecent: function() {
ajax('/share/link/recent.json', 'timeMax='+this.timeMax, this.fetchRecentResponse.bind(this));
},
fetchRecentResponse: function(result) {
if (!result || result.error) return;
var div=$('email-recent-contacts');
Util.truncate(div);
for (var i=0; i < result.length; i++) {
var name=result[i].name;
var email=result[i].email;
Util.append(div, 'LI', '<a href="javascript:;" onclick="Browse.Share.contactClick(this);">'+(name && name != email?('"'+name+'" <'+email+'>').escapeHTML():email.escapeHTML())+'</a>');
}
},
contactClick: function(div, email) {
var field=$('email-form')['reciever'];
if (field.value) field.value+=', ';
field.value+=email?email:Util.innerText(div);
field.onchange();
try{
div.parentNode.parentNode.removeChild(div.parentNode);
}catch(e) {}
},
emailSubmit: function(form) {
if (form.ing) {
this.emailSubmitFail('Please wait.');
return;
}
form.ing=true;
if (!form['reciever'].value.trim()) {
this.emailSubmitFail('‘To’ field is empty.');
form['reciever'].focus();
return;
}
if (form['senderName'] && !form['senderName'].value.trim()) {
this.emailSubmitFail('‘From’ field is empty.');
form['senderName'].focus();
return;
}
if (!form['sender'].value.trim() || !form['sender'].value.match(/[^@]+@[^.]+\.[^.]+/)) {
this.emailSubmitFail('‘From’ field is empty.');
form['sender'].focus();
return;
}
form['reciever'].disabled=form['sender'].disabled=form['body'].disabled=true;
ajax('/share/link/email.json', Util.toPost(form), this.emailSubmitResponse.bind(this));
},
emailSubmitResponse: function(result) {
if (!result || result.error) {
this.emailSubmitFail(result.msg?result.msg:'Error');
return;
}
this.emailSubmitSuccess();
},
emailSubmitFormReset: function() {
var form=$('email-form');
form.ing=false;
form['reciever'].disabled=form['sender'].disabled=form['body'].disabled=false;
},
emailSubmitFail: function(msg) {
this.emailSubmitFormReset();
var error=$('email-result');
error.innerHTML='<span>'+msg+'</span>';
},
emailSubmitSuccess: function() {
this.emailSubmitFormReset();
$('email-form').style.display='none';
$('email-send-result').style.display='block';
$('share-email').style.width='';
$('share-email-container').className='';
},
showImport: function() {
$('share-email').style.width='650px';
$('share-email-container').className='import';
$('email-import-recent-container').style.display='block';
$('email-import-login-container').style.display=$('email-import-list-container').style.display='none';
},
importAjax: null,
importShowLogin: function(type, title) {
$('email-import-login-container').style.display='block';
$('email-import-recent-container').style.display=$('email-import-list-container').style.display='none';
var form=$('import-form');
$('email-import-login-title').innerHTML='<img src="/common/img/discover/import-icon-'+type+'.gif" /> '+title;
$('import-login-result').innerHTML='';
if (this.importAjax)
this.importAjax.abort();
form['type'].value=type;
form['email'].value=form['password'].value='';
form.ing=form['email'].disabled=form['password'].disabled=false;
},
importLoginSubmit: function(form) {
if (form.ing) return false;
if (!form['email'].value.trim() || !form['password'].value) {
$('import-login-result').innerHTML='<span>Please check that you typed<br />your email/password correctly.</span>';
return;
}
$('import-login-result').innerHTML='';
form.ing=form['email'].disabled=form['password'].disabled=true;
if (this.importAjax)
this.importAjax.abort();
this.importAjax=ajax('/share/link/contacts.json', Util.toPost(form), this.importLoginSubmitResponse.bind(this));
},
importLoginSubmitResponse: function(result) {
var form=$('import-form');
form.ing=form['email'].disabled=form['password'].disabled=false;
if (!result || result.error) {
if (result.msg == 'Login error')
result.msg='Please check that you typed<br />your email/password correctly.';
$('import-login-result').innerHTML='<span>'+(result.msg?result.msg:'Error')+'</span>';
return;
}
var div=$('email-import-lists');
Util.truncate(div);
for (var email in result) {
var name=result[email];
Util.append(div, 'LI', '<a href="javascript:;" onclick="Browse.Share.contactClick(this);">'+(name && name != email?('"'+name+'" <'+email+'>').escapeHTML():email.escapeHTML())+'</a>');
}
this.importShowList();
},
importShowList: function() {
$('email-import-list-container').style.display='block';
$('email-import-recent-container').style.display=$('email-import-login-container').style.display='none';
$('email-import-list-title').innerHTML=$('email-import-login-title').innerHTML;
}
};
Monitor.Preview={
div:{wrapper:null, preview:null, list:null, title:null, loading:null},
init: function() {
this.div.wrapper=$('content-preview-wrapper');
this.div.preview=$('content-preview');
this.div.list=$('content-preview-list');
this.div.grid=$('content-preview-grid');
this.div.loading=$('stream-loading');
this.div.title=this.div.preview.getElementsByTagName('H3')[0];
if (Browser.isIE6 || Browser.isIE7)
this.div.list.style.paddingLeft=this.div.list.style.paddingRight='0px';
Event.observe(window, 'scroll', this.onScroll);
Event.observe(this.div.list, 'scroll', this.onScroll);
Event.observe(this.div.list, 'click', this.onClick);
Event.observe(this.div.list, 'mouseover', this.onOver.bind(this));
Event.observe(this.div.list, 'mouseout', this.onOut.bind(this));
if (Browser.isIE6) {
Event.observe(this.div.list, 'mouseover', Browse.onOverHack.bind(Browse));
Event.observe(this.div.list, 'mouseout', Browse.onOutHack.bind(Browse));
}
Monitor.attachEvent('resize', this.onResize);
},
isVisible: function() {
return (this.div.wrapper && this.div.wrapper.style.display == 'block');
},
_visible:false,
url: '',
offset: 0,
time:'',
limitTime: '',
entry: null,
title: null,
filterNew: false,
splitTime: null,
scrolling: false,
seq: 0,
initialFetch: function() {
Monitor.Preview.onScroll(null, Monitor.Preview.initialFetch);
},
onScroll: function(e, callback) {
var obj=Monitor.Preview;
if (obj.scrolling || obj.isLastPage) return;
if (obj.div.list.scrollTop+obj.div.list.clientHeight < obj.div.list.scrollHeight-Math.max(300, obj.div.wrapper.offsetHeight/2)) return;
obj.fetch(callback);
},
onClick: function(e) {
var el=Util.eventSrc(e, {tagName:'A'});
if (!el) return;
if (el.href.match(/^(https?:\/\/[^\/]+)?\/browse\/.+/)) {
Monitor.browse(el.href);
Event.stop(e);
}
},
onOver: function(e) {
var el=Event.element(e);
if (!el || !el.tagName) return;
if (el.tagName == 'IMG') {
if (el.parentNode.className.match(/host-block/)) {
var tid=el.parentNode.getAttribute('tid');
this.blockHostHighlight(tid, el);
}
el=el.parentNode;
}
},
onOut: function(e) {
var el=Event.element(e);
if (!el || !el.tagName) return;
if (el.tagName == 'IMG') {
if (el.parentNode.className.match(/host-block/)) {
var tid=el.parentNode.getAttribute('tid');
this.blockHostHighlightOff(tid);
}
}
},
onResize: function() {
var obj=Monitor.Preview;
if (!obj.isVisible()) return;
obj.resizeDiv();
var h='no', v='no';
for (var i=0; obj.div.grid.childNodes.length; i++) {
switch (obj.div.grid.childNodes[i].className) {
case 'hline':
if (obj.div.grid.childNodes[i].offsetTop <= 22)
break;
var line=obj.div.grid.childNodes[i];
if (h == 'no')
h=obj.div.wrapper.offsetHeight-line.offsetTop-21;
line.style.top=line.offsetTop+h+'px';
break;
case 'vline':
if (obj.div.grid.childNodes[i].offsetLeft <= 22)
break;
var line=obj.div.grid.childNodes[i];
if (v == 'no')
v=obj.div.wrapper.offsetWidth-line.offsetLeft-21;
line.style.left=line.offsetLeft+v+'px';
break;
}
}
obj.onScroll();
},
browse: function() {
Monitor.browse(this.entry.href);
},
show: function(entry) {
Monitor.Question.reset();
Monitor.Topic.hideByQuestionToolTip();
if (this._show(entry)) {
this.div.preview.className='';
this.animateOn(entry);
return true;
}
return false;
},
_show: function(entry) {
if (!entry || !entry.id) return false;
var tid=Monitor.Topic.entryTid(entry.id);
var title='';
try{
title=Util.innerText(entry.lastChild.lastChild.firstChild.firstChild);
}catch(e){}
if (!title) return false;
var m;
if ((m=entry.href.match(/[?&]([nt])=(\d+)/))) {
this.filterNew=m[1] == 'n';
this.time=m[2];
if (m=entry.href.match(/[?&]l=(\d+)/))
this.limitTime=m[1];
else
this.limitTime='';
}else{
this.time='';
this.filterNew=false;
this.limitTime='';
}
this._visible=true;
this.url=entry.href.replace(/\?.*/, '');
this.offset=0;
this.scrolling=false;
this.isLastPage=false;
this.splitTime=null;
Util.innerText(this.div.title, title);
Util.truncate(this.div.list);
this.div.list.scrollTop=0;
this.entry=entry;
this.title=title;
this.div.wrapper.style.display='block';
this.resizeDiv();
this.initialFetch();
return true;
},
resizeDiv: function() {
this.div.preview.style.width=this.div.wrapper.parentNode.clientWidth-50+'px';
this.div.preview.style.height=this.div.wrapper.parentNode.clientHeight-50+'px';
this.div.list.style.width=this.div.wrapper.parentNode.clientWidth-52+'px';
this.div.list.style.height=this.div.wrapper.parentNode.clientHeight-78+'px';
},
animateOn: function(entry) {
var top=Monitor.Topic.entryTop(entry);
var left=entry.offsetLeft;
this.div.grid.style.display='none';
Util.truncate(this.div.grid);
var effect=[];
var idx=Math.round(left/entry.offsetWidth);
for (var i=0; i <= Monitor.Topic.numberOfColumn; i++) {
var _b=document.createElement('DIV');
_b.className='vline';
_b.toLeft=(i*(entry.offsetWidth-1));
_b.style.left=_b.toLeft+'px';
this.div.grid.appendChild(_b);
if (i <= idx) {
//left
effect.push(new Effect.Morph(_b, {sync:true, style:'left: '+(((i-idx)*entry.offsetWidth)+20)+'px;'}));
}else{
//right
effect.push(new Effect.Morph(_b, {sync:true, style:'left: '+(this.div.wrapper.offsetWidth-21+((i-idx-1)*entry.offsetWidth))+'px;'}));
}
}
var cnt=Math.ceil((Monitor.Topic.container.offsetHeight+1)/entry.offsetHeight);
var f=Monitor.Topic.firstEl;
if (!f) {
Monitor.Topic.setFirstEl();
f=Monitor.Topic.firstEl;
}
var t=Monitor.Topic.entryTop(f);
idx=Math.round((top-t)/entry.offsetHeight);
t-=Monitor.Topic.container.scrollTop;
for (var i=0; i <= cnt; i++) {
var _b=document.createElement('DIV');
_b.className='hline';
_b.toTop=t+(i*(entry.offsetHeight-1));
_b.style.top=_b.toTop+'px';
this.div.grid.appendChild(_b);
if (i <= idx) {
//top
effect.push(new Effect.Morph(_b, {sync:true, style:'top: '+(((i-idx)*entry.offsetHeight)+20)+'px;'}));
}else{
//bottom
effect.push(new Effect.Morph(_b, {sync:true, style:'top: '+(this.div.wrapper.offsetHeight-21+((i-idx-1)*entry.offsetHeight))+'px;'}));
}
}
var copy=Util.append(this.div.grid, 'DIV', '<span>'+(this.title.escapeHTML())+'</span>', 'title');
copy.style.left=left+1+'px';
copy.style.top=top-Monitor.Topic.container.scrollTop+'px';
copy.style.width=entry.offsetWidth-1+'px';
copy.style.height=entry.offsetHeight+'px';
effect.push(new Effect.Morph(copy, {sync:true, style:'top: 21px; left:21px; width:'+(this.div.wrapper.offsetWidth-42)+'px; height:'+(this.div.wrapper.offsetHeight-42)+'px;'}));
this.div.grid.style.display='';
new Effect.Parallel(effect, {duration:0.3, fps:15, afterFinish:function(effect) {
var obj=Monitor.Preview;
if (!obj.div.preview.className)
obj.div.preview.className='show';
obj.div.list.scrollTop=0;
copy.style.display='none';
Monitor.Question.hide();
setTimeout('Monitor.Preview.div.list.scrollTop=0;', 10);
setTimeout("Monitor.runEventFunc('browsed', Monitor.Preview.getEntryURL());", 500);
}});
},
animateOff: function(entry) {
var top=Monitor.Topic.entryTop(entry);
var left=entry.offsetLeft;
var effect=[];
var option;
for (var i=this.div.grid.childNodes.length; i--;) {
switch (this.div.grid.childNodes[i].className) {
case 'title':
this.div.grid.childNodes[i].style.display='block';
this.div.grid.childNodes[i].style.width=this.div.preview.offsetWidth+'px';
this.div.grid.childNodes[i].style.height=this.div.preview.offsetHeight+'px';
option={sync:true, style:'top: '+(top-Monitor.Topic.container.scrollTop)+'px; left:'+(left+1)+'px; width:'+(entry.offsetWidth-1)+'px; height:'+(entry.offsetHeight-1)+'px;'};
break;
case 'hline':
option={sync:true, style:'top: '+this.div.grid.childNodes[i].toTop+'px;'};
break;
case 'vline':
option={sync:true, style:'left: '+this.div.grid.childNodes[i].toLeft+'px;'};
break;
default:
option=null;
break;
}
if (option)
effect.push(new Effect.Morph(this.div.grid.childNodes[i], option));
}
new Effect.Parallel(effect, {duration:0.3, fps:15, afterFinish:function(effect) {
Monitor.Preview._hide();
}});
},
hideByClick: function(el) {
if (!Util.contains(this.div.list, el) && !Monitor.browser.isVisible() && !Util.contains(Monitor.browser.div, el) && !Dialog.curtainIsVisible() && (!Monitor.Question.div.container || !Util.contains(Monitor.Question.div.container, el))) {
if (el.parentNode.tagName == 'A')
el=el.parentNode;
if (el.tagName == 'A') {
if (el.id != 'button-add' && el.id != 'button-saved-stuff' && el.parentNode.id != 'treadmill') return;
}
this.hide();
}
},
hide: function() {
if (!this.div.preview.className) return;
this._visible=false;
this.div.preview.className='';
if (this.entry) {
Monitor.Question.tid=Monitor.Topic.entryTid(this.entry.id);
this.animateOff(this.entry);
this.entry=null;
}else
this._hide();
},
_hide: function() {
this.div.wrapper.style.display='none';
this.div.list.scrollTop=0;
Util.truncate(this.div.list);
Monitor.browsedEnd();
},
getEntryURL: function(entry) {
if (!entry) entry=this.entry;
if (!entry || !entry.href) return '';
return decodeURIComponent(entry.href.replace(/^(https?:\/\/[^\/]+)?\/browse\//, '').replace(/\?.*/, ''));
},
fetch: function(callback) {
if (this.scrolling || this.isLastPage || !this._visible) return;
this.scrolling=true;
var q=(this.filterNew?'n=':'t=')+this.time+'&l='+this.limitTime;
this.div.loading.style.display='block';
if (Browser.isIE6) {
this.div.loading.style.width=this.div.preview.offsetWidth+'px';
}
this.seq=Math.random();
var seq=this.seq;
ajax(this.url+'?offset='+this.offset+'&output=json&wc=t&nt=t&nc=t&ct=250&er=t&'+q, 'GET', this.fetchResponse.bind(this), [callback, seq]);
},
fetchResponse: function(result, callbackData) {
var callback=callbackData[0];
var seq=callbackData[1];
if (seq != this.seq || !this.entry) return;
this.scrolling=false;
this.div.loading.style.display='none';
if (!result || result.error) {
this.isLastPage=true;
if (callback) callback();
Util.append(this.div.list, 'DIV', 'End of results', 'stream-eol');
return;
}
this.filterNew=result.filterNew;
this.offset=result.offset;
this.time=result.time;
this.limitTime=result.limitTime;
if (this.limitTime && this.entry && this.entry.href && !this.entry.href.match(/[?&]l=\d+/))
this.entry.href=this.entry.href.replace(/\?.*/, '')+'?l='+this.limitTime+'&'+(this.filterNew?'n':'t')+'='+this.time;
if (result.eol)
this.isLastPage=true;
var noResult=false;
if (result.offset <= 10) {
//first time
if (result.filterNew && result.count) {
var cnt=document.createElement('DIV');
cnt.className='stream-filter-info';
cnt.innerHTML='	<a class="no-browse" onclick="Monitor.Preview.showAll(this); Event.stop(event); return false;" href="'+(this.entry.href.replace(/\?.*/, ''))+'?t='+((new Date()).getTime())+'">View contents from past visits</a><strong>'+(result.count)+'</strong> new since your last visit.';
Util.prepend(this.div.list, cnt);
}
var headMsg=document.createElement('DIV');
if (result.list && result.list.length > 0) {
headMsg.innerHTML='Latest Updates on the topic "'+this.title+'"';
headMsg.className='stream-head-msg';
}else{
headMsg.innerHTML='There is no update on the topic at this moment.';
headMsg.className='stream-noresult-msg';
noResult=true;
}
Util.prepend(this.div.list, headMsg);
if (result.relate && result.relate.length > 0) {
var rel=document.createElement('DIV');
rel.className='stream-relate-items';
rel.innerHTML='<table class="stream-relate-items stream-description-table"><tbody><tr><td class="dt">Related topics</td>'+(Monitor.Topic.numberOfColumn < 2?'</tr><tr>':'')+'<td class="dd"><ol></ol></td></tr></tbody></table>';
Util.prepend(this.div.list, rel);
var ol=rel.getElementsByTagName('OL')[0];
for (var i=0; i < result.relate.length; i++) {
var li=Util.append(ol, 'LI', '<a class="no-open" href="/browse/'+Util.escapeURL(result.relate[i].url)+'" title="'+(result.relate[i].url)+'">'+(result.relate[i].text)+'</a>');
li.style.backgroundImage='url(/common/img/discover/cooccur_'+(i+1)+'.gif)';
}
}
var url=this.getEntryURL();
if (!url.match(/^tag:/)) {
var bar=document.createElement('DIV');
bar.className='stream-url-info';
//bar.innerHTML='<span>'+(url.escapeHTML())+'</span>'+(result.isContent?' <a href="'+(this.entry.href)+'"><img src="/common/img/monitor/btn_browse.gif" alt="View content" /></a>':'');
bar.innerHTML='<span>'+(url.escapeHTML())+'</span> '+(result.isContent?('<a href="'+(this.entry.href)+'"><img src="/common/img/monitor/btn_browse.gif" alt="View content" /></a>'):('<a href="'+url+'" target="_blank"><img src="/common/img/discover/btn_visit.gif" alt="Visit" /></a>'));
Util.prepend(this.div.list, bar);
}
this.div.list.scrollTop=0;
setTimeout('Monitor.Preview.div.list.scrollTop=0;', 10);
}
if (!noResult && (!result.list || result.list.length <= 0)) {
if (callback) callback();
Util.append(this.div.list, 'DIV', 'End of results', 'stream-eol');
return;
}
var div=this.div.list.lastChild;
var now=result.now?result.now:((new Date()).getTime())/1000;
var list=result.list;
if (list) {
for (var i=0; i < list.length; i++) {
if (!list[i].link) continue;
var splitTime=this.getSplitTimeStr(Math.max(0, now-list[i].timestamp));
if (splitTime) {
if (!this.splitTime) {
Util.append(this.div.list, 'DIV', '<strong>'+splitTime+'</strong><span></span>', 'stream-entry-split');
this.splitTime=splitTime;
div=Util.append(this.div.list, 'DIV', null, 'stream-entry-wrapper');
}else{
if (this.splitTime != splitTime) {
Util.append(this.div.list, 'DIV', '<strong>'+splitTime+'</strong><span></span>', 'stream-entry-split');
this.splitTime=splitTime;
div=Util.append(this.div.list, 'DIV', null, 'stream-entry-wrapper');
}
}
}
if (!div || div.className != 'stream-entry-wrapper')
div=Util.append(this.div.list, 'DIV', null, 'stream-entry-wrapper');
if (div.childNodes.length > 25 && div.childNodes.length%Monitor.Topic.numberOfColumn == 0) {
div=Util.append(this.div.list, 'DIV', null, 'stream-entry-wrapper');
}
var html='<div class="entry-wrap"><div class="stream-body">';
var img='';
if (list[i].image && list[i].image != this.topicImage)
img='<a class="stream-photo no-open" href="'+list[i].link+'">'+(list[i].type == 'video'?'<img class="icon_video" src="/common/img/discover/icon_video_thumb.gif" />':'')+'<img src="'+list[i].image+'" onload="Browse.imgLoad(this);" onerror="Util.imgError(this, true);" /></a>';
else if (list[i].playable)
img='<a class="stream-playable no-open" href="'+list[i].link+'">Playable stuff</a>';
html+=(img?list[i].html.replace(/<div class="stream-content">/, '<div class="stream-content">'+img):list[i].html)+'</div></div>';
var node=Util.append(div, 'DIV', html, 'stream-entry');
var h4=node.getElementsByTagName('H4');
if (h4 && h4[0]) {
h4=h4[0];
if (h4.firstChild && h4.firstChild.nodeType == 1 && h4.firstChild.tagName == 'A') {
h4.firstChild.className+=' no-open';
h4.firstChild.innerHTML=Util.wrapText(Util.innerText(h4.firstChild).trim().escapeHTML());
}
var time=Util.append(node, 'SPAN', Date.toIntervalString(list[i].timestamp, now)+' ', 'stream-time');
if (h4.nextSibling) {
if (h4.nextSibling.tagName && h4.nextSibling.tagName == 'DIV')
Util.prepend(h4.nextSibling, time);
else
h4.parentNode.insertBefore(time, h4.nextSibling);
}else
h4.parentNode.appendChild(time);
}
Browse.richizeContent(node);
}
}
if (!noResult && result.eol)
Util.append(this.div.list, 'DIV', 'End of results', 'stream-eol');
if (callback) callback();
},
getSplitTimeStr: function(sec) {
if (sec <= 60*5) return 'now';
else if (sec <= 60*10) return '5 minutes ago';
else if (sec <= 60*30) return '10 minutes ago';
else if (sec <= 60*60) return '30 minutes ago';
else if (sec <= 60*60*12) return '1 hour ago';
else if (sec <= 60*60*24) return '12 hours ago';
else if (sec <= 60*60*24*7) return '1 day ago';
else if (sec <= 60*60*24*14) return '1 week ago';
else if (sec <= 60*60*24*30) return '2 weeks ago';
else if (sec <= 60*60*24*30*6) return '1 month ago';
else return '6 months ago';
},
columnUpdated: function() {
for (var i=0; i < this.div.list.childNodes.length; i++) {
if (this.div.list.childNodes[i].className == 'stream-entry-wrapper') {
var wrap=this.div.list.childNodes[i];
if (wrap.childNodes.length < Monitor.Topic.numberOfColumn && wrap.childNodes.length%Monitor.Topic.numberOfColumn == 0) {
continue;
}
var next=wrap.nextSibling;
if (next && next.className == 'stream-entry-split')
continue;
if (!next || next.className != 'stream-entry-wrapper') {
next=document.createElement('DIV');
next.className='stream-entry-wrapper';
Util.insertAfter(next, wrap);
}
while (wrap.childNodes.length > Monitor.Topic.numberOfColumn && wrap.childNodes.length%Monitor.Topic.numberOfColumn != 0)
Util.prepend(next, wrap.lastChild);
}
}
},
showAll: function(link) {
if (!link) return;
this.entry.href=link.href;
this._show(this.entry);
},
blockHostToolTip: null,
blockHostHighlight: function(tid, el) {
var style=$('dynamic-style');
if (Browser.isIE) {
while (style.styleSheet.rules.length > 0)
style.styleSheet.removeRule(0);
style.styleSheet.addRule('.host'+tid, 'background-color:#fae97c');
}else{
while (style.sheet.cssRules.length > 0)
style.sheet.deleteRule(0);
style.sheet.insertRule('.host'+tid+' {background-color:#fae97c}', 0);
}
if (!this.blockHostToolTip) {
this.blockHostToolTip=Util.append(document.body, 'DIV', '<div>Block this source</div><img src="/common/img/discover/block_tooltip_tail.gif" />', 'block-tooltip');
}
var pos=Element.viewportOffset(el);
this.blockHostToolTip.style.display='block';
this.blockHostToolTip.style.left=pos[0]+9+'px';
this.blockHostToolTip.style.top=pos[1]-this.blockHostToolTip.offsetHeight-2+'px';
},
blockHostHighlightOff: function(tid) {
var style=$('dynamic-style');
if (Browser.isIE) {
while (style.styleSheet.rules.length > 0)
style.styleSheet.removeRule(0);
}else{
while (style.sheet.cssRules.length > 0)
style.sheet.deleteRule(0);
}
if (this.blockHostToolTip)
this.blockHostToolTip.style.display='none';
},
blockResponse: function() {
var obj=Monitor.Preview;
if (!obj.entry || !obj.entry.href) return;
var m=obj.entry.href.match(/([nt])=(\d+)/);
if (m)
obj.entry.href=obj.entry.href.replace(/\?.*/, '')+'?'+m[1]+'='+(Number.parseInt(m[2])+1);
else
obj.entry.href=obj.entry.href.replace(/\?.*/, '')+'?t='+((new Date()).getTime());
obj._show(obj.entry);
}
};
Browse.blockHostConfirm=function(report) {
if (!this.blockHostTid) return;
ajax('/setting/block/submit', 'tid='+this.blockHostTid+(report=='t'?'&report=t':''), Monitor.Preview.blockResponse);
this.blockHostTid=null;
Dialog.hide();
};
Monitor.Public={
div: {addTooltip: null, saved: null, signin: null, overflow: null, unlock: null, clearBlind: null, preserve: null, deleteDefault: null},
topics: [],
init: function() {
Topic.readonlyTID=Monitor.Topic.defaultTopics;
//overload
Monitor.init();
Monitor.attachEvent('addFinish', this.addFinish);
},
getSignupHTML: function(arg) {
if (!arg) arg='';
var errMsgFirstName='You must enter First Name.';
var errMsgLastName='You must enter Last Name.';
var errMsgEmail='Email address is invalid.';
var errMsgPassword='Password is too short.';
var errMsgPasswordConfirm='Password is incorrect.';
// TODO: complete SIGN-UP form
//return '<div class="user-form"><form action="https://'+document.location.host+'/signup/submit'+arg+'" method="post"><dl class="hr"><dt class="left">First name <span>'+errMsgFirstName+'</span></dt><dt>Last name <span>'+errMsgLastName+'</span></dt><dd class="firstname left"><span><input class="big" type="text" name="firstname" value="" maxlength="100" style="width:238px;" /></span></dd><dd><span><input class="big" type="text" name="lastname" value="" maxlength="100" style="width:238px;" /></span></dd></dl><dl><dt>Email address <span>'+errMsgEmail+'</span></dt><dd><span><input class="big" type="text" name="email" value="" maxlength="200" /></span></dd><dt>Password <span class="gray f9" style="font-style:normal;">6-40 characters.</span> <span>'+errMsgPassword+'</span></dt><dd><span><input class="big" type="password" name="password" maxlength="40" /></span></dd><dt>Confirm password <span>'+errMsgPasswordConfirm+'</span></dt><dd><span><input class="big" type="password" name="passwordc" maxlength="40" /></span></dd></dl><input class="btn-signup" type="submit" title="Create an account" alt=" " /></form><div class="terms">By clicking \'Create an account\', you are indicating that you have read and agree to the <a href="/terms" target="_blank">Terms of Use</a> and <a href="/privacy" target="_blank">Privacy Policy.</a></div></div>';
return '<div class="user-form"><form action="http://'+document.location.host+'/signup/submit'+arg+'" method="post"><dl class="hr"><dt class="left">First name <span>'+errMsgFirstName+'</span></dt><dt>Last name <span>'+errMsgLastName+'</span></dt><dd class="firstname left"><span><input class="big" type="text" name="firstname" value="" maxlength="100" style="width:238px;" /></span></dd><dd><span><input class="big" type="text" name="lastname" value="" maxlength="100" style="width:238px;" /></span></dd></dl><dl><dt>Email address <span>'+errMsgEmail+'</span></dt><dd><span><input class="big" type="text" name="email" value="" maxlength="200" /></span></dd><dt>Password <span class="gray f9" style="font-style:normal;">6-40 characters.</span> <span>'+errMsgPassword+'</span></dt><dd><span><input class="big" type="password" name="password" maxlength="40" /></span></dd><dt>Confirm password <span>'+errMsgPasswordConfirm+'</span></dt><dd><span><input class="big" type="password" name="passwordc" maxlength="40" /></span></dd></dl><input class="btn-signup" type="submit" title="Create an account" alt=" " /></form><div class="terms">By clicking \'Create an account\', you are indicating that you have read and agree to the <a href="/terms" target="_blank">Terms of Use</a> and <a href="/privacy" target="_blank">Privacy Policy.</a></div></div>';
},
addDialogShowed: function() {
if (this.div.addTooltip)
this.div.addTooltip.style.display='none';
},
showPreserveDialog: function() {
if (!Monitor.Public.div.preserve) {
//// TODO: replace message!
Monitor.Public.div.preserve=Util.append(document.body, 'DIV', '<div class="wrap"><div class="profile"><img src="/common/img/monitor/mrlazy.gif" /></div><div class="content"><p>Hey, you\'re doing great!<br />Since you have added some topics, I just wanted to let you know that it\'s better to <span class="bolder">save your dashboard.</span> You may lose it if you don\'t save</p></div><div class="button"><a class="save" href="javascript:Monitor.Public.showSigninDialog();">Save</a><div class="later-wrap"><span class="or">or</span><a class="later" href="javascript:Monitor.Public.blinkPreserve();">Later</a></div></div></div><div class="bottom"></div>', 'mrlazy-preserve');
//this.div.preserve=Util.append(document.body, 'DIV', '<h3>Save your Playlist</h3><div class="wrap">You have many tracks on your playlist. You may lose them if you don’t save. Do you want to save your playlist?<div class="buttons"><a class="button-ok" href="javascript:Monitor.Public.showSigninDialog();">OK</a> <a class="button-cancel button-later" href="javascript:Monitor.Public.blinkPreserve();">Later</a></div></div>', 'dialog-modal dialog-monitor-public dialog-saved dialog-preserve');
}
setTimeout('Dialog.show(Monitor.Public.div.preserve); Monitor.Public.div.preserve.parentNode.style.backgroundColor="transparent"', 1500);
},
addFinish: function(result, added) {
var obj=Monitor.Public;
if (!result || result.error) {
if (result.overflow) {
var argument='?redirect=%2Fmonitor%3Fsave%3D'+result.overflow_tid;
if (!obj.div.overflow)
obj.div.overflow=Util.append(document.body, 'DIV', '<a class="layer-close" href="javascript:Dialog.hide();">Close</a><h3>You need to save your Topics</h3><div class="wrap"><p>You have added too many topics without saving. You may lose them if you don\'t save, so please <a href="/signin'+argument+'">sign in</a> and save your topics to continue.</p><p><strong>Don\'t have a Lazyfeed account yet?</strong><br />Just fill out the fllowing form to instantly create an account and save topics. <a href="/about" target="_blank">What is Lazyfeed?</a></p>'+obj.getSignupHTML(argument)+'</div>', 'dialog-modal dialog-monitor-public dialog-saved dialog-overflow');
else
obj.div.overflow.innerHTML='<a class="layer-close" href="javascript:Dialog.hide();">Close</a><h3>You need to save your Topics</h3><div class="wrap"><p>You have added too many topics without saving. You may lose them if you don\'t save, so please <a href="/signin'+argument+'">sign in</a> and save your topics to continue.</p><p><strong>Don\'t have a Lazyfeed account yet?</strong><br />Just fill out the fllowing form to instantly create an account and save topics. <a href="/about" target="_blank">What is Lazyfeed?</a></p>'+obj.getSignupHTML(argument)+'</div>';
Dialog.show(obj.div.overflow);
}
return;
}
/*
added++;
if (true || added > 2 && added%3 == 0)
obj.showPreserveDialog();
*/
setTimeout('Monitor.Public.showPreserve();', 3100);
Dialog.hide();
},
blinkPreserve: function() {
//Monitor.Public.div.preserve.parentNode.style.backgroundColor="";
//Dialog.hide();
var div=$('preserve-alert');
if (div && div.style.display != 'none')
Effect.Pulsate(div, {pulses:2, duration:0.7, afterFinish:function() {Element.setOpacity($('preserve-alert'), 1);}});
},
showPreserve: function() {
var div=$('preserve-alert');
if (div) {
if (div.style.display == 'none')
Effect.BlindDown(div, {afterFinish:function() {Monitor.resize();}});
//Monitor.Public.blinkPreserve();
setTimeout('Monitor.Public.blinkPreserve();', 300);
}
},
showSigninDialog: function() {
if (!this.div.signin)
this.div.signin=Util.append(document.body, 'DIV', '<a class="layer-close" href="javascript:Dialog.hide();">Close</a><h3>Sign in</h3><div class="wrap"><p>Please <a href="/signin?_f=preserve">sign in</a> to save your topics.</p><p><strong>Don\'t have a Lazyfeed account yet?</strong><br />Just fill out the fllowing form to instantly create an account and save your topics. <a href="/about" target="_blank">What is Lazyfeed?</a></p>'+this.getSignupHTML('?_f=preserve')+'</div>', 'dialog-modal dialog-monitor-public dialog-signin');
Dialog.show(this.div.signin);
Monitor.Public.div.signin.parentNode.style.backgroundColor="";
},
showClearBlindDialog: function(tid) {
var argument='?redirect=%2Fmonitor%3Fbrowse%3D'+tid;
if (!this.div.clearBlind)
this.div.clearBlind=Util.append(document.body, 'DIV', '<a class="layer-close" href="javascript:Dialog.hide();">Close</a><h3>You have reached the viewing limit</h3><div class="wrap"><p>Please <a href="/signin'+argument+'">sign in</a> to view contents with <strong>NO limitation.</strong></p><p><strong>Don\'t have a Lazyfeed account yet?</strong><br />Just fill out the fllowing form to instantly create an account and continue reading! <a href="/about" target="_blank">What is Lazyfeed?</a></p>'+this.getSignupHTML(argument)+'</div>', 'dialog-modal dialog-monitor-public dialog-signin');
else
this.div.clearBlind.innerHTML='<a class="layer-close" href="javascript:Dialog.hide();">Close</a><h3>You have reached the viewing limit</h3><div class="wrap"><p>Please <a href="/signin'+argument+'">sign in</a> to view contents with <strong>NO limitation.</strong></p><p><strong>Don\'t have a Lazyfeed account yet?</strong><br />Just fill out the fllowing form to instantly create an account and continue reading! <a href="/about" target="_blank">What is Lazyfeed?</a></p>'+this.getSignupHTML(argument)+'</div>';
Dialog.show(this.div.clearBlind);
},
showDeleteGeneralTopicDialog: function() {
if (!this.div.deleteDefault)
this.div.deleteDefault=Util.append(document.body, 'DIV', '<a class="layer-close" href="javascript:Dialog.hide();">Close</a><h3>Sign in</h3><div class="wrap"><p>You need to <a href="/signin?_f=delete_def">sign in</a> to delete the 5 default topics.</p><p><strong>Don\'t have a Lazyfeed account yet?</strong><br />Just fill out the fllowing form to instantly create an account and continue using! <a href="/about" target="_blank">What is Lazyfeed?</a></p>'+this.getSignupHTML('?_f=delete_def')+'</div>', 'dialog-modal dialog-monitor-public dialog-signin-delete-public');
Dialog.show(this.div.deleteDefault);
},
closeIntro: function() {
var div=$('intro');
if (!div || div.closing) return;
div.closing=true;
Effect.SlideUp(div, {duration:0.5, afterFinish: function() {
Monitor.resize();
}});
}
};
Monitor.Guide={
uiFlag: {},
div: {},
arrow: [],
_step: [],
events: [],
hasImport: false,
currentGuideStep: false,
enableOverflow: false,
addFinishStep: 0,
init: function(uiFlag) {
if (uiFlag) this.uiFlag=uiFlag;
for (var key in this.uiFlag)
this.uiFlag[key]=Number.parseInt(this.uiFlag[key]);
this.currentGuideStep=this.uiFlag.guide;
this.hasImport=$('import-dialog')?true:false;
if (!this.div.guide) {
this.div.guide=Util.append(document.body, 'DIV', '<div class="wrap"><div class="profile"><img src="/common/img/monitor/mrlazy.gif" /></div><div class="content"></div><div class="button"><a class="ok" href="javascript:Monitor.Guide.hideGuide();">OK</a></div></div>', 'mrlazy-guide none');
this.div.guideInner=this.div.guide.firstChild.childNodes[1];
}
Monitor.Topic._addShowTip=!this.uiFlag.added_confirm;
//Monitor.Question.enable=(this.uiFlag.user_added && this.uiFlag.browsed);
Monitor.attachEvent('addShow', this.onAddShow);
Monitor.attachEvent('addHide', this.onAddHide);
Monitor.attachEvent('addFinish', this.addFinish);
Monitor.attachEvent('overflow', this.onOverflow);
Monitor.attachEvent('browsed', this.onBrowsed);
Monitor.attachEvent('browsedEnd', this.onBrowsedEnd);
//Monitor.attachEvent('resize', this.onResize);
//Monitor.attachEvent('update', this.onResize);
//Monitor.attachEvent('contentScroll', this.onResize);
Dialog.hide();
this.boot();
},
isVisible: function() {
return (this.div.guide && this.div.guide.style.display == 'block' && this.div.guide.offsetWidth > 0);
},
checkUIFlag: function() {
if (this._uiCheck) {
ajax('/monitor/check/ui/'+this._uiCheck+'.json');
if (this._uiCheck != 'exists_user')
this.uiFlag[this._uiCheck]=1;
this._uiCheck='';
}
},
boot: function() {
//Monitor.Question.enable=(this.uiFlag.user_added && this.uiFlag.browsed);
this.checkUIFlag();
if (Monitor.browser.isVisible() || this.isVisible()) return;
if (this.uiFlag.signed) {
if (this.uiFlag.exists_user) {
//old user welcome
if (!this._step[101])
return this.showGuide(101);
}
//import
var impt=$('import-dialog');
if (impt) {
this.showImportDialog();
return;
}
if (this.uiFlag.signup) {
if (this.hasImport || this.uiFlag.guide) {
if (!this._step[110]) {
this._step[1]=true;
return this.showGuide(110);
}
/*
}else{
if (!this._step[1] && !this.uiFlag.guide) {
this._step[110]=true;
return this.showGuide(1);
}
*/
}
}
if (Monitor.firstGoURL) {
Dialog.hide();
Monitor.browse('/browse/'+Monitor.firstGoURL, Monitor.firstGoURLReferrer);
Monitor.firstGoURL=Monitor.firstGoURLReferrer='';
return;
}
/*
if ((this.uiFlag.signup || this.uiFlag.exists_user) && this.currentGuideStep && !this._step[105])
return this.showGuide(105);
else if (!this.uiFlag.guide && !this._step[3])
return this.showGuide(3);
*/
this.bootUser();
}else{
if (Monitor.firstGoURL) {
Dialog.hide();
Monitor.browse('/browse/'+Monitor.firstGoURL);
Monitor.firstGoURL='';
return;
}
/*
if (!this._step[1] && !this.uiFlag.guide)
return this.showGuide(1);
*/
this.bootUser();
}
},
bootUser: function() {
this.enableOverflow=true;
if (this.uiFlag.browsed && this.uiFlag.overflow && !this.uiFlag.overflow_confirm && this.enableOverflow)
this.showTreadmillHelp();
/*
if (!this.uiFlag.browsed) {
this.showBrowsed();
}else if (!this.uiFlag.user_added) {
Monitor.Topic.resumeAutoRefresh();
this.showUserAdded();
}else{
Dialog.hide();
Monitor.Topic.resumeAutoRefresh();
}
*/
},
existsToUser: function(resetAll) {
if (resetAll) {
Dialog.showCurtain();
Monitor.Guide.clearArrow();
Monitor.Question.hide();
this.uiFlag={customized:0, user_added:0, browsed:0, guide:0, overflow:0, overflow_confirm:0, added:0, added_confirm:0, browser_added:0, exists_user:0, signed:1};
this.hasImport=this.currentGuideStep=false;
this._step=[];
ajax('/monitor/check/ui/reset.json', null, function() {Dialog.hide();Monitor.Guide.boot();});
}else{
this.uiFlag.exists_user=0;
Dialog.hide();
setTimeout('Monitor.Guide.boot();', 10);
}
},
initialTopicAnimate: function() {
var div=Monitor.Topic.div.firstChild;
Element.setOpacity(div, 0);
div.style.marginTop='-130px';
div.style.visibility='';
new Effect.Morph(div, {
duration:0.9,
style: 'margin-top: 0px; opacity: 1.0;',
afterFinish: function(effect) {
effect.element.style.cssText='';
}
});
Dialog.showCurtain(null, 0);
setTimeout('Monitor.Guide.showGuide(3);', 2000);
return;
},
_uiCheck: '',
_next: null,
showGuide: function(step) {
if (!step) return;
Util.removeElementsByID('dummy-buttons');
this.div.guide.lastChild.lastChild.style.display='';
this.checkUIFlag();
this._next=null;
this._step[step]=true;
var html='';
switch (step) {
case 1:
html='<h3>Welcome to Lazyfeed</h3><div><p>Hi, I\'m <span class="bolder">Mr. Lazy.</span><br />I will walk you through a short tutorial to Lazyfeed.</p><p>Lazyfeed lets you stay on top of every topic you<br />care about, <strong>effortlessly.</strong><p><strong>I\'ll give you 5 basic topics to get you started.</strong><br />You can easily delete them or add more later.</p></div>';
this._next=2;
break;
case 2:
this.initialTopicAnimate();
return;
break;
case 3:
html='<h3>Live Updates</h3><ol><li>These tiles represent topics and their live update preview.</li><li>A tile will turn yellow and update itself like below when there’s new content inside.</li><li>You will see a lot of this, since <span class="bolder">over 1.5 million sites</span> are constantly pumping content to Lazyfeed in realtime.</li></ol><div class="image"><img src="/common/img/monitor/entry_ani01.gif" style="height:176px;" /></div>';
this._uiCheck='guide';
break;
case 21:
//call from browser open event only
var url=arguments[1];
if (url.match(/^tag:/)) url=url.replace(/^tag:/, '').ucfirst();
html='<h3>Magnified Topic View</h3><p>You have opened the page of latest updates on<br /><span class="bolder">'+url+'.</span></p><p>The contents are sorted by time, so the most<br />recent content always appears at the top.</p><p><span class="highlight"><strong>To do:</strong> Click on headlines to view contents.</span></p>';
this._uiCheck='browsed';
break;
case 31:
html='<h3>Tutorial Complete</h3><p>Good job!<br />This was the last step of the tutorial. You\'re on your own now.</p><p><strong>Here\'s what you can do from now on:</strong><br />1. Add more topics by pressing the <span class="bolder">Add a topic</span> button again.<br />2. Browse the topic you have just added by clicking on the topic.<br />3. Browse other topics.<br />4. Just leave this on and start watching Live Updates.</p>';
break;
//current user
case 101:
var div=document.createElement('DIV');
div.className='big-change';
div.innerHTML='<h3>Hi there, There has been a big change to Lazyfeed!</h3><p>As you know, Lazyfeed is a live update stream of topics.<br />It\'s been useful, but we thought it wasn\'t lazy enough, since <span class="bolder">you had to click on topics to see what\'s inside.</span></p><div class="image"><img src="/common/img/monitor/guide_change.png" style="margin-left:146px;width:495px;height:265px;" /></div><p>So we came up with <span class="bolder">Lazyfeed Squared.</span><br />It\'s not just the topics that update. <span class="bolder">Now, each topic has its own live updates.</span><br />You don\'t even need to flick a finger to see what\'s up with your topics. Just add stuff and watch live content flow in, <span class="bolder">just like watching TV.</span><br />Now THAT\'s Lazy.</p><div class="mrlazy-guide-button"><a class="ok" href="javascript:Monitor.Guide.showGuide(102);">OK</a></div>';
Dialog.show(div, {noHideOnESC:true});
this._next=102;
return;
break;
case 102:
html='<h3>Welcome to Lazyfeed</h3><p>Hi, I have prepared 5 basic topics to get you<br />started with exploring more of Lazyfeed.</p><p>Please try them. You can easily delete them later.</p>';
this._next=103;
this._uiCheck='exists_user';
break;
case 103:
this.addDefault();
Dialog.hide();
return;
break;
case 105:
html='<h3>Try the Tutorial?</h3><p>Have you tried the tutorial yet?<br />If you haven’t, please click Yes.<br />It’s short, and it will really help you get started.</p>';
var div=document.createElement('DIV');
div.innerHTML='<a href="javascript:Monitor.Guide.existsToUser(true);"><img src="/common/img/monitor/btn_yes2.gif" /></a> <a href="javascript:Monitor.Guide.existsToUser();"><img src="/common/img/monitor/btn_no2.gif" /></a>';
this.div.guide.lastChild.lastChild.style.display='none';
this.div.guide.lastChild.appendChild(div);
div.className='button';
div.id='dummy-buttons';
break;
case 110:
html='<h3>Welcome!</h3><p>Your account has been successfully created.<br />Please continue on.</p>';
break;
default:
return;
break;
}
this.div.guideInner.innerHTML=html;
this.div.guide.className='mrlazy-guide mrlazy-guide'+step;
this.div.guide.style.display='block';
Dialog.show(this.div.guide, {noHideOnESC:true, round:true});
},
hideGuide: function() {
this.hideGuideCurtain();
Dialog.hide();
this.div.guide.style.display='none';
if (this._next)
this.showGuide(this._next);
else
this.boot();
},
showImportDialog: function() {
Dialog.show($('import-dialog'), {hideCallback: this.importFinish, round:true, noHideOnESC:true});
},
importFinish: function() {
setTimeout('Monitor.Guide.boot();', 100);
},
addDefault: function() {
Topic.saveTids(Monitor.Topic.defaultTopics, this.addDefaultResponse, null, 'add_default=t');
},
addDefaultResponse: function(result) {
Monitor.Topic.addFinish(result, true);
},
drawArrow: function(dir, el, offset) {
if (!el) return;
if (!dir) dir='r';
if (!offset) offset={x:0, y:0};
for (var i=0; i < Math.min(10, el.length); i++) {
var arr=Util.append(document.body, 'DIV', '<img src="/common/img/monitor/ani_arrow_'+dir+'.gif" />', 'mrlazy-arrow');
arr.el=el[i];
arr.offset=offset;
this.arrow.push(arr);
}
this.onResize();
},
clearArrow: function() {
//Monitor.Topic.resumeAutoRefresh();
clearTimeout(timer['guide']);
if (!this.arrow || this.arrow.length <= 0) return;
for (var i=this.arrow.length; i--;)
this.arrow[i].parentNode.removeChild(this.arrow[i]);
this.arrow.splice(0, this.arrow.length);
},
showBrowsed: function() {
if (Monitor.Question.isVisible()) return;
//Monitor.Topic.pauseAutoRefresh();
Monitor.Question._show('<span style="font-size:13pt;line-height:17pt;">“Let’s get started. Click on any topic to view the page”</span>');
this.showGuideCurtain();
var el=Array.ize(Monitor.Topic.div.getElementsByTagName('A'));
timer['guide']=setTimeout(function() {
Monitor.Guide.clearArrow();
//Monitor.Topic.pauseAutoRefresh();
Monitor.Guide.drawArrow('r', el, {x:-10, y:-10, el:Monitor.Topic.container});
}, 1000);
},
showUserAdded: function() {
if (Monitor.Question.isVisible()) return;
Monitor.Question._show('<span style="font-size:11pt;line-height:14pt;">“Now let\'s try adding some of your favorite topics. Click on <span style="color:#0078b4;">&quot;Add a topic&quot;</span> button.”</span>');
timer['guide']=setTimeout(function() {
Monitor.Guide.clearArrow();
Monitor.Guide.drawArrow('l', [$('button-add')], {x:180, y:-20});
}, 2000);
},
hideUserAdded: function() {
Monitor.Guide.clearArrow();
Monitor.Question.hide();
},
addFinish: function(result) {
var obj=Monitor.Guide;
if (result && !result.error) {
/*
if (result.uiFlag) {
var signup=obj.uiFlag.signup;
var signed=obj.uiFlag.signed;
var exists_user=obj.uiFlag.exists_user;
obj.uiFlag=result.uiFlag;
for (var key in obj.uiFlag)
obj.uiFlag[key]=Number.parseInt(obj.uiFlag[key]);
obj.uiFlag.signup=signup;
obj.uiFlag.signed=signed;
obj.uiFlag.exists_user=exists_user;
//Monitor.Question.enable=(obj.uiFlag.user_added && obj.uiFlag.browsed);
}
*/
if (result.user_added) {
if (!obj.uiFlag.user_added) {
obj.uiFlag.user_added=true;
//obj.showGuide(31);
}
}
if (!obj.uiFlag.added) {
obj.uiFlag.added=true;
}
/*
if (obj.uiFlag.user_added == true)
obj.hideUserAdded();
*/
obj.boot();
}
},
onOverflow: function() {
var obj=Monitor.Topic;
Monitor.Guide.uiFlag.overflow=true;
if (!obj.treadmillUnlock) {
obj.treadmillUnlock=true;
obj.updateTreadmill();
ajax('/monitor/check/ui/overflow.json');
}
obj=Monitor.Guide;
if (obj.uiFlag.browsed && obj.uiFlag.overflow && !obj.uiFlag.overflow_confirm && obj.enableOverflow)
obj.showTreadmillHelp();
},
showTreadmillHelp: function() {
var div=$('treadmill-help');
if (!div) {
div=Util.append(document.body, 'DIV', '<div class="bg"></div><a href="javascript:Monitor.Guide.confirmTreadmill();"><img src="/common/img/monitor/icon_close.gif" /></a><div class="wrap"><div class="image"><img src="/common/img/monitor/entry_ani02.gif" style="height:206px;" /></div><h3>Treadmill mode!</h3><p>Congrats!<br />Your Monitor has evolved<br /> into a <span class="bolder">Treadmill!</span><br />Now the updated topics will<br /> <span class="bolder">automatically rise up to the<br /> top,</span> so it\'s much easier to<br /> stay on top of many topics<br /> at once.</p></div>');
div.id='treadmill-help';
}
div.style.display='block';
},
confirmTreadmill: function() {
if (!this.uiFlag.overflow_confirm) {
this.uiFlag.overflow_confirm=true;
ajax('/monitor/check/ui/overflow_confirm.json');
var div=$('treadmill-help');
if (div) div.style.display='none';
}
},
onAddShow: function() {
//Monitor.Guide.hideUserAdded();
Monitor.Question.enable=true;
var obj=Monitor.Guide;
if (!obj.uiFlag.added_confirm) {
obj.uiFlag.added_confirm=true;
ajax('/monitor/check/ui/added_confirm.json');
Monitor.Topic.addShowTip(true);
}
},
onAddHide: function() {
//Monitor.Guide.boot();
},
onBrowsedEnd: function() {
//Monitor.Guide.boot();
var obj=Monitor.Guide;
if (!obj.uiFlag.added_confirm) {
Monitor.Question.enable=false;
setTimeout('Monitor.Topic.add(true);', 10);
}
},
onBrowsed: function(url) {
Monitor.Guide.clearArrow();
Monitor.Question.hide();
if (!Monitor.Guide.uiFlag.browsed)
Monitor.Guide.showGuide(21, url);
},
onResize: function() {
var obj=Monitor.Guide;
if (!obj.arrow || obj.arrow.length <= 0) return;
for (var i=obj.arrow.length; i--;) {
if (!obj.arrow[i]) {
obj.arrow.splice(i, 1);
continue;
}
if(!obj.arrow[i].parentNode) {
obj.arrow.splice(i, 1);
continue;
}
if (obj.arrow[i].offset.el && obj.arrow[i].offset.el.scrollTop > obj.arrow[i].el.offsetTop) {
if (obj.arrow[i].style.display != 'none')
obj.arrow[i].style.display='none';
continue;
}else{
if (obj.arrow[i].style.display == 'none')
obj.arrow[i].style.display='';
var pos=Position.cumulativeOffset(obj.arrow[i].el);
obj.arrow[i].style.left=pos[0]-23+obj.arrow[i].offset.x-(obj.arrow[i].offset.el?obj.arrow[i].offset.el.scrollLeft:0)+'px';
obj.arrow[i].style.top=pos[1]-23+obj.arrow[i].offset.y-(obj.arrow[i].offset.el?obj.arrow[i].offset.el.scrollTop:0)+'px';
}
}
},
drawClickArrows: function() {
var entries=Monitor.Topic.div.childNodes;
for (var i=entries.length; i--;) {
var entry=entries[i];
if (entry && (entry.tagName=='A' || entry.tagName=='a')) {
var imgNode=$(entry.id+'IMG');
var pos=entry.offsetTop-Monitor.Topic.container.scrollTop;
if (pos>=0 && pos<Monitor.Topic.container.offsetHeight) {
if (!imgNode) {
imgNode=document.createElement('img');
imgNode.style.width=img.style.height='51px';
imgNode.style.position='absolute';
imgNode.style.zIndex='10';
imgNode.style.display='none';
Monitor.Topic.container.insertBefore(imgNode, Monitor.Topic.div);
}
img.style.top=pos+20+'px';
img.style.left=entry.offsetLeft+20+'px';
img.style.display='block';
}else{
if (imgNode)
imgNode.style.display='none';
}
}
}
},
showGuideCurtain: function() {
var curtainT=$('curtain-guide-t');
var curtainL=$('curtain-guide-l');
var curtainR=$('curtain-guide-r');
if (!curtainT) {
curtainT=Util.append(document.body, 'DIV');
curtainT.id='curtain-guide-t';
}
if (!curtainL) {
curtainL=Util.append(document.body, 'DIV');
curtainL.id='curtain-guide-l';
}
if (!curtainR) {
curtainR=Util.append(document.body, 'DIV');
curtainR.id='curtain-guide-r';
}
curtainT.style.display=curtainL.style.display=curtainR.style.display='block';
},
hideGuideCurtain: function() {
var curtainT=$('curtain-guide-t');
var curtainL=$('curtain-guide-l');
var curtainR=$('curtain-guide-r');
if (curtainT) curtainT.style.display='none';
if (curtainL) curtainL.style.display='none';
if (curtainR) curtainR.style.display='none';
}
};
