
(function($){function toIntegersAtLease(n)
{return n<10?'0'+n:n;}
Date.prototype.toJSON=function(date)
{return this.getUTCFullYear()+'-'+
toIntegersAtLease(this.getUTCMonth())+'-'+
toIntegersAtLease(this.getUTCDate());};var escapeable=/["\\\x00-\x1f\x7f-\x9f]/g;var meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'}
$.quoteString=function(string)
{if(escapeable.test(string))
{return'"'+string.replace(escapeable,function(a)
{var c=meta[a];if(typeof c==='string'){return c;}
c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16);})+'"'}
return'"'+string+'"';}
$.toJSON=function(o,compact)
{var type=typeof(o);if(type=="undefined")
return"undefined";else if(type=="number"||type=="boolean")
return o+"";else if(o===null)
return"null";if(type=="string")
{return $.quoteString(o);}
if(type=="object"&&typeof o.toJSON=="function")
return o.toJSON(compact);if(type!="function"&&typeof(o.length)=="number")
{var ret=[];for(var i=0;i<o.length;i++){ret.push($.toJSON(o[i],compact));}
if(compact)
return"["+ret.join(",")+"]";else
return"["+ret.join(", ")+"]";}
if(type=="function"){throw new TypeError("Unable to convert object of type 'function' to json.");}
ret=[];for(var k in o){var name;var type=typeof(k);if(type=="number")
name='"'+k+'"';else if(type=="string")
name=$.quoteString(k);else
continue;val=$.toJSON(o[k],compact);if(typeof(val)!="string"){continue;}
if(compact)
ret.push(name+":"+val);else
ret.push(name+": "+val);}
return"{"+ret.join(", ")+"}";}
$.compactJSON=function(o)
{return $.toJSON(o,true);}
$.evalJSON=function(src)
{return eval("("+src+")");}
$.secureEvalJSON=function(src)
{var filtered=src;filtered=filtered.replace(/\\["\\\/bfnrtu]/g,'@');filtered=filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']');filtered=filtered.replace(/(?:^|:|,)(?:\s*\[)+/g,'');if(/^[\],:{}\s]*$/.test(filtered))
return eval("("+src+")");else
throw new SyntaxError("Error parsing JSON, source is not valid.");}})(jQuery);var datatweet={};(function(){var $dt=datatweet;datatweet.typesById={};$dt.fb=false;$dt.activeConsoleTags=["time"];$dt.log=function(tag){if(!$dt.enableFirebugConsoleLog)return;if(!$.browser.mozilla)return;if(($.inArray("all",$dt.activeConsoleTags)>=0)||($.inArray(tag,$dt.activeConsoleTags)>=0)){console.log(tag,arguments);}}
$dt.error=function(msg){$dt.util.alert("ERROR "+msg);var a=null.a;}
$dt.startTime=(new Date()).getTime();$dt.maxTime=0;$dt.logTime=function(url,tm){var ctm=(new Date()).getTime();var etm=(ctm-tm)/1000;if(etm>$dt.maxTime)$dt.maxTime=etm;$dt.enableFirebugConsoleLog=1;$dt.log("time",etm,$dt.maxTime,url);}
$dt.testGetCount=0;$dt.testGetKeepGoing=1;$dt.testGet=function(){var urls=["http://www.datatweet.net/tw/dt_tester1/data","http://www.datatweet.net/streams"];var cnt=$dt.testGetCount++;var i=cnt%2;var url=urls[i];$dt.log("time",cnt,url);if($dt.maxTime>10)return;if($dt.testGetKeepGoing)$dt.httpGet(url,function(rs){window.setTimeout($dt.testGet,2000);});}
$dt.httpGet=function(url,callback){var tm=(new Date()).getTime();var etm=(tm-$dt.startTime)/1000;$.get(url,null,function(rs){$dt.logTime(url,tm);if(callback)callback(rs);});}})();(function(){var $dt=datatweet;datatweet.typesById={};$dt.user=null;$dt.requestUser=null;$dt.eUser=null;$dt.privilege="read";$dt.init=function(){if($dt.requestUser){$dt.eUser=$dt.requestUser;if($dt.user&&($dt.user.screenName==$dt.eUser.screenName))$dt.privilege="write";}else{$dt.eUser=$dt.user;if($dt.user)$dt.privilege="write";}
$(".magnifyingGlassContainer").click($dt.twitterSearch);var sbi=$(".searchBoxInput");sbi.focus(function(){var cvl=sbi.attr("value");if(cvl=="Twitter search"){sbi.attr("value","");sbi.css("color","black");}});$(".searchBoxInput").keydown(function(ev){if(ev.keyCode==13)$dt.twitterSearch();});}
$dt.putTweetType=function(tt){if(tt){var sid=tt.id;$dt.typesById[sid]=tt;}}
$dt.searchCallback=function(rs){$dt.searchRs=rs;$dt.tweetlib.tweets=rs.results;$('.moreDiv').remove();$('.magnifyingGlass').attr('src',"/"+$dt.imagesDir+"/magnifying-glass.png");if($dt.twitterSearchPage==1){var sq=$dt.util.htmlSanitize($dt.twitterSearchQuery);$('#tweets').append('<div class="searchResultsDiv">Results for <span class="searchResults">'+sq+'</span></div>');}
$dt.tweetlib.renderTweets($('#tweets'));}
$dt.twitterSearch=function(){var sbi=$(".searchBoxInput");var q=sbi.attr("value");var q=$(".searchBoxInput").attr("value");var qt=$.trim(q);if(qt){$dt.tweetlib.limit=15;$dt.twitterSearchPage=1;$dt.twitterSearchQuery=qt;$('#tweets').empty();$('.magnifyingGlass').attr('src',"/"+$dt.imagesDir+"/ajax-loader.gif");$dt.performTwitterSearch(qt,null,$dt.searchCallback);}}
$dt.twitterSearchNextPage=function(){var pg=$dt.twitterSearchPage+1;$dt.twitterSearchPage=pg;var q=$dt.twitterSearchQuery;$('.magnifyingGlass').attr('src',"/"+$dt.imagesDir+"/ajax-loader.gif");$dt.performTwitterSearch(q,{page:pg},$dt.searchCallback);}
$dt.performTwitterSearch=function(q,options,callback){var url="http://search.twitter.com/search.json?q=";options=options?options:{};var sn=options.screenName;if(sn){var fclause="from%3A"+sn;if(q.length){q=fclause+"+"+encodeURIComponent(q);}else{q=fclause;}}
url+=q+"&";var rpp=options.rpp;if(rpp){url+="rpp="+rpp+"&";}
var pg=options.page;if(pg){url+="page="+pg+"&";}
url+="callback=?";$dt.log("tweet",url);$.getJSON(url,callback);}
$dt.twitterTimeline=function(screenName,options,callback){var url="http://twitter.com/statuses/user_timeline.json?";options=options?options:{};var clauses=["screen_name="+screenName];var cnt=options.count;if(cnt)clauses.push("count="+cnt);var page=options.page;if(page)clauses.push("page="+page);url+=clauses.join("&");url+="&callback=?";$.getJSON(url,callback);}
$dt.parseTwitterCreatedAt=function(ctm){var rs=Date.parse(ctm)/1000;return rs;var tmm=ctm.match(/(\S*) (\S*) (\S*) (\S*) (\S*) (\S*)/);var rfd=tmm[1]+" "+tmm[3]+" "+tmm[2]+" "+tmm[6]+" "+tmm[4]+" GMT"+tmm[5];return Date.parse(rfd);}
$dt.datatweetsFromTimeline=function(tweets,regexp,fields){var rs=[];var r=RegExp(regexp);var fln=fields.length;$.each(tweets,function(i,tweet){var txt=tweet.text;var rtxt=txt.replace(RegExp("\\n|\\r","g")," ");var m=rtxt.match(r);if(m){var dt={};var cnt=Math.min(m.length,fln);dt._createdTime=$dt.parseTwitterCreatedAt(tweet.created_at);for(var j=0;j<cnt;j++){var prop=fields[j];dt[prop]=m[j+1];}
rs.push(dt);}});return rs;}
$dt.apiGet=function(path,data,callback){var getArgs=[];if(data){for(var i in data){getArgs.push(i+"="+data[i]);}}
getArgs.push("callback=?");var url="http://api.datatweet.net/"+path+"?"+getArgs.join("&");$dt.log("tweet","apiGet["+url+"]");$.getJSON(url,callback);}
$dt.renderSearchResult=function(div,srs){var p=$('<p/>');p.html(srs.text);div.append(p);}
$dt.firstResultText=function(srs){var rs=srs.results;if(rs.length>0)return rs[0].text;return null;}
$dt.renderSingletonSearchResult=function(div,srs){var rs=srs.results;if(rs.length==0){var txt="NotFound"}else if(rs.length>1){txt="Ambiguous";}else{$dt.renderSearchResult(div,rs[0]);}
var p=$('<p/>');p.html(txt);div.append(p);}
$dt.isNumeric=function(s){try{var nv=$.evalJSON(s);}catch(err){return false;}
var rs=(typeof nv)=="number";return rs;}
$dt.splitInTwo=function(s,delim){var ps=s.indexOf(delim);if(ps<0)return[s,""];return[s.substr(s,0,ps),s.substr(ps+1)];}
$dt.fieldIsPropertyDescription=function(type,prop){var fld=type[prop];if(fld&&(typeof fld=="object")){if(fld._ofType)return true;}
return false;}
$dt.constantValue=function(type,prop){if($.isArray(type)){var ln=type.length;for(var i=0;i<ln;i++){var rs=$dt.constantValue(type[i],prop);if(rs)return rs;}
return null;}
var fld=type[prop];if($dt.fieldIsPropertyDescription(type,prop)){if(fld.value)return fld.value;}else{return fld;}}
$dt.basetype=function(typeId){var tpsp=typeId.split("_");if(tpsp.length==2){return $dt.typesById[tpsp[0]];}
return $dt.typesById[typeId];}
$dt.timeDiffString=function(etm){if(etm<=0)return"0 seconds ago";var days=Math.floor(etm/86400);var hours=Math.floor(etm/3600)%24;var minutes=Math.floor(etm/60)%60;var seconds=Math.floor(etm)%60;function pluralize(txt,n){return(n==1)?txt:(txt+"s");}
var rs=[];if(days)rs.push(days+" "+pluralize("day",days));if(hours)rs.push(hours+" "+pluralize("hour",hours));if(minutes)rs.push(minutes+" "+pluralize("minute",minutes));if((days==0)&&(hours==0)&&seconds)rs.push(seconds+" "+pluralize("second",seconds));var srs="";var n=rs.length;if(n==1)return rs[0]+" ago";for(var i=0;i<n-2;i++){srs+=rs[i]+" ";}
return srs+rs[n-2]+" and "+rs[n-1]+" ago";}
$dt.timeAgo=function(ctm,tm){return $dt.timeDiffString(Math.round(ctm-tm));}
$dt.subtype=function(typeId){var tpsp=typeId.split("_");if(tpsp.length==2){return $dt.typesById[typeId];}
return null;}
$dt.tweetlib={};$dt.formatDate=function(ut){var dt=new Date(ut*1000);var hrs=dt.getHours();var ampm="am";if(hrs>=13){hrs=(hrs-12);ampm="pm";}
var mins=dt.getMinutes();if(mins<10){mins="0"+mins;}
var month=dt.getMonth();var date=dt.getDate();var year=dt.getFullYear();var cdt=new Date();var cmonth=cdt.getMonth();var cdate=cdt.getDate();var cyear=cdt.getFullYear();var timePart=hrs+":"+mins+" "+ampm;if((cyear==year)&&(cdate==date)&&(cmonth==month)){return"today at "+timePart;}
var datePart=(month+1)+"/"+date;if(cyear==year){return datePart+" "+timePart;}
return datePart+"/"+year+" "+timePart;}
$dt.formatNumber=function(n){var neg=n<0;if(neg)n=-n;var s=String(n);var sp=s.split(".");var intpart=sp[0];var ln=intpart.length;var rs="";while(ln>3){rs+=","+intpart.substr(ln-3);intpart=intpart.substr(0,ln-3);ln=ln-3;}
rs=intpart+rs;if(sp.length==2){rs+="."+sp[1];}
if(neg){rs="-"+rs;}
return rs;}
$dt.isNumeric=function(s){var ln=s.length;if(ln==0)return false;var c=s.charAt(0);if(c=="-"){s=s.substr(1);}
var m=s.match(/([^0-9])/g);if(!m)return true;var ln=m.length;if(ln==0)return true;if(ln==1){return m[0]==".";}
return false;}
$dt.numericize=function(s){var ln=s.length;if(ln==0)return s;var rs="";var c=s.charAt(0);if(c=="-"){s=s.substr(1);rs="-";ln--;}
var hitADot=false;for(var i=0;i<ln;i++){c=s.charCodeAt(i);if(c==46){if(!hitADot){rs+=".";hitADot=true;}}else if(47<c&&c<58){rs+=s.charAt(i);}}
return rs;}
$dt.unformatNumber=function(s){if(typeof s=="string"){var rs=s.replace(/\,/g,"");}else{rs=s;}
if(s)$dt.log("unformat",s,rs);return rs;}
$dt.renderUpdates=function(div,updates,options){$.each(updates,function(i,update){$dt.renderUpdate(div,update,options);});}
$dt.post=function(div,url,data){var frm=$('<form action="'+url+'" style="display:none" method="post"/>');div.append(frm);for(var i in data){var cv=data[i];var dt=typeof cv;if((dt!="string")&&(dt!="number")&&(dt!="boolean"))continue;if(dt=="boolean")cv=cv?"1":"0";var inp=$('<input type="text" name="'+i+'"/>');frm.append(inp);inp.attr("value",cv);}
frm.submit();}
$dt.itemlib={};$dt.itemlib.disassembleUri=function(uri){var ex=uri.split("/");if(ex.length<5)$dt.error("Bad form for uri ["+uri+"]");var u=ex[4];var rs={};if(u[0]=="$"){rs.userId=u.substr(1);}else{rs.screenName=u;}
if(ex.length>5){rs.typeName=ex[5];}
if(ex.length>6){rs._id=ex[6];}
return rs;}
$dt.itemlib.getId=function(i){if(typeof i=="string")return $dt.util.lastPart(i);var rf=i._ref;if(rf){return $dt.util.lastPart(rf);}
var uri=i._uri;if(uri){return $dt.util.lastPart(uri);}
return i._id;}
$dt.itemlib.getScreenName=function(i){var rf=i._ref;if(rf){var d=$dt.itemlib.disassembleUri(rf);return d.screenName}
return i.screenName;}
$dt.itemlib.indexByUri=function(a){var rs={};$.each(a,function(i,item){var uri=item._uri;rs[uri]=item;});return rs;}
$dt.itemlib.uri=function(i){if(i._uri)return i._uri;return i._ref;}
$dt.util={};$dt.util.htmlSanitize=function(s){return s.replace(/\&/g,"&amp;").replace(/\</g,"&lt;").replace(/\>/g,"&gt;");}
$dt.util.firstPropertyValue=function(o){for(var i in o){return o[i];}
return null;}
$dt.util.isInt=function(n){var nm=parseInt(n);if($.trim(n)==String(nm)){return nm;}else{return false;}}
$dt.util.centralize=function(e){var sctop=$(document).scrollTop();var winHt=$(window).height();var eht=e.height();var rps=(winHt-eht)/2;var bwd=$('body').width();var ewd=e.width();var posx=(bwd-ewd)/2;e.css("left",posx);e.css("top",rps+sctop);}
$dt.util.cPopUp=null;$dt.util.lighty=null;$dt.util.popItUp=null;$dt.util.popUp=function(cn,kind,callback){if($dt.util.popItUp){$dt.util.popItUp(cn,kind,callback);return;}
var ht=-100;var lg=$('<div class="lighty"/>');$('body').append(lg);lg.css("opacity",0.7);var pw=$('<div class="popUp"/>');var pwx=$('<a class="popUpX" href="javascript:;">X</a>');pw.append(pwx);pwx.click($dt.util.hidePopUp);var pwc=$('<div class="popUpContents"/>');pw.append(pwc);var interactDiv=$('<div class="popUpInteractor"/>');pw.append(interactDiv);var popUpInput=$('<input class="popUpInput" type="text" size="50"/>');interactDiv.append(popUpInput);var buttonP=$('<p class="popUpButtons"/>');interactDiv.append(buttonP);var okButton=$('<input class="popUpButton" type="button" value="OK"/>');buttonP.append(okButton);var cancelButton=$('<input class="popUpButton" type="button" value="CANCEL"/>');buttonP.append(cancelButton);cancelButton.click($dt.util.hidePopUp);$('body').append(pw);var showFun=function(cn,kind,callback){if(kind=="alert"){pwx.hide();buttonP.show();cancelButton.hide();okButton.show();okButton.unbind("click");okButton.click($dt.util.hidePopUp);popUpInput.hide();}else if(kind=="prompt"){pwx.hide();buttonP.show();popUpInput.show();okButton.show();okButton.unbind("click");okButton.click(function(){var rs=popUpInput.attr("value");$dt.util.hidePopUp();callback(rs);});cancelButton.show();cancelButton.unbind("click");cancelButton.click(function(){$dt.util.hidePopUp();callback(null);});}else{pwx.show();buttonP.hide();popUpInput.hide();}
lg.css("width",$('body').width());lg.css("height",1000);lg.show();pw.show();pwc.html(cn);$dt.util.centralize(pw);}
$dt.util.popItUp=showFun;showFun(cn,kind,callback);}
$dt.util.hidePopUp=function(){$('.popUp').hide();$('.lighty').hide();}
$dt.util.helpButton=function(cn){var rs=$('<span class="helpButton">?</span>');rs.click(function(){$dt.util.popUp(cn,"help");});return rs;}
$dt.util.alert=function(txt){$dt.util.popUp(txt,"alert");}
$dt.util.prompt=function(txt,callback){$dt.util.popUp(txt,"prompt",callback);}
$dt.util.lastPart=function(s,delim){if(!delim)delim="/";var idx=s.lastIndexOf(delim);if(idx<0)return s;return s.substring(idx+1);}
$dt.util.splitAtFirst=function(s,delim){if(!delim)delim="/";var idx=s.indexOf(delim);if(idx<0)return[s];return[s.substr(0,idx),s.substr(idx+1)];}
$dt.util.constructUrl=function(purl){var ga="";var clauses=[];var getArgs=purl.getArgs;for(var i in getArgs){clauses.push(i+"="+getArgs[i]);}
var base=purl.base;if(clauses.length==0)return base;return base+"?"+(clauses.join("&"));}
$dt.util.parseUrl=function(url){if(!url)url=decodeURI(window.location.href);var ga={};var idx=url.indexOf("?");if(idx<0){return{base:url,getArgs:ga};}
var getArgs=url.substring(idx+1);var base=url.substring(0,idx);if(getArgs){var sp=getArgs.split("&");var ln=sp.length;for(var i=0;i<ln;i++){var cc=sp[i];var ccs=$dt.util.splitAtFirst(cc,"=");if(ccs.length==2){ga[ccs[0]]=ccs[1];}}}
return{getArgs:ga,base:base};}
$dt.util.unencode={"%20":"+","%3C":"<","%3E":">","%3D":"=","%2C":","};$dt.util.myEncodeURIComponent=function(s){var rs=encodeURIComponent(s);var frs=rs.replace(/\%../g,function(p){var ue=$dt.util.unencode[p];return ue?ue:p;});return frs;}
$dt.util.deepCopy=function(x){if(!x)return x;var nodes=[];function rdeepCopy(o){if(!o)return o;if(typeof o=="object"){var cp=o[" copy "];if(cp)return cp;if($.isArray(o)){var rs=[];}else{rs={};}
o[" copy "]=rs;nodes.push(o);for(var i in o){if(i==" copy ")continue;rs[i]=rdeepCopy(o[i]);}
return rs;}
return o;}
var cp=rdeepCopy(x);$.each(nodes,function(idx,n){delete n[" copy "];});return cp;}})();(function(){var $dt=datatweet;$dt.renderStatusBox=function(div){var statusDiv=$('<div class="statusDiv"/>');div.append(statusDiv);var whatDiv=$('<div class="whatDiv"/>');statusDiv.append(whatDiv);whatDiv.append($('<span class="statusP"/>What are you doing?</p>'));var numLeftSpan=$('<span class="numLeft">140</span>');whatDiv.append(numLeftSpan);var statusInputDiv=$('<div class="statusInputDiv"/>');statusDiv.append(statusInputDiv);var theInput=$('<textarea cols="65" rows="2" id="status"/>');theInput.keyup(function(){var cvl=theInput.attr("value");var cln=cvl.length;numLeftSpan.text(140-cln);updateButton.attr("disabled",cln==0);$dt.log("status","keyup",cvl);});statusInputDiv.append(theInput);var updateButton=$('<input type="button" value="update" class="statusUpdateButton"/>');updateButton.attr("disabled",true);statusDiv.append(updateButton);var updateurl="http://www.datatweet.net/api/updateStatus()";updateButton.click(function(){var twip=$dt.user.twitterProperties;var statusText=theInput.attr("value");if($.trim(statusText)==0)return;statusText=statusText.replace(/\&/g,"&amp;").replace(/\</g,"&lt;").replace(/\>/g,"&gt;");var uptweet={text:statusText,user:{profile_image_url:twip.profile_image_url,screen_name:$dt.user.screenName}};var ctm=Math.floor(((new Date()).getTime())/1000);theInput.attr("value","");$dt.tweetlib.renderTweet($('#tweets'),uptweet,ctm,{prepend:1});$.post(updateurl,{status:statusText},function(rs,status){$dt.log("update","updated");});});}})();(function(){var $dt=datatweet;$dt.renderTwitterProfile=function(div){if(!$dt.eUser)return;var twip=$dt.eUser.twitterProperties;var imAndName=$('<div class="profileImageAndName"/>');div.append(imAndName);var imsz=48;var imsrc=twip.profile_image_url;var imSpan=$('<span class="profileImage"><img width="'+imsz+'" height="'+imsz+'" src="'+imsrc+'"/></span>');imAndName.append(imSpan);var eUser=$dt.eUser;var sname=eUser.screenName;var nameSpan=$('<span class="profileName">'+sname+'</span>');imAndName.append(nameSpan);var uurl="http://www.datatweet.net/tw/"+sname;nameSpan.click(function(){window.location=uurl;});imSpan.click(function(){window.location=uurl;});var sname=$dt.eUser.screenName;var twitprops=$dt.eUser.twitterProperties;var countsTable=$('<table/>');div.append(countsTable);var crow=$('<tr/>');countsTable.append(crow);crow.append($('<td>'+(twitprops.subscription_count)+'</td>'));crow.append($('<td>'+(twitprops.friends_count)+'</td>'));crow.append($('<td>'+(twitprops.followers_count)+'</td>'));var trow=$('<tr/>');countsTable.append(trow);var twurl="http://twitter.com/"+sname+"/";trow.append($('<td><a href="/tw/'+sname+'" class="countLink" title="Data Streams Followed">streams<br/>followed</a></td>'));trow.append($('<td><a href="'+twurl+'following" class="countLink" title="Following at Twitter">people<br/>followed</td>'));trow.append($('<td style="vertical-align:top"><a href="'+twurl+'followers" class="countLink" title="Following at Twitter">followers<br/> </td>'));var twitterP=$('<p class="twitterP">'+sname+'\'s <a href="http://twitter.com/'+sname+'">Twitter</a> page</p>');div.append(twitterP);}
$dt.installTwitterProfileStyles=function(){if($dt.eUser){var twip=$dt.eUser.twitterProperties;}
if(twip){var bkim=twip.profile_background_image_url;}else{var bkim=null;}
if(bkim){$('body').css("background-image",'url("'+bkim+'")');}}
$dt.connectToTwitter=function(){var writeCheckBox=$('#AuthorizeWrite');var authWrite=writeCheckBox.attr("checked");var dst="/twitter_request_token()";if(authWrite){dst+="?write=1"}
var keepLoggedIn=$('#KeepLoggedIn');var kLI=keepLoggedIn.attr("checked")?"1":"0";document.cookie="KeepLoggedIn="+kLI+";max-age=600;path=/;domain=datatweet.net";window.location=dst;}})();(function(){var $dt=datatweet;$dt.tweetlib.limit=20;$dt.tweetlib.tweetValueToString=function(tp,twv,options,tableRow){if(twv._stringValue)return twv._stringValue;var rs="";var clauses=[];if(options){var outputs=options.outputs;}
if(!outputs){outputs=[];for(var name in twv){if(!$dt.tweetlib.tweetValueToString.propertiesToExclude[name])outputs.push(name);}}
$.each(outputs,function(i,name){var cv=twv[name];var isa=$.isArray(cv);if(!cv){if(tableRow){clauses.push("");}
return;}
if(name=="source"){if(isa)return;sid=$dt.itemlib.getId(cv);var sUrl="http://www.ndbc.noaa.gov/station_page.php?station="+sid;var cclause="Source:<a href='"+sUrl+"'>"+$dt.itemlib.getId(cv)+"</a>";clauses.push(cclause);return;}
cclause="";var prop=tp[name];if(prop){var oft=prop._ofType;if(isa&&(oft!="integer")&&(oft!="real"))return;var units=prop.units;var d=prop.title;if(d=="none"){var clauseTitle="";}else{clauseTitle=d?d:name;}
if(oft=="url"){cclause="<a href='"+cv+"'>"+clauseTitle+"</a>";}else if(oft=="dateTime"){cv=$dt.formatDate(cv);}else if((oft=="integer")||(oft=="real")){if(isa){var minv=$dt.formatNumber(cv[0]);var maxv=$dt.formatNumber(cv[1]);cv=minv+"-"+maxv;}else{cv=$dt.formatNumber(cv);}
if(units=="unixTime"){cv=$dt.formatDate(cv);}else if(units=="dollar"){cv="$"+cv;}}
if(oft!="url"){if(clauseTitle&&(clauseTitle!="none")&&!tableRow){cclause+=clauseTitle+":"+cv;}else{cclause+=cv;}}
clauses.push(cclause);}});if(tableRow){$.each(clauses,function(i,s){var td=$('<td/>');tableRow.append(td);if(s)td.html(s);});return null;}else{var rs=clauses.join(", ");twv._stringValue=rs;return rs;}}
$dt.tweetlib.renderTweetEdit=function(div,tweet){var tp=tweet._tweeter.tweetType;var tb=$('<table class="editTweet">');var tweeterUri=tweet._tweeter._uri;var dsu=$dt.itemlib.disassembleUri(tweeterUri);var postUrl="/api/"+(dsu.screenName)+"/"+(dsu._id)+"/insert()";div.append(tb);for(var propname in tp){var prop=tp[propname];if(!prop)continue;var oft=prop._ofType;if(oft){var tr=$('<tr/>');tb.append(tr);var cv=tweet[propname];if(!cv)cv="";var units=prop.units;var d=prop.title;if(d=="none"){var clauseTitle="";}else{clauseTitle=d?d:propname;}
if(units)clauseTitle=clauseTitle+" ("+units+")";var tdtitle=$('<td/>');tr.append(tdtitle);tdtitle.html(clauseTitle);var tdinput=$('<td/>');tr.append(tdinput);if(oft=="url"){var inp=$('<input class="urlInput" size="40"/>');}else if((oft=="integer")||(oft=="real")){if(units=="unixTime"){var inp=$('<input class="dateInput" size="40"/>');cv=$dt.formatDate(cv);}else{cv=$dt.formatNumber(cv);var inp=$('<input class="numericInput" size="40"/>');}}else if(oft=="string"){if(prop.kind=="long"){var inp=$('<textarea class="longStringInput" cols="40" rows="10">');}else{var inp=$('<input type="text" class="stringInput" size="40"/>');}}
tdinput.append(inp);inp.attr("value",cv);}}
var buttonsP=$('<p/>');div.append(buttonsP);var okButton=$('<input type="button" value="Ok"/>');buttonsP.append(okButton);var cancelButton=$('<input type="button" value="Cancel"/>');buttonsP.append(cancelButton);}
$dt.tweetlib.tweetValueToString.propertiesToExclude={_id:1,_createdTime:1,_uri:1};$dt.tweetlib.addToTweetsByIdForMap=function(tweet){var idForMap=tweet._idForMap;if(idForMap){var tws=$dt.tweetlib.tweetsByIdForMap
var cv=tws[idForMap];if(cv){cv.push(tweet);}else{tws[idForMap]=[tweet];}}}
$dt.tweetlib.selectTweets=function(idForMap,scrollIntoView){var tweets=$dt.tweetlib.tweetsByIdForMap[idForMap];var sdiv=$('.selectedValues');sdiv.empty();scrollIntoView=false;if(tweets){$.each(tweets,function(i,tweet){var vp=$('<p class="selectedValue"/>');sdiv.append(vp);var vs=$('<span class="selectedValue"/>');var lnk=$dt.tweeterlib.mkLink(tweet._linkText,tweet._linkTo,"tweeterLink");vp.append(lnk);vp.append(vs);vs.html(tweet._stringValue);});}}
$dt.tweetlib.selectTweetsFromMarker=function(marker){$dt.tweetlib.selectTweets(marker.id,1);}
$dt.tweetlib.highlightTweets=function(idForMap){var allTweets=$dt.tweetlib.tweets;$.each(allTweets,function(i,tweet){var r=tweet.rendered;if(r)r.removeClass("highlightedTweet");});var tweets=$dt.tweetlib.tweetsByIdForMap[idForMap];if(tweets){$.each(tweets,function(i,tweet){r=tweet.rendered;r.addClass("highlightedTweet");});}}
$dt.tweetlib.highlightTweetsFromMarker=function(marker){$dt.tweetlib.highlightTweets(marker.id);}
$dt.tweetlib.linkify=function(s){var r=/(http\:\/\/\S*)/g;return s.replace(r,'<a class="tweetLink" href="$1">$1</a>');}
$dt.tweetlib.renderTweet=function(div,tweet,atTime,options){options=options?options:{};var prepend=options.prepend;var tweeterUri=tweet._tweeter;var summary=tweet._summary;if(tweeterUri){var fromTwitter=false;var tweeter=$dt.tweetlib.tweetersByUri[tweeterUri];var sburi=tweet._subscription;var includeTweeterInfo=options.includeTweeterInfo;var renderInTable=false;if(sburi){var sb=$dt.tweetlib.subscriptionsByUri[sburi];var outputs=sb.outputs;options.outputs=outputs;}
var tp=tweeter.tweetType;if(renderInTable){var tweetRow=$('<tr/>');div.append(tweetRow);}else{tweetRow=null;}
var tws=$dt.tweetlib.tweetValueToString(tp,tweet,options,tweetRow);if(summary){var ivl=tweet._interval;var plural=(ivl<=1)?"":"s";txt="Summary: "+(tweet._tweetCount)+" tweets in "+ivl+" hour"+plural+" "+tws+"."}else{txt=tws;}
if(includeTweeterInfo){var dsu=$dt.itemlib.disassembleUri(tweeterUri);var uname=dsu.screenName;var id=dsu._id;var twim=tweeter.image;var linkText=dsu._id;if(sburi&&sb.getArgs){var linkTo=tweeterUri+"/select()?"+(sb.getArgs.join("&"));}else{linkTo=tweeterUri;}
tweet._linkText=linkText;tweet._linkTo=linkTo;}
if(tweet.latitude&&tweet.longitude){var latitude=tweet.latitude;var longitude=tweet.longitude;if((typeof latitude!="object")&&(typeof longitude!="object")){var includeMapIt=true;}}}else{fromTwitter=true;if(tweet.user){twim=tweet.user.profile_image_url;linkText=tweet.user.screen_name;}else{twim=tweet.profile_image_url;linkText=tweet.from_user;atTime=$dt.parseTwitterCreatedAt(tweet.created_at);}
linkTo="http://twitter.com/"+linkText;txt=$dt.tweetlib.linkify(tweet.text);}
var imsz=48;if(!renderInTable){var tweetDiv=$('<div class="tweetDiv" id="tweet_'+(tweet._id)+'"/>');tweet.rendered=tweetDiv;if(prepend)div.prepend(tweetDiv);else div.append(tweetDiv);}else{tweet.rendered=tweetRow;}
if(tweet._summary&&(tweet._tweetCount>1)){var tsu=tweet._subscription;if(tsu){var ts=$dt.tweetlib.subscriptionsByUri[tsu];var ft=ts.filter;var outs=ts.outputs;}else{var ft=$dt.tweeterlib.filterText;var outs=$dt.tweeterlib.outputs;}
var clauses=[];if(ft)clauses.push("where="+$dt.util.myEncodeURIComponent(ft));if(outs)clauses.push("outputs="+outs);var maxtime=tweet._createdTime;var tint=tweet._interval*3600;var mintime=maxtime-tint;clauses.push("mintime="+mintime);clauses.push("maxtime="+maxtime);var getArgs=clauses.join("&");var detailUrl=tweeterUri+"/select()?"+getArgs;}
if(includeMapIt||detailUrl){if(detailUrl){var detailSpan=$('<span class="gotoDetail">Detail</span>');detailSpan.click(function(){window.location=detailUrl;});}
if(includeMapIt){var mapItSpan=$('<span class="doMapIt">Map It</span>');var minMapExtent=tweeter.minMapExtent;if(!minMapExtent){minMapExtent=$dt.map.defaultMinMapExtent;}else{minMapExtent=parseInt(minMapExtent);}
mapItSpan.click(function(){$dt.theMap.zoomToLocation({latitude:latitude,longitude:longitude},minMapExtent);});}
var tweetLinks=$('<div class="tweetLinks"></div>');if(detailUrl){tweetLinks.append(detailSpan);}else{tweetLinks.append(mapItSpan);}
if(!renderInTable)tweetDiv.append(tweetLinks);tweetLinks.hide();}
if(includeTweeterInfo||fromTwitter){var twimSpan=$('<span class="tweetImage"><img width="'+imsz+'" height="'+imsz+'" src="'+twim+'"/></span>');twimSpan.click(function(){window.location=linkTo;});tweetDiv.append(twimSpan);var idAndD=$('<div class="tweeterLinkAndTweet"/>');tweetDiv.append(idAndD);var lnk=$dt.tweeterlib.mkLink(linkText,linkTo,"tweeterLink");idAndD.append(lnk);var tweetText=$('<span class="tweetText"/>');idAndD.append(tweetText);tweetText.html(" "+txt);var timeP=$('<p class="updateTime"/>');idAndD.append(timeP);timeP.html($dt.timeAgo($dt.currentTime,atTime));}else if(renderInTable){var timeRow=$('<tr/>');div.append(timeRow);var timeTd=$('<td class="updateTime" colspan="5"/>');timeRow.append(timeTd);timeTd.html($dt.timeAgo($dt.currentTime,atTime));}else{var tweetP=$('<p class="tweet"/>');tweetDiv.append(tweetP);tweetP.html(txt);var timeP=$('<p class="updateTime"/>');tweetDiv.append(timeP);timeP.html($dt.timeAgo($dt.currentTime,atTime));}
var idForMap=tweet._idForMap;if(idForMap&&$dt.theMap){$dt.tweetlib.addToTweetsByIdForMap(tweet);tweet.rendered.click(function(){$dt.log("tweet","click",idForMap);if($dt.theMap&&idForMap)$dt.theMap.select(idForMap);$dt.tweetlib.selectTweets(idForMap,false);});tweet.rendered.mouseenter(function(){tweetDiv.addClass("highlightedTweet");$dt.theMap.hover(idForMap);if(tweetLinks){tweetLinks.show();}});tweet.rendered.mouseleave(function(){tweetDiv.removeClass("highlightedTweet");$dt.theMap.unhover(idForMap);if(tweetLinks)tweetLinks.hide();});}else if(tweetLinks){tweetDiv.mouseenter(function(){tweetDiv.addClass("highlightedTweet");tweetLinks.show();});tweetDiv.mouseleave(function(){tweetDiv.removeClass("highlightedTweet");tweetLinks.hide();});}}
$dt.tweetlib.renderMoreButton=function(div){var moreDiv=$('<div class="moreDiv">more</div>');div.append(moreDiv);moreDiv.html("more");moreDiv.click(function(){if($dt.twitterSearchQuery){$dt.twitterSearchNextPage();return;}
var here=window.location.href;var purl=$dt.util.parseUrl(here);var isSelect=purl.base.indexOf("select()")>0;var getArgs=purl.getArgs;var cLimit=$dt.tweetlib.limit;if(!cLimit){cLimit=20;}
var newLimit=cLimit+20;getArgs.limit=newLimit;$dt.tweetlib.limit=newLimit;getArgs.forMore=1;var dest=$dt.util.constructUrl(purl);$.get(dest,null,function(jrs,status){var rs=$.evalJSON(jrs);var rslt=rs.result;$dt.tweetlib.tweeters=rslt.tweeters;$dt.tweetlib.tweets=rslt.tweets;$dt.tweetlib.subscriptions=rslt.subscriptions;$dt.tweetlib.initForRender();if(isSelect){var options={outputs:rslt.outputs};}else{options={includeTweeterInfo:1};}
div.empty();$dt.tweetlib.renderTweets(div,options);if($dt.theMap){$dt.theMap.removeAllMarkers();$dt.theMap.addMarkers(rslt.markers);}
return;});});}
$dt.tweetlib.renderTweets=function(div,options){var includeTweeterInfo=options?(options.includeTweeterInfo):false;var renderInTable=false;if(renderInTable){var tweetTable=$('<table class="tweetTable"/>');div.append(tweetTable);var tweetHolder=tweetTable;}else{tweetHolder=div;}
if($dt.missingTweetsFromTwitter){div.append('<p class="notification">The attempt to grab your timeline from Twitter timed out - Twitter is down or slow</p>');}
var cnt=$dt.tweetlib.tweets.length;if(cnt==0){div.append($('<p class="notification">No tweets found</p>'));return;}
$dt.tweetlib.tweetsByIdForMap={};$dt.currentTime=(new Date().getTime())/1000;$.each($dt.tweetlib.tweets,function(i,tweet){if(tweet._tweeter){$dt.tweetlib.renderTweet(tweetHolder,tweet,parseInt(tweet._createdTime),options);}else{$dt.tweetlib.renderTweet(tweetHolder,tweet,tweet.time,options);}});if(cnt>=100){div.append($('<p class="notification">The DataTweet max of 100 tweets has been reached.</p>'));}else if(cnt==$dt.tweetlib.limit){$dt.tweetlib.renderMoreButton($(".tweetsDiv"));}}
$dt.tweetlib.initForRender=function(){$dt.tweetlib.tweetersByUri=$dt.itemlib.indexByUri($dt.tweetlib.tweeters);if($dt.tweetlib.subscriptions)$dt.tweetlib.subscriptionsByUri=$dt.itemlib.indexByUri($dt.tweetlib.subscriptions);}})();(function(){var $dt=datatweet;$dt.opKinds={"<":"infix",">":"infix","=":"infix","<=":"infix",">=":"infix","+":"infix","|":"infix"," and ":"infix"};$dt.isDigit=function(c){return(48<=c)&&(c<=57);}
$dt.isLetter=function(c){return((65<=c)&&(c<=90))||((97<=c)&&(c<=122))||(c==95);}
$dt.Token=function(kind,value){this.kind=kind;this.value=value;}
$dt.scan=function(s){$dt.log("scan","input",s);var rs=[];var ln=s.length;var cp=0;var ct="";var cnt=0;var max=100;var cc;var c;function addToken(kind){if(ct){if(kind=="delimiter"){if($dt.opKinds[ct]=="infix"){kind="infix";}}
if(kind=="number"){ct=eval(ct);}
rs.push(new $dt.Token(kind,ct));ct="";}}
function at2CharDelim(){if(cp>=ln-1)return false;var c=s.charAt(cp);if((c=="<")||(c==">")){var nxtc=s.charAt(cp+1);return nxtc=="=";}
return false;}
function scanString(){c=s.charAt(cp);var ic=c;cp++;ct=c;while(true){if(cp>=ln)throw({position:cp,now:"unterminatedString"});c=s.charAt(cp);if(c==ic){ct+=c;addToken("string");cp++;return;}
if(c=="\\"){ct+=c;cp++;if(cp>=ln)throw({position:cp,now:"unterminatedString"});ct+=s.charAt(cp);cp++;}
ct+=c;cp++;}}
function scanNumber(){var hitdot=false;ct+=s.charAt(cp);cp++;while(true){if(cnt++>max)throw("whoaa");if(cp>=ln){addToken("number");return;}
c=s.charAt(cp);cc=s.charCodeAt(cp);if($dt.isDigit(cc)){ct+=c;cp++;continue;}
if(c=="."){if(hitdot)throw{position:cp,now:"unexpectedDot"}
hitdot=1;ct+=c;cp++;continue;}
if($dt.isLetter(cc)){throw{position:cp,now:"scanningNumber"}}
$dt.log("scan","number",cp,ct);addToken("number");return;}}
function scanSym(){$dt.log("scan","startsym",cp,c);ct+=s.charAt(cp);cp++;while(true){if(cnt++>max)throw("whoaa");if(cp>=ln){addToken("sym");return;}
if(cp>1000)throw("whoaa");c=s.charAt(cp);cc=s.charCodeAt(cp);if($dt.isLetter(cc)||$dt.isDigit(cc)){ct+=c;cp++;continue;}
$dt.log("scan","sym",cp,ct);addToken("sym");return;}}
while(true){if(cnt++>max)throw("whoaa");if(cp>=ln){if(ct)rs.push(ct);return rs;}
var cc=s.charCodeAt(cp);var c=s.charAt(cp);$dt.log("scan","cc",c,cc);if(c==" "){addToken("unknown");cp++;continue;}
if((c=="'")||(c=='"')){scanString();continue;}
if($dt.isLetter(cc)){scanSym();continue;}
if(c=="-"){addToken();if(cp+1==ln){ct=c;addToken();return rs;}
var nxtcc=s.charCodeAt(cp+1);if($dt.isDigit(nxtcc)){ct="-";cp++;scanNumber();continue;}
rs.push(c);cp++;}
if($dt.isDigit(cc)){scanNumber();continue;}
$dt.log("scan","scanned",cp,ct);addToken();$dt.log("scan","delimiter",cp,c);if(at2CharDelim()){ct=s.charAt(cp)+s.charAt(cp+1);addToken("delimiter");cp+=2;}else{ct=c;addToken("delimiter");cp++;}}
return rs;}})();(function(){var $dt=datatweet;$dt.isArray=function(v){return(typeof v==="object")&&(v.__proto__===Array.prototype);}
$dt.externalize=function(v){if(v===null)return v;if($dt.isArray(v)){var ln=v.length;var rs=[];for(var i=0;i<ln;i++){rs.push($dt.externalize(v[i]));}
return rs;}
if(typeof v==="object"){var xm=v.externalize;if(typeof xm!="undefined"){return v.externalize();}
rs={};var c=v.constructor;if(c){var cnm=c.name;if(cnm){rs._jsClass=cnm;}}
var vproto=v.__proto__;for(var p in v){var pv=v[p];if(vproto){if(vproto[p]&&(vproto[p]===pv))continue;}
rs[p]=$dt.externalize(v[p]);}
return rs;}
return v;}
$dt.internalize=function(v,domain){if(v===null)return v;if($dt.isArray(v)){var ln=v.length;var rs=[];for(var i=0;i<ln;i++){rs.push($dt.internalize(v[i],domain));}
return rs;}
if(typeof v==="object"){rs={};for(var p in v){if(p!="_Class"){rs[p]=$dt.internalize(v[p],domain);}}
var jscname=v._Class;if(jscname){var jsc=domain[jscname];if(!jsc)throw("FailureToFindClass["+jscname+"]");var im=jsc.internalize;if(typeof im!="undefined"){return im(rs);}
return new jsc(rs);}
return rs;}
return v;}})();(function(){var $dt=datatweet;$dt.xob={};$dt.xob.Constant=function(x){this.value=x.value;};$dt.xob.Constant.name="Constant";$dt.xob.mkConstant=function(v,numeric){if(numeric)v=parseFloat(v);return new $dt.xob.Constant({value:v});}
$dt.xob.Constant.prototype.evaluate=function(e){return this.value;}
$dt.xob.Constant.prototype.conciseForm=function(){var vl=this.value;if(typeof vl=="number")return vl;return'"'+vl+'"';}
$dt.xob.Selector=function(x){this.selector=x.selector;}
$dt.xob.Selector.name="Selector";$dt.xob.mkSelector=function(v){return new $dt.xob.Selector({selector:v});}
$dt.xob.Selector.prototype.evaluate=function(e){var sl=this.selector;var rs=e[sl];$dt.log("xob","selector ["+sl+"] = ["+rs+"]");return rs;}
$dt.xob.Selector.prototype.conciseForm=function(){return this.selector;}
$dt.xob.Operator=function(fn,name,conciseName){this.functionOf=fn;this.name=name;this.conciseName=conciseName;}
$dt.xob.operators={};$dt.xob.Application=function(x){var operator=x.operator;if(typeof operator=="string"){var fop=$dt.xob.operators[operator];if(!fop)throw("NoSuchFunction["+operator+"]");this.operator=fop;}else{this.operator=operator;}
this.operands=x.operands;}
$dt.xob.mkApplication=function(operator,operands){return new $dt.xob.Application({operator:operator,operands:operands});}
$dt.xob.Application.prototype.evaluate=function(e){var operands=this.operands;var ln=operands.length;var operandValues=[];for(var i=0;i<ln;i++){var operand=operands[i];operandValues.push(operand.evaluate(e));}
$dt.log("xob","operandValues",operandValues);var rs=this.operator.functionOf.apply(null,operandValues);$dt.log("xob","application rs=["+rs+"]");return rs;}
$dt.xob.Application.prototype.conciseForm=function(){var operator=this.operator;var operands=this.operands;var ln=operands.length;var opname=operator.conciseName;var conciseOperands=[];for(var i=0;i<ln;i++){var operand=operands[i];conciseOperands.push(operand.conciseForm());}
if(opname=="distanceMiles"){return opname+"("+conciseOperands.join(",")+")";}
if((opname=="contains")||(opname=="and")){xopname=" "+opname+" ";}else{xopname=opname;}
return conciseOperands.join(xopname);}
$dt.xob.Application.prototype.externalize=function(){var op=this.operator;var opname=op.name;if(!opname)throw("UnnamedOperator");return{_Class:"Application",operator:opname,operands:$dt.externalize(this.operands)};}
$dt.xob.Application.prototype.operandWithClass=function(cls){var opands=this.operands;var ln=opands.length;for(var i=0;i<ln;i++){var opand=opands[i];if(opand instanceof cls)return opand;}
return null;}
$dt.xob.Application.prototype.operandWithSelector=function(sel){var opands=this.operands;var ln=opands.length;for(var i=0;i<ln;i++){var opand=opands[i];if(opand instanceof $dt.xob.Application){var selp=opand.operandWithClass($dt.xob.Selector);if(selp){if(selp.selector==sel)return opand;}}else if(opand instanceof $dt.xob.Selector){if(opand.selector==sel)return this;}}
return null;}
$dt.xob.Application.prototype.valueAssignedToSelector=function(sel){var selop=this.operandWithSelector(sel);if(!selop)return null;if(selop.operator.name!="equal")return null;var cnstop=selop.operandWithClass($dt.xob.Constant);if(!cnstop)return null;return cnstop.value;}
$dt.xob.operators.distanceMiles={functionOf:function(x){$dt.error("noyet")},name:"distanceMiles",conciseName:"distanceMiles"}
$dt.xob.operators.lessp={functionOf:function(x,y){var rs=x<y;$dt.log("xob",rs+"=lessp("+x+","+y+")");return rs;},name:"lessp",conciseName:"<"}
$dt.xob.operators.contains={functionOf:function(x,y){var rs=true;debugger;$dt.log("xob",rs+"=contains("+x+","+y+")");return rs;},name:"contains",conciseName:"contains"}
$dt.xob.operators["<"]=$dt.xob.operators.lessp;$dt.xob.operators.leq={functionOf:function(x,y){var rs=x<=y;$dt.log("xob",rs+"=leq("+x+","+y+")");return rs;},name:"leq",conciseName:"<="}
$dt.xob.operators["<="]=$dt.xob.operators.leq
$dt.xob.operators.greaterp={functionOf:function(x,y){var rs=x>y;$dt.log("xob",rs+"=greaterp("+x+","+y+")");return rs;},name:"greaterp",conciseName:">"}
$dt.xob.operators[">"]=$dt.xob.operators.greaterp;$dt.xob.operators.geq={functionOf:function(x,y){var rs=x>=y;$dt.log("xob",rs+"=geq("+x+","+y+")");return rs;},name:"geq",conciseName:">="}
$dt.xob.operators[">="]=$dt.xob.operators.geq
$dt.xob.operators.equal={functionOf:function(x,y){var rs=x==y;$dt.log("xob",rs+"=equal("+x+","+y+")");return rs;},name:"equal",conciseName:"="}
$dt.xob.operators["="]=$dt.xob.operators.equal;$dt.xob.operators.and={functionOf:function(){var rs=true;var ln=arguments.length;for(var i=0;i<ln;i++){if(!arguments[i])return false;}
return rs;},name:"and",conciseName:"and"}
$dt.xob.operators["and"]=$dt.xob.operators.and;$dt.xob.operators.or={functionOf:function(){var rs=false;var ln=arguments.length;for(var i=0;i<ln;i++){if(arguments[i])return true;}
return rs;},name:"or",conciseName:"|"}
$dt.xob.operators["|"]=$dt.xob.operators.or;$dt.xob.operators.plus={functionOf:function(x,y){var rs=x+y;$dt.log("xob",rs+"=plus("+x+","+y+")");return rs;},name:"plus",conciseName:"+"}
$dt.xob.operators["+"]=$dt.xob.operators.plus;$dt.xob.opWithReversedArgs={lessp:$dt.xob.operators.greaterp,leq:$dt.xob.operators.geq,equal:$dt.xob.operators.equal,greaterp:$dt.xob.operators.lessp,geq:$dt.xob.operators.leq};})();(function(){var $dt=datatweet;$dt.parse=function(tokens){var cp=0;var ct=tokens[cp];var ln=tokens.length;function fromToken(tk){var k=tk.kind;if(k=="sym")return new $dt.xob.mkSelector(tk.value);if((k=="number")||(k=="string"))return new $dt.xob.mkConstant(tk.value);return tk.value;}
function fromUnits(units){if(units.length==1)return units[0];if(units.length==3)return new $dt.xob.Application({operator:units[1].value,operands:[units[0],units[2]]});throw("notYet");}
function expression(){if(ct.kind=="delimiter")throw({position:cp,err:"unexpectedDelimiter"});var units=[];while(true){var u=unit();units.push(u);if(cp==ln)return fromUnits(units);ct=tokens[cp];var ctv=ct.value;if((ctv==")")||(ctv=="]"))return fromUnits(units);var ctk=ct.kind;if(ctk=="infix"){units.push(ct);cp++;continue;}
throw({position:cp,err:"unexpectedToken",value:ct});}}
function unit(){var cpos=cp;var ct=tokens[cp];var kind=ct.kind;if((kind=="number")||(kind=="sym")||(kind=="string")){cp++;return fromToken(ct);}
var ctv=ct.value;if(ctv=="("){cp++;$rs=expression();if(ct.value!=")")throw({position:cp,error:'expected ")"'});}
throw('notYetUnit');}
return expression();}})();(function(){var $dt=datatweet;$dt.blurr={};$dt.blurr.renderProperty=function(tab,o,propname){var pv=o[propname];var pt=pv._ofType;var numeric=(pt=="real")||(pt=="integer");var tr=$('<tr/>');tab.append(tr);var td=$('<td class="propertyCell"/>');tr.append(td);if(numeric){var lbInput=$('<input class="propertyValueInput" type="text">');td.append(lbInput);}
if(numeric){tr.append($('<td class="propertyInequality"> <= </td>'));}else{tr.append($('<td/>'));}
var td=$('<td class="propertyCell"/>');tr.append(td);td.html(propname);if(numeric){tr.append($('<td class="propertyInequality"> <= </td>'));}else{tr.append($('<td class="propertyInequality"> = </td>'));}
var td=$('<td class="propertyCell"/>');tr.append(td);var ubInput=$('<input class="propertyValueInput" type="text">');td.append(ubInput);ubInput.change(function(){alert(1234);});var td=$('<td class="propertyCell"/>');tr.append(td);if(pv.units)td.html(pv.units);}
$dt.blurr.renderProperties=function(div,o){var tab=$('<table class="propertyTable"/>');div.append(tab);for(var i in o){var pv=o[i];if(pv&&(typeof pv=="object")&&pv._ofType)$dt.blurr.renderProperty(tab,o,i);}}
$dt.blurr.renderAsType=function(div,o){$dt.log("blurr","renderAsType",o);$dt.blurr.renderProperties(div,o);}})();(function(){var $dt=datatweet;$dt.filterlib={};var lib=$dt.filterlib;$dt.filterlib.throttleHelp="If an update interval is set, only one tweet per interval will be emitted. "+'If you select "sample", the last tweet in each interval will be emitted, and  if "summarize" is selected a summary of all of the tweets '+'in each interval will be emitted instead. If the interval is 24 hours,  the time at which samples or summaries are emitted is also settable';$dt.filterlib.dailyHelp="This stream is updated once a day with a batch of tweets. If you follow this stream, a summary is tweeted into your timeline at the time indicated here.";$dt.filterlib.propertiesToExclude={latitude:1,longitude:1};$dt.filterlib.removeLatLonFromDistanceMiles=function(s){var m=s.match(/(.*)distanceMiles\((\".*\")(.*)\)(.*)/);if(m){return m[1]+"distanceMiles("+m[2]+")"+m[4];}
return s;}
$dt.filterlib.clauseLB=function(cl){if(!cl)return"";if(typeof cl.geq!="undefined")return cl.geq;if(typeof cl.leq!="undefined")return cl.leq;if(typeof cl.equal!="undefined")return cl.equal;if(typeof cl.contains!="undefined")return cl.contains;if(typeof cl.distanceMiles!="undefined")return cl.distanceMiles;return"";}
$dt.filterlib.clauseUB=function(cl){if(!cl)return"";if((typeof cl.leq!="undefined")&&(typeof cl.geq!="undefined"))return cl.leq;if(typeof cl.whereFrom!="undefined")return cl.whereFrom;return"";}
$dt.filterlib.clauseOP=function(cl){if(!cl)return undefined;if(typeof cl.geq!="undefined")return"<=";if(typeof cl.leq!="undefined")return"<=";if(typeof cl.greaterp!="undefined")return"<";if(typeof cl.lessp!="undefined")return"<";if(typeof cl.equal!="undefined")return"=";return undefined;}
lib.setSubscriptionString=function(){lib.setFrequencyInputVisibility();var ftxt=lib.filterText;var s="";if(ftxt){s="where="+ftxt+"&";}
var otxt=lib.outputsText;s+="outputs="+lib.outputsText
if(lib.interval)s+="&interval="+(lib.interval);if(lib.offset)s+="&offset="+(lib.offset);if(lib.summarize)s+="&summarize=1";lib.subscription=s;var csubs=lib.cSubscriptions;var csubsStrings=$.map(csubs,function(clauses){return $dt.filterlib.removeLatLonFromDistanceMiles(clauses.join("&"));});var followingThis=$.inArray(s,csubsStrings)>=0;var cnt=csubs.length;$dt.log("subscription","setSubscriptionString",s,"csubs",csubs);var sspan=$("#filterStatus");if($dt.subscriptionName){sspan.html("Editing this filter");return;}
var rb=$('#replaceFollowButton');if(followingThis){var msg="Following this filter";if(rb)rb.hide();$('#followButton').hide();}else{$('#followButton').show();if(rb)rb.show();if(cnt==1){msg="Following a different filter on this stream";}else if(cnt>1){msg="Following "+cnt+" other filters on this stream, but not this one";}else{msg="Not yet following this stream";}}
sspan.html(msg);}
$dt.filterlib.setFilterFromInputs=function(){$dt.filterlib.theFilter=$dt.filterlib.buildFilterFromInputs();var f=$dt.filterlib.theFilter;var cf=f?f.conciseForm():null;$dt.filterlib.filterText=cf;$("#filterText").text(cf?cf:"none");var drow=lib.distanceRow;if(drow){if(lib.locationDetermined())drow.hide();else drow.show();}}
$dt.filterlib.containsAllOutputs=function(o){var alli=$dt.filterlib.alloutputs;var ln=alli.length;return o.length==ln;}
$dt.filterlib.setOutputsFromInputs=function(){var o=[];for(var i in $dt.filterlib.outputCheckboxes){var cbx=$dt.filterlib.outputCheckboxes[i];if(cbx.attr("checked"))o.push(i);}
$dt.filterlib.outputs=o;$dt.filterlib.outputsText=o.join(",");$('#outputsText').text($dt.filterlib.outputsText.replace(/\,/g,", "));}
$dt.filterlib.tweeterGetArgs=function(){var clauses=[];if($dt.filterlib.theFilter){clauses.push("where="+$dt.util.myEncodeURIComponent($dt.filterlib.filterText));}
var o=$dt.filterlib.outputs;if(o&&(typeof o=="object")){var so=o.join(",");clauses.push("outputs="+so);}
if($dt.filterlib.interval){clauses.push("interval="+$dt.filterlib.interval);}
if($dt.filterlib.offset){clauses.push("offset="+$dt.filterlib.offset);}
if($dt.filterlib.summarize){clauses.push("summarize=1");}
var rs=clauses.join("&");return rs;}
$dt.filterlib.renderProperty=function(tab,o,propname,cl){function operatorOfClause(cl){if(!cl)return null;if(cl.leq){if(cl.geq)return"between";return"leq";}
if(cl.geq)return"geq";if(cl.equal)return"equal";if(cl.contains)return"contains";return null;}
var opOfClause=operatorOfClause(cl);if($dt.filterlib.propertiesToExclude[propname])return;var filteredProperties=$dt.tweeterlib.theTweeter.filteredProperties;if(typeof filteredProperties=="undefined"){var filtered=1;}else{filtered=$.inArray(propname,filteredProperties)>=0;}
var pv=o[propname];var pt=pv._ofType;var units=pv.units;if(units=="unixTime")return;var tr=$('<tr/>');tab.append(tr);var td=$('<td class="propertyCell"/>');tr.append(td);td.html(propname);if(filtered){var numeric=(pt=="real")||(pt=="integer");var isDate=(pt=="dateTime");var clOp=$dt.filterlib.clauseOP(cl);if(numeric){var td=$('<td class="filterOpCell"/>');tr.append(td);var opInput=$('<select class="opSelect">'+'<option value="geq" selected>is at least</option>'+'<option value="leq">is at most</option>'+'<option value="equal">equals</option>'+'<option value="between">is between</option>'+'</select>');td.append(opInput);$dt.filterlib.operators[propname]="geq";}else if(isDate){var td=$('<td class="filterOpCell"/>');tr.append(td);var opInput=$('<select class="opSelect">'+'<option value="geq" selected>on or after</option>'+'<option value="leq">on or before</option>'+'<option value="between">is between</option>'+'</select>');td.append(opInput);$dt.filterlib.operators[propname]="geq";}else{var td=$('<td class="filterOpCell"/>');tr.append(td);var opInput=$('<select class="opSelect">'+'<option value="equal" selected>equals</option>'+'<option value="contains">contains</option>'+'</select>');td.append(opInput);$dt.filterlib.operators[propname]="equal";}
var setOp=function(op){if(!op)return;opInput.attr("value",op);whenOperatorChanges();}
var td=$('<td class="propertyCell"/>');tr.append(td);var lbTd=td;var lbInput=$('<input class="lbInput" size="20" type="text">');$dt.filterlib.lbInputs[propname]=lbInput;td.append(lbInput);if(cl){var ivl=$dt.filterlib.clauseLB(cl);lbInput.attr("value",numeric?$dt.formatNumber(ivl):ivl);}
lbInput.keyup(function(){lib.setFilterFromInputs();lib.setSubscriptionString();});if(isDate){lbInput.change(function(){var dvl=$.trim(lbInput.attr("value"));if(dvl){var dprs=Date.parse(dvl);if(isNaN(dprs)){$dt.util.alert("Expected format for dates:  mm/dd/yy or mm/dd/yyyy");lbInput.attr("value",null);lib.setFilterFromInputs();lib.setSubscriptionString();}}});}
var andTd=$('<td class="andCell"/>');tr.append(andTd);var andSpan=$('<span> and </span>');andTd.append(andSpan);if(!numeric){andSpan.hide();}
var td=$('<td class="propertyCell"/>');tr.append(td);if(numeric||isDate){var ubInput=$('<input class="ubInput" size="20" type="text">');$dt.filterlib.ubInputs[propname]=ubInput;td.append(ubInput);if(opInput.attr("value")!='between'){ubInput.hide();andSpan.hide();}
if(cl){var club=$dt.filterlib.clauseUB(cl);if(numeric){var fub=$dt.formatNumber(club);}else{fub=club;}
ubInput.attr("value",club);}
ubInput.keyup(function(){lib.setFilterFromInputs();lib.setSubscriptionString();});}
function whenOperatorChanges(){var op=opInput.attr("value");$dt.filterlib.operators[propname]=op;if(op=='between'){if(ubInput){ubInput.show();andSpan.show();}}else{if(ubInput){ubInput.hide();andSpan.hide();}}}
opInput.change(function(){whenOperatorChanges();$dt.filterlib.setFilterFromInputs();lib.setSubscriptionString();})
var td=$('<td class="propertyCell"/>');tr.append(td);if(pv&&pv.units)td.html(pv.units);setOp(opOfClause);$dt.filterlib.isNumeric[propname]=numeric;$dt.filterlib.isDate[propname]=isDate;}else{td=$('<td  colspan="5"/>');tr.append(td);}
var td=$('<td class="includedCell">output:</td>');tr.append(td);var td=$('<td class="propertyCell"/>');tr.append(td);var cbx=$('<input type="checkbox" class="outputCheckbox"/>');td.append(cbx);var isOutput=$.inArray(propname,$dt.filterlib.outputs)>=0;cbx.attr("checked",isOutput);$dt.filterlib.outputCheckboxes[propname]=cbx;cbx.change(function(){lib.setOutputsFromInputs();lib.setSubscriptionString();});}
$dt.filterlib.categoryIsSet=function(){var catBy=$dt.filterlib.categorizeBy;if(!catBy)return false;var tf=$dt.filterlib.theFilter;if(!tf)return false;var op=tf.operandWithSelector(catBy);return op?true:false;}
lib.locationDetermined=function(){if(!lib.categoryIsSet())return false;var dByCat=$dt.tweeterlib.theTweeter.determinedByCategory;if(!dByCat)return false;return $.inArray("latitude",dByCat)>=0;}
$dt.filterlib.whichCity=function(){var tweeter=$dt.tweeterlib.theTweeter;if(tweeter&&tweeter._id=="DC311"){var tweeterCity="Washington, DC";}
if(tweeterCity){return tweeterCity;}else{var catBy=$dt.filterlib.categorizeBy;if(catBy=="city"){if($dt.filterlib.theFilter){return $dt.filterlib.theFilter.valueAssignedToSelector("city");}}}
return null;}
$dt.filterlib.renderDistanceMiles=function(tab,cl){var propname="distanceMiles";var tr=$('<tr class="distanceRow"/>');$dt.filterlib.distanceRow=tr;tab.append(tr);td=$('<td >is at most</td>');tr.append(td);td=$('<td/>');tr.append(td);var lbInput=$('<input class="lbInput" type="text">');$dt.filterlib.lbInputs[propname]=lbInput;td.append(lbInput);if(cl){lbInput.attr("value",$dt.formatNumber($dt.filterlib.clauseLB(cl)));}
lbInput.keyup(function(){lib.setFilterFromInputs();lib.setSubscriptionString();});var td=$('<td class="propertyCell"/>');tr.append(td);td.html("miles from");var td=$('<td class="addressCell"/ colspan="5"/>');tr.append(td);var ubInput=$('<input class="addressInput" size="60" type="text">');$dt.filterlib.ubInputs[propname]=ubInput;$dt.filterlib.addressInput=ubInput;td.append(ubInput);if(cl){ubInput.attr("value",cl.selectorParams[0]);}else{var city=lib.whichCity();if(city){var ias="<type address here>, "+city;}else{ias="<address, city, or other geographic feature>";}
$dt.filterlib.initialAddressString=ias;ubInput.attr("value",ias);ubInput.css("color","grey");ubInput.focus(function(){var cvl=ubInput.attr("value");if(cvl==$dt.filterlib.initialAddressString){if(!lib.whichCity())ubInput.attr("value","");ubInput.css("color","black");}});}
ubInput.keyup(function(){lib.setFilterFromInputs();lib.setSubscriptionString();});if(lib.locationDetermined())tr.hide();}
$dt.filterlib.renderProperties=function(div,o,icl){$dt.log("filterlib",o,icl);var tab=$('<table class="propertyTable"/>');div.append(tab);if(o.latitude&&o.longitude)$dt.filterlib.renderDistanceMiles(tab,icl.distanceMiles);for(var i in o){var pv=o[i];var cl=icl[i];if(pv&&(typeof pv=="object")&&pv._ofType)$dt.filterlib.renderProperty(tab,o,i,cl);}}
$dt.filterlib.distanceMilesClauses=function(){var refpos=$dt.filterlib.ubInputs["distanceMiles"];if(!refpos)return[];var dist=$dt.filterlib.lbInputs["distanceMiles"];var refposv=refpos.attr("value");if((typeof refposv=="string")&&(refposv.length>0)){if(refposv==$dt.filterlib.initialAddressString){var refposcn=null;}else{var refposcn=$dt.xob.mkConstant(refposv,false);var latlon=$dt.filterlib.latlon;if(latlon){var latcn=$dt.xob.mkConstant(latlon.latitude,true);var loncn=$dt.xob.mkConstant(latlon.longitude,true);}}}
var distv=dist.attr("value");if((typeof distv=="string")&&(distv.length>0)){distv=$dt.unformatNumber(distv);if(!$dt.isNumeric(distv)){$dt.util.alert("This is a numeric field");distv=$dt.numericize(distv);dist.attr("value",distv);}
var distcn=$dt.xob.mkConstant(distv,true);}
if(!distcn||!refposcn)return[];if(latlon){var args=[refposcn,latcn,loncn];}else{args=[refposcn];}
var dcmp=$dt.xob.mkApplication("distanceMiles",args);return[$dt.xob.mkApplication("<=",[dcmp,distcn])];}
$dt.filterlib.buildFilterFromInputs=function(){var ops=$dt.filterlib.operators;var isNumeric=$dt.filterlib.isNumeric;var isDateA=$dt.filterlib.isDate;var clauses=$dt.filterlib.distanceMilesClauses();for(var i in isNumeric){var ubcn=null;var lbcn=null;var numeric=isNumeric[i];var isDate=isDateA[i];var clOp=$dt.filterlib.operators[i];if((numeric||isDate)&&(clOp=="between")){var ubi=$dt.filterlib.ubInputs[i];var ubv=ubi.attr("value");if(numeric&&(typeof ubv=="string")&&(ubv.length>0)){ubv=$dt.unformatNumber(ubv);if(!$dt.isNumeric(ubv)){$dt.util.alert("This is a numeric field");ubv=$dt.numericize(ubv);ubi.attr("value",ubv);}
ubcn=$dt.xob.mkConstant(ubv,numeric);}
if(isDate&&(typeof ubv=="string")&&(ubv.length>0)){ubcn=$dt.xob.mkConstant(ubv,numeric);}}
if(numeric){var lbi=$dt.filterlib.lbInputs[i];var lbv=$dt.unformatNumber(lbi.attr("value"));if((typeof lbv=="string")&&(lbv.length>0)){if(!$dt.isNumeric(lbv)){$dt.util.alert("This is a numeric field");lbv=$dt.numericize(lbv);lbi.attr("value",lbv);}
lbcn=$dt.xob.mkConstant(lbv,numeric);}}else{var lbi=$dt.filterlib.lbInputs[i];var lbv=lbi.attr("value");if($.trim(lbv)){lbcn=$dt.xob.mkConstant(lbv,numeric);}}
if(!lbcn&&!ubcn)continue;var sl=$dt.xob.mkSelector(i);var cop=(clOp=="between")?"geq":(clOp=="equal")?"=":clOp;if(lbcn){if(cop=="geq"){cl=$dt.xob.mkApplication("leq",[lbcn,sl]);}else{cl=$dt.xob.mkApplication(cop,[sl,lbcn]);}
clauses.push(cl);}
if((clOp=="between")&&ubcn){var cl=$dt.xob.mkApplication("leq",[sl,ubcn]);clauses.push(cl);}}
if(clauses.length>1){var rs=$dt.xob.mkApplication("and",clauses);}else{rs=clauses[0];}
return rs;}
$dt.filterlib.setFrequencyProps=function(){var fsel=$('.frequencySelect');var summarizeSpan=$('.summarizeSpan');var dailySpan=$('.dailySpan');var summarize=($(".summarizeSelect").attr("value"))=="summarize"
var vl=fsel.attr('value');if(vl=="none"){$dt.filterlib.offset=null;$dt.filterlib.interval=null;$dt.filterlib.summarize=false;summarizeSpan.hide();dailySpan.hide();}else{$dt.filterlib.interval=vl;$dt.filterlib.offset=null;summarizeSpan.show();$dt.filterlib.summarize=summarize;if(vl=="24"){dailySpan.show();}else{dailySpan.hide();}}
lib.setSubscriptionString();}
lib.checkTime=function(s){var m=s.match(/^(\d\d?)(?:\:(\d\d))?$/);if(!m)return false;var hr=parseInt(m[1]);if(m[2]){var mn=parseInt(m[2]);}else{mn=0;}
if((hr<=12)&&(mn<=60))return{hour:hr,minute:mn};return false;}
lib.setDailyAtTimeProps=function(continuation){var dailyAtTimeE=$('.dailyAtTime');var amOrPmE=$('.amOrPm');var atTime=dailyAtTimeE.attr("value");var tm=lib.checkTime(atTime);var amPm=amOrPmE.attr("value");if(tm){var hr=tm.hour;var mn=tm.minute;if(amPm=="pm"){if(hr<12){hr+=12;}}else{if(hr==12){hr=0;}}
lib.offset=hr+":"+mn;lib.setSubscriptionString();if(typeof continuation=="function")continuation();}else{$dt.util.alert("The time should have the form hh or hh:mm");}}
$dt.filterlib.setFrequencyInputs=function(){var fsel=$('.frequencySelect');var summarizeSpan=$('.summarizeSpan');var dailySpan=$('.dailySpan');var dailyAtTimeE=$('#dailyAtTime');var amOrPmE=$('#amOrPm');var interval=$dt.filterlib.interval;var offset=$dt.filterlib.offset;fsel.attr("value",interval?interval:"none");var summarize=lib.summarize;$(".summarizeSelect").attr("value",summarize?"summarize":"sample");if(!interval){summarizeSpan.hide();dailySpan.hide();}else{summarizeSpan.show();if(parseInt(interval)==24){dailySpan.show();}else{dailySpan.hide();}}
dailyAtTimeE.attr("value",offset);}
$dt.filterlib.init=function(){var allo=[];var fsel=$('.frequencySelect');var summarizeSpan=$('.summarizeSpan');if(fsel){$dt.filterlib.setFrequencyInputs();}
var dailyAtTimeE=$('.dailyAtTime');var amOrPmE=$('.amOrPm');dailyAtTimeE.change($dt.filterlib.setDailyAtTimeProps);amOrPmE.change($dt.filterlib.setDailyAtTimeProps);fsel.change($dt.filterlib.setFrequencyProps);$(".summarizeSelect").change($dt.filterlib.setFrequencyProps);for(var i in $dt.filterlib.tweetType){if($dt.filterlib.propertiesToExclude[i])continue;var pv=$dt.filterlib.tweetType[i];if(pv&&(typeof pv=="object")&&(pv._ofType)){allo.push(i);}}
$dt.filterlib.alloutputs=allo;if(!$dt.filterlib.outputs){$dt.filterlib.outputs=allo;}}
lib.setFrequencyInputVisibility=function(){var catBy=$dt.filterlib.categorizeBy;var showFrequencyInput=!catBy||$dt.filterlib.categoryIsSet();var fin=$('.frequencyP');if(showFrequencyInput){fin.show('fast');}else{fin.hide('fast');lib.interval=0;lib.summarize=0;}}
$dt.filterlib.renderFilterForType=function(div,tp,fl){if($('.throttleHelp'))$('.throttleHelp').append($dt.util.helpButton($dt.filterlib.throttleHelp));if($('.dailyHelp'))$('.dailyHelp').append($dt.util.helpButton($dt.filterlib.dailyHelp));$dt.filterlib.lbInputs={};$dt.filterlib.ubInputs={};$dt.filterlib.operators={};$dt.filterlib.isNumeric={};$dt.filterlib.isDate={};$dt.filterlib.outputCheckboxes={};var icl=$dt.filterlib.indexClauses($dt.filterlib.theFilter);$dt.log("filterlib","renderAsType",$dt.filterlib.tweetType);$dt.filterlib.renderProperties(div,$dt.filterlib.tweetType,icl);$dt.filterlib.setFilterFromInputs();$dt.filterlib.setOutputsFromInputs();lib.setSubscriptionString();}
$dt.filterlib.indexClauses=function(f){var rs={};if(!f)return rs;if(f.operator.name=="and"){var clauses=f.operands;}else{var clauses=[f];}
$.each(clauses,function(i,c){var opands=c.operands;var op0=opands[0];var op1=opands[1];var opr=c.operator.name;var selectorParams=null;if(op0 instanceof $dt.xob.Constant){var cop=op0;var selop=op1;var ropr=$dt.xob.opWithReversedArgs[opr];if(ropr)opr=ropr.name;}else if(op1 instanceof $dt.xob.Constant){cop=op1;selop=op0;}else{$dt.error("internal error:no constant operand");}
if(selop instanceof $dt.xob.Application){var sel=op0.operator.name;var selOperands=selop.operands;selectorParams=[selOperands[0].value];}else if(selop instanceof $dt.xob.Selector){var sel=selop.selector;}else{$dt.error("internal error: no selector");}
var cc=rs[sel];if(!cc){cc={selector:sel};rs[sel]=cc;}
cc[opr]=cop.value;if(selectorParams)cc.selectorParams=selectorParams;});return rs;}
$dt.filterlib.setCategory=function(catId){var catBy=$dt.filterlib.categorizeBy;if(catBy=="city"){var cAddr=$dt.filterlib.addressInput.attr("value");var nas="<type address here>, "+catId;$dt.filterlib.initialAddressString=nas;$dt.filterlib.addressInput.attr("value",nas);$dt.filterlib.addressInput.css("color","grey");}
var srcInput=$dt.filterlib.lbInputs[catBy];srcInput.attr('value',catId);}
lib.setCategoryAndUpdate=function(catId){$dt.filterlib.setCategory(catId);$dt.filterlib.setFilterFromInputs();lib.setSubscriptionString();}
$dt.filterlib.setCategoryFromMarker=function(m){lib.setCategoryAndUpdate(m.category);}
$dt.filterlib.goToTweeterAction2=function(tweeterPath,post){if(post){var dsasm=$dt.itemlib.disassembleUri($dt.tweeterlib.theTweeter._uri);var postArgs={where:$dt.filterlib.filterText,outputs:$dt.filterlib.outputsText,user:dsasm.screenName,tweeter:dsasm._id};if($dt.filterlib.interval)postArgs.interval=$dt.filterlib.interval;if($dt.filterlib.offset)postArgs.offset=$dt.filterlib.offset;if($dt.filterlib.summarize)postArgs.summarize=$dt.filterlib.summarize;if($dt.subscriptionName)postArgs.name=$dt.subscriptionName;$dt.post($("body"),tweeterPath,postArgs);}else{var getArgs=$dt.filterlib.tweeterGetArgs();var loc=tweeterPath+"?"+getArgs;window.location=loc;}}
$dt.filterlib.goToTweeterActionWithDelay=function(tweeterPath,post){if(tweeterPath.indexOf("follow")>=0){setTimeout(function(){$dt.filterlib.goToTweeterAction3(tweeterPath,post);},$dt.eventualConsistencyDelay);}else{$dt.filterlib.goToTweeterAction3(tweeterPath,post);}}
$dt.filterlib.goToTweeterAction0=function(tweeterPath,post){var filter=$dt.filterlib.filterText;if(!filter){$dt.filterlib.goToTweeterAction2(tweeterPath,post);return;}
var parseUrl="http://www.datatweet.net/api/parseFilter()";$.get(parseUrl,{where:filter},function(irs,status){var rs=$.evalJSON(irs);if(rs.status==200){var vl=rs.result;if(typeof vl=="object"){var gaddr=vl.gAddress;var placeInput=$dt.filterlib.ubInputs.distanceMiles;placeInput.attr("value",gaddr);$dt.filterlib.latlon={latitude:vl.latitude,longitude:vl.longitude};$dt.filterlib.setFilterFromInputs();}
$dt.filterlib.goToTweeterAction2(tweeterPath,post);}else{$dt.util.alert(rs.error);}});}
$dt.filterlib.goToTweeterAction=function(tweeterPath,post){var dailyAtTimeE=$('.dailyAtTime');if(dailyAtTimeE.length){lib.setDailyAtTimeProps(function(){$dt.filterlib.goToTweeterAction0(tweeterPath,post);});}
$dt.filterlib.goToTweeterAction0(tweeterPath,post);}})();(function(){var $dt=datatweet;$dt.map=function(div){this.div=div;this.markers=[];};$dt.map.degreeToMeter=111120;$dt.map.defaultMinMapExtent=200000;$dt.map.prototype.initialize=function(){var latlng=new google.maps.LatLng(35,-120);var myOptions={zoom:5,center:latlng,mapTypeId:google.maps.MapTypeId.TERRAIN};var map=new google.maps.Map(this.div[0],myOptions);this.map=map;};$dt.map.prototype.clickCallback=function(m){$dt.log("map","clickCallback",m);}
$dt.map.centerExtentToLatLngBounds=function(pnt,extentMeters){var cntlat=pnt.latitude;var cntlng=pnt.longitude;var extent=extentMeters/($dt.map.degreeToMeter);var minlat=cntlat-0.5*extent;var maxlat=cntlat+0.5*extent;var cosLat=Math.cos(cntlat*(Math.PI/180.0));var lngExtent=extent/cosLat;var minlng=Math.max(-180,cntlng-0.5*lngExtent);var maxlng=Math.min(cntlng+0.5*lngExtent,180);var minLatLng=new google.maps.LatLng(minlat,minlng);var maxLatLng=new google.maps.LatLng(maxlat,maxlng);return new google.maps.LatLngBounds(minLatLng,maxLatLng);}
$dt.map.computeMarkerBounds=function(markers){if(!markers.length)return null;var m0=markers[0];var maxlat,maxlng;var minlat=maxlat=m0.lat;var minlng=maxlng=m0.lng;var minExtent=0;$.each(markers,function(i,m){m.lat=parseFloat(m.lat);m.lng=parseFloat(m.lng);var lat=m.lat;var lng=m.lng;var mmex=m.minMapExtent;if(mmex&&(mmex>minExtent)){minExtent=mmex;}
if(lat<minlat){minlat=lat;}else if(lat>maxlat){maxlat=lat;}
if(lng<minlng){minlng=lng;}else if(lng>maxlng){maxlng=lng;}});var cntlat=0.5*(maxlat+minlat);if(!minExtent)minExtent=$dt.map.defaultMinMapExtent;minExtent=minExtent/($dt.map.degreeToMeter);if((maxlat-minlat)<minExtent){minlat=cntlat-0.5*minExtent;maxlat=cntlat+0.5*minExtent;}
var cosLat=Math.cos(cntlat*(Math.PI/180.0));var minLngExtent=minExtent/cosLat;if((maxlng-minlng)<minLngExtent){var cntlng=0.5*(minlng+maxlng);minlng=Math.max(-180,cntlng-0.5*minLngExtent);maxlng=Math.min(cntlng+0.5*minLngExtent,180);}
var minLatLng=new google.maps.LatLng(minlat,minlng);var maxLatLng=new google.maps.LatLng(maxlat,maxlng);return new google.maps.LatLngBounds(minLatLng,maxLatLng);}
$dt.map.prototype.hover=function(id){var hm=this.hoverMarkersById[id];var cm=this.currentlyHoveredMarker;if(hm!==cm){if(cm)cm.set_visible(false);if(hm){hm.set_visible(true);this.currentlyHoveredMarker=hm;}}}
$dt.map.prototype.unhover=function(id){var hm=this.hoverMarkersById[id];var cm=this.currentlyHoveredMarker;if(hm){hm.set_visible(false);if(cm==hm){this.currentlyHoveredMarker=null;}}}
$dt.map.prototype.select=function(id){var hm=this.selectedMarkersById[id];var cm=this.currentlySelectedMarker;if(hm!==cm){if(cm)cm.set_visible(false);if(hm){hm.set_visible(true);this.currentlySelectedMarker=hm;}}}
$dt.map.prototype.removeAllMarkers=function(){var markers=this.markers;$.each(markers,function(i,m){m.set_map(null);});this.markers=[];}
$dt.map.prototype.zoomToLocation=function(pnt,extent){var bnds=$dt.map.centerExtentToLatLngBounds(pnt,extent);this.map.fitBounds(bnds);}
$dt.map.prototype.addMarkers=function(markers){var thisHere=this;thisHere.hoverMarkersById={};thisHere.selectedMarkersById={};thisHere.currentlyHoveredMarker=null;thisHere.currentlySelectedMarker=null;var bnds=$dt.map.computeMarkerBounds(markers);$dt.map.theBounds=bnds;if(bnds){this.map.fitBounds(bnds);}
var hoverImage=new google.maps.MarkerImage(thisHere.hoverIcon,new google.maps.Size(35,35),new google.maps.Point(0,0),new google.maps.Point(10,16));$.each(markers,function(i,m){var latlng=new google.maps.LatLng(m.lat,m.lng);var selectedImage=new google.maps.MarkerImage(thisHere.selectedIcon,new google.maps.Size(35,35),new google.maps.Point(0,0),new google.maps.Point(10,16));var selectedOptions={map:thisHere.map,position:latlng,icon:selectedImage};var selectedMarker=new google.maps.Marker(selectedOptions);selectedMarker.set_visible(false);var mid=m.id;thisHere.selectedMarkersById[mid]=selectedMarker;var baseIcon="http://www.datatweet.net/"+$dt.imagesDir+"/"+(m.baseIconDir)+"/mapicon.png";$dt.log("map",baseIcon);var options={map:thisHere.map,position:latlng,title:m.title,icon:baseIcon};var marker=new google.maps.Marker(options);thisHere.markers.push(marker);var hoverOptions={map:thisHere.map,position:latlng,icon:hoverImage};var hoverMarker=new google.maps.Marker(hoverOptions);thisHere.markers.push(hoverMarker);hoverMarker.set_visible(false);thisHere.hoverMarkersById[mid]=hoverMarker;google.maps.event.addListener(marker,'mouseover',function(){thisHere.hover(m.id);if(thisHere.hoverCallback)thisHere.hoverCallback(m);});google.maps.event.addListener(marker,'mouseout',function(){thisHere.unhover(m.id);if(thisHere.unhoverCallback)thisHere.unhoverCallback(m);});google.maps.event.addListener(marker,'click',function(){thisHere.select(m.id);if(thisHere.clickCallback)thisHere.clickCallback(m);});google.maps.event.addListener(marker,'dblclick',function(){if(thisHere.dblclickCallback)thisHere.dblclickCallback(m);});});}})();(function(){var $dt=datatweet;$dt.typelib={};var lib=$dt.typelib;lib.maxNameIndex=function(o,name){var r=new RegExp(name+"(\\d+)$");var n=0;for(var i in o){var m=i.match(r);if(m){n=Math.max(n,parseInt(m[1]));}}
return n;}
lib.addField=function(table){var fld={_ofType:"string"};var idx=lib.maxNameIndex(lib.type,"newField")+1;var propname="newField"+idx;lib.type[propname]=fld;lib.renderFieldEdit(table,propname);return propname;}
lib.changePropname=function(input,oldName,newName){newName=$.trim(newName);if(newName==oldName)return true;if(newName.length==0){$dt.util.alert("Attempt to set property name to ''");input.attr("value",oldName);return false;}
var nvl=lib.type[newName];if(nvl){$dt.util.alert('The property name "'+newName+': is taken');input.attr("value",oldName);return false;}
var cvl=lib.type[oldName];lib.type[newName]=cvl;delete lib.type[oldName];return true;}
lib.correctNameInput=function(s){var c1=s.replace(/\W/g,"");if(c1!=s)return{corrected:c1,message:"Only letters, numbers and underbar are permitted in field names"};var ln=c1.length;if(ln>0){var fc=c1.charAt(0);var fcc=c1.charCodeAt(0);if(fc=="_")return{corrected:s.substr(1),message:"Underbar is not permitted as the first character in  field name"};if((48<=fcc)&&(fcc<=57))return{corrected:s.substr(1),message:"A numeral is not permitted as the first character in  field name"};}
return"ok";}
lib.checkNameChar=function(ipt,ev){var cc=ev.keyCode;var cvl=ipt.attr("value");var corrected=lib.correctNameInput(cvl);$dt.log("typeinput",cvl,corrected);if(typeof corrected=="object"){$dt.util.alert(corrected.message);ipt.attr("value",corrected.corrected);return;}}
lib.renderFieldEdit=function(table,propname){var tp=lib.type;var fld=tp[propname];if(!fld)return;var oft=fld._ofType;if(!oft)return;var tr=$('<tr class="typeFieldEdit"></tr>');table.append(tr);var td=$('<td class="fieldName"/>');tr.append(td);var nameInput=$('<input size=10 class="nameInput" type="text"></input>');nameInput.keyup(function(ev){lib.checkNameChar(nameInput,ev);});td.append(nameInput);var oldName=propname;nameInput.change(function(){var newName=nameInput.attr("value");if(lib.changePropname(nameInput,oldName,newName)){oldName=newName;}});nameInput.attr("value",propname);var td=$('<td class="fieldType"/>');tr.append(td);var typeInput=$('<select>'+'<option value="string" selected>string</option>'+'<option value="integer">integer</option>'+'<option value="real">real</option>'+'<option value="dateTime">dateTime</option>'+'<option value="url">url</option>');td.append(typeInput);lib.typeInputs[propname]=typeInput;typeInput.attr("value",oft);typeInput.change(function(){fld._ofType=typeInput.attr("value");});function renderFieldProperty(property,size){var td=$('<td class="typeField"/>');tr.append(td);var input=$('<input class="typeFieldInput" type="text">');input.attr("size",size);td.append(input);if(fld[property]){input.attr("value",fld[property]);}
input.change(function(){fld[property]=input.attr("value");});}
renderFieldProperty("units",12);renderFieldProperty("title",12);renderFieldProperty("description",38);var td=$('<td class="typeFieldDelete"/>');tr.append(td);var deleteButton=$('<input type="button" class="typeFieldDeleteButton" value="delete"/>');td.append(deleteButton);deleteButton.click(function(){tr.fadeOut("slow",function(){tr.remove();});for(var i in tp){if(tp[i]===fld){delete tp[i];}}});}
lib.checkDependencies=function(){var tutt=lib.tweetersUsingThisType;if(tutt.length==0)return null;var otp=lib.typeCopy;var tp=lib.type;function countFields(itp){var rs=0;for(var i in itp){var f=itp[i];if(f&&(typeof f=="object")&&f._ofType)rs++;}
return rs;}
if(countFields(otp)!=countFields(tp)){return tutt;}
for(var pname in otp){var ofld=otp[pname];var nfld=tp[pname];if(ofld&&(typeof ofld=="object")&&ofld._ofType){if(nfld&&(typeof nfld=="object")&&(nfld._ofType==ofld._ofType))continue;return tutt;}}
return null;}
lib.renderTypeEditor=function(div){if($dt.privilege=="write")$(".typeEditButton").hide();var tp=lib.type;lib.typeCopy=$dt.util.deepCopy(lib.type);var tdec=$(".typeDescription > .editContainer");var tde=$(".typeDescription .descriptionInput")
var ds=tp._description;if(!ds)ds="";tde.attr("value",ds);tdec.show();tde.change(function(){tp._description=tde.attr("value");});var tdtc=$(".typeDescription > .textContainer");tdtc.hide();div.empty();var svtp={};for(var p in tp){svtp[p]=tp[p];}
lib.savedType=svtp;lib.nameInputs=[];lib.typeInputs=[];lib.unitsInputs=[];lib.descriptionInputs=[];var fieldTable=$('<table class="typeFieldEditTable"></table>');div.append(fieldTable);var tr=$('<tr class="typeFieldTableHeadingRow"></tr>');fieldTable.append(tr);tr.append('<th class="typeFieldTableHeading">Field</th>');tr.append('<th class="typeFieldTableHeading">Type</th>');tr.append('<th class="typeFieldTableHeading">Units</th>');tr.append('<th class="typeFieldTableHeading">Title</th>');tr.append('<th class="typeFieldTableHeading">Field Description</th>');for(var propname in tp){lib.renderFieldEdit(fieldTable,propname);}
var addFieldDiv=$('<div class="addField"/>');div.append(addFieldDiv);var addFieldButton=$('<input type="button" class="typeEditButton" value="Add Field"/>');addFieldButton.click(function(){var newprop=lib.addField(fieldTable);});addFieldDiv.append(addFieldButton);var buttonDiv=$('<div class="typeEditDoneButtons"/>');div.append(buttonDiv);if(!lib.newType){var saveButton=$('<input type="button" class="typeEditButton" value="Save"/>');buttonDiv.append(saveButton);saveButton.click(function(){var tpname=lib.typeId;var dp=lib.checkDependencies();if(dp){var dps=dp.join(", ");var ln=dp.length;if(ln==1){var msg="The tweeter "+dps+" depends ";}else{msg="The tweeters "+dps+" depend ";}
msg+="on this type, so no changes to field names or their types are allowed. If you delete dependent tweeters, changes will be permitted"
$dt.util.alert(msg);return;}
$.post("/api/typeStatus()",{id:tpname},function(jrs){var rs=$.evalJSON(jrs);var vl=rs.result;if(vl!="new"){var twc=vl.tweeterCount;if(twc>0){msg="WARNING: this type has tweeters whose data will be removed. Are you sure you want to overwrite its definition?";var cnfrm=confirm(msg);if(!cnfrm)return;}}
var postArgs={id:tpname,type:$.toJSON(lib.type)};$.post("/api/saveType()",postArgs,function(rs,status){if($dt.fromPage){var uri="/"+($dt.fromPage);}else{uri="/"+($dt.user.screenName)+"/Type/"+tpname;}
window.location=uri;});});});}
var saveAsButton=$('<input type="button" class="typeEditButton" value="Save As"/>');saveAsButton.click(function(){var tpname=$dt.util.prompt("Save as:",function(tpname){if(!tpname)return;tpname=$.trim(tpname);if(tpname.match(/\W/)){$dt.util.alert("Type names may only contain alphanumeric characters and the underbar");return;}
$.post("/api/typeStatus()",{id:tpname},function(jrs){var rs=$.evalJSON(jrs);var vl=rs.result;if(vl!="new"){var twtrs=vl.tweeters;var twc=twtrs.length;if(twc==0){var msg="A type by this name already exists. Do you want to overwrite it?";}else{msg="A type with this name already exists and is used in tweeters "+(twtrs.join(", "))+" whose data will removed. Do you want to overwrite it?";}
var cnfrm=confirm(msg);if(!cnfrm)return;}
var postArgs={id:tpname,type:$.toJSON(lib.type)};$.post("/api/saveType()",postArgs,function(rs,status){if($dt.fromPage){var uri="/"+($dt.fromPage);}else{uri="/"+($dt.user.screenName)+"/Type/"+tpname;}
window.location=uri;return;});});});});buttonDiv.append(saveAsButton);var cancelButton=$('<input type="button" class="typeEditButton" value="Cancel"/>');buttonDiv.append(cancelButton);cancelButton.click(function(){if($dt.fromPage){var uri="/"+($dt.fromPage);window.location=uri;return;}
lib.type=lib.savedType;lib.renderTypeDefinition(div);});if(!lib.newType){var deleteButton=$('<input type="button" class="typeEditButton" value="Delete"/>');buttonDiv.append(deleteButton);deleteButton.click(function(){$.post("/api/typeStatus()",{id:lib.type._id},function(jrs){var rs=$.evalJSON(jrs);var vl=rs.result;var twtrs=vl.tweeters;var twc=twtrs.length;if(twc==0){var vl=confirm("Are you absolutely sure you want to delete this type? There is no UNDO!");if(!vl)return;}else{if(twc==1){var msg="This type is used in the tweeter "+twtrs[0]+"; this dependency ";}else{msg="This type is used in tweeters "+(twtrs.join(", "))+"; these dependencies ";}
$dt.util.alert(msg+"must be removed before deletion is possible");return;}
var uname=$dt.user.screenName;var id=lib.type._id;var url="http://www.datatweet.net/api/tw/"+uname+"/Type/"+id+"/delete()";$.get(url,null,function(rs,status){$dt.post($('body'),"/message()",{msg:'Successfully deleted the type "'+id+'"'});return;});});});}}
lib.renderField=function(div,propname){var tp=lib.type;var fld=tp[propname];if(!fld)return;var oft=fld._ofType;if(!oft)return;var tr=$('<tr class="typeFieldEdit"></tr>');div.append(tr);var td=$('<td class="fieldName"/>');tr.append(td);td.text(propname);var td=$('<td class="fieldType"/>');tr.append(td);td.text(oft);var td=$('<td class="fieldUnits"/>');tr.append(td);if(fld.units)td.text(fld.units);var td=$('<td class="fieldTitle"/>');tr.append(td);if(fld.title)td.text(fld.title);var td=$('<td class="fieldDescription"/>');tr.append(td);if(fld.description)td.html(fld.description);}
lib.renderTypeDefinition=function(div){var tp=lib.type;if($dt.privilege=="write")$(".typeEditButton").show();var tdec=$(".typeDescription > .editContainer");var tde=$(".typeDescription .descriptionInput")
var ds=tp._description;if(!ds)ds="";tde.attr("value",ds);tdec.hide();var tdtc=$(".typeDescription > .textContainer");var tdt=$(".typeDescription .descriptionText");tdtc.show();tdt.html(ds);div.empty();var fieldTable=$('<table class="typeFieldTable"></table>');div.append(fieldTable);var tr=$('<tr class="typeFieldTableHeadingRow"></tr>');fieldTable.append(tr);tr.append('<th class="typeFieldTableHeading">Field</th>');tr.append('<th class="typeFieldTableHeading">Type</th>');tr.append('<th class="typeFieldTableHeading">Units</th>');tr.append('<th class="typeFieldTableHeading">Title</th>');tr.append('<th class="typeFieldTableHeading">Description</th>');for(var propname in tp){lib.renderField(fieldTable,propname);}}
lib.renderType=function(div,tp){var id=tp._id;var uri=tp._uri;var tpline=$('<p class="typeConcise"></p>');div.append(tpline);tpline.append($('<a href="'+uri+'">'+id+'</a>'));var ds=tp._description;if(ds){var dspan=$('<span class="typeDescription"></span>');tpline.append(dspan);dspan.html(ds);}}
lib.renderTypes=function(div,tps){$.each(tps,function(i,tp){lib.renderType(div,tp);});}
lib.fieldNames=function(tp){var rs=[];for(var i in tp){var fld=tp[i];if(fld){var oft=fld._ofType;if(oft){rs.push(i);}}}
return rs;}})();(function(){var $dt=datatweet;$dt.tweeterlib={};var lib=$dt.tweeterlib;lib.mapExtentHelp='"Map Extent" indicates how wide an area around an individual tweet should be shown when it is mapped';lib.categorizeByHelp='If "Categorize By" is set, tweets will be divided into categories based on the value of the "Categorize By" field (typical example: Categorize By = "city"). '+'Effects: the categories act as substreams-  categories will be shown as individual options in the stream panel, and the latest condition-compliant tweet from each category will be shown '+'in any filter that does not explicitly set the category.  It is desirable to perform categorization if the typical viewer of the stream '+' will want to follow just a few of the categories';lib.privacyHelp='A private stream will be seen only by its creator. This option is appropriate when the stream is under development, '+'or if it derives from a source such as a home sensor that you would like to keep private. '+'A public stream will be visible to anyone, but will not be listed in the public directory. '+'The public directory will be curated during this early beta period, so there will be a short delay before '+'inclusion of your stream after  you specify that is suitable for the directory.';$dt.tweeterlib.renderType=function(el,tp){var tpuri=tp._uri;el.append(tpuri);}
$dt.tweeterlib.mkLink=function(txt,url,cl){if(cl){var lnk=$('<a class="'+cl+'" />');}else{lnk=$('<a/>');}
lnk.attr("href",url);lnk.html(txt);return lnk;}
$dt.tweeterlib.inputsWidth=80;$dt.tweeterlib.renderTweeterEditor=function(div,tw){lib.initTypesByUri();div.empty();var isNew=$dt.tweeterlib.newTweeter;if(!isNew){var twurl=tw._uri;var dsu=$dt.itemlib.disassembleUri(twurl);var uname=dsu.screenName;var id=dsu._id;var twim=tw.image;}else{twim="http://www.datatweet.net/"+$dt.imagesDir+"/tweeter_73x73_default.png";uname=$dt.user.screenName;}
var idiv=$('<div class="tweeterValue"/>');div.append(idiv);var sz="73";var twimSpan=$('<span class="tweeterImage"><img width="'+sz+'" height="'+sz+'" src="'+twim+'"/></span>');idiv.append(twimSpan);var idAndD=$('<div class="tweeterIdAndDescription"/>');idiv.append(idAndD);var p0=$('<p/>');idAndD.append(p0);if(isNew){p0.append('<span class="newStream">New Data Stream</span>');}else{var lnk=$dt.tweeterlib.mkLink(id,twurl,"tweeterLink");p0.append(lnk);}
var ediv=$('<div class="tweeterEdit"/>');div.append(ediv);ediv.append("<p><b>Summary:</b></p>");var smInput=$('<textarea class="fullWidthArea"/>');smInput.attr("size",$dt.tweeterlib.inputsWidth);smInput.attr("cols",$dt.tweeterlib.inputsWidth-20);smInput.attr("rows",2);ediv.append(smInput);var sm=tw.summary;if(sm)smInput.attr("value",sm);smInput.change(function(){tw.summary=smInput.attr("value");});var p1=$('<p/>');ediv.append(p1);p1.html('Type of Tweets: ');var defaultOutputsByUri={};var filteredPropertiesByUri={};var determinedByCategoryByUri={};if(isNew){var selectedType=$dt.typelib.types[0];var turi=selectedType._uri;tw.tweetType=selectedType;}else{turi=$dt.itemlib.uri(tw.tweetType);if(tw.defaultOutputs){defaultOutputsByUri[turi]=tw.defaultOutputs;}
if(tw.filteredProperties){filteredPropertiesByUri[turi]=tw.filteredProperties;}
if(tw.determinedByCategory){determinedByCategoryByUri[turi]=tw.determinedByCategory;}}
if($dt.typelib.types.length==1){var selectedType=$dt.typelib.types[0];p1.append(" "+(selectedType._id)+" (the only type you have defined)");}else{var typeOptions='';$.each($dt.typelib.types,function(i,tp){var sel="";if(turi==tp._uri){selectedType=tp;sel=" selected ";}
typeOptions+='<option '+sel+' value="'+(tp._uri)+'">'+(tp._id)+'</option>';});var typeSelect=$('<select>'+typeOptions+'</select>');p1.append(typeSelect);typeSelect.change(function(){var turi=selectedType._uri;defaultOutputsByUri[turi]=outputsInput.attr("value");tw.tweetType=typeSelect.attr("value");selectedType=lib.typesByUri[tw.tweetType];tw.tweetType=selectedType;setFields();});if(tw.tweetType){typeSelect.attr("value",$dt.itemlib.uri(tw.tweetType));}}
var fieldsP=$('<p/>');ediv.append(fieldsP);fieldsP.append('<b>Fields: </b>');var fieldsSpan=$('<span/>');fieldsP.append(fieldsSpan);function setFields(){turi=selectedType._uri;var allFieldNames=$dt.typelib.fieldNames(selectedType);var fieldNames=[];$.each(allFieldNames,function(i,fn){if((fn=="latitude")||(fn=="longitude"))return;fieldNames.push(fn);});fieldsSpan.empty();var fieldNamesString=fieldNames.join(", ");var dfo=defaultOutputsByUri[turi];if(dfo){outputsInput.attr("value",dfo);}else{outputsInput.attr("value",fieldNamesString);defaultOutputsByUri[turi]=fieldNamesString;}
var fprops=filteredPropertiesByUri[turi];if(fprops){filteredPropertiesInput.attr("value",fprops);}else{filteredPropertiesInput.attr("value",fieldNamesString);filteredPropertiesByUri[turi]=fieldNamesString;}
var dprops=determinedByCategoryByUri[turi];if(dprops){determinedByCategoryInput.attr("value",dprops);}else{determinedByCategoryInput.attr("value","");}
fieldsSpan.html(fieldNamesString);if(selectedType.longitude){mapExtentP.show();}else{mapExtentP.hide();}}
function trimmedElementsOfCommafiedString(s){var sp=s.split(",");var rs=[];$.each(sp,function(i,o){var tro=$.trim(o);if(tro)rs.push(tro);});return rs;}
function checkForFieldNames(vls,msg){var fieldNames=$dt.typelib.fieldNames(selectedType);var fno={};$.each(fieldNames,function(i,fn){fno[fn]=1;});var rs=true;$.each(vls,function(i,o){if(!fno[o]){$dt.util.alert(o+" is not a field name, so cannot be a "+msg);rs=false;return false;}
return true;});return rs;}
function defaultOutputs(){return trimmedElementsOfCommafiedString(outputsInput.attr("value"));}
function checkOutputs(){return checkForFieldNames(defaultOutputs(),"default output");}
function filteredProperties(){return trimmedElementsOfCommafiedString(filteredPropertiesInput.attr("value"));}
function checkFilteredProperties(){return checkForFieldNames(filteredProperties(),"filtered property");}
function determinedByCategory(){return trimmedElementsOfCommafiedString(determinedByCategoryInput.attr("value"));}
function checkDeterminedByCategory(){return checkForFieldNames(determinedByCategory(),"category-determined property");}
function checkCategorizeBy(){var fieldNames=$dt.typelib.fieldNames(selectedType);var catBy=$.trim(categorizeByInput.attr("value"));if(!catBy){tw.categorizeBy=null;return true;}
var catByTp=selectedType[catBy];if(!catByTp||(!catByTp._ofType)){$dt.util.alert('In "Categorize By", '+catBy+" must be a field name");return false;}
var oft=catByTp._ofType;if(oft!="string"){$dt.util.alert("For now, it is only possible to categorize by fields of string type, and "+catBy+" is of type "+oft);return false;}
tw.categorizeBy=catBy;return true;}
var outputsP=$('<p><b>Default Outputs: </b></p>');ediv.append(outputsP);var outputsInput=$('<textarea class="fullWidthArea"/>');outputsInput.attr("cols",$dt.tweeterlib.inputsWidth-20);outputsInput.attr("rows",3);ediv.append(outputsInput);var filteredP=$('<p><b>Filtered Fields: </b></p>');ediv.append(filteredP);var filteredPropertiesInput=$('<textarea class="fullWidthArea"/>');filteredPropertiesInput.attr("cols",$dt.tweeterlib.inputsWidth-20);filteredPropertiesInput.attr("rows",3);filteredPropertiesInput.attr("size",$dt.tweeterlib.inputsWidth);ediv.append(filteredPropertiesInput);mapExtentP=$('<p/>');ediv.append(mapExtentP);mapExtentP.append("<b>Map Extent: </b>");mapExtentInput=$('<input type="text" class="mapExtentInput"></input>');mapExtentP.append(mapExtentInput);mapExtentP.append(" meters");if(tw.minMapExtent){mapExtentInput.attr("value",tw.minMapExtent);}
mapExtentP.append($dt.util.helpButton(lib.mapExtentHelp));var privacyP=$('<p/>');var cPrivacy=tw.privacy;if(!cPrivacy){cPrivacy="private";}
ediv.append(privacyP);var privacyPrivateInput=$('<input type="radio" name="privacy" value="private" class="privacyInput"></input>');privacyP.append(privacyPrivateInput);privacyP.append(" private ");var privacyPublicInput=$('<input type="radio" name="privacy" value="public" class="privacyInput"></input>');privacyP.append(privacyPublicInput);privacyP.append(" public ");var privacyPublicDInput=$('<input type="radio" name="privacy" value="publicDirectory" class="privacyInput"></input>');privacyP.append(privacyPublicDInput);privacyP.append(" public directory ");privacyP.append($dt.util.helpButton(lib.privacyHelp));if(cPrivacy=="private"){privacyPrivateInput.attr("checked",1);}else if(cPrivacy=="public"){privacyPublicInput.attr("checked",1);}else{privacyPublicDInput.attr("checked",1);}
function setPrivacy(){tw.privacy=privacyPrivateInput.attr("checked")?"private":(privacyPublicInput.attr("checked")?"public":"publicDirectory");}
var categorizeByP=$('<p/>');ediv.append(categorizeByP);categorizeByP.append('<b>Categorize By: </b>');var categorizeByInput=$('<input type="text" class="categorizeBy"/>');categorizeByP.append(categorizeByInput);categorizeByP.append($dt.util.helpButton(lib.categorizeByHelp));if(tw.categorizeBy){categorizeByInput.attr("value",tw.categorizeBy);}
var determinedByCategoryP=$('<p><b>Properties Determined by the Category: </b></p>');ediv.append(determinedByCategoryP);var determinedByCategoryInput=$('<input type="text" class="fullWidthInput"/>');determinedByCategoryInput.attr("size",$dt.tweeterlib.inputsWidth);ediv.append(determinedByCategoryInput);categorizeByInput.keyup(function(){setDeterminedByCategoryVisibility('fast');});function setDeterminedByCategoryVisibility(speed){var catBy=$.trim(categorizeByInput.attr("value"));if(catBy){determinedByCategoryInput.show(speed);determinedByCategoryP.show(speed);}else{determinedByCategoryInput.hide(speed);determinedByCategoryP.hide(speed);}}
if(!tw.categorizeBy){determinedByCategoryInput.hide();determinedByCategoryP.hide();}
var scheduleP=$('<p/>');var cSchedule=tw.schedule;if(!cSchedule){var cSchedule="none";}
ediv.append(scheduleP);var scheduleDailyInput=$('<input class="sdi" type="checkbox" name="schedule"  class="privacyInput"></input>');scheduleP.append(scheduleDailyInput);scheduleP.append(" Tweets are posted in a daily batch ");if(cSchedule&&(cSchedule!="none")){scheduleDailyInput.attr("checked",1);}
setFields();ediv.append('<p><b>Description:</b></p>');var d=tw.description;var dInput=$('<textarea class="tweeterDescriptionInput"></textarea>');dInput.attr("cols",$dt.tweeterlib.inputsWidth-20);dInput.attr("rows",6);if(d)dInput.attr("value",d);ediv.append(dInput);var buttonsP=$('<p/>');ediv.append(buttonsP);function setMapExtent(){var cme=mapExtentInput.attr("value");if(cme){var cmei=$dt.util.isInt(cme);if(cmei===false){return false;}
tw.minMapExtent=cmei;}else{delete tw.minMapExtent;}
return true;}
function setUpForSave(id){if(!checkOutputs())return false;if(!checkFilteredProperties())return false;if(!checkCategorizeBy())return false;if(tw.categorizeBy){var dBy=determinedByCategory();if(!checkForFieldNames(dBy,"category-determined property"))return false;tw.determinedByCategory=dBy;}
tw.defaultOutputs=defaultOutputs();tw.filteredProperties=filteredProperties();var d=$.trim(dInput.attr("value"));if(d){tw.description=d;}
setMapExtent();setPrivacy();tw.tweetType={"_ref":selectedType._uri};tw.schedule=scheduleDailyInput.attr("checked")?"daily":"none";var postArgs={id:id,tweeter:$.toJSON(tw)};return postArgs;}
if(!isNew){var saveButton=$('<input type="button" class="doneButton" value="Save"/>');buttonsP.append(saveButton);saveButton.click(function(){var postArgs=setUpForSave(tw._id);if(!postArgs)return;$.post("/api/saveTweeter()",postArgs,function(rs,status){var uri="/"+($dt.user.screenName)+"/Stream/"+id;window.location=uri;return;});});}
var saveAsButton=$('<input type="button" class="doneButton" value="Save As"/>');buttonsP.append(saveAsButton);saveAsButton.click(function(){var twname=$dt.util.prompt("Save as:",function(twname){if(!twname)return;twname=$.trim(twname);if(twname.match(/\W/)){$dt.util.alert("Stream names may only contain alphanumeric characters and the underbar");return;}
var postArgs=setUpForSave(twname);if(!postArgs)return;$.post("/api/tweeterStatus()",{id:twname},function(jrs){var rs=$.evalJSON(jrs);var vl=rs.result;if(vl=="exists"){var msg="A tweeter by this name already exists. Do you want to overwrite it?";var cnfrm=confirm(msg);if(!cnfrm)return;}
$.post("/api/saveTweeter()",postArgs,function(rs,status){var uri="/"+($dt.user.screenName)+"/Stream/"+twname;window.location=uri;});});});});var cancelButton=$('<input type="button" class="doneButton" value="Cancel"/>');cancelButton.click(function(){if($dt.fromPage){var uri="/"+($dt.fromPage);window.location=uri;return;}
$dt.tweeterlib.renderTweeter(div,tw,false,1);});buttonsP.append(cancelButton);if(!isNew){var deleteButton=$('<input type="button" class="doneButton" value="Delete"/>');buttonsP.append(deleteButton);deleteButton.click(function(){var cn=confirm("Are you sure you want to delete this Stream? There is no undo.");if(cn){var url="http://www.datatweet.net/api/tw/"+uname+"/Stream/"+id+"/delete()";$.get(url,null,function(rs,status){$dt.post($('body'),"/message()",{msg:'Successfully deleted the stream "'+id+'"'});return;});}});}}
lib.initTypesByUri=function(){lib.typesByUri={};$.each($dt.typelib.types,function(i,tp){lib.typesByUri[tp._uri]=tp;});}
$dt.tweeterlib.renderTweeter=function(div,tw,includeHr,amountOfDetail){var odiv=$('<div/>');if(amountOfDetail=="full"){lib.initTypesByUri();div.empty();div.append(odiv);if($dt.privilege=="write"){var editButton=$('<input class="editButton" type="button" value="Edit"></input>');editButton.click(function(){$dt.tweeterlib.renderTweeterEditor(div,tw);});odiv.append(editButton);}}else{div.append(odiv);var detailLink=$('<a class="tweeterDetailLink" href="javascript:;">About</a>');odiv.append(detailLink);var uri=tw._uri;detailLink.click(function(){window.location=uri;});}
includeHr=false;var twurl=tw._uri;var dsu=$dt.itemlib.disassembleUri(twurl);var uname=dsu.screenName;var id=dsu._id;var twim=tw.image;var idiv=$('<div class="tweeterValue"/>');if(includeHr)idiv.append("<hr/>");odiv.append(idiv);var buttons=$('<div class="tweeterButtons/>');var sz=(amountOfDetail=="full")?"73":"48";var twimSpan=$('<span class="tweeterImage"><img width="'+sz+'" height="'+sz+'" src="'+twim+'"/></span>');twimSpan.click(function(){window.location=twurl+"/select()";});idiv.append(twimSpan);var idAndD=$('<div class="tweeterIdAndDescription"/>');idiv.append(idAndD);var p0=$('<p/>');idAndD.append(p0);var lnk=$dt.tweeterlib.mkLink(id,twurl+"/select()","tweeterLink");p0.append(lnk);var sm=tw.summary;if(sm){var twidSpan=$('<span class="tweeterSummary"/>');p0.append(twidSpan);twidSpan.html(" "+sm);}
var fromEditFilter=$dt.filterlib.tweetType?1:0;if(amountOfDetail!="minimum"){var cats=tw.categories;if(cats&&(cats.length>0)){if(amountOfDetail=="normal"){if(fromEditFilter){var catBy=$dt.filterlib.categorizeBy;var showCategories=1;idAndD.append('<p class="tweeterMessage">To set the '+catBy+', click on its name, or on its marker on the map</p>');}else{var catBy=tw.categorizeBy;var cc=lib.getCategory(tw);if(cc){showCategories=0;}else{var catMsg=$();idAndD.append('<p class="tweeterMessage">Now showing the latest '+($dt.tweeterlib.filterText?"condition-filtered ":"")+'tweet from each '+catBy+'. '+'To view the datastream from an individual '+catBy+', click on its name, or double click on its marker on the map.</p>');showCategories=1;}}}else{catBy=tw.categorizeBy;showCategories=1;}
if(showCategories){var cP=$('<p class="tweeterCategories"/>');idAndD.append(cP);if(fromEditFilter){var allHref=$("<a href='javascript:;'>All</a>");cP.append(allHref);cP.append(" ");allHref.click(function(){$dt.filterlib.setCategoryAndUpdate("");});}
var catsBaseUrl="http://www.datatweet.net/tw/"+uname+"/Stream/"+id+"/select()?where=";$.each(cats,function(i,cat){if(fromEditFilter){var cHref=$("<a href='javascript:;'>"+cat+" </a>");cP.append(cHref);cHref.click(function(){$dt.filterlib.setCategoryAndUpdate(cat);});}else{var cUrl=catsBaseUrl+catBy+'="'+$dt.util.myEncodeURIComponent(cat)+'"';cP.append("<a href='"+cUrl+"'>"+cat+" </a>");}});}}}
if(amountOfDetail=="full"){var ddiv=$('<div class="tweeterDetail"/>');odiv.append(ddiv);var p1=$('<p/>');ddiv.append(p1);var twt=tw.tweetType;var twturi=$dt.itemlib.uri(twt);var twto=lib.typesByUri[twturi];var twtid=$dt.itemlib.getId(twt);var twtlink='<a href="'+twturi+'">'+twtid+'</a>';p1.html("Type of tweets: "+twtlink);var d=tw.description;if(d){var p2=$('<p/>');ddiv.append(p2);p2.html(d);}
var dfo=tw.defaultOutputs;if(dfo&&(dfo.length)){var dfos=dfo.join(", ");var outputsP=$('<p/>');ddiv.append(outputsP);outputsP.html("Default Outputs: "+dfos);}
var fprops=tw.filteredProperties;if(fprops&&(fprops.length)){var fpropsS=fprops.join(", ");var fpropsP=$('<p/>');ddiv.append(fpropsP);fpropsP.html("Filtered Properties: "+fpropsS);}
var dprops=tw.determinedByCategory;if(dprops&&(dprops.length)){var dpropsS=dprops.join(", ");var dpropsP=$('<p/>');ddiv.append(dpropsP);dpropsP.html("Determined by Category: "+dpropsS);}
if(twto.longitude&&tw.minMapExtent){var mapExtentP=$('<p>Map extent: '+tw.minMapExtent+' meters</p>');ddiv.append(mapExtentP);mapExtentP.append($dt.util.helpButton(lib.mapExtentHelp));}
var catBy=tw.categorizeBy;if(catBy){var catByP=$('<p>Categorize By: '+catBy+'</p>');ddiv.append(catByP);catByP.append($dt.util.helpButton(lib.categorizeByHelp));}
var privacy=tw.privacy;if(!privacy)privacy="private";var privacyP=$('<p>Privacy: '+privacy+'</p>');ddiv.append(privacyP);privacyP.append($dt.util.helpButton(lib.privacyHelp));if(tw.schedule){ddiv.append($('<p>Tweets are posted in a daily batch</p>'));}}
return odiv;}
$dt.tweeterlib.renderTweeterConcise=function(div,tw){var twurl=tw._uri;var id=$dt.util.lastPart(tw._uri);var tweeterP=$('<p class="tweeterConciseValue"/>');div.append(tweeterP);var lnk=$dt.tweeterlib.mkLink(id,twurl,"tweeterLink");tweeterP.append(lnk);var sm=tw.summary;if(sm){var twidSpan=$('<span class="tweeterSummary"/>');tweeterP.append(twidSpan);twidSpan.html(" "+sm);}}
$dt.tweeterlib.renderTweetersConcise=function(div,tweeters){$.each(tweeters,function(i,tw){$dt.tweeterlib.renderTweeterConcise(div,tw);});}
$dt.tweeterlib.renderTweeters=function(div,tweeters,amountOfDetail,includeHeading){if(tweeters.length==0)return;var tw0=tweeters[0];var usr=tw0._user;var screenName=$dt.itemlib.getScreenName(usr);if(includeHeading){var headingP=$('<p class="tweetersHeading"/>');div.append(headingP);headingP.append('Data streams from <b>'+screenName+'</b>:');}
var tD=$('<div class="tweeterValues">');div.append(tD);$.each(tweeters,function(i,tw){var twd=$('<div class="tweeterProfile"/>');tD.append(twd);$dt.tweeterlib.renderTweeter(twd,tw,1,amountOfDetail);});}
$dt.tweeterlib.getCategory=function(tw){if(!lib.filterText)return null;var catBy=tw.categorizeBy;if(!catBy)return null;var fs=lib.filterText.split(" and ");var rs=null;$.each(fs,function(i,cl){var r=new RegExp(catBy+'=\"(.*)\"');var m=cl.match(r);if(m){rs=m[1];return false;}else{return null;}});return rs;}
$dt.tweeterlib.buildArgs=function(){var args={};if($dt.tweeterlib.filterText)args.where=$dt.tweeterlib.filterText;if($dt.tweeterlib.outputsText)args.outputs=$dt.tweeterlib.outputsText;if($dt.tweeterlib.frequencyText)args.frequency=$dt.tweeterlib.frequencyText;return args;}
$dt.tweeterlib.buildTweeterUrl=function(method){var url="http://www.datatweet.net"+$dt.baseUrl+"/"+method+"()";var clauses=[];if($dt.tweeterlib.filterText)clauses.push("where="+$dt.tweeterlib.filterText);if($dt.tweeterlib.outputsText)clauses.push("outputs="+$dt.tweeterlib.outputsText);if($dt.tweeterlib.frequencyText)clauses.push("frequency="+$dt.tweeterlib.frequencyText);if(clauses.length){url+="?"+clauses.join("&");}
return url;}
$dt.tweeterlib.grabTweetsWithNewFilter=function(){var url="http://www.datatweet.net/api"+$dt.baseUrl+"/tweets()";var args=$dt.tweeterlib.buildArgs();$dt.log("map",args);jQuery.get(url,args,function(jrs,status){var rs=$.evalJSON(jrs);$dt.log("map","returned",rs);var tweets=rs.result;$dt.tweeterlib.tweetsDiv.empty();$dt.renderTweets($dt.tweeterlib.tweetsDiv,$dt.tweeterlib.tweetType,tweets);});}
$dt.tweeterlib.parseOutputs=function(st){if(!st)return[];var rs=st.split(",");return $.map(rs,$.trim);}
$dt.tweeterlib.baseIcon=function(tweeter){return"http://www.datatweet.net/"+$dt.imagesDir+"/"+(tweeter._userId)+"/"+(tweeter._id)+"/mapicon.png";}
$dt.tweeterlib.jumpToCategoryPage=function(tweeter,category){var catBy=tweeter.categorizeBy;var where=catBy+"="+'"'+category+'"';var url=tweeter._uri+"/select()?where="+where;window.location=url;}
$dt.tweeterlib.grabTweetsFromTwitter=function(tw){var returnCount=0;$dt.grabbedTweets=[];function tweetsCallback(tweeter,tweets){returnCount++;var rs=$dt.datatweetsFromTimeline(tweets,tweeter.twitterRegexp,tweeter.regexpFields);var filters=tweeter.filters;if(filters){var frs=[];var fcnt=filters.length;$.each(rs,function(i,tweet){debugger;var meetsFilter=true;for(var j=0;j<fcnt;j++){var filter=filters[j];if(!filter(tweet)){meetsFilter=false;break;}}
if(meetsFilter){frs.push(tweet);}});rs=frs;}
$dt.grabbedTweets=$.merge($dt.grabbedTweets,rs);debugger;}
if(tw){dt.twitterTimeline(tw.dataUrl,null,function(tweets){tweetsCallback(tw,tweets);});}else{var returnsExpected=$dt.tweetersAtTwitter.length;$.each($dt.tweetersAtTwitter,function(i,tweeter){$dt.twitterTimeline(tweeter.dataUrl,null,function(tweets){tweetsCallback(tweeter,tweets)});});}}})();(function(){var $dt=datatweet;$dt.subscriptionlib={};var lib=$dt.subscriptionlib;$dt.subscriptionlib.subscriptionUrl=function(s){return"/tw/self/Subscription/"+s.tweeterUser+"/"+s.tweeterId+"/"+s._name;}
lib.frequencyText=function(s){var interval=s.interval;var summarize=s.summarize;var offset=s.offset;var skind=summarize?"Summarize":"Sample";if(!interval)return null;interval=parseFloat(interval);if(interval==24){return skind+" daily at "+offset;}else if(interval==1){return skind+"every hour";}else{var intervalText=(interval<1)?"1/2":interval;return skind+" every "+intervalText+" hour"+((interval>1)?"s":"");}}
$dt.subscriptionlib.tweeterUrl=function(s){var clauses=[];if(s.filter){clauses.push("where="+$dt.util.myEncodeURIComponent(s.filter));}
if(s.outputs){clauses.push("outputs="+s.outputs);}
if(s.interval){clauses.push("interval="+s.interval);}
if(s.offset){clauses.push("offset="+s.offset);}
if(s.summarize){clauses.push("summarize="+s.summarize);}
var getArgs=clauses.join("&");return"/tw/"+s.tweeterUser+"/Stream/"+s.tweeterId+"/select()?"+getArgs;}
$dt.subscriptionlib.deleteFromSubscriptionsByTweeter=function(s){var nsbt=[];var twid=s.tweeterId;var two=s.tweeterUser;var sname=s._name;var rs=null;var sbt=$dt.subscriptionlib.subscriptionsByTweeter;$.each(sbt,function(i,a){var sbs=[];$.each(a,function(j,cs){if((cs.tweeterId!=twid)||(cs.tweeterUser!=two)||(cs._name!=sname)){sbs.push(cs);}});if(sbs.length==0){rs="last";}else{nsbt.push(sbs);}});$dt.subscriptionlib.subscriptionsByTweeter=nsbt;return rs;}
$dt.subscriptionlib.renderSubscription=function(div,s,twdiv){var idiv=$('<div class="subscriptionValue"/>');div.append(idiv);var buttons=$('<div class="subscriptionButtons"></div>');idiv.append(buttons);var surl=$dt.subscriptionlib.subscriptionUrl(s);var goButton=$('<input class="subscriptionButton" type="button" value="View Tweets"/><br/>');buttons.append(goButton);var gourl=$dt.subscriptionlib.tweeterUrl(s);goButton.click(function(){window.location=gourl;});if($dt.privilege=="write"){var editurl=surl+"/edit()";var deleteurl="http://www.datatweet.net/api"+surl+"/delete()";var editButton=$('<input class="subscriptionButton" type="button" value="Edit"/><br/>');buttons.append(editButton);editButton.click(function(){window.location=editurl;});var deleteButton=$('<input class="subscriptionButton" type="button" value="Delete"/>');buttons.append(deleteButton);deleteButton.click(function(){$.get(deleteurl,null,function(rs,status){idiv.remove();if($dt.subscriptionlib.deleteFromSubscriptionsByTweeter(s)=="last"){twdiv.remove();}
$dt.log("subscription","deleted subscription");});});}
function addField(addTo,fieldName,fieldValue){var p=$('<p class="subscriptionField"/>');addTo.append(p);if(fieldName)p.append('<span class="subscriptionFieldTitle">'+fieldName+'</span>');if(fieldValue)p.append('<span class="subscriptionFieldValue">'+fieldValue+' </span>');}
var fl=s.filter;fl=fl?fl:"none";var o=s.outputs;o=o?o.replace(/\,/g,", "):"all properties";addField(idiv,"Condition: ",fl);addField(idiv,"Outputs: ",o);var ftxt=lib.frequencyText(s);if(ftxt)addField(idiv,ftxt);}
$dt.subscriptionlib.renderSubscriptionsHeading=function(div,subscription){var s0=subscription;var tweeterName=s0.tweeterUser+"/"+s0.tweeterId;var headingP=$('<p class="subscriptionsHeading"/>');div.append(headingP);headingP.append('You are following <b>'+tweeterName+'</b> with:');}
$dt.subscriptionlib.renderSubscriptions=function(div,subscriptions,twdiv){var sD=$('<div class="subscriptionValues">');div.append(sD);$.each(subscriptions,function(i,s){$dt.subscriptionlib.renderSubscription(sD,s,twdiv);});}
$dt.subscriptionlib.renderSubscriptionsByTweeter=function(div,subscriptionsByTweeter){var sD=$('<div class="subscriptionsByTweeter">');$dt.subscriptionlib.subscriptionsByTweeter=subscriptionsByTweeter;div.append(sD);$.each(subscriptionsByTweeter,function(i,s){var twdiv=$dt.tweeterlib.renderTweeter(sD,s[0].tweeter,1);$dt.subscriptionlib.renderSubscriptions(sD,s,twdiv);});}})();(function(){var $dt=datatweet;$dt.Tab=function(options){this.options=options;}
$dt.Tab.prototype.select=function(s){var options=this.options;var titles=options.titles;var panels=options.panels;if(typeof s=="object"){var idx=$.inArray(s,panels);if(idx<0){$dt.log("error","Tab select argument not found",s);return;}}else{idx=s;}
var selectedStyle=options.selectedStyle;var baseStyle=options.baseStyle;var ln=panels.length;var tabs=this.tabs;for(var i=0;i<ln;i++){if(i!=idx){tabs[i].removeClass("tabSelected");tabs[i].addClass("tabNotSelected");panels[i].hide();}}
tabs[idx].addClass("tabSelected");tabs[idx].removeClass("tabNotSelected");$dt.log("tabSelect",s,options);panels[idx].show();var tln=tabs.length;if(tln>ln){tabs[tln-1].addClass("tabNotSelected");}}
$dt.Tab.prototype.render=function(div){var options=this.options;var titles=options.titles;var panels=options.panels;var tabs=[];this.tabs=tabs;var ln=panels.length;var thisHere=this;var el;div.empty();var table=$('<table class="tabTable"></table>');div.append(table);var tr=$('<tr/>');table.append(tr);$.each(titles,function(idx,title){el=$('<td class="aTab"/>');tr.append(el);tabs.push(el);el.html(title);el.click(function(e){thisHere.select(idx);});});el=$('<td class="extraTab"/>');tr.append(el);tabs.push(el);return;el=$('<div class="PadTab"/>');tb.append(el);var rt=tabs.length*72;var wd=750-2-rt;var css={"left":rt+"px","right":"0px"};console.log("css",css);el.css(css);this.select(0);}})();