/* Last changed 2010-05-25
    contains
    
    virtualpaginate.js
    utilities.js
    mootools-beta-1.2.js
    mocha.js
    moo.dropdownmenu.js
    */
    
/* Start virtualpaginate.js 2010-05-25 */

// -------------------------------------------------------------------
// Virtual Pagination Script- By Dynamic Drive, available at: http://www.dynamicdrive.com
// Last updated: May 31st, 2007
//
// PUBLIC: virtualpaginate(className, chunksize)
// Main Virtual Paginate Object function.
// -------------------------------------------------------------------

function virtualpaginate(className, chunksize, elementType){
var elementType=(typeof elementType=="undefined")? "div" : elementType //The type of element used to divide up content into pieces. Defaults to "div"
this.pieces=virtualpaginate.collectElementbyClass(className, elementType) //get total number of divs matching class name
//Set this.chunksize: 1 if "chunksize" param is undefined, "chunksize" if it's less than total pieces available, or simply total pieces avail (show all)
this.chunksize=(typeof chunksize=="undefined")? 1 : (chunksize>0 && chunksize <this.pieces.length)? chunksize : this.pieces.length
this.pagecount=Math.ceil(this.pieces.length/this.chunksize) //calculate number of "pages" needed to show the divs
this.showpage(-1) //show no pages (aka hide all)
this.currentpage=0 //Having hidden all pages, set currently visible page to 1st page
this.showpage(this.currentpage) //Show first page
}

// -------------------------------------------------------------------
// PRIVATE: collectElementbyClass(classname)- Returns an array containing DIVs with the specified classname
// -------------------------------------------------------------------

virtualpaginate.collectElementbyClass=function(classname, element){ //Returns an array containing DIVs with specified classname
var classnameRE=new RegExp("(^|\\s+)"+classname+"($|\\s+)", "i") //regular expression to screen for classname within element
var pieces=[]
var alltags=document.getElementsByTagName(element)
for (var i=0; i<alltags.length; i++){
if (typeof alltags[i].className=="string" && alltags[i].className.search(classnameRE)!=-1)
pieces[pieces.length]=alltags[i]
}
return pieces
}

// -------------------------------------------------------------------
// PUBLIC: showpage(pagenumber)- Shows a page based on parameter passed (0=page1, 1=page2 etc)
// -------------------------------------------------------------------

virtualpaginate.prototype.showpage=function(pagenumber){
var totalitems=this.pieces.length //total number of broken up divs
var showstartindex=pagenumber*this.chunksize //array index of div to start showing per pagenumber setting
var showendindex=showstartindex+this.chunksize-1 //array index of div to stop showing after per pagenumber setting
for (var i=0; i<totalitems; i++){
if (i>=showstartindex && i<=showendindex)
this.pieces[i].style.display="block"
else
this.pieces[i].style.display="none"
}
this.currentpage=parseInt(pagenumber)
if (this.cpspan) //if <span class="paginateinfo> element is present, update it with the most current info (ie: Page 3/4)
this.cpspan.innerHTML='Page '+(this.currentpage+1)+'/'+this.pagecount
}

// -------------------------------------------------------------------
// PRIVATE: paginate_build_() methods- Various methods to create pagination interfaces
// paginate_build_selectmenu(paginatedropdown)- Accepts an empty SELECT element and turns it into pagination menu
// paginate_build_regularlinks(paginatelinks)- Accepts a collection of links and screens out/ creates pagination out of ones with specific "rel" attr
// paginate_build_flatview(flatviewcontainer)- Accepts <span class="flatview"> element and replaces it with sequential pagination links
// paginate_build_cpinfo(cpspan)- Accepts <span class="paginateinfo"> element and displays current page info (ie: Page 1/4)
// -------------------------------------------------------------------

virtualpaginate.prototype.paginate_build_selectmenu=function(paginatedropdown, anchortext){
var instanceOfBox=this
var anchortext=anchortext || new Array()
this.selectmenupresent=1
for (var i=0; i<this.pagecount; i++){
if (typeof anchortext[i]!="undefined") //if custom anchor text for this link exists, use anchor text as each OPTION's text
paginatedropdown.options[i]=new Option(anchortext[i], i)
else //else, use auto incremented, sequential numbers
paginatedropdown.options[i]=new Option("Page "+(i+1)+" of "+this.pagecount, i)
}
paginatedropdown.selectedIndex=this.currentpage
paginatedropdown.onchange=function(){
instanceOfBox.showpage(this.selectedIndex)
}
}

virtualpaginate.prototype.paginate_build_regularlinks=function(paginatelinks){
var instanceOfBox=this
for (var i=0; i<paginatelinks.length; i++){
var currentpagerel=paginatelinks[i].getAttribute("rel")
if (currentpagerel=="previous" || currentpagerel=="next" || currentpagerel=="first" || currentpagerel=="last") //screen for these "rel" values
paginatelinks[i].onclick=function(){
instanceOfBox.navigate(this.getAttribute("rel"))
return false
}
}
}

virtualpaginate.prototype.paginate_build_flatview=function(flatviewcontainer, anchortext){
var instanceOfBox=this
var flatviewhtml=""
var anchortext=anchortext || new Array()
for (var i=0; i<this.pagecount; i++){
if (typeof anchortext[i]!="undefined") //if custom anchor text for this link exists
flatviewhtml+='<a href="#flatview" rel="'+i+'">'+anchortext[i]+'</a> ' //build pagination link using custom anchor text
else
flatviewhtml+='<a href="#flatview" rel="'+i+'">'+(i+1)+'</a> ' //build  pagination link using auto incremented sequential number instead
}
flatviewcontainer.innerHTML=flatviewhtml
this.flatviewlinks=flatviewcontainer.getElementsByTagName("a")
for (var i=0; i<this.flatviewlinks.length; i++){
this.flatviewlinks[i].onclick=function(){
instanceOfBox.flatviewlinks[instanceOfBox.currentpage].className="" //"Unhighlight" last flatview link clicked on...
this.className="selected" //while "highlighting" currently clicked on flatview link (setting its class name to "selected"
instanceOfBox.showpage(this.getAttribute("rel"))
return false
}
}
this.flatviewlinks[this.currentpage].className="selected" //"Highlight" current page
this.flatviewpresent=true //indicate flat view links are present
}

virtualpaginate.prototype.paginate_build_cpinfo=function(cpspan){
this.cpspan=cpspan
cpspan.innerHTML='Page '+(this.currentpage+1)+'/'+this.pagecount
}


// -------------------------------------------------------------------
// PRIVATE: buildpagination()- Create pagination interface by calling one or more of the paginate_build_() functions
// -------------------------------------------------------------------

virtualpaginate.prototype.buildpagination=function(divid, optnavtext){
var instanceOfBox=this
var paginatediv=document.getElementById(divid)
if (this.chunksize==this.pieces.length){ //if user has set to display all pieces at once, no point in creating pagination div
paginatediv.style.display="none"
return
}
var paginationcode=paginatediv.innerHTML //Get user defined, "unprocessed" HTML within paginate div
if (paginatediv.getElementsByTagName("select").length>0) //if there's a select menu in div
this.paginate_build_selectmenu(paginatediv.getElementsByTagName("select")[0], optnavtext)
if (paginatediv.getElementsByTagName("a").length>0) //if there are links defined in div
this.paginate_build_regularlinks(paginatediv.getElementsByTagName("a"))
var allspans=paginatediv.getElementsByTagName("span") //Look for span tags within passed div
for (var i=0; i<allspans.length; i++){
if (allspans[i].className=="flatview")
this.paginate_build_flatview(allspans[i], optnavtext)
else if (allspans[i].className=="paginateinfo")
this.paginate_build_cpinfo(allspans[i])
}
this.paginatediv=paginatediv
}

// -------------------------------------------------------------------
// PRIVATE: navigate(keyword)- Calls this.showpage() with the currentpage property preset based on entered keyword
// -------------------------------------------------------------------

virtualpaginate.prototype.navigate=function(keyword){
if (this.flatviewpresent)
this.flatviewlinks[this.currentpage].className="" //"Unhighlight" previous page (before this.currentpage increments)
if (keyword=="previous")
this.currentpage=(this.currentpage>0)? this.currentpage-1 : (this.currentpage==0)? this.pagecount-1 : 0
else if (keyword=="next")
this.currentpage=(this.currentpage<this.pagecount-1)? this.currentpage+1 : 0
else if (keyword=="first")
this.currentpage=0
else if (keyword=="last")
this.currentpage=this.pieces.length-1
this.showpage(this.currentpage)
if (this.selectmenupresent)
this.paginatediv.getElementsByTagName("select")[0].selectedIndex=this.currentpage
if (this.flatviewpresent)
this.flatviewlinks[this.currentpage].className="selected" //"Highlight" current page
}

/* End virtualpaginate.js */
/* Start utilities.js 2010-05-25 */
/* auto created by Fireworks for metal pill buttons Januar 11, 2008 */
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
/* Functions that swaps down images. */
function MM_nbGroup(event, grpName) { //v6.0
var i,img,nbArr,args=MM_nbGroup.arguments;
  if (event == "init" && args.length > 2) {
    if ((img = MM_findObj(args[2])) != null && !img.MM_init) {
      img.MM_init = true; img.MM_up = args[3]; img.MM_dn = img.src;
      if ((nbArr = document[grpName]) == null) nbArr = document[grpName] = new Array();
      nbArr[nbArr.length] = img;
      for (i=4; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
        if (!img.MM_up) img.MM_up = img.src;
        img.src = img.MM_dn = args[i+1];
        nbArr[nbArr.length] = img;
    } }
  } else if (event == "over") {
    document.MM_nbOver = nbArr = new Array();
    for (i=1; i < args.length-1; i+=3) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = (img.MM_dn && args[i+2]) ? args[i+2] : ((args[i+1])?args[i+1] : img.MM_up);
      nbArr[nbArr.length] = img;
    }
  } else if (event == "out" ) {
    for (i=0; i < document.MM_nbOver.length; i++) { img = document.MM_nbOver[i]; img.src = (img.MM_dn) ? img.MM_dn : img.MM_up; }
  } else if (event == "down") {
    nbArr = document[grpName];
    if (nbArr) for (i=0; i < nbArr.length; i++) { img=nbArr[i]; img.src = img.MM_up; img.MM_dn = 0; }
    document[grpName] = nbArr = new Array();
    for (i=2; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = img.MM_dn = (args[i+1])? args[i+1] : img.MM_up;
      nbArr[nbArr.length] = img;
  } }
}

/* Functions that handle preload. */
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

  /*CHECK AND HANDLE FOR DEFAULT TEXT IN PASSWORD AND EMAIL-->*/
      
    function manageLoginInputDefaultText(box) {
      //var objModalLoginWindow = document.getElementById('modalLoginWindow');    
      //  alert(objModalLoginWindow);
              if (box == 'txtEmail') {
             
                  if (document.getElementById('txtPassword').value != '') { 
                      document.getElementById('txtPassword').className = 'loginBlankBox';  
                      
                  } else {
                      document.getElementById('txtPassword').className = 'loginBlankBox';
                      
                  }
             if (document.getElementById('txtEmail').value == 'Email address') { 
                      document.getElementById('txtPassword').className = 'loginPassword';
                      document.getElementById('txtEmail').value = '';   
                     return true;
                  }
             
              if (document.getElementById('txtEmail').value == '') {        
                      document.getElementById('txtEmail').value = 'Email address'; 
                  }
             }
             
               if (document.getElementById('txtPassword').value == '') { 
                 
                     document.getElementById('txtPassword').className = 'loginPassword';  
                    
                     }   
                 
              
            
                
                /*user clicks the password box*/
                if (box == 'txtPassword') {  
               
                  if (document.getElementById('txtPassword').value == '') { 
                 
                     document.getElementById('txtPassword').className = 'loginBlankBox';  
                    
                     }   
                 
                   if (document.getElementById('txtPassword').value != '') {   
                          document.getElementById('txtPassword').className = 'loginBlankBox';  
                      }  
                      if (document.getElementById('txtEmail').value == '') {   
                          document.getElementById('txtEmail').value = 'Email address'; 
                      }  else {
                                            
                      }  
                    }
                   }
                 
/*end login form handeling*/  

/* Handles the quequing and pausing in our mailing forms */    
function doMailingChoice(stChoice, msg) {
    
    if (stChoice == 'queue') {
        if (!confirm(msg)) {
            return false;
        }
    }
    
    var elemAction = document.getElementById('mailaction');
    elemAction.value = stChoice;

    try {
        document.send.onsubmit();
        }
    catch(e){}
    
    var sendForm = $('send');

    // Should hide the buttons
    
    // might want to let the user know we are processing this
    sendForm.set('send', {async : false, 
                            onSuccess: function(response, xml){             
                                alert(messageStringFromXMLResponse(xml));
                                window.location.replace(window.location);
                               },         
                               onFailure: function(response){      
                                   alert(errorStringFromXMLResponse(response));
                               } });

    sendForm.send();
    
    return false;
    
}


function errorStringFromXMLResponse(response)
{
    var stRet = '';
    if (response.responseXML != null) {
        var msgNodes = response.responseXML.getElementsByTagName('error');
        var iMax = msgNodes.length;
        if (iMax > 0) {
               msg = '';
               for (var i = 0 ; i < iMax ; i++) {
                   if (msg != '') {
                       msg += '<br />';
                }
                   stRet += msgNodes[i].firstChild.nodeValue;
            }
        }
    }

    return stRet;
    
}

function messageStringFromXMLResponse(response)
{
    var stRet = '';
    if (response != null) {
        var msgNodes = response.getElementsByTagName('message');
        var iMax = msgNodes.length;
        if (iMax > 0) {
               msg = '';
               for (var i = 0 ; i < iMax ; i++) {
                   if (msg != '') {
                       msg += '<br />';
                }
                   stRet += msgNodes[i].firstChild.nodeValue;
            }
        }
    }

    return stRet;
    
}

//form submission
// param1 the form you want to submit
// param2 the url to the file on the server (can contain querystring) all form values will get added to qs as well
// param3 the div to hide parameter is what will be hidden when the http result comes back
// param4 divToShow is the name of the div that will show the http results.
// param5 (if present) is the name of the mocha window to close if a 'Close' is returned

var xmlReq = null;; 
function ajaxSubmit(form, file, divToHide, divToShow, mwid) 
{      

    //tag on elements from the form onto the querystring
    var formElementsQS = $(form).toQueryString();
    //alert(formElementsQS);
    //attach any form values to the querystring
    file = file + '&' + formElementsQS;
    xmlReq = getXML(file);
    xmlReq.onreadystatechange=function()
    {
        if(xmlReq.readyState==4)
          {
                //hide the form
                var mainDiv = document.getElementById(divToHide);
               if (mainDiv) {
                   mainDiv.style.display = "none";
             }  
             //alert('all good');
             // alert(xmlReq.responseText);
              
              var HTTPResponseDiv = document.getElementById(divToShow);
              if (HTTPResponseDiv) {
                      var st = xmlReq.responseText;
                      if (mwid && st == 'Close') {
                          closeMochaWindowRefreshParent(mwid);
                    } else {
                          HTTPResponseDiv.innerHTML = xmlReq.responseText;
                    }
              }
             // alert(joinSuccessDiv.innerHTML);
              }
        }
} 

//returns an xmlHttpRequest object (AjAX)
function getXML(file) 

{ 
    var xmlHttp = null 
    if (typeof window.ActiveXObject != 'undefined' ) 
   { 
           xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
        //doc.onreadystatechange = displayState; 
   } 
   else 

   { 
           xmlHttp = new XMLHttpRequest(); 
        
   } 
       xmlHttp.open( "GET", file, true ); 
       xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); 
       xmlHttp.send(null); 
       return xmlHttp; 

}

function refreshParent() {
    window.location.reload(true);
}
function closeMochaWindow(windowID) {
    //default id mocha gives to div
   document.mochaDesktop.closeWindow($(windowID));
}

function closeMochaWindowRefreshParent(windowID) {
     document.mochaDesktop.closeWindow($(windowID));
     window.location.reload(true);
}

function loadModal() {
    alert('hello');    
    }

          
function popUp(URL) {
    day = new Date();
    id = day.getTime();
    eval("page" + id + " = window.open(URL, '" + id + "', 'width=360,height=375,left=240,top=180,resizable=1,toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0');");
}

function selectCheckBox(obj) {
    var elemParent = obj.parentNode;
    
    var inputList = elemParent.getElementsByTagName('INPUT');
    
    if (inputList != null && inputList[0] != null) {
        if (inputList[0].checked) {
            inputList[0].checked = false;
        } else {
            inputList[0].checked = true;
        }
    }

}

// Function to initialize the form submit buttons
// Written for mootools 1.2.4
function initFormSubmit(stNameForm, stNameSubmitAjax, stNameFormDiv, stNameSubmitButton, stNamePostBack)
{
//return;

    formSubmitEl = document.getElement('form#' + stNameForm + " #" + stNameSubmitAjax);
    if(formSubmitEl){
      formSubmitEl.addEvent('click', function(){
          submitAjaxItem(stNameForm, stNameFormDiv, stNamePostBack);
        });
    }
  nonAjaxSubmit = $(stNameSubmitButton);
  if (nonAjaxSubmit) {
    nonAjaxSubmit.style.display = 'none';
  }
  
  objAjaxSubmit = $(stNameSubmitAjax);
  if (objAjaxSubmit) {
      objAjaxSubmit.style.display='inline';
  }

}

// This is designed for mootools 1.2.4
function submitAjaxItem(stNameForm, stNameReplace, stNamePostBack) 
{
    // Clear the postback value
    var postback = $(stNamePostBack);
    if (postback) {
        postback.value=0;
    }
    var url = window.location.pathname;
    var form = $(stNameForm);
    // TO DO Perhaps we need to have something show up while we're processing
    form.set('send', {
           onSuccess: function(responsetxt, responseXML){             
                // Replace text with respose
                var htmlNode = responseXML.getElementsByTagName('message');
                var stHTMLText;
                if (htmlNode[0].textContent != undefined) {
                    stHTMLText = htmlNode[0].textContent;
                } else {
                    stHTMLText = htmlNode[0].text;
                }
                $(stNameReplace).innerHTML = stHTMLText;
                   },         
           onFailure: function(response){     
                   // TO DO - Display an error - this is either from someone spoofing or a system problem.
           } 
        });
    form.send();
    
    return false;
}

// This is designed for mootools 1.2.4
/*
 * Provides for a rotation between divs
 *
 * stDivBase - base name of the divs that hold the text being rotated
 * idStart - Starting id
 * idMax - Max id (assumption is we start at 0)
 * msDelay - millisecond delay between items
 */
function startRotation(stDivBase, idStart, idMax, msDelay)
{
    setTimeout('displayRotatedItem("' + stDivBase + '", ' + idStart + ', ' + idMax + ', ' + msDelay + ')', msDelay );
}

function displayRotatedItem(stDivBase, idStart, idMax, msDelay)
{
    var stItem = stDivBase + idStart;
    
    var dispItem = $(stItem);
    
    if (dispItem) {
        dispItem.style.display = 'none';
    }
    
    idStart++;
    if (idStart >= idMax) {
        idStart = 0;
    }   

    var stNewItem = stDivBase + idStart;
    
    var dispNewItem = $(stNewItem);
    if (dispNewItem) {
        dispNewItem.style.display='block';
    }
 
    setTimeout('displayRotatedItem("' + stDivBase + '", ' + idStart + ', ' + idMax + ', ' + msDelay + ')', msDelay);
}

function SWFPlay(stMovieName) 
{
    var movieObj = getFlashMovieObject(stMovieName);
    
    if (movieObj != null) {
        movieObj.Play();
    }
    
}


/* From http://www.permadi.com/tutorial/flashGetObject/ */
function getFlashMovieObject(movieName)
{
  if (window.document[movieName]) 
  {
      return window.document[movieName];
  }
  if (navigator.appName.indexOf("Microsoft Internet")==-1)
  {
    if (document.embeds && document.embeds[movieName])
      return document.embeds[movieName]; 
  }
  else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
  {
    return document.getElementById(movieName);
  }     
}    
 
/* End utilities.js */
/* Start mootools-beta-1.2.js 2010-05-25 */
//MooTools, My Object Oriented Javascript Tools. Copyright (c) 2006-2007 Valerio Proietti, <http://mad4milk.net>, MIT Style License.

var MooTools={version:"1.2dev",build:"1.2b2"};var Native=function(J){J=J||{};var F=J.afterImplement||function(){};var G=J.generics;G=(G!==false);var H=J.legacy;
var E=J.initialize;var B=J.protect;var A=J.name;var C=E||H;C.constructor=Native;C.$family={name:"native"};if(H&&E){C.prototype=H.prototype;}C.prototype.constructor=C;
if(A){var D=A.toLowerCase();C.prototype.$family={name:D};Native.typize(C,D);}var I=function(M,K,N,L){if(!B||L||!M.prototype[K]){M.prototype[K]=N;}if(G){Native.genericize(M,K,B);
}F.call(M,K,N);return M;};C.implement=function(L,K,N){if(typeof L=="string"){return I(this,L,K,N);}for(var M in L){I(this,M,L[M],K);}return this;};C.alias=function(K,M,L){K=this.prototype[K];
if(K){I(this,M,K,L);}return this;};return C;};Native.implement=function(D,C){for(var B=0,A=D.length;B<A;B++){D[B].implement(C);}};Native.genericize=function(B,C,A){if((!A||!B[C])&&typeof B.prototype[C]=="function"){B[C]=function(){var D=Array.prototype.slice.call(arguments);
return B.prototype[C].apply(D.shift(),D);};}};Native.typize=function(A,B){if(!A.type){A.type=function(C){return($type(C)===B);};}};(function(B){for(var A in B){Native.typize(B[A],A.toLowerCase());
}})({Boolean:Boolean,Native:Native,Object:Object});(function(B){for(var A in B){new Native({name:A,initialize:B[A],protect:true});}})({String:String,Function:Function,Number:Number,Array:Array,RegExp:RegExp,Date:Date});
(function(C,B){for(var D=0,A=B.length;D<A;D++){Native.genericize(C,B[D],true);}return arguments.callee;})(Array,["pop","push","reverse","shift","sort","splice","unshift","concat","join","slice","toString","valueOf","indexOf","lastIndexOf"])(String,["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]);
function $chk(A){return !!(A||A===0);}function $clear(A){clearTimeout(A);clearInterval(A);return null;}function $defined(A){return(A!=undefined);}function $empty(){}function $arguments(A){return function(){return arguments[A];
};}function $lambda(A){return(typeof A=="function")?A:function(){return A;};}function $extend(C,A){for(var B in (A||{})){C[B]=A[B];}return C;}function $unlink(C){var B=null;
switch($type(C)){case"object":B={};for(var E in C){B[E]=$unlink(C[E]);}break;case"array":B=[];for(var D=0,A=C.length;D<A;D++){B[D]=$unlink(C[D]);}break;
default:return C;}return B;}function $merge(){var E={};for(var D=0,A=arguments.length;D<A;D++){var B=arguments[D];if($type(B)!="object"){continue;}for(var C in B){var G=B[C],F=E[C];
E[C]=(F&&$type(G)=="object"&&$type(F)=="object")?$merge(F,G):$unlink(G);}}return E;}function $pick(){for(var B=0,A=arguments.length;B<A;B++){if($defined(arguments[B])){return arguments[B];
}}return null;}function $random(B,A){return Math.floor(Math.random()*(A-B+1)+B);}function $splat(B){var A=$type(B);return(A)?((A!="array"&&A!="arguments")?[B]:B):[];
}var $time=Date.now||function(){return new Date().getTime();};function $try(B,D,A){try{return B.apply(D,$splat(A));}catch(C){return false;}}function $type(A){if(A==undefined){return false;
}if(A.$family){return(A.$family.name=="number"&&!isFinite(A))?false:A.$family.name;}if(A.nodeName){switch(A.nodeType){case 1:return"element";case 3:return(/\S/).test(A.nodeValue)?"textnode":"whitespace";
}}else{if(typeof A.length=="number"){if(A.callee){return"arguments";}else{if(A.item){return"collection";}}}}return typeof A;}var Hash=new Native({name:"Hash",initialize:function(A){if($type(A)=="hash"){A=$unlink(A.getClean());
}for(var B in A){if(!this[B]){this[B]=A[B];}}return this;}});Hash.implement({getLength:function(){var B=0;for(var A in this){if(this.hasOwnProperty(A)){B++;
}}return B;},forEach:function(B,C){for(var A in this){if(this.hasOwnProperty(A)){B.call(C,this[A],A,this);}}},getClean:function(){var B={};for(var A in this){if(this.hasOwnProperty(A)){B[A]=this[A];
}}return B;}});Hash.alias("forEach","each");function $H(A){return new Hash(A);}Array.implement({forEach:function(C,D){for(var B=0,A=this.length;B<A;B++){C.call(D,this[B],B,this);
}}});Array.alias("forEach","each");function $A(C){if($type(C)=="collection"){var D=[];for(var B=0,A=C.length;B<A;B++){D[B]=C[B];}return D;}return Array.prototype.slice.call(C);
}function $each(C,B,D){var A=$type(C);((A=="arguments"||A=="collection"||A=="array")?Array:Hash).each(C,B,D);}$A=function(D,F,C){if(Browser.Engine.trident&&$type(D)=="collection"){F=F||0;
if(F<0){F=D.length+F;}C=C||(D.length-F);var E=[];for(var B=0;B<C;B++){E[B]=D[F++];}return E;}F=(F||0)+((F<0)?D.length:0);var A=((!$chk(C))?D.length:C)+F;
return Array.prototype.slice.call(D,F,A);};(function(){var B=[Array,Function,String,RegExp,Number];for(var C=0,A=B.length;C<A;C++){B[C].extend=B[C].implement;
}})();var Browser=new Hash({Engine:{name:"unknown",version:""},Platform:{name:(navigator.platform.match(/mac|win|linux|nix/i)||["other"])[0].toLowerCase()},Features:{xhr:!!(window.XMLHttpRequest),xpath:!!(document.evaluate),air:!!(window.runtime)}});
if(window.opera){Browser.Engine.name="presto";}else{if(window.ActiveXObject){Browser.Engine={name:"trident",version:(Browser.Features.xhr)?5:4};}else{if(!navigator.taintEnabled){Browser.Engine={name:"webkit",version:(Browser.Features.xpath)?420:419};
}else{if(document.getBoxObjectFor!=null){Browser.Engine.name="gecko";}}}}Browser.Engine[Browser.Engine.name]=Browser.Engine[Browser.Engine.name+Browser.Engine.version]=true;
Browser.Platform[Browser.Platform.name]=true;function $exec(B){if(!B){return B;}if(window.execScript){window.execScript(B);}else{var A=document.createElement("script");
A.setAttribute("type","text/javascript");A.text=B;document.head.appendChild(A);document.head.removeChild(A);}return B;}Native.UID=0;var Window=new Native({name:"Window",legacy:window.Window,initialize:function(A){if(!A.Element){A.Element=$empty;
if(Browser.Engine.webkit){A.document.createElement("iframe");}A.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{};}A.uid=Native.UID++;
return $extend(A,Window.Prototype);},afterImplement:function(B,A){window[B]=Window.Prototype[B]=A;}});Window.Prototype={$family:{name:"window"}};new Window(window);
var Document=new Native({name:"Document",legacy:window.Document,initialize:function(A){A.head=A.getElementsByTagName("head")[0];A.html=A.getElementsByTagName("html")[0];
A.window=A.defaultView||A.parentWindow;if(Browser.Engine.trident4){$try(function(){A.execCommand("BackgroundImageCache",false,true);});}A.uid=Native.UID++;
return $extend(A,Document.Prototype);},afterImplement:function(B,A){document[B]=Document.Prototype[B]=A;}});Document.Prototype={$family:{name:"document"}};
new Document(document);window.extend=document.extend=function(A){for(var B in A){this[B]=A[B];}};window.extend(Browser.Engine);window.ie=window.trident;
window.ie6=window.trident4;window.ie7=window.trident5;Array.implement({every:function(C,D){for(var B=0,A=this.length;B<A;B++){if(!C.call(D,this[B],B,this)){return false;
}}return true;},filter:function(D,E){var C=[];for(var B=0,A=this.length;B<A;B++){if(D.call(E,this[B],B,this)){C.push(this[B]);}}return C;},clean:function(){return this.filter($arguments(0));
},indexOf:function(C,D){var A=this.length;for(var B=(D<0)?Math.max(0,A+D):D||0;B<A;B++){if(this[B]===C){return B;}}return -1;},map:function(D,E){var C=[];
for(var B=0,A=this.length;B<A;B++){C[B]=D.call(E,this[B],B,this);}return C;},some:function(C,D){for(var B=0,A=this.length;B<A;B++){if(C.call(D,this[B],B,this)){return true;
}}return false;},associate:function(C){var D={},B=Math.min(this.length,C.length);for(var A=0;A<B;A++){D[C[A]]=this[A];}return D;},link:function(C){var A={};
for(var E=0,B=this.length;E<B;E++){for(var D in C){if(C[D](this[E])){A[D]=this[E];delete C[D];break;}}}return A;},contains:function(A,B){return this.indexOf(A,B)!=-1;
},extend:function(C){for(var B=0,A=C.length;B<A;B++){this.push(C[B]);}return this;},getLast:function(){return(this.length)?this[this.length-1]:null;},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null;
},include:function(A){if(!this.contains(A)){this.push(A);}return this;},merge:function(C){for(var B=0,A=C.length;B<A;B++){this.include(C[B]);}return this;
},remove:function(B){for(var A=this.length;A--;A){if(this[A]===B){this.splice(A,1);}}return this;},empty:function(){this.length=0;return this;},flatten:function(){var D=[];
for(var B=0,A=this.length;B<A;B++){var C=$type(this[B]);if(!C){continue;}D=D.concat((C=="array"||C=="collection"||C=="arguments")?Array.flatten(this[B]):this[B]);
}return D;},hexToRgb:function(B){if(this.length!=3){return null;}var A=this.map(function(C){if(C.length==1){C+=C;}return C.toInt(16);});return(B)?A:"rgb("+A+")";
},rgbToHex:function(D){if(this.length<3){return null;}if(this.length==4&&this[3]==0&&!D){return"transparent";}var B=[];for(var A=0;A<3;A++){var C=(this[A]-0).toString(16);
B.push((C.length==1)?"0"+C:C);}return(D)?B:"#"+B.join("");}});Array.implement({copy:function(B,A){return $A(this,B,A);}});Function.implement({extend:function(A){for(var B in A){this[B]=A[B];
}return this;},create:function(B){var A=this;B=B||{};return function(D){var C=B.arguments;C=$defined(C)?$splat(C):Array.slice(arguments,(B.event)?1:0);
if(B.event){C=[D||window.event].extend(C);}var E=function(){return A.apply(B.bind||null,C);};if(B.delay){return setTimeout(E,B.delay);}if(B.periodical){return setInterval(E,B.periodical);
}if(B.attempt){return $try(E);}return E();};},pass:function(A,B){return this.create({"arguments":A,bind:B});},attempt:function(A,B){return this.create({"arguments":A,bind:B,attempt:true})();
},bind:function(B,A){return this.create({bind:B,"arguments":A});},bindWithEvent:function(B,A){return this.create({bind:B,event:true,"arguments":A});},delay:function(B,C,A){return this.create({delay:B,bind:C,"arguments":A})();
},periodical:function(A,C,B){return this.create({periodical:A,bind:C,"arguments":B})();},run:function(A,B){return this.apply(B,$splat(A));}});Function.extend({bindAsEventListener:function(B,A){return this.create({bind:B,event:true,"arguments":A});
}});Function.empty=$empty;Number.implement({limit:function(B,A){return Math.min(A,Math.max(B,this));},round:function(A){A=Math.pow(10,A||0);return Math.round(this*A)/A;
},times:function(B,C){for(var A=0;A<this;A++){B.call(C,A,this);}},toFloat:function(){return parseFloat(this);},toInt:function(A){return parseInt(this,A||10);
}});Number.alias("times","each");(function(B){var A={};B.each(function(C){if(!Number[C]){A[C]=function(){return Math[C].apply(null,[this].concat($A(arguments)));
};}});Number.implement(A);})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"]);String.implement({test:function(A,B){return((typeof A=="string")?new RegExp(A,B):A).test(this);
},contains:function(A,B){return(B)?(B+this+B).indexOf(B+A+B)>-1:this.indexOf(A)>-1;},trim:function(){return this.replace(/^\s+|\s+$/g,"");},clean:function(){return this.replace(/\s+/g," ").trim();
},camelCase:function(){return this.replace(/-\D/g,function(A){return A.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/[A-Z]/g,function(A){return("-"+A.charAt(0).toLowerCase());
});},capitalize:function(){return this.replace(/\b[a-z]/g,function(A){return A.toUpperCase();});},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1");
},toInt:function(A){return parseInt(this,A||10);},toFloat:function(){return parseFloat(this);},hexToRgb:function(B){var A=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
return(A)?A.slice(1).hexToRgb(B):null;},rgbToHex:function(B){var A=this.match(/\d{1,3}/g);return(A)?A.rgbToHex(B):null;},stripScripts:function(B){var A="";
var C=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){A+=arguments[1]+"\n";return"";});if(B===true){$exec(A);}else{if($type(B)=="function"){B(A,C);
}}return C;}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(B){for(var A in this){if(this.hasOwnProperty(A)&&this[A]===B){return A;
}}return null;},hasValue:function(A){return(Hash.keyOf(this,A)!==null);},extend:function(A){Hash.each(A,function(C,B){Hash.set(this,B,C);},this);return this;
},merge:function(A){Hash.each(A,function(C,B){Hash.include(this,B,C);},this);return this;},remove:function(A){if(this.hasOwnProperty(A)){delete this[A];
}return this;},get:function(A){return(this.hasOwnProperty(A))?this[A]:null;},set:function(A,B){if(!this[A]||this.hasOwnProperty(A)){this[A]=B;}return this;
},empty:function(){Hash.each(this,function(B,A){delete this[A];},this);return this;},include:function(B,C){var A=this[B];if(!$defined(A)){this[B]=C;}return this;
},map:function(B,C){var A=new Hash;Hash.each(this,function(E,D){A.set(D,B.call(C,E,D,this));},this);return A;},filter:function(B,C){var A=new Hash;Hash.each(this,function(E,D){if(B.call(C,E,D,this)){A.set(D,E);
}},this);return A;},every:function(B,C){for(var A in this){if(this.hasOwnProperty(A)&&!B.call(C,this[A],A)){return false;}}return true;},some:function(B,C){for(var A in this){if(this.hasOwnProperty(A)&&B.call(C,this[A],A)){return true;
}}return false;},getKeys:function(){var A=[];Hash.each(this,function(C,B){A.push(B);});return A;},getValues:function(){var A=[];Hash.each(this,function(B){A.push(B);
});return A;},toQueryString:function(){var A=[];Hash.each(this,function(C,B){$splat(C).each(function(D){A.push(B+"="+encodeURIComponent(D));});});return A.join("&");
}});Hash.alias("keyOf","indexOf").alias("hasValue","contains").alias("remove","erase");Hash.alias("getKeys","keys").alias("getValues","values").alias("has","hasKey");
var Abstract=Hash;var Event=new Native({name:"Event",initialize:function(A,F){F=F||window;A=A||F.event;if(A.$extended){return A;}this.$extended=true;var J=A.type;
var G=A.target||A.srcElement;while(G&&G.nodeType==3){G=G.parentNode;}if(J.match(/DOMMouseScroll|mousewheel/)){var I=(A.wheelDelta)?A.wheelDelta/120:-(A.detail||0)/3;
}else{if(J.test(/key/)){var B=A.which||A.keyCode;var L=Event.Keys.keyOf(B);if(J=="keydown"){var D=B-111;if(D>0&&D<13){L="f"+D;}}L=L||String.fromCharCode(B).toLowerCase();
}else{if(J.match(/(click|mouse|menu)/i)){var H={x:A.pageX||A.clientX+F.document.documentElement.scrollLeft,y:A.pageY||A.clientY+F.document.documentElement.scrollTop};
var C={x:A.pageX?A.pageX-F.pageXOffset:A.clientX,y:A.pageY?A.pageY-F.pageYOffset:A.clientY};var E=(A.which==3)||(A.button==2);var K=null;if(J.match(/over|out/)){switch(J){case"mouseover":K=A.relatedTarget||A.fromElement;
break;case"mouseout":K=A.relatedTarget||A.toElement;}if((function(){while(K&&K.nodeType==3){K=K.parentNode;}}).create({attempt:Browser.Engine.gecko})()===false){K=false;
}}}}}return $extend(this,{event:A,type:J,page:H,client:C,rightClick:E,wheel:I,relatedTarget:K,target:G,code:B,key:L,shift:A.shiftKey,control:A.ctrlKey,alt:A.altKey,meta:A.metaKey});
}});Event.Keys=new Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Event.implement({stop:function(){return this.stopPropagation().preventDefault();
},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation();}else{this.event.cancelBubble=true;}return this;},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault();
}else{this.event.returnValue=false;}return this;}});var Class=new Native({name:"Class",initialize:function(B){B=B||{};var A=function(){for(var D in this){this[D]=$unlink(this[D]);
}this.parent=null;["Implements","Extends"].each(function(E){if(!this[E]){return ;}Class[E](this,this[E]);delete this[E];},this);this.constructor=A;var C=(arguments[0]!==$empty&&this.initialize)?this.initialize.apply(this,arguments):this;
if(this.options&&this.options.initialize){this.options.initialize.call(this);}return C;};$extend(A,this);A.constructor=Class;A.prototype=B;return A;}});
Class.implement({implement:function(){Class.Implements(this.prototype,Array.slice(arguments));return this;}});Class.Implements=function(A,B){$splat(B).each(function(C){$extend(A,($type(C)=="class")?new C($empty):C);
});};Class.Extends=function(C,A){A=new A($empty);for(var E in A){var B=A[E];var D=C[E];C[E]=(function(G,H){if($defined(H)&&G!=H){var F=$type(H);if(F!=$type(G)){return H;
}switch(F){case"function":return function(){H.parent=C.parent=G.bind(this);var I=H.apply(this,arguments);C.parent=H.parent;return I;};case"object":return $merge(G,H);
default:return H;}}return G;})(B,D);}};Class.prototype.extend=function(A){A.Extends=this;return new Class(A);};Class.empty=$empty;var Chain=new Class({chain:function(){this.$chain=(this.$chain||[]).extend(arguments);
return this;},callChain:function(){if(this.$chain&&this.$chain.length){this.$chain.shift().apply(this,arguments);}return this;},clearChain:function(){if(this.$chain){this.$chain.empty();
}return this;}});var Events=new Class({addEvent:function(C,B,A){if(B!=$empty){this.$events=this.$events||{};this.$events[C]=this.$events[C]||[];this.$events[C].include(B);
if(A){B.internal=true;}}return this;},addEvents:function(A){for(var B in A){this.addEvent(B,A[B]);}return this;},fireEvent:function(C,B,A){if(!this.$events||!this.$events[C]){return this;
}this.$events[C].each(function(D){D.create({bind:this,delay:A,"arguments":B})();},this);return this;},removeEvent:function(B,A){if(!this.$events||!this.$events[B]){return this;
}if(!A.internal){this.$events[B].remove(A);}return this;},removeEvents:function(C){for(var D in this.$events){if(C&&C!=D){continue;}var B=this.$events[D];
for(var A=B.length;A--;A){this.removeEvent(D,B[A]);}}return this;}});var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));
if(!this.addEvent){return this;}for(var A in this.options){if($type(this.options[A])!="function"||!(/^on[A-Z]/).test(A)){continue;}this.addEvent(A,this.options[A]);
delete this.options[A];}return this;}});Document.implement({newElement:function(A,B){if(Browser.Engine.trident&&B){["name","type","checked"].each(function(C){if(!B[C]){return ;
}A+=" "+C+'="'+B[C]+'"';if(C!="checked"){delete B[C];}});A="<"+A+">";}return $.element(this.createElement(A)).set(B);},newTextNode:function(A){return this.createTextNode(A);
},getDocument:function(){return this;},getWindow:function(){return this.defaultView||this.parentWindow;}});var Element=new Native({name:"Element",legacy:window.Element,initialize:function(A,B){var C=Element.Constructors.get(A);
if(C){return C(B);}if(typeof A=="string"){return document.newElement(A,B);}return $(A).set(B);},afterImplement:function(A,B){if(!Array[A]){Elements.implement(A,Elements.multi(A));
}Element.Prototype[A]=B;}});Element.Prototype={$family:{name:"element"}};Element.Constructors=new Hash;var IFrame=new Native({name:"IFrame",generics:false,initialize:function(){Native.UID++;
var E=Array.link(arguments,{properties:Object.type,iframe:$defined});var C=E.properties||{};var B=$(E.iframe)||false;var D=C.onload||$empty;delete C.onload;
C.id=C.name=$pick(C.id,C.name,B.id,B.name,"IFrame_"+Native.UID);((B=B||new Element("iframe"))).set(C);var A=function(){var F=$try(function(){return B.contentWindow.location.host;
});if(F&&F==window.location.host){B.window=B.contentWindow;var H=new Window(B.window);var G=new Document(B.window.document);$extend(H.Element.prototype,Element.Prototype);
}D.call(B.contentWindow);};(!window.frames[C.id])?B.addListener("load",A):A();return B;}});var Elements=new Native({initialize:function(F,B){B=$extend({ddup:true,cash:true},B);
F=F||[];if(B.ddup||B.cash){var G={};var E=[];for(var C=0,A=F.length;C<A;C++){var D=$.element(F[C],!B.cash);if(B.ddup){if(G[D.uid]){continue;}G[D.uid]=true;
}E.push(D);}F=E;}return(B.cash)?$extend(F,this):F;}});Elements.implement({filterBy:function(A){if(!A){return this;}return new Elements(this.filter((typeof A=="string")?function(B){return B.match(A);
}:A));}});Elements.multi=function(A){return function(){var B=[];var F=true;for(var D=0,C=this.length;D<C;D++){var E=this[D][A].apply(this[D],arguments);
B.push(E);if(F){F=($type(E)=="element");}}return(F)?new Elements(B):B;};};Window.implement({$:function(B,C){if(B&&B.$attributes){return B;}var A=$type(B);
return($[A])?$[A](B,C,this.document):null;},$$:function(A){if(arguments.length==1&&typeof A=="string"){return this.document.getElements(A);}var F=[];var C=Array.flatten(arguments);
for(var D=0,B=C.length;D<B;D++){var E=C[D];switch($type(E)){case"element":E=[E];break;case"string":E=this.document.getElements(E,true);break;default:E=false;
}if(E){F.extend(E);}}return new Elements(F);},getDocument:function(){return this.document;},getWindow:function(){return this;}});$.string=function(C,A,B){C=B.getElementById(C);
return(C)?$.element(C,A):null;};$.element=function(A,B){A.uid=A.uid||[Native.UID++];if(!B&&Garbage.collect(A)&&!A.$family){$extend(A,Element.Prototype);
}return A;};$.textnode=$.window=$.document=$arguments(0);$.number=function(A){return Garbage.Elements[A]||null;};Native.implement([Element,Document],{getElement:function(A,B){return $(this.getElements(A,true)[0]||null,B);
},getElements:function(A,D){A=A.split(",");var C=[];var B=(A.length>1);A.each(function(E){var F=this.getElementsByTagName(E.trim());(B)?C.extend(F):C=F;
},this);return new Elements(C,{ddup:B,cash:!D});}});Element.Storage={get:function(A){return(this[A]=this[A]||{});}};Element.Inserters=new Hash({before:function(B,A){if(A.parentNode){A.parentNode.insertBefore(B,A);
}},after:function(B,A){if(!A.parentNode){return ;}var C=A.nextSibling;(C)?A.parentNode.insertBefore(B,C):A.parentNode.appendChild(B);},bottom:function(B,A){A.appendChild(B);
},top:function(B,A){var C=A.firstChild;(C)?A.insertBefore(B,C):A.appendChild(B);}});Element.Inserters.inside=Element.Inserters.bottom;Element.Inserters.each(function(C,B){var A=B.capitalize();
Element.implement("inject"+A,function(D){Element.Inserters[B](this,$(D,true));return this;});Element.implement("grab"+A,function(D){Element.Inserters[B]($(D,true),this);
return this;});});Element.implement({getDocument:function(){return this.ownerDocument;},getWindow:function(){return this.ownerDocument.getWindow();},getElementById:function(D,C){var B=this.ownerDocument.getElementById(D);
if(!B){return null;}for(var A=B.parentNode;A!=this;A=A.parentNode){if(!A){return null;}}return $.element(B,C);},set:function(D,B){switch($type(D)){case"object":for(var C in D){this.set(C,D[C]);
}break;case"string":var A=Element.Properties.get(D);(A&&A.set)?A.set.apply(this,Array.slice(arguments,1)):this.setProperty(D,B);}return this;},get:function(B){var A=Element.Properties.get(B);
return(A&&A.get)?A.get.apply(this,Array.slice(arguments,1)):this.getProperty(B);},erase:function(B){var A=Element.Properties.get(B);(A&&A.erase)?A.erase.apply(this,Array.slice(arguments,1)):this.removeProperty(B);
return this;},match:function(A){return(!A||Element.get(this,"tag")==A);},inject:function(B,A){Element.Inserters.get(A||"bottom")(this,$(B,true));return this;
},wraps:function(B,A){B=$(B,true);return this.replaces(B).grab(B);},grab:function(B,A){Element.Inserters.get(A||"bottom")($(B,true),this);return this;},appendText:function(B,A){return this.grab(this.getDocument().newTextNode(B),A);
},adopt:function(){Array.flatten(arguments).each(function(A){this.appendChild($(A,true));},this);return this;},dispose:function(){return this.parentNode.removeChild(this);
},clone:function(B){var A=new Element("div").grab(this.cloneNode(B!==false));Array.each(A.getElementsByTagName("*"),function(C){if(C.id){C.removeAttribute("id");
}});return new Element("div").set("html",A.innerHTML).getFirst();},replaces:function(A){A=$(A,true);A.parentNode.replaceChild(this,A);return this;},hasClass:function(A){return this.className.contains(A," ");
},addClass:function(A){if(!this.hasClass(A)){this.className=(this.className+" "+A).clean();}return this;},removeClass:function(A){this.className=this.className.replace(new RegExp("(^|\\s)"+A+"(?:\\s|$)"),"$1").clean();
return this;},toggleClass:function(A){return this.hasClass(A)?this.removeClass(A):this.addClass(A);},getComputedStyle:function(C){var A=null;if(this.currentStyle){A=this.currentStyle[C.camelCase()];
}else{var B=this.getWindow().getComputedStyle(this,null);if(B){A=B.getPropertyValue([C.hyphenate()]);}}return A;},empty:function(){var A=$A(this.getElementsByTagName("*"));
A.each(function(B){$try(Element.prototype.dispose,B);});Garbage.trash(A);$try(Element.prototype.set,this,["html",""]);return this;},destroy:function(){Garbage.kill(this.empty().dispose());
return null;},toQueryString:function(){var A=[];this.getElements("input, select, textarea",true).each(function(D){var B=D.name,C=D.type,E=Element.get(D,"value");
if(E===false||!B||D.disabled){return ;}$splat(E).each(function(F){A.push(B+"="+encodeURIComponent(F));});});return A.join("&");},getProperty:function(C){var B=Element.Attributes,A=B.Props[C];
var D=(A)?this[A]:this.getAttribute(C);return(B.Bools[C])?!!D:D;},getProperties:function(){var A=$A(arguments);return A.map(function(B){return this.getProperty(B);
},this).associate(A);},setProperty:function(D,E){var C=Element.Attributes,B=C.Props[D],A=$defined(E);if(B&&C.Bools[D]){E=(E||!A)?true:false;}else{if(!A){return this.removeProperty(D);
}}(B)?this[B]=E:this.setAttribute(D,E);return this;},setProperties:function(A){for(var B in A){this.setProperty(B,A[B]);}return this;},removeProperty:function(D){var C=Element.Attributes,B=C.Props[D],A=(B&&C.Bools[D]);
(B)?this[B]=(A)?false:"":this.removeAttribute(D);return this;},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;}});
(function(){var A=function(D,B,I,C,F,H){var E=D[I||B];var G=[];while(E){if(E.nodeType==1&&Element.match(E,C)){G.push(E);if(!F){break;}}E=E[B];}return(F)?new Elements(G,{ddup:false,cash:!H}):$(G[0],H);
};Element.implement({getPrevious:function(B,C){return A(this,"previousSibling",null,B,false,C);},getAllPrevious:function(B,C){return A(this,"previousSibling",null,B,true,C);
},getNext:function(B,C){return A(this,"nextSibling",null,B,false,C);},getAllNext:function(B,C){return A(this,"nextSibling",null,B,true,C);},getFirst:function(B,C){return A(this,"nextSibling","firstChild",B,false,C);
},getLast:function(B,C){return A(this,"previousSibling","lastChild",B,false,C);},getParent:function(B,C){return A(this,"parentNode",null,B,false,C);},getParents:function(B,C){return A(this,"parentNode",null,B,true,C);
},getChildren:function(B,C){return A(this,"nextSibling","firstChild",B,true,C);},hasChild:function(B){if(!(B=$(B,true))){return false;}return Element.getParents(B,this.get("tag"),true).contains(this);
}});})();Element.alias("dispose","remove").alias("getLast","getLastChild");Element.Properties=new Hash;Element.Properties.style={set:function(A){this.style.cssText=A;
},get:function(){return this.style.cssText;},erase:function(){this.style.cssText="";}};Element.Properties.value={get:function(){switch(Element.get(this,"tag")){case"select":var A=[];
Array.each(this.options,function(B){if(B.selected){A.push(B.value);}});return(this.multiple)?A:A[0];case"input":if(["checkbox","radio"].contains(this.type)&&!this.checked){return false;
}default:return $pick(this.value,false);}}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase();}};Element.Properties.html={set:function(){return this.innerHTML=Array.flatten(arguments).join("");
}};Element.implement({getText:function(){return this.get("text");},setText:function(A){return this.set("text",A);},setHTML:function(){return this.set("html",arguments);
},getHTML:function(){return this.get("html");},getTag:function(){return this.get("tag");}});Native.implement([Element,Window,Document],{addListener:function(B,A){if(this.addEventListener){this.addEventListener(B,A,false);
}else{this.attachEvent("on"+B,A);}return this;},removeListener:function(B,A){if(this.removeEventListener){this.removeEventListener(B,A,false);}else{this.detachEvent("on"+B,A);
}return this;},retrieve:function(B,A){var D=Element.Storage.get(this.uid);var C=D[B];if($defined(A)&&!$defined(C)){C=D[B]=A;}return $pick(C);},store:function(B,A){var C=Element.Storage.get(this.uid);
C[B]=A;return this;},eliminate:function(A){var B=Element.Storage.get(this.uid);delete B[A];return this;}});Element.Attributes=new Hash({Props:{html:"innerHTML","class":"className","for":"htmlFor",text:(Browser.Engine.trident)?"innerText":"textContent"},Bools:["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"],Camels:["value","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"]});
(function(B){var C=B.Bools,A=B.Camels;B.Bools=C=C.associate(C);Hash.extend(Hash.merge(B.Props,C),A.associate(A.map(function(D){return D.toLowerCase();})));
B.remove("Camels");})(Element.Attributes);var Garbage={Elements:{},ignored:{object:1,embed:1,OBJECT:1,EMBED:1},collect:function(A){if(A.$attributes){return true;
}if(Garbage.ignored[A.tagName]){return false;}Garbage.Elements[A.uid]=A;A.$attributes={};return true;},trash:function(C){for(var A=C.length,B;A--;A){Garbage.kill(C[A]);
}},kill:function(A){if(!A||!A.$attributes){return ;}delete Garbage.Elements[A.uid];if(A.retrieve("events")){A.removeEvents();}for(var B in A.$attributes){A.$attributes[B]=null;
}if(Browser.Engine.trident){for(var C in Element.Prototype){A[C]=null;}}A.$attributes=A.uid=null;},empty:function(){for(var A in Garbage.Elements){Garbage.kill(Garbage.Elements[A]);
}}};window.addListener("beforeunload",function(){window.addListener("unload",Garbage.empty);if(Browser.Engine.trident){window.addListener("unload",CollectGarbage);
}});Element.extend=Element.implement;Elements.extend=Elements.implement;Element.implement({getFormElements:function(){return this.getElements("input, textarea, select");
},replaceWith:function(A){A=$(A);this.parentNode.replaceChild(A,this);return A;},removeElements:function(){return this.dispose();},remove:function(){return this.dispose();
},getValue:function(){return this.get("value");}});Element.Properties.events={set:function(A){this.addEvents(A);}};Native.implement([Element,Window,Document],{addEvent:function(E,G){var H=this.retrieve("events",{});
H[E]=H[E]||{keys:[],values:[]};if(H[E].keys.contains(G)){return this;}H[E].keys.push(G);var F=E,A=Element.Events.get(E),C=G,I=this;if(A){if(A.onAdd){A.onAdd.call(this,G);
}if(A.condition){C=function(J){if(A.condition.call(this,J)){return G.call(this,J);}return false;};}F=A.base||F;}var D=function(){return G.call(I);};var B=Element.NativeEvents[F]||0;
if(B){if(B==2){D=function(J){J=new Event(J,I.getWindow());if(C.call(I,J)===false){J.stop();}};}this.addListener(F,D);}H[E].values.push(D);return this;},removeEvent:function(D,C){var B=this.retrieve("events");
if(!B||!B[D]){return this;}var G=B[D].keys.indexOf(C);if(G==-1){return this;}var A=B[D].keys.splice(G,1)[0];var F=B[D].values.splice(G,1)[0];var E=Element.Events.get(D);
if(E){if(E.onRemove){E.onRemove.call(this,C);}D=E.base||D;}return(Element.NativeEvents[D])?this.removeListener(D,F):this;},addEvents:function(A){for(var B in A){this.addEvent(B,A[B]);
}return this;},removeEvents:function(B){var A=this.retrieve("events");if(!A){return this;}if(!B){for(var C in A){this.removeEvents(C);}A=null;}else{if(A[B]){while(A[B].keys[0]){this.removeEvent(B,A[B].keys[0]);
}A[B]=null;}}return this;},fireEvent:function(D,B,A){var C=this.retrieve("events");if(!C||!C[D]){return this;}C[D].keys.each(function(E){E.create({bind:this,delay:A,"arguments":B})();
},this);return this;},cloneEvents:function(D,A){D=$(D);var C=D.retrieve("events");if(!C){return this;}if(!A){for(var B in C){this.cloneEvents(D,B);}}else{if(C[A]){C[A].keys.each(function(E){this.addEvent(A,E);
},this);}}return this;}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:1,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};
(function(){var A=function(B){var C=B.relatedTarget;if(!C){return true;}return($type(this)!="document"&&C!=this&&C.prefix!="xul"&&!this.hasChild(C));};
Element.Events=new Hash({mouseenter:{base:"mouseover",condition:A},mouseleave:{base:"mouseout",condition:A},mousewheel:{base:(Browser.Engine.gecko)?"DOMMouseScroll":"mousewheel"}});
})();Event.keys=Event.Keys;Element.Properties.styles={set:function(A){this.setStyles(A);}};Element.Properties.opacity={set:function(A,B){if(!B){if(A==0){if(this.style.visibility!="hidden"){this.style.visibility="hidden";
}}else{if(this.style.visibility!="visible"){this.style.visibility="visible";}}}if(!this.currentStyle||!this.currentStyle.hasLayout){this.style.zoom=1;}if(Browser.Engine.trident){this.style.filter=(A==1)?"":"alpha(opacity="+A*100+")";
}this.style.opacity=A;this.store("opacity",A);},get:function(){return this.retrieve("opacity",1);}};Element.implement({setOpacity:function(A){return this.set("opacity",A,true);
},getOpacity:function(){return this.get("opacity");},setStyle:function(B,A){switch(B){case"opacity":return this.set("opacity",parseFloat(A));case"float":B=(Browser.Engine.trident)?"styleFloat":"cssFloat";
}B=B.camelCase();if($type(A)!="string"){var C=(Element.Styles.get(B)||"@").split(" ");A=$splat(A).map(function(E,D){if(!C[D]){return"";}return($type(E)=="number")?C[D].replace("@",Math.round(E)):E;
}).join(" ");}else{if(A==String(Number(A))){A=Math.round(A);}}this.style[B]=A;return this;},getStyle:function(G){switch(G){case"opacity":return this.get("opacity");
case"float":G=(Browser.Engine.trident)?"styleFloat":"cssFloat";}G=G.camelCase();var A=this.style[G];if(!$chk(A)){A=[];for(var F in Element.ShortStyles){if(G!=F){continue;
}for(var E in Element.ShortStyles[F]){A.push(this.getStyle(E));}return A.join(" ");}A=this.getComputedStyle(G);}if(A){A=String(A);var C=A.match(/rgba?\([\d\s,]+\)/);
if(C){A=A.replace(C[0],C[0].rgbToHex());}}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(A)))){if(G.test(/^(height|width)$/)){var B=(G=="width")?["left","right"]:["top","bottom"],D=0;
B.each(function(H){D+=this.getStyle("border-"+H+"-width").toInt()+this.getStyle("padding-"+H).toInt();},this);return this["offset"+G.capitalize()]-D+"px";
}if(Browser.Engine.presto&&String(A).test("px")){return A;}if(G.test(/(border(.+)Width|margin|padding)/)){return"0px";}}return A;},setStyles:function(B){for(var A in B){this.setStyle(A,B[A]);
}return this;},getStyles:function(){var A={};Array.each(arguments,function(B){A[B]=this.getStyle(B);},this);return A;}});Element.Styles=new Hash({width:"@px",height:"@px",left:"@px",top:"@px",bottom:"@px",right:"@px",maxWidth:"@px",maxHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"});
Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(G){var F=Element.ShortStyles;
var B=Element.Styles;["margin","padding"].each(function(H){var I=H+G;F[H][I]=B[I]="@px";});var E="border"+G;F.border[E]=B[E]="@px @ rgb(@, @, @)";var D=E+"Width",A=E+"Style",C=E+"Color";
F[E]={};F.borderWidth[D]=F[E][D]=B[D]="@px";F.borderStyle[A]=F[E][A]=B[A]="@";F.borderColor[C]=F[E][C]=B[C]="rgb(@, @, @)";});Element.implement({setOpacity:function(A){return this.set("opacity",A);
}});(function(){function A(B){return B.tagName.toLowerCase()=="body";}Element.implement({positioned:function(){if(A(this)){return true;}return(Element.getComputedStyle(this,"position")!="static");
},getOffsetParent:function(){if(A(this)){return null;}if(!Browser.Engine.trident){return $(this.offsetParent);}var B=this;while((B=B.parentNode)){if(Element.positioned(B)){return $(B);
}}return null;},getSize:function(){if(A(this)){return this.getWindow().getSize();}return{x:this.offsetWidth,y:this.offsetHeight};},getScrollSize:function(){if(A(this)){return this.getWindow().getScrollSize();
}return{x:this.scrollWidth,y:this.scrollHeight};},getScroll:function(){if(A(this)){return this.getWindow().getScroll();}return{x:this.scrollLeft,y:this.scrollTop};
},scrollTo:function(B,C){if(A(this)){return this.getWindow().scrollTo(B,C);}this.scrollLeft=B;this.scrollTop=C;return this;},getPosition:function(D){if(A(this)){return{x:0,y:0};
}var C=this,B={x:0,y:0};while(C){B.x+=C.offsetLeft;B.y+=C.offsetTop;C=C.offsetParent;}var E=(D)?$(D).getPosition():{x:0,y:0};return{x:B.x-E.x,y:B.y-E.y};
},getCoordinates:function(D){if(A(this)){return this.getWindow().getCoordinates();}var B=this.getPosition(D),C=this.getSize();var E={top:B.y,left:B.x,width:C.x,height:C.y};
E.right=E.left+E.width;E.bottom=E.top+E.height;return E;},getRelativePosition:function(){return this.getPosition(this.getOffsetParent());},computePosition:function(B){return{left:B.x-(this.getComputedStyle("margin-left").toInt()||0),top:B.y-(this.getComputedStyle("margin-top").toInt()||0)};
},position:function(B){return this.setStyles(this.computePosition(B));}});})();Native.implement([Window,Document],{getSize:function(){var A=this.getDocument().body,B=this.getDocument().documentElement;
if(Browser.Engine.webkit419){return{x:this.innerWidth,y:this.innerHeight};}return{x:B.clientWidth,y:B.clientHeight};},getScroll:function(){var A=this.getDocument().documentElement;
return{x:$pick(this.pageXOffset,A.scrollLeft),y:$pick(this.pageYOffset,A.scrollTop)};},getScrollSize:function(){var B=this.getDocument().documentElement,A=this.getDocument().body;
if(Browser.Engine.trident){return{x:Math.max(B.clientWidth,B.scrollWidth),y:Math.max(B.clientHeight,B.scrollHeight)};}if(Browser.Engine.webkit){return{x:A.scrollWidth,y:A.scrollHeight};
}return{x:B.scrollWidth,y:B.scrollHeight};},getPosition:function(){return{x:0,y:0};},getCoordinates:function(){var A=this.getSize();return{top:0,left:0,height:A.y,width:A.x,bottom:A.y,right:A.x};
}});Native.implement([Window,Document,Element],{getHeight:function(){return this.getSize().y;},getWidth:function(){return this.getSize().x;},getScrollTop:function(){return this.getScroll().y;
},getScrollLeft:function(){return this.getScroll().x;},getScrollHeight:function(){return this.getScrollSize().y;},getScrollWidth:function(){return this.getScrollSize().x;
},getTop:function(){return this.getPosition().y;},getLeft:function(){return this.getPosition().x;}});Native.implement([Element,Document],{getElements:function(N,M){var J={};
N=N.split(",");var A=[],H=N.length;var B=(H>1);for(var I=0;I<H;I++){var E=N[I],K=[],G=[];E=E.trim().replace(Selectors.sRegExp,function(P){if(P.charAt(2)){P=P.trim();
}G.push(P.charAt(0));return":)"+P.charAt(1);}).split(":)");for(var F=0,D=E.length;F<D;F++){var C=Selectors.parse(E[F]);if(!C){return[];}var O=Selectors.Method.getParam(K,G[F-1]||false,this,C,J);
if(!O){break;}K=O;}var L=Selectors.Method.getItems(K,this);A=(B)?A.concat(L):L;}return new Elements(A,{ddup:B,cash:!M});}});Window.implement({$E:function(A){return this.document.getElement(A);
}});var Selectors={regExp:(/:([^-:(]+)[^:(]*(?:\((["']?)(.*?)\2\))?|\[(\w+)(?:([!*^$~|]?=)(["']?)(.*?)\6)?\]|\.[\w-]+|#[\w-]+|\w+|\*/g),sRegExp:(/\s*([+>~\s])[a-zA-Z#.*\s]/g)};
Selectors.parse=function(A){var B={tag:"*",id:null,classes:[],attributes:[],pseudos:[]};A=A.replace(Selectors.regExp,function(E){switch(E.charAt(0)){case".":B.classes.push(E.slice(1));
break;case"#":B.id=E.slice(1);break;case"[":B.attributes.push([arguments[4],arguments[5],arguments[7]]);break;case":":var D=Selectors.Pseudo.get(arguments[1]);
if(!D){B.attributes.push([arguments[1],arguments[3]?"=":"",arguments[3]]);break;}var C={name:arguments[1],parser:D,argument:(D.parser)?D.parser(arguments[3]):arguments[3]};
B.pseudos.push(C);break;default:B.tag=E;}return"";});return B;};Selectors.Pseudo=new Hash;Selectors.XPath={getParam:function(B,G,D,H){var A="";switch(G){case" ":A+="//";
break;case">":A+="/";break;case"+":A+="/following-sibling::*[1]/self::";break;case"~":A+="/following-sibling::";break;}A+=(D.namespaceURI)?"xhtml:"+H.tag:H.tag;
var C;for(C=H.pseudos.length;C--;C){var F=H.pseudos[C];if(F.parser&&F.parser.xpath){A+=F.parser.xpath(F.argument);}else{A+=($chk(F.argument))?"[@"+F.name+'="'+F.argument+'"]':"[@"+F.name+"]";
}}if(H.id){A+='[@id="'+H.id+'"]';}for(C=H.classes.length;C--;C){A+='[contains(concat(" ", @class, " "), " '+H.classes[C]+' ")]';}for(C=H.attributes.length;
C--;C){var E=H.attributes[C];switch(E[1]){case"=":A+="[@"+E[0]+'="'+E[2]+'"]';break;case"*=":A+="[contains(@"+E[0]+', "'+E[2]+'")]';break;case"^=":A+="[starts-with(@"+E[0]+', "'+E[2]+'")]';
break;case"$=":A+="[substring(@"+E[0]+", string-length(@"+E[0]+") - "+E[2].length+' + 1) = "'+E[2]+'"]';break;case"!=":A+="[@"+E[0]+'!="'+E[2]+'"]';break;
case"~=":A+='[contains(concat(" ", @'+E[0]+', " "), " '+E[2]+' ")]';break;case"|=":A+='[contains(concat("-", @'+E[0]+', "-"), "-'+E[2]+'-")]';break;default:A+="[@"+E[0]+"]";
}}B.push(A);return B;},getItems:function(B,E){var F=[];var G=E.getDocument();var A=G.evaluate(".//"+B.join(""),E,Selectors.XPath.resolver,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
for(var D=0,C=A.snapshotLength;D<C;D++){F[D]=A.snapshotItem(D);}return F;},resolver:function(A){return(A=="xhtml")?"http://www.w3.org/1999/xhtml":false;
}};Selectors.Filter={getParam:function(H,B,A,P,Q){var F=[];var R=P.tag;if(B){var C={},E,D,O,L,K;var G=function(S){S.uid=S.uid||[Native.UID++];if(!C[S.uid]&&Selectors.Filter.match(S,P,Q)){C[S.uid]=true;
F.push(S);return true;}return false;};for(var N=0,M=H.length;N<M;N++){O=H[N];switch(B){case" ":D=O.getElementsByTagName(R);P.tag=false;for(L=0,K=D.length;
L<K;L++){G(D[L]);}break;case">":D=O.childNodes;for(L=0,K=D.length;L<K;L++){if(D[L].nodeType==1){G(D[L]);}}break;case"+":while((O=O.nextSibling)){if(O.nodeType==1){G(O);
break;}}break;case"~":while((O=O.nextSibling)){if(O.nodeType==1&&G(O)){break;}}break;}}return F;}if(P.id){el=A.getElementById(P.id,true);P.id=false;return(el&&Selectors.Filter.match(el,P,Q))?[el]:false;
}else{H=A.getElementsByTagName(R);P.tag=false;for(var J=0,I=H.length;J<I;J++){if(Selectors.Filter.match(H[J],P,Q)){F.push(H[J]);}}}return F;},getItems:$arguments(0)};
Selectors.Filter.match=function(C,E,G){G=G||{};if(E.id&&E.id!=C.id){return false;}if(E.tag&&E.tag!="*"&&E.tag!=C.tagName.toLowerCase()){return false;}var B;
for(B=E.classes.length;B--;B){if(!C.className||!C.className.contains(E.classes[B]," ")){return false;}}for(B=E.attributes.length;B--;B){var D=E.attributes[B];
var A=Element.prototype.getProperty.call(C,D[0]);if(!A){return false;}if(!D[1]){continue;}var F;switch(D[1]){case"=":F=(A==D[2]);break;case"*=":F=(A.contains(D[2]));
break;case"^=":F=(A.substr(0,D[2].length)==D[2]);break;case"$=":F=(A.substr(A.length-D[2].length)==D[2]);break;case"!=":F=(A!=D[2]);break;case"~=":F=A.contains(D[2]," ");
break;case"|=":F=A.contains(D[2],"-");}if(!F){return false;}}for(B=E.pseudos.length;B--;B){if(!E.pseudos[B].parser.filter.call(C,E.pseudos[B].argument,G)){return false;
}}return true;};Selectors.Method=(Browser.Features.xpath)?Selectors.XPath:Selectors.Filter;Element.implement({match:function(A){return(!A||Selectors.Filter.match(this,Selectors.parse(A)));
}});Native.implement([Element,Document],{getElementsByClassName:function(A){return this.getElements("."+A);},getElementsBySelector:function(A){return this.getElements(A);
}});Elements.implement({filterByTag:function(A){return this.filterBy(A);},filterByClass:function(A){return this.filterBy("."+A);},filterById:function(A){return this.filterBy("#"+A);
},filterByAttribute:function(B,A,C){return this.filterBy("["+B+(A||"")+(C||"")+"]");}});$E=function(A,B){return($(B)||document).getElement(A);};var $ES=function(A,B){return($(B)||document).getElements(A);
};Selectors.Pseudo.enabled={xpath:function(){return"[not(@disabled)]";},filter:function(){return !(this.disabled);}};Selectors.Pseudo.empty={xpath:function(){return"[not(node())]";
},filter:function(){return !(this.innerText||this.textContent||"").length;}};Selectors.Pseudo.contains={xpath:function(A){return'[contains(text(), "'+A+'")]';
},filter:function(B){for(var A=this.childNodes.length;A--;A){var C=this.childNodes[A];if(C.nodeName&&C.nodeType==3&&C.nodeValue.contains(B)){return true;
}}return false;}};Selectors.Pseudo.nth={parser:function(E){E=(E)?E.match(/^([+-]?\d*)?([devon]+)?([+-]?\d*)?$/):[null,1,"n",0];if(!E){return false;}var D=parseInt(E[1]);
var B=($chk(D))?D:1;var C=E[2]||false;var A=parseInt(E[3])||0;A=A-1;while(A<1){A+=B;}while(A>=B){A-=B;}switch(C){case"n":return{a:B,b:A,special:"n"};case"odd":return{a:2,b:0,special:"n"};
case"even":return{a:2,b:1,special:"n"};case"first":return{a:0,special:"index"};case"last":return{special:"last"};case"only":return{special:"only"};default:return{a:(B-1),special:"index"};
}},xpath:function(A){switch(A.special){case"n":return"[count(preceding-sibling::*) mod "+A.a+" = "+A.b+"]";case"last":return"[count(following-sibling::*) = 0]";
case"only":return"[not(preceding-sibling::* or following-sibling::*)]";default:return"[count(preceding-sibling::*) = "+A.a+"]";}},filter:function(A,I){var J=0,C=this;
switch(A.special){case"n":I.Positions=I.Positions||{};if(!I.Positions[this.uid]){var D=this.parentNode.childNodes;for(var G=0,F=D.length;G<F;G++){var B=D[G];
if(B.nodeType!=1){continue;}B.uid=B.uid||[Native.UID++];I.Positions[B.uid]=J++;}}return(I.Positions[this.uid]%A.a==A.b);case"last":while((C=C.nextSibling)){if(C.nodeType==1){return false;
}}return true;case"only":var E=C;while((E=E.previousSibling)){if(E.nodeType==1){return false;}}var H=C;while((H=H.nextSibling)){if(H.nodeType==1){return false;
}}return true;case"index":while((C=C.previousSibling)){if(C.nodeType==1&&++J>A.a){return false;}}return true;}return false;}};Selectors.Pseudo.extend({even:{parser:function(){return{a:2,b:1,special:"n"};
},xpath:Selectors.Pseudo.nth.xpath,filter:Selectors.Pseudo.nth.filter},odd:{parser:function(){return{a:2,b:0,special:"n"};},xpath:Selectors.Pseudo.nth.xpath,filter:Selectors.Pseudo.nth.filter},first:{parser:function(){return{a:0,special:"index"};
},xpath:Selectors.Pseudo.nth.xpath,filter:Selectors.Pseudo.nth.filter},last:{parser:function(){return{special:"last"};},xpath:Selectors.Pseudo.nth.xpath,filter:Selectors.Pseudo.nth.filter},only:{parser:function(){return{special:"only"};
},xpath:Selectors.Pseudo.nth.xpath,filter:Selectors.Pseudo.nth.filter}});Element.Events.domready={onAdd:function(E){if(Browser.loaded){return E.call(this);
}var H=this,D=this.getWindow(),G=this.getDocument();var C=function(){if(!arguments.callee.done){arguments.callee.done=true;E.call(H);}return true;};var I=(Browser.Engine.webkit)?["loaded","complete"]:"complete";
var B=function(J){if(I.contains(J.readyState)){return C();}return false;};if(G.readyState&&Browser.Engine.webkit){(function(){if(!B(G)){arguments.callee.delay(50);
}})();}else{if(G.readyState&&Browser.Engine.trident){var F=$("ie_domready");if(!F){var A=(D.location.protocol=="https:")?"//:":"javascript:void(0)";G.write('<script id="ie_domready" defer src="'+A+'"><\/script>');
F=$("ie_domready");}if(!B(F)){F.addEvent("readystatechange",B.pass(F));}}else{D.addEvent("load",C);G.addEvent("DOMContentLoaded",C);}}return null;}};window.addEvent("domready",function(){Browser.loaded=true;
});var JSON=new Hash({encode:function(B){switch($type(B)){case"string":return'"'+B.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';case"array":return"["+String(B.map(JSON.encode).filter($defined))+"]";
case"object":case"hash":var A=[];Hash.each(B,function(E,D){var C=JSON.encode(E);if(C){A.push(JSON.encode(D)+":"+C);}});return"{"+String(A)+"}";case"number":case"boolean":return String(B);
case false:return"null";}return null;},$specialChars:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},$replaceChars:function(A){return JSON.$specialChars[A]||"\\u00"+Math.floor(A.charCodeAt()/16).toString(16)+(A.charCodeAt()%16).toString(16);
},decode:function(string,secure){if($type(string)!="string"||!string.length){return null;}if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,""))){return null;
}return eval("("+string+")");}});Native.implement([Hash,Array,String,Number],{toJSON:function(){return JSON.encode(this);}});var Json=JSON;JSON.toString=JSON.encode;
JSON.evaluate=JSON.decode;var Cookie=new Class({Implements:Options,options:{path:false,domain:false,duration:false,secure:false,document:document},initialize:function(B,A){this.key=B;
this.setOptions(A);},write:function(B){B=encodeURIComponent(B);if(this.options.domain){B+="; domain="+this.options.domain;}if(this.options.path){B+="; path="+this.options.path;
}if(this.options.duration){var A=new Date();A.setTime(A.getTime()+this.options.duration*24*60*60*1000);B+="; expires="+A.toGMTString();}if(this.options.secure){B+="; secure";
}this.options.document.cookie=this.key+"="+B;return this;},read:function(){var A=this.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegExp()+"=([^;]*)");
return A?decodeURIComponent(A[1]):null;},erase:function(){new Cookie(this.key,$merge(this.options,{duration:-1})).write("");return this;}});Cookie.set=function(B,C,A){return new Cookie(B,A).write(C);
};Cookie.get=function(A){return new Cookie(A).read();};Cookie.remove=function(B,A){return new Cookie(B,A).erase();};var Color=new Native({initialize:function(B,C){if(arguments.length>=3){C="rgb";
B=Array.slice(arguments,0,3);}else{if(typeof B=="string"){if(B.match(/rgb/)){B=B.rgbToHex().hexToRgb(true);}else{if(B.match(/hsb/)){B=B.hsbToRgb();}else{B=B.hexToRgb(true);
}}}}C=C||"rgb";switch(C){case"hsb":var A=B;B=B.hsbToRgb();B.hsb=A;break;case"hex":B=B.hexToRgb(true);break;}B.rgb=B.slice(0,3);B.hsb=B.hsb||B.rgbToHsb();
B.hex=B.rgbToHex();return $extend(B,this);}});Color.implement({mix:function(){var A=Array.slice(arguments);var C=($type(A.getLast())=="number")?A.pop():50;
var B=this.slice();A.each(function(D){D=new Color(D);for(var E=0;E<3;E++){B[E]=Math.round((B[E]/100*(100-C))+(D[E]/100*C));}});return new Color(B,"rgb");
},invert:function(){return new Color(this.map(function(A){return 255-A;}));},setHue:function(A){return new Color([A,this.hsb[1],this.hsb[2]],"hsb");},setSaturation:function(A){return new Color([this.hsb[0],A,this.hsb[2]],"hsb");
},setBrightness:function(A){return new Color([this.hsb[0],this.hsb[1],A],"hsb");}});function $RGB(C,B,A){return new Color([C,B,A],"rgb");}function $HSB(C,B,A){return new Color([C,B,A],"hsb");
}function $HEX(A){return new Color(A,"hex");}Array.implement({rgbToHsb:function(){var B=this[0],C=this[1],J=this[2];var G,F,H;var I=Math.max(B,C,J),E=Math.min(B,C,J);
var K=I-E;H=I/255;F=(I!=0)?K/I:0;if(F==0){G=0;}else{var D=(I-B)/K;var A=(I-C)/K;var L=(I-J)/K;if(B==I){G=L-A;}else{if(C==I){G=2+D-L;}else{G=4+A-D;}}G/=6;
if(G<0){G++;}}return[Math.round(G*360),Math.round(F*100),Math.round(H*100)];},hsbToRgb:function(){var C=Math.round(this[2]/100*255);if(this[1]==0){return[C,C,C];
}else{var A=this[0]%360;var E=A%60;var F=Math.round((this[2]*(100-this[1]))/10000*255);var D=Math.round((this[2]*(6000-this[1]*E))/600000*255);var B=Math.round((this[2]*(6000-this[1]*(60-E)))/600000*255);
switch(Math.floor(A/60)){case 0:return[C,B,F];case 1:return[D,C,F];case 2:return[F,C,B];case 3:return[F,D,C];case 4:return[B,F,C];case 5:return[C,F,D];
}}return false;}});String.implement({rgbToHsb:function(){var A=this.match(/\d{1,3}/g);return(A)?hsb.rgbToHsb():null;},hsbToRgb:function(){var A=this.match(/\d{1,3}/g);
return(A)?A.hsbToRgb():null;}});var Swiff=function(J,K){if(!Swiff.fixed){Swiff.fix();}var I="Swiff_"+Native.UID++;K=$merge({id:I,height:1,width:1,container:null,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode:"transparent",swLiveConnect:true},events:{},vars:{}},K);
var D=K.params,E=K.vars,B=K.id;var F=$extend({height:K.height,width:K.width},K.properties);Swiff.Events[I]={};for(var A in K.events){Swiff.Events[I][A]=function(){K.events[A].call($(K.id));
};E[A]="Swiff.Events."+I+"."+A;}D.flashVars=Hash.toQueryString(E);if(Browser.Engine.trident){F.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";D.movie=J;
}else{F.type="application/x-shockwave-flash";F.data=J;}var H='<object id="'+K.id+'"';for(var G in F){H+=" "+G+'="'+F[G]+'"';}H+=">";for(var C in D){H+='<param name="'+C+'" value="'+D[C]+'" />';
}H+="</object>";return($(K.container)||new Element("div")).set("html",H).firstChild;};Swiff.extend({Events:{},remote:function(obj,fn){var rs=obj.CallFunction('<invoke name="'+fn+'" returntype="javascript">'+__flash__argumentsToXML(arguments,2)+"</invoke>");
return eval(rs);},getVersion:function(){if(!$defined(Swiff.pluginVersion)){var A;if(navigator.plugins&&navigator.mimeTypes.length){A=navigator.plugins["Shockwave Flash"];
if(A&&A.description){A=A.description;}}else{if(Browser.Engine.trident){A=$try(function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version");
});}}Swiff.pluginVersion=(typeof A=="string")?parseInt(A.match(/\d+/)[0]):0;}return Swiff.pluginVersion;},fix:function(){Swiff.fixed=true;window.addEvent("beforeunload",function(){__flash_unloadHandler=__flash_savedUnloadHandler=$empty;
});if(!Browser.Engine.trident){return ;}window.addEvent("unload",function(){Array.each(document.getElementsByTagName("object"),function(B){B.style.display="none";
for(var A in B){if(typeof B[A]=="function"){B[A]=$empty;}}});});}});var Group=new Class({initialize:function(){this.instances=Array.flatten(arguments);
this.events={};this.checker={};},addEvent:function(B,A){this.checker[B]=this.checker[B]||{};this.events[B]=this.events[B]||[];if(this.events[B].contains(A)){return false;
}else{this.events[B].push(A);}this.instances.each(function(C,D){C.addEvent(B,this.check.bind(this,[B,C,D]));},this);return this;},check:function(C,A,B){this.checker[C][B]=true;
var D=this.instances.every(function(F,E){return this.checker[C][E]||false;},this);if(!D){return ;}this.checker[C]={};this.events[C].each(function(E){E.call(this,this.instances,A);
},this);}});var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:"ignore",transition:function(A){return -(Math.cos(Math.PI*A)-1)/2;
}},initialize:function(A){this.pass=this.pass||this;this.setOptions(A);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();
var B=this.options.wait;if(B===false){this.options.link="cancel";}},step:function(){var A=$time();if(A<this.time+this.options.duration){var B=this.options.transition((A-this.time)/this.options.duration);
this.set(this.compute(this.from,this.to,B));}else{this.set(this.compute(this.from,this.to,1));this.complete();}},set:function(A){return A;},compute:function(C,B,A){return Fx.compute(C,B,A);
},check:function(){if(!this.timer){return true;}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.start.bind(this,arguments));
return false;}return false;},start:function(B,A){if(!this.check(B,A)){return this;}this.from=B;this.to=A;this.time=0;this.startTimer();this.onStart();return this;
},complete:function(){return(!this.stopTimer())?this:this.onComplete();},cancel:function(){return(!this.stopTimer())?this:this.onCancel();},onStart:function(){return this.fireEvent("onStart",this.pass);
},onComplete:function(){return this.fireEvent("onComplete",this.pass).callChain();},onCancel:function(){return this.fireEvent("onCancel",this.pass).clearChain();
},pause:function(){this.stopTimer();return this;},resume:function(){this.startTimer();return this;},stopTimer:function(){if(!this.timer){return false;}this.time=$time()-this.time;
this.timer=$clear(this.timer);return true;},startTimer:function(){if(this.timer){return false;}this.time=$time()-this.time;this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);
return true;}});Fx.compute=function(C,B,A){return(B-C)*A+C;};Fx.Durations={"short":250,normal:500,"long":1000};Fx.implement({custom:function(B,A){return this.start(B,A);
},clearTimer:function(){return this.cancel();}});Fx.Base=Fx;Fx.CSS=new Class({Extends:Fx,prepare:function(D,E,B){B=$splat(B);var C=B[1];if(!$chk(C)){B[1]=B[0];
B[0]=D.getStyle(E);}var A=B.map(this.parse);return{from:A[0],to:A[1]};},parse:function(A){A=$lambda(A)();A=(typeof A=="string")?A.split(" "):$splat(A);
return A.map(function(C){C=String(C);var B=false;Fx.CSS.Parsers.each(function(F,E){if(B){return ;}var D=F.parse(C);if($chk(D)){B={value:D,parser:F};}});
B=B||{value:C,parser:Fx.CSS.Parsers.String};return B;});},compute:function(D,C,B){var A=[];(Math.min(D.length,C.length)).times(function(E){A.push({value:D[E].parser.compute(D[E].value,C[E].value,B),parser:D[E].parser});
});A.$family={name:"fx:css:value"};return A;},serve:function(C,B){if($type(C)!="fx:css:value"){C=this.parse(C);}var A=[];C.each(function(D){A=A.concat(D.parser.serve(D.value,B));
});return A;},render:function(A,C,B){A.setStyle(C,this.serve(B,this.options.unit));},search:function(A){var B={};Array.each(document.styleSheets,function(D,C){var E=D.rules||D.cssRules;
Array.each(E,function(G,F){if(!G.style||!G.selectorText||!G.selectorText.test("^"+A+"$")){return ;}Element.Styles.each(function(I,H){if(!G.style[H]||Element.ShortStyles[H]){return ;
}I=G.style[H];B[H]=(I.test(/^rgb/))?I.rgbToHex():I;});});});return B;}});Fx.CSS.Parsers=new Hash({Color:{parse:function(A){if(A.match(/^#[0-9a-f]{3,6}$/i)){return A.hexToRgb(true);
}return((A=A.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[A[1],A[2],A[3]]:false;},compute:function(C,B,A){return C.map(function(E,D){return Math.round(Fx.compute(C[D],B[D],A));
});},serve:function(A){return A.map(Number);}},Number:{parse:function(A){return parseFloat(A);},compute:function(C,B,A){return Fx.compute(C,B,A);},serve:function(B,A){return(A)?B+A:B;
}},String:{parse:$lambda(false),compute:$arguments(1),serve:$arguments(0)}});Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(B,C,A){this.element=this.pass=$(B);
this.property=C;arguments.callee.parent(A);},set:function(A){this.render(this.element,this.property,A);return this;},start:function(){var A=Array.slice(arguments);
if(!this.check(A)){return this;}var B=this.prepare(this.element,this.property,A);return arguments.callee.parent(B.from,B.to);}});Element.Properties.tween={set:function(A){var B=this.retrieve("tween");
if(B){B.cancel();}return this.store("tween",new Fx.Tween(this,null,$extend({link:"cancel"},A)));},get:function(C,A){if(A||!this.retrieve("tween")){this.set("tween",A);
}var B=this.retrieve("tween");B.property=C;return B;}};Element.implement({tween:function(B){var A=this.get("tween",B);A.start.apply(A,Array.slice(arguments,1));
return this;},fade:function(A){var B=this.get("tween","opacity");A=$pick(A,"toggle");switch(A){case"in":B.start(1);break;case"out":B.start(0);break;case"show":B.set(1);
break;case"hide":B.set(0);break;case"toggle":B.start((function(){return(this.getStyle("visibility")=="hidden")?1:0;}).bind(this));break;default:B.start.apply(B,arguments);
}return this;},highlight:function(C,A){if(!A){var B=this.getStyle("background-color");A=(B=="transparent")?"#ffffff":B;}this.get("tween","background-color").start(C||"#ffff88",A);
return this;},effect:function(B,A){return new Fx.Tween(this,B,A);}});Fx.Style=Fx.Tween;Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(B,A){this.element=this.pass=$(B);
arguments.callee.parent(A);},set:function(A){if(typeof A=="string"){A=this.search(A);}for(var B in A){this.render(this.element,B,A[B]);}return this;},compute:function(E,D,C){var A={};
for(var B in E){A[B]=arguments.callee.parent(E[B],D[B],C);}return A;},start:function(B){if(!this.check(B)){return this;}if(typeof B=="string"){B=this.search(B);
}var E={},D={};for(var C in B){var A=this.prepare(this.element,C,B[C]);E[C]=A.from;D[C]=A.to;}return arguments.callee.parent(E,D);}});Element.Properties.morph={set:function(A){var B=this.retrieve("morph");
if(B){B.cancel();}return this.store("morph",new Fx.Morph(this,$extend({link:"cancel"},A)));},get:function(A){if(A||!this.retrieve("morph")){this.set("morph",A);
}return this.retrieve("morph");}};Element.implement({morph:function(A){this.get("morph").start(A);return this;},effects:function(A){return new Fx.Morph(this,A);
}});Fx.Styles=Fx.Morph;Fx.Slide=new Class({Extends:Fx,options:{mode:"vertical"},initialize:function(B,A){this.addEvent("onComplete",function(){this.open=(this.wrapper["offset"+this.layout.capitalize()]!=0);
if(this.open){this.wrapper.setStyle(this.layout,"auto");if(Browser.Engine.webkit419){this.element.dispose().inject(this.wrapper);}}},true);this.element=this.pass=$(B);
arguments.callee.parent(A);var C=this.element.retrieve("wrapper");this.wrapper=C||new Element("div",{styles:$extend(this.element.getStyles("margin","position"),{overflow:"hidden"})}).wraps(this.element);
this.element.store("wrapper",this.wrapper).setStyle("margin",0);this.now=[];this.open=true;},vertical:function(){this.margin="margin-top";this.layout="height";
this.offset=this.element.offsetHeight;},horizontal:function(){this.margin="margin-left";this.layout="width";this.offset=this.element.offsetWidth;},set:function(A){this.element.setStyle(this.margin,A[0]);
this.wrapper.setStyle(this.layout,A[1]);return this;},compute:function(D,C,B){var A=[];(2).times(function(E){A[E]=Fx.compute(D[E],C[E],B);});return A;},start:function(B,E){if(!this.check(B,E)){return this;
}this[E||this.options.mode]();var D=this.element.getStyle(this.margin).toInt();var C=this.wrapper.getStyle(this.layout).toInt();var A=[[D,C],[0,this.offset]];
var G=[[D,C],[-this.offset,0]];var F;switch(B){case"in":F=A;break;case"out":F=G;break;case"toggle":F=(this.wrapper["offset"+this.layout.capitalize()]==0)?A:G;
}return arguments.callee.parent(F[0],F[1]);},slideIn:function(A){return this.start("in",A);},slideOut:function(A){return this.start("out",A);},hide:function(A){this[A||this.options.mode]();
this.open=false;return this.set([-this.offset,0]);},show:function(A){this[A||this.options.mode]();this.open=true;return this.set([0,this.offset]);},toggle:function(A){return this.start("toggle",A);
}});Element.Properties.slide={set:function(B){var A=this.retrieve("slide");if(A){A.cancel();}return this.store("slide",new Fx.Slide(this,$extend({link:"cancel"},B)));
},get:function(A){if(A||!this.retrieve("slide")){this.set("slide",A);}return this.retrieve("slide");}};Element.implement({slide:function(B){B=B||"toggle";
var A=this.get("slide");switch(B){case"hide":A.hide();break;case"show":A.show();break;default:A.start(B);}return this;}});Fx.Scroll=new Class({Extends:Fx,options:{offset:{x:0,y:0},wheelStops:true},initialize:function(B,A){this.element=this.pass=$(B);
arguments.callee.parent(A);var D=this.cancel.bind(this,false);if($type(this.element)!="element"){this.element=$(this.element.getDocument().body);}var C=this.element;
if(this.options.wheelStops){this.addEvent("onStart",function(){C.addEvent("mousewheel",D);},true);this.addEvent("onComplete",function(){C.removeEvent("mousewheel",D);
},true);}},set:function(){var A=Array.flatten(arguments);this.element.scrollTo(A[0],A[1]);},compute:function(D,C,B){var A=[];(2).times(function(E){A.push(Fx.compute(D[E],C[E],B));
});return A;},start:function(C,H){if(!this.check(C,H)){return this;}var E=this.element.getSize(),F=this.element.getScrollSize(),B=this.element.getScroll(),D={x:C,y:H};
for(var G in D){var A=F[G]-E[G];if($chk(D[G])){D[G]=($type(D[G])=="number")?D[G].limit(0,A):A;}else{D[G]=B[G];}D[G]+=this.options.offset[G];}return arguments.callee.parent([B.x,B.y],[D.x,D.y]);
},toTop:function(){return this.start(false,0);},toLeft:function(){return this.start(0,false);},toRight:function(){return this.start("right",false);},toBottom:function(){return this.start(false,"bottom");
},toElement:function(B){var A=$(B).getPosition(this.element);return this.start(A.x,A.y);}});Fx.Scroll.implement({scrollTo:function(B,A){return this.start(B,A);
}});(function(){var A=Fx.prototype.initialize;Fx.prototype.initialize=function(B){A.call(this,B);var C=this.options.transition;if(typeof C=="string"&&(C=C.split(":"))){var D=Fx.Transitions;
D=D[C[0]]||D[C[0].capitalize()];if(C[1]){D=D["ease"+C[1].capitalize()+(C[2]?C[2].capitalize():"")];}this.options.transition=D;}};})();Fx.Transition=function(B,A){A=$splat(A);
return $extend(B,{easeIn:function(C){return B(C,A);},easeOut:function(C){return 1-B(1-C,A);},easeInOut:function(C){return(C<=0.5)?B(2*C,A)/2:(2-B(2*(1-C),A))/2;
}});};Fx.Transitions=new Hash({linear:$arguments(0)});Fx.Transitions.extend=function(A){for(var B in A){Fx.Transitions[B]=new Fx.Transition(A[B]);}};Fx.Transitions.extend({Pow:function(B,A){return Math.pow(B,A[0]||6);
},Expo:function(A){return Math.pow(2,8*(A-1));},Circ:function(A){return 1-Math.sin(Math.acos(A));},Sine:function(A){return 1-Math.sin((1-A)*Math.PI/2);
},Back:function(B,A){A=A[0]||1.618;return Math.pow(B,2)*((A+1)*B-A);},Bounce:function(D){var C;for(var B=0,A=1;1;B+=A,A/=2){if(D>=(7-4*B)/11){C=-Math.pow((11-6*B-11*D)/4,2)+A*A;
break;}}return C;},Elastic:function(B,A){return Math.pow(2,10*--B)*Math.cos(20*B*Math.PI*(A[0]||1)/3);}});["Quad","Cubic","Quart","Quint"].each(function(B,A){Fx.Transitions[B]=new Fx.Transition(function(C){return Math.pow(C,[A+2]);
});});var Request=new Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:{},async:true,method:"post",link:"ignore",isSuccess:null,emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalResponse:false},getXHR:function(){return(window.XMLHttpRequest)?new XMLHttpRequest():((window.ActiveXObject)?new ActiveXObject("Microsoft.XMLHTTP"):false);
},initialize:function(A){if(!(this.xhr=this.getXHR())){return ;}this.setOptions(A);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers=new Hash(this.options.headers).extend({"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, application/xml, text/xml, */*"});
},onStateChange:function(){if(this.xhr.readyState!=4||!this.running){return ;}this.running=false;this.status=0;$try(function(){this.status=this.xhr.status;
},this);if(this.options.isSuccess.call(this,this.status)){this.response={text:this.xhr.responseText,xml:this.xhr.responseXML};this.success(this.response.text,this.response.xml);
}else{this.response={text:null,xml:null};this.failure();}this.xhr.onreadystatechange=$empty;},isSuccess:function(){return((this.status>=200)&&(this.status<300));
},processScripts:function(A){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return $exec(A);}return A.stripScripts(this.options.evalScripts);
},success:function(B,A){this.onSuccess(this.processScripts(B),A);},onSuccess:function(){this.fireEvent("onComplete",arguments).fireEvent("onSuccess",arguments).callChain();
},failure:function(){this.onFailure();},onFailure:function(){this.fireEvent("onComplete").fireEvent("onFailure",this.xhr);},setHeader:function(A,B){this.headers.set(A,B);
return this;},getHeader:function(A){return $try(function(){return this.getResponseHeader(A);},this.xhr)||null;},check:function(){if(!this.running){return true;
}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.send.bind(this,arguments));return false;}return false;},send:function(D){if(!this.check(D)){return this;
}this.running=true;var E=$type(D);if(E=="string"||E=="element"){D={data:D};}var A=this.options;D=$extend({data:A.data,url:A.url,method:A.method},D);var G=D.data,C=D.url,H=D.method;
switch($type(G)){case"element":G=$(G).toQueryString();break;case"object":case"hash":G=Hash.toQueryString(G);}if(this.options.emulation&&["put","delete"].contains(H)){var B="_method="+H;
G=(G)?B+"&"+G:B;H="post";}if(this.options.urlEncoded&&H=="post"){var F=(this.options.encoding)?"; charset="+this.options.encoding:"";this.headers.set("Content-type","application/x-www-form-urlencoded"+F);
}if(G&&H=="get"){C=C+(C.contains("?")?"&":"?")+G;G=null;}this.xhr.open(H.toUpperCase(),C,this.options.async);this.xhr.onreadystatechange=this.onStateChange.bind(this);
this.headers.each(function(J,I){try{this.xhr.setRequestHeader(I,J);}catch(K){this.fireEvent("onException",[K,I,J]);}},this);this.fireEvent("onRequest");
this.xhr.send(G);if(!this.options.async){this.onStateChange();}return this;},cancel:function(){if(!this.running){return this;}this.running=false;this.xhr.abort();
this.xhr.onreadystatechange=$empty;this.xhr=this.getXHR();this.fireEvent("onCancel");return this;}});(function(){var A={};["get","post","GET","POST","PUT","DELETE"].each(function(B){A[B]=function(){var C=Array.link(arguments,{url:String.type,data:$defined});
return this.send($extend(C,{method:B.toLowerCase()}));};});Request.implement(A);})();Element.Properties.send={get:function(A){if(A||!this.retrieve("send")){this.set("send",A);
}return this.retrieve("send");},set:function(A){var B=this.retrieve("send");if(B){B.cancel();}return this.store("send",new Request($extend({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")},A)));
}};Element.implement({send:function(A){var B=this.get("send");B.send({data:this,url:A||B.options.url});return this;}});Object.toQueryString=Hash.toQueryString;
var XHR=new Class({Extends:Request,options:{update:false},initialize:function(B,A){arguments.callee.parent(A);this.url=B;},request:function(A){return this.send(this.url,A||this.options.data);
},send:function(A,B){if(!this.check(A,B)){return this;}return arguments.callee.parent({url:A,data:B});},success:function(B,A){B=this.processScripts(B);
if(this.options.update){$(this.options.update).empty().set("html",B);}this.onSuccess(B,A);},failure:function(){this.fireEvent("onFailure",this.xhr);}});
var Ajax=XHR;Request.HTML=new Class({Extends:Request,options:{update:false,evalScripts:true,filter:false},processHTML:function(B){var A=B.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
return(A)?A[1]:B;},success:function(D){var C=this.options,A=this.response;A.html=this.processHTML(D).stripScripts(function(E){A.javascript=E;});var B=new Element("div",{html:A.html});
A.elements=B.getElements("*");A.tree=(C.filter)?A.elements.filterBy(C.filter):$A(B.childNodes).filter(function(E){return($type(E)!="whitespace");});if(C.update){$(C.update).empty().adopt(A.tree);
}if(C.evalScripts){$exec(A.javascript);}this.onSuccess(A.tree,A.elements,A.html,A.javascript);}});Element.Properties.load={get:function(A){if(A||!this.retrieve("load")){this.set("load",A);
}return this.retrieve("load");},set:function(A){var B=this.retrieve("load");if(B){B.cancel();}return this.store("load",new Request.HTML($extend({link:"cancel",update:this,method:"get"},A)));
}};Element.implement({load:function(){this.get("load").send(Array.link(arguments,{data:Object.type,url:String.type}));return this;}});Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(A){arguments.callee.parent(A);
this.headers.extend({Accept:"application/json","X-Request":"JSON"});},success:function(A){this.response.json=JSON.decode(A,this.options.secure);this.onSuccess(this.response.json,A);
}});JSON.Remote=new Class({options:{key:"json"},Extends:Request.JSON,initialize:function(B,A){arguments.callee.parent(A);this.onComplete=$empty;this.url=B;
},send:function(A){if(!this.check(A)){return this;}return arguments.callee.parent({url:this.url,data:{json:Json.encode(A)}});},failure:function(){this.fireEvent("onFailure",this.xhr);
}});var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:"px",grid:false,limit:false,handle:false,modifiers:{x:"left",y:"top"}},initialize:function(){var B=Array.link(arguments,{options:Object.type,element:$defined});
this.element=$(B.element);this.document=this.element.getDocument();this.setOptions(B.options||{});var A=$type(this.options.handle);this.handles=(A=="array"||A=="collection")?$$(this.options.handle):$(this.options.handle)||this.element;
this.mouse={now:{},pos:{}};this.value={start:{},now:{}};this.selection=(Browser.Engine.trident)?"selectstart":"mousedown";this.bound={start:this.start.bind(this),check:this.check.bind(this),drag:this.drag.bind(this),stop:this.stop.bind(this),cancel:this.cancel.bind(this),eventStop:$lambda(false)};
this.attach();},attach:function(){this.handles.addEvent("mousedown",this.bound.start);return this;},detach:function(){this.handles.removeEvent("mousedown",this.bound.start);
return this;},start:function(C){this.fireEvent("onBeforeStart",this.element);this.mouse.start=C.page;var A=this.options.limit;this.limit={x:[],y:[]};for(var D in this.options.modifiers){if(!this.options.modifiers[D]){continue;
}this.value.now[D]=this.element.getStyle(this.options.modifiers[D]).toInt();this.mouse.pos[D]=C.page[D]-this.value.now[D];if(A&&A[D]){for(var B=2;B--;B){if($chk(A[D][B])){this.limit[D][B]=$lambda(A[D][B])();
}}}}if($type(this.options.grid)=="number"){this.options.grid={x:this.options.grid,y:this.options.grid};}this.document.addEvents({mousemove:this.bound.check,mouseup:this.bound.cancel});
this.document.addEvent(this.selection,this.bound.eventStop);},check:function(A){var B=Math.round(Math.sqrt(Math.pow(A.page.x-this.mouse.start.x,2)+Math.pow(A.page.y-this.mouse.start.y,2)));
if(B>this.options.snap){this.cancel();this.document.addEvents({mousemove:this.bound.drag,mouseup:this.bound.stop});this.fireEvent("onStart",this.element).fireEvent("onSnap",this.element);
}},drag:function(A){this.mouse.now=A.page;for(var B in this.options.modifiers){if(!this.options.modifiers[B]){continue;}this.value.now[B]=this.mouse.now[B]-this.mouse.pos[B];
if(this.options.limit&&this.limit[B]){if($chk(this.limit[B][1])&&(this.value.now[B]>this.limit[B][1])){this.value.now[B]=this.limit[B][1];}else{if($chk(this.limit[B][0])&&(this.value.now[B]<this.limit[B][0])){this.value.now[B]=this.limit[B][0];
}}}if(this.options.grid[B]){this.value.now[B]-=(this.value.now[B]%this.options.grid[B]);}this.element.setStyle(this.options.modifiers[B],this.value.now[B]+this.options.unit);
}this.fireEvent("onDrag",this.element);},cancel:function(A){this.document.removeEvent("mousemove",this.bound.check);this.document.removeEvent("mouseup",this.bound.cancel);
if(A){this.document.removeEvent(this.selection,this.bound.eventStop);this.fireEvent("onCancel",this.element);}},stop:function(A){this.document.removeEvent(this.selection,this.bound.eventStop);
this.document.removeEvent("mousemove",this.bound.drag);this.document.removeEvent("mouseup",this.bound.stop);if(A){this.fireEvent("onComplete",this.element);
}}});Element.implement({makeResizable:function(A){return new Drag(this,$merge({modifiers:{x:"width",y:"height"}},A));}});Drag.Base=Drag;Drag.Move=new Class({Extends:Drag,options:{droppables:[],container:false},initialize:function(C,B){arguments.callee.parent(C,B);
this.droppables=$$(this.options.droppables);this.container=$(this.options.container);var A=(this.element.positioned())?this.element.getStyle("position"):"absolute";
this.element.position(this.element.getRelativePosition()).setStyle("position",A);},start:function(B){if(this.overed){this.overed.fireEvent("leave",[this.element,this]);
this.overed=null;}if(this.container){var D=this.element,J=this.container,E=J.getCoordinates(D.getOffsetParent()),F={},A={};["top","right","bottom","left"].each(function(K){F[K]=J.getStyle("padding-"+K).toInt();
A[K]=D.getStyle("margin-"+K).toInt();},this);var C=D.offsetWidth+A.left+A.right,I=D.offsetHeight+A.top+A.bottom;var H=[E.left+F.left,E.right-F.right-C];
var G=[E.top+F.top,E.bottom-F.bottom-I];this.options.limit={x:H,y:G};}arguments.callee.parent(B);},checkAgainst:function(B){B=B.getCoordinates();var A=this.mouse.now;
return(A.x>B.left&&A.x<B.right&&A.y<B.bottom&&A.y>B.top);},checkDroppables:function(){var A=this.droppables.filter(this.checkAgainst,this).getLast();if(this.overed!=A){if(this.overed){this.overed.fireEvent("leave",[this.element,this]);
}this.overed=A?A.fireEvent("over",[this.element,this]):null;}},drag:function(A){arguments.callee.parent(A);if(this.droppables.length){this.checkDroppables();
}},stop:function(A){this.checkDroppables();if(this.overed){this.overed.fireEvent("drop",[this.element,this]);}else{this.element.fireEvent("emptydrop",this);
}return arguments.callee.parent(A);}});Element.implement({makeDraggable:function(A){return new Drag.Move(this,A);}});Selectors.Pseudo.children={parser:function(A){A=(A)?A.match(/^([-+]?\d*)?([\-+:])?([-+]?\d*)?$/):[null,0,false,0];
if(!A){return false;}A[1]=parseInt(A[1])||0;var B=parseInt(A[3]);A[3]=($chk(B))?B:0;switch(A[2]){case"-":case"+":case":":return{a:A[1],b:A[3],special:A[2]};
default:return{a:A[1],b:0,special:"index"};}},xpath:function(E){var C="";var B="count(../child::*)";var D=E.a+" + "+((E.a<0)?B:0);var A=E.b+" + "+((E.b<0)?B:0);
var F="position()";switch(E.special){case"-":A="(("+D+" - "+A+") mod ("+B+"))";D+=" + 1";A+=" + 1";C="("+A+" < 1 and ("+F+" <= "+D+" or "+F+" >= ("+A+" + "+B+"))) or ("+F+" <= "+D+" and "+F+" >= "+A+")";
break;case"+":A="(("+D+" + "+A+") mod ( "+B+"))";case":":D+=" + 1";A+=" + 1";C="("+A+" < "+D+" and ("+F+" >= "+D+" or "+F+" <= "+A+")) or ("+F+" >= "+D+" and "+F+" <= "+A+")";
break;default:C=(D+" + 1");}return"["+C+"]";},filter:function(G,H){H.i=H.i||0;H.all=H.all||this.parentNode.childNodes;H.len=H.len||H.all.length;var E=H.i;
var C=H.len;var F=H.all;var B=false;var D=G.a+((G.a<0)?C:0);var A=G.b+((G.b<0)?C:0);switch(G.special){case"-":A=(D-A)%C;B=(A<0)?(E<=D||E>=(A+C)):(E<=D&&E>=A);
break;case"+":A=(A+D)%C;case":":B=(A<D)?(E>=D||E<=A):(E>=D&&E<=A);break;default:B=(F[D]==this);}H.i++;return B;}};Hash.Cookie=new Class({Extends:Cookie,options:{autoSave:true},initialize:function(B,A){this.parent(B,A);
this.load();},save:function(){var A=JSON.encode(this.hash);if(A.length>4096){return false;}if(A.length==2){this.erase();}else{this.write(A);}return true;
},load:function(){this.hash=new Hash(JSON.decode(this.read(),true));return this;}});(function(){var A={};Hash.each(Hash.prototype,function(C,B){A[B]=function(){var D=C.apply(this.hash,arguments);
if(this.options.autoSave){this.save();}return D;};});Hash.Cookie.implement(A);})();var Sortables=new Class({Implements:[Events,Options],options:{snap:4,handle:false,revert:false,constrain:false,cloneOpacity:0.7,elementOpacity:0.3},initialize:function(A,B){this.setOptions(B);
this.elements=[];this.lists=[];this.idle=true;this.addLists($$($(A)||A));if(this.options.revert){this.effect=new Fx.Morph(null,$merge({duration:250,link:"cancel"},this.options.revert));
}},attach:function(){this.addLists(this.lists);return this;},detach:function(){this.lists=this.removeLists(this.lists);return this;},addItems:function(){Array.flatten(arguments).each(function(A){this.elements.push(A);
var C=A.retrieve("sortables:start",this.start.bindWithEvent(this,A));var B=A.retrieve("sortables:insert",this.insert.bind(this,A));(this.options.handle?A.getElement(this.options.handle)||A:A).addEvent("mousedown",C);
A.addEvent("over",B);},this);return this;},addLists:function(){Array.flatten(arguments).each(function(A){this.lists.push(A);this.addItems(A.getChildren());
A.addEvent("over",A.retrieve("sortables:insert",this.insert.bind(this,[A,"inside"])));},this);return this;},removeItems:function(){var A=[];Array.flatten(arguments).each(function(B){A.push(B);
this.elements.remove(B);var D=B.retrieve("sortables:start");var C=B.retrieve("sortables:insert");(this.options.handle?B.getElement(this.options.handle)||B:B).removeEvent("mousedown",D);
B.removeEvent("over",C);},this);return A;},removeLists:function(){var A=[];Array.flatten(arguments).each(function(B){A.push(B);this.lists.remove(B);this.removeItems(B.getChildren());
B.removeEvent("over",B.retrieve("sortables:insert"));},this);return A;},getClone:function(A){return A.clone(true).setStyles({margin:"0px",position:"absolute",visibility:"hidden"}).inject(this.list).position(A.getRelativePosition());
},getDroppables:function(){var A=this.list.getChildren();if(!this.options.constrain){A=this.lists.concat(A).remove(this.list);}return A.remove(this.clone).remove(this.element);
},insert:function(B,A){if(A){this.list=B;this.drag.droppables=this.getDroppables();}A=A||(this.element.getAllPrevious().contains(B)?"before":"after");this.element.inject(B,A);
this.fireEvent("onSort",[this.element,this.clone]);},start:function(B,A){if(!this.idle){return ;}this.idle=false;this.element=A;this.opacity=A.get("opacity");
this.list=A.getParent();this.clone=this.getClone(A);this.drag=this.clone.makeDraggable({snap:this.options.snap,container:this.options.constrain&&this.clone.getParent(),droppables:this.getDroppables(),onStart:function(){B.stop();
this.clone.set("opacity",this.options.cloneOpacity);this.element.set("opacity",this.options.elementOpacity);this.fireEvent("onStart",[this.element,this.clone]);
}.bind(this),onCancel:this.reset.bind(this),onComplete:this.end.bind(this)});this.drag.start(B);},end:function(){this.element.set("opacity",this.opacity);
this.drag.detach();if(this.effect){var A=this.element.getStyles("width","height");var B=this.clone.computePosition(this.element.getPosition(this.clone.offsetParent),this.clone.getParent().positioned());
this.effect.element=this.clone;this.effect.start({top:B.top,left:B.left,width:A.width,height:A.height,opacity:0.25}).chain(this.reset.bind(this));}else{this.reset();
}},reset:function(){this.idle=true;this.clone.destroy();this.fireEvent("onComplete",this.element);},serialize:function(C,A){var B=this.lists.map(function(D){return D.getChildren().map(A||function(F,E){return F.get("id");
},this);},this);if(this.lists.length==1){C=0;}return $chk(C)&&C>=0&&C<this.lists.length?B[C]:B;}});var Tips=new Class({Implements:[Events,Options],options:{onShow:function(A){A.setStyle("visibility","visible");
},onHide:function(A){A.setStyle("visibility","hidden");},maxTitleChars:30,showDelay:100,hideDelay:100,className:"tool",offsets:{x:16,y:16},fixed:false},initialize:function(B,A){this.setOptions(A);
B=$$(B);this.document=(B.length)?B[0].ownerDocument:document;this.toolTip=new Element("div",{"class":this.options.className+"-tip",styles:{position:"absolute",top:"0",left:"0",visibility:"hidden"}},this.document).inject(this.document.body);
this.wrapper=new Element("div").inject(this.toolTip);B.each(this.build,this);},build:function(B){B.$attributes.myTitle=(B.href&&B.get("tag")=="a")?B.href.replace("http://",""):(B.rel||false);
if(B.title){var C=B.title.split("::");if(C.length>1){B.$attributes.myTitle=C[0].trim();B.$attributes.myText=C[1].trim();}else{B.$attributes.myText=B.title;
}B.removeProperty("title");}else{B.$attributes.myText=false;}if(B.$attributes.myTitle&&B.$attributes.myTitle.length>this.options.maxTitleChars){B.$attributes.myTitle=B.$attributes.myTitle.substr(0,this.options.maxTitleChars-1)+"&hellip;";
}B.addEvent("mouseenter",function(D){this.start(B);if(!this.options.fixed){this.locate(D);}else{this.position(B);}}.bind(this));if(!this.options.fixed){B.addEvent("mousemove",this.locate.bind(this));
}var A=this.end.bind(this);B.addEvent("mouseleave",A);},start:function(A){this.wrapper.empty();if(A.$attributes.myTitle){this.title=new Element("span").inject(new Element("div",{"class":this.options.className+"-title"}).inject(this.wrapper)).set("html",A.$attributes.myTitle);
}if(A.$attributes.myText){this.text=new Element("span").inject(new Element("div",{"class":this.options.className+"-text"}).inject(this.wrapper)).set("html",A.$attributes.myText);
}$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this);},end:function(A){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this);
},position:function(A){var B=A.getPosition();this.toolTip.setStyles({left:B.x+this.options.offsets.x,top:B.y+this.options.offsets.y});},locate:function(B){var D=this.document.getSize();
var A=this.document.getScroll();var C={x:this.toolTip.offsetWidth,y:this.toolTip.offsetHeight};var G={x:"left",y:"top"};for(var E in G){var F=B.page[E]+this.options.offsets[E];
if((F+C[E]-A[E])>D[E]){F=B.page[E]-this.options.offsets[E]-C[E];}this.toolTip.setStyle(G[E],F);}},show:function(){if(this.options.timeout){this.timer=this.hide.delay(this.options.timeout,this);
}this.fireEvent("onShow",[this.toolTip]);},hide:function(){this.fireEvent("onHide",[this.toolTip]);}});var SmoothScroll=new Class({Extends:Fx.Scroll,initialize:function(B,C){C=$(C);
var E=C.getDocument(),D=C.getWindow();arguments.callee.parent(E,B);this.links=(this.options.links)?$$(this.options.links):$$(E.links);var A=D.location.href.match(/^[^#]*/)[0]+"#";
this.links.each(function(G){if(G.href.indexOf(A)!=0){return ;}var F=G.href.substr(A.length);if(F&&$(F)){this.useLink(G,F);}},this);if(!Browser.Engine.webkit419){this.addEvent("onComplete",function(){D.location.hash=this.anchor;
},true);}},useLink:function(B,A){B.addEvent("click",function(C){this.anchor=A;this.toElement(A);C.stop();}.bind(this));}});var Slider=new Class({Implements:[Events,Options],options:{onTick:function(A){if(this.options.snap){A=this.toPosition(this.step);
}this.knob.setStyle(this.property,A);},snap:false,offset:0,range:false,wheel:false,steps:100,mode:"horizontal"},initialize:function(E,A,D){this.setOptions(D);
this.element=$(E);this.knob=$(A);this.previousChange=this.previousEnd=this.step=-1;this.element.addEvent("mousedown",this.clickedElement.bind(this));if(this.options.wheel){this.element.addEvent("mousewheel",this.scrolledElement.bindWithEvent(this));
}var F,B={},C={x:false,y:false};switch(this.options.mode){case"vertical":this.axis="y";this.property="top";F="offsetHeight";break;case"horizontal":this.axis="x";
this.property="left";F="offsetWidth";}this.half=this.knob[F]/2;this.full=this.element[F]-this.knob[F]+(this.options.offset*2);this.min=$chk(this.options.range[0])?this.options.range[0]:0;
this.max=$chk(this.options.range[1])?this.options.range[1]:this.options.steps;this.range=this.max-this.min;this.steps=this.options.steps||this.full;this.stepSize=Math.abs(this.range)/this.steps;
this.stepWidth=this.stepSize*this.full/Math.abs(this.range);this.knob.setStyle("position","relative").setStyle(this.property,-this.options.offset);C[this.axis]=this.property;
B[this.axis]=[-this.options.offset,this.full-this.options.offset];this.drag=new Drag(this.knob,{snap:0,limit:B,modifiers:C,onDrag:this.draggedKnob.bind(this),onStart:this.draggedKnob.bind(this),onComplete:function(){this.draggedKnob();
this.end();}.bind(this)});if(this.options.snap){this.drag.options.grid=Math.ceil(this.stepWidth);this.drag.options.limit[this.axis][1]=this.full;}},set:function(A){if(!((this.range>0)^(A<this.min))){A=this.min;
}if(!((this.range>0)^(A>this.max))){A=this.max;}this.step=Math.round(A);this.checkStep();this.end();this.fireEvent("onTick",this.toPosition(this.step));
return this;},clickedElement:function(C){var B=this.range<0?-1:1;var A=C.page[this.axis]-this.element.getRelativePosition()[this.axis]-this.half;A=A.limit(-this.options.offset,this.full-this.options.offset);
this.step=Math.round(this.min+B*this.toStep(A));this.checkStep();this.end();this.fireEvent("onTick",A);},scrolledElement:function(A){var B=(this.options.mode=="horizontal")?(A.wheel<0):(A.wheel>0);
this.set(B?this.step-this.stepSize:this.step+this.stepSize);A.stop();},draggedKnob:function(){var B=this.range<0?-1:1;var A=this.drag.value.now[this.axis];
A=A.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+B*this.toStep(A));this.checkStep();},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step;
this.fireEvent("onChange",this.step);}},end:function(){if(this.previousEnd!==this.step){this.previousEnd=this.step;this.fireEvent("onComplete",this.step+"");
}},toStep:function(A){var B=(A+this.options.offset)*this.stepSize/this.full*this.steps;return this.options.steps?Math.round(B-=B%this.stepSize):B;},toPosition:function(A){return(this.full*Math.abs(this.min-A))/(this.steps*this.stepSize)-this.options.offset;
}});var Scroller=new Class({Implements:[Events,Options],options:{area:20,velocity:1,onChange:function(A,B){this.element.scrollTo(A,B);}},initialize:function(B,A){this.setOptions(A);
this.element=$(B);this.listener=($type(this.element)!="element")?$(this.element.getDocument().body):this.element;this.timer=null;},start:function(){this.coord=this.getCoords.bind(this);
this.listener.addEvent("mousemove",this.coord);},stop:function(){this.listener.removeEvent("mousemove",this.coord);this.timer=$clear(this.timer);},getCoords:function(A){this.page=(this.listener.get("tag")=="body")?A.client:A.page;
if(!this.timer){this.timer=this.scroll.periodical(50,this);}},scroll:function(){var B=this.element.getSize(),A=this.element.getScroll(),E=this.element.getPosition(),D={x:0,y:0};
for(var C in this.page){if(this.page[C]<(this.options.area+E[C])&&A[C]!=0){D[C]=(this.page[C]-this.options.area-E[C])*this.options.velocity;}else{if(this.page[C]+this.options.area>(B[C]+E[C])&&B[C]+B[C]!=A[C]){D[C]=(this.page[C]-B[C]+this.options.area-E[C])*this.options.velocity;
}}}if(D.y||D.x){this.fireEvent("onChange",[A.x+D.x,A.y+D.y]);}}});var Asset=new Hash({javascript:function(F,D){D=$extend({onload:$empty,document:document,check:$lambda(true)},D);
var B=new Element("script",{src:F,type:"text/javascript"});var E=D.onload.bind(B),A=D.check,G=D.document;delete D.onload;delete D.check;delete D.document;
B.addEvents({load:E,readystatechange:function(){if(this.readyState=="complete"){E();}}}).setProperties(D);if(Browser.Engine.webkit419){var C=(function(){if(!$try(A)){return ;
}$clear(C);E();}).periodical(50);}return B.inject(G.head);},css:function(B,A){return new Element("link",$merge({rel:"stylesheet",media:"screen",type:"text/css",href:B},A)).inject(document.head);
},image:function(C,B){B=$merge({onload:$empty,onabort:$empty,onerror:$empty},B);var D=new Image();var A=$(D)||new Element("img");["load","abort","error"].each(function(E){var F="on"+E;
var G=B[F];delete B[F];D[F]=function(){if(!D){return ;}if(!A.parentNode){A.width=D.width;A.height=D.height;}D=D.onload=D.onabort=D.onerror=null;G.delay(1,A,A);
A.fireEvent(E,A,1);};});D.src=A.src=C;if(D&&D.complete){D.onload.delay(1);}return A.setProperties(B);},images:function(D,C){C=$merge({onComplete:$empty,onProgress:$empty},C);
if(!D.push){D=[D];}var A=[];var B=0;D.each(function(F){var E=new Asset.image(F,{onload:function(){C.onProgress.call(this,B,D.indexOf(F));B++;if(B==D.length){C.onComplete();
}}});A.push(E);});return new Elements(A);}});Fx.Elements=new Class({Extends:Fx.CSS,initialize:function(B,A){this.elements=this.pass=$$(B);arguments.callee.parent(A);
},compute:function(G,H,I){var C={};for(var D in G){var A=G[D],E=H[D],F=C[D]={};for(var B in A){F[B]=arguments.callee.parent(A[B],E[B],I);}}return C;},set:function(B){for(var C in B){var A=B[C];
for(var D in A){this.render(this.elements[C],D,A[D]);}}return this;},start:function(C){if(!this.check(C)){return this;}var H={},I={};for(var D in C){var F=C[D],A=H[D]={},G=I[D]={};
for(var B in F){var E=this.prepare(this.elements[D],B,F[B]);A[B]=E.from;G[B]=E.to;}}return arguments.callee.parent(H,I);}});var Accordion=new Class({Extends:Fx.Elements,options:{display:0,show:false,height:true,width:false,opacity:true,fixedHeight:false,fixedWidth:false,wait:false,alwaysHide:false},initialize:function(){var C=Array.link(arguments,{container:Element.type,options:Object.type,togglers:$defined,elements:$defined});
arguments.callee.parent(C.elements,C.options);this.togglers=$$(C.togglers);this.container=$(C.container);this.previous=-1;if(this.options.alwaysHide){this.options.wait=true;
}if($chk(this.options.show)){this.options.display=false;this.previous=this.options.show;}if(this.options.start){this.options.display=false;this.options.show=false;
}this.effects={};if(this.options.opacity){this.effects.opacity="fullOpacity";}if(this.options.width){this.effects.width=this.options.fixedWidth?"fullWidth":"offsetWidth";
}if(this.options.height){this.effects.height=this.options.fixedHeight?"fullHeight":"scrollHeight";}for(var B=0,A=this.togglers.length;B<A;B++){this.addSection(this.togglers[B],this.elements[B]);
}this.elements.each(function(E,D){if(this.options.show===D){this.fireEvent("onActive",[this.togglers[D],E]);}else{for(var F in this.effects){E.setStyle(F,0);
}}},this);if($chk(this.options.display)){this.display(this.options.display);}},addSection:function(E,C,G){E=$(E);C=$(C);var F=this.togglers.contains(E);
var B=this.togglers.length;this.togglers.include(E);this.elements.include(C);if(B&&(!F||G)){G=$pick(G,B-1);E.inject(this.togglers[G],"before");C.inject(E,"after");
}else{if(this.container&&!F){E.inject(this.container);C.inject(this.container);}}var A=this.togglers.indexOf(E);E.addEvent("click",this.display.bind(this,A));
if(this.options.height){C.setStyles({"padding-top":0,"border-top":"none","padding-bottom":0,"border-bottom":"none"});}if(this.options.width){C.setStyles({"padding-left":0,"border-left":"none","padding-right":0,"border-right":"none"});
}C.fullOpacity=1;if(this.options.fixedWidth){C.fullWidth=this.options.fixedWidth;}if(this.options.fixedHeight){C.fullHeight=this.options.fixedHeight;}C.setStyle("overflow","hidden");
if(!F){for(var D in this.effects){C.setStyle(D,0);}}return this;},display:function(A){A=($type(A)=="element")?this.elements.indexOf(A):A;if((this.timer&&this.options.wait)||(A===this.previous&&!this.options.alwaysHide)){return this;
}this.previous=A;var B={};this.elements.each(function(E,D){B[D]={};var C=(D!=A)||(this.options.alwaysHide&&(E.offsetHeight>0));this.fireEvent(C?"onBackground":"onActive",[this.togglers[D],E]);
for(var F in this.effects){B[D][F]=C?0:E[this.effects[F]];}},this);return this.start(B);}});
/* end mootools-beta-1.2.js */
/* Start mocha.js 2010-05-25 */
/* -----------------------------------------------------------------

    Script: 
        mocha.js v.0.7
    
    Copyright:
        Copyright (c) 2007 Greg Houston, <http://greghoustondesign.com/>
    
    License:
        MIT-style license

    Contributors:
        Scott F. Frederick
        Joel Lindau
    
   ----------------------------------------------------------------- */

var MochaDesktop = new Class({
    options: {
        draggable: true,
        resizable: true,
        minimizable: true, // this is automatically reset to false if there is no dock
        maximizable: true, // this is automatically reset to false if #mochaDesktop is not present
        closable: true,
        headerHeight: 25,
        footerHeight: 30,
        cornerRadius: 9,
        desktopTopOffset: 20, // use a negative number if neccessary to place first window where you want it
        desktopLeftOffset: 290,
        mochaTopOffset: 70, // initial vertical spacing of each window
        mochaLeftOffset: 70, // initial horizontal spacing of each window
        newWindowPosTop: 0, // In the current setup this just initializes the variable and does not effect the position
        newWindowPosLeft: 0, // In the current setup this just initializes the variable and does not effect the position
        minWidth: 250, // minimum width of windows when resized
        maxWidth: 2500, // maximum width of windows when resized
        minHeight: 100,    // minimum height of windows when resized    
        maxHeight: 2000 // maximum height of windows when resized    
    },
    initialize: function(options){
        this.setOptions(options);
        // Private properties        
        this.indexLevel = 1;
        this.mochaControlsWidth = 0;
        this.minimizebuttonX = 0;
        this.maximizebuttonX = 0;
        this.closebuttonX = 0;
        this.scrollWidthOffset = 6;
        this.windowIDCount = 0;
        new Element('canvas');
        // Add properties to elements in the DOM
        // Consider moving this to windowProperties
        // so it is not added to all the elements in the DOM
        // but just to the windows
        Element.implement({oldTop: ''});
        Element.implement({oldLeft: ''});
        Element.implement({oldWidth: ''});
        Element.implement({oldHeight: ''});
        Element.implement({maximizeToggle: 'maximize'});
        Element.implement({modal: ''});
        Element.implement({iframe: ''});
        Element.implement({contentURL: ''});
        $$('div.mocha').setStyle('display', 'block');
        if ($('mochaDesktop')) {
            this.setDesktopSize();
        }
        else {
            this.options.maximizable = false;
        }
        if ($('mochaDock')) { 
            if (this.options.minimizable == true){
                $('mochaDock').setStyles({
                    'position': 'absolute',
                    'top': null,
                    'bottom': 0,
                    'left': 0
                });
                this.initDock($('mochaDock'));
                this.drawDock($('mochaDock'));
            }
            else {
                $('mochaDock').setStyle('display', 'none');    
            }
        }
        else {
            this.options.minimizable = false;
        }
        this.insertWindowElements($$('div.mocha'));
        this.drawAll();
        this.attachDraggable($$('div.mocha'));
        this.attachResizable($$('div.mocha'));
        this.attachFocus($$('div.mocha'));
        this.attachMinimize($$('div.mocha'));
        this.attachMaximize($$('div.mocha'));
        this.attachClose($$('div.mocha'));
        this.arrangeCascade();

        // Modal initialization
        var mochaModal = new Element('div', {
            'id': 'mochaModalBackground'
        });        

        if ($('mochaDesktop')){
            mochaModal.injectInside($('mochaDesktop'));
        }
        else {
            mochaModal.injectInside(document.body);
        }
        this.setModalSize();

        mochaModal.setStyle('opacity', .4);
        this.modalOpenMorph = new Fx.Morph($('mochaModalBackground'), {
                'duration': 200
                });
        this.modalCloseMorph = new Fx.Morph($('mochaModalBackground'), {
            'duration': 200,
            onComplete: function(){
                $('mochaModalBackground').setStyle('display', 'none');
            }.bind(this)
        });        
        
        if (window.ie && $("mochaDesktopNavbar")){ // fix for dropdown menus in IE
            var sfEls = $("mochaDesktopNavbar").getElementsByTagName("LI");
            for (var i=0; i<sfEls.length; i++) {
                sfEls[i].onmouseover=function(){
                    this.className += " sfhover";
                }
                sfEls[i].onmouseout = function(){
                    this.className = this.className.replace(new RegExp(" sfhover\\b"), "");
                }
            }
        };
        
        window.onresize = function(){
            this.setDesktopSize();
            this.setModalSize();
            setTimeout( function(){
                this.drawAll();
            }.bind(this), 100);
        }.bind(this)
    },
    /*
    
    Method: newWindow
    
    Arguments: 
        properties

    */    
    newWindow: function(properties){
        windowProperties = $extend({
            id: null,
            title: 'New Window',
            loadMethod: 'html',                 // html, xhr, or iframe
            content: '',                         // used if loadMethod is set to 'html'
            contentURL: 'pages/lipsum.html',    // used if loadMethod is set to 'xhr' or 'iframe'            
            modal: false,
            width: 300,
            height: 125, 
            scrollbars: true,
            x: null,
            y: null,
            paddingVertical: 10,
            paddingHorizontal: 12,
            bgColor: '#fff',
            onContentLoaded: $empty,            // Event, fired when content is successfully loaded via XHR
            onFocus: $empty,                    // Event, fired when the window is focused
            onResize: $empty,                    // Event, fired when the window is resized
            onMinimize: $empty,                    // Event, fired when the window is minimized
            onMaximize: $empty,                    // Event, fired when the window is maximized
            onClose: $empty,                    // Event, fired just before the window is closed
            onCloseComplete: $empty                // Event, fired after the window is closed            
        }, properties || {});

        // Check if window already exists
        if ( $(windowProperties.id) ) {
            if ( $(windowProperties.id).getStyle('display') == 'none' ) {
                // If window is minimized, instead of creating a duplicate window, restore minimized window
                $(windowProperties.id).setStyle('display','block');
                $$('button.mochaDockButton').each(function(el){
                    if (el.getProperty('winAssociated') == windowProperties.id){
                        el.dispose();
                    }
                });
            }
            // If window exists and is not minimized, give the findow focus            
            setTimeout(function(){ this.focusWindow($(windowProperties.id)); }.bind(this),10);            
            return;
        }
        
        // Create window div
        var mochaNewWindow = new Element('div', {
            'class': 'mocha',
            'id': 'win' + (++this.windowIDCount)
        });
        
        // Set window ID. This is being set twice. Might think about how to consolidate the two instances
        if (windowProperties.id){
            mochaNewWindow.setProperty('id', windowProperties.id);
        }        
        
        // Inject window in the page
        if ($('mochaDesktop')){
            mochaNewWindow.injectInside($('mochaDesktop'));
        }
        else {
            mochaNewWindow.injectInside(document.body);
        }
        
        // Add content to window
        if (windowProperties.loadMethod == 'html') {
            mochaNewWindow.setHTML(windowProperties.content);    
        }
        
        // Is the window modal or not
        if (windowProperties.modal) {
            mochaNewWindow.modal = true;
        }

        // Does the window use an Iframe for it's content?
        if (windowProperties.contentURL && windowProperties.loadMethod != 'html') {
            mochaNewWindow.contentURL = windowProperties.contentURL;
            if (windowProperties.loadMethod == 'iframe'){
                mochaNewWindow.iframe = true;
            }
        }

        // Set height and width of window
        mochaNewWindow.setStyles({
            'width': windowProperties.width,
            'height': windowProperties.height,
            'display': 'block'
        });
        
        // Create window header
        new Element('h3', {
            'class': 'mochaTitle'
        }).setHTML(windowProperties.title).injectTop(mochaNewWindow);

        // Here is where the new windows and the onstart windows use the same code.
        // We want to merge new window and onstart window creation 
        this.insertWindowElements([mochaNewWindow]);
        
        // Add canvas gui to new window
        this.drawWindow(mochaNewWindow);

        // Set scrollbars to auto or hidden
        var scrollbars = windowProperties.scrollbars ? 'auto' : 'hidden';
        mochaNewWindow.getElement('.mochaScroller').setStyles({
            'overflow': scrollbars,
            'background': windowProperties.bgColor
        });

        // Set content padding
        mochaNewWindow.getElement('.mochaScrollerpad').setStyles({
            'padding-top': windowProperties.paddingVertical,
            'padding-bottom': windowProperties.paddingVertical,
            'padding-left': windowProperties.paddingHorizontal,
            'padding-right': windowProperties.paddingHorizontal
        });

        // Set events for the window
        mochaNewWindow.onContentLoaded = windowProperties.onContentLoaded;
        mochaNewWindow.onFocus = windowProperties.onFocus;
        mochaNewWindow.onResize    = windowProperties.onResize;
        mochaNewWindow.onMinimize = windowProperties.onMinimize,
        mochaNewWindow.onMaximize = windowProperties.onMaximize;
        mochaNewWindow.onClose = windowProperties.onClose;
        mochaNewWindow.onCloseComplete = windowProperties.onCloseComplete;

        // Attach events to the window
        if (!mochaNewWindow.modal) {
            this.attachDraggable([mochaNewWindow]);
            this.attachResizable([mochaNewWindow], windowProperties.onResize);
            this.attachFocus([mochaNewWindow], windowProperties.onFocus);
            this.attachMinimize([mochaNewWindow], windowProperties.onMinimize);
            this.attachMaximize([mochaNewWindow], windowProperties.onMaximize);
        }
        this.attachClose([mochaNewWindow]);

        // Move new window into position
        if (windowProperties.x && windowProperties.y) {
            this.options.newWindowPosTop = windowProperties.y;
            this.options.newWindowPosLeft = windowProperties.x;
        }
        else {
            this.options.newWindowPosTop = (this.getWindowHeight() * .5) - (mochaNewWindow.offsetHeight * .5);
            this.options.newWindowPosLeft = (this.getWindowWidth() * .5) - (mochaNewWindow.offsetWidth * .5);
        }
        
        if (mochaNewWindow.modal) {
            $('mochaModalBackground').setStyle('display', 'block');
            this.modalOpenMorph.start({
                'opacity': .55
            });
            mochaNewWindow.setStyles({
                'top': this.options.newWindowPosTop,
                'left': this.options.newWindowPosLeft
            });
        } 
        else {
            var mochaMorph = new Fx.Morph(mochaNewWindow, {
                'duration': 300
            });
            mochaMorph.start({
                'top': this.options.newWindowPosTop,
                'left': this.options.newWindowPosLeft
            });
        }
        
        // Set the zIndex for the new window
        if (windowProperties.modal) {
            mochaNewWindow.setStyles({
                'zIndex': 11000
            });
        }
        else {
            setTimeout(function(){ this.focusWindow(mochaNewWindow); }.bind(this), 10);
        }
        return;
    },
    /*
    
    Method: closeWindow
    
    Arguments: 
        el: the $(window) to be closed

    Returns:
        true: the window was closed
        false: the window was not closed

    */
    closeWindow: function(el) {
        var element = $(el);
        
        if (el.onClose){    
            el.onClose();
        }
        
        // redraws IE windows without shadows since IE messes up canvas alpha when you change element opacity
        if (window.ie) this.drawWindow(el, false); 
        
        if (element.modal) {
            this.modalCloseMorph.start({
                opacity: 0
            });
        }
        
        var closeMorph = new Fx.Morph(element, {
            duration: 250,
            onComplete: function(){
                element.dispose();
                if (el.onCloseComplete){
                    el.onCloseComplete();
                }    
            }.bind(this)
        });

        closeMorph.start({
            opacity: .4
        });

        return true;
    },
    focusWindow: function(el){
        this.indexLevel ++;
        el.setStyle('zIndex', this.indexLevel);
    },
    getWindowWidth: function(){
        var windowDimensions = document.getCoordinates();
        return windowDimensions.width;
    },
    getWindowHeight: function(){
        var windowDimensions = document.getCoordinates();
        return windowDimensions.height;
    },    
    setDesktopSize: function(){
        if ($('mochaDesktop')) {
            $('mochaDesktop').setStyle('width', this.getWindowWidth() - 20); // To adjust for broswer scrollbar
            setTimeout( function(){
                $('mochaDesktop').setStyle('width', this.getWindowWidth());
            }.bind(this), 100);
            $('mochaDesktop').setStyle('height', this.getWindowHeight());
            if ($('mochaPageWrapper')){
                $('mochaPageWrapper').setStyle('height', this.getWindowHeight());
            }
        }
    },
    setModalSize: function(){
        $('mochaModalBackground').setStyle('height', this.getWindowHeight());
    },    
    insertWindowElements: function(elementArray){
        elementArray.each(function(el){
            var mochaTempContents = el.innerHTML;
            el.empty();

            if (window.ie6){
                el.innerHTML = '<iframe class="zIndexFix" scrolling="no" marginwidth="0" src="" marginheight="0"></iframe>';
            }
            
            var mochaOverlay = new Element('div', {
                'class': 'mochaOverlay'
            }).injectInside(el);
            
            if (window.ie){
                mochaOverlay.setStyle('zIndex', 2)
            }

            //Insert mochaTitlebar
            var mochaTitlebar = new Element('div', {
                'class': 'mochaTitlebar'
            }).injectTop(mochaOverlay);
            
            if (this.options.draggable && !el.modal){
                mochaTitlebar.setStyle('cursor', 'move');
            }

            var mochaContent = new Element('div', {
                'class': 'mochaContent'
            }).injectInside(mochaOverlay);

            mochaContent.setStyles({
                width: el.getStyle('width'),
                height: el.getStyle('height')
            });

            var mochaScroller = new Element('div', {
                'class': 'mochaScroller'
            }).injectTop(mochaContent);

            var mochaScrollerpad = new Element('div', {
                'class': 'mochaScrollerpad'
            }).setHTML(mochaTempContents).injectInside(mochaScroller);
            
            if (el.iframe){
                var mochaIframe = new Element('iframe', {
                    'id': el.id + 'Iframe',                          
                    'class': 'mochaIframe',
                    'src': el.contentURL,
                    'marginwidth': 0,
                    'marginheight': 0,
                    'frameBorder': 0,
                    'scrolling': 'auto'
                }).injectInside(mochaScrollerpad);
            }            
            
            var mochaTitlebarH3 = mochaScrollerpad.getElement('h3.mochaTitle').clone().injectInside(mochaTitlebar);
            mochaScrollerpad.getElement('.mochaTitle').dispose();

            if(el.contentURL && !el.iframe){
                new Request({
                    url: el.contentURL,
                    onRequest: function(){
                    },
                    onFailure: function(){
                        mochaScrollerpad.setHTML('<p><strong>Error Loading XMLHttpRequest</strong></p><p>Make sure all of your content is uploaded to your server, and that you are attempting to load a document from the same domain as this page. XMLHttpRequests will not work on your local machine.</p>');
                    },
                    onSuccess: function(response) {
                        mochaScrollerpad.setHTML(response);
                        if ( el.onContentLoaded ) el.onContentLoaded();
                    }
                }).get();
            }
            
            //Insert canvas
            var canvas = new Element('canvas', {
                'class': 'mochaCanvas',
                'width': 1,
                'height': 1
            }).injectInside(el);

            // Dynamically initialize canvas using excanvas. This is only required by IE
            if (window.ie) {
                G_vmlCanvasManager.initElement(canvas);
            }

            //Insert resize handles
            if (this.options.resizable && !el.modal){
                var resizeHandle = new Element('div', {
                    'class': 'resizeHandle'
                }).injectAfter(mochaOverlay);
            }

            if (window.ie && !el.modal){
                resizeHandle.setStyle('zIndex', 2)    
            }

            //Insert mochaTitlebar controls
            var mochaControls = new Element('div', {
                'class': 'mochaControls'
            }).injectAfter(mochaOverlay);

            if (window.ie){
                mochaControls.setStyle('zIndex', 2)
            }

            //Insert close button
            if (this.options.closable || el.modal){
                new Element('div', {
                    'class': 'mochaClose',
                    'title': 'Close Window'
                }).injectInside(mochaControls);
            }                

            //Insert maximize button
            if (this.options.maximizable && !el.modal){
                new Element('div', {
                    'class': 'maximizeToggle',
                    'title': 'Maximize'
                }).injectInside(mochaControls);
            }

            //Insert minimize button
            if (this.options.minimizable){
                new Element('div', {
                    'class': 'minimizeToggle',
                    'title': 'Minimize'
                }).injectInside(mochaControls);
            }

        }.bind(this));
    },
    drawAll: function(){
        $$('div.mocha').each(function(el){
            if (el.getStyle('display') != 'none'){
                this.drawWindow(el);
            }
        }.bind(this));
    },
    /*
    
    Method: drawWindow
    
    Arguments: 
        el: the $(window)
        shadows: (boolean) false will draw a window without shadows
        
    Notes: This is where we create the canvas GUI    

    */    
    drawWindow: function(el, shadows) {
        var mochaIframe = el.getElement('.zIndexFix');
        var mochaOverlay = el.getElement('.mochaOverlay');
        var mochaContent = el.getElement('.mochaContent'); 
        var mochaScroller = el.getElement('.mochaScroller');
        var mochaTitlebar = el.getElement('.mochaTitlebar');
        var mochaCanvas = el.getElement('.mochaCanvas');
        var mochaControls = el.getElement('.mochaControls');

        var ctx = mochaCanvas.getContext('2d');

        //Assign a unique id to each window, 
        //that doesn't yet have an id.
        //This is happening at least three times for windows not created onstart.
        //Should rethink the flow on this.
        if(el.id == ""){el.id = 'win' + (++this.windowIDCount);}

        //This should probably be in the insertWindowElements method rather than here
        this.setMochaControlsWidth(el);

        if (el.maximizeToggle == 'restore') {
            mochaContent.setStyle('height', (this.getWindowHeight() - this.options.headerHeight - this.options.footerHeight + 6));
            mochaContent.setStyle('width', this.getWindowWidth());
        }
        
        mochaScroller.setStyle('height', mochaContent.getStyle('height'));
        mochaScroller.setStyle('width', mochaContent.getStyle('width'));
        
        //Resize iframe when window is resized
        if (el.iframe) {
            el.getElement('.mochaIframe').setStyles({
                'height': mochaContent.getStyle('height')
            });
        }
    
        mochaHeight = mochaContent.scrollHeight;
        mochaWidth = mochaContent.scrollWidth + this.scrollWidthOffset;
        mochaHeight += this.options.headerHeight + this.options.footerHeight;
        
        //Firefox returns null and IE returns empty string difference
        // Definitely in the wrong place
        var sTitleBarTitle = mochaTitlebar.getProperty('title');
        
        //Firefox
        //Also in the wrong place
        if(sTitleBarTitle == null) {
            sTitleBarTitle = "";
        }

        mochaOverlay.setStyle('height', mochaHeight);
        el.setStyle('height', mochaHeight);

        if (window.webkit) {
            mochaCanvas.setProperties({
                'width': 4000,
                'height': 2000
            });
        } else {
            mochaCanvas.width = mochaWidth;
            mochaCanvas.height = mochaHeight;
        }

        // Part of the fix for IE6 select z-index bug and FF on Mac scrollbar z-index bug
        if (window.ie6){
            mochaIframe.setStyle('width', mochaWidth);
            mochaIframe.setStyle('height', mochaHeight);
        }

        // Set width        
        mochaOverlay.setStyle('width', mochaWidth); 
        el.setStyle('width', mochaWidth);
        mochaTitlebar.setStyle('width', mochaWidth - 6);
    
        // Draw shapes
        ctx.clearRect(0, 0, this.getWindowWidth(), this.getWindowHeight());
        if (shadows == null || shadows == false && !window.ie){
            this.roundedRect(ctx, 0, 0, mochaWidth, mochaHeight, this.options.cornerRadius, 0, 0, 0, 0.06); //shadow
            this.roundedRect(ctx, 1, 1, mochaWidth - 2, mochaHeight - 2, this.options.cornerRadius, 0, 0, 0, 0.08); //shadow
            this.roundedRect(ctx, 2, 2, mochaWidth - 4, mochaHeight - 4, this.options.cornerRadius, 0, 0, 0, 0.3); //shadow
        }        
        this.roundedRect(ctx,3,2,mochaWidth-6,mochaHeight-6,this.options.cornerRadius,246,246,246,1.0);    //mocha body
        this.topRoundedRect(ctx,3,2,mochaWidth-this.scrollWidthOffset,this.options.headerHeight,this.options.cornerRadius); //mocha header

        if (this.options.closable && this.options.maximizable){
            this.minimizebuttonX = mochaWidth - 53;
        } else if (this.options.closable || this.options.maximizable){
            this.minimizebuttonX = mochaWidth - 34;
        } else {
            this.minimizebuttonX = mochaWidth - 15;
        }

        if (this.options.closable){
            this.maximizebuttonX = mochaWidth - 34;
        }
        else {
            this.maximizebuttonX = mochaWidth - 15;
        }

        this.closebuttonX = mochaWidth - 15;

            if (this.options.closable || el.modal){
                this.closebutton(ctx, this.closebuttonX, 15, 229, 217, 217, 1.0);
            }
            if (this.options.maximizable && !el.modal){
                this.maximizebutton(ctx, this.maximizebuttonX, 15, 217, 229, 217, 1.0);
            }
            if (this.options.minimizable && !el.modal){
                this.minimizebutton(ctx, this.minimizebuttonX, 15, 231, 231, 209, 1.0); //Minimize
            }
            if (this.options.resizable && !el.modal){
            this.triangle(ctx, mochaWidth - 20, mochaHeight - 20, 12, 12, 209, 209, 209, 1.0); //resize handle
            }
            this.triangle(ctx, mochaWidth - 20, mochaHeight - 20, 10, 10, 0, 0, 0, 0); //invisible dummy object. The last element drawn is not rendered consistently while resizing in IE6 and IE7.

    },
    //mocha body
    roundedRect: function(ctx,x,y,width,height,radius,r,g,b,a){
        ctx.fillStyle = 'rgba(' + r +',' + g + ',' + b + ',' + a + ')';
        ctx.beginPath();
        ctx.moveTo(x,y+radius);
        ctx.lineTo(x,y+height-radius);
        ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
        ctx.lineTo(x+width-radius,y+height);
        ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
        ctx.lineTo(x+width,y+radius);
        ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
        ctx.lineTo(x+radius,y);
        ctx.quadraticCurveTo(x,y,x,y+radius);
        ctx.fill(); 
    },
    //mocha header with gradient background
    topRoundedRect: function(ctx,x,y,width,height,radius){

        // Create gradient
        if (window.opera != null ){
            var lingrad = ctx.createLinearGradient(0,0,0,this.options.headerHeight+2);
        }
        else {
            var lingrad = ctx.createLinearGradient(0,0,0,this.options.headerHeight);
        }
        lingrad.addColorStop(0, 'rgba(250,250,250,100)');
        lingrad.addColorStop(1, 'rgba(228,228,228,100)');
        ctx.fillStyle = lingrad;

        // draw header
        ctx.beginPath();
        ctx.moveTo(x,y);
        ctx.lineTo(x,y+height);
        ctx.lineTo(x+width,y+height);
        ctx.lineTo(x+width,y+radius);
        ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
        ctx.lineTo(x+radius,y);
        ctx.quadraticCurveTo(x,y,x,y+radius);
        ctx.fill(); 
    },
    // resize handle
    triangle: function(ctx,x,y,width,height,r,g,b,a){
        ctx.beginPath();
        ctx.moveTo(x+width,y);
        ctx.lineTo(x,y+height);
        ctx.lineTo(x+width,y+height);
        ctx.closePath();
        ctx.fillStyle = 'rgba(' + r +',' + g + ',' + b + ',' + a + ')';
        ctx.fill();
    },
    drawCircle: function(ctx,x,y,diameter,r,g,b,a){
        //circle
        ctx.beginPath();
        ctx.moveTo(x,y);
        ctx.arc(x,y,diameter,0,Math.PI*2,true);
        ctx.fillStyle = 'rgba(' + r +',' + g + ',' + b + ',' + a + ')';
        ctx.fill();
    },
    maximizebutton: function(ctx,x,y,r,g,b,a){ // this could reuse the drawCircle method above
        //circle
        ctx.beginPath();
        ctx.moveTo(x,y);
        ctx.arc(x,y,7,0,Math.PI*2,true);
        ctx.fillStyle = 'rgba(' + r +',' + g + ',' + b + ',' + a + ')';
        ctx.fill();
        //X sign
        ctx.beginPath();
        ctx.moveTo(x,y-4);
        ctx.lineTo(x,y+4);
        ctx.stroke();
        ctx.beginPath();
        ctx.moveTo(x-4,y);
        ctx.lineTo(x+4,y);
        ctx.stroke();
    },
    closebutton: function(ctx,x,y,r,g,b,a){ // this could reuse the drawCircle method above
        //circle
        ctx.beginPath();
        ctx.moveTo(x,y);
        ctx.arc(x,y,7,0,Math.PI*2,true);
        ctx.fillStyle = 'rgba(' + r +',' + g + ',' + b + ',' + a + ')';
        ctx.fill();
        //plus sign
        ctx.beginPath();
        ctx.moveTo(x-3,y-3);
        ctx.lineTo(x+3,y+3);
        ctx.stroke();
        ctx.beginPath();
        ctx.moveTo(x+3,y-3);
        ctx.lineTo(x-3,y+3);
        ctx.stroke();
    },
    minimizebutton: function(ctx,x,y,r,g,b,a){ // this could reuse the drawCircle method above
        //circle
        ctx.beginPath();
        ctx.moveTo(x,y);
        ctx.arc(x,y,7,0,Math.PI*2,true);
        ctx.fillStyle = 'rgba(' + r +',' + g + ',' + b + ',' + a + ')';
        ctx.fill();
        //minus sign
        ctx.beginPath();
        ctx.moveTo(x-4,y);
        ctx.lineTo(x+4,y);
        ctx.stroke();
    },
    attachDraggable: function(elementArray){
        elementArray.each(function(el){
            if (this.options.draggable && !el.modal){
                var mochaHandle = el.getElement('.mochaTitlebar');
                new Drag.Move(el, {
                    handle: mochaHandle,
                    onStart: function(){  
                        this.focusWindow(el);
                        if (el.iframe) {
                            el.getElement('.mochaIframe').setStyles({
                                'display': 'none'
                            });
                        }
                    }.bind(this),
                    onComplete: function(){
                        if (el.iframe) {
                            el.getElement('.mochaIframe').setStyles({
                                'display': 'block'
                            });
                        }
                    }.bind(this)
                });
            }
        }.bind(this));
    },
    attachResizable: function(elementArray){
        elementArray.each(function(el){        
            if (this.options.resizable && !el.modal){
                var mochaContent = el.getElement('.mochaContent');
                var resizeHandle = el.getElement('.resizeHandle');
                mochaContent.makeResizable({
                    handle: resizeHandle,
                    modifiers: {
                        x: 'width',
                        y: 'height'
                    },
                    limit: {
                        x:[this.options.minWidth,this.options.maxWidth],
                        y:[this.options.minHeight,this.options.maxHeight]
                    },
                    onStart: function(){
                        if (el.iframe) {
                            el.getElement('.mochaIframe').setStyles({
                                'display': 'none'
                            });
                        }
                    }.bind(this),
                    onDrag: function(){
                        this.drawWindow(el);
                    }.bind(this),
                    onComplete: function(){
                        if (el.iframe) {
                            el.getElement('.mochaIframe').setStyles({
                                'display': 'block'
                            });
                        }
                    if (el.onResize){ // checks for onResize since windows generated at startup do not have this option            
                        el.onResize();  // later I may just assign $empty functions for onclose and so forth to the original windows
                    }    
                    }.bind(this)
                });
            }
        }.bind(this));
    },
    attachFocus: function(elementArray){
        elementArray.each(function(element) {
            element.addEvent('click', function(event){
                // Only focus when needed, otherwize onFocus() will run on every click
                if ( element.getStyle('zIndex').toInt() < this.indexLevel ) {
                this.focusWindow(element);
                    if (element.onFocus){
                        element.onFocus();
                    }
                }
            }.bind(this));
        }.bind(this));
    },
    attachMinimize: function(elementArray){    
        elementArray.each(function(element) {
            if (this.options.minimizable && !element.modal){
                element.getElement('.minimizeToggle').addEvent('click', function(event){
                    var mochaControls = event.target.parentNode;
                    var el = mochaControls.parentNode;
                    this.minimizeWindow(el);
                    if (el.onMinimize){
                        el.onMinimize();
                    }
                }.bind(this));
            }
        }.bind(this));
    },
    attachMaximize: function(elementArray) {    
        elementArray.each(function(element) {
            if (this.options.maximizable && !element.modal){
                element.getElement('.maximizeToggle').addEvent('click', function(event){
                    var mochaControls = event.target.parentNode;
                    var el = mochaControls.parentNode;
                    if (el.maximizeToggle == 'maximize') {
                        element.getElement('.maximizeToggle').setProperty('title', 'Restore'); //Set title
                        this.maximizeWindow(el);
                        if(el.onMaximize){
                            el.onMaximize();
                        }
                    } else {
                        element.getElement('.maximizeToggle').setProperty('title', 'Maximize'); //Set title
                        this.restoreWindow(el);
                    }
                }.bind(this));
            }
        }.bind(this));
    },
    attachClose: function(elementArray){
        elementArray.each(function(element) {
            if (this.options.closable || element.modal){
                element.getElement('.mochaClose').addEvent('click', function(event){
                    var mochaControls = event.target.parentNode;
                    var el = mochaControls.parentNode;
                    this.closeWindow(element);
                }.bind(this));
            }
        }.bind(this));
    },
    setMochaControlsWidth: function(el){
        this.mochaControlsWidth = 0;
        if (this.options.minimizable && !el.modal){
            this.mochaControlsWidth += 19;
            if (this.options.maximizable){
                el.getElement('.maximizeToggle').setStyle('margin-left', 5);
            }
        }
        if (this.options.maximizable && !el.modal){
            this.mochaControlsWidth += 19;

        }        
        if (this.options.closable || el.modal){
            this.mochaControlsWidth += 19;
            if (this.options.maximizable || this.options.minimizable){
                el.getElement('.mochaClose').setStyle('margin-left', 5);
            }
        }
        el.getElement('.mochaControls').setStyle('width', this.mochaControlsWidth - 5);
    },
    maximizeWindow: function(el) {
        var mochaContent = el.getElement('.mochaContent');    

        $(el).oldTop = $(el).getStyle('top');
        $(el).oldLeft = $(el).getStyle('left');
        mochaContent.oldWidth = mochaContent.getStyle('width');
        mochaContent.oldHeight = mochaContent.getStyle('height');

        var mochaMorph = new Fx.Morph(el, { 
            'duration': 200,
            'onComplete': function(el){
                mochaContent.setStyle('height', (this.getWindowWidth() - this.options.headerHeight - this.options.footerHeight + 6));
                mochaContent.setStyle('width', this.getWindowHeight());
                this.drawWindow(el);
            }.bind(this)
        });
        mochaMorph.start({
            'top': -3, // takes shadow width into account
            'left': -3 // takes shadow width into account
        });
        $(el).maximizeToggle = 'restore';
    },
    restoreWindow: function(el) {
        var mochaContent = el.getElement('.mochaContent');
        mochaContent.setStyle('width', mochaContent.oldWidth);
        mochaContent.setStyle('height', mochaContent.oldHeight);
        $(el).maximizeToggle = 'maximize';
        this.drawWindow(el);
        var mochaMorph = new Fx.Morph(el, { 
            'duration': 150
        });
        mochaMorph.start({
            'top': $(el).oldTop,
            'left': $(el).oldLeft
        });
    },
    minimizeWindow: function(el) {
        var mochaContent = el.getElement('.mochaContent');
        this.addToMinimizeDock(el)
    },
    addToMinimizeDock: function (el) {
        //get handle to window
        var mochaControls = el.getElement('.mochaControls');
        var objWin  = mochaControls.parentNode
    
        //capture title bar text
        var sTitleBarHTML = el.getElement('.mochaTitlebar').innerHTML;
        var sTitleBarText = el.getElement('.mochaTitle').innerHTML; //must use mochaTitle and innerhtml because firefox doesn't support innerText on mochaTitlebar element
            
        //check for long title
        var sLongTitle = "...";
        if(sTitleBarText.length <= 13){sLongTitle = ""};
        
        //hide window
        objWin.setStyle('display','none');
        
        var btnEl = new Element('button', {
            'winAssociated': objWin.id,
            'class': 'mochaDockButton',
            'title': sTitleBarText,
            'id': 'DockButton'+objWin.id
        }).setHTML((sTitleBarText.substring(0,13) + sLongTitle)).injectInside($('mochaDock'));
                
        btnEl.addEvent('click', function(event){
            //click event will restore the window
            var objWin = $(event.target.getProperty('winAssociated'));
            objWin.setStyle('display','block');

            this.focusWindow(objWin);

            //remove this btn element 
            event.target.dispose();
        }.bind(this));
        
    },    
    initDock: function (el){
        document.addEvent('mousemove', function (objDoc){
            if(objDoc.event.clientY > (document.body.clientHeight -10) && $('mochaDock').getProperty('autoHide')) { 
                $('mochaDock').setStyle('display','block');
            }
        });        

        //Insert canvas
        var canvas = new Element('canvas', {
            'class': 'mochaCanvas',
            'id': 'canv1'
        }).injectInside(el);
        
        canvas.setStyles({
            position: 'absolute',
            top: '4px',
            left: '2px',
            zIndex: 2
        });

        canvas.width=15;
        canvas.height=18;

        // Dynamically initialize canvas using excanvas. This is only required by IE
        if (window.ie) {
            G_vmlCanvasManager.initElement(canvas);
        }
        
        //Position top or bottom selector
        $('mochaDockPlacement').setProperty('title','Position Dock Top');
            
        //Auto Hide on/off 
        $('mochaDockAutoHide').setProperty('title','Turn Auto Hide On');
        
        //attach event
        $('mochaDockPlacement').addEvent('click', function(event){
            var objDock=event.target.parentNode;
            var ctx = el.getElement('.mochaCanvas').getContext('2d');
            
            //switch to top position
            if (objDock.getStyle('position') != 'absolute'){
                objDock.setStyles({
                    'position': 'absolute',
                    'bottom': 0,
                    'border-top': '1px solid #bbb',
                    'border-bottom': '1px solid #fff'
                })
                $('mochaDesktopHeader').setStyle('height', 54);
                objDock.setProperty('dockPosition','Bottom');
                this.drawCircle(ctx, 5, 4, 3, 241, 102, 116, 1.0); 

                if ($('mochaDock').getProperty('autoHide') != 'true' || $('mochaDock').getProperty('autoHideDisabled') != 'true') {
                    this.drawCircle(ctx, 5 , 14, 3, 241, 102, 116, 1.0); 
                }
                } else {
                    objDock.setStyles({
                        'position': 'relative',
                        'bottom': null,
                        'border-top': '1px solid #fff',
                        'border-bottom': '1px solid #bbb'
                    })
                    $('mochaDesktopHeader').setStyle('height', 74);
                    objDock.setProperty('dockPosition','Top');    
                    this.drawCircle(ctx, 5, 4, 3, 0, 255, 0, 1.0);
                    this.drawCircle(ctx, 5, 14, 3, 212, 208, 200, 1.0);
                }

            //diasble/enable autohide and grey/orange/green out button
            if($('mochaDock').getProperty('autoHide') == 'true' || $('mochaDock').getProperty('autoHideDisabled') == 'true')
            {
                if (objDock.getProperty('dockPosition') == 'Bottom') {
                    $('mochaDock').setProperty('autoHideDisabled', 'false');
                    $('mochaDock').setProperty('autoHide', 'true')
                    this.drawCircle(ctx, 5, 14, 3, 0, 255, 0, 1.0);
                }
                else{
                    $('mochaDock').setProperty('autoHideDisabled', 'true');
                    $('mochaDock').setProperty('autoHide', 'false')
                }

            }

            //update title tag
            $('mochaDockPlacement').setProperty('title',(objDock.getStyle('position') == 'relative')?'Position Dock Bottom':'Position Dock Top');
        }.bind(this));

        //attach event Auto Hide 
        $('mochaDockAutoHide').addEvent('click', function(event){
            var objDock=event.target.parentNode;
            var ctx = el.getElement('.mochaCanvas').getContext('2d');

            //disable auto hide when Dock bar on top
            if(objDock.getProperty('dockPosition')=='Top'){return false;}
        
            //update title tag
            if(objDock.getProperty('autoHide') == 'true'){
                $('mochaDockAutoHide').setProperty('title', 'Turn Auto Hide On');
                this.drawCircle(ctx, 5 , 14, 3, 241, 102, 116, 1.0);
                objDock.setProperty('autoHide','false');
                objDock.setStyle('display','block');
            }
            else{
                $('mochaDockAutoHide').setProperty('title','Turn Auto Hide Off');
                this.drawCircle(ctx, 5 , 14, 3, 0, 255, 0, 1.0); 
                objDock.setProperty('autoHide','true');
                objDock.setStyle('display','none');
            }
        }.bind(this));        

        $('mochaDock').addEvent('mouseleave', function(objDock)
        {    if(this.getProperty('autoHide') == 'true'){ //mozilla doesn't understand true evaluations, so made the property a string???
                if((objDock.event.clientY < (document.body.clientHeight - this.getStyle('height').toInt()))){
                    this.setStyle('display', 'none');
                }
            }
        });
        
    },
    drawDock: function (el){
        var ctx = el.getElement('.mochaCanvas').getContext('2d');
        this.drawCircle(ctx, 5 , 4, 3, 241, 102, 116, 1.0); 
        this.drawCircle(ctx, 5 , 14, 3, 241, 102, 116, 1.0);
    },    
    /*
    
    Method: arrangeCascade
    
    */    
    arrangeCascade: function(){
        var x = this.options.desktopLeftOffset
        var y = this.options.desktopTopOffset;
        $$('div.mocha').each(function(el){
            if (el.getStyle('display') != 'none'){
                this.focusWindow(el);
                x += this.options.mochaLeftOffset;
                y += this.options.mochaTopOffset;
                var mochaMorph = new Fx.Morph(el, {
                    'duration': 550
                });
                mochaMorph.start({
                    'top': y,
                    'left': x
                });
            }
        }.bind(this));
    }
});
MochaDesktop.implement(new Options);

/* -----------------------------------------------------------------

    MOCHA SCREENS
    Notes: This class can be removed if you are not creating multiple screens/workspaces.

   ----------------------------------------------------------------- */

var MochaScreens = new Class({
    options: {
        defaultScreen: 0 // Default screen    
    },
    initialize: function(options){
        this.setOptions(options);
        this.setScreen(this.options.defaultScreen);
    },
    setScreen: function(index) {
        if ( !$('mochaScreens') )
            return;
        $$('#mochaScreens div.screen').each(function(el,i) {
            el.setStyle('display', i == index ? 'block' : 'none');
        });
    }
});
MochaScreens.implement(new Options);

/* -----------------------------------------------------------------

    MOCHA WINDOW FROM FORM
    Notes: This class can be removed if you are not creating new windows dynamically from a form.

   ----------------------------------------------------------------- */

var MochaWindowForm = new Class({
    options: {
        id: null,
        title: 'New Window',
        loadMethod: 'html', // html, xhr, or iframe
        content: '', // used if loadMethod is set to 'html'
        contentURL: 'pages/lipsum.html', // used if loadMethod is set to 'xhr' or 'iframe'
        modal: false,
        width: 300,
        height: 125,
        scrollbars: true, // true sets the overflow to auto and false sets it to hidden
        x: null, // if x or y is null or modal is false the new window is centered in the browser window
        y: null,
        paddingVertical: 10,
        paddingHorizontal: 12
    },
    initialize: function(options){
        this.setOptions(options);
        this.options.title = $('mochaNewWindowHeaderTitle').value;
        if ($('htmlLoadMethod').checked){
            this.options.loadMethod = 'html';
        }
        if ($('xhrLoadMethod').checked){
            this.options.loadMethod = 'xhr';
        }
        if ($('iframeLoadMethod').checked){
            this.options.loadMethod = 'iframe';
        }
        this.options.content = $('mochaNewWindowContent').value;
        if ($('mochaNewWindowContentURL').value){
            this.options.contentURL = $('mochaNewWindowContentURL').value;
        }        
        if ($('mochaNewWindowModal').checked) {
            this.options.modal = true;
        }
        this.options.width = $('mochaNewWindowWidth').value.toInt();
        this.options.height = $('mochaNewWindowHeight').value.toInt();    
        this.options.x = $('mochaNewWindowX').value.toInt();
        this.options.y = $('mochaNewWindowY').value.toInt();
        this.options.paddingVertical = $('mochaNewWindowPaddingVertical').value.toInt();
        this.options.paddingHorizontal = $('mochaNewWindowPaddingHorizontal').value.toInt();
        document.mochaDesktop.newWindow(this.options);        
    }
});
MochaWindowForm.implement(new Options);

/* -----------------------------------------------------------------

    ATTACH MOCHA LINK EVENTS
    Notes: Here is where you define your windows and the events that open them.
    If you are not using links to run Mocha methods you can remove this function.
    
    If you need to add link events to links within windows you are creating, do
    it in the onContentLoaded function of the new window.

   ----------------------------------------------------------------- */

function attachMochaLinkEvents(){
    
    if ($('ajaxpageLink')){ // Associated HTML: <a id="xhrpageLink" href="pages/lipsum.html">xhr Page</a>
        $('ajaxpageLink').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaDesktop.newWindow({
                id: 'ajaxpage',
                title: 'Content Loaded with an XMLHttpRequest',
                loadMethod: 'xhr',
                contentURL: 'pages/lipsum.html',
                width: 340,
                height: 150
            });
        });
    }
    
    if ($('mootoolsLink')){
        $('mootoolsLink').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaDesktop.newWindow({
                id: 'mootools',
                title: 'Mootools Forums in an Iframe',
                loadMethod: 'iframe',
                contentURL: 'http://forum.mootools.net/',
                width: 650,
                height: 400,
                scrollbars: false,
                paddingVertical: 0,
                paddingHorizontal: 0
            });
        });
    }

    if ($('spirographLink')){
        $('spirographLink').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaDesktop.newWindow({
                id: 'spirograph',
                title: 'Canvas Spirograph in an Iframe',
                loadMethod: 'iframe',
                contentURL: 'pages/spirograph.html',
                width: 340,
                height: 340,
                scrollbars: false,
                paddingVertical: 0,
                paddingHorizontal: 0,
                bgColor: '#c30'
            });
        });
    }
    
    if ($('cornerRadiusLink')){
        $('cornerRadiusLink').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaDesktop.newWindow({
                id: 'cornerRadius',
                title: 'Corner Radius Slider',
                loadMethod: 'xhr',
                contentURL: 'pages/corner_radius.html',
                onContentLoaded: function(){
                    addSlider();
                },
                width: 300,
                height: 105,
                x: 20,
                y: 60
            });
        });
    }    

    if ($('eventsLink')){
        $('eventsLink').addEvent('click', function(e){
            new Event(e).stop();
            document.mochaDesktop.newWindow({
                id: 'events',
                title: 'Window Trigger Options',
                loadMethod: 'xhr',
                contentURL: 'pages/events.html',
                onContentLoaded: function(){
                    alert('The window\'s content was loaded.');
                },            
                onClose: function(){
                    alert('The window is closing.');
                },
                onMinimize: function(){
                    alert('The window was minimized.');
                },
                onMaximize: function(){
                    alert('The window was maximized.');
                },
                onFocus: function(){
                    alert('The window was focused.');
                },
                onResize: function(){
                    alert('The window was resized.');
                },
                width: 340,
                height: 250
            });
        });
    }    
    
    if ($('builderLink')){
        $('builderLink').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaDesktop.newWindow({
                id: 'windowbuilder',
                title: 'Window Builder',
                loadMethod: 'xhr',
                contentURL: 'pages/builder.html',
                onContentLoaded: function(){
                    $('mochaNewWindowSubmit').addEvent('click', function(e){
                        new Event(e).stop();
                        new MochaWindowForm();
                    });
                },
                width: 370,
                height: 400,
                x: 20,
                y: 60
            });
        });
    }
    
    if ($('faqLink')){
        $('faqLink').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaDesktop.newWindow({
                id: 'faq',
                title: 'FAQ',
                loadMethod: 'xhr',
                contentURL: 'pages/faq.html',
                width: 320,
                height: 320,
                x: 20,
                y: 60
            });
        });
    }
    
    if ($('docsLink')){
        $('docsLink').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaDesktop.newWindow({
                id: 'docs',
                title: 'Documentation',
                loadMethod: 'xhr',
                contentURL: 'pages/docs.html',
                width: 600,
                height: 350,
                x: 20,
                y: 60
            });
        });
    }
    
    if ($('overviewLink')){
        $('overviewLink').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaDesktop.newWindow({
                id: 'overview',
                title: 'Overview',
                loadMethod: 'xhr',
                contentURL: 'pages/overview.html',
                width: 300,
                height: 255,
                x: 20,
                y: 60
            });
        });
    }

    if ($('resourcesLink')){
        $('resourcesLink').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaDesktop.newWindow({
                id: 'resources',
                title: 'Resources',
                loadMethod: 'xhr',
                contentURL: 'pages/resources.html',
                width: 300,
                height: 275,
                x: 20,
                y: 60
            });
        });
    }
    
    if ($('workspace01Link')){
        $('workspace01Link').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaScreens.setScreen(0)
        });
    }
    
    if ($('workspace02Link')){
        $('workspace02Link').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaScreens.setScreen(1)
        });
    }
    
    if ($('workspace03Link')){
        $('workspace03Link').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaScreens.setScreen(2)
        });
    }    
    
    if ($('helpLink')){
        $('helpLink').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaDesktop.newWindow({
                id: 'help',
                title: 'Support',
                loadMethod: 'xhr',
                contentURL: 'pages/support.html',
                width: 320,
                height: 320,
                x: 20,
                y: 60
            });
        });
    }
    
    if ($('contributeLink')){
        $('contributeLink').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaDesktop.newWindow({
                id: 'contribute',
                title: 'Contribute',
                loadMethod: 'xhr',
                contentURL: 'pages/contribute.html',
                width: 320,
                height: 320,
                x: 20,
                y: 60
            });
        });
    }    
    
    if ($('aboutLink')){
        $('aboutLink').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaDesktop.newWindow({
                id: 'about',
                title: 'Mocha UI Version 0.7',
                loadMethod: 'xhr',
                contentURL: 'pages/about.html',
                modal: true,
                width: 300,
                height: 150
            });
        });
    }
    
    if ($('cascadeLink')){
        $('cascadeLink').addEvent('click', function(e){    
            new Event(e).stop();
            document.mochaDesktop.arrangeCascade();
        });
    }
    
    // Deactivate menu header links
    $$('a.returnFalse').each(function(el){
        el.addEvent('click', function(e){
            new Event(e).stop();
        });
    });
    
}

/* -----------------------------------------------------------------

    Corner Radius Slider
    Notes: Remove this function and it's reference in onload if you are not
    using the example corner radius slider

   ----------------------------------------------------------------- */


function addSlider(){
    if ($('sliderarea')) {
        mochaSlide = new Slider($('sliderarea'), $('sliderknob'), {
            steps: 20,
            offset: 5,
            onChange: function(pos){
                $('updatevalue').setHTML(pos);
                document.mochaDesktop.options.cornerRadius = pos;
                document.mochaDesktop.drawAll();
                document.mochaDesktop.indexLevel++; 
            }
        }).set(document.mochaDesktop.options.cornerRadius);
    }
}

/* -----------------------------------------------------------------

    Initialize Everything onLoad

   ----------------------------------------------------------------- */

window.addEvent('load', function(){
        document.mochaScreens = new MochaScreens();
        document.mochaDesktop = new MochaDesktop();
        attachMochaLinkEvents();
        addSlider(); // remove this if you remove the example corner radius slider
});
/* End mocha.js 2010-05-25 */
/* moo.dropdownmenu.js 2010-05-25 */
Element.extend(
{
    hide: function() 
    {
        return this.setStyle('display', 'none');
    },
    
    show: function() 
    {
        return this.setStyle('display', '');
    }
});

/*    
Script: moo.dropdownmenu.js
    Fx.DropdownMenu.
        
Dependencies:
    <Moo.js>, <Function.js>, <Array.js>, <String.js>, <Element.js>

Author:
    André Fiedler, <http://visualdrugs.net>

License:
    MIT-style license.

Class: Fx.PopMenu
    The DropdownMenu function creates a group of elements that have the behaviour of an dropdown menu.
    
Arguments:
    element - a list-element the effect will be applied to.
    
Example:
    (start code)
    <ul id="dropdownMenu">
        <li>
            <a href="#">Menu 1</a>
            <ul>
                <li><a href="#">SubMenu 1</a></li>
                <li><a href="#">SubMenu 2</a></li>
                <li><a href="#">SubMenu 3</a></li>    
            </ul>
        </li>
        <li><a href="#">Menu 2</a></li>
        <li><a href="#">Menu 3</a></li>    
    </ul>
    
    <script type="text/javascript">
    
        Window.onDomReady(function() {new DropdownMenu($('dropdownMenu'))});
        
    </script>
    (end)
*/

var DropdownMenu = new Class({    
    initialize: function(element)
    {
        $A($(element).childNodes).each(function(el)
        {
            if(el.nodeName.toLowerCase() == 'li')
            {
                $A($(el).childNodes).each(function(el2)
                {
                    if(el2.nodeName.toLowerCase() == 'ul')
                    {
                        $(el2).hide();
                        
                        el.addEvent('mouseover', function()
                        {
                            el2.show();
                            return false;
                        });

                        el.addEvent('mouseout', function()
                        {
                            el2.hide();
                        });
                        new DropdownMenu(el2);
                    }
                });
            }
        });
        return this;
    }
});
/* end moo.dropdownmenu.js */

