(function($) {

	$.fn.imagePopupGadget = function(options) {

		var settings = {
			duration : 500
			,top:100
			,cookieName:"imagePopupGadget"/*set as random for constant showing*/
			,imageStyleName:"popupGadgetImage"
			,closeOuterStyleName:"popupGadgetCloseOuter"
			,closeStyleName:"popupGadgetClose"
			,showClose:true
			,link:""
			,linkTarget:"_blank"
		};
		if (options) {
			$.extend(settings, options);
		}
		return new ImagePopupGadget(settings);

	};
})(jQuery);
ImagePopupGadget = function(options) {
	var scope = this;
	var img;
	var cookieLib=new jslt.CokiesLib();
	this.init = function() {
		if(options.cookieName!="random" && cookieLib.readCookie(options.cookieName)!=null){
			return;
		}
		img = $("<img/>").attr("src", options.src)
		.addClass(options.imageStyleName)
		.css("position", "absolute")
		.css("z-index", 1000)
		.css("top", "-1000px")
		.load(scope.onLoaded)
		.click(scope.hide)
		.appendTo(document.body);
	}
	this.onLoaded = function(e) {
		var targTop=$(e.target)[0].height;
		var targLeft=($(document).width()-$(e.target)[0].width)/2
		img.css("top", -targTop+"px").css("left", targLeft+"px").animate({top:options.top},options.duration,scope.animationComplete);
	}
	var closeElement;
	this.animationComplete=function(){
		if(options.showClose){
			closeElement=$("<div/>")
			.addClass(options.closeOuterStyleName)
			.css("position", "absolute")
			.css("z-index", img.css("z-index")+1)
			.css("left", img.offset().left+img[0].width)
			.appendTo(document.body);
			var closeBtn=$("<div/>")
			.addClass(options.closeStyleName)
			.css("position", "absolute")
			.css("cursor","pointer")
			.click(scope.hide)
			.appendTo(closeElement);
			closeElement
			.css("top", img.offset().top-closeBtn.height());
		}
		if(options.link!=""){
			var link=$("<a/>")
			.attr("href",options.link)
			.attr("target",options.linkTarget);
			img.wrap(link)
		}
	}
	this.hide=function(){
		cookieLib.setCookie(options.cookieName,"true")
		if(options.showClose){
			closeElement.remove()
		}
		img.fadeOut()
	}
	this.init()
}
