/*!
 * Copyright goodsmore <http://goodsmore.net/>
 * version 0.95
 * Dual licensed under the MIT or GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 */

/*!
 * オプションの使用例
 * var ArticleId = $.getArticleId() ;
 * $('#moshimo_sozai').getSozai( ArticleId, {
 * 	width : 500 , 
 * 	addclass: 'item_sozai',
 * 	duration: 1500,
 * 	preShow:function( el ){
 * 		alert( '素材表示するね ちょっと待ってね♪' ) ;
 *  	},
 * 	onAfter:function( el ){
 * 		alert( 'やった 素材表示できたよ♪' ) ;
 *  	}
 * });
 * 
 * クロスドメインで利用する場合の javascriptコード例
 * var ArticleId = $.getArticleId() ;
 * $( '#moshimo_sozai' ).getSozai( ArticleId, { password:'パスワード' , ajaxUrl:'http://www.example.jp/get_sozai/' });
 */

(function($) {
	$.extend({
		getUrlParameters: function(url){
			var vars = [], hash;
			var hashes = url.slice(url.indexOf('?') + 1).split('&');
			for( var i = 0; i < hashes.length; i++ ){
				hash = hashes[i].split('=');
				vars.push( hash[0] );
				vars[hash[0]] = hash[1];
			}
			return vars;
		},
		getUrlParameter: function(url,name){
			return $.getUrlParameters(url)[name];
		},
		getArticleId: function(){
			var article_id = 0
		 	var url = $( 'a[ href ^= "http://www.moshimo.com/cart/add?"]' ).attr( 'href' ) || '' ;
			if ( url.indexOf( 'article_id=' ) !== -1 ) article_id = parseInt( $.getUrlParameter( url, 'article_id' ) ) ;
			return article_id ;
		}
	});

	$.fn.reSize = function( maxwidth ,o ){
		var defaults = {
			bindLoad: true ,
			onAfter: null
		};
		var option = $.extend( {},defaults, o ) ;
		var _resize = function( el ) {
			var width = el.width() ;
			var height = el.height() ;
			if ( width > maxwidth ){
				var showsize = maxwidth / width ;
				width  = width * showsize ;
				height = height * showsize ;
			}
			var style = ( width == 0 ) ? { 'width': maxwidth } : { 'width': width ,'height': height } ;
			el.attr( style ) ;
			if( $.isFunction( option.onAfter ) ) option.onAfter.call( this, el ) ;
		} ;
		return this.each( function(){
			var el = $( this ) ;
			switch( option.bindLoad ) {
				case true:
					el.bind( 'load', function() {
						_resize( el ) ;
					});
					break;
				case false :
					_resize( el ) ;
					break;
			}
			return ;
		}) ;
	};
	$.fn.getSozai = function( params ){
		var article_id;
		var o;
		var file_name = 'jquery.get_sozai.js' ;
		var defaults = {
			width: null,
			addclass: null,
			duration: null,
			preShow: null,
			onAfter: null,
			password: '',
			ajaxUrl: '',
			json: null
		};
		for ( i= 0; i <= 1; i++ ) {
			if ( typeof arguments[i] =='object' ) o = arguments[i] ;
			else if ( typeof arguments[i] =='number' ) article_id = parseInt( arguments[i] ) ;
		}
		var option = $.extend( {},defaults, o ) ;
 		var src = ( option.ajaxUrl == '' ) ? $( 'script[ src *= "' + file_name + '"]' ).attr( 'src' ) : '' ;
		var base_url = option.ajaxUrl || src.slice( 0, src.indexOf( file_name ) ) ;
		var url = base_url + 'ajax_load.php';
		var dataType = ( option.password == '' ) ? 'json' : 'jsonp' ;
		var get_article_id = function( e ) {
			var article_id = 0
			var defined = $( e ).attr( 'id' ) || '' ;
			var id = ( defined !== '' ) ? defined.split( '_' ) : '' ;
			article_id = ( defined !== '' ) ? parseInt( id[1] ) : 0 ;
			return article_id ;
		} ;
		var showSozai = function ( el, json ) {
			var width = parseInt( option.width ) || parseInt( json.width ) ;
			var addclass = option.addclass || json.addclass ;
			var duration = parseInt( option.duration ) || parseInt( json.duration ) ;
			if( $.isFunction( option.preShow ) ) option.preShow.call( this, el ) ;
			el
				.html( json.sozai )
				.addClass( addclass ) ;
			var images = $( '#[ id ^= "' + json.sozai_id + '" ]', el ) ;
			var size = images.size() ;
			images.hide().wrap( '<div></div>' ) ;
			$.each( images, function( i, value ){
				$( this ).reSize( width, {
					onAfter:function( sozaj ){
						sozaj.fadeIn( duration, function () {
							if( ( i + 1 ) == size ) {
								if( $.isFunction( option.onAfter ) ) option.onAfter.call( this, el, images ) ;
							}
							
						}) ;
					}
				});
			});
			return ;
		} ;
		return this.each( function(){
			var el = $( this ) ;
			switch( $.isPlainObject( option.json ) ) {
				case true:
					showSozai( el, option.json ) ;
					break;
				case false :
					var id = article_id || get_article_id( this ) ;
					if ( id > 0 ){
						var parameter = 'id=' + id ;
						if ( dataType == 'jsonp' ) parameter = parameter + '&password=' + encodeURIComponent( option.password ) + '&host=' + encodeURIComponent( location.hostname ) ;
						var successCallback = function ( json, status ) {
							if ( typeof json == 'string' ) alert ( json ) ;
							if ( status !== 'error' && json.sozai ) showSozai( el, json ) ;
						} ;
					    $.ajax({ type: 'GET', url: url, data: parameter, async : true, dataType : dataType, global: false, success : successCallback }) ;
					}
					break;
			}
			return ;
		}) ;
	};
})(jQuery);

