(function($) {
	var pluginName = "galleryThumbNail";
	$.fn[pluginName] = function(config) {
		var defaults = {
			hostName : "http://juhwan.jp",		/* サーバ名 */
			dir : "/images/gallery/image/",						/* 表示対象ディレクトリ */
			numThumbs : 5,										/* 表示サムネール数 */
			serviceName : "gallery.jsp",						/* ギャラリーリストサービス名 */
			thumbViewer : "thumbViewer.jsp",					/* サムネールビューワ名 */
			thumbImageClass : "galleryThumbImage",				/* サムネール画像DIVのクラス名 */
			width : 212,										/* サムネール画像width */
			height : 109,										/* サムネール画像height */

			click : function () {}				/* クリック時実行関数 */
		};
		/* デフォルトをパラメータでオーバーライド */
		var opts = $.extend( defaults , config);

		var elements = this;
		// サムネールの初期化
		getThumbNails(opts , function(data) {
			setThumbView( elements , data , opts);
		} );
		return this;
	};
	/**
	 * サムネールを指定されたelementにappendする
	 * @param 対象HTMLエレメント
	 * @param imgList サーバから取得したimgList変数
	 * @param opts オプション変数
	 */
	function setThumbView( elements , imgList ,opts) {
		if( imgList && imgList.length > 0 ) {
//			elements.html('ABCDEF');
			var recClass = opts.thumbImageClass;
			for( var i = 0 ; i < imgList.length && i < opts.numThumbs ; i++ ) {
				var imagePath = opts.hostName + "/" + opts.thumbViewer + "?org=" + opts.dir + imgList[i].imgName + ".jpg" + "&w=" + opts.width + "&h=" + opts.height;
				var imgDiv = $("<div></div>");
				imgDiv.addClass(opts.thumbImageClass);
				imgDiv.css('background-image',"url('" + imagePath + "')");
				imgDiv.attr('id' , imgList[i].imgName );
				elements.append(imgDiv);
			}
			$('.' + opts.thumbImageClass).click( opts.click );
		}
		return elements;
	}
	/**
	 * サーバを呼び出し、サムネールのリストを取得する.
	 * @param config 初期設定
	 * @param cb サーバ呼び出し完了時に呼び出されるコールバック関数
	 */
	function getThumbNails( config ,  cb) {
		if( !cb || !$.isFunction(cb) ) return; // NO CALLBACK
		var reqUrl = config.hostName + "/" + config.serviceName;
		var data = { dir : config.dir };

		var ret = jQuery.ajax({
			url: reqUrl ,
			dataType : 'jsonp',
			type : 'GET',
			data : data,
			complete : function() {
			} ,
			success : function(data,status) {
				if( status == 'success' ) {
					cb.apply(this, arguments);
				} else {
					alert("ERROR OCCURED!");
				}
			} ,
			error : function( req , status , ex ) {
				alert(ex);
			}
		});
		return this;
	};
})(jQuery);
