/**
 * uCode / Javascript
 * rev. 0 (1969-12-31)
 *
 * Copyright (c) 2005-2007 Pause Productions (http://www.pause.ca/)
 * This code may not be distributed or reproduced without a license.
 *
 * Packaged on 2010-03-02
 * 
 * DO NOT EDIT THIS FILE! If you find bugs in uCode, or wish to add 
 * functionality, edit the originals and repackage them.
 * 
 * The person who customized this uCode package selected:
 * - uColumns.class.js rev. UNKNOWN (dated UNKNOWN)
 * - uCommon.js rev. UNKNOWN (dated UNKNOWN)
 * - uShow.class.js rev. UNKNOWN (dated UNKNOWN)
 * - uValidate.js rev. UNKNOWN (dated UNKNOWN)
 *
 * Use this quick select string when re-packaging this file:
 * js.col|js.com|js.shw|js.val
 *    ...or click here:
 * http://ucode.pause.ca/?modules=js.col+js.com+js.shw+js.val
 *
 * The following were also included due to requirements:
 * - uCommon.php rev. UNKNOWN (dated UNKNOWN)
 * - uSanitize.php rev. UNKNOWN (dated UNKNOWN)
 * - uValidate.php rev. UNKNOWN (dated UNKNOWN)
 *
 * One or more of the included modules have supporting Javascript files.
 * To make sure these modules function properly please make sure uCode.js
 * is included in your resulting HTML. If you do not have uCode.js you can
 * generate one from the package server using the same options above.
 */

if(document&&document.all&&!document.nativeGetElementById)
{document.nativeGetElementById=document.getElementById;document.getElementById=function(id)
{var elem=document.nativeGetElementById(id);if(elem)
{if(elem.attributes['id'].value==id)
{return elem;}
else
{if(!document.all[id])return null;for(var i=1;i<document.all[id].length;i++)
{if(document.all[id][i].attributes['id'].value==id)
{return document.all[id][i];}}}}
return null;};}
if(!window.console||!console.firebug)
{var names=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];window.console={};for(var i=0;i<names.length;++i)
window.console[names[i]]=function(){}}
function inArray(needle,haystack){if(!isArray(haystack))return false;for(i in haystack){if(haystack[i]==needle)return true;}
return false;}
function decimals(value,decimals){var originalValue=value;if(value==='')return'';value=value*1;if(isNaN(value))return originalValue;var power=Math.pow(10,decimals);value=Math.round(value*power)/power;value=value.toString().split('.');if(value.length==1)value[1]='';for(var t=value[1].length;t<decimals;t++)value[1]+='0';value=value[0]+'.'+value[1];return value;}
function isNumeric(value){if(isNaN(parseFloat(value)))return false;return true;}
function isArray(value){if(!isObject(value)||value.constructor.toString().indexOf("Array")==-1)return false;return true;}
function isInt(value){if(typeof value=='number'&&Math.floor(value)==value)return true;return false;}
function isString(value){return typeof value=='string';}
function isFunction(value){return typeof value=='function';}
function isObject(value){return(typeof value=='object'&&!!value)||isFunction(value);}
function isRegExp(value){if(!isObject(value)||value.constructor.toString().indexOf("RegExp")==-1)return false;return true;}
function isBool(value){return typeof value=='boolean';}
function indexOf(obj,key){for(i in obj){if(obj[i]==key)return i;}
return-1;}
function hasClass(obj,className){var classes=obj.className.split(' ');if(indexOf(classes,className)==-1)return(false);return(true);}
function addClass(obj,className){if(hasClass(obj,className))return;var classes=obj.className.split(' ');classes.push(className);obj.className=classes.join(' ');}
function removeClass(obj,className){if(!hasClass(obj,className))return;var classes=obj.className.split(' ');var newClasses=[];for(var t=0;t<classes.length;t++){if(classes[t]==className)continue;newClasses.push(classes[t]);}
obj.className=newClasses.join(' ');}
function toggleClass(element,className){element=$(element);if(hasClass(element,className)){removeClass(element,className);}else{addClass(element,className);}}
Function.prototype.bindAsEventListener=function(object){var __method=this;var args=[];for(var t=0;t<arguments.length;t++)args.push(arguments[t]);var object=args.shift();return function(event){return __method.apply(object,[event||window.event].concat(args));}}
function ObserveEvent(element,name,observer){element=$(element);if(element){if(element.addEventListener){element.addEventListener(name,observer,true);}else if(element.attachEvent){element.attachEvent('on'+name,observer);}}}
function StopObservingEvent(element,name,observer){element=$(element);if(element){if(element.removeEventListener){element.removeEventListener(name,observer,false);}else if(element.detachEvent){element.detachEvent('on'+name,observer);}}}
var _CACHEDIDELEMENTS={};function $(){var elements=new Array();for(var i=0;i<arguments.length;i++){var element=arguments[i];if(typeof element=='string'){if(!_CACHEDIDELEMENTS[element]||!_CACHEDIDELEMENTS[element].parentNode)_CACHEDIDELEMENTS[element]=document.getElementById(element);element=_CACHEDIDELEMENTS[element];}
if(arguments.length==1)
return element;elements.push(element);}
return elements;};function getPosition(element)
{return[DL_GetElementLeft(element),DL_GetElementTop(element)];}
function getStyle(element,style){element=$(element);var value=element.style[camelize(style)];if(!value){if(document.defaultView&&document.defaultView.getComputedStyle){var css=document.defaultView.getComputedStyle(element,null);value=css?css.getPropertyValue(style):null;}else if(element.currentStyle){value=element.currentStyle[camelize(style)];}}
if(window.opera&&['left','top','right','bottom'].include(style))
if(Element.getStyle(element,'position')=='static')value='auto';return value=='auto'?null:value;}
function positionedOffset(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){p=getStyle(element,'position');if(p=='relative'||p=='absolute')break;}}while(element);return[valueL,valueT];}
function camelize(value){var oStringList=value.split('-');if(oStringList.length==1)return oStringList[0];var camelizedString=value.indexOf('-')==0?oStringList[0].charAt(0).toUpperCase()+oStringList[0].substring(1):oStringList[0];for(var i=1,len=oStringList.length;i<len;i++){var s=oStringList[i];camelizedString+=s.charAt(0).toUpperCase()+s.substring(1);}
return camelizedString;};function DL_GetElementLeft(eElement)
{if(!eElement&&this)
{eElement=this;}
var DL_bIE=document.all?true:false;var nLeftPos=eElement.offsetLeft;var eParElement=eElement.offsetParent;while(eParElement!=null)
{if(DL_bIE)
{if((eParElement.tagName!="TABLE")&&(eParElement.tagName!="BODY"))
{nLeftPos+=eParElement.clientLeft;}}
else
{if(eParElement.tagName=="TABLE")
{var nParBorder=parseInt(eParElement.border);if(isNaN(nParBorder))
{var nParFrame=eParElement.getAttribute('frame');if(nParFrame!=null)
{nLeftPos+=1;}}
else if(nParBorder>0)
{nLeftPos+=nParBorder;}}}
nLeftPos+=eParElement.offsetLeft;eParElement=eParElement.offsetParent;}
return nLeftPos;}
function DL_GetElementTop(eElement)
{if(!eElement&&this)
{eElement=this;}
var DL_bIE=document.all?true:false;var nTopPos=eElement.offsetTop;var eParElement=eElement.offsetParent;while(eParElement!=null)
{if(DL_bIE)
{if((eParElement.tagName!="TABLE")&&(eParElement.tagName!="BODY"))
{nTopPos+=eParElement.clientTop;}}
else
{if(eParElement.tagName=="TABLE")
{var nParBorder=parseInt(eParElement.border);if(isNaN(nParBorder))
{var nParFrame=eParElement.getAttribute('frame');if(nParFrame!=null)
{nTopPos+=1;}}
else if(nParBorder>0)
{nTopPos+=nParBorder;}}}
nTopPos+=eParElement.offsetTop;eParElement=eParElement.offsetParent;}
return nTopPos;}
function toggle(id){id=$(id);if(id.style&&id.style.display=='none')show(id);else hide(id);}
function show(id){id=$(id);if(id)id.style.display='';}
function hide(id){id=$(id);if(id)id.style.display='none';}
function setCookie(name,value,expires,path){value=escape(value);path=path||'/';if(expires){var date=new Date();date.setTime(date.getTime()+(expires*1000));var expires="; expires="+date.toGMTString();}
else var expires="";document.cookie=name+"="+value+expires+"; path="+path;return true;}
function getCookie(name){var nameEQ=name+"=";var ca=document.cookie.split(';');for(var i=0;i<ca.length;i++){var c=ca[i];while(c.charAt(0)==' ')c=c.substring(1,c.length);if(c.indexOf(nameEQ)==0){var value=unescape(c.substring(nameEQ.length,c.length));return value;}}
return null;}
function deleteCookie(name){return setCookie(name,"",-1);}
function setSelectValue(element,values){element=$(element);if(!element)return false;if(element.tagName!='SELECT')return false;if(!isArray(values))values=[values];for(var t=0;t<element.options.length;t++){if(element.options[t].getAttributeNode('value')&&element.options[t].getAttributeNode('value').specified){var value=element.options[t].value;}
else{var value=element.options[t].text;}
if(inArray(value,values))element.options[t].selected=true;else element.options[t].selected=false;}
return true;}
function setRadioValue(element,value){element=$(element);if(!element)return false;if(element.tagName!='INPUT'||element.type!='radio'){return false;}
if(element.value==value){element.checked=true;return true;}
var parent=element.parentNode;while(parent&&parent.tagName!='FORM'&&parent.tagName!='BODY'){parent=parent.parentNode;}
var elements=parent.getElementsByTagName('input');for(var t=0;t<elements.length;t++){if(elements[t].type=='radio'&&elements[t].name==element.name){if(elements[t].value==value){elements[t].checked=true;return true;}
else{elements[t].checked=false;}}}
if(value===null)return true;return false;}
function setInputValue(element,values){element=$(element);if(!element)return false;if(element.tagName=='SELECT'){return setSelectValue(element,values);}
if(element.tagName=='INPUT'&&element.type=="radio"){return setRadioValue(element,values);}
if(element.tagName=='INPUT'&&element.type=="checkbox"){if(values)element.checked=true;else element.checked=false;return true;}
element.value=values;return true;}
function getSelectValue(element){element=$(element);if(!element)return false;if(element.tagName!='SELECT')return false;var values=[];for(var t=0;t<element.options.length;t++){if(element.options[t].selected){if(element.options[t].getAttributeNode('value')&&element.options[t].getAttributeNode('value').specified){var value=element.options[t].value;}
else{var value=element.options[t].text;}
values.push(value);}}
if(element.multiple){return values;}
if(values.length>=1){return values[0];}
return null;}
function getSelectText(element){element=$(element);if(!element)return false;if(element.tagName!='SELECT')return false;var values=[];for(var t=0;t<element.options.length;t++){if(element.options[t].selected){values.push(element.options[t].text);}}
if(element.multiple){return values;}
if(values.length>=1){return values[0];}
return null;}
function getRadioValue(element){element=$(element);if(!element)return false;if(element.tagName!='INPUT'||element.type!='radio'){return false;}
if(element.checked){return element.value;}
var parent=element.parentNode;while(parent&&parent.tagName!='FORM'&&parent.tagName!='BODY'){parent=parent.parentNode;}
var elements=parent.getElementsByTagName('input');for(var t=0;t<elements.length;t++){if(elements[t].type=='radio'&&elements[t].name==element.name&&elements[t].checked){return elements[t].value;}}
return null;}
function getInputValue(element){element=$(element);if(!element)return false;if(element.tagName=='SELECT'){return getSelectValue(element);}
if(element.tagName=='INPUT'&&element.type=="radio"){return getRadioValue(element);}
if(element.tagName=='INPUT'&&element.type=="checkbox"){if(element.checked)return element.value;else return null;}
return element.value;}
function nodeMerge(){if(arguments.length<1){return false;}
var allNodes=Array();for(t=0;t<arguments.length;t++){for(x=0;x<arguments[t].length;x++){allNodes.push(arguments[t][x]);}}
return allNodes;}
function array_unique(array){var newArray=[];for(i in array){var val=array[i];if(inArray(val,newArray)){continue;}
newArray.push(val);}
return newArray;}
function cancelEvent(e){e=e?e:window.event;if(e.stopPropagation)
e.stopPropagation();if(e.preventDefault)
e.preventDefault();e.cancelBubble=true;e.cancel=true;e.returnValue=false;return false;}
var getElementsByClassName=function(className,tag,elm){if(document.getElementsByClassName){getElementsByClassName=function(className,tag,elm){elm=elm||document;var elements=elm.getElementsByClassName(className),nodeName=(tag)?new RegExp("\\b"+tag+"\\b","i"):null,returnElements=[],current;for(var i=0,il=elements.length;i<il;i+=1){current=elements[i];if(!nodeName||nodeName.test(current.nodeName)){returnElements.push(current);}}
return returnElements;};}
else if(document.evaluate){getElementsByClassName=function(className,tag,elm){tag=tag||"*";elm=elm||document;var classes=className.split(" "),classesToCheck="",xhtmlNamespace="http://www.w3.org/1999/xhtml",namespaceResolver=(document.documentElement.namespaceURI===xhtmlNamespace)?xhtmlNamespace:null,returnElements=[],elements,node;for(var j=0,jl=classes.length;j<jl;j+=1){classesToCheck+="[contains(concat(' ', @class, ' '), ' "+classes[j]+" ')]";}
try{elements=document.evaluate(".//"+tag+classesToCheck,elm,namespaceResolver,0,null);}
catch(e){elements=document.evaluate(".//"+tag+classesToCheck,elm,null,0,null);}
while((node=elements.iterateNext())){returnElements.push(node);}
return returnElements;};}
else{getElementsByClassName=function(className,tag,elm){tag=tag||"*";elm=elm||document;var classes=className.split(" "),classesToCheck=[],elements=(tag==="*"&&elm.all)?elm.all:elm.getElementsByTagName(tag),current,returnElements=[],match;for(var k=0,kl=classes.length;k<kl;k+=1){classesToCheck.push(new RegExp("(^|\\s)"+classes[k]+"(\\s|$)"));}
for(var l=0,ll=elements.length;l<ll;l+=1){current=elements[l];match=false;for(var m=0,ml=classesToCheck.length;m<ml;m+=1){match=classesToCheck[m].test(current.className);if(!match){break;}}
if(match){returnElements.push(current);}}
return returnElements;};}
return getElementsByClassName(className,tag,elm);};function SmoothMovement(position,target,velocity){position=Math.round(position);target=Math.round(target);velocity=(velocity?Math.round(velocity):0);this.updatePosition=function(){position+=velocity;if(velocity<0){if(position-velocity*(velocity-1)/2<target){velocity++;}else if(position-(velocity-1)*(velocity-2)/2>=target){velocity--;}}else{if(position+velocity*(velocity+1)/2>target){velocity--;}else if(position+(velocity+1)*(velocity+2)/2<=target){velocity++;}}
return position;}
this.changeTarget=function(newTarget){target=Math.round(newTarget);}
this.getPosition=function(){return position;}
this.getVelocity=function(){return velocity;}
this.hasStopped=function(){return(position==target&&velocity==0);}};function get_class(obj){if(obj instanceof Object&&!(obj instanceof Array)&&!(obj instanceof Function)&&obj.constructor&&obj!=this.window){var arr=obj.constructor.toString().match(/function\s*(\w+)/i);if(arr&&arr.length==2){return arr[1];}}
return false;}
function randomString(length,special){var str=0;chars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";if(special)chars+='-=_+,./<>?)(*&^%$#@!\|}{)';for(t=1;t<length;t++){var pos=Math.round(Math.random()*chars.length)-1;str+=chars.charAt(pos);}
return str;}
function htmlspecialchars(string){if(!string)return'';return(string.replace(/&/g,'&amp;').replace(/>/g,'&gt;').replace(/</g,'&lt;').replace(/"/g,'&quot;'));};function zeroPad(num,digits){var s='0'+num;return s.substring(s.length-2)};var uColumns=function(element,columnCount,options){this.initialize(element,columnCount,options);}
uColumns.prototype={initialize:function(elementName,columnCount,options){this.elementName=elementName;this.element=$(elementName);this.columnCount=columnCount;if(!options)options={};this.gutterWidth=parseInt(options.gutterWidth||10);this.columnHeight=parseFloat(options.columnHeight)||null;this.columnWidth=parseFloat(options.columnWidth)||null;this.lineHeight=parseFloat(options.lineHeight)||parseFloat(getStyle(this.element,'line-height'))||null;if(options.columnDivs){this.columnDivs=[];for(var t=0;t<options.columnDivs.length;t++){this.columnDivs[t]=$(options.columnDivs[t]);if(!this.columnDivs[t]){alert("Unable to find element named "+options.columnDivs[t]);return false;}}}
this.page=parseInt(options.page||0);this.prevDiv=$(options.prevDiv)||null;this.nextDiv=$(options.nextDiv)||null;if(this.columnDivs||this.columnHeight)this.autoHeight=false;else this.autoHeight=true;this.columns=[];this.pageCount=1;this.html=this.element.innerHTML;this.element.innerHTML='';if(!this.columnDivs){if(!this.columnWidth)this.calculateWidths();this.createColumnDivs();}
this.createColumns();this.alignColumns();},parseMetric:function(number){if(!number)return null;if(number.match(/em$/i))return'em';if(number.match(/px$/i))return'px';if(number.match(/pt$/i))return'pt';if(number.match(/in$/i))return'in';if(number.match(/cm$/i))return'cm';if(number.match(/mm$/i))return'mm';if(number.match(/pc$/i))return'pc';return'px';},calculateWidths:function(){var elementWidth=this.element.clientWidth;var gutterWidth=this.gutterWidth*(this.columnCount-1);this.columnWidth=Math.floor((elementWidth-gutterWidth)/this.columnCount);},createColumnDivs:function(){this.element.style.position='relative';this.columnDivs=[];var left=0;for(var t=0;t<this.columnCount;t++){this.columnDivs[t]=document.createElement('div');this.columnDivs[t].id=this.elementName+'_column'+t;this.columnDivs[t].style.width=this.columnWidth+'px';this.columnDivs[t].style.position='absolute';this.columnDivs[t].style.margin='0px';this.columnDivs[t].style.padding='0px';this.columnDivs[t].style.borderWidth='0px';this.columnDivs[t].style.top='0px';this.columnDivs[t].style.left=left+'px';this.element.appendChild(this.columnDivs[t]);if(t==0&&this.autoHeight){this.columnHeight=Math.ceil(this.columns[0].clientHeight/this.columnCount);if(this.lineHeight){this.columnHeight=Math.ceil(this.columnHeight/this.lineHeight);this.columnHeight=this.columnHeight*this.lineHeight;}}
this.columnDivs[t].style.height=this.columnHeight+'px';left+=this.columnWidth+this.gutterWidth;}},createColumns:function(){for(var t=0;t<this.columnCount;t++){var container=this.columnDivs[t];container.style.display='';container.style.overflow='hidden';this.columns[t]=document.createElement('div');this.columns[t].id=this.elementName+'_column'+t+'_inner';this.columns[t].style.width=container.clientWidth+'px';this.columns[t].style.position='absolute';this.columns[t].innerHTML=this.html;this.columns[t].style.margin='0px';this.columns[t].style.padding='0px';this.columns[t].style.borderWidth='0px';this.columns[t].style.left='0px';if(this.lineHeight)this.columns[t].style.lineHeight=this.lineHeight+'px';container.appendChild(this.columns[t]);}
if(!this.autoHeight){var prevClick=this.prevPage.bindAsEventListener(this);if(!this.prevDiv)this.prevDiv=this.columns[0];ObserveEvent(this.prevDiv,'click',prevClick);var nextClick=this.nextPage.bindAsEventListener(this);if(!this.nextDiv)this.nextDiv=this.columns[this.columns.length-1];ObserveEvent(this.nextDiv,'click',nextClick);}
this.pageHeight=0;for(var t=0;t<this.columnCount;t++){this.pageHeight+=this.columnDivs[t].clientHeight;}
this.pageCount=Math.ceil(this.columns[0].clientHeight/this.pageHeight);},alignColumns:function(){if(this.page<0)this.page=0;if(this.page>this.pageCount-1)this.page=this.pageCount-1;var left=0;var top=this.page*this.pageHeight*-1;for(var t=0;t<this.columnCount;t++){this.columns[t].style.top=top+'px';top-=this.columnDivs[t].clientHeight;}
this.managePageLinks();},managePageLinks:function(){if(this.prevDiv==this.columns[0])return true;if(this.autoHeight){if(this.prevDiv)this.prevDiv.style.display='none';if(this.nextDiv)this.nextDiv.style.display='none';return true;}
if(this.prevDiv){if(this.page>0)this.prevDiv.style.display='';else this.prevDiv.style.display='none';}
if(this.nextDiv){if(this.page<this.pageCount-1)this.nextDiv.style.display='';else this.nextDiv.style.display='none';}},nextPage:function(){if(this.page==this.pageCount-1)return false;this.page++;this.alignColumns();},prevPage:function(){if(this.page==0)return false;this.page--;this.alignColumns();},showPage:function(page){this.page=parseInt(page);this.alignColumns();}}
var uShow=function(){this.initialize();}
uShow.prototype={uid:0,initialize:function(){this.uid=uShow.prototype.uid++;this.initListen=this.init.bindAsEventListener(this);ObserveEvent(window,'load',this.initListen);this.repeat=true;this.delay=5;this.thumbnailCenter=false;this.transitionTime=0.5;this.controls=true;this.thumbs=false;this.autoplay=true;this.controlsElement=null;this.thumbsElement=null;this.thumbAnimate=null;this.transition='fade';this.onTransitionStart=null;this.onTransitionComplete=null;this.onTransitionCancel=null;this.slides=[];this.slidePos=0;this.nextListen=this.next.bindAsEventListener(this);this.clickNextListen=this.clickNext.bindAsEventListener(this);this.clickPrevListen=this.clickPrev.bindAsEventListener(this);this.clickPlayListen=this.clickPlay.bindAsEventListener(this);this.clickStopListen=this.clickStop.bindAsEventListener(this);},addSlide:function(slide){this.slides.push(slide);slide.attach(this);if(this.slides.length==1){this.element=slide.element.parentNode;if(getStyle(this.element,'position')!='absolute')this.element.style.position='relative';}
slide.prepare();if(this.slides.length>1)slide.hide();if(this.slides.length==1&&this.autoplay&&this.loaded&&!this.timeout){this.play();}
return(true);},init:function(){this.loaded=true;if(this.autoplay&&this.slides.length>0)this.play();if(this.controls)this.drawControls();if(this.thumbs)this.drawThumbs();},play:function(){this.autoplay=true;var slide=this.slides[this.slidePos];var delay=this.getDelay(slide);if(delay==0){this.stop();}
else{this.timeout=setTimeout(this.nextListen,delay*1000);}},clickPlay:function(){this.autoplay=true;this.next();},clickNext:function(){this.next();},clickPrev:function(){this.previous();},clickStop:function(){this.stop();},getDelay:function(slide){if(slide.delay!=undefined)return(slide.delay);return(this.delay);},getTransition:function(slide){if(slide.transition!=undefined)return(slide.transition);return(this.transition);},stop:function(){if(this.timeout)clearTimeout(this.timeout);this.timeout=null;this.autoplay=false;},next:function(){if(this.timeout)clearTimeout(this.timeout);var previousSlideId=this.slidePos;var current=this.slides[this.slidePos];this.slidePos++;if(this.slidePos>=this.slides.length){if(!this.repeat)return(false);this.slidePos=0;}
var next=this.slides[this.slidePos];this.transitStart(current,next);this.moveThumbs(previousSlideId,this.slidePos);},previous:function(){if(this.timeout)clearTimeout(this.timeout);var previousSlideId=this.slidePos;var current=this.slides[this.slidePos];this.slidePos--;if(this.slidePos<0){if(!this.repeat)return(false);this.slidePos=this.slides.length-1;}
var prev=this.slides[this.slidePos];this.transitStart(current,prev);this.moveThumbs(previousSlideId,this.slidePos);},show:function(slideId){if(slideId==this.slidePos)return true;var previousSlideId=this.slidePos;if(this.timeout)clearTimeout(this.timeout);var current=this.slides[this.slidePos];if(!this.slides[slideId])return false;this.slidePos=slideId;var next=this.slides[this.slidePos];this.transitStart(current,next);this.moveThumbs(previousSlideId,this.slidePos);},transitStart:function(fromSlide,toSlide){this.transitCancel();if(this.onTransitionStart)this.onTransitionStart();var transition=this.getTransition(toSlide);switch(transition){case'fade':this.transit=new uShowFade(this);break;case'none':default:this.transit=new uShowNone(this);break;}
this.transit.start(fromSlide,toSlide);},transitComplete:function(){this.transit=undefined;if(this.onTransitionComplete)this.onTransitionComplete();if(this.autoplay)this.play();},transitCancel:function(){if(this.transit)this.transit.forceComplete();this.transit=undefined;if(this.onTransitionCancel)this.onTransitionCancel();},drawControls:function(){var element=$(this.controlsElement);if(!element)element=this.element;if(!element)return(false);this.buttonPrev=document.createElement('div');this.buttonPrev.className='uShow_prev uShow_button';this.buttonPrev.onclick=this.clickPrevListen;this.buttonPrev.innerHTML='Previous';element.appendChild(this.buttonPrev);this.buttonPlay=document.createElement('div');this.buttonPlay.className='uShow_play uShow_button';this.buttonPlay.onclick=this.clickPlayListen;this.buttonPlay.innerHTML='Play';element.appendChild(this.buttonPlay);this.buttonStop=document.createElement('div');this.buttonStop.className='uShow_stop uShow_button';this.buttonStop.onclick=this.clickStopListen;this.buttonStop.innerHTML='Stop';element.appendChild(this.buttonStop);this.buttonNext=document.createElement('div');this.buttonNext.className='uShow_next uShow_button';this.buttonNext.onclick=this.clickNextListen;this.buttonNext.innerHTML='Next';element.appendChild(this.buttonNext);},clickThumb:function(event,slideId){this.show(slideId);},adjustThumbs:function(event,slideId){var width=0;var height=0;for(var t=0;t<this.slides.length;t++){if(this.slides[t].thumbnail&&this.slides[t].thumbElement){this.slides[t].thumbElement.style.left=width+'px';width+=this.slides[t].thumbElement.clientWidth;if(this.slides[t].thumbElement.clientHeight>height){height=this.slides[t].thumbElement.clientHeight;}}}
this.thumbContainer.style.width=width+'px';this.thumbContainer.style.height=height+'px';if(slideId==0){this.moveThumbs(0,0);}},moveThumbs:function(fromId,toId){if(!this.thumbs)return(false);if(!this.thumbContainer)return(false);var fromX=0;var toX=0;var fromWidth=0;var toWidth=0;var x=0;for(var t=0;t<this.slides.length;t++){var thumbWidth=0;if(this.slides[t].thumbElement){thumbWidth=this.slides[t].thumbElement.clientWidth;}
if(fromId==t){fromX=x;fromWidth=thumbWidth;removeClass(this.slides[t].thumbElement,'uShow_selectedThumb');}
if(toId==t){toX=x;toWidth=thumbWidth;addClass(this.slides[t].thumbElement,'uShow_selectedThumb');}
x+=thumbWidth;}
toX=this.thumbContainerOffset-toX-Math.round(toWidth/2);fromX=this.thumbContainerOffset-fromX-Math.round(fromWidth/2);if(!this.thumbnailCenter){if(toX>0)toX=0;else if(toX+this.thumbContainer.clientWidth<this.thumbContainerContainer.clientWidth){toX=this.thumbContainerContainer.clientWidth-this.thumbContainer.clientWidth;}
if(fromX>0)fromX=0;else if(fromX+this.thumbContainer.clientWidth<this.thumbContainerContainer.clientWidth){fromX=this.thumbContainerContainer.clientWidth-this.thumbContainer.clientWidth;}}
if(this.thumbAnimate){this.thumbAnimate.changeTarget(toX);}
else{this.thumbAnimate=new SmoothMovement(fromX,toX);var thumbAnimateListen=this.moveThumbAnimate.bindAsEventListener(this);this.thumbAnimateInterval=setInterval(thumbAnimateListen,15)}},moveThumbAnimate:function(){if(!this.thumbAnimate)return;var x=this.thumbAnimate.updatePosition();this.thumbContainer.style.left=x+'px';if(this.thumbAnimate.hasStopped()){clearInterval(this.thumbAnimateInterval);this.thumbAnimate=null;this.thumbAnimateInterval=null;}},drawThumbs:function(){if(!this.thumbs)return(false);if(!this.thumbsElement)return(false);this.thumbContainerContainer=$(this.thumbsElement);if(!this.thumbContainerContainer)return(false);this.thumbContainer=document.createElement('div');this.thumbContainer.style.position='absolute';this.thumbContainer.style.left='0px';this.thumbContainer.style.top='0px';if(this.thumbContainerContainer.style.position!='absolute'){this.thumbContainerContainer.style.position='relative';}
this.thumbContainerContainer.appendChild(this.thumbContainer);this.thumbContainerOffset=(this.thumbContainerContainer.clientWidth)/2;for(var t=0;t<this.slides.length;t++){var slide=this.slides[t];if(slide.thumbnail){var thumbElement=slide.drawThumb(t);this.thumbContainer.appendChild(thumbElement);}}}};var uShowNone=function(parentUShow){this.initialize(parentUShow);}
uShowNone.prototype={initialize:function(parentUShow){this.parentUShow=parentUShow;},start:function(fromSlide,toSlide){toSlide.show();fromSlide.hide();this.parentUShow.transitComplete();},forceComplete:function(){}};var uShowFade=function(parentUShow){this.initialize(parentUShow);}
uShowFade.prototype={initialize:function(parentUShow){this.parentUShow=parentUShow;},start:function(fromSlide,toSlide){this.fadeListen=this.fadeStep.bindAsEventListener(this);this.fadeSteps=20;this.fadeAmount=100/this.fadeSteps;this.fadeTime=this.parentUShow.transitionTime*1000/this.fadeSteps;this.fadeFrom=fromSlide;this.fadeTo=toSlide;this.fadeFrom.onTop();this.fadeTo.onBottom();this.fadeTo.show();this.fadeOpacity=100;this.fadeStep();},forceComplete:function(){this.fadeTo.setOpacity(100);this.fadeFrom.hide();this.fadeTo.show();this.fadeStop();},fadeStep:function(){if(!this.fadeFrom||!this.fadeTo)return(false);this.fadeOpacity-=this.fadeAmount;this.fadeOpacity=Math.round(this.fadeOpacity);if(this.fadeOpacity<0)this.fadeOpacity=0;this.fadeFrom.setOpacity(this.fadeOpacity);if(this.fadeOpacity==0)this.fadeStop();if(this.fadeTimeout)clearTimeout(this.fadeTimeout);this.fadeTimeout=setTimeout(this.fadeListen,this.fadeTime);},fadeStop:function(){this.fadeFrom.hide();this.fadeFrom=undefined;this.fadeTo=undefined;this.fadeOpacity=undefined;if(this.fadeTimeout)clearTimeout(this.fadeTimeout);this.fadeTimeout=undefined;this.parentUShow.transitComplete();}};var uSlide=function(elementId){this.initialize(elementId);}
uSlide.prototype={initialize:function(elementId){this.elementId=elementId;this.element=$(elementId);if(!this.element)return(false);this.delay=undefined;this.transition=undefined;this.transitionTime=undefined;this.thumbnail=undefined;this.slideshow=undefined;},attach:function(slideshow){this.slideshow=slideshow;},detach:function(){this.slideshow=null;},prepare:function(){if(!this.element)return(false);this.element.style.position='absolute';this.element.style.top='0px';this.element.style.left='0px';},drawThumb:function(position){if(!this.thumbnail)return(false);this.thumbElement=document.createElement('div');this.thumbElement.className='uShow_thumb'
this.thumbElement.style.position='absolute';var img=document.createElement('img');img.src=this.thumbnail;this.thumbElement.appendChild(img);var showListen=this.slideshow.clickThumb.bindAsEventListener(this.slideshow,position);var adjustListen=this.slideshow.adjustThumbs.bindAsEventListener(this.slideshow,position);this.thumbElement.onclick=showListen;img.onload=adjustListen;return(this.thumbElement);},hide:function(){if(!this.element)return(false);this.element.style.display='none';},show:function(){if(!this.element)return(false);this.element.style.display='';this.setOpacity(100);},onTop:function(){this.element.style.zIndex='1000';},onBottom:function(){this.element.style.zIndex='999';},setOpacity:function(opacity){if(document.all){this.element.style.filter="alpha(style=0,opacity:"+opacity+")";}
else{this.element.style.KHTMLOpacity=opacity/100;this.element.style.opacity=opacity/100;this.element.style.MozOpacity=opacity/100;}}};function uValidate(value,type,test1,test2){if(type.indexOf('array:')==0){type=type.substr(6);if(!isArray(value))value=[value];for(i in value){value[i]=uValidate(value[i],type,test1,test2);}
return value;}
switch(type){case'int':case'integer':if(!isNumeric(value))return undefined;if(parseInt(value)!=value)return undefined;if(isArray(test1)&&test1.indexOf(value)==-1)return undefined;if(!isArray(test1)&&test1!=undefined&&value<test1)return undefined;if(test2!=undefined&&value>test2)return undefined;value=parseInt(value);return value;case'dec':case'decimal':case'float':if(!isNumeric(value))return undefined;if(parseFloat(value)!=value)return undefined;if(isArray(test1)&&test1.indexOf(value)==-1)return undefined;if(!isArray(test1)&&test1!=undefined&&value<test1)return undefined;if(test2!=undefined&&value>test2)return undefined;value=parseFloat(value);return value;case'str':case'string':if(isObject(value)||isArray(value))return undefined;if(isBool(value)){if(value==true)return'TRUE';return'FALSE';}
value=value.toString();if(!value)value='';if(isArray(test1)&&test1.indexOf(value)==-1)return undefined;if(isRegExp(test1)){if(!value.match(test1))return undefined;}
if(isInt(test1)&&value.length<test1)return undefined;if(isInt(test2)&&value.length>test2)return undefined;return value;case'bool':case'boolean':value=uValidate(value,'str');value=value.toUpperCase();if(value=='1'||value==1||value=='ON'||value=='TRUE'||value=='T'||value=='YES'||value=='Y')return true;if(value=='0'||value==0||value=='OFF'||value=='FALSE'||value=='F'||value=='NO'||value=='N')return false;return undefined;case'email':case'e-mail':value=uValidate(value,'str',test1,test2);if(isString(value)&&value=='')return value;value=uValidate(value,'str','/^[a-z0-9\_\-\.]+\@[a-z0-9\-\.]+\.[a-z]{2,}$/i');return value;default:return undefined;}}
