/**
 * @author Ryan Johnson <ryan@livepipe.net>
 * @copyright 2007 LivePipe LLC
 * @package Prototype.Tidbits
 * @license MIT
 * @url http://livepipe.net/projects/prototype_tidbits/
 * @version 1.6.1
 * 
 * Note that each tidbit is independent, and is meant to be copied and pasted as you see fit into your application rather than used as a whole.
 */


document.getElementsByAttribute=function(attribute,parent){return $A(($(parent)||document.body).getElementsByTagName('*')).inject([],function(elements,child){if(Element.readAttribute(child,attribute))
elements.push(Element.extend(child));return elements;});}
document.getElementsByAttributeValue=function(attribute,value,parent){return $A(($(parent)||document.body).getElementsByTagName('*')).inject([],function(elements,child){if(Element.readAttribute(child,attribute)==value)
elements.push(Element.extend(child));return elements;});}
Element.addMethods({getElementsByAttribute:function(element,attribute){return document.getElementsByAttribute(attribute,element);},getElementsByAttributeValue:function(element,attribute,value){return document.getElementsByAttributeValue(attribute,value,element);}});Element.addMethods({makeUnselectable:function(element,cursor){cursor=cursor||'default';element.onselectstart=function(){return false;};element.unselectable="on";element.style.MozUserSelect="none";return element;},makeSelectable:function(element){element.onselectstart=function(){return true;};element.unselectable="off";element.style.MozUserSelect="";return element;}});if(typeof(Object.Event)=='undefined'){Object.Event={eventHandlers:{},observe:function(event_name,observer){if(!this.eventHandlers[event_name])
this.eventHandlers[event_name]=$A([]);this.eventHandlers[event_name].push(observer);},stopObserving:function(event_name,observer){this.eventHandlers[event_name]=this.eventHandlers[event_name].without(observer);},fireEvent:function(event_name){if(this.eventHandlers[event_name]){this.eventHandlers[event_name].each(function(observer){observer(this);}.bind(this));}}};Object.Event.createEvent=Object.Event.fireEvent;}
Element.addMethods({onmouseenter:function(element,observer){element=$(element);element.observe('mouseover',function(evt,currentTarget){var relatedTarget=$(evt.relatedTarget||evt.fromElement);if(relatedTarget&&relatedTarget!=currentTarget&&relatedTarget.childOf(currentTarget)==false){observer();}}.bindAsEventListener({},element));return element;},onmouseleave:function(element,observer){element=$(element);element.observe('mouseout',function(evt,currentTarget){var relatedTarget=$(evt.relatedTarget||evt.toElement);if(relatedTarget&&relatedTarget!=currentTarget&&relatedTarget.childOf(currentTarget)==false){observer();}}.bindAsEventListener({},element));return element;}});

function generateFlashObject(url,id,width,height,oContainer,bReturn,Style,OtherAttributes,bUseCodeBase,quality,wmode,avatarParams,bPlay,objectId){var VERSION_NUM=0;if(!url)return false;if(!id)id="oAvatarControl";if(bUseCodeBase===true){bUseCodeBase=true;}else{bUseCodeBase=false;}
if(!quality)quality="high";if(!wmode)wmode="Transparent";if(!bPlay)bPlay=false;if(url.indexOf('?')==-1){url+='?';}
url+='&V='+VERSION_NUM;var objId=objectId?objectId:id;var html="";html+='<object name="'+id+'" id="'+objId+'" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"';if(bUseCodeBase){html+=' codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"';}else{html+=' codebase="#version=8,0,0,0"';}
html+=' align="middle"';html+=' onerror="if ( typeof(generateFlashObjectError) == \'function\' ) generateFlashObjectError();return false;"';if(width)html+=' width="'+width+'"';if(height)html+=' height="'+height+'"';if(null!=Style)
html+=Style;if(null!=OtherAttributes)
html+=OtherAttributes;html+='>';html+='<param name="movie" value="'+url+'">';html+='<param name="WMode" value="'+wmode+'">';html+='<param name="allowScriptAccess" value="always">';html+='<param name="quality" value="'+quality+'">';html+='<param name="menu" value="0">';html+='<param name="play" value="'+bPlay+'">';html+='<param name="salign" value="tl">';if(avatarParams)html+='<param name="FlashVars" value="'+avatarParams+'">';var NAV_IE=(navigator.appName.search(/microsoft internet explorer/i)>-1)?true:false;if(!NAV_IE){html+='<embed src="'+url+'" play="'+bPlay+'" menu="'+bPlay+'" quality="'+quality+'" wmode="'+wmode+'"';if(width)html+=' width="'+width+'"';if(height)html+=' height="'+height+'"';if(avatarParams)html+=' FlashVars="'+avatarParams+'"';html+=' name="'+id+'" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" '+'pluginspage="http://www.macromedia.com/go/getflashplayer" />';}
html+='</object>';if(oContainer){oContainer.innerHTML=html;}else if(bReturn){return html;}else{document.write(html);}}
function generateExternalObject(html){document.write(html);}


Array.prototype.sort=function(compareFunction){if(!compareFunction){compareFunction=function(a,b){return a<b?-1:a>b?1:0;}}
var mergeSort=function(list){var left,right,result;if(list.length<=1)
return list;else{var middle=parseInt(list.length/2);left=list.splice(0,middle);right=list;left=mergeSort(left);right=mergeSort(right);result=merge(left,right);return result;}}
var merge=function(left,right){var result=[];while(left.length>0&&right.length>0){if(compareFunction(left[0],right[0])<=0){result.push(left[0]);left=left.splice(1,left.length);}else{result.push(right[0]);right=right.splice(1,right.length);}}
while(left.length>0){result.push(left[0]);left=left.splice(1,left.length);}while(right.length>0){result.push(right[0]);right=right.splice(1,right.length);}
return result;}
var tempArray=this;tempArray=mergeSort(tempArray);for(var i=0;i<tempArray.length;i++){this[i]=tempArray[i];}
return this;}


/*
objSort v 1.1
copyright 2006 Thomas Frank

This program is free software under the terms of the 
GNU General Public License version 2 as published by the Free 
Software Foundation. It is distributed without any warranty.
*/


tfObjSort={init:function(){Array.prototype.objSort=function(){tfObjSort.setThings(this);var a=arguments;var x=tfObjSort;x.a=[];x.d=[];for(var i=0;i<a.length;i++){if(typeof a[i]=="string"){x.a.push(a[i]);x.d.push(1)};if(a[i]===-1){x.d[x.d.length-1]=-1}}
return this.sort(tfObjSort.sorter);};Array.prototype.strSort=function(){tfObjSort.setThings(this);return this.sort(tfObjSort.charSorter)}},sorter:function(x,y){var a=tfObjSort.a
var d=tfObjSort.d
var r=0
for(var i=0;i<a.length;i++){if(typeof x+typeof y!="objectobject"){return typeof x=="object"?-1:1};var m=x[a[i]];var n=y[a[i]];var t=typeof m+typeof n;if(t=="booleanboolean"){m*=-1;n*=-1}
else if(t.split("string").join("").split("number").join("")!=""){continue};r=m-n;if(isNaN(r)){r=tfObjSort.charSorter(m,n)};if(r!=0){return r*d[i]}}
return r},charSorter:function(x,y){if(tfObjSort.ignoreCase){x=x.toLowerCase();y=y.toLowerCase()};var s=tfObjSort.chars;if(!s){return x>y?1:x<y?-1:0};x=x.split("");y=y.split("");l=x.length>y.length?y.length:x.length;var p=0;for(var i=0;i<l;i++){p=s.indexOf(x[i])-s.indexOf(y[i]);if(p!=0){break};};if(p==0){p=x.length-y.length};return p},setThings:function(x){this.ignoreCase=x.sortIgnoreCase;var s=x.sortCharOrder;if(!s){this.chars=false;return true};if(!s.sort){s=s.split(",")};var a="";for(var i=1;i<1024;i++){a+=String.fromCharCode(i)};for(var i=0;i<s.length;i++){z=s[i].split("");var m=z[0];var n=z[1];var o="";if(z[2]=="_"){o=n+m}else{o=m+n};a=a.split(m).join("").split(n).join(o);};this.chars=a}};
tfObjSort.init();


/* -----------------------------------*/
/* --->>> onDOMReady Extension <<<----*/
/* -----------------------------------*/


Object.extend(Event,{_domReady:function(){if(arguments.callee.done)return;arguments.callee.done=true;if(this._timer)clearInterval(this._timer);this._readyCallbacks.each(function(f){f()});this._readyCallbacks=null;},onDOMReady:function(f){if(!this._readyCallbacks){var domReady=this._domReady.bind(this);if(document.addEventListener)
document.addEventListener("DOMContentLoaded",domReady,false);if(/WebKit/i.test(navigator.userAgent)){this._timer=setInterval(function(){if(/loaded|complete/.test(document.readyState))domReady();},10);}
Event.observe(window,'load',domReady);Event._readyCallbacks=[];}
Event._readyCallbacks.push(f);}});

