//<h1>dan's javascript blog's javascript</h1>	<pre style="font-family: tahoma; font-size: 16pt; color: White; background-color: Black;">




if(!window.App){ App={} ; }
App.pageLength = 7;
App.cPage = 0;
App.loadDisp =  '<center><b>Loading...</b><br /><br /><img id="ld1" src="sun.gif" alt="loading indicator" width="50" height="50"  border="0"    /></center>'
App.mode="posts";

function gp(p){ return parseInt(screen.width * p) + "px"; }

function thread(s){ setTimeout(s, 35); }

function Rnd(w) {return parseInt(Math.random() * (w + 1));}
Array.prototype.shuffle = function () {var that = [].concat(this);var mx = that.length;var r = [];var mx2 = mx - 1;for (var i = 0; i < mx; i++) {var slot = Rnd(mx2 - i);r[i] = that.splice(slot, 1);}return r;}

var newsFeeds = ([
	"http://digg.com/rss_search?search=javascript&area=promoted&type=both&section=all", 
	"http://news.search.yahoo.com/news/rss?p=javascript&ei=UTF-8",
	"http://news.search.yahoo.com/news/rss?p=JSON&ei=UTF-8",
	"http://code.msdn.microsoft.com/rss.ashx?behavior=bytag&tagName=Internet%20Explorer" ,
	"http://news.search.yahoo.com/news/rss?p=javascript+ajax&ei=UTF-8"  ]);




function parseDate(s) {if (s.match(/^\s?\d{4}-\d{2}-\d{2}T\d{2}\:\d{2}:\d{2}Z\s?$/g)) {}var d = new Date;try {d.setTime(Date.parse(s));} catch (t) {var td = s.replace(/[-_\\.]/gm, "/").replace(/T!h+/, " ");d.setTime(Date.parse(td));}return d;}



function delCB(data){ 
if(!delCB.data){ delCB.data = data; }
	var pat = "~getPic('**u**')~   <a target='_blank' href='**u**' title='**n**'>**d**</a><br />";
	function getSetofTags(s){ return tmpl9(data.filter(function(a){ if(a.t.indexOf(s)>-1) return 1;}), pat ); }

	var targ = el("col3");
	var gt = getSetofTags;
	var b = [ 
		'<strong>Articles</strong><br />',	gt('javascript'), '<br />',
		'<strong>Docs</strong><br />',	gt('docs'),  '<br />',
		'<strong>Forums</strong>	<br />',	gt('forum'), '<br />',
		'<strong>Blogs</strong><br />',	gt('blogs'), '<br />',
		'<strong>News</strong><br />',	gt('news'), 
	]//end link structure

	var linkHead = "<h3>Links</h3>	<br /><input type='button'   onclick='showLinks()' value='view details'  /><br />	<br />"

	setTimeout(function(){ targ.innerHTML = linkHead  + b.join("<br />"); } , 50); 
}





function delCBView(data){ 
	var pat = "<tt>~getPic('**u**')~</tt>   <a class='linktitle' target='_blank' href='**u**' title='**External Link**'>**d**</a>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
		pat+= " **n**<br /><br /><br />";

	function getSetofTags(s){ return tmpl9(data.filter(function(a){ if(a.t.indexOf(s)>-1) return 1;}), pat ); }

	var targ = el("posts");
	var gt = getSetofTags;
	var b = [ 
		'<strong>Javascript Articles</strong><br />',	gt('javascript'), '<br />',
		'<strong>JavaScript Docs</strong><br />',	gt('docs'),  '<br />',
		'<strong>Javascript Forums</strong><br />',	gt('forum'), '<br />',
		'<strong>JavaScript Blogs</strong><br />',	gt('blogs'), '<br />',
		'<strong>JavaScript News</strong><br />',	gt('news'), 
	]//end link structure

	
	setTimeout(function(){ targ.innerHTML = b.join("<br />"); } , 50); 
}

function serial(dig) {var bb = "";for (var q = 0; q < dig; q = q + 1) {bb = bb + String.fromCharCode(Rnd(25) + 65);}return bb;}


function rssCB(data){ el("jsnews").innerHTML +=  tmpl9(  data.value.items.slice(0,17),  ' ~getPic(  "http" + unescape(\'**link**\'.split(/http/)[2]) ,"**title**" )~   <a target="_blank" href="**link**" >  **title**  </a> <br /><br /> ' ) ; 
els("ld1").display="none";
}



function rssViewCB(data){ 
	window.ids=data.value.items.map(function(a){ return serial(8); });
	window.feedCounterTemp = 0;

	var pat =  '<div class="newsitem"><tt> ~getPic(  "http" + unescape(\'**link**\'.split(/http/)[2]) ,"**title**" )~ </tt> &nbsp; &nbsp; <a href="#" class="uni"  title=" return to top of page ">&#8627;</a>	&nbsp;   <a id="~"t"+ids[feedCounterTemp++]~" target="_blank" href="**link**" >  **title**  </a> <br />';
	pat+="&nbsp; &nbsp; **description**</div><br /><br /> "

	el("posts").innerHTML =  tmpl9(  data.value.items , pat) ; 


	var o = el("toc").options; 
	o.length=0;
	data.value.items.map(function(a,b){ o[o.length] = new Option( a.title  , ids[b] ); });



}



function changePage(n) { //adapt to swap news articles if in mews mode.
      posts.innerHTML = App.loadDisp;

	if(App.mode === "news" ){ thread(showNews); return; }

        var pn = parseInt(n * App.pageLength);
        if (postCB.incoming[pn]) {
            postCB(postCB.incoming[pn]);
        } else {
            var base = "http://dldavis2.tumblr.com/api/read/json?callback=postCB&num=7&start=" + pn;
            setTimeout(function () {jsGet(base);}, 35);
        }
    }


function postCB2(data){  postCB(data, 1); }

function postCB(data, oneTime){  
if(!postCB.incoming){ postCB.incoming = [];}

// data keys: "tumblelog", "posts-start", "posts-total", "posts-type", "posts"



var ps = parseInt( data["posts-start"]);

var  lastPage = Math.ceil(data["posts-total"] / App.pageLength);
var pageNo = parseInt(  (ps  / data["posts-total"]) * lastPage )
//if( (data["posts-total"]  - ps )  < App.pageLength ) { pageNo= lastPage; }
App.cPage = pageNo;

if(!oneTime){  postCB.incoming[ps] = data;}


document.title="dan's javascript:: page "+ (pageNo+1) + " of " + lastPage

var buff ="";
for(var i=0; i<lastPage;i++){
	var fw = (  i == pageNo ? "bold" : "normal" )
	buff+= "<li><input type='button'  onclick='App.mode = \"posts\"; changePage(parseInt(this.value) - 1)'  style='font-weight: "+fw+"' value='"+(i+1)+"'  /></li>";
}

el("pages").innerHTML = buff;
buff="";

var regularPostVocab =   ["id", "url", "type", "date-gmt", "date", "bookmarklet", "mobile", "feed-item", "from-feed-id", "regular-title", "regular-body", "tags"]  ;
var photoPostVocab =  ["id", "url", "type", "date-gmt", "date", "bookmarklet", "mobile", "feed-item", "from-feed-id", "photo-caption", "photo-url-500", "photo-url-400", "photo-url-250", "photo-url-100", "photo-url-75"]



var regular = '<div class="item">\
	<a href="#" class="uni"  title=" return to top of page ">&#8627;</a>	<big class="title"><a id="t**id**">**regular-title**</a></big>	<br />\
&nbsp;&nbsp;&nbsp;&nbsp;	<small class="byline">~"**date**".slice(0,-3)~</small>		<br />\
	<span class="desc"> &nbsp; &nbsp; &nbsp; &nbsp; **regular-body**</span></div>'

var photo = '<div id="**guid**" class="item">\
	<a href="#" class="uni" title=" return to top of page ">&#8627;</a>	<big class="title">**photo-caption**</big>	<br />\
&nbsp;&nbsp;&nbsp;&nbsp;	<small class="byline">~"**date**".slice(0,-3)~</small>		<br />\
	<center class="desc"><img onmouseover=\'this.src="**photo-url-500**"\' onmouseout=\'this.src="**photo-url-250**"\'  src="**photo-url-250**" alt="**photo-caption**" border="0"    /></a></center></div>'


var ad="<div class='ad'>	\
	reserved for future use\
</div>	"



var dp =data.posts;
var buff = [];
var cnt = 0;
var adPad = 7;

for(var i=0, mx=dp.length; i<mx; i++){
	var it = dp[i];

	if( Rnd(adPad+=2 ) < 4 )	{ buff [cnt++]= ad; }

	if(it.type==='photo'){
		buff[cnt++]= tmpl9( it , photo ); 
	} else {
		buff [cnt++] =  tmpl9( it , regular) || ""; 
	}//end if
}


postCB.data = dp;


 el("posts").innerHTML =  buff.join("<br /><br /><hr /><br /><br />");

var o = el("toc").options; 
o.length=0;

dp.map(function(a){ o[o.length] = new Option( a['regular-title'] || a['photo-caption']  , a.id ); })

}//end cb

Array.prototype.sortDate = function () { return this.sort(function (a, b) {a = parseDate(a);b = parseDate(b);return a < b ? -1 : a > b ? 1 : 0;});}
function social() {title = escape(document.title.match(/[\w\s]+/g).join("").replace(/\ /g, "+"));url = window.location.href;var r = { blogmarks: "blogmarks.net/my/new.php?mini=1&title=" + title + "&url=" + url, 'del.icio.us': "del.icio.us/post?v=4&noui&jump=close&url=" + url + "&title=" + title, digg: "digg.com/submit?phase=2&url=" + url + "&title=" + title, feedmelinks: "feedmelinks.com/categorize?from=toolbar&op=submit&name=" + title + "&url=" + url,  google: "google.com/bookmarks/mark?op=edit&output=popup&bkmk=" + url + "&title=" + title, magnolia: "ma.gnolia.com/bookmarklet/add?url=" + url + "&title=" + title, 'netscape ': "www.netscape.com/submit/?U=" + url + "&T=" + title, netvouz: "www.netvouz.com/action/submitBookmark?url=" + url + "&title=" + title + "&popup=no", newsvine: "www.newsvine.com/_wine/save?popoff=0&u=" + url + "&h=" + title, rawSugar: "www.rawsugar.com/pages/tagger.faces?turl=" + url + "&tttl=" + title, reddit: "reddit.com/submit?url=" + url + "&title=" + title,  simpy: "simpy.com/simpy/LinkAdd.do?note=" + title + "&href=" + url, sphinn: "www.sphinn.com/submit.php?url=" + url + "&title=" + title, stumbleupon: "stumbleupon.com/submit?url=" + url + "&title=" + title, taggly: "taggly.com/bookmarks.php/pass?action=add&address=" + url, technorati: "technorati.com/faves?add=" + url, tellfriends: "tellfriends.com/topics/create?url=" + url, yahoo: "myweb.yahoo.com/myresults/bookmarklet?t=" + title + "&u=" + url + "&ei=UTF"}, z = "";var b = [];for (var i in r) {var ii = 0;if (r.hasOwnProperty(i)) {b[b.length] =getPic("http://" + r[i], i).link("http://" + r[i]);}}return b.join("");}


var ied= !! window.Opera //document.all

    function getPic(s, tt) {
	var vi = "given a url, gets the favoicon from that site.";
        var t = s.split(/\//g);
        var sty = ied ? "inline" : "none";
        var ims = t.slice(0, 3).join("/") + "/favicon.ico";
        return ims ? "<img width='25' height='25'  style='display:'" + sty + "' onload='this.style.display=\"inline\"; '  src='" + ims + "' title='" + tt + "' />" : "&gt;" + tt || "";
    }



    function getFeed(feed, callback) {
	var vi = "gets a rss feed to the callback";
        var src = "http://pipes.yahoo.com/pipes/9oyONQzA2xGOkM4FqGIyXQ/run?&_render=json&_callback=" + callback + "&feed=" + encodeURIComponent(feed);
        if (feed.match && feed.match(/pipes\.yahoo\.com/)) {
            src = feed + "?_render=json&_callback=" + callback;
        }
        jsGet(src);
    }


    function boot() {
	document.body.style.overflowX="hidden";
        el.d = document;
	col2=   el("col2") //document.all ? document.all("col2") : el("col2");
	posts = el("posts");
        setTimeout(popNewsColumn, 150);
        el("social").innerHTML = social();
        var bas = location.href.split("#")[0];

var hsh =window.location.hash.toString();

if(hsh){
	var id=  'http://dldavis2.tumblr.com/api/read/json?callback=postCB2&id=' + hsh.substr(2);
	setTimeout( function(){   jsGet(id);    }, 50);
}else{
	setTimeout( " jsGet('http://dldavis2.tumblr.com/api/read/json?callback=postCB&start=0&num=7')", 50);
}

	setTimeout("jsGet('http://feeds.delicious.com/feeds/json/rndme/bundle:js?count=90&callback=delCB')", 450);
        tags("a").filter(function (a) {return a.href.split("#")[0] !== bas;}).map(function (a) {a.target = "_blank";});
        return "ok";
    }


function popNewsColumn(){
	getFeed( newsFeeds.random() , "rssCB");
	getFeed( newsFeeds.random() , "rssCB");
}



    function showLinks() {
      posts.innerHTML = App.loadDisp;
        if (delCB.data) {
            delCBView(delCB.data);
        } else {
            jsGet("http://feeds.delicious.com/feeds/json/rndme/bundle:js?count=90&callback=delCBView");
        }
    }


function showNews(){
      posts.innerHTML = App.loadDisp;
	App.mode = "news";
 	getFeed( newsFeeds.random() , "rssViewCB" );
}


function hide(s) {if (s.split) {s = el(s);}s.style.display = "none";};
function show(s) {if (s.split) {s = el(s);}s.style.display = "block";}

Object.prototype.hide=function(){ 
	if(this.splice){ return this.map(hide); } hide(this); }

Object.prototype.show=function(){ 
	if(this.splice){ return this.map(show); } show(this); }


el.d = document;
var col2, posts;

