/* ===========================================================================
 *
 * JQuery URL Parser
 * Version 1.0
 * Parses URLs and provides easy access to information within them.
 *
 * Author: Mark Perkins
 * Author email: mark@allmarkedup.com
 *
 * For full documentation and more go to http://projects.allmarkedup.com/jquery_url_parser/
 *
 * ---------------------------------------------------------------------------
 *
 * CREDITS:
 *
 * Parser based on the Regex-based URI parser by Stephen Levithian.
 * For more information (including a detailed explaination of the differences
 * between the 'loose' and 'strict' pasing modes) visit http://blog.stevenlevithan.com/archives/parseuri
 *
 * ---------------------------------------------------------------------------
 *
 * LICENCE:
 *
 * Released under a MIT Licence. See licence.txt that should have been supplied with this file,
 * or visit http://projects.allmarkedup.com/jquery_url_parser/licence.txt
 *
 * ---------------------------------------------------------------------------
 * 
 * EXAMPLES OF USE:
 *
 * Get the domain name (host) from the current page URL
 * jQuery.url.attr("host")
 *
 * Get the query string value for 'item' for the current page
 * jQuery.url.param("item") // null if it doesn't exist
 *
 * Get the second segment of the URI of the current page
 * jQuery.url.segment(2) // null if it doesn't exist
 *
 * Get the protocol of a manually passed in URL
 * jQuery.url.setUrl("http://allmarkedup.com/").attr("protocol") // returns 'http'
 *
 */
jQuery.url=function()
{var segments={};var parsed={};var options={url:window.location,strictMode:false,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};var parseUri=function()
{str=decodeURI(options.url);var m=options.parser[options.strictMode?"strict":"loose"].exec(str);var uri={};var i=14;while(i--){uri[options.key[i]]=m[i]||"";}
uri[options.q.name]={};uri[options.key[12]].replace(options.q.parser,function($0,$1,$2){if($1){uri[options.q.name][$1]=$2;}});return uri;};var key=function(key)
{if(!parsed.length)
{setUp();}
if(key=="base")
{if(parsed.port!==null&&parsed.port!=="")
{return parsed.protocol+"://"+parsed.host+":"+parsed.port+"/";}
else
{return parsed.protocol+"://"+parsed.host+"/";}}
return(parsed[key]==="")?null:parsed[key];};var param=function(item)
{if(!parsed.length)
{setUp();}
return(parsed.queryKey[item]===null)?null:parsed.queryKey[item];};var setUp=function()
{parsed=parseUri();getSegments();};var getSegments=function()
{var p=parsed.path;segments=[];segments=parsed.path.length==1?{}:(p.charAt(p.length-1)=="/"?p.substring(1,p.length-1):path=p.substring(1)).split("/");};return{setMode:function(mode)
{strictMode=mode=="strict"?true:false;return this;},setUrl:function(newUri)
{options.url=newUri===undefined?window.location:newUri;setUp();return this;},segment:function(pos)
{if(!parsed.length)
{setUp();}
if(pos===undefined)
{return segments.length;}
return(segments[pos]===""||segments[pos]===undefined)?null:segments[pos];},attr:key,param:param};}();

/* 
 * Titan - Javascript Web Framework
 * Version 1.0
 * Copyright 2009 Valio, Inc.
 * 
 * Visit the Titan website for more information and documentation:
 * http://www.titanproject.org
 *
 * ---------------------------------------------------------------------------
 *
 * CREDITS:
 *
 * Mike Osuna, Will Wilson, Drew Wilson
 *
 * ---------------------------------------------------------------------------
 *
 * LICENCE:
 *
 * Released under a MIT Licence: http://www.opensource.org/licenses/mit-license.php
 *
 */
(function($){var willChangeStack=[];var didChangeStack=[];function makeChain(target,keys,fn,origTarget,origPath){var key=keys.shift();if(keys.length>0){var nextTarget=$(target).attr(key);var reobserveOriginal=function(){$(origTarget).unobserve(origPath,fn);$(origTarget).observe(origPath,fn);fn();};var undoChainLink=function(){$(target).unbind(key+"-changed",reobserveOriginal);};if(nextTarget){$(target).bind(key+"-changed",reobserveOriginal);return[undoChainLink].concat(makeChain(nextTarget,keys,fn,origTarget,origPath));}}else{$(target).bind(key+"-changed",fn);}
return[];}
$.extend({willChangeValueForKey:function(obj,key){willChangeStack.push({obj:obj,key:key,val:$(obj).valueForKey(key)});},didChangeValueForKey:function(obj,key){var changed=willChangeStack.pop();if(changed.key!=key){console.log("Expected didChangeValueForKey: "+
changed.key+" but got "+key);}
didChangeStack.push(changed);if(willChangeStack.length==0){var changes=didChangeStack;didChangeStack=[];$(changes).each(function(){if($(this.obj).valueForKey(this.key)!==this.val){$(this.obj).trigger(this.key+"-changed",{oldValue:this.val,newValue:$(this.obj).valueForKey(this.key)});}});}},valueForKey:function(obj,key,value){if((value!=undefined)&&(obj.automaticallyNotifiesObserversForKey===undefined||obj.automaticallyNotifiesObserversForKey(key))){$.willChangeValueForKey(obj,key);}
var val;if($.isFunction(obj[key])){val=obj[key].call(obj,key,value);}else{if(value!=undefined){obj[key]=value;}
val=obj[key];}
if((value!=undefined)&&(obj.automaticallyNotifiesObserversForKey===undefined||obj.automaticallyNotifiesObserversForKey(key))){$.didChangeValueForKey(obj,key);}
return val;},valueForKeyPath:function(obj,path,value){var keys=path.split(".");var key;while(keys.length>1){key=keys.shift();obj=$(obj).valueForKey(key);if(obj==undefined){return undefined;}}
key=keys.shift();return $(obj).valueForKey(key,value);},observe:function(obj,path,fn){var keys=path.split(".");var chainKey=path.replace(/\./g,"_");chain=$(obj).data(chainKey,{});if(keys.length>1){var chain=$(obj).data(chainKey);var tmp=makeChain(obj,keys.slice(),fn,obj,path);chain[$.data(fn)]=tmp;}else{$(obj).bind(path+"-changed",fn);}
return fn;},unobserve:function(obj,path,fn){var keys=path.split(".");if(keys.length>1){var chainKey=path.replace(/\./g,"_");var chain=$(obj).data(chainKey);$(chain[$.data(fn)]).each(function(){this();});}else{$(obj).unbind(path+"-changed",fn);}
return fn;},connect:function(from,fromAttr,to,toAttr){var binding={from:from,to:to,fromAttr:fromAttr,toAttr:toAttr,updateTo:true,updateFrom:true};$(from).data(fromAttr+$.data(to)+toAttr,binding);binding.fromFn=$(from).observe(fromAttr,function(){if(binding.updateTo==false){binding.updateTo=true;binding.updateFrom=true;return;}
binding.updateFrom=false;$(to).valueForKeyPath(toAttr,$(from).valueForKeyPath(fromAttr));});binding.toFn=$(to).observe(toAttr,function(){if(binding.updateFrom==false){binding.updateTo=true;binding.updateFrom=true;return;}
binding.updateTo=false;$(from).valueForKeyPath(fromAttr,$(to).valueForKeyPath(toAttr));});binding.updateTo=false;$(from).valueForKeyPath(fromAttr,$(to).valueForKeyPath(toAttr));},disconnect:function(obj,fromAttr,to,toAttr){var binding=$(obj).data(fromAttr+$.data(to)+toAttr);binding.to.unobserve(toAttr,binding.toFn);binding.from.unobserve(fromAttr,binding.fromFn);}});$.fn.extend({valueForKey:function(key,value){if(value===undefined){return $.valueForKey(this[0],key);}
return this.each(function(){$.valueForKey(this,key,value);});},valueForKeyPath:function(path,value){if(value===undefined){return $.valueForKeyPath(this[0],path);}
return this.each(function(){$.valueForKeyPath(this,path,value);});},observe:function(path,fn){return this.each(function(){$.observe(this,path,fn);});},unobserve:function(path,fn){return this.each(function(){$.unobserve(this,path,fn);});},connect:function(attr,to,toAttr){return this.each(function(){$.connect(this,attr,to,toAttr);});},disconnect:function(attr,to,toAttr){return this.each(function(){$.disconnect(this,attr,to,toAttr);});}});})(jQuery);(function($){$.serialize=function(object){var values=[];var prefix='';values=$.serialize.recursive_serialize(object,values,prefix);param_string=values.join('&');return param_string;};$.serialize.recursive_serialize=function(object,values,prefix){var key;for(key in object){if(typeof object[key]=='object'){if(prefix.length>0){prefix+='['+key+']';}else{prefix+=key;}
values=$.serialize.recursive_serialize(object[key],values,prefix);prefixes=prefix.split('[');if(prefixes.length>1){prefix=prefixes.slice(0,prefixes.length-1).join('[');}else{prefix=prefixes[0];}}else{value=encodeURIComponent(object[key]);if(prefix.length>0){prefixed_key=prefix+'['+key+']';}else{prefixed_key=key;}
prefixed_key=encodeURIComponent(prefixed_key);if(value)values.push(prefixed_key+'='+value);}}
return values;};})(jQuery);(function($){$.controller={defaults:{},array:function(model,conditions){if(this.constructor==$.controller.array){var that=this;this.model=model;if(conditions){this.conditions=conditions;if(conditions.master){this.master=conditions.master[0];this.attr=conditions.master[1];if(this.master){delete this.conditions.master;$(this.master).observe("selection",function(){if(!conditions.noRetrieve){that.retrieve();}});}}
if(conditions.paginate){this.paginating=true;this.overlap=conditions.paginate.overlap;this.perPage=conditions.paginate.perPage;this._page=0;delete this.conditions.paginate;}}
this.retrieve();}else{return new $.controller.array(model,conditions);}},object:function(){if(this.constructor==$.controller.object){}else{return new $.controller.object();}},create:function(model,obj,options){var that=this;var data={};if(model){data=obj;data=$.serialize(data);}else{data=obj;}
$.ajax($.extend({url:$.controller.defaults.url+"/"+model,data:data,type:"POST"},options));},destroy:function(model,id,options){var data={};data={id:id};$.ajax($.extend({url:$.controller.defaults.url+"/"+model+"?"+$.serialize(data),type:"DELETE"},options));},update:function(model,obj,options){var data={};data=obj;$.ajax($.extend({url:$.controller.defaults.url+"/"+model,data:$.serialize(data),contentType:"application/json",type:"PUT"},options));},retrieve:function(model,conditions,options){var that=this;var data={};if(conditions&&conditions!={}){data=$.serialize(conditions);}
$.ajax($.extend({url:$.controller.defaults.url+"/"+model,contentType:"application/json",dataType:"json",type:"GET",data:data},options));}};$.extend($.controller.array.prototype,{root:"",page:function(key,value){if(value!==undefined){this._page=value;this.retrieve();}
return this._page;},create:function(obj){var that=this;$.controller.create(that.model,obj,{success:function(data){that.retrieve();}});},destroy:function(id){var that=this;$.controller.destroy(that.model,id,{success:function(data){that.retrieve();}});},update:function(obj,options){var that=this;var defaults={autoRetrieve:true,complete:function(){}};options=$.extend(defaults,options);$.controller.update(that.model,obj,{success:function(data){if(options.autoRetrieve){that.retrieve();}
if(options.complete){options.complete.call(this);}}});},retrieve:function(){var that=this;var conditions={};function onSuccess(data){data=data.items;that._last_id=undefined;var found=false;if(that._last_id){$(data).each(function(){if(that._last_id==this.id){found=true;$(that).valueForKey("selection",this);return false;}});if(!found&&data.length>0){$(that).valueForKey("selection",data[0]);}}else{$.willChangeValueForKey(that,"selection");that.selection=undefined;$.didChangeValueForKey(that,"selection");}
$(that).valueForKey("contents",data);}
if(that.master){var selection=$(that.master).valueForKey("selection");if(selection){conditions[that.attr]=$(selection).valueForKey("id");}else{$(that).valueForKey("contents",[]);return;}}
if($(that).valueForKey("selection")!==undefined){that._last_id=$(that).valueForKeyPath("selection.id");}
conditions=$.extend(conditions,this.conditions);if(this.paginating){$.controller.retrieve(that.model+"/count",conditions,{success:function(total){that.total=total;if(total>0&&that._page===0){that._page=1;}
var extra=that.overlap*(that.total/that.perPage);that.pages=parseInt(that.total/(that.perPage-that.overlap));that.offset=(that._page-1)*(that.perPage-that.overlap);conditions['limit']=that.perPage;conditions['offset']=that.offset;$.controller.retrieve(that.model,conditions,{success:onSuccess});}});}else{$.controller.retrieve(that.model,conditions,{success:onSuccess});}}});})(jQuery);(function($){$.template=function(root,controller,options){var tpl=this;var defaults={};tpl.root=root;tpl.pristine=$(root).cloneTemplate(true)[0];tpl.contents=[];tpl.controller=controller;this.options=$.extend(defaults,options);$(tpl).observe("contents",function(){tpl.render();});$(this).connect("contents",controller,"contents");}
$.template.prefix="ti_";$.template.defaultRender=function(elem,data){$(elem).data("data",data);if($(elem).data("format")){return $(elem).data("format").call(this,elem,data);}else{var classes=elem.className.split(/\s+/);var prefix=new RegExp("^"+$.template.prefix);for(var i=0;i<classes.length;i++){if(prefix.test(classes[i])){var curData=data[classes[i].replace(prefix,"")];if(curData!=undefined){if(curData.constructor==Array){var tmp=$("<div></div>");$(curData).each(function(){$(tmp).append($.visit($(elem).cloneTemplate(true)[0],this,$.template.defaultRender));});$(elem).empty();$(elem).append($(tmp).contents());return false;}else{var flat=classes.toString();if(/opt_text/.test(classes)){$(elem).text(curData);}else if(/opt_append/.test(classes)){$(elem).append(curData);}else if(/opt_prepend/.test(classes)){$(elem).prepend(curData);}else{$(elem).html(curData);}
return true;}}}}
if($(elem).data("formatExtend")){$(elem).data("formatExtend").call(this,elem,data);}
return true;}},$.template.prototype={deactivate:function(root){if(this.children){$(this.children).each(function(){this.deactivate(false);});}
if(!root){$(this).disconnect("contents",this.controller,"contents");delete this.controller;}},render:function(){var tpl=this;var contents=$(tpl).valueForKey("contents");if(contents){$(tpl.root).empty();$(contents).each(function(i){$(tpl.root).append($.visit($(tpl.pristine).cloneTemplate(true)[0],this,$.template.defaultRender));});}
if(this.options.success){this.options.success();}}}
$.visit=function(root,data,fn){var func,start,current,next=null;current=start=root;do{if(current.nodeType==1){if(fn.call(this,current,data)){next=current.firstChild||current.nextSibling;}else{next=current.nextSibling;}}else{next=current.firstChild||current.nextSibling;}
var tmp=current;if(!next){var tmp=current;do{next=tmp.parentNode||start;if(next==start)break;tmp=next;next=next.nextSibling;}while(!next);}
current=next;}while(current!=start);return $(start).contents();}
$.fn.cloneTemplate=function(events){var ret=$(this).clone(events);var clone=ret.find("*").andSelf();$(this).find("*").andSelf().each(function(i){if(this.nodeType==3)
return;var format=$.data(this,"format");if(format){$.data(clone[i],"format",format);}
var formatExtend=$.data(this,"formatExtend");if(formatExtend){$.data(clone[i],"formatExtend",formatExtend);}});return ret;}
$.fn.format=function(fn){return $(this).data("format",fn);}
$.fn.formatExtend=function(fn){return $(this).data("formatExtend",fn);}
$.fn.template=function(controller,options){return this.each(function(){$(this).data("template",new $.template(this,controller,options))});}})(jQuery);(function($){$.fillIn=function(obj,data){obj=$.extend({},obj);for(attr in obj){if(obj[attr].constructor==Array){$(obj[attr]).each(function(){obj[attr]=$.fillIn(obj[attr],data);});}else if(typeof obj[attr]=="object"){obj[attr]=$.fillIn(obj[attr],data);}else if(typeof obj[attr]=="string"){obj[attr]=obj[attr].replace(/{([^{}]*)}/g,function(tag,name){var value=data[name];return typeof value==='string'||typeof value==='number'?value:tag;});}}
return obj;}})(jQuery);(function($){$.fn.hasData=function(key,value){var returnVal=false;var curData=$(this).data("data");if(curData){$.each(curData,function(objKey,objVal){if(value){if(key==objKey&&value==objVal){returnVal=true;}}else{if(key==objKey&&objVal!=""){returnVal=true;}}});}
return returnVal;}})(jQuery);(function($){function date(format,timestamp){var a,jsdate=((typeof(timestamp)=='undefined')?new Date():(typeof(timestamp)=='number')?new Date(timestamp*1000):new Date(timestamp));var pad=function(n,c){if((n=n+"").length<c){return new Array(++c-n.length).join("0")+n;}else{return n;}};var txt_weekdays=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var txt_ordin={1:"st",2:"nd",3:"rd",21:"st",22:"nd",23:"rd",31:"st"};var txt_months=["","January","February","March","April","May","June","July","August","September","October","November","December"];var f={d:function(){return pad(f.j(),2);},D:function(){var t=f.l();return t.substr(0,3);},j:function(){return jsdate.getDate();},l:function(){return txt_weekdays[f.w()];},N:function(){return f.w()+1;},S:function(){return txt_ordin[f.j()]?txt_ordin[f.j()]:'th';},w:function(){return jsdate.getDay();},z:function(){return(jsdate-new Date(jsdate.getFullYear()+"/1/1"))/864e5>>0;},W:function(){var a=f.z(),b=364+f.L()-a;var nd2,nd=(new Date(jsdate.getFullYear()+"/1/1").getDay()||7)-1;if(b<=2&&((jsdate.getDay()||7)-1)<=2-b){return 1;}else{if(a<=2&&nd>=4&&a>=(6-nd)){nd2=new Date(jsdate.getFullYear()-1+"/12/31");return date("W",Math.round(nd2.getTime()/1000));}else{return(1+(nd<=3?((a+nd)/7):(a-(7-nd))/7)>>0);}}},F:function(){return txt_months[f.n()];},m:function(){return pad(f.n(),2);},M:function(){t=f.F();return t.substr(0,3);},n:function(){return jsdate.getMonth()+1;},t:function(){var n;if((n=jsdate.getMonth()+1)==2){return 28+f.L();}else{if(n&1&&n<8||!(n&1)&&n>7){return 31;}else{return 30;}}},L:function(){var y=f.Y();return(!(y&3)&&(y%1e2||!(y%4e2)))?1:0;},o:function(){if(f.n()===12&&f.W()===1){return jsdate.getFullYear()+1;}
if(f.n()===1&&f.W()>=52){return jsdate.getFullYear()-1;}
return jsdate.getFullYear();},Y:function(){return jsdate.getFullYear();},y:function(){return(jsdate.getFullYear()+"").slice(2);},a:function(){return jsdate.getHours()>11?"pm":"am";},A:function(){return f.a().toUpperCase();},B:function(){var off=(jsdate.getTimezoneOffset()+60)*60;var theSeconds=(jsdate.getHours()*3600)+
(jsdate.getMinutes()*60)+
jsdate.getSeconds()+off;var beat=Math.floor(theSeconds/86.4);if(beat>1000)beat-=1000;if(beat<0)beat+=1000;if((String(beat)).length==1)beat="00"+beat;if((String(beat)).length==2)beat="0"+beat;return beat;},g:function(){return jsdate.getHours()%12||12;},G:function(){return jsdate.getHours();},h:function(){return pad(f.g(),2);},H:function(){return pad(jsdate.getHours(),2);},i:function(){return pad(jsdate.getMinutes(),2);},s:function(){return pad(jsdate.getSeconds(),2);},u:function(){return pad(jsdate.getMilliseconds()*1000,6);},I:function(){var DST=(new Date(jsdate.getFullYear(),6,1,0,0,0));DST=DST.getHours()-DST.getUTCHours();var ref=jsdate.getHours()-jsdate.getUTCHours();return ref!=DST?1:0;},O:function(){var t=pad(Math.abs(jsdate.getTimezoneOffset()/60*100),4);if(jsdate.getTimezoneOffset()>0)t="-"+t;else t="+"+t;return t;},P:function(){var O=f.O();return(O.substr(0,3)+":"+O.substr(3,2));},Z:function(){var t=-jsdate.getTimezoneOffset()*60;return t;},c:function(){return f.Y()+"-"+f.m()+"-"+f.d()+"T"+f.h()+":"+f.i()+":"+f.s()+f.P();},r:function(){return f.D()+', '+f.d()+' '+f.M()+' '+f.Y()+' '+f.H()+':'+f.i()+':'+f.s()+' '+f.O();},U:function(){return Math.round(jsdate.getTime()/1000);}};return format.replace(/[\\]?([a-zA-Z])/g,function(t,s){if(t!=s){ret=s;}else if(f[s]){ret=f[s]();}else{ret=s;}
return ret;});}
$.formatDate=function(format,prop,tzoffset){return function(elem,data){var ca=$(data).valueForKey(prop);if(ca==undefined||ca==""){$(elem).html("");}else{var m=ca.match(/(\d{4})-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/);var t=new Date(m[1],m[2]-1,m[3],m[4],m[5],m[6]);var tz=0;if(tzoffset){tz=t.getTimezoneOffset()*60;}
t=(t.getTime()*0.001)-tz;$(elem).html(date(format,t));}}}
$.fn.formatDate=function(format,prop,tzoffset){return $(this).format($.formatDate(format,prop,tzoffset));}
function number_format(number,decimals,dec_point,thousands_sep){var n=number,prec=decimals,dec=dec_point,sep=thousands_sep;n=!isFinite(+n)?0:+n;prec=!isFinite(+prec)?0:Math.abs(prec);sep=sep==undefined?',':sep;var s=n.toFixed(prec),abs=Math.abs(n).toFixed(prec),_,i;if(abs>1000){_=abs.split(/\D/);i=_[0].length%3||3;_[0]=s.slice(0,i+(n<0))+
_[0].slice(i).replace(/(\d{3})/g,sep+'$1');s=_.join(dec||'.');}else{s=abs.replace('.',dec_point);}
return s;}
$.fn.formatNumber=function(number,options){var defaults={decimals:0,decPoint:".",thousandsSep:""};var opts=$.extend(defaults,options);return $(this).format(function(elem,data){var val=$(data).valueForKey(number);decimals=opts.decimals;decPoint=opts.decPoint;thousandsSep=opts.thousandsSep;if(val==undefined||val==""){$(elem).html("");}else{$(elem).html(number_format(val,decimals,decPoint,thousandsSep));}});}
$.fn.formatLink=function(text,href,options){var defaults={title:"",className:"",target:""};return $(this).format(function(elem,data){var opts=$.extend(defaults,{text:text,href:href},options);opts=$.fillIn(opts,data);$(elem).text(opts.text);$(elem).attr("href",opts.href);if(opts.title!=""){$(elem).attr("title",opts.title);}
if(opts.className!=""){$(elem).addClass(opts.className);}
if(opts.target!=""){$(elem).attr("target",opts.target);}});}
$.fn.formatForm=function(controller,options){return $(this).format(function(elem,data){$(elem).submit(function(event){event.preventDefault();var data=$(elem).serialize();if(options){data=data+"&"+$.serialize(options);}
$.controller.create(false,data,{success:function(){controller.retrieve();}});});});}
$.objCount=function(obj){var count=0;for(k in obj)if(obj.hasOwnProperty(k))count++;return count;}})(jQuery);

/* 
 * Firerift-Titan Core
 * Copyright 2009 Valio, Inc.
 */
$(function(){var controllers={blogs:{controller:"blog/blog_categories",include:"blog_categories",parent_id:""},entries:{controller:"blog/blog_entries",include:"blog_entries",parent_id:"blog_category_id"},entry_comments:{controller:"blog/blog_entry_comments",include:"blog_entry_comments",parent_id:"blog_entry_id"},gallery_categories:{controller:"gallery/gallery_categories",include:"gallery_categories",parent_id:""},galleries:{controller:"gallery/galleries",include:"galleries",parent_id:"gallery_category_id"},media_items:{controller:"gallery/media_items",include:"media_items",parent_id:""},galleries_media_items:{controller:"gallery/galleries_media_items",include:"galleries_media_items",parent_id:"gallery_id"},media_item_comments:{controller:"gallery/media_item_comments",include:"media_item_comments",parent_id:"galleries_media_item_id"},geotags:{controller:"geotag/geotags",include:"geotags",parent_id:"media_item_id"},page_categories:{controller:"page/page_categories",include:"page_categories",parent_id:""},pages:{controller:"page/pages",include:"pages",parent_id:"page_category_id"},tags:{controller:"tag/tags",include:"tags",parent_id:""},taggings:{controller:"tag/taggings",include:"taggings",parent_id:"tag_id"},records:{controller:"data/records",include:"records",parent_id:"data_set_id"},record_values:{controller:"data/record_values",include:"record_values",parent_id:"record_id"},data_fields:{controller:"data/data_fields",include:"data_fields",parent_id:"data_set_id"},data:{controller:"data",include:"data",parent_id:""},blog:{controller:"blog/blog_categories",include:"blog_category",parent_id:""},entry:{controller:"blog/blog_entries",include:"blog_entry",parent_id:"blog_category_id"},entry_comment:{controller:"blog/blog_entry_comments",include:"blog_entry_comment",parent_id:"blog_entry_id"},gallery_category:{controller:"gallery/gallery_categories",include:"gallery_category",parent_id:""},gallery:{controller:"gallery/galleries",include:"gallery",parent_id:"gallery_category_id"},media_item:{controller:"gallery/media_items",include:"media_item",parent_id:""},galleries_media_item:{controller:"gallery/galleries_media_items",include:"galleries_media_item",parent_id:"gallery_id"},media_item_comment:{controller:"gallery/media_item_comments",include:"media_item_comment",parent_id:"galleries_media_item_id"},geotag:{controller:"geotag/geotags",include:"geotag",parent_id:"media_item_id"},page_categorie:{controller:"page/page_categories",include:"page_category",parent_id:""},page:{controller:"page/pages",include:"page",parent_id:"page_category_id"},tag:{controller:"tag/tags",include:"tag",parent_id:""},tagging:{controller:"tag/taggings",include:"tagging",parent_id:"tag_id"},comments:{}};$.controller.defaults.url="http://www.macificent.com/api";$.fn.frConnect=function(controller,options){var opts={};if(!options){options={}}
if(options.success){opts.success=options.success;delete options.success;}
if(controllers[controller]){var controller_url=controllers[controller].controller;}else{var controller_url="data/"+controller;controller="data";}
if(options.include){if(controllers[options.include]){options.include=controllers[options.include].include;}else if(controller_singular[options.include]){options.include=controller_singular[options.include].include;}}
if(options.parent_id){if(controllers[controller].parent_id!=""){options[controllers[controller].parent_id]=options.parent_id;}
delete options.parent_id;}
var cntrl=$.controller.array(controller_url,options);var website_title="Macificent";$(".fr_title, .fr_name").format(function(elem,data){var element=$(elem);if(element.hasClass("fr_title")){var nameTitle=data.title;}else{var nameTitle=data.name;}
if(element.attr("href")!=undefined){if(data.sef_title){element.attr("href",element.attr("href")+data.sef_title);}else{element.attr("href",element.attr("href")+nameTitle);}}
element.html(nameTitle);if(element.hasClass("opt_website_title")){$("title").text(nameTitle+" | "+website_title);}});$(".fr_date").format(function(elem,data){var element=$(elem);var classes=element.attr("class");var format="M j";var time="created_at";if(/opt_full_month/i.test(classes)){format="F j";}
if(/opt_year/i.test(classes)){format=format+", Y";}
if(/opt_time/i.test(classes)){format=format+" | g:i A";}
if(/opt_modified/i.test(classes)){time="modified_at";}
if(/opt_custom/i.test(classes)){time="taken_at";}
var fn=$.formatDate(format,time,true);fn(elem,data);});$(".opt_rss").formatExtend(function(elem,data){if(data.sef_title){if(data._model=="blog_category"){$("head").append('<link rel="alternate" title="'+data.name+'" type="application/rss+xml" href="http://www.macificent.com/feed/blog/'+data.sef_title+'">');}
if(data._model=="gallery"){$("head").append('<link rel="alternate" title="'+data.title+'" type="application/rss+xml" href="http://www.macificent.com/feed/gallery/'+data.sef_title+'">');}}});$(".fr_entry_title").format(function(elem,data){var element=$(elem);if(data.use_title_link=="YES"){var theLink=data.sef_title;if(data.custom_linked=="YES"){theLink=data.title_link;}
if(element.attr("href")!=undefined){element.attr("href","http://www.macificent.com/blog/"+theLink).text(data.title);}else{element.html("<a href='http://www.macificent.com/blog/"+theLink+"'>"+data.title+"</a>");}}else{if(element.attr("href")!=undefined){element.parent().addClass(element.attr("class")).append(data.title);element.hide();}else{element.html(data.title);}}
if(element.hasClass("opt_website_title")){$("title").text(data.title+" | "+website_title);}});$(".fr_text").format(function(elem,data){if(data.auto_br=="YES"){var str=data.text;str=str.replace(/\n/g,"<br />");$(elem).html(str);}else{$(elem).html(data.text);}});var month_names=new Array("January","February","March","April","May","June","July","August","September","October","November","December");var last;if($.url.segment(0)){var cur_date=$.url.segment(0);var cur_year=cur_date.substr(3,4);var cur_month=cur_date.substr(0,2);}
$(".fr_archives_entries").formatExtend(function(elem,data){var element=$(elem);var the_date=data.created_at;var year=the_date.substr(0,4);var month=the_date.substr(5,2);if(last!=year+" "+month){if(element.attr("href")!=undefined){element.find(".fr_archives_date").attr("href","http://www.macificent.com/archives/"+month+"_"+year).text(month_names[parseInt(month)-1]+" "+year);}else{element.find(".fr_archives_date").html('<a href="http://www.macificent.com/archives/'+month+'_'+year+'">'+month_names[parseInt(month)-1]+' '+year+'</a>');}}else{element.find(".fr_archives_date").remove();}
last=year+" "+month;});$(".fr_cover_image").format(function(elem,data){if(data.cover_pic){if(/img/i.test(elem.tagName)){$(elem).attr("src","http://www.macificent.com/upload/media/"+data.cover_pic);}else{$(elem).html(data.cover_pic);}}});$(".fr_gallery_title").format(function(elem,data){var element=$(elem);if(element.attr("href")!=undefined){element.attr("href","http://www.macificent.com/galleries/"+data.sef_title).text(data.title);}else{element.html("<a href='http://www.macificent.com/galleries/"+data.sef_title+"'>"+data.title+"</a>");}
if(element.hasClass("opt_website_title")){$("title").text(data.title+" | "+website_title);}});$(".fr_media").format(function(elem,data){var element=$(elem);if(element.hasClass("opt_text")){if(element.attr("href")!=undefined&&element.attr("href")==""&&!/embed/i.test(data.type)){element.attr("href","http://www.macificent.com/upload/media/"+data.original).text(data.name);}else if(element.attr("href")!=undefined){element.attr("href",element.attr("href")+data.original).text(data.name);}else{element.text(data.name);}}else{var url="http://www.macificent.com/upload/media/"+data.original;if(!/jpg|gif|png/i.test(data.type)&&element.attr("href")!=undefined){element=$(elem).parent();element.addClass("fr_media");element.remove();}
if(/jpg|gif|png/i.test(data.type)){if(element.attr("href")!=undefined&&element.attr("href")==""){element.html('<a href="http://www.macificent.com/upload/media/'+data.original+'"><img src="http://www.macificent.com/upload/media/'+data.resized+'"></a>');}else if(element.attr("href")!=undefined){element.html('<a href="'+element.attr("href")+data.original+'"><img src="http://www.macificent.com/upload/media/'+data.resized+'" longdesc="http://www.macificent.com/upload/media/'+data.original+'"></a>');}else{element.html('<img src="http://www.macificent.com/upload/media/'+data.resized+'" longdesc="http://www.macificent.com/upload/media/'+data.original+'">');}}else if(/mov/i.test(data.type)){element.html('<OBJECT CLASSID=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\" CODEBASE=\"http://www.apple.com/qtactivex/qtplugin.cab\" HEIGHT=\"'+(parseInt(data.height)+16)+'\" WIDTH=\"'+data.width+'\">'
+'<PARAM NAME=\"src\" VALUE=\"'+url+'\" />'
+'<PARAM NAME=\"CONTROLLER\" VALUE=\"true\" />'
+'<PARAM NAME=\"AutoPlay\" VALUE=\"false\" />'
+'<PARAM NAME=\"Loop\" VALUE=\"false\" />'
+'<PARAM NAME=\"TARGET\" VALUE=\"myself\" />'
+'<EMBED SRC=\"'+url+'\" HEIGHT=\"'+(parseInt(data.height)+16)+'\" WIDTH=\"'+data.width+'\" TYPE=\"video/quicktime\" PLUGINSPAGE=\"http://www.apple.com/quicktime/download/\" CONTROLLER=\"true\" AUTOPLAY=\"false\" LOOP=\"false\" TARGET=\"myself\" />'
+'</OBJECT>');}else if(/mpeg|mpg/i.test(data.type)){element.html('<object classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\" type=\"video/quicktime\" width=\"'+data.width+'\" height=\"'+(parseInt(data.height)+16)+'\" data=\"'+url+'\" standby=\"Loading MPEG video...\">'
+'<param name=\"src\" value=\"'+url+'\" />'
+'<param name=\"autoplay\" value=\"false\" />'
+'<param name=\"controller\" value=\"true\" />'
+'<param name=\"scale\" value=\"tofit\" />'
+'</object>');}else if(/avi/i.test(data.type)){element.html('<object CLASSID=\"CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95\" codebase=\"http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701\" standby=\"Loading Microsoft Windows Media Player components...\" type=\"application/x-oleobject\" width=\"'+data.width+'\" height=\"'+(parseInt(data.height)+16)+'\">'
+'<param name=\"fileName\" value=\"'+url+'\" />'
+'<param name=\"animationatStart\" value=\"true\" />'
+'<param name=\"transparentatStart\" value=\"true\" />'
+'<param name=\"autoStart\" value=\"false\" />'
+'<param name=\"showControls\" value=\"true\" />'
+'<param name=\"Volume\" value=\"-450\" />'
+'<embed type=\"application/x-mplayer2\" pluginspage=\"http://www.microsoft.com/Windows/MediaPlayer/\" src=\"'+url+'\" width='+data.width+' height='+(parseInt(data.height)+16)+' autostart=1 showcontrols=1 volume=-450>'
+'</object>');}else if(/wmv/i.test(data.type)){element.html('<object classid=\"CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6\" id=\"player\" width=\"'+data.width+'\" height=\"'+data.height+'\">'
+'<param name=\"url\" value=\"'+url+'\" />'
+'<param name=\"src\" value=\"'+url+'\" />'
+'<param name=\"showcontrols\" value=\"true\" />'
+'<param name=\"autostart\" value=\"false\" />'
+'<!--[if !IE]>-->'
+'<object type=\"video/x-ms-wmv\" data=\"'+url+'\" width=\"'+data.width+'\" height=\"'+data.height+'\">'
+'<param name=\"src" value=\"'+url+'\" />'
+'<param name=\"autostart\" value=\"false\" />'
+'<param name=\"controller\" value=\"true\" />'
+'</object>'
+'<!--<![endif]-->'
+'</object>');}else if(/embed/i.test(data.type)){element.html(data.embed);}}});$(".fr_guest_name").format(function(elem,data){if(data.guest_website){$(elem).html('<a href="'+data.guest_website+'">'+data.guest_name+'</a>');}else{$(elem).html(data.guest_name);}});$(".fr_comments_count").format(function(elem,data){if(data.blog_entry_comments_count){$(elem).html($.objCount(data.blog_entry_comments));}else if(data.media_item_comments_count){$(elem).html($.objCount(data.media_item_comments));}});$(".fr_comment").format(function(elem,data){if(data.auto_br=="YES"){var str=data.comment;str=str.replace(/\n/g,"<br />");$(elem).html(str);}else{$(elem).html(data.comment);}});$(".fr_comment_form").format(function(elem,data){var element=$(elem);element.submit(function(event){event.preventDefault();element.find(".fr_comment_form_error").html("");var formName=element.find(".fr_comment_form_name");var formText=element.find(".fr_comment_form_text");var formEmail=element.find(".fr_comment_form_email").val();var formWebsite=element.find(".fr_comment_form_website").val();formName.removeClass("error");formText.removeClass("error");if(formName.val()==""&&formText.val()==""){formName.addClass("error");formText.addClass("error");element.find(".fr_comment_form_error").html("You must enter your Name and a Comment.");return false;}else if(formName.val()==""){formName.addClass("error");element.find(".fr_comment_form_error").html("You must enter your Name.");return false;}else if(formText.val()==""){formText.addClass("error");element.find(".fr_comment_form_error").html("You must enter a Comment.");return false;}
if(formWebsite!=""&&formWebsite.substring(0,7)!="http://"){formWebsite="http://"+formWebsite;}
var formData={blog_entry_id:data.id,guest_name:formName.val(),comment:formText.val(),guest_email:formEmail,guest_website:formWebsite}
if(data._model=="blog_entry"){var formController="blog/blog_entry_comments";}else if(data._model=="media_item"){var formController="gallery/media_item_comments";}else if(data._model=="lifestream_entry"){var formController="lifestream/lifestream_entry_comments";}
$.controller.create(formController,formData,{success:function(){element.find(".fr_comment_form_success").html("Your Comment has been added!");}});});});$.template.prefix="fr_";$(this).template(cntrl,opts);}
var allTags=document.body.getElementsByTagName('*');var tables={};for(var tg=0;tg<allTags.length;tg++){var classes=allTags[tg].className.split(/\s+/);for(var i=0;i<classes.length;i++){if(/^fr_/.test(classes[i])){checkForTable(classes[i],allTags[tg]);}}}
function checkForTable(classname,elem){var table=classname.replace(/^fr_/,"");var table_parents=$(elem).parents();if(/^.*_\d+/.test(table)){var id=table.split("_").pop();table=table.replace(/_\d+/,"");}
if(/^.*_dynamic/.test(table)){var dir=$.url.attr("directory");dir=dir.split("/");var sef_title=dir.pop();if(sef_title==""){sef_title=dir.pop();}
table=table.replace(/_dynamic/,"");}
if(/^.*_tag_/.test(table)){var type=table.split("_");type=type[0];if(type=="entries"){type="blog_entry";}
if(type=="galleries"){type="gallery";}
if(type=="pages"){type="page";}
var name=table.split("_").pop();table="taggings";}
if(/^.*archives_/.test(table)){var newTable=table.split("_").pop();table=newTable;}
if(/^data_/.test(table)||controllers[table]){if(!/^data_field/.test(table)&&!/^data_set/.test(table)){table=table.replace(/^data_/,"");}
var child=false;for(var i=0;i<table_parents.length;i++){var classes=table_parents[i].className.split(/\s+/);for(var i2=0;i2<classes.length;i2++){if(tables[classes[i2]]){if(table=="comments"){var table_parent=tables[classes[i2]].table;if(table_parent=="entries"||table_parent=="entry"){table="entry_comments";}else if(table_parent=="medias"||table_parent=="media"){table="media_comments";}}
tables[classes[i2]].include=table;child=true;$(elem).addClass("fr_"+controllers[table].include);}}}
if(!child){tables[classname]={table:table};if(id){tables[classname].id=id;}
if(type){tables[classname].type=type;}
if(name){tables[classname].name=name;}
if(sef_title){tables[classname].sef_title=sef_title;}
if(/opt_category_/.test(elem.className)){var names=elem.className.split(" ");for(i in names){if(/opt_category_/.test(names[i])){var category=names[i].split("_").pop();}}
if(table=="entries"||type=="blog_entry"){tables[classname].blog_category_id=category;}else if(table=="galleries"||type=="gallery"){tables[classname].gallery_category_id=category;}else if(table=="pages"||type=="page"){tables[classname].pages_category_id=category;}else if(table=="data"||type=="data"){tables[classname].data_set_id=category;}}
if(/opt_limit/.test(elem.className)){var names=elem.className.split(" ");for(i in names){if(/opt_limit/.test(names[i])){tables[classname].limit=names[i].replace(/.*opt_limit_/,"");}}}
if(/opt_popular/.test(elem.className)){if(table=="entries"||type=="blog_entry"){tables[classname].order="blog_entry_comments_count";}else if(table=="galleries"||type=="gallery"){tables[classname].order="media_item_comments_count";}}
if(/opt_desc/.test(elem.className)){if(tables[classname].order==undefined||tables[classname].order==""){tables[classname].order="created_at DESC";}else{tables[classname].order=tables[classname].order+" DESC";}}else if(/opt_asc/.test(elem.className)){if(tables[classname].order==undefined||tables[classname].order==""){tables[classname].order="created_at ASC";}else{tables[classname].order=tables[classname].order+" ASC";}}}}}
var counter=$.objCount(tables);var tableCount=0;for(var prop in tables){tableCount++;var table=tables[prop].table;delete tables[prop].table;if(tableCount==counter){tables[prop].success=frSuccess;}
$("."+prop).frConnect(table,tables[prop]);delete tables[prop].success;}
$.fn.frSearch=function(options){var defaults={category:"ALL",limit:10,order:"created_at",noResults:function(){},success:function(){alert("er")}};var conditions=$.extend(defaults,options);var success=conditions.success;var noResults=conditions.noResults;delete conditions.success;delete conditions.noResults;delete conditions.controller.conditions['noRetrieve'];var cntrl=conditions.controller;delete conditions.controller;cntrl.conditions=$.extend(conditions,cntrl.conditions);cntrl.conditions.search=options.search;if(conditions.category!="ALL"&&conditions.category!="all"){if(cntrl['model']=="blog/blog_entries"){cntrl.conditions.blog_category_id=conditions.category;}else if(cntrl['model']=="gallery/galleries"){cntrl.conditions.gallery_category_id=conditions.category;}else if(cntrl['model']=="data/data_sets"){cntrl.conditions.data_set_id=conditions.category;}}
delete conditions.category;var completed=function(data){success.call(this,data);if(data.count==0){noResults.call(this,data);}}
cntrl.retrieve({success:completed});}
$(".fr_search").each(function(){var element=$(this);var limit=10;var category="ALL";var classes=element[0].className.split(/\s+/);for(var i=0;i<classes.length;i++){if(/^opt_limit_/.test(classes[i])){limit=classes[i].split("_").pop();}
if(/^opt_category_/.test(classes[i])){category=classes[i].split("_").pop();}}
var type,published,include;if(element.hasClass("opt_entries")){type="blog/blog_entries";published="YES";}else if(element.hasClass("opt_galleries")){type="gallery/galleries";include="media_items";published="YES";}else if(element.hasClass("opt_data")){type="data/data_sets";}
var cntrl=$.controller.array(type,{noRetrieve:true});$(".fr_search_results").template(cntrl);element.submit(function(event){event.preventDefault();var query=element.find(".fr_search_text").val();if(query!=""){element.frSearch({search:query,controller:cntrl,category:category,published:published,include:include,limit:limit,noResults:function(){$(".fr_search_results").html("Nothing was found for your search <b>"+element.find(".fr_search_text").val()+"</b>.");}});}});});});
