/**
 * 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-04-06
 * 
 * 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:
 * - uCommon.js rev. UNKNOWN (dated UNKNOWN)
 *
 * Use this quick select string when re-packaging this file:
 * js.com
 *    ...or click here:
 * http://ucode.pause.ca/?modules=js.com
 *
 * 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;}
if(!decimals){decimals=0;}
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';}
if(decimals==0){value=value[0];}else{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)};