 /*   
 //居中滚动插件
 */
jQuery.fn.extend({
        // 
        getWindowSize: function(){
            if($.browser.opera){
            
                return {width: window.innerWidth, height: window.innerHeight};
            }
            return {width: $(window).width(), height: $(window).height()};
            
        },

        // mainfunction
        scrollCenter: function(options){
            // extend 
            var op = $.extend({z: 9999}, options);


            // append document.body & set style
            var windowSize = this.getWindowSize();
            this.appendTo(document.body).css({
                'position': 'absolute',
                'z-index': op.z,
                'top': (windowSize.height - this.height())/2+$(window).scrollTop() - 50 + 'px',
                'left': (windowSize.width - this.width())/2+$(window).scrollLeft() + 'px'
            });

            // save
            var bodyScrollTop =  $(document).scrollTop();
            var bodyScrollLeft =  $(document).scrollLeft();
            var movedivTop = this.offset().top;
            var movedivLeft = this.offset().left;

            var thisjQuery = this;

            // scroll
            $(window).scroll(function(e){
                var tmpBodyScrollTop = $(document).scrollTop();
                var tmpBodyScrollLeft = $(document).scrollLeft();


                movedivTop += tmpBodyScrollTop - bodyScrollTop;
                movedivLeft += tmpBodyScrollLeft - bodyScrollLeft;
                
                bodyScrollTop = tmpBodyScrollTop;
                bodyScrollLeft = tmpBodyScrollLeft;


                // animate
                thisjQuery.stop().animate({'top': movedivTop + 'px','left': movedivLeft + 'px'});
            });


            // resize
            $(window).resize(function(){
                var windowSize = thisjQuery.getWindowSize();
                movedivTop = (windowSize.height - thisjQuery.height())/2+$(document).scrollTop();
                movedivLeft = (windowSize.width - thisjQuery.width())/2+$(document).scrollLeft();


                thisjQuery.stop().animate({
                    'top': movedivTop- 50 + 'px',
                    'left': movedivLeft + 'px'
                });
            });

            return this;
        }
    });
    
 /*   
 //拖动插件
 */
    (function($) {
   $.extend($.fn, {
       getCss: function(key) {
           var v = parseInt(this.css(key));
           if (isNaN(v))
               return false;
           return v;
       }
   });
   $.fn.Drags = function(opts) {
       var target = null;
       var dragData = {};
       var ps = $.extend({}, $.fn.Drags.defaults, opts);
       var dragndrop = {
           drag: function(e) {
               target.css({
                   left: dragData.left + e.pageX - dragData.offLeft,
                   top: dragData.top + e.pageY - dragData.offTop
               });
               dragData.onMove(e);
           },
           drop: function(e) {
               target.css({ 'opacity': dragData.oldOpacity });
               dragData.onDrop(e);
               $(document).unbind('mousemove', dragndrop.drag).unbind('mouseup', dragndrop.drop);
           }
       }
       return this.each(function() {
           var me = this;
           var handle = (typeof ps.handle == 'string' ? $(ps.handle) : ps.handle);
           handle.bind('mousedown', { e: me }, function(s) {
               target = $(s.data.e);
               var oldPosition = {};
               if (target.css('position') != 'absolute') {
                   try {
                       target.position(oldPosition);
                   } catch (ex) { }
                   target.css('position', 'absolute');
               }
               dragData = {
                   left: oldPosition.left || target.getCss('left') || 0,
                   top: oldPosition.top || target.getCss('top') || 0,
                   width: target.width() || target.getCss('width'),
                   height: target.height() || target.getCss('height'),
                   offLeft: s.pageX,
                   offTop: s.pageY,
                   oldOpacity: target.getCss('opacity') || 1,
                   onMove: ps.callback.onMove,
                   onDrop: ps.callback.onDrop
               }
               target.css('opacity', ps.opacity);
               $(document).mousemove(dragndrop.drag).mouseup(dragndrop.drop);
           });
       });
   }
   $.fn.Drags.defaluts = {
       zIndex: 20,
       opacity: .7,
       handle: this,
       callback: {
           onMove: function() { },
           onDrop: function() { }
       }
   }
})(jQuery);

/*
offset
*/
jQuery.fn.offset = function(options, returnObject) {
var x = 0, y = 0, elem = this[0], parent = this[0], sl = 0, st = 0, options = jQuery.extend({ margin: true, border: true, padding: false, scroll: true }, options || {});
do {
     x += parent.offsetLeft || 0;
     y += parent.offsetTop     || 0;

     // Mozilla and IE do not add the border
     if (jQuery.browser.mozilla || jQuery.browser.msie) {
      // get borders
      var bt = parseInt(jQuery.css(parent, 'borderTopWidth')) || 0;
      var bl = parseInt(jQuery.css(parent, 'borderLeftWidth')) || 0;

      // add borders to offset
      x += bl;
      y += bt;

      // Mozilla removes the border if the parent has overflow property other than visible
      if (jQuery.browser.mozilla && parent != elem && jQuery.css(parent, 'overflow') != 'visible') {
       x += bl;
       y += bt;
      }
     }

     var op = parent.offsetParent;
     if (op && (op.tagName == 'BODY' || op.tagName == 'HTML')) {
      // Safari doesn't add the body margin for elments positioned with static or relative
      if (jQuery.browser.safari && jQuery.css(parent, 'position') != 'absolute') {
       x += parseInt(jQuery.css(op, 'marginLeft')) || 0;
       y += parseInt(jQuery.css(op, 'marginTop'))     || 0;
      }

      // Exit the loop
      break;
     }

     if (options.scroll) {
      // Need to get scroll offsets in-between offsetParents
      do {
       sl += parent.scrollLeft || 0;
       st += parent.scrollTop     || 0;

       parent = parent.parentNode;

       // Mozilla removes the border if the parent has overflow property other than visible
       if (jQuery.browser.mozilla && parent != elem && parent != op && parent.style && jQuery.css(parent, 'overflow') != 'visible') {
        y += parseInt(jQuery.css(parent, 'borderTopWidth')) || 0;
        x += parseInt(jQuery.css(parent, 'borderLeftWidth')) || 0;
       }
      } while (parent != op);
     } else {
      parent = parent.offsetParent;
     }
} while (parent);

if ( !options.margin) {
     x -= parseInt(jQuery.css(elem, 'marginLeft')) || 0;
     y -= parseInt(jQuery.css(elem, 'marginTop'))     || 0;
}

// Safari and Opera do not add the border for the element
if ( options.border && (jQuery.browser.safari || jQuery.browser.opera) ) {
     x += parseInt(jQuery.css(elem, 'borderLeftWidth')) || 0;
     y += parseInt(jQuery.css(elem, 'borderTopWidth'))     || 0;
} else if ( !options.border && !(jQuery.browser.safari || jQuery.browser.opera) ) {
     x -= parseInt(jQuery.css(elem, 'borderLeftWidth')) || 0;
     y -= parseInt(jQuery.css(elem, 'borderTopWidth'))     || 0;
}

if ( options.padding ) {
     x += parseInt(jQuery.css(elem, 'paddingLeft')) || 0;
     y += parseInt(jQuery.css(elem, 'paddingTop'))     || 0;
}

// Opera thinks offset is scroll offset for display: inline elements
if (options.scroll && jQuery.browser.opera && jQuery.css(elem, 'display') == 'inline') {
     sl -= elem.scrollLeft || 0;
     st -= elem.scrollTop     || 0;
}

var returnValue = options.scroll ? { top: y - st, left: x - sl, scrollTop:     st, scrollLeft: sl }
            : { top: y, left: x };

if (returnObject) { jQuery.extend(returnObject, returnValue); return this; }
else                 { return returnValue; }
};
