(function($) {
	// ファイル名置換
	$.replace = function(src, before, after) {
		var re = new RegExp('(.*)?' + before + '(.*)?');
		return src.replace(re, '$1' + after  + '$2');
	}
	
	// 背景位置取得
	/*
		複数の要素の値は取れません
		呼び出し元でイテレートする必要があります
	*/
	$.fn.getBgPos = function() {
		// IEはプロパティ名が違うので分岐
		var pos = [];
		var self = $(this);
		if($.browser.msie) {
			pos = [self.css('background-position-x'), self.css('background-position-y')];
		} else {
			pos = self.css('background-position').split(" ");
		}
		return pos;
	}
	
	// ロールオーバー
	$.fn.roll = function(s0, s1) {
		return this.each(function() {
			if (!this.src) return;
			var s = [];
			s[0] = s0 || '_out';
			s[1] = s1 || '_over';
			$(this).hover(
				function() {this.src = $.replace(this.src, s[0], s[1])},
				function() {this.src = $.replace(this.src, s[1], s[0])}
			);
		});	
	}
	
	// 背景色ロールオーバー
	/*
		siblingsがtrueのときは、自分がhover時に兄弟要素もロールオーバーする（テーブル行毎にロールオーバーするときなど）
	*/
	$.fn.rollBgColor  = function(after, before, siblings) {
		if (!after) return this;
		return this.each(function() {
			var self   = $(this);
			var target = (!siblings) ? self : self.siblings().andSelf(); 
			var before = before || self.css('background-color');
			self.hover(
				function(){target.css('background-color', after)},
				function(){target.css('background-color', before)}
			);
		});
	}
	
	// 背景画像ロールオーバー（背景画像スライド）
  $.fn.slide = function() {
    return this.each(function(){
			var self = $(this);
			var h = self.height();
			var p = self.getBgPos();
			self.hover(
				function(){self.css('background-position', p[0] + ' -' + h + 'px')},
				function(){self.css('background-position', p[0] + ' ' + p[1])}
			);
    });
  }
	
	// ブロックレベルで高さを揃える
	/*
		設定クラスのhfクラスをもつ子孫要素の高さを揃える（最もheightが大きいものに揃う）。
		hfがない場合は、子要素が対象となる。
	*/
	$.fn.heightfix = function() {
		var self = this;
		return this.each(function(){
			var heights = [];
			var targets = self.find(".hf");
			if (targets.length == 0) targets = self.children();
			targets.each(function() {
				$(this).css('height','auto');
				heights.push($(this).height());
			});
			heights.sort(function(a, b){return b - a});
			targets.height(heights[0]);
		});
	}
})(jQuery);


if (typeof GMD == 'undefined') GMD = {};

// キーワード検索
GMD.KeywordSearch = {};
GMD.KeywordSearch.setup = function(ks) {
  var ks = ks || $('.keywordSearch');
  if (ks.length == 0) return;
	
	setToggleBg();
	setToggleScope();
	
	function setToggleBg() {
    var input = ks.find(':text.keyword');
    if (input.length == 0) return;
    input.each(function() {
      var self = $(this);
      var img = self.css('background-image');
      if (self.val().length > 0) self.css('background-image','none');
      self.focus(function(){self.css('background-image', 'none')});
      self.blur(function(){
        if (self.val().length == 0) self.css('background-image', img);
      });
    });
  }
  
  function setToggleScope() {
    var li = ks.find('.scope li').not('.disable');
    if(ks.find('.scope').length == 0) return;
    li.find(':checked').each(function(){toggleCheck($(this).parent(li))}); // ロード時にチェックされている方の画像を切り替える
    li.click(function(){toggleCheck($(this))});
    
    function toggleCheck(node) {
      node.siblings().each(function(){toggleRadio($(this).children('img'), true)}); // 全てのチェックをはずす
      toggleRadio(node.children('img')); // クリックした方のチェックを入れる
      
      function toggleRadio(elem, uncheck) {
        // 画像切替
        var key = (!uncheck) ? ['_unchk', '_chked'] : ['_chked', '_unchk'];
        elem.attr('src', function(){return $.replace(elem.attr('src'), key[0], key[1])});
        
        // ラジオボタン切替
        var radio = elem.siblings(':radio');
        if (!uncheck) { radio.attr('checked', 'checked');
        } else {
          radio.removeAttr('checked');
        }
        
        // 画像の兄弟にパンくずがあれば、色を切り替える（詳細検索で使用）
        if (elem.siblings('.breadcrumbs').length >= 1) {
          var color = (!uncheck) ? '#666' : '#b0b0b0';
          elem.siblings('.breadcrumbs').css('color', color);
        }
      }
    }
  }
}

// 詳細検索
GMD.DetailSearch = {};
GMD.DetailSearch.setup = function(ds) {
	var ds = ds || $('.detailSearch');
  if (ds.length == 0) return;
	
	ds.find('input.date').datepicker();
	ds.find('.btn.delete').click(function(){$(this).prev().val("")});
	ds.find('.btn.clearradio').click(function(){$(this).prevAll("input[type=radio]").removeAttr('checked')});
}

// ボタン全般の設定
GMD.Button = {};
GMD.Button.setup = function(btn){
  var btn = btn || $('.btn');
	login();
	add();
	addMyBinder();
	downloadCatalog();
	downloadFile();
	catalogview_from_item();
	catalogview_from_catalog();
	nallowdownSearchByCatalog();
	resetNallowdownSearchByCatalog();
	submit();
	
	btn.slide();
	btn.each(function(){

		if ( $(this).is('[gmdmylist=true]') ) $(this).addClass('done');

		if ($(this).hasClass('done')) $(this).unbind();
		if ( ($(this).hasClass('done'))&&($(this).hasClass('small')) ) $(this).css('background-position', '0 -38px');
		if ( ($(this).hasClass('done'))&&($(this).hasClass('medium')) ){
			$(this).css('background-position', '0 -42px');
		}
		if ( ($(this).hasClass('done'))&&($(this).hasClass('square')) ){
			$(this).css('background-position', '0 -36px');
		}
	});
	
	// clickでマイリストに追加
  function add() {
		var add = btn.filter('.add');
		if (add.length == 0) return false;
		
    add.one("click", function() {
      var self = $(this);
			var iid = self.attr('gmdiid');
			var vid = self.attr('gmdvid');
			var did = gmdDesignId;
			var dcf = gmdDesignConfirmFlag;
			var iname = self.attr('gmdiname');
			if (iid.length == 0) return;
			
			$.getJSON('addMyList.json', {'iid':iid, 'vid': vid, 't': 'i'}, function(data, status) { // 登録用URLへIDを送信する
				var display = $('#addingStockInfo');
				var num = $("#stockCounts");
				var after = data['result']['count'];
				num.empty();
				num.append(after);
				$('#addingComment').html('<a href="ItemMenu.do?method=itemMyList&volumeID='+vid+'&designID='+did+'&designConfirmFlg='+dcf+'" class="ca">マイリストを見る(<span id="stockCounts">'+after+'</span>)</a>');

				var display = $('#addingStockInfo');

				if(data['status']['type']=='SUCCESS'){
					self.unbind().addClass('done');

					var p = self.getBgPos();
					var h = self.height();
					self.css('background-position', p[0] + ' -' + parseInt(h)*2 + 'px');

					display
						.append('<p>'+ iname +'を追加しました。</p>')
						.show(70)
						.css('background-color', '#ffff99')
						.animate({backgroundColor:'#f7f5f5'}, 'slow');
				}else if(data['status']['type']=='ERROR') {
					switch( data['status']['code'] ) {
						case 'APP-USJ-5003':
							self.unbind().addClass('done');
							if (self.hasClass('small')) self.css('background-position', '0 -38px');
							if (self.hasClass('medium')) {
								self.css('background-position', '0 -42px');
							}

							display
								.append('<p>'+ iname +'は既に追加されていました。</p>')
								.show(70)
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'slow');
								// 既に追加されている状態はエラーではないので警告色は残さないし全体を点滅させる。
							break;
						case 'APP-USJ-5004':
							self.parent().replaceWith('<p class="function"><span class="warningAdd">これ以上追加できません</span></p>')
								.show(70)
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');

							display
								.append('<p>これ以上追加できません。</p>')
								.show(70)
								.find('p:last')
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');
							break;
						case 'APP-USJ-5001':
							self.parent().replaceWith('<p class="function"><span class="warningAdd">対象が存在しません</span></p>')
								.show(70)
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');

							display
								.append('<p>対象が存在しません。</p>')
								.show(70)
								.find('p:last')
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');
							break;
						case 'APP-USJ-5002':
							self.parent().replaceWith('<p class="function"><span class="warningAdd">対象にアクセスする権限がありません</span></p>')
								.show(70)
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');

							display
								.append('<p>対象にアクセスする権限がありません。</p>')
								.show(70)
								.find('p:last')
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');
							break;
						case 'APP-USJ-1098':
							self.parent().replaceWith('<p class="function"><span class="warningAdd">セッションが無効になりました</span></p>')
								.show(70)
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');

							display
								.append('<p>セッションが無効になりました。ページを読み込みなおすか、ログインしなおしてください。</p>')
								.show(70)
								.find('p:last')
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');
							break;
						case 'APP-USJ-1001':
							self.parent().replaceWith('<p class="function"><span class="warningAdd">エラーが発生しました</span></p>')
								.show(70)
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');

							display
								.append('<p>エラーが発生しました。パラメータが不正です。</p>')
								.show(70)
								.find('p:last')
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');
							break;
						default:
							self.parent().replaceWith('<p class="function"><span class="warningAdd">エラーが発生しました</span></p>')
								.show(70)
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');

							display
								.append('<p>エラーが発生しました。</p>')
								.show(70)
								.find('p:last')
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');
							break;
					}

				}
			});
		});
  }

	// clickでマイバインダーに追加
  function addMyBinder() {
		var add = btn.filter('.addMyBinder');
		if (add.length == 0) return false;
		
    add.one("click", function() {
      var self = $(this);
			var ctlgid = self.attr('gmdctlid') || '';
			var ctlgcid = self.attr('gmdccid') || '';
			var ctlgname = self.attr('gmdctlgname') || '';
			var ctlgctname = self.attr('gmdctlgctname') || '';
			var ctlgplname = self.attr('gmdctlgplname') || '';
			var ctlgprname = self.attr('gmdctlgprname') || '';
			var ctlgpname = self.attr('gmdctlgpname') || '';
			var addtype = self.attr('gmdaddtype');
			var vid = self.attr('gmdvid') || '';
			var pgid = self.attr('gmdpgid') || '';
			var pid = self.attr('gmdpid') || '';
			var did = gmdDesignId;
			var dcf = gmdDesignConfirmFlag;
/*			var iname = self.attr('gmdiname');*/
/*			if (iid.length == 0) return;*/


			var addTargetName = '';
			switch(addtype){
				case 'clc':
					addTargetName = ctlgname + '('+ ctlgctname +')';
					break;
				case 'cl':
					addTargetName = ctlgname + '(全体)';
					break;
				case 'pg':
					addTargetName = ctlgname + '('+ (ctlgplname!='' ? ctlgplname : 'ノンブルなし') + ','+ (ctlgprname!='' ? ctlgprname : 'ノンブルなし') +')';
					break;
				case 'p':
					addTargetName = ctlgname + '('+ (ctlgpname!='' ? ctlgpname : 'ノンブルなし') +')';
					break;
				default:
					break;
		
			}

			$.getJSON('addMyBinder.json', {'vid': vid, 't': addtype, 'clid':ctlgid, 'clcid':ctlgcid, 'pgid':pgid, 'pid':pid}, function(data, status) { // 登録用URLへIDを送信する
				var display = $('#addingStockInfo');
				var num = $("#stockCounts");
				var after = data['result']['count'];
				num.empty();
				num.append(after);
				$('#addingComment').html('<a href="CatalogMenu.do?method=catalogMyBinder&volumeID='+vid+'&designID='+did+'&designConfirmFlg='+dcf+'" class="ca">マイバインダーを見る(<span id="stockCounts">'+after+'</span>)</a>');

				var display = $('#addingStockInfo');

				if(data['status']['type']=='SUCCESS'){
					self.unbind().addClass('done');
					var p = self.getBgPos();
					var h = self.height();
					self.css('background-position', p[0] + ' -' + parseInt(h)*2 + 'px');

					display
						.append('<p>' + addTargetName +'を追加しました。</p>')
						.show(70)
						.css('background-color', '#ffff99')
						.animate({backgroundColor:'#f7f5f5'}, 'slow');
				}else if(data['status']['type']=='ERROR') {
					switch( data['status']['code'] ) {
						case 'APP-USJ-5004':
							if(self.hasClass('square')){
								self.replaceWith('<span class="warningAdd warningTextSmall">追加不可</span>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}else if(self.hasClass('text_mini')){
								self.replaceWith('<li class="warningAdd warningTextSmall">これ以上追加できません</li>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}else{
								self.replaceWith('<span class="warningAdd warningTextSmall">これ以上追加できません</span>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}

							display
								.append('<p>これ以上追加できません。</p>')
								.show(70)
								.find('p:last')
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');
							break;
						case 'APP-USJ-5001':
							if(self.hasClass('square')){
								self.replaceWith('<span class="warningAdd warningTextSmall">追加不可</span>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}else if(self.hasClass('text_mini')){
								self.replaceWith('<li class="warningAdd warningTextSmall">対象が存在しません</li>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}else{
								self.replaceWith('<span class="warningAdd warningTextSmall">対象が存在しません</span>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}

							display
								.append('<p>対象が存在しません。</p>')
								.show(70)
								.find('p:last')
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');
							break;
						case 'APP-USJ-5002':
							if(self.hasClass('square')){
								self.replaceWith('<span class="warningAdd warningTextSmall">追加不可</span>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}else if(self.hasClass('text_mini')){
								self.replaceWith('<li class="warningAdd warningTextSmall">アクセス権がありません</li>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}else{
								self.replaceWith('<span class="warningAdd warningTextSmall">対象にアクセスする権限がありません</span>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}

							display
								.append('<p>対象にアクセスする権限がありません。</p>')
								.show(70)
								.find('p:last')
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');
							break;
						case 'APP-USJ-1098':
							if(self.hasClass('square')){
								self.replaceWith('<span class="warningAdd warningTextSmall">エラー</span>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}else if(self.hasClass('text_mini')){
								self.replaceWith('<li class="warningAdd warningTextSmall">セッションが無効になりました</li>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}else{
								self.replaceWith('<span class="warningAdd warningTextSmall">セッションが無効になりました</span>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}

							display
								.append('<p>セッションが無効になりました。ページを読み込みなおすか、ログインしなおしてください。</p>')
								.show(70)
								.find('p:last')
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');
							break;
						case 'APP-USJ-1001':
							if(self.hasClass('square')){
								self.replaceWith('<span class="warningAdd warningTextSmall">エラー</span>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}else if(self.hasClass('text_mini')){
								self.replaceWith('<li class="warningAdd warningTextSmall">エラーが発生しました</li>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}else{
								self.replaceWith('<span class="warningAdd warningTextSmall">エラーが発生しました</span>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}

							display
								.append('<p>エラーが発生しました。パラメータが不正です。</p>')
								.show(70)
								.find('p:last')
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');
							break;
						default:
							if(self.hasClass('square')){
								self.replaceWith('<span class="warningAdd warningTextSmall">エラー</span>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}else if(self.hasClass('text_mini')){
								self.replaceWith('<li class="warningAdd warningTextSmall">エラーが発生しました</li>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}else{
								self.replaceWith('<span class="warningAdd warningTextSmall">エラーが発生しました</span>')
									.show(70)
									.css('background-color', '#ffff99')
									.animate({backgroundColor:'#f7f5f5'}, 'fast')
									.animate({backgroundColor:'#ffff99'}, 'slow');
							}

							display
								.append('<p>エラーが発生しました。</p>')
								.show(70)
								.find('p:last')
								.css('background-color', '#ffff99')
								.animate({backgroundColor:'#f7f5f5'}, 'fast')
								.animate({backgroundColor:'#ffff99'}, 'slow');
							break;
					}

				}
			});
		});
  }

	
	// clickでログイン
	function login() {
		var login = btn.filter('.login');
		if (login.length == 0) return false;
		login.click(function(){$(this).parents('form').submit()});
		login.keypress(function(event){
			if(event.keyCode == '13' ){
				$(this).parents('form').submit();
			}
		});
	}
	
	// clickで利用規約を表示するorダウンロードを実行する
	function downloadFile() {
		var dl = btn.filter('.dl');
		if (dl.length == 0) return false;
		dl.click(function(){
			if(gmdTermsOfUseIsAgree==false){
				if($(this).parents('#facebox').size()>0){
					jQuery.facebox2({ ajax: $(this).attr('gmddlconfirm') });
				}else{
					jQuery.facebox({ ajax: $(this).attr('gmddlconfirm') });
				}
			}else{
				document.location.href = $(this).attr('gmddl');
				return false;
			}
		});
	}

	// clickでダウンロード
	function downloadCatalog() {
		var dl = btn.filter('.downloadCatalog');
		if (dl.length == 0) return false;
		dl.click(function(){
			if(gmdTermsOfUseIsAgree==false){
				jQuery.facebox({ ajax: $(this).attr('gmddlconfirm') +'&applicationPdf=true'});	//別ウィンドウでPDFを直接開く
			}else{
				window.open($(this).attr('gmddl')+'&applicationPdf=true');	//別ウィンドウでPDFを直接開く
				return false;
			}
		});
	}
	
	// clickでカタログビュー起動
	function catalogview_from_item() {
		var cv = btn.filter('.cv').filter('.item');
		cv.each(function(i){
			var gmdiid = $(this).attr('gmdiid') || '';
			var gmdvid = $(this).attr('gmdvid') || '';
			var gmdctlid = $(this).attr('gmdctlid') || '';
			var gmdpgid = $(this).attr('gmdpgid') || '';
			if ($(this).length == 0) return false;
			$(this).click(function(){
				window.open( 'CatalogViewInterfaceStartUpAction.do?method=startUp&mode=ITEM&itemNumber='+gmdiid+'&catalogId='+gmdctlid+'&volumeID='+gmdvid+'&designID='+gmdDesignId+'&designConfirmFlg='+gmdDesignConfirmFlag, 'CatalogView', 'toolbar=no, location=no, status=no, scrollbars=no, menubar=no, width=1024, height=700, resizable=yes' );
			});
		});
	}
	
	// clickでカタログビュー起動
	function catalogview_from_catalog() {
		var cv = btn.filter('.cv').filter('.catalog');
		cv.each(function(i){
			var gmdmethod = $(this).attr('gmdmethod') || 'startUp';
			var gmdiid = $(this).attr('gmdiid') || '';
			var gmdvid = $(this).attr('gmdvid') || '';
			var gmdctlid = $(this).attr('gmdctlid') || '';
			var gmdccid = $(this).attr('gmdccid') || '';
			var gmdpgid = $(this).attr('gmdpgid') || '';
			if ($(this).length == 0) return false;
			$(this).click(function(){
				window.open( 'CatalogViewInterfaceStartUpAction.do?method='+gmdmethod+'&mode=PAGE&catalogCategoryId='+gmdccid+'&catalogId='+gmdctlid+'&pageGroupId='+gmdpgid+'&volumeID='+gmdvid+'&designID='+gmdDesignId+'&designConfirmFlg='+gmdDesignConfirmFlag, 'CatalogView', 'toolbar=no, location=no, status=no, scrollbars=no, menubar=no, width=1024, height=700, resizable=yes' );
			});
		});
	}

	function nallowdownSearchByCatalog() {
		var nsc = btn.filter('.catalogNallowdown');
		nsc.each(function(i){
			var gmdnallowdownlink = $(this).attr('gmdnallowdownlink');
			$(this).click(function(){
				location.href=gmdnallowdownlink;
			});
		});
	}

	function resetNallowdownSearchByCatalog() {
		var nsc = btn.filter('.resetCatalogNallowdown');
		nsc.each(function(i){
			var gmdresetnallowdownlink = $(this).attr('gmdresetnallowdownlink');
			$(this).click(function(){
				location.href=gmdresetnallowdownlink;
			});
		});
	}

	// clickでサブミット
	function submit() {
		var sub = btn.filter('.submit');
		if(sub.filter('.searchDetail').length!=0){
		// 詳細検索画面のサブミットボタン
			sub.filter('.searchDetail').click(function(){

				var createdUrl = $(this).parents('form').attr('action');
				var createdUrlParams = [];
				var searchConditions = [];

				createdUrlParams.push(
					'method='+$(this).parents('form').find('#detailSearch').find('input[name=method]')[0].value
				);

				createdUrlParams.push(
					'volumeID='+$(this).parents('form').find('#detailSearch').find('input[name=volumeID]')[0].value
				);

				createdUrlParams.push(
					'categoryID='+$(this).parents('form').find('#detailSearch').find('input[name=categoryID]')[0].value
//					'volumeName='+ encodeURIComponent( $(this).parents('form').find('#detailSearch').find('input[name=volumeName]')[0].value )
// jspの構成がhtmlと一致していないので、一時的に調整。(jsp側を修正するべきで、修正後この調整部分は不要になる)
//					'volumeName='+ encodeURIComponent( $(this).parents('form').find('input[name=volumeName]')[0].value )
				);

				createdUrlParams.push(
					'searchObject='+$(this).parents('form').find('#detailSearch').find('input[name=searchObject]:checked')[0].value
				);

				// デザインカスタマイズ関連
				createdUrlParams.push('designID='+gmdDesignId);
				createdUrlParams.push('designConfirmFlg='+gmdDesignConfirmFlag);

				var stringInd = 0;
				var numberInd = 0;
				var dateInd = 0;
				var dicInd = 0;

				$(this).parents('form').find('#conditionInputs').find('td.inputvalue').each( function(i, td){

					switch ( $(td).find('input.specType')[0].value ){

						case 'STRING':

							if($(td).find('input.value')[0].value !=''){
								searchConditions.push([
												$(td).find('input.specNameCode')[0].name,
												'=',
												encodeURIComponent( $(td).find('input.specNameCode')[0].value )
								].join(''));
								searchConditions.push([
												$(td).find('input.specType')[0].name,
												'=',
												encodeURIComponent( $(td).find('input.specType')[0].value )
								].join(''));

								searchConditions.push([
												$(td).find('input.value')[0].name.replace(/\[\d*\]/,'['+stringInd+']'),
												'=',
												encodeURIComponent( $(td).find('input.value')[0].value )
								].join(''));

								stringInd++;

							}
							break;

						case 'NUMBER':
							if( ($(td).find('input.value')[0].value !='') || ($(td).find('input.value')[1].value !='') ){
								searchConditions.push([
												$(td).find('input.specNameCode')[0].name,
												'=',
												encodeURIComponent( $(td).find('input.specNameCode')[0].value )
								].join(''));
								searchConditions.push([
												$(td).find('input.specType')[0].name,
												'=',
												encodeURIComponent( $(td).find('input.specType')[0].value )
								].join(''));

								// from項目が空でない場合
								if( $(td).find('input.value')[0].value !='') {
								searchConditions.push([
													$(td).find('input.value')[0].name.replace(/\[\d*\]/, '['+numberInd+']'),
													'=',
													encodeURIComponent( $(td).find('input.value')[0].value )
								].join(''));
								}
								// to項目が空でない場合
								if( $(td).find('input.value')[1].value !='') {
									searchConditions.push([
														$(td).find('input.value')[1].name.replace(/\[\d*\]/, '['+numberInd+']'),
														'=',
														encodeURIComponent( $(td).find('input.value')[1].value )
									].join(''));
								}
								numberInd++;
	
							}
							break;

						case 'DICTIONARY':
							if($(td).find('input.value:checked').length >0){

								searchConditions.push([
												$(td).find('input.specNameCode')[0].name,
												'=',
												encodeURIComponent( $(td).find('input.specNameCode')[0].value )
								].join(''));
								searchConditions.push([
												$(td).find('input.specType')[0].name,
												'=',
												encodeURIComponent( $(td).find('input.specType')[0].value )
								].join(''));

								if($(td).find('input.value:checked').length >0){
									searchConditions.push([
													$(td).find('input.value:checked')[0].name.replace(/\[\d*\]/,'['+dicInd+']'),
													'=',
													encodeURIComponent( $(td).find('input.value:checked')[0].value )
									].join(''));
								}

								dicInd++;

							}
							break;

						case 'DATE':

							if( ($(td).find('input.value')[0].value !='')||($(td).find('input.value')[1].value !='') ){
								searchConditions.push([
												$(td).find('input.specNameCode')[0].name,
												'=',
												encodeURIComponent( $(td).find('input.specNameCode')[0].value )
								].join(''));
								searchConditions.push([
												$(td).find('input.specType')[0].name,
												'=',
												encodeURIComponent( $(td).find('input.specType')[0].value )
								].join(''));

								// from項目が空でない場合
								if( $(td).find('input.value')[0].value !='') {
									searchConditions.push([
													$(td).find('input.value')[0].name.replace(/\[\d*\]/, '['+dateInd+']'),
													'=',
													encodeURIComponent( $(td).find('input.value')[0].value )
									].join(''));
								}
								// to項目が空でない場合
								if( $(td).find('input.value')[1].value !='') {
									searchConditions.push([
													$(td).find('input.value')[1].name.replace(/\[\d*\]/, '['+dateInd+']'),
													'=',
													encodeURIComponent( $(td).find('input.value')[1].value )
									].join(''));
								}

								dateInd++;

							}
							break;


					} 

				});

				if(searchConditions.length>0){
					createdUrlParams.push(
						searchConditions.join('&')
					);
				}

				// 静的html用に'@'で連結 (実際の処理では'?'で連結する)
				createdUrl += '?';

				createdUrl += createdUrlParams.join('&');

				$(this).parents('form').attr('action',createdUrl)

//				if(createdUrl.length > 800){alert('too long');}

				$(this).parents('form').attr('action',createdUrl)
//				$(this).parents('form').submit();
				document.location.href = $(this).parents('form').attr('action');
			});

		} else if(sub.filter('.download').length!=0){
			// ダウンロードボタン
			if (sub.length == 0) return;
			sub.click(function(){
				
				// マイバインダからのダウンロードで削除されたページが含まれていた場合にエラーにする
				if( $(this).filter('.bind').length!=0){
					if( $('#myBinderArticles .article:has(.result .status:contains(ERROR))').filter(':has(.result .errorCode:contains(APP-USJ-5001))').filter(':visible').length > 0){
						$('.containingWrongDataError').animate({opacity:'show',height:'show'}, 'fast');
						return;
					}else{
						$('.containingWrongDataError').animate({opacity:'hide',height:'hide'}, 'fast');
					}
				}

				// 利用規約の表示制御
				if(gmdTermsOfUseIsAgree==false){
					var createdUrl = $(this).parents('form:first').attr('action');
					var createdUrlParams = [];
					$(this).parents('form:first').find('input[type=hidden][name=method]:first').attr('value',$(this).attr('gmddlconfirmmethod'));
					$(this).parents('form:first').find('input[type=hidden]').each( function(i, data){
						if( data.value != '') {
							createdUrlParams.push(data.name + '=' + data.value);
						}
					});
					$(this).parents('form:first').find('input[type=checkbox]').each( function(i, data){
						if(data.checked) {
							createdUrlParams.push(data.name + '=' + data.value);
						}
					});

					// 静的html用に'@'で連結 (実際の処理では'?'で連結する)
					createdUrl += '?';

					createdUrl += createdUrlParams.join('&');

					jQuery.facebox({ ajax: createdUrl });

				}else{
					$(this).parents('form:first').find('input[type=hidden][name=method]:first').attr('value',$(this).attr('gmddlmethod'));
					$(this).parents('form:first').submit();
				}
			});
		} else {
		// 通常のサブミットボタン
		    if (sub.length == 0) return;
			sub.click(function(){$(this).parents('form:first').submit()});
		}
	}

}


// フォーカスの制御
GMD.Focus = {};
GMD.Focus.setup = function(fc) {
	var fc = fc || $('.focus');
  if (fc.length == 0) return;
	
	fc.focus();
}

// 折り返し指定
GMD.BreakableItem = {};
GMD.BreakableItem.setup = function(b, numberForBreak) {
	var regexp = new RegExp("([!-~]{"+numberForBreak+"})");

	if (b.length == 0) return;
	$.each(b, function(key, bi){
		var biText;
		
		if( $(bi).filter(':parent').length >0 ) return;
		biText = $(bi);
		var newIndex = 0;
		var after = '';
		var rest = $(biText)[0].data;
		var count = 0;
		while(count < 99){
			if( (newIndex = rest.search(regexp))  > -1){
				after = after + rest.substring(0, newIndex);
				after = after + rest.substr(newIndex, RegExp.$1.length ) + '<wbr/>';
				rest = rest.substr(newIndex+RegExp.$1.length);
			}else{
				break;
			}
			count++;
		}
		after = after + rest;
		$(biText).replaceWith(after);

	});
}

GMD.SlideToggleButton = {};
GMD.SlideToggleButton.setup = function(){

	var btn = btn || $('.slideToggleButton');


	hideDisableButton();
	init();
	slideUpAllEnableTarget();

	function hideDisableButton(){
		btn.filter('.disable').hide();
	}

	// clickでカタログインデックスなどを折りたたみ
	function init() {
		var slideToggle = btn.filter('.enable');
		if (slideToggle.length == 0) return false;
		slideToggle.click(function(){
			var target = $(this).parents(".slideToggleBox:first").find(".slideToggleTarget:first");
			target.slideToggle("fast");
			$(this).toggleClass("down");
			$(this).toggleClass("up");
		});

/*		slideToggle.parent().click(function(){
			var target = $(this).parents(".slideToggleBox:first").find(".slideToggleTarget:first");
			target.slideToggle("fast");
			$(this).find(".slideToggleButton").toggleClass("down");
			$(this).find(".slideToggleButton").toggleClass("up");
		});
		slideToggle.parent().css({"cursor":"pointer"});
*/
	}

	function slideUpAllEnableTarget(){
		var slideToggle = btn.filter('.enable');
		if (slideToggle.length == 0) return false;
		slideToggle.each(function(i){
			var hideTarget=$(this).parents(".slideToggleBox:first").find(".slideToggleTarget.hide:first");
			if(hideTarget.length != 0){
				hideTarget.hide();
				$(this).removeClass("up");
				$(this).addClass("down");
			}

			var showTarget=$(this).parents(".slideToggleBox:first").find(".slideToggleTarget.show:first");
			if(showTarget.length != 0){
				showTarget.show();
				$(this).removeClass("down");
				$(this).addClass("up");
			}
		});
	}
	
}

GMD.LinkBlock = {};
GMD.LinkBlock.setup = function(){
	var lb = lb || $('.linkBlock');

	lb.find(".linkBlockTarget").click(function(event){
		event.stopPropagation();
	});

	lb.click(function(){
		$(this).find(".linkBlockTarget").click();
	});

}

GMD.setup = function() {
	// 各要素に振る舞いを設定
  GMD.KeywordSearch.setup();
	GMD.DetailSearch.setup();
	GMD.Button.setup();
	GMD.SlideToggleButton.setup();
	GMD.LinkBlock.setup();
	GMD.Focus.setup();
	GMD.BreakableItem.setup($('.viewInline .name').contents(),12);
	GMD.BreakableItem.setup($('.viewInline .name a').contents(),12);
	
	// マイバインダー作成
	var myBinder = [];
	$('#myBinder .volume').each(function(){
		myBinder.push(new GMD.List($(this), 'myBinder'));
	});
	this.myBinder = myBinder;
}

// カスタマイズ用のダミー(custom.jsにより上書きされる想定)
GMD.Custom = {};
GMD.Custom.postProcessForShowItemSearchResultArticle = function(targetItem){}
GMD.Custom.postProcessForShowItemMyListArticle = function(targetItem){}
GMD.Custom.postProcessForShowItemDetailRelatedItemArticle = function(targetItem){}
GMD.Custom.postProcessForShowItemSideArticles = function(targetItem){}
GMD.Custom.postProcessForShowItemSideCategoriesArticles = function(targetItem){}
GMD.Custom.postProcessForShowCatalogSideArticles = function(targetItem){}
GMD.Custom.postProcessForShowCatalogSearchResultArticles = function(targetItem){}
GMD.Custom.postProcessForShowCatalogPageSearchResultArticle = function(targetItem){}
GMD.Custom.postProcessForShowCatalogMyBinderArticle = function(targetItem){}

// DOM構築後に実行
$(function() {
  GMD.setup();
	
	// CSS
  $('.breadcrumbs li:last-child, .localNavi li:last-child').css('background', 'none');
  $('.searchCondition dd:last-child').css('margin-bottom', 0);
  $('.catalogIndex th').parent().prev().children('td').css('border-bottom', 'none');
  $('.catalogIndex').find('.level_1 div.categoryNode, .level_2 div.categoryNode').rollBgColor('#e9e9e9', null, true);
  $('.text p:last-child').css('margin-bottom', 0);
  $('#volumeSelect .volume:last-child').css('margin-bottom', 0);
  $('.catalogcategory li:last-child, .localNavi li:last-child').css('background', 'none');

	// ロールオーバー
	$('img[src *= _out], input[type = image][src *= _out]').roll();
	
	// ブロック要素の高さを揃える
	$(window).load(function(){
		// IE6 でアイコン画像の大きさが正しく表示されない問題に対応
		$('img.main').css('zoom','1');
		$('.viewBlock').each(function(i){
			$(this).find('.heightfix').heightfix();
		});
		$('.viewInline').each(function(i){
			$(this).find('.heightfix').heightfix();
		});
	});

});
