
//____________________________________________________________GLOBAL___________________________________________________________________________________________//



window.addEvent('domready', function(){
debug('** DEBUG MODE **');

});
	
function debug(log){
	
        if(debugMode){
                if(window.console){
			window.console.log(log);			 
                }else{
			
			if(!$('debug_console')){
				//create debug console
				var dbgcnsl = new Element('div', {'id' : 'debug_console' });
				dbgcnsl.setStyles({'color': '#444444', 'font-size': '12px', 'border': 'dashed 2px #555555', 'padding': '10px', 'background-color':'#FFF', 'opacity': '0.5', 'position':'fixed',  'left':'10px', 'top':'250px', 'z-index':'30000'});
				dbgcnsl.injectInside(document.body);
			}
			debug_console = $('debug_console');
			//debug_console.setStyle('visibility', 'visible');
			debug_console.innerHTML += log+'<br/>';
                }
        }
}

function doaction(action){
        //strip actions;
        var ref = location.href;
        var id = ref.indexOf('?');
        if(id > -1) ref = ref.substr(0, id);
        location.href = ref+'?'+action ;
}
//____________________________________________________________NAVIGATION___________________________________________________________________________________________//
function takeAhike(who, whereTo){  //make any element link to anywhere
        (whereTo == undefined)? whereTo="": whereTo=whereTo;
        $(who).addEvent('click', function(){
		location.href = $('public_dir').getProperty('href')+whereTo;
		})
}

//____________________________________________________________PRELOADING___________________________________________________________________________________________//
var p;
function goldenRetriever(rubberToy, imagesRoot){  //preload an image or an array of images
        //NEEDS Preloader.js!
        debug("[xprimiLib/goldenRetriever] throw me a toy!");
        var public_dir_abs=imagesRoot;
        p=new Preloader;
        if(isArray(rubberToy)){
                for(var m=0; m < rubberToy.length; m++){
                        p.addToQueue(public_dir_abs+rubberToy[m]);
                        debug("[xprimiLib/goldenRetriever] fetching toy #"+m+': '+public_dir_abs+rubberToy[m]);
                }
        }else{
                p.addToQueue(public_dir_abs+rubberToy);
                debug("[xprimiLib/goldenRetriever] fetching "+public_dir_abs+rubberToy);
        }
        debug("[xprimiLib/goldenRetriever] done playing. need food!");
        debug("[END]");
}

//____________________________________________________________ELEMENTS___________________________________________________________________________________________//
function isArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}

//____________________________________________________________FORMSTUFF___________________________________________________________________________________________//
function isYear(year){   // use this to validate a year; accepts '60, 60, 1960,  < today, > today-100
                            //returns:'ok', 'NaN', '2short', '2long', '2high', '2low'
                            //use returnValue[0]=='ok' to validate result, returnValue[1] can be used as a 4-digit valid year
        var returnValue = new Array; 
        var errMsg = new Array('ok', 'NaN', '2short', '2long', '2high', '2low');
        var date = new Date();
        var thisyear = date.getFullYear();
        
        //make it 4 digits long..
        if(year.charAt(0)=="'" || year.charAt(0)=='"'){
                year = year.substring(1);
        }
        
        if(year.length == 2){
                var thisyearStr = ''+thisyear;
                var tunedThisYear = thisyearStr.substring(2);
                
                if(year.toInt()>tunedThisYear.toInt()){
                        year='19'+year;
                }else{
                        year='20'+year;
                }
        }
        returnValue[1] = year;
        
        //evaluate
        if(isNaN(year)){
                returnValue[0] = errMsg[1];
        }else if( !(year.charAt(3)) ){
                returnValue[0] = errMsg[2];
        }else if(year.charAt(4)){
                returnValue[0] = errMsg[3];
        }else if(year.toInt()>=thisyear){
                returnValue[0] = errMsg[4];        
        }else if(year.toInt()<(thisyear-105)){
                returnValue[0] = errMsg[5];
        }else{  returnValue[0] = errMsg[0];
        }
        debug('xprimiLib/isYear() -> year is: '+returnValue[1]+', which is '+returnValue[0]);
        return returnValue;
}


function submitVia(element, form){
        $(element).addEvent('click', function(e){
                document.forms[form].submit();
                });
        debug($(element).id+' has been set up to submit '+form);
}


//____________________________________________________________APPEARANCE___________________________________________________________________________________________//
/*function show(el) {
	
	var o = document.getElementById(el);
	o.style.display = 'block'; 
	
} JavaScript Document

function hide(el) {
	
	var o = document.getElementById(el);
	o.style.display = 'none'; 
}

function toggle(el) {
	var o = document.getElementById(el);

	if(o.style.display == 'none') o.style.display = 'block';
	else o.style.display = 'none';
}

*/



/*____________________________________________________________GET & other parameters________________________________________________*/
 /* 
 Function: $get 
     This function provides access to the "get" variable scope + the element anchor 
  
 Version: 1.3 
  
 Arguments: 
     key - string; optional; the parameter key to search for in the url's query string (can also be "#" for the element anchor) 
     url - url; optional; the url to check for "key" in, location.href is default 
  
 Example: 
     >$get("foo","http://example.com/?foo=bar"); //returns "bar" 
     >$get("foo"); //returns the value of the "foo" variable if it's present in the current url(location.href) 
     >$get("#","http://example.com/#moo"); //returns "moo" 
     >$get("#"); //returns the element anchor if any, but from the current url (location.href) 
     >$get(,"http://example.com/?foo=bar&bar=foo"); //returns {foo:'bar',bar:'foo'} 
     >$get(,"http://example.com/?foo=bar&bar=foo#moo"); //returns {foo:'bar',bar:'foo',hash:'moo'} 
     >$get(); //returns same as above, but from the current url (location.href) 
     >$get("?"); //returns the query string (without ? and element anchor) from the current url (location.href) 
  
 Returns: 
     Returns the value of the variable form the provided key, or an object with the current GET variables plus the element anchor (if any) 
     Returns "" if the variable is not present in the given query string 
  
 Credits: 
         Regex from [url=http://www.netlobo.com/url_query_string_javascript.html]http://www.netlobo.com/url_query_string_javascript.html[/url] 
         Function by Jens Anders Bakke, webfreak.no 
 */  
function $get(key,url){  
     if(arguments.length < 2) url =location.href;  
     if(arguments.length > 0 && key != ""){  
         if(key == "#"){  
             var regex = new RegExp("[#]([^$]*)");  
         } else if(key == "?"){  
             var regex = new RegExp("[?]([^#$]*)");  
         } else {  
             var regex = new RegExp("[?&]"+key+"=([^&#]*)");  
         }  
         var results = regex.exec(url);  
         return (results == null )? "" : results[1];  
     } else {  
         url = url.split("?");  
         var results = {};  
             if(url.length > 1){  
                 url = url[1].split("#");  
                 if(url.length > 1) results["hash"] = url[1];  
                 url[0].split("&").each(function(item,index){  
                     item = item.split("=");  
                     results[item[0]] = item[1];  
                 });  
             }  
         return results;  
     }  
}



/** SEE: http://www.dillerdesign.com/experiment/DD_belatedPNG/
 *
 * 
* DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML <IMG/>.
* Author: Drew Diller
* Email: drew.diller@gmail.com
* URL: http://www.dillerdesign.com/experiment/DD_belatedPNG/
* Version: 0.0.8a
* Licensed under the MIT License: http://dillerdesign.com/experiment/DD_belatedPNG/#license
*
* Example usage:
* DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector
* DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement
**/
//var DD_belatedPNG={ns:"DD_belatedPNG",imgSize:{},delay:10,nodesFixed:0,createVmlNameSpace:function(){if(document.namespaces&&!document.namespaces[this.ns]){document.namespaces.add(this.ns,"urn:schemas-microsoft-com:vml")}},createVmlStyleSheet:function(){var b,a;b=document.createElement("style");b.setAttribute("media","screen");document.documentElement.firstChild.insertBefore(b,document.documentElement.firstChild.firstChild);if(b.styleSheet){b=b.styleSheet;b.addRule(this.ns+"\\:*","{behavior:url(#default#VML)}");b.addRule(this.ns+"\\:shape","position:absolute;");b.addRule("img."+this.ns+"_sizeFinder","behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;");this.screenStyleSheet=b;a=document.createElement("style");a.setAttribute("media","print");document.documentElement.firstChild.insertBefore(a,document.documentElement.firstChild.firstChild);a=a.styleSheet;a.addRule(this.ns+"\\:*","{display: none !important;}");a.addRule("img."+this.ns+"_sizeFinder","{display: none !important;}")}},readPropertyChange:function(){var b,c,a;b=event.srcElement;if(!b.vmlInitiated){return}if(event.propertyName.search("background")!=-1||event.propertyName.search("border")!=-1){DD_belatedPNG.applyVML(b)}if(event.propertyName=="style.display"){c=(b.currentStyle.display=="none")?"none":"block";for(a in b.vml){if(b.vml.hasOwnProperty(a)){b.vml[a].shape.style.display=c}}}if(event.propertyName.search("filter")!=-1){DD_belatedPNG.vmlOpacity(b)}},vmlOpacity:function(b){if(b.currentStyle.filter.search("lpha")!=-1){var a=b.currentStyle.filter;a=parseInt(a.substring(a.lastIndexOf("=")+1,a.lastIndexOf(")")),10)/100;b.vml.color.shape.style.filter=b.currentStyle.filter;b.vml.image.fill.opacity=a}},handlePseudoHover:function(a){setTimeout(function(){DD_belatedPNG.applyVML(a)},1)},fix:function(a){if(this.screenStyleSheet){var c,b;c=a.split(",");for(b=0;b<c.length;b++){this.screenStyleSheet.addRule(c[b],"behavior:expression(DD_belatedPNG.fixPng(this))")}}},applyVML:function(a){a.runtimeStyle.cssText="";this.vmlFill(a);this.vmlOffsets(a);this.vmlOpacity(a);if(a.isImg){this.copyImageBorders(a)}},attachHandlers:function(i){var d,c,g,e,b,f;d=this;c={resize:"vmlOffsets",move:"vmlOffsets"};if(i.nodeName=="A"){e={mouseleave:"handlePseudoHover",mouseenter:"handlePseudoHover",focus:"handlePseudoHover",blur:"handlePseudoHover"};for(b in e){if(e.hasOwnProperty(b)){c[b]=e[b]}}}for(f in c){if(c.hasOwnProperty(f)){g=function(){d[c[f]](i)};i.attachEvent("on"+f,g)}}i.attachEvent("onpropertychange",this.readPropertyChange)},giveLayout:function(a){a.style.zoom=1;if(a.currentStyle.position=="static"){a.style.position="relative"}},copyImageBorders:function(b){var c,a;c={borderStyle:true,borderWidth:true,borderColor:true};for(a in c){if(c.hasOwnProperty(a)){b.vml.color.shape.style[a]=b.currentStyle[a]}}},vmlFill:function(e){if(!e.currentStyle){return}else{var d,f,g,b,a,c;d=e.currentStyle}for(b in e.vml){if(e.vml.hasOwnProperty(b)){e.vml[b].shape.style.zIndex=d.zIndex}}e.runtimeStyle.backgroundColor="";e.runtimeStyle.backgroundImage="";f=true;if(d.backgroundImage!="none"||e.isImg){if(!e.isImg){e.vmlBg=d.backgroundImage;e.vmlBg=e.vmlBg.substr(5,e.vmlBg.lastIndexOf('")')-5)}else{e.vmlBg=e.src}g=this;if(!g.imgSize[e.vmlBg]){a=document.createElement("img");g.imgSize[e.vmlBg]=a;a.className=g.ns+"_sizeFinder";a.runtimeStyle.cssText="behavior:none; position:absolute; left:-10000px; top:-10000px; border:none; margin:0; padding:0;";c=function(){this.width=this.offsetWidth;this.height=this.offsetHeight;g.vmlOffsets(e)};a.attachEvent("onload",c);a.src=e.vmlBg;a.removeAttribute("width");a.removeAttribute("height");document.body.insertBefore(a,document.body.firstChild)}e.vml.image.fill.src=e.vmlBg;f=false}e.vml.image.fill.on=!f;e.vml.image.fill.color="none";e.vml.color.shape.style.backgroundColor=d.backgroundColor;e.runtimeStyle.backgroundImage="none";e.runtimeStyle.backgroundColor="transparent"},vmlOffsets:function(d){var h,n,a,e,g,m,f,l,j,i,k;h=d.currentStyle;n={W:d.clientWidth+1,H:d.clientHeight+1,w:this.imgSize[d.vmlBg].width,h:this.imgSize[d.vmlBg].height,L:d.offsetLeft,T:d.offsetTop,bLW:d.clientLeft,bTW:d.clientTop};a=(n.L+n.bLW==1)?1:0;e=function(b,p,q,c,s,u){b.coordsize=c+","+s;b.coordorigin=u+","+u;b.path="m0,0l"+c+",0l"+c+","+s+"l0,"+s+" xe";b.style.width=c+"px";b.style.height=s+"px";b.style.left=p+"px";b.style.top=q+"px"};e(d.vml.color.shape,(n.L+(d.isImg?0:n.bLW)),(n.T+(d.isImg?0:n.bTW)),(n.W-1),(n.H-1),0);e(d.vml.image.shape,(n.L+n.bLW),(n.T+n.bTW),(n.W),(n.H),1);g={X:0,Y:0};if(d.isImg){g.X=parseInt(h.paddingLeft,10)+1;g.Y=parseInt(h.paddingTop,10)+1}else{for(j in g){if(g.hasOwnProperty(j)){this.figurePercentage(g,n,j,h["backgroundPosition"+j])}}}d.vml.image.fill.position=(g.X/n.W)+","+(g.Y/n.H);m=h.backgroundRepeat;f={T:1,R:n.W+a,B:n.H,L:1+a};l={X:{b1:"L",b2:"R",d:"W"},Y:{b1:"T",b2:"B",d:"H"}};if(m!="repeat"||d.isImg){i={T:(g.Y),R:(g.X+n.w),B:(g.Y+n.h),L:(g.X)};if(m.search("repeat-")!=-1){k=m.split("repeat-")[1].toUpperCase();i[l[k].b1]=1;i[l[k].b2]=n[l[k].d]}if(i.B>n.H){i.B=n.H}d.vml.image.shape.style.clip="rect("+i.T+"px "+(i.R+a)+"px "+i.B+"px "+(i.L+a)+"px)"}else{d.vml.image.shape.style.clip="rect("+f.T+"px "+f.R+"px "+f.B+"px "+f.L+"px)"}},figurePercentage:function(d,c,f,a){var b,e;e=true;b=(f=="X");switch(a){case"left":case"top":d[f]=0;break;case"center":d[f]=0.5;break;case"right":case"bottom":d[f]=1;break;default:if(a.search("%")!=-1){d[f]=parseInt(a,10)/100}else{e=false}}d[f]=Math.ceil(e?((c[b?"W":"H"]*d[f])-(c[b?"w":"h"]*d[f])):parseInt(a,10));if(d[f]%2===0){d[f]++}return d[f]},fixPng:function(c){c.style.behavior="none";var g,b,f,a,d;if(c.nodeName=="BODY"||c.nodeName=="TD"||c.nodeName=="TR"){return}c.isImg=false;if(c.nodeName=="IMG"){if(c.src.toLowerCase().search(/\.png$/)!=-1){c.isImg=true;c.style.visibility="hidden"}else{return}}else{if(c.currentStyle.backgroundImage.toLowerCase().search(".png")==-1){return}}g=DD_belatedPNG;c.vml={color:{},image:{}};b={shape:{},fill:{}};for(a in c.vml){if(c.vml.hasOwnProperty(a)){for(d in b){if(b.hasOwnProperty(d)){f=g.ns+":"+d;c.vml[a][d]=document.createElement(f)}}c.vml[a].shape.stroked=false;c.vml[a].shape.appendChild(c.vml[a].fill);c.parentNode.insertBefore(c.vml[a].shape,c)}}c.vml.image.shape.fillcolor="none";c.vml.image.fill.type="tile";c.vml.color.fill.on=false;g.attachHandlers(c);g.giveLayout(c);g.giveLayout(c.offsetParent);c.vmlInitiated=true;g.applyVML(c)}};try{document.execCommand("BackgroundImageCache",false,true)}catch(r){}DD_belatedPNG.createVmlNameSpace();DD_belatedPNG.createVmlStyleSheet();