//ロールオーバー設定
(function($){
	var name_space = 'rollover';

	$(function (){
		$.fn[name_space]();
	});

	$.fn[name_space] = function(options){
		//いったん退避
		var elements = this;
		//設定
		var settings = $.extend({
			selector: '.'+name_space,
			postfix: '_on'
		}, options);
		//初期化
		$(settings.selector).each(function(){
			this.originalSrc = $(this).attr('src');
			this.rolloverSrc = this.originalSrc.replace(/(\.gif|\.jpg|\.png)$/, settings.postfix+"$1");
			this.rolloverImg = new Image;
			this.rolloverImg.src = this.rolloverSrc;
		});
		//ロールオーバー設定
		$(settings.selector).hover(function(){
			$(this).attr('src',this.rolloverSrc);
		},function(){
			$(this).attr('src',this.originalSrc);
		});
		//method chain
		return this;
	};
})(jQuery);


//グローバルナビ設定
(function($){
	var name_space = 'navigation';

	$(function (){
		$.fn[name_space].selflink();
		$.fn[name_space].rollover();
	});

	$.fn[name_space] = {
		// URI解析
		Uri: function(path){
			this.originalPath = path;
			this.absolutePath = (function(){
				var e = document.createElement('span');
				e.innerHTML = '<a href="' + path + '" />';
				return e.firstChild.href;
			})();
			var fields = {'Username' : 4, 'Password' : 5, 'Port' : 7, 'Protocol' : 2, 'Host' : 6, 'Pathname' : 8, 'URL' : 0, 'Querystring' : 9, 'Fragment' : 10};
			var regex = /^((\w+):\/\/)?((\w+):?(\w+)?@)?([^\/\?:]+):?(\d+)?(\/?[^\?#]+)?\??([^#]+)?#?(\w*)/;
			var r = regex.exec(this.absolutePath);
			for(var f in fields){
				if(typeof r[fields[f]] != 'undefined'){
					this[f] = r[fields[f]];
				}
			}
		},
		//リンク
		selflink: function (options) {
			var settings = $.extend({
				selector: '.'+name_space+' a[href]',
				selfLinkClass: 'current',
				parentsLinkClass: 'parentsLink',
				postfix: '_on'
			}, options);
			
			$(settings.selector).each(function(){
				var href = new $.fn[name_space].Uri(this.getAttribute('href'));
				var setImgFlg = false;
				if((href.absolutePath.replace("index.html","").replace("index.php","") == location.href.replace("index.html","").replace("index.php","")) && !href.Fragment){
					//そのページ
					$(this).addClass(settings.selfLinkClass);
					$(this).find('img').each(function(){
						this.originalSrc = $(this).attr('src');
						this.currentSrc = this.originalSrc.replace(/(\.gif|\.jpg|\.png)/, settings.postfix+"$1");
						$(this).attr('src',this.currentSrc);
					});
					$(this).replaceWith($(this).html());
				}else if (0 <= location.href.search(href.absolutePath)){
					//カテゴリトップへ
					$(this).addClass(settings.parentsLinkClass);
					$(this).find('img').each(function(){
						this.originalSrc = $(this).attr('src');
						this.currentSrc = this.originalSrc.replace(/(\.gif|\.jpg|\.png)/, settings.postfix+"$1");
						$(this).attr('src',this.currentSrc);
					});
				}
			});
		},
		//ロールオーバー
		rollover: function(options) {
			var settings = $.extend({
				groupSelector: '.'+name_space+' a img',
				postfix: '_on'
			}, options);
			$(settings.groupSelector).filter(isNotCurrent).each(function(){
				this.originalSrc = $(this).attr('src');
				this.rolloverSrc = this.originalSrc.replace(/(\.gif|\.jpg|\.png)$/, settings.postfix+"$1");
				this.rolloverImg = new Image;
				this.rolloverImg.src = this.rolloverSrc;
			});
			//ロールオーバー設定
			$(settings.groupSelector).filter(isNotCurrent).hover(function(){
				$(this).attr('src',this.rolloverSrc);
			},function(){
				$(this).attr('src',this.originalSrc);
			});
			//フィルタ
			function isNotCurrent(i){
				return Boolean(!this.currentSrc);
			}
		}
	};
})(jQuery);
