
var ddimagepanner = {

	init:function($, $img, options, _top, _left){
		var s=options
		s.imagesize=[$img.width(), $img.height()]
		s.oimagesize=[$img.width(), $img.height()] //always remember image's original size
		s.pos=(s.pos=="center")? [-(s.imagesize[0]/2-s.wrappersize[0]/2), -(s.imagesize[1]/2-s.wrappersize[1]/2)] : [_left, _top] //initial coords of image

		// Tweaked due to odd behaviour, wouldnt floor.
		var _topTemp = s.pos[0]
		_topTemp = parseInt(_topTemp.replace("px","").replace("=",""));
		var _leftTemp = s.pos[1]
		_leftTemp = parseInt(_leftTemp.replace("px","").replace("=",""));		
		s.pos=[_topTemp, _leftTemp]
				
		$img.css({'position':'absolute', 'left':s.pos[0], 'top':s.pos[1]})
		this.dragimage($, $img, s)
	},

	dragimage:function($, $img, s){
		$img.mousedown(function(e){
			s.pos=[parseInt($img.css('left')), parseInt($img.css('top'))]
			var xypos=[e.clientX, e.clientY]
			$img.bind('mousemove.dragstart', function(e){
				var pos=s.pos, imagesize=s.imagesize, wrappersize=s.wrappersize
				var dx=e.clientX-xypos[0] //distance to move horizontally
				var dy=e.clientY-xypos[1] //vertically
				s.dragcheck={h: (wrappersize[0]>imagesize[0])? false:true, v:(wrappersize[1]>imagesize[1])? false:true}
				if (s.dragcheck.h==true) //allow dragging horizontally?
					var newx=(dx>0)? Math.min(0, pos[0]+dx) : Math.max(-imagesize[0]+wrappersize[0], pos[0]+dx) //Set horizonal bonds. dx>0 indicates drag right versus left
				if (s.dragcheck.v==true) //allow dragging vertically?
					var newy=(dy>0)? Math.min(0, s.pos[1]+dy) : Math.max(-imagesize[1]+wrappersize[1], pos[1]+dy) //Set vertical bonds. dy>0 indicates drag downwards versus up
				$img.css({left:(typeof newx!="undefined")? newx : pos[0], top:(typeof newy!="undefined")? newy : pos[1]})
				return false //cancel default drag action
			})
			return false //cancel default drag action
		})
		$(document).bind('mouseup', function(e){
			$img.unbind('mousemove.dragstart')
		})
	}
}


jQuery.fn.imgmover=function(options, _top, _left){
	var $=jQuery
	return this.each(function(){ //return jQuery obj
		if ( this.tagName != "IMG" ) {
			return true //skip to next matched element 
		}
		var $imgref=$(this)
		if ( parseInt(this.style.width)>0 && parseInt(this.style.height)>0 ) {//if image has explicit CSS width/height defined
			ddimagepanner.init($, $imgref, options, _top, _left)
		} else if (this.complete){ //account for IE not firing image.onload
			ddimagepanner.init($, $imgref, options, _top, _left)
		} else {
			$imgref.bind('load', function(){
				ddimagepanner.init($, $imgref, options, _top, _left)
			})
		}
	})
}





