(function($) {
	$.fn.CSpreview = function(max_val, attr) {

		var attr = (attr)?attr:'width';
		var doc = $(document);
		var body = $('body');

		if($('.cs-pic-preview').length !=1) {
			body.append('<div class="cs-pic-preview"><img id="cslargepic" class="cs-large-pic" src="" alt="" width="" height="" /><br /><div class="cs-pic-loader"></div></div>');
		}
		var $loader = $('.cs-pic-loader');
		var $large_box = $('.cs-pic-preview');
		var $cs_pic = $('.cs-large-pic');
		var cs_pic = document.getElementById('cslargepic');

		var awidth = doc.width();
		var aheight = doc.height();
		 $(window).resize(function() {
				awidth = doc.width();
				aheight = doc.height();
		})

		return this.each(function(i){

			var $this = $(this);
			var pic_parent = $this.parent();
			var rel = pic_parent.attr('rev').match(/[^,]+/g);
			var pic_src = rel[2];

			if(max_val && attr=='width') {
				var pic_width = (rel[0]<=max_val)?rel[0]:max_val;
				var pic_height = (rel[0]<=max_val)?rel[1]:parseInt(max_val/rel[0]*rel[1]);
			}
			else if(max_val && attr=='height') {
				var pic_width = (rel[1]<=max_val)?rel[0]:parseInt(max_val/rel[1]*rel[0]);
				var pic_height = (rel[1]<=max_val)?rel[1]:max_val;
			}
			else {
				var pic_width = rel[0];
				var pic_height = rel[1];
			}
	
			$this.mousemove(function(e) {
				if(awidth-e.pageX-60>pic_width) {
					$large_box.css('left', e.pageX+50);
				}
				else {
					$large_box.css('left', e.pageX-50-pic_width);
				}
			})

			function check() {
				if(cs_pic.readyState != 'complete')
					setTimeout(check, 1000);
				else {
					$loader.hide();
					$cs_pic.css('opacity', 1);
				}
			}

			$this.hover(function(e) {
				$cs_pic.attr('src', pic_src).attr('width', pic_width).attr('height', pic_height);
				if($.browser.msie) {
					$cs_pic.css('opacity', 0);
					check();
				}
				$cs_pic.load(function() {
					$loader.hide();
				});

				var top = e.pageY-e.pageY/aheight*pic_height;
				$large_box.css('top', top);
				$large_box.show();
			},
			function() {
				$large_box.hide();
			});
		});
	}
})(jQuery);
