/* Combined file generated 2012-01-22 15:37 */
/* js/framework/core.js */
/*

 Daniel15 JavaScript Framework - By Daniel15, 2011
 http://dl.vc/jsframework
 Feel free to use any of this, but please link back to my site (dan.cx)
*/
var Util={emptyFn:function(){},extend:function(a,c){for(var b in c||{})c.hasOwnProperty(b)&&(a[b]=c[b]);return a},buildQueryString:function(a){var c=[],b;for(b in a)if(a.hasOwnProperty(b))if(a[b]instanceof Array)for(var d=0,e=a[b].length;d<e;d++)c.push(b+"[]="+encodeURIComponent(a[b][d]));else if("object"==typeof a[b])for(var f in a[b])a.hasOwnProperty(b)&&c.push(b+"["+f+"]="+encodeURIComponent(a[b][f]));else c.push(b+"="+encodeURIComponent(a[b]));return c.join("&")}},Browser={ie:function(){for(var a=
3,c=document.createElement("div"),b=c.getElementsByTagName("i");c.innerHTML="<\!--[if gt IE "+ ++a+"]><i></i><![endif]--\>",b[0];);return 4<a?a:void 0}()};Util.extend(Function.prototype,{delay:function(a){return setTimeout(this,a)}});
if(!Function.prototype.bind)Function.prototype.bind=function(a){var c=Array.prototype.slice.call(arguments,1),b=this,d=function(){},e=function(){return b.apply(this instanceof d?this:a||window,c.concat(Array.prototype.slice.call(arguments)))};d.prototype=this.prototype;e.prototype=new d;return e};if(!String.prototype.trim)String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")};if(!Object.create)Object.create=function(a){function c(){}c.prototype=a;return new c};

/* js/framework/ajax.js */
var Ajax=function(a,b){this.url=a;this.currentRequest=null;this.options=Util.extend({method:"post",onSuccess:Util.emptyFn,onFailure:Util.emptyFn,onComplete:Util.emptyFn,format:"json",data:null,context:null},b)};Ajax.requestCount=0;Ajax.requests={};
Ajax.prototype={send:function(a){if(this.currentRequest)this.currentRequest.onreadystatechange=Util.emptyFn,this.currentRequest.abort();var b=this.currentRequest=this._getXHR();b.open(this.options.method,this.url,true);b.setRequestHeader("X-Requested-With","XMLHttpRequest");this.options.method=="post"&&b.setRequestHeader("Content-Type","application/x-www-form-urlencoded");var c=this,d=++Ajax.requestCount;Ajax.requests[d]=b;b.onreadystatechange=function(){b.readyState==4&&c._onComplete(b,d)};b.send(Util.buildQueryString(a||
this.options.data))},_onComplete:function(a,b){var c=a.status==200?this.options.onSuccess:this.options.onFailure;if(this.options.format=="json"){try{var d=JSON.parse(a.responseText)}catch(e){this.options.onFailure.call(this.options.context,a.responseText,a,e)}c.call(this.options.context,d,a)}else c.call(this.options.context,a.responseText,a);this.options.onComplete(a);this.currentRequest=null;Ajax.requests[b]=null;delete Ajax.requests[b]},_getXHR:function(){if(window.XMLHttpRequest)return function(){return new XMLHttpRequest};
else if(window.ActiveXObject)return function(){try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(b){}try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(c){}alert("Could not create AJAX requester!")}}()};window.onunload=function(){for(var a in Ajax.requests)Ajax.requests[a].onreadystatechange=Util.emptyFn,Ajax.requests[a].abort()};if(!window.JSON)window.JSON={};
if(!window.JSON.parse)window.JSON.parse=function(a){a=a.replace(/[\n\r]/g,"");return eval("("+a+")")};

/* js/framework/dom.js */
var DOM={cache:[],JS_ELEMENT_ID:"js-element-id",create:function(a,b,c,d){void 0==c&&(c=!0);a=document.createElement(a);Util.extend(a,b);if(d)for(var e in d)d.hasOwnProperty(e)&&a.setAttribute(e,d[e]);return c?DOM.wrap(a):a},wrap:function(a){if(!a)return null;if(a instanceof ElementWrapper)return a;"string"==typeof a&&(a=document.getElementById(a));var b=a.getAttribute(this.JS_ELEMENT_ID);if(b)return this.cache[b];b=new ElementWrapper(a);a.setAttribute(this.JS_ELEMENT_ID,this.cache.push(b)-1);return b},
wrapAll:function(a){return new ElementWrapperList(a)}};function ElementWrapper(a){this.element=a}
ElementWrapper.prototype={getElementId:function(){return this.element.getAttribute(DOM.JS_ELEMENT_ID)},set:function(a,b){this.element[a]=b;return this},get:function(a){return this.element[a]},insertAfter:function(a){this.element.parentNode.insertBefore(a.element,this.element.nextSibling);return this},append:function(a){var b=document.createElement("div");for(b.innerHTML=a;b.firstChild;)this.element.appendChild(b.firstChild);return this},getPosition:function(){var a=this.element,b=0,c=0;do b+=a.offsetLeft,
c+=a.offsetTop;while(a=a.offsetParent);return{x:b,y:c}},setStyle:function(a,b){this.element.style[a]=b;return this},setStyles:function(a){for(var b in a)this.setStyle(b,a[b]);return this},hasClass:function(a){return-1<(" "+(this.element||this).className.toUpperCase()+" ").indexOf(" "+a.toUpperCase()+" ")},addClass:function(a){this.element.className+=" "+a;return this},removeClass:function(a){this.element.className=(" "+this.element.className+" ").replace(" "+a+"","").trim();return this},firstByTag:function(a,
b){void 0==b&&(b=!0);var c=this.getByTag(a,!1);return c&&c[0]&&(b?DOM.wrap(c[0]):c[0])},getByTag:function(a,b){void 0==b&&(b=!0);var c=this.element.getElementsByTagName(a);return b?DOM.wrapAll(c):c},firstByClass:function(a,b){void 0==b&&(b=!0);var c=this.getByClass(a,!1);return c&&c[0]&&(b?DOM.wrap(c[0]):c[0])},getByClass:function(a,b){void 0==b&&(b=!0);var c=this._getByClass(this.element,a);return b?DOM.wrapAll(c):c},_getByClass:function(){var a=document.createElement("div");return"getElementsByClassName"in
a?function(a,c){return a.getElementsByClassName(c)}:"querySelectorAll"in a?function(a,c){return a.querySelectorAll("."+c)}:function(a,c){for(var d=a.all||a.getElementsByTagName("*"),e=[],g=ElementWrapper.prototype.hasClass,f=0,h=d.length;f<h;f++)g.call(d[f],c)&&e.push(d[f]);return e}}(),firstBySelector:function(a,b){void 0==b&&(b=!0);var c=this.element.querySelectorAll(selectors);return c&&(b?DOM.wrap(c):c)},getBySelector:function(a,b){void 0==b&&(b=!0);var c=this.element.querySelectorAll(a);return b?
DOM.wrapAll(c):c},children:function(){return DOM.wrapAll(this.element.children)},parent:function(a){if(!a)return DOM.wrap(this.element.parentNode);for(var a=a.toUpperCase(),b=this.element.parentNode;b&&b.nodeName.toUpperCase()!=a;)b=b.parentNode;return DOM.wrap(b)},previous:function(){return"previousElementSibling"in document.createElement("div")?function(){return DOM.wrap(this.element.previousElementSibling)}:function(){for(var a=this.element;a=a.previousSibling;)if(1===a.nodeType)return DOM.wrap(a);
return null}}(),next:function(){return"nextElementSibling"in document.createElement("div")?function(){return DOM.wrap(this.element.nextElementSibling)}:function(){for(var a=this.element;a=a.nextSibling;)if(1===a.nodeType)return DOM.wrap(a);return null}}(),remove:function(){DOM.cache[this.element.getAttribute(DOM.JS_ELEMENT_ID)]=null;this.element.parentNode.removeChild(this.element);delete this.element},prependChild:function(a){if(a instanceof ElementWrapper)a=a.element;this.element.insertBefore(a,
this.element.firstChild);return this},cloneNode:function(a){return new ElementWrapper(this.element.cloneNode(a))},setAttribute:function(a,b){this.element.setAttribute(a,b);return this},getAttribute:function(a){return this.element.getAttribute(a)},appendChild:function(a){if(a instanceof ElementWrapper)a=a.element;this.element.appendChild(a);return this},removeChild:function(a){if(a instanceof ElementWrapper)a=a.element;this.element.removeChild(a);return this}};DOM.body=DOM.wrap(document.body);
function $(a){return DOM.wrap(a)}function ElementWrapperList(a){for(var b=0,c=a.length;b<c;b++)this[b]=DOM.wrap(a[b]);this.length=a.length}ElementWrapperList.prototype={toArray:function(){return Array.prototype.slice.call(this)}};(function(){for(var a="set,setAttribute,remove,addClass,removeClass,setStyle,setStyles".split(","),b=0,c=a.length;b<c;b++){var d=a[b];ElementWrapperList.prototype[d]=function(a){return function(){for(var b=0;b<this.length;b++)this[b][a].apply(this[b],arguments);return this}}(d)}})();

/* js/framework/events.js */
var Events=function(){return Util.extend(document.addEventListener?{add:function(a,b,c){a.addEventListener(b,c,false)},stop:function(a){a.preventDefault();a.stopPropagation()}}:{add:function(a,b,c){a["e"+b+c]=c;a[b+c]=function(){var d=window.event;d.target=d.srcElement;d.currentTarget=a;a["e"+b+c](d)};a.attachEvent("on"+b,a[b+c])},stop:function(a){a.returnValue=false;a.cancelBubble=true}},{initPage:function(a){if(window.Page){Page.Global&&Page.Global.init();a||(a=document.body.id);var a=a.split("-"),
b=a.shift(),b=b.charAt(0).toUpperCase()+b.slice(1);if(obj=Page[b]){obj.init&&obj.init();for(var b=0,c=a.length;b<c;b++){var d=a[b].charAt(0).toUpperCase()+a[b].slice(1);obj[d]&&obj[d].init&&obj[d].init()}}}}})}(),EventDelegation={delegates:{},add:function(a,b,c,d,f){var e=a.getElementId();this.delegates[e]||(this.delegates[e]={});this.delegates[e][b]||(this.delegates[e][b]=[],a.addEvent(b,this.handle.bind(this)));this.delegates[e][b].push({tagName:c.toUpperCase(),className:d,fn:f})},handle:function(a){var b=
$(a.currentTarget).getElementId(),c=$(a.target);if(this.delegates[b]&&this.delegates[b][a.type])for(var b=this.delegates[b][a.type],d=0,f=b.length;d<f;d++){var e=b[d];c.get("nodeName").toUpperCase()==e.tagName&&(!e.className||c.hasClass(e.className))&&e.fn.call(c,a)}}};Util.extend(ElementWrapper.prototype,{addEvent:function(a,b){Events.add(this.element,a,b);return this},addDelegate:function(a,b,c,d){EventDelegation.add(this,a,b,c,d);return this}});

/* js/framework/storage.js */
(function(){if(!window.localStorage)if(Browser.ie){var a=document.createElement("span");a.id="__daniel15_storage";a.style.behavior="url(#default#userData)";document.body.appendChild(a);window.localStorage={setItem:function(b,c){a.setAttribute(b,c);a.save(window.location.hostname)},getItem:function(b){return a.getAttribute(b)}}}else window.localStorage={setItem:function(){},getItem:function(){return"null"}}})();

/* js/core.js */
/*

 dan.cx JavaScript (revision 2) - By Daniel15, 2011-2012
 Feel free to use any of this, but please link back to my site
*/
var Page={Global:{init:function(){new CheatCode([38,38,40,40,37,39,37,39,66,65,13])}}},CheatCode=function(a){this.keys=a;this.step=0;Events.add(window,"keydown",this.keypress.bind(this))};
CheatCode.prototype={keypress:function(a){a.keyCode!=this.keys[this.step]?this.step=0:++this.step==this.keys.length&&($("default-stylesheet").set("disabled",true),(document.head||document.getElementsByTagName("head")[0]).appendChild(DOM.create("link",{rel:"stylesheet",href:"not_an_easter_egg/zero.css",type:"text/css"},false)))}};

/* js/site.js */
Page.Site={};
Page.Site.Index={init:function(){$("email_address").set("innerHTML","&#100;&#097;&#110;&#105;&#101;&#108;&#049;&#053;&#115;&#105;&#116;&#101;&#064;&#100;&#097;&#110;&#046;&#099;&#120;");$("messenger_address").set("innerHTML","&#x6D;&#x73;&#x6E;&#64;&#100;&#x61;&#110;&#x69;&#x65;&#x6C;&#49;&#53;&#x2E;&#x63;&#111;&#x6D;");$("gtalk_address").set("innerHTML","&#100;&#097;&#110;&#105;&#101;&#108;&#064;&#100;&#049;&#053;&#046;&#098;&#105;&#122;");this.socialfeed=new SocialFeed($("minifeed"),{count:10,loadOnInit:true});
this.initGoogleTalk()},initGoogleTalk:function(){(new Ajax("chatstatus.php",{onSuccess:function(a){$("gtalk").removeClass("offline").addClass(a.status.toLowerCase());$("gtalk_address").set("title",a.status);var b=a.status;a.statusText!=a.status&&(b+=" ("+a.statusText+")");$("gtalk_status").set("innerHTML",b);a.status=="Online"&&$("start_gtalk_chat").setStyle("display","inline")},context:this,abortPrev:false})).send();$("start_gtalk_chat").addEvent("click",function(a){Events.stop(a);window.open(this.href,
"_blank","height=500px,width=300px")})}};
Page.Site.Projects={init:function(){$("sidebar").addDelegate("click","a",null,this.showTech.bind(this))},currentTech:null,showTech:function(a){var b=$(a.target.parentNode),c=b.get("id").substring(5),d=a.target.textContent||a.target.innerText;this.currentTech==b?this.unselectTech():(this.currentTech&&this.currentTech.removeClass("active"),this.currentTech=b,b.addClass("active"),$("intro").setStyle("display","none"),b=$("tech-info"),b.setStyle("display","block"),b.firstByTag("h2").set("innerHTML","About "+
d),b.firstByTag("div").set("innerHTML",tech_descs[c]),c=$("content").getByClass("uses-"+c),$("tech-count").set("innerHTML",c.length),this.toggleAllProjects(false),c.setStyle("display","").addClass("visible"),c=$("active_projects"),c.setStyle("display",c.firstByClass(".visible")?"":"none"));Events.stop(a)},unselectTech:function(){this.currentTech.removeClass("active");this.currentTech=null;$("intro").setStyle("display","");$("tech-info").setStyle("display","");this.toggleAllProjects(true);$("active_projects").setStyle("display",
"")},toggleAllProjects:function(a){for(var b=$("content").getByClass("projects"),c=0;c<b.length;c++)b[c].getByTag("li").setStyle("display",a?"":"none")[a?"addClass":"removeClass"]("visible")}};

/* js/blog.js */
Page.Blog={posts:[],init:function(){this.initSidebar();this.initPosts()},initSidebar:function(){var a=$("sidebar-archives");if(a)for(var a=a.children(),b=0,c=a.length;b<c;b++){var e=a[b],d=e.firstByTag("ul");d.originalHeight=d.get("offsetHeight");d.setStyle("height","0");e.addEvent("click",this.toggleYear.bind(this))}},toggleYear:function(a){var b=$(a.target.parentNode).firstByTag("ul");b.setStyle("height",(0==b.get("offsetHeight")?b.originalHeight:0)+"px");Events.stop(a)},initPosts:function(){for(var a=
$("content").getByTag("article",!1),b=0,c=a.length;b<c;b++)"post-"==a[b].id.slice(0,5)&&this.posts.push(new Blog.Post(DOM.wrap(a[b])))}};
Page.Blog.View={init:function(){$("comments").addDelegate("click","a","reply-to",this.replyToComment);$("cancel-reply").addEvent("click",this.cancelReply.bind(this));this.initPlaceholders();this.loadCommentDetails();$("leave-comment-form").addEvent("submit",this.saveCommentDetails.bind(this))},initPlaceholders:function(){if("placeholder"in document.createElement("input")){for(var a=["author","email","url","subject"],b=0,c=a.length;b<c;b++){var e=$(a[b]),d=e.previous(),f=e.next(),d=d.get("innerHTML").replace(":",
"");f&&(d+=" "+f.get("innerHTML"));e.set("placeholder",d)}DOM.body.addClass("has-placeholders")}},replyToComment:function(a){var b=$(a.target).parent("footer"),c=$(a.target).parent("li").get("id").split("-")[1];b.appendChild($("leave-comment"));$("cancel-reply").setStyle("display","block");$("parent_comment_id").set("value",c);Events.stop(a)},cancelReply:function(a){$("content").appendChild($("leave-comment"));$("cancel-reply").setStyle("display","none");$("parent_comment_id").set("value","");Events.stop(a)},
loadCommentDetails:function(){try{$("author").set("value",$("author").get("value")||window.localStorage.getItem("comment-author")||""),$("email").set("value",$("email").get("value")||window.localStorage.getItem("comment-email")||""),$("url").set("value",$("url").get("value")||window.localStorage.getItem("comment-url")||"")}catch(a){}},saveCommentDetails:function(){try{window.localStorage.setItem("comment-author",$("author").get("value")),window.localStorage.setItem("comment-email",$("email").get("value")),
window.localStorage.setItem("comment-url",$("url").get("value"))}catch(a){}}};
var Blog={Post:function(a){this.post=a;this.id=this.post.get("id").slice(5);a="social/blogpost/"+this.id;this.socialNetworks={};for(var b=this.post.firstByClass("share").getByTag("li"),c=0,e=b.length;c<e;c++)this.socialNetworks[b[c].get("className")]=b[c];this.addPopupHandler("facebook",500,400);this.addPopupHandler("twitter",550,420);this.addPopupHandler("linkedin",520,570);(new Ajax(a,{method:"get",onSuccess:this.updateSocialCounts,context:this,abortPrev:!1})).send()}};
Blog.Post.prototype={addPopupHandler:function(a,b,c){this.socialNetworks[a].firstByTag("a").addEvent("click",function(a){window.open(this.href,"_blank","height="+c+"px,width="+b+"px");Events.stop(a)})},updateSocialCounts:function(a){for(var b in a)this.socialNetworks[b].firstByClass("count").set("innerHTML",a[b])}};

/* js/socialfeed.js */
Page.Site.Socialfeed={init:function(){this.socialfeed=new SocialFeed($("socialfeed"),{loadMore:$("loadMore"),count:25,showDescription:true,loadOnInit:false})}};var SocialFeed=function(c,a){this.container=$(c);this.options=Util.extend({feedurl:"socialfeed/loadjson.php",count:10,showDescription:false,loadOnInit:false},a);(this.loadMoreButton=this.options.loadMore||null)&&this.loadMoreButton.addEvent("click",this.loadMore.bind(this));this.options.loadOnInit&&this.load()};
SocialFeed.prototype={load:function(c){this.loadMoreButton&&this.loadMoreButton.set("innerHTML",'<img src="res/icons/spinner.gif" alt="" title="Loading..." /> Loading...');var a={count:this.options.count};if(c)a.before_date=c;(new Ajax(this.options.feedurl,{onSuccess:this.onSuccess,context:this,data:a})).send()},onSuccess:function(c){var a=this.container.firstByClass("loading");a&&a.remove();for(var a=0,f=c.length;a<f;a++){var b=c[a],d=DOM.create("li",{id:"feeditem-"+b.id,innerHTML:b.text,className:"feeditem source-"+
b.type},true,{"data-date":b.date});d.prependChild(DOM.create("div",{className:"icon"},false));this.options.showDescription&&b.description&&d.appendChild(DOM.create("blockquote",{innerHTML:b.description},false));var g=new Date(b.date*1E3),e=DOM.create("ul",{className:"meta",title:"Via "+b.type},false);e.appendChild(DOM.create("li",{innerHTML:b.relativeDate,title:g,"class":"date"},false));b.subtext&&e.appendChild(DOM.create("li",{innerHTML:b.subtext,className:"subtext"},false));b.url&&e.appendChild(DOM.create("li",
{innerHTML:'<a href="'+b.url+'" target="_blank">View</a>'},false));d.appendChild(e);this.container.appendChild(d)}this.loadMoreButton&&this.loadMoreButton.set("innerHTML","Show more!")},loadMore:function(c){var a=this.container.get("children");this.load(a[a.length-1].getAttribute("data-date"));Events.stop(c)}};

