document.getWindowWidth=function(){return this._filterResults(window.innerWidth?window.innerWidth:0,document.documentElement?document.documentElement.clientWidth:0,document.body?document.body.clientWidth:0);}
document.getWindowHeight=function(){return this._filterResults(window.innerHeight?window.innerHeight:0,document.documentElement?document.documentElement.clientHeight:0,document.body?document.body.clientHeight:0);}
document.getScrollLeft=function(){return this._filterResults(window.pageXOffset?window.pageXOffset:0,document.documentElement?document.documentElement.scrollLeft:0,document.body?document.body.scrollLeft:0);}
document.getScrollTop=function(){return this._filterResults(window.pageYOffset?window.pageYOffset:0,document.documentElement?document.documentElement.scrollTop:0,document.body?document.body.scrollTop:0);}
document._filterResults=function(n_win,n_docel,n_body){var n_result=n_win?n_win:0;if(n_docel&&(!n_result||(n_result>n_docel))){n_result=n_docel;}
return n_body&&(!n_result||(n_result>n_body))?n_body:n_result;}
document.getDocumentWidth=function(){if(document.documentElement&&document.documentElement.scrollWidth){return document.documentElement.scrollWidth;}else{if(document.body.scrollWidth>document.body.offsetWidth){return document.body.scrollWidth;}else{return document.body.offsetWidth;}}}
document.getDocumentHeight=function(){if(document.documentElement&&document.documentElement.scrollHeight){return document.documentElement.scrollHeight;}else{if(document.body.scrollHeight>document.body.offsetHeight){return document.body.scrollHeight;}else{return document.body.offsetHeight;}}}
document.getElementWidth=function(element){var width;do{if(element.offsetWidth){width=element.offsetWidth;}else{width=element.clientWidth;}
styleWidth=document.getStyleValue(element,'width');if(styleWidth.indexOf('%')>=0||styleWidth==='auto'){styleWidth=0}else{styleWidth=parseInt(styleWidth.replace(/[^0-9\.]/,''));}
element=element.parentNode;}while(element!=null&&width==0&&styleWidth==0);if(width==0){width=styleWidth;}
return width;}
document.getElementHeight=function(element){var height;do{if(element.offsetHeight){height=element.offsetHeight;}else{height=element.clientHeight;}
styleHeight=document.getStyleValue(element,'height');if(styleHeight.indexOf('%')>=0||styleHeight==='auto'){styleHeight=0}else{styleHeight=parseInt(styleHeight.replace(/[^0-9\.]/,''));}
element=element.parentNode;}while(element!=null&&height==0&&styleHeight==0);if(height==0){height=styleHeight;}
return height;}
document.getElementX=function(obj){var x=obj.x?obj.x:obj.offsetLeft;while((obj=obj.offsetParent)!=null){x+=obj.offsetLeft;}
return x;}
document.getElementY=function(obj){var y=obj.y?obj.y:obj.offsetTop;while((obj=obj.offsetParent)!=null){y+=obj.offsetTop;}
return y;}
document.preloadImage=function(imageSrc){if(document._visioncms_preloadImage==null){document._visioncms_preloadImage=document.createElement('IMG');}
document._visioncms_preloadImage.src=imageSrc;}
document.showLoadingMessage=function(status,message,zIndex){var div,img,p;if(status==null){status=true;}
if(message==null){message='Loading&hellip;<br />Please wait';}
if(zIndex==null){zIndex=2000;}
if(status){document.blockInput(true,zIndex);if(div=document.getElementById('_visioncms_loadingMessage')){div.getElementsByTagName('P')[0].innerHTML=message;div.style.position='absolute';div.style.textAlign='center';div.style.zIndex=zIndex+1;div.style.display='block';}else{div=document.createElement('DIV');div.id='_visioncms_loadingMessage';div.style.position='absolute';div.style.width='200px';div.style.height='100px';div.style.textAlign='center';div.style.zIndex=zIndex+1;img=document.createElement('IMG');img.src=_visioncms_imageUrl+'loading.gif';img.style.margin='10px';p=document.createElement('P');p.innerHTML=message;p.style.textAlign='center';p.style.fontSize='10px';p.style.fontWeight='bold';p.style.lineHeight='100%';div.appendChild(img);div.appendChild(p);document.body.appendChild(div);}
div.style.left=((document.getWindowWidth()-document.getElementWidth(div))/2)+'px';div.style.top=((document.getWindowHeight()-document.getElementHeight(div))/2)+'px';}else{if(div=document.getElementById('_visioncms_loadingMessage')){div.style.display='none';document.blockInput(false);}}}
var enabledSelects=new Array();document.blockInput=function(status,zIndex,exception,opacity){var block=document.getElementById('VisionCMS-BlockInputDiv');if(status){if(zIndex==null){zIndex=2000;}
if(opacity==null){opacity=70;}
if(block==null){block=document.createElement('div');block.id='VisionCMS-BlockInputDiv';block.style.position='absolute';block.style.left='0';block.style.top='0';document.body.appendChild(block);if(document.getStyleValue(block,'background-color')=='transparent'){block.style.backgroundColor='white';}}
block.style.filter='alpha(opacity='+opacity+');';block.style.opacity=(opacity/100);block.style.zIndex=zIndex;block.style.width=document.getWindowWidth()+'px';block.style.height=document.getDocumentHeight()+'px';block.style.display='block';if(document.browserInfo.isMSIE&&document.browserInfo.version<7){var selects=document.getElementsByTagName('select');for(i in selects){if(!selects[i].disabled){enabledSelects[i]=selects[i];}}
for(i in enabledSelects){enabledSelects[i].disabled=!document.isChildOf(enabledSelects[i],exception)}}}else if(block!=null){block.style.display='none';if(document.browserInfo.isMSIE&&document.browserInfo.version<7){for(i in enabledSelects){enabledSelects[i].disabled=false;}}}}
document.objectIntersects=function(obj,withObj){var objX=document.getElementX(obj);var objY=document.getElementY(obj);var objH=obj.offsetHeight;var objW=obj.offsetWidth;var withX=document.getElementX(withObj);var withY=document.getElementY(withObj);var withH=withObj.offsetHeight;var withW=withObj.offsetWidth;if(((objX+objW)>=withX)&&(objX<=(withX+withW))&&((objY+objH)>=withY)&&(objY<=(withY+withH))){return true;}
return false;}
document.hideIntersectedSelects=function(obj){if(document.browserInfo.isMSIE&&document.browserInfo.version<=6){var selects=document.getElementsByTagName('select');for(var i in selects){if(selects[i].style!=null){if(!document.isChildOf(selects[i],obj)){if(document.objectIntersects(selects[i],obj)&&obj.style.display!='none'){if(selects[i].style.visibility!='hidden'){selects[i].style.visibility='hidden';}}else{if(selects[i].style.visibility!='visible'){selects[i].style.visibility='visible';}}}}}}}
document.isChildOf=function(childObj,parentObj){while(childObj.parentNode!=parentObj&&childObj.parentNode!=null){childObj=childObj.parentNode;}
return(childObj.parentNode==parentObj);}
document.getElementsByClassName=function(className,tag,elm){var testClass=new RegExp("(^|\\s)"+className+"(\\s|$)");var tag=tag||"*";var elm=elm||document;var elements=(tag=="*"&&elm.all)?elm.all:elm.getElementsByTagName(tag);var returnElements=[];var current;var length=elements.length;for(var i=0;i<length;i++){current=elements[i];if(testClass.test(current.className)){returnElements.push(current);}}
return returnElements;}
document.loadScript=function(src,callback){var scripts=document.getElementsByTagName('SCRIPT');for(var i=0;i<scripts.length;i++){if(scripts[i].src==src){if(callback){callback();}
return false;}}
var script=document.createElement('SCRIPT');script.src=src;script.type='text/javascript';if(callback!=null){if(typeof(script.onreadystatechange)!='undefined'){script.onreadystatechange=function(){if(this.readyState=='loaded'||this.readyState=='complete'){callback();}}}else{document.registerEventHandler(script,'load',callback);}}
document.getElementsByTagName('HEAD')[0].appendChild(script);return true;}
document.loadStylesheet=function(href,media){if(typeof(media)=='undefined'){media='all';}
var style=document.createElement('LINK');style.type='text/css';style.rel='stylesheet';style.media=media;style.href=href;document.getElementsByTagName('HEAD')[0].appendChild(style);}
document.stylePropertyHashTable={'float':'cssFloat'}
document.getStylePropertyJsName=function(property){if(document.stylePropertyHashTable[property]!=null){return document.stylePropertyHashTable[property];}else{var jsProperty='';for(var i=0;i<property.length;i++){if(property.charAt(i)=='-'){jsProperty+=property.charAt(i+1).toUpperCase();++i;}else{jsProperty+=property.charAt(i);}}
document.stylePropertyHashTable[property]=jsProperty;return jsProperty;}}
document.getStyleValue=function(element,property){if(typeof(element.currentStyle)!='undefined'){var value=element.currentStyle[this.getStylePropertyJsName(property)];}else{var value=window.getComputedStyle(element,null).getPropertyValue(property);}
switch(property){case'color':case'background-color':if(value.indexOf('rgb')==0){var rgba=value.indexOf('rgba')==0;value=value.substr(rgba?5:4,value.length-(rgba?6:5));value=value.split(', ');var colour='#';if(rgba&&value[3]==0){colour='transparent';}else{for(i=0;i<3;i++){var part=parseInt(value[i]).toString(16);if(part.length==1){part='0'+part;}
colour+=part;}}
value=colour;}
break;case'background-position-y':if(value==''){value='top';}
break;case'background-position-x':if(value==''){value='left';}
break;}
return value;}
document.setStyleValue=function(element,property,value){switch(property){case'background-position-x':if(document.browserInfo.isFirefox){element.style.backgroundPosition=value+' '+this.getStyleValue(element,'background-position-y');return;}
break;case'background-position-y':if(document.browserInfo.isFirefox){element.style.backgroundPosition=this.getStyleValue(element,'background-position-x')+' '+value;return;}
break;}
element.style[this.getStylePropertyJsName(property)]=value;}
document.assignStyleClass=function(element,className){if(!document.hasStyleClass(element,className)){element.className+=(element.className==''?'':' ')+className;}}
document.hasStyleClass=function(element,className){return(element.className.indexOf(className)>=0);}
document.removeStyleClass=function(element,className){if(document.hasStyleClass(element,className)){element.className=element.className.replace(className,'').trim();}}
String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,'');}
String.prototype.ltrim=function(){return this.replace(/^\s+/,'');}
String.prototype.rtrim=function(){return this.replace(/\s+$/,'');}
Array.prototype.binarySearchFilter=function(key){if(key==''){return-1;}
key=key.toLowerCase();var low=0;var high=this.length-1;var middle;var text;while(low<=high){middle=(low+high)>>>1;text=this[middle].substring(0,key.length);if(key==text){while(middle>0&&this[middle-1].substring(0,key.length)==key){--middle;}
return middle;}else if(key<text){high=middle-1;}else{low=middle+1;}}
return-1;}
Array.prototype.contains=function(item){for(var i=0;i<this.length;i++){if(this[i]==item){return true;}}
return false;}
document.textarea_enforceMaxlength=function(e){var e=new EventInfo(e,'TEXTAREA');var maxlength=e.target.getAttribute('maxlength');switch(e.type){case'keypress':if(e.keyCode<32){return true;}
if(e.target.value.length>=maxlength){e.cancel();return false;}
return true;break;case'keyup':if(e.target.value.length>maxlength){alert('A maximum of '+maxlength+' characters can be entered in this field. Your input will be truncated to meet this restriction.');e.target.value=e.target.value.substring(0,maxlength);e.target.focus();}
document.getElementById(e.target.id+'_charCount').innerHTML=e.target.value.length;break;}
return true;}
document.input_limitChars=function(e){e=new EventInfo(e);var availableChars=e.target.getAttribute('availableChars');if(e.keyCharacter==null){return;}
if(availableChars.indexOf(e.keyCharacter)==-1){e.cancel();return false;}
return true;}
document.browserInfo=new BrowserInfo();function BrowserInfo(){this.isMSIE=(navigator.appName=="Microsoft Internet Explorer");this.isGecko=(navigator.userAgent.indexOf('Gecko')!=-1);this.isSafari=(navigator.userAgent.indexOf('Safari')!=-1);this.isMac=(navigator.userAgent.indexOf('Mac')!=-1);this.isOpera=(navigator.userAgent.indexOf('Opera')!=-1);this.isFirefox=(navigator.userAgent.indexOf('Firefox')!=-1);this.version=(navigator.appName=='Microsoft Internet Explorer')?parseFloat((new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})")).exec(navigator.userAgent)[1]):-1;}
document.cancelEvent=function(e){if(e.event!=null){e=e.event;}
if(document.browserInfo.isMSIE){e.returnValue=false;e.cancelBubble=true;}
if(e.stopPropagation){e.stopPropagation();}
if(e.preventDefault){e.preventDefault();}}
document.registerEventHandler=function(parent,eventName,handler){if(this.browserInfo.isMSIE){if(parent.eventHandlers==null){parent.eventHandlers=new Array();}
if(parent.eventHandlers[eventName]==null){parent.eventHandlers[eventName]=new Array();parent.attachEvent('on'+eventName,document.executeEventHandlers);}
parent.eventHandlers[eventName][parent.eventHandlers[eventName].length]=handler;}else{return parent.addEventListener(eventName,handler,true);}}
document.executeEventHandlers=function(e){e=new EventInfo(e);while((e.target.eventHandlers==null||e.target.eventHandlers[e.type]==null)&&e.target.parentNode!=null){e.target=e.target.parentNode;}
if(e.target.eventHandlers==null||e.target.eventHandlers[e.type]==null){return false;}
for(var i=0;i<e.target.eventHandlers[e.type].length;i++){e.target.eventHandlers[e.type][i](e.event);}
return true;}
function EventInfo(e,tagName){if(!e){e=window.event;}
this.event=e;this.type=e.type;this.currentTarget=e.currentTarget;this.target=(e.target!=null?e.target:e.srcElement);if(this.target!=null&&this.target.nodeType==3){this.target=this.target.parentNode;}
if(document.browserInfo.isMSIE&&this.target==null){this.target=parent;}
if(tagName!=null){this.target=this.getTarget(tagName);}
if(e.which){this.keyCode=e.which;}else{this.keyCode=e.keyCode;}
if(e.which==null||(e.which!=0&&e.which!=8)){this.keyCharacter=String.fromCharCode(this.keyCode);}else{this.keyCharacter=null;}
this.rightClick=(e.button==2);this.mouseX=0;this.mouseY=0;if(e.pageX||e.pageY){this.mouseX+=e.pageX;this.mouseY+=e.pageY;}else if(e.clientX||e.clientY){this.mouseX+=e.clientX+document.getScrollLeft();this.mouseY+=e.clientY+document.getScrollTop();}}
EventInfo.prototype.getTarget=function(tagName){if(typeof(tagName)=='undefined'||this.target.tagName==tagName.toUpperCase()){return this.target;}
target=this.target;while(target!=null){if(target.tagName==tagName.toUpperCase()){return target;}
target=target.parentNode;}
return null;}
EventInfo.prototype.cancel=function(){document.cancelEvent(this.event);}
