var sEvent ={ 
 add: function(obj, etype, fp, cap){
 cap = cap || false; 
 if(obj.addEventListener)obj.addEventListener(etype, fp, cap); 
 else if(obj.attachEvent)obj.attachEvent("on" + etype, fp); 
},
 remove: function(obj, etype, fp, cap){
 cap = cap || false; 
 if(obj.removeEventListener)obj.removeEventListener(etype, fp, cap); 
 else if(obj.detachEvent)obj.detachEvent("on" + etype, fp); 
}, 
 DOMit: function(e){
 e = e? e: window.event; 
 if(!e.target)e.target = e.srcElement; 
 if(!e.preventDefault)e.preventDefault = function(){e.returnValue = false; return false;}
 if(!e.stopPropagation)e.stopPropagation = function(){e.cancelBubble = true;}
 return e; 
}, 
 getTarget: function(e){
 e = sEvent.DOMit(e); var tgt = e.target; 
 if(tgt.nodeType != 1)tgt = tgt.parentNode; 
 return tgt; 
}
}
function addLoadEvent(func){
 var oldQueue = window.onload? window.onload: function(){}; 
 window.onload = function(){
 oldQueue(); 
 func(); 
}
}
function sscrollObj(wndoId, lyrId, horizId){
 var wn = document.getElementById(wndoId); 
 this.id = wndoId; sscrollObj.col[this.id] = this; 
 this.animString = "sscrollObj.col." + this.id; 
 this.load(lyrId, horizId); 
 if(wn.addEventListener){
 wn.addEventListener('DOMMouseScroll', sscrollObj.doOnMouseWheel, false); 
}
 wn.onmousewheel = sscrollObj.doOnMouseWheel; 
}
sscrollObj.printEnabled = false; 
sscrollObj.defaultSpeed = sscrollObj.prototype.speed = 100; 
sscrollObj.defaultSlideDur = sscrollObj.prototype.slideDur = 500; 
sscrollObj.isSupported = function(){
 if(document.getElementById && document.getElementsByTagName 
 && document.addEventListener || document.attachEvent){
 return true; 
}
 return false; 
}
sscrollObj.col ={}; 
sscrollObj.prototype.on_load = function(){}
sscrollObj.prototype.on_scroll = function(){}
sscrollObj.prototype.on_scroll_start = function(){}
sscrollObj.prototype.on_scroll_stop = function(){}
sscrollObj.prototype.on_scroll_end = function(){}
sscrollObj.prototype.on_update = function(){}
sscrollObj.prototype.on_glidescroll = function(){}
sscrollObj.prototype.on_glidescroll_start = function(){}
sscrollObj.prototype.on_glidescroll_stop = function(){}
sscrollObj.prototype.on_glidescroll_end = function(){}
sscrollObj.prototype.load = function(lyrId, horizId){
 var wndo, lyr; 
 if(this.lyrId){
 lyr = document.getElementById(this.lyrId); 
 lyr.style.visibility = "hidden"; 
}
 this.lyr = lyr = document.getElementById(lyrId); 
 if(!sscrollObj.printEnabled){
 this.lyr.style.position = 'absolute'; 
}
 this.lyrId = lyrId; 
 this.horizId = horizId || null; 
 wndo = document.getElementById(this.id); 
 this.y = 0; this.x = 0; this.shiftTo(0,0); 
 this.getDims(wndo, lyr); 
 lyr.style.visibility = "visible"; 
 this.ready = true; this.on_load(); 
}
sscrollObj.prototype.shiftTo = function(x, y){
 if(this.lyr){
 this.lyr.style.left =(this.x = x)+ "px"; 
 this.lyr.style.top =(this.y = y)+ "px"; 
}
}
sscrollObj.prototype.getX = function(){return this.x;}
sscrollObj.prototype.getY = function(){return this.y;}
sscrollObj.prototype.getDims = function(wndo, lyr){
 this.wd = this.horizId? document.getElementById(this.horizId).offsetWidth: lyr.offsetWidth; 
 this.maxX =(this.wd - wndo.offsetWidth > 0)? this.wd - wndo.offsetWidth: 0; 
 this.maxY =(lyr.offsetHeight - wndo.offsetHeight > 0)? lyr.offsetHeight - wndo.offsetHeight: 0; 
}
sscrollObj.prototype.updateDims = function(){
 var wndo = document.getElementById(this.id); 
 var lyr = document.getElementById(this.lyrId); 
 this.getDims(wndo, lyr); 
 this.on_update(); 
}
sscrollObj.prototype.initScrollVals = function(deg, speed){
 if(!this.ready)return; 
 if(this.timerId){
 clearInterval(this.timerId); this.timerId = 0; 
}
 this.speed = speed || sscrollObj.defaultSpeed; 
 this.fx =(deg == 0)? -1:(deg == 180)? 1: 0; 
 this.fy =(deg == 90)? 1:(deg == 270)? -1: 0; 
 this.endX =(deg == 90 || deg == 270)? this.x:(deg == 0)? -this.maxX: 0; 
 this.endY =(deg == 0 || deg == 180)? this.y:(deg == 90)? 0: -this.maxY; 
 this.lyr = document.getElementById(this.lyrId); 
 this.lastTime = new Date().getTime(); 
 this.on_scroll_start(this.x, this.y); 
 this.timerId = setInterval(this.animString + ".scroll()", 10); 
}
sscrollObj.prototype.scroll = function(){
 var now = new Date().getTime(); 
 var d =(now - this.lastTime)/1000 * this.speed; 
 if(d > 0){
 var x = this.x + Math.round(this.fx * d); var y = this.y + Math.round(this.fy * d); 
 if((this.fx == -1 && x > -this.maxX)||(this.fx == 1 && x < 0)|| 
(this.fy == -1 && y > -this.maxY)||(this.fy == 1 && y < 0))
{
 this.lastTime = now; 
 this.shiftTo(x, y); 
 this.on_scroll(x, y); 
}else{
 clearInterval(this.timerId); this.timerId = 0; 
 this.shiftTo(this.endX, this.endY); 
 this.on_scroll(this.endX, this.endY); 
 this.on_scroll_end(this.endX, this.endY); 
}
}
}
sscrollObj.prototype.ceaseScroll = function(){
 if(!this.ready)return; 
 if(this.timerId){
 clearInterval(this.timerId); this.timerId = 0; 
}
 this.on_scroll_stop(this.x, this.y); 
}
sscrollObj.prototype.initScrollByVals = function(dx, dy, dur){
 if(!this.ready || this.sliding)return; 
 this.startX = this.x; this.startY = this.y; 
 this.destX = this.destY = this.distX = this.distY = 0; 
 if(dy < 0){
 this.distY =(this.startY + dy >= -this.maxY)? dy: -(this.startY + this.maxY); 
}else if(dy > 0){
 this.distY =(this.startY + dy <= 0)? dy: -this.startY; 
}
 if(dx < 0){
 this.distX =(this.startX + dx >= -this.maxX)? dx: -(this.startX + this.maxX); 
}else if(dx > 0){
 this.distX =(this.startX + dx <= 0)? dx: -this.startX; 
}
 this.destX = this.startX + this.distX; this.destY = this.startY + this.distY; 
 this.glideScrollPrep(this.destX, this.destY, dur); 
}
sscrollObj.prototype.initScrollToVals = function(destX, destY, dur){
 if(!this.ready || this.sliding)return; 
 this.startX = this.x; this.startY = this.y; 
 this.destX = -Math.max(Math.min(destX, this.maxX), 0); 
 this.destY = -Math.max(Math.min(destY, this.maxY), 0); 
 this.distY = this.destY - this.startY; 
 this.distX = this.destX - this.startX; 
 this.glideScrollPrep(this.destX, this.destY, dur); 
}
sscrollObj.prototype.glideScrollPrep = function(destX, destY, dur){
 this.slideDur =(typeof dur == 'number')? dur: sscrollObj.defaultSlideDur; 
 this.per = Math.PI/(2 * this.slideDur); this.sliding = true; 
 this.lyr = document.getElementById(this.lyrId); 
 this.startTime = new Date().getTime(); 
 this.timerId = setInterval(this.animString + ".doGlideScroll()",10); 
 this.on_glidescroll_start(this.startX, this.startY); 
}
sscrollObj.prototype.doGlideScroll = function(){
 var elapsed = new Date().getTime()- this.startTime; 
 if(elapsed < this.slideDur){
 var x = this.startX + Math.round(this.distX * Math.sin(this.per*elapsed)); 
 var y = this.startY + Math.round(this.distY * Math.sin(this.per*elapsed)); 
 this.shiftTo(x, y); 
 this.on_glidescroll(x, y); 
}else{
 clearInterval(this.timerId); this.timerId = 0; this.sliding = false; 
 this.shiftTo(this.destX, this.destY); 
 this.on_glidescroll(this.destX, this.destY); 
 this.on_glidescroll_stop(this.destX, this.destY); 
 
 if(this.distX &&(this.destX == 0 || this.destX == -this.maxX)
 || this.distY &&(this.destY == 0 || this.destY == -this.maxY)){
 this.on_glidescroll_end(this.destX, this.destY); 
}
}
}
sscrollObj.handleMouseWheel = function(id, delta){
 var wndo = sscrollObj.col[id]; 
 var x = wndo.x; 
 var y = wndo.y; 
 wndo.on_scroll_start(x,y); 
 var ny; 
 ny = 12 * delta + y 
 ny =(ny < 0 && ny >= -wndo.maxY)? ny:(ny < -wndo.maxY)? -wndo.maxY: 0; 
 wndo.shiftTo(x, ny); 
 wndo.on_scroll(x, ny); 
}
sscrollObj.doOnMouseWheel = function(e){
 var delta = 0; 
 if(!e)e = window.event; 
 if(e.wheelDelta){
 delta = e.wheelDelta/120; 
 if(window.opera)delta = -delta; 
}else if(e.detail){
 delta = -e.detail/3; 
}
 if(delta){
 sscrollObj.handleMouseWheel(this.id, delta); 
}
 if(e.preventDefault)e.preventDefault(); 
 e.returnValue = false; 
}
sscrollObj.GeckoTableBugFix = function(){}
function sgetLayerOffset(el, oCont, sOff){
 var off = "offset" + sOff.charAt(0).toUpperCase()+ sOff.slice(1); 
 var val = el[off]; 
 while((el = el.offsetParent)!= oCont)
 val += el[off]; 
 var clientOff = off.replace("offset", "client"); 
 if(el[clientOff])val += el[clientOff]; 
 return val; 
}
function scheckAuth(){
 var loc = window.location.hostname.toLowerCase(); 
}
sEvent.add(window, 'load', scheckAuth); 
swriteStyleSheet = function(file, screen){
 var css = '<link rel="stylesheet" href="' + file + '"'; 
 if(screen !== false){
 css += ' media="screen"'; 
}
 document.write(css + ' />'); 
}
function saddLinkCSS(file, screen){
 if(!document.createElement)return; 
 var el = document.createElement("link"); 
 el.setAttribute("rel", "stylesheet"); 
 el.setAttribute("type", "text/css"); 
 if(screen !== false){
 el.setAttribute("media", "screen"); 
}
 el.setAttribute("href", file); 
 document.getElementsByTagName('head')[0].appendChild(el); 
}
sscrollObj.prototype.setUpLoadLinks = function(controlsId){
 var wndoId = this.id; var el = document.getElementById(controlsId); 
 var links = el.getElementsByTagName('a'); 
 var cls, parts; 
 for(var i=0; links[i]; i++){
 cls = sscrollObj.get_DelimitedClass(links[i].className); 
 parts = cls.split('_'); 
 if(parts[0] == 'load' && parts[1] == wndoId && parts.length > 2){
 
 var lyrId = parts[2]; var horizId = parts[3]? parts[3]: null; 
 sEvent.add(links[i], 'click', function(wndoId, lyrId, horizId){
 return function(e){
 sscrollObj.col[wndoId].load(lyrId, horizId); 
 if(e && e.preventDefault)e.preventDefault(); 
 return false; 
}
}(wndoId, lyrId, horizId)); 
}
}
}
sscrollObj.prototype.setUpScrollControls = function(controlsId, autoHide, axis){
 var wndoId = this.id; var el = document.getElementById(controlsId); 
 if(autoHide && axis == 'v' || axis == 'h'){
 sscrollObj.handleControlVis(controlsId, wndoId, axis); 
 sScrollbar_Co.addEvent(this, 'on_load', function(){sscrollObj.handleControlVis(controlsId, wndoId, axis);}); 
 sScrollbar_Co.addEvent(this, 'on_update', function(){sscrollObj.handleControlVis(controlsId, wndoId, axis);}); 
}
 var links = el.getElementsByTagName('a'), cls, eType; 
 for(var i=0; links[i]; i++){
 cls = sscrollObj.get_DelimitedClass(links[i].className); 
 eType = sscrollObj.getEv_FnType(cls.slice(0, cls.indexOf('_'))); 
 switch(eType){
 case 'mouseover' : 
 case 'mousedown' : 
 sscrollObj.handleMouseOverDownLinks(links[i], wndoId, cls); 
 break; 
 case 'scrollToId': 
 sscrollObj.handleScrollToId(links[i], wndoId, cls); 
 break; 
 case 'scrollTo' : 
 case 'scrollBy': 
 case 'click': 
 sscrollObj.handleClick(links[i], wndoId, cls); 
 break; 
}
}
}
sscrollObj.handleMouseOverDownLinks = function(linkEl, wndoId, cls){
 var parts = cls.split('_'); var eType = parts[0]; 
 var re = /^(mouseover|mousedown)_(up|down|left|right)(_[\d]+)?$/; 
 if(re.test(cls)){
 var eAlt =(eType == 'mouseover')? 'mouseout': 'mouseup'; 
 var dir = parts[1]; var speed = parts[2] || null; 
 var deg =(dir == 'up')? 90:(dir == 'down')? 270:(dir == 'left')? 180: 0; 
 sEvent.add(linkEl, eType, function(e){sscrollObj.col[wndoId].initScrollVals(deg, speed);}); 
 sEvent.add(linkEl, eAlt, function(e){sscrollObj.col[wndoId].ceaseScroll();}); 
 if(eType == 'mouseover'){
 sEvent.add(linkEl, 'mousedown', function(e){sscrollObj.col[wndoId].speed *= 3;}); 
 sEvent.add(linkEl, 'mouseup', function(e){
 sscrollObj.col[wndoId].speed = sscrollObj.prototype.speed;}); 
}
 sEvent.add(linkEl, 'click', function(e){if(e && e.preventDefault)e.preventDefault(); return false;}); 
}
}
sscrollObj.handleScrollToId = function(linkEl, wndoId, cls){
 var parts = cls.split('_'); var id = parts[1], lyrId, dur; 
 if(parts[2]){
 if(isNaN(parseInt(parts[2]))){
 lyrId = parts[2]; 
 dur =(parts[3] && !isNaN(parseInt(parts[3])))? parseInt(parts[3]): null; 
}else{
 dur = parseInt(parts[2]); 
}
}
 sEvent.add(linkEl, 'click', function(e){
 sscrollObj.scrollToId(wndoId, id, lyrId, dur); 
 if(e && e.preventDefault)e.preventDefault(); 
 return false; 
}); 
}
sscrollObj.scrollToId = function(wndoId, id, lyrId, dur){
 var wndo = sscrollObj.col[wndoId]; 
 var el = document.getElementById(id); 
 if(el){
 if(lyrId){
 if(document.getElementById(lyrId)&& wndo.lyrId != lyrId){
 wndo.load(lyrId); 
}
}
 var lyr = document.getElementById(wndo.lyrId); 
 var x = sgetLayerOffset(el, lyr, 'left'); 
 var y = sgetLayerOffset(el, lyr, 'top'); 
 wndo.initScrollToVals(x, y, dur); 
}
}
sscrollObj.handleClick = function(linkEl, wndoId, cls){
 var wndo = sscrollObj.col[wndoId]; 
 var parts = cls.split('_'); var eType = parts[0]; 
 var dur_re = /^([\d]+)$/; var fn, re, x, y, dur; 
 
 switch(eType){
 case 'scrollTo' : 
 fn = 'scrollTo'; re = /^(null|end|[\d]+)$/; 
 x = re.test(parts[1])? parts[1]: ''; 
 y = re.test(parts[2])? parts[2]: ''; 
 dur =(parts[3] && dur_re.test(parts[3]))? parts[3]: null; 
 break; 
 case 'scrollBy': 
 fn = 'scrollBy'; re = /^(([m]?[\d]+)|null)$/; 
 x = re.test(parts[1])? parts[1]: ''; 
 y = re.test(parts[2])? parts[2]: ''; 
 if(!isNaN(parseInt(x))){
 x = -parseInt(x); 
}else if(typeof x == 'string'){
 x = x.indexOf('m')!=-1 ? x.replace('m', ''): x; 
}
 if(!isNaN(parseInt(y))){
 y = -parseInt(y); 
}else if(typeof y == 'string'){
 y = y.indexOf('m')!=-1 ? y.replace('m', ''): y; 
}
 dur =(parts[3] && dur_re.test(parts[3]))? parts[3]: null; 
 break; 
 case 'click': 
 var o = sscrollObj.getClickParts(cls); 
 fn = o.fn; x = o.x; y = o.y; dur = o.dur; 
 break; 
}
 if(x !== '' && y !== ''){
 if(x == 'end'){x = wndo.maxX;}
 if(y == 'end'){y = wndo.maxY;}
 if(x === 'null' || x === null){x = wndo.x;}
 if(y === 'null' || y === null){y = wndo.y;}
 x = parseInt(x); y = parseInt(y); 
 dur = !isNaN(parseInt(dur))? parseInt(dur): null; 
 
 if(fn == 'scrollBy'){
 sEvent.add(linkEl, 'click', function(e){
 sscrollObj.col[wndoId].initScrollByVals(x, y, dur); 
 if(e && e.preventDefault)e.preventDefault(); 
 return false; 
}); 
}else if(fn == 'scrollTo'){
 sEvent.add(linkEl, 'click', function(e){
 sscrollObj.col[wndoId].initScrollToVals(x, y, dur); 
 if(e && e.preventDefault)e.preventDefault(); 
 return false; 
}); 
}
}
}
sscrollObj.getClickParts = function(cls){
 var parts = cls.split('_'); 
 var re = /^(up|down|left|right)$/; 
 var dir, fn = '', dur, ar, val, x = '', y = ''; 
 if(parts.length >= 4){
 ar = parts[1].match(re); 
 dir = ar? ar[1]: null; 
 re = /^(to|by)$/; 
 ar = parts[2].match(re); 
 if(ar){
 fn =(ar[0] == 'to')? 'scrollTo': 'scrollBy'; 
}
 val = parts[3]; 
 re = /^([\d]+)$/; 
 dur =(parts[4] && re.test(parts[4]))? parts[4]: null; 
 switch(fn){
 case 'scrollBy' : 
 if(!re.test(val)){
 x = ''; y = ''; break; 
}
 switch(dir){
 case 'up' : x = 0; y = val; break; 
 case 'down' : x = 0; y = -val; break; 
 case 'left' : x = val; y = 0; break; 
 case 'right' : x = -val; y = 0; 
}
 break; 
 case 'scrollTo' : 
 re = /^(end|[\d]+)$/; 
 if(!re.test(val)){
 x = ''; y = ''; break; 
}
 switch(dir){
 case 'up' : x = null; y = val; break; 
 case 'down' : x = null; y =(val == 'end')? val: -val; break; 
 case 'left' : x = val; y = null; break; 
 case 'right' : x =(val == 'end')? val: -val; y = null; 
}
 break; 
}
}
 return{fn: fn, x: x, y: y, dur: dur}
}
sscrollObj.getEv_FnType = function(str){
 var re = /^(mouseover|mousedown|scrollBy|scrollTo|scrollToId|click)$/; 
 if(re.test(str)){
 return str; 
}
 return ''; 
}
sscrollObj.get_DelimitedClass = function(cls){
 if(cls.indexOf('_')== -1){
 return ''; 
}
 var whitespace = /\s+/; 
 if(!whitespace.test(cls)){
 return cls; 
}else{
 var classes = cls.split(whitespace); 
 for(var i = 0; classes[i]; i++){
 if(classes[i].indexOf('_')!= -1){
 return classes[i]; 
}
}
}
}
sscrollObj.handleControlVis = function(controlsId, wndoId, axis){
 var wndo = sscrollObj.col[wndoId]; 
 var el = document.getElementById(controlsId); 
 if((axis == 'v' && wndo.maxY > 0)||(axis == 'h' && wndo.maxX > 0)){
 el.style.visibility = 'visible'; 
}else{
 el.style.visibility = 'hidden'; 
}
}