/* Page Load Event Manager */
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

/* DOM Loaded Event Manager */
function addDOMLoadEvent(func) {
   if (!window.__load_events) {
      var init = function () {
          // quit if this function has already been called
          if (arguments.callee.done) return;
      
          // flag this function so we don't do the same thing twice
          arguments.callee.done = true;
      
          // kill the timer
          if (window.__load_timer) {
              clearInterval(window.__load_timer);
              window.__load_timer = null;
          }
          
          // execute each function in the stack in the order they were added
          for (var i=0;i < window.__load_events.length;i++) {
              window.__load_events[i]();
          }
          window.__load_events = null;
      };
   
      // for Mozilla/Opera9
      if (document.addEventListener) {
          document.addEventListener("DOMContentLoaded", init, false);
      }
      
      // for Internet Explorer
      /*@cc_on @*/
      /*@if (@_win32)
          document.write("<scr"+"ipt id=__ie_onload defer src=//0><\/scr"+"ipt>");
          var script = document.getElementById("__ie_onload");
          script.onreadystatechange = function() {
              if (this.readyState == "complete") {
                  init(); // call the onload handler
              }
          };
      /*@end @*/
      
      // for Safari
      if (/WebKit/i.test(navigator.userAgent)) { // sniff
          window.__load_timer = setInterval(function() {
              if (/loaded|complete/.test(document.readyState)) {
                  init(); // call the onload handler
              }
          }, 10);
      }
      
      // for other browsers
      window.onload = init;
      
      // create event function stack
      window.__load_events = [];
   }
   
   // add function to event stack
   window.__load_events.push(func);
}



var
// »ñÈ¡ÔªËØ
$ = function(element) {
 return (typeof(element) == 'object' ? element : document.getElementById(element));
},
// ÅÐ¶Ïä¯ÀÀÆ÷
brower = function() {
 var ua = navigator.userAgent.toLowerCase();
 var os = new Object();
 os.isFirefox = ua.indexOf ('gecko') != -1;
 os.isOpera = ua.indexOf ('opera') != -1;
 os.isIE = !os.isOpera && ua.indexOf ('msie') != -1;
 os.isIE7 = os.isIE && ua.indexOf ('7.0') != -1;
 return os;
},
// »ñÈ¡Êó±êÎ»ÖÃ
getXY = function (e) {
 var XY;
 if(brower().isIE) {
  //XY = new Array(event.clientX, event.clientY);
  var scrollPos;
  if (typeof window.pageYOffset != 'undefined') {
     scrollPos = {x : window.pageXOffset, y : window.pageYOffset};
  }else if(typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') {
     scrollPos = {x : document.documentElement.scrollLeft, y : document.documentElement.scrollTop};
  }else if(typeof document.body != 'undefined') {
     scrollPos = {x : document.body.scrollLeft, y : document.body.scrollTop};
  }
  XY = new Array(
   window.event.clientX + scrollPos.x - document.body.clientLeft,
   window.event.clientY + scrollPos.y - document.body.clientTop
  );
 }else{
  XY = new Array(e.pageX, e.pageY);
 }
 return XY;
},
// »ñÈ¡ÔªËØ×ø±ê
getCoords = function(node){
 var x = node.offsetLeft;
 var y = node.offsetTop;
 var parent = node.offsetParent;
 while (parent != null){
  x += parent.offsetLeft;
  y += parent.offsetTop;
  parent = parent.offsetParent;
 }
 return {x: x, y: y};
},
EndEvent = function(e) {
 e = e || window.event;
 e.stopPropagation && (e.preventDefault(), e.stopPropagation()) || (e.cancelBubble = true, e.returnValue = false);
},
// ÍÏ¶¯ÔªËØ
DragEle = function(obj, dObj, area, handler) {
 obj = $(obj);
 dObj = $(dObj);
 //obj.style.cursor = "move";
 
 obj.onmousedown = function(e) {
  var _tX, _tY, _sX, _sY, _mX, _mY
  var minX, minY, maxX, maxY;
  minX = area.minX==undefined ? 0 : area.minX;
  minY = area.minY==undefined ? 0 : area.minY;
  maxX = area.maxX==undefined ? _pageSize[0] : area.maxX;
  maxY = area.maxY==undefined ? _pageSize[1] : area.maxY;
  
  with(dObj) {
   // ¼ÇÂ¼µ±Ç°Î»ÖÃ
   style.position = 'absolute';
   _tX = offsetLeft;
   _tY = offsetTop;
   _sX = getXY(e)[0];
   _sY = getXY(e)[1];
  }
  if(dObj.setCapture) {
   dObj.setCapture();
  }else if(window.captureEvents) {
   window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
  }
  
  myAddEventListener(document, "selectstart", EndEvent);
  EndEvent(e);
  
  if(handler.down!=undefined) handler.down({x : _sX, y : _sY});
  
  document.onmousemove = function(e){
   // ÉèÖÃ¹ö¶¯ÌõÎ»ÖÃ
   _mX = _tX+getXY(e)[0]-_sX;
   _mY = _tY+getXY(e)[1]-_sY;
   _mX = _mX<minX ? minX : _mX;
   _mY = _mY<minY ? minY : _mY;
   _mX = _mX>maxX ? maxX : _mX;
   _mY = _mY>maxY ? maxY : _mY;
   with(dObj){
    style.left = _mX +'px';
    style.top = _mY +'px';
   }
   if(handler.move!=undefined) handler.move({x : _mX, y : _mY});
  };
  
  document.onmouseup = function() {
   if(dObj.releaseCapture) {
    dObj.releaseCapture();
   }else if(window.captureEvents) {
    window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
   }
   document.onmousemove = null;
   document.onmouseup = null;
   myRemoveEventListener(document, "selectstart", EndEvent);
   
   if(handler.up!=undefined) handler.up({x : _mX, y : _mY});
  }
 };
},
// ÊÂ¼þ²Ù×÷(¿É±£ÁôÔ­ÓÐÊÂ¼þ)
eventListeners = [],
findEventListener = function(node, event, handler){
 var i;
 for (i in eventListeners){
  if (eventListeners[i].node == node && eventListeners[i].event == event && eventListeners[i].handler == handler){
   return i;
  }
 }
 return null;
},
myAddEventListener = function(node, event, handler){
 if (findEventListener(node, event, handler) != null){
  return;
 }
 if (!node.addEventListener){
  node.attachEvent('on' + event, handler);
 }else{
  node.addEventListener(event, handler, false);
 }
 eventListeners.push({node: node, event: event, handler: handler});
},
removeEventListenerIndex = function(index){
 var eventListener = eventListeners[index];
 delete eventListeners[index];
 if (!eventListener.node.removeEventListener){
  eventListener.node.detachEvent('on' + eventListener.event,
  eventListener.handler);
 }else{
  eventListener.node.removeEventListener(eventListener.event,
  eventListener.handler, false);
 }
},
myRemoveEventListener = function(node, event, handler){
 var index = findEventListener(node, event, handler);
 if (index == null) return;
 removeEventListenerIndex(index);
},
cleanupEventListeners = function(){
 var i;
 for (i = eventListeners.length; i > 0; i--){
  if (eventListeners[i] != undefined){
   removeEventListenerIndex(i);
  }
 }
};


function simScroll(inits) {
 var _o = this;
 var _i = inits;
 if(typeof(_i) != "object" || _i._objFor==null || _i._objSimS==null){
  alert("simScroll³õÊ¼»¯Ê§°Ü¡£");
  return;
 }
 _o.init = function() {
  // ³õÊ¼»¯simScroll
  _o._objSimS  = _i._objSimS;   // ¹ö¶¯Ìõ¶ÔÏó
  _o._objFor  = _i._objFor;   // ¹ö¶¯¶ÔÏó
  _o._objSync  = _i. _objSync;   // Í¬²½¹ö¶¯¶ÔÏó
  _o._syncCount = typeof(_o._objSync)!="object" ? -1 : _o._objSync.length; // Í¬²½¹ö¶¯¶ÔÏó×ÜÊý
  
  // ³õÊ¼»¯µÄÊ±ºòÒþ²Ø¹ö¶¯Ìõ
  _o._objSimS.style.visibility = 'hidden';
  
  // ³õÊ¼»¯¿Ø¼þ
  var _objEle = _o._objSimS.getElementsByTagName("div");
  for(var i=0; i<_objEle.length; i++) {
   var _objTag = _objEle[i].getAttribute("tag");
   _objTag = _objTag.toLowerCase();
   if(_objTag=="simup")  _o._objUp = _objEle[i];
   if(_objTag=="simdown")  _o._objDown = _objEle[i];
   if(_objTag=="simarea")  _o._objArea = _objEle[i];
   if(_objTag=="simdrag")  _o._objDrag = _objEle[i];
  }
  
  // ³õÊ¼»¯¹ö¶¯Ìõ¸ß¶È
  _o._sclTH = _o._objUp==null ? 0 : _o._objUp.offsetHeight;   // Í·²¿¸ß¶È(ÏòÉÏ°´Å¥)
  _o._sclFH = _o._objDown==null ? 0 : _o._objDown.offsetHeight;  // µ×²¿¸ß¶È(ÏòÉÏ°´Å¥)
  _o._sclSP = 2;             // ¿Ø¼þ¼ä¸ô
  _o._sclPH = _o._objFor.offsetHeight/_o._objFor.scrollHeight;  // ¹ö¶¯¶ÔÏó¹ö¶¯±ÈÀý(OperaÏÂ _objForÉèÖÃpadding»áµ¼ÖÂ¼ÆËã²»ÕýÈ·.´ý½â¾ö)
  _o._sclPH = _o._sclPH>1 ? 1 : _o._sclPH;
  _o._sclBH = _o._objFor.offsetHeight-_o._sclTH-_o._sclFH;   // ¹ö¶¯ÇøÓò¸ß¶È
  _o._sclDH = parseInt((_o._sclBH-_o._sclSP*2)*_o._sclPH);   // ¹ö¶¯Ìõ¸ß¶È
  _o._sclDH = _o._sclDH<20 ? 20 : _o._sclDH;      // ¹ö¶¯Ìõ×îÐ¡¸ß¶È20
  _o._moveSH = _o._objFor.scrollHeight-_o._objFor.offsetHeight;  // ¹ö¶¯¶ÔÏó¿É¹ö¶¯¸ß¶È
  
  // ³õÊ¼»¯²ÎÊý
  _o._simToQD = 300; // ÇÐ»»µ½¿ìËÙ¹ö¶¯¼ä¸ô
  _o._simQS = 50; // ¿ìËÙ¹ö¶¯ËÙ¶È
  _o._simSLH = 20; // ¹ö¶¯ÐÐ¾à
  _o._simSH = 0; // ¹ö¶¯¾àÀë
  
  // ³õÊ¼»¯¼ÆÊ±Æ÷
  _o._simDoT = null; // setTimeout
  _o._simDoI = null; // setInterval
  
  // ÉèÖÃÍÏ¶¯·¶Î§
  _o._minX = 0;
  _o._minY = _o._sclTH+_o._sclSP;
  _o._maxY = _o._sclBH-_o._sclDH-_o._sclSP+_o._sclTH;
  _o._maxX = 0;
  
  // ÉèÖÃ¹ö¶¯ÇøÓò¡¢¹ö¶¯Ìõ¸ß¶È
  with(_o._objArea) {
   style.height = _o._sclBH +"px";
  }
  with(_o._objDrag) {
   style.position = "absolute";
   style.top = _o._minY +"px";
   style.width = _o._objSimS.offsetWidth +"px";
   style.height = _o._sclDH +"px";
  }
  
  // ³õÊ¼»¯ÊÂ¼þ
  // ÏòÉÏ
  if(_o._objUp!=null) {
   _o._objUp.onmouseover = function() {this.className = "simScrollUp_Over";}
   _o._objUp.onmouseout = function() {this.className = "simScrollUp"; _o.simStopScroll();}
   _o._objUp.onmousedown = function() {_o.simSetScroll(-1);}
   _o._objUp.onmouseup  = function() {_o.simStopScroll();}
  }
  // ÏòÏÂ
  if(_o._objDown!=null) {
   _o._objDown.onmouseover = function() {this.className = "simScrollDown_Over";}
   _o._objDown.onmouseout = function() {this.className = "simScrollDown"; _o.simStopScroll();}
   _o._objDown.onmousedown = function() {_o.simSetScroll(1);}
   _o._objDown.onmouseup = function() {_o.simStopScroll();}
  }
  // ¹ö¶¯Ìõ
  _o._objDrag.onmouseover = function() {
   this.className = "simScrollDrag_Over";
   DragEle(
    _o._objDrag,
    _o._objDrag,
    {minX : _o._minX, minY : _o._minY, maxX : _o._maxX, maxY : _o._maxY},
    {down : _o.simStartDrag, move : _o.simDragScroll, up : _o.simEndDrag}
   );
  }
  _o._objDrag.onmouseout = function() {if(!_o._isDrag) this.className = "simScrollDrag";}
  // ¹ö¶¯ÇøÓò
  _o._objArea.onmousedown = function(e) {_o.simPageScroll(e);}
  _o._objArea.onmouseup = _o._objArea.onmouseout = function() {_o.simStopScroll();}
  // ¹ö¶¯¶ÔÏó(ÓÃÀ´Í¬²½°ó¶¨µÄ¶ÔÏó)
  _o._objFor.onscroll = function() {_o.simPositioning();}
  if(_o._syncCount!=-1) myAddEventListener(_o._objFor, "scroll", _o.simSyncScroll);
  
  // Ìí¼ÓÊó±ê¹öÂÖ¼àÌý(³ýÁËIE.ÆäËûä¯ÀÀÆ÷Ò³Ãæ¶¼»á¸ú×ÅÅÜ...´ýÍêÉÆ)
  if (window.addEventListener) {
   _o._objFor.addEventListener('DOMMouseScroll', _o.simWheel, false);
   _o._objSimS.addEventListener('DOMMouseScroll', _o.simWheel, false);
  }
  myAddEventListener(_o._objFor, "mousewheel", _o.simWheel);
  myAddEventListener(_o._objSimS, "mousewheel", _o.simWheel);
  
  // ÉèÖÃ¹ö¶¯Ìõ³õÊ¼Î»ÖÃ¡£½â¾öË¢ÐÂµÄÊ±ºò»áµ¼ÖÂ¹ö¶¯Ìõ¸´Î»µÄÎÊÌâ¡£
  _o.simSetScroll(0);
  
  // ³õÊ¼»¯ÍêÁË.¿ÉÒÔÏÔÊ¾ÁË.
  _o._objSimS.style.visibility = 'visible';
 };
 
 // µã»÷¹ö¶¯ÇøÓò·­Ò³¹ö¶¯
 _o.simPageScroll = function(e) {
  // ¼ì²âÊÇ·ñµã»÷¹ö¶¯Ìõ
  var E = e || event;
  var _chkObj = E.target || E.srcElement;
  if(_chkObj==_o._objDrag) return;
  // »ñÈ¡Êó±êÎ»ÖÃÓëµ±Ç°¹ö¶¯ÌõÎ»ÖÃ½øÐÐ±È½Ï
  var _mouseY = getXY(e)[1];
  _mouseY = _mouseY-getCoords(_o._objSimS).y;
  var _objDragTop = parseInt(_o._objDrag.style.top);
  // ¹ö¶¯...
  if(_objDragTop>_mouseY) {
   _o.simSetScroll(-3);
  }else{
   _o.simSetScroll(3);
  }
 }
 
 // ÍÏ¶¯¹ö¶¯Ìõ¹ö¶¯
 _o.simDragScroll = function(coords) {
  _o._movePY = (coords.y-_o._sclTH-_o._sclSP)/(_o._maxY-_o._sclTH-_o._sclSP);
  _o._moveY = _o._moveSH*_o._movePY;
  _o._moveY = parseInt(_o._moveY);
  _o._objFor.scrollTop = _o._moveY;
 }
 
 // ¹ö¶¯¶ÔÏó¹ö¶¯
 _o.simDoScroll = function() {
  _o._objFor.scrollTop += _o._simSH;
 }
 // ¶¨Î»¹ö¶¯Ìõ
 _o.simPositioning = function() {
  if(_o._isDrag) return;
  _o._movePY = _o._objFor.scrollTop/_o._moveSH;
  _o._moveY = (_o._maxY-_o._sclTH-_o._sclSP)*_o._movePY;
  _o._moveY = parseInt(_o._moveY);
  _o._moveY += _o._sclTH+_o._sclSP;
  _o._objDrag.style.top = _o._moveY +"px";
 };
 
 // Í¬²½¹ö¶¯
 _o.simSyncScroll = function() {
  var _top = _o._objFor.scrollTop;
  for(var i=0; i<_o._syncCount; i++) {
   _o._objSync[i].scrollTop = _top;
  }
 }
 
 // ¿ªÊ¼ÍÏ¶¯¹ö¶¯Ìõ
 _o.simStartDrag = function() {
  _o._isDrag = true;
 }
 // ½áÊøÍÏ¶¯¹ö¶¯Ìõ
 _o.simEndDrag = function() {
  _o._isDrag = false;
  _o._objDrag.className = "simScrollDrag";
 }
 
 // ÇÐ»»¿ìËÙ¹ö¶¯
 _o.simDefer = function() {
  clearInterval(_o._simDoI);
  _o._simDoI = setInterval(function() {_o.simDoScroll();}, _o._simQS);
 };
 
 // Í£Ö¹¹ö¶¯
 _o.simStopScroll = function() {
  clearTimeout(_o._simDoT);
  clearInterval(_o._simDoI);
 };
 
 // set action
 _o.simSetScroll = function(_m) {
  var _doDefer = false;
  switch(_m) {
   case -3 : // up page
    _o._simSH = -(_o._objFor.offsetHeight-_o._simSLH);
    _doDefer = true;
    break;
   case -2 : // up scroll
    _o._simSH = -_o._simSLH*3;
    break;
   case -1 : // up push
    _o._simSH = -_o._simSLH*3;
    _doDefer = true;
    break;
   case 0 : // set scroll position
    _o._simSH = 0;
    _o.simPositioning();
    return;
    break;
   case 1 : // down push
    _o._simSH = _o._simSLH*3;
    _doDefer = true;
    break;
   case 2 : // down scroll
    _o._simSH = _o._simSLH*3;
    break;
   case 3 : // down page
    _o._simSH = _o._objFor.offsetHeight-_o._simSLH;
    _doDefer = true;
    break;
  }
  
  _o.simDoScroll();
  if(_doDefer) {
   clearTimeout(_o._simDoT);
   _o._simDoT = setTimeout(_o.simDefer, _o._simToQD);
  }
 };
 
 // mouse scroll
 _o.simWheel = function(e){
  var delta = 0;
  e = window.event || e;
  if (e.wheelDelta) { // IE or Opera.
   delta = e.wheelDelta/120;
   // ÔÚOpera9ÖÐ£¬ÊÂ¼þ´¦Àí²»Í¬ÓÚIE
   //if (window.opera) delta = -delta;
  } else if (e.detail) { //  ¼æÈÝMozilla.
   delta = -e.detail/3;
  }
  
  if(delta>0) {
   _o.simSetScroll(-2);
  }else{
   _o.simSetScroll(2);
  }
  
  EndEvent(e);
 };
}



function  attachDropDownTop() {
 var simScrollTest4 = new simScroll({
  _objFor : $("simTestContent4"),
  _objSimS  : $("simScrollTest4"),
  _objSync : new Array($("simTestContent4"))
 });
 simScrollTest4.init();

}


//perload images for Navigation --- added by Brain.Shi
MM_preloadImages('/images/navi_left.gif','/images/navi_right.gif');
