PageSourceSearch

https://sp-m.mu-mo.net/js/common.js?1.129.0

js mu-mo.net collected 2026-10-02 02:25:50 UTC 27,537 bytes, 888 lines download raw bytes

1var paging = function (pageNo, options){
2	showLoading();
3	options = options || {};
4	$.ajax({type:"POST"
5		, data:options.data ? options.data : $('form:first').serialize()
6		, url:pageNo
7		, success:function(data, textStatus){
8			var pagingAnchor = options.pagingAnchor ? options.pagingAnchor : "#pagingAnchor";
9			$(pagingAnchor).remove();
10			var appendToSelector = options.appendTo ? options.appendTo : '#result_section02';
11			$(data).appendTo($(appendToSelector));
12			mumo.init();
13		}
14		, error:function(XMLHttpRequest, textStatus, errorThrown){
15			alert("ページの読み込みに失敗しました。再度検索してください。");
16		}
17		, complete:function(){
18			unshowLoading();
19		}
20	});
21	return false;
22};
23var pagingButton = function (pageNo, options){
24	showLoadingButton();
25	options = options || {};
26	$.ajax({type:"POST"
27		, data:options.data ? options.data : $('form:first').serialize()
28		, url:pageNo
29		, success:function(data, textStatus){
30			var pagingAnchor = options.pagingAnchor ? options.pagingAnchor : "#pagingAnchor";
31			$(pagingAnchor).remove();
32			var appendToSelector = options.appendTo ? options.appendTo : '#result_section02';
33			$(data).appendTo($(appendToSelector));
34			mumo.init();
35		}
36		, error:function(XMLHttpRequest, textStatus, errorThrown){
37			alert("ページの読み込みに失敗しました。再度検索してください。");
38		}
39		, complete:function(){
40			unshowLoadingButton();
41		}
42	});
43	return false;
44};
45var pagingButtonWPP = function (pageNo, options){
46	showLoadingButton();
47	options = options || {};
48	$.ajax({type:"POST"
49		, data:options.data ? options.data : $('form:first').serialize()
50		, url:pageNo
51		, success:function(data, textStatus){
52			var appendToSelector = options.appendTo ? options.appendTo : '#result_section02';
53			$(data).appendTo($(appendToSelector));
54			mumo.init();
55		}
56		, error:function(XMLHttpRequest, textStatus, errorThrown){
57			alert("ページの読み込みに失敗しました。再度検索してください。");
58		}
59		, complete:function(){
60			unshowLoadingButton();
61		}
62	});
63	return false;
64};
65
66/* iOSアプリ起動 */
67function launchApp(appPath, fallbackPath) {
68	document.location = appPath;
69	if(!fallbackPath) { return; }
70	var time = (new Date()).getTime();
71	setTimeout(function(){
72		var now = (new Date()).getTime();
73		if((now-time)>5010) {
74			return;
75		}
76		document.location = fallbackPath;
77	}, 5000);
78}
79
80/*
81 * ローディングダイアログを表示する。
82 */
83function showLoading(options) {
84
85	options = options || {};
86
87	if(!options.allowFocus){
88		$("select").attr("disabled", true);
89		$("a").attr("disabled", true);
90		$("input").attr("disabled", true);
91	}
92	var defalutOptions = {
93        message: "<img src='/images/cmn/loading.gif' height='20px' width='20px'/>&nbsp;&nbsp;&nbsp;&nbsp;<strong>ロードしています</strong>"
94        ,css: { background: 'none', color: '#000',border:'none', width:'50%', left:"20%" }
95        ,overlayCSS: {backgroundColor: '#C5E1F0',opacity:'0.4'}
96	};
97	if(options.onBlock){
98		$.extend(defalutOptions, {onBlock:options.onBlock});
99	}
100	$.blockUI(defalutOptions);
101}
102
103/*
104 * ローディングダイアログを非表示する。
105 */
106function unshowLoading() {
107
108	$("select").attr("disabled", false);
109	$("a").attr("disabled", false);
110	$("input").attr("disabled", false);
111
112	$.unblockUI();
113}
114
115/*
116 * ローディングボタンを表示する。
117 */
118function showLoadingButton(options) {
119
120	options = options || {};
121
122	if(!options.allowFocus){
123		$("select").attr("disabled", true);
124		$("a").attr("disabled", true);
125		$("input").attr("disabled", true);
126	}
127	$("#nextPagingButton").css("display","none");
128	$("#nowLoadingButton").css("display","block");
129}
130
131/*
132 * ローディングボタンを非表示する。
133 */
134function unshowLoadingButton() {
135
136	$("select").attr("disabled", false);
137	$("a").attr("disabled", false);
138	$("input").attr("disabled", false);
139	
140	$("#nextPagingButton").css("display","block");
141	$("#nowLoadingButton").css("display","none");
142}
143/**
144 * 次のページ
145 */
146var nextPage = function (pageNo, options){
147    showLoading();
148	options = options || {};
149	$.ajax({type:"POST"
150		, data:options.data
151		, url:pageNo
152		, success:function(data, textStatus){
153			$("#pagingAnchor").remove();
154			var appendToSelector = options.appendTo ? options.appendTo : '#result_section02';
155			$(data).appendTo($(appendToSelector));
156			mumo.init();
157		}
158	});
159	unshowLoading();
160	return false;
161};
162
163function getParam(vals){
164	var params = [];
165	for (var i in vals) {
166		params.push(i + "=" + encodeURIComponent(vals[i]));
167	}
168	return params.join("&");
169}
170
171/*
172 任意購入ポイントの数値、制御キー以外入力抑止
173 特定機種にて文字(#や*等)が入力された後、一旦イãƒ
173³ãƒ—ットからフォーカスを外して再度入力フォーカスが戻ると入力された文字が増幅する
174 動作があったため、数値以外の入力を抑止する
175 8:バックスペース、9:タブ、46:デリート、37~40:矢印郡、48~57:テンキー以外の数字、96~105:テンキーの数字
176 usage: onkeyDown="return numOnly(event)"
177*/
178function numOnly(event) {
179	var keyCode = event.keyCode;
180	if (keyCode==8 ||
181		keyCode==9 ||
182		keyCode==46 ||
183		(37<=keyCode && keyCode<=40) ||
184		(48<=keyCode && keyCode<=57) ||
185		(96<=keyCode && keyCode<=105)
186		){
187		return true;
188	}
189	return false;
190}
191
192String.prototype.Trim = function()
193{
194	return this.replace(/(^\s*)|(\s*$)/g, "");
195}
196
197mumo.util.disableDoubleSubmit = {
198	defaultOptions: {timeout:10*1000, disableKey:"__mumo_util_submited"},
199	execute: function(event, options){
200		var prevent = mumo.util.disableDoubleSubmit.impl(event.target, options);
201		if (!prevent) {
202			event.preventDefault();
203		}
204		return prevent;
205	},
206	impl: function(elem, options) {
207		options = $.extend(this.defaultOptions, options, {});
208		var disableKey = options.disableKey;
209		var self = $(elem);
210		var disabled = self.data(disableKey);
211
212		if(disabled){
213			return false;
214		}
215
216		var timeoutID = window.setTimeout(function(){self.data(disableKey, false);}, options.timeout);
217		$(window).one("pagehide", function(){
218			// Clear disableKey before page forwarding.
219			self.data(disableKey, false);
220			window.clearTimeout(timeoutID);
221		});
222		self.data(disableKey, true);
223		return true;
224	}
225};
226var dds = function(e, options){
227	return mumo.util.disableDoubleSubmit.impl(e, options);
228};
229$(function(){
230	$("a.ddc").bind("click", function(e){
231		mumo.util.disableDoubleSubmit.execute(e);
232	});
233	$("input:text[name='searchText']").closest("form").bind("submit", function(e){
234		mumo.util.disableDoubleSubmit.execute(e);
235	});
236});
237
238/**
239 * trial music
240 */
241mumo.util.trialMusic = {};
242mumo.util.trialMusic.defaultOptions = {
243	blockStyle:'<style type="text/css" id="_non_tap_highlight">*{-webkit-tap-highlight-color: rgba(0,0,0,0)}</style>'
244};
245mumo.util.trialMusic.initBase = function(options){
246	options = $.extend({}, mumo.util.trialMusic.defaultOptions, options);
247
248   //再生時コールバック関数
249   var sent = false;
250	mumo.util.trialMusic.played = function(){
251		if(!sent){ $.post(options.addTrialHistoryPath, {productId:options.productId}); }
252		sent = true;
253	};
254};
255mumo.util.trialMusic.initFlash = function(options){
256	mumo.util.trialMusic.initBase(options);
257};
258mumo.util.trialMusic.isSupAudio = function(){
259	return !!(document.createElement('audio').canPlayType);
260};
261mumo.util.trialMusic.isSupFlash = function(){
262	return !!navigator.plugins['Shockwave Flash'];
263};
264mumo.util.trialMusic.initHls = function(options){
265	options = $.extend({}, mumo.util.trialMusic.defaultOptions, options);
266
267	if(!mumo.util.trialMusic.isSupAudio()){
268		$("#tiralButton").html('このブラウザではサポートされていません');
269		return;
270	}
271
272	mumo.util.trialMusic.initBase(options);
273
274	var audio = null;
275	var states = {init:10,loading:15,playing:20,pause:30,end:40,error:90};
276	var state = states.init;
277	$("#doTry").bind("click", function(){
278		switch(state){
279		case states.init:
280		case states.end:
281			try{
282				state = states.loading;
283				$("#tiralButton").html('<img src="/images/cmn/loading.gif" height="22px"/>');
284				audio =  new Audio();
285				audio.addEventListener( 'ended', end, false );
286				audio.addEventListener( 'error', error, false );
287				audio.addEventListener( 'abort', error, false );
288				audio.addEventListener( 'canplaythrough',canplaythrough , false);
289				audio.addEventListener( 'pause', pause , false);
290
291				window.addEventListener( 'unload', end, true );
292
293				audio.src = options.src;
294				audio.volume=1;
295				audio.play();//ここでplayしないとchromeで再生されない
296			}catch(e){
297				error();
298			}
299			break;
300
301		case states.loading:
302			break;
303
304		case states.playing:
305			state = states.pause;
306			audio.pause();
307			break;
308
309		case states.pause:
310			state = states.playing;
311			play();
312			break;
313
314		case states.end:
315			state = states.playing;
316			play();
317			break;
318
319		case states.error:
320			break;
321		}
322	});
323
324	var play = function(){
325		state = states.playing;
326		audio.play();
327		$("#tiralButton").html('<img src="/images/cmn/trial_pause.gif" height="22px"/>');
328	};
329	var canplaythrough = function(){
330		mumo.util.trialMusic.played();
331		play();
332	};
333	var end = function(){
334		state = states.end;
335		$("#tiralButton").html('<img src="/images/cmn/trial_play.gif" height="22px"/>');
336	};
337	var error = function(){
338		state = states.error;
339		var code="";
340		if(audio!=null && audio.error!=null){
341			code="(" + audio.error.code + ")";
342		}
343		 $("#tiralButton").html('エラーが発生しました画面を更新して再度お試しください。 '+code);
344	};
345	var pause = function(){
346		$("#tiralButton").html('<img src="/images/cmn/trial_play.gif" height="22px"/>');
347	};
348};
349
350mumo.util.showTrialMusic0 = function(options){
351	options = $.extend({}, mumo.util.trialMusic.defaultOptions, options);
352
353	$("head").append(options.blockStyle);
354
355	$.blockUI({
356        message: options.message()
357        ,css: { background: 'none', color: '#000',border:'none', width:'70%', left:"15%", height:"50px", cursor :"default" }
358        ,overlayCSS: {backgroundColor: '#000000',opacity:'0.6', cursor :"default"}
359        ,onUnblock : function(){
360        	if($.isFunction(options.onUnblock)){
361        		options.onUnblock();
362        	}
363
364        	$("#_non_tap_highlight").remove();
365        }
366        ,onBlock : function(){
367        	//黒背景をタッチしたら消す
368        	$("div.blockOverlay").bind("click", function(e){
369        		$.unblockUI();
370        		setTimeout(function(){$("#_non_tap_highlight").remove();}, 500);
371        	}).bind('touchmove', function(e){e.preventDefault();});
372
373           //黒背景をフリックしても動かないようにする
374        	$("div.blockMsg").bind('touchmove', function(e){e.preventDefault();});
375
376        	if($.isFunction(options.onBlock)){
377        		options.onBlock();
378        	}
379        }
380   });
381
382   return false;
383};
384mumo.util.showTrialMusic = function(options){
385	var supFlash = mumo.util.trialMusic.isSupFlash();
386	var defaultOptions = {
387		  onUnblock:function(){}
388		, onBlock:function(){
389			if(supFlash){
390				var player= document.getElementById("mPlayer0");
391				if(player){ player.readyToStart(); }
392			}
393		}
394		, message:function(){return supFlash? $("#mPlayerCol0") : '<p class="trialFlashNotice">試聴を行うには<br>Adobe Flash Playerが必要です</p>';}
395	}
396
397	return mumo.util.showTrialMusic0($.extend({}, defaultOptions, options));
398};
399
400/* logic 0:切捨て 1:四捨五入  */
401// 想定外の区分の場合は丸めない
402mumo.util.getInTaxedAmount = function(amount, rate, logic){
403
404	var intaxamount = amount *  (1 + rate);
405
406	if (logic == 0) {
407		intaxamount = Math.floor(intaxamount);
408	} else if (logic == 1) {
409		intaxamount = Math.round(intaxamount);
410	}
411
412	return intaxamount;
413}
414
415mumo.util.popupBlock = function(body, className, closeButtonSelector){
416	// 閉じるボタン
417	if (closeButtonSelector) {
418		$(closeButtonSelector, $(body)).one("click", function(){
419			$.unblockUI();
420			return false;
421		});
422	}
423	// blockUIのデフォルトスタイルが邪魔なので一時的にどけておく
424	var defaultCss = $.blockUI.defaults.css;
425	$.blockUI.defaults.css = {};
426
427	$.blockUI({
428		message: $(body),
429		blockMsgClass: className,
430		overlayCSS: { cursor: "default" },
431		fadeIn: 100,
432		fadeOut: 100
433	});
434
435	$.blockUI.defaults.css = defaultCss; // blockUIのデフォルトスタイル戻す
436}
437
438/*
439 * 検索フォームのオートコンプリート
440 */
441function searchAutocomplete(ajaxUrl, searchTextSelector, targetSelectSelector){
442	searchAutocomplete(ajaxUrl, searchTextSelector, targetSelectSelector, undefined, undefined);
443}
444
445function searchAutocomplete(ajaxUrl, searchTextSelector, targetSelectSelector ,category){
446	searchAutocomplete(ajaxUrl, searchTextSelector, targetSelectSelector, category, undefined);
447}
448
449function searchAutocomplete(ajaxUrl, searchTextSelector, targetSelectSelector, category, artistIdString){
450	searchTextSelector.autocomplete({
451		source: function( request, response ) {
452			var target;
453			if(category == undefined ){
454				target = "";
455			}else {
456				target = category.val();
457			}
458			$.ajax({
459				type: "post",
460				url: ajaxUrl,
461				dataType: "json",
462				data: {
463					searchText: request.term,
464					targetSelect: target,
465					artistId: artistIdString
466				},
467				success: function( data ) {
468					response( $.map( data, function( item ) {
469						return {
470							value: item
471						}
472					}));
473				}
474			});
475		},
476		open: function( event, ui ) {
477
478			if(/^(\s| )*$/.test($(event.target).val())) {
479				$(event.target).autocomplete("close");
480				return;
481			}
482		},
483		focus: function( event, ui ) {
484			if(event.handleObj.type != "mouseenter") {
485				$(event.target).gpObserveText("set", ui.item.value);
486			}
487			return false;
488		},
489		select: function( event, ui ) {
490			$(event.target).val(ui.item.value);
491			$(event.target.form).submit();
492			return false;
493		},
494		close: function( event, ui ) {
495			$(".incremental_interrupt").remove();
496		},
497		create: function( event, ui ) {
498			$( window ).bind( "beforeunload", function() {
499				$(event.target).attr( "autocomplete", "off" );
500			}).unload(function() {
501			});
502			//bodyに追加するのではなくて、ターゲットエレメントに追加する
503			//$(document.body).prepend($(event.target).autocomplete("widget"));
504			targetSelectSelector.prepend($(event.target).autocomplete("widget"));
505			$(event.target.form).submit(function() {
506				$(event.target).autocomplete("close");
507			});
508		},
509		search: function( event, ui ) {
510			if(/^(\s| )*$/.test($(event.target).val())) {
511				$(event.target).autocomplete("close");
512				return false;
513			}
514		},
515		delay: 0
516	})
517	.gpObserveText(function(event, lastValue) {
518		$(event.target).trigger("keydown.autocomplete");
519	});
520}
521
522mumo.util.scroll = {};
523mumo.util.scroll.to = function(selector){
524	var dest = $(selector);
525	if(dest.length > 0){
526		window.scrollTo(0,dest.offset().top);
527	}
528};
529
530mumo.util.multiTrialMusic = {};
531mumo.util.multiTrialMusic.defaultOptions = {
532	blockStyle:'<style type="text/css" id="_non_tap_highlight">*{-webkit-tap-highlight-color: rgba(0,0,0,0)}</style>'
533};
534mumo.util.multiTrialMusic.addedHistory = {};
535mumo.util.multiTrialMusic.addHistory = function(options){
536	var history = mumo.util.multiTrialMusic.addedHistory;
537	if(!history[options.id]){
538		$.post(options.addTrialHistoryPath, {productId:options.id});
539	}
540	history[options.id] = true;
541};
542var showFlashTrial = function(options){
543	var supFlash = mumo.util.trialMusic.isSupFlash();
544
545	var swfId = "trial_" + options.id;
546	var containerId = "trialcontainer_" + options.id;
547	var filepath = options.filepath;
548	$('<div id="'+containerId+'" style="display:none;">').appendTo("body");
549
550	if(supFlash){
551		var so = new SWFObject('/swf/mplayer.swf', swfId, '100%', '50', '9,0,0,0', '#ffffff');
552		so.addParam('menu', 'false');
553		so.addParam('allowScriptAccess', 'always');
554		so.addVariable('file', filepath);
555		so.addVariable('loop', false);
556		so.addParam('wmode', 'transparent');
557		so.write(containerId);
558	}else{
559		$('#'+containerId).append('<p class="trialFlashNotice">試聴を行うには<br>Adobe Flash Playerが必要です</p>');
560	}
561
562	$("head").append(mumo.util.multiTrialMusic.defaultOptions.blockStyle);
563
564	$.blockUI({
565		message: $('#'+containerId)
566		,css: { background: 'none', color: '#000',border:'none', width:'70%', left:"15%", height:"50px", cursor :"default" }
567		,overlayCSS: {backgroundColor: '#000000',opacity:'0.6', cursor :"default"}
568		,onUnblock : function(){
569			$("#_non_tap_highlight").remove();
570			$('#'+containerId).remove();
571		}
572		,onBlock : function(){
573			if(supFlash){
574				document.getElementById(swfId).readyToStart();
575			}
576			//黒背景をタッチしたら消す
577			$("div.blockOverlay").bind("click", function(e){
578				$.unblockUI();
579				setTimeout(function(){$("#_non_tap_highlight").remove();}, 500);
580			}).bind('touchmove', function(e){e.preventDefault();});
581			//黒背景をフリックしても動かないようにする
582			$("div.blockMsg").bind('touchmove', function(e){e.preventDefault();});
583		}
584	});
585};
586
587
588var showHlsTrial = function(options){
589	var containerId = "trialcontainer_"+options.id;
590	options.src = options.filepath;
591
592	$("head").append(mumo.util.multiTrialMusic.defaultOptions.blockStyle);
593
594	$.blockUI({
595		message: $('#'+containerId)
596		,css: { background: 'none', color: '#000',border:'none', width:'70%', left:"15%", height:"50px", cursor :"default" }
597		,overlayCSS: {backgroundColor: '#000000',opacity:'0.6', cursor :"default"}
598		,onUnblock : function(){
599			hlstrial.close();
600			$("#_non_tap_highlight").remove();
601		}
602		,onBlock : function(){
603			//黒背景をタッチしたら消す
604			$("div.blockOverlay").bind("click", function(e){
605				hlstrial.close();
606				$.unblockUI();
607				setTimeout(function(){$("#_non_tap_highlight").remove();}, 500);
608			}).bind('touchmove', function(e){e.preventDefault();});
609			//黒背景をフリックしても動かないようにする
610			$("div.blockMsg").bind('touchmove', function(e){e.preventDefault();});
611		}
612	});
613	var callbacks = {
614			loading:function(){
615				$("#tiralButton_"+options.id).html('<img src="/images/cmn/loading.gif" height="22px"/>');
616			},
617			playing:function(){
618				$("#tiralButton_"+options.id).html('<img src="/images/cmn/trial_pause.gif" height="22px"/>');
619			},
620			end:function(){
621				$("#tiralButton_"+options.id).html('<img src="/images/cmn/trial_play.gif" height="22px"/>');
622			},
623			error:function(){
624				$("#tiralButton_"+options.id).html('エラーが発生しました画面を更新して再度お試しください。 ');
625			},
626			pause:function(){
627				$("#tiralButton_"+options.id).html('<img src="/images/cmn/trial_play.gif" height="22px"/>');
628			}
629	};
630	options = $.extend({},{callbacks:callbacks}, options);
631
632	// iOSではsetTimeoutを使うと再生に失敗する
633    if(/iPhone|iP[ao]d/.test(navigator.userAgent)){
634		hlstrial.playstart(options);
635		return;
636	}
637	setTimeout(function(){//onBlockのcallback中で再生するとchromeで音が鳴らない.即座に再生してしまうと、onBlockより早く動いてしまう可能性があるので500ms後に実行する
638		hlstrial.playstart(options);
639	},500);
640};
641
642var hlstrial = {}; //define namespace
643hlstrial = $.extend(hlstrial, { // define vars
644	audio : null, // html audio instance
645	state : null,
646	STATES : {init:10,loading:15,playing:20,pause:30,end:40,error:90},
647	callbacks : {},
648});
649hlstrial.listener = {
650	end:function(e){
651		hlstrial.state = hlstrial.STATES.end;
652		hlstrial.event("end", e);
653	},
654	error:function(e){
655		hlstrial.state = hlstrial.STATES.error;
656		hlstrial.event("error", e);
657	},
658	canplaythrough:function(e){
659		hlstrial.state = hlstrial.STATES.playing;
660		hlstrial.event("playing", e);
661	},
662	pause:function(e){
663		if(hlstrial.state!=hlstrial.STATES.end){//endした後にpauseが呼ばれてしまうことがあったので上書きしないでおく
664			hlstrial.state = hlstrial.STATES.pause;
665			hlstrial.event("pause", e);
666		}
667	},
668	loading:function(e){
669		hlstrial.event("loading", e);
670	},
671};
672(function () {
673	var event = hlstrial.event = function(eventname, e){
674		var callback = hlstrial.callbacks[eventname];
675		if($.isFunction(callback)){
676			callback.call(e);
677		}
678	};
679
680	hlstrial = $.extend(hlstrial,  {//define methods
681		// play music from start of file
682		playstart : function(options){
683			hlstrial.callbacks = options.callbacks;
684			try{
685				hlstrial.state = hlstrial.STATES.loading;
686				hlstrial.listener.loading();
687				var audio = hlstrial.audio = new Audio();
688				audio.addEventListener( 'ended', hlstrial.listener.end, false );
689				audio.addEventListener( 'error', hlstrial.listener.error, false );
690				audio.addEventListener( 'abort', hlstrial.listener.error, false );
691				audio.addEventListener( 'canplaythrough', hlstrial.listener.canplaythrough, false);
692				audio.addEventListener( 'pause', hlstrial.listener.pause , false);
693				window.addEventListener( 'unload', hlstrial.listener.end, true );
694				audio.src = options.src;
695				audio.volume = 1;
696				audio.play();
697			}catch(e){
698				hlstrial.listener.error(e);
699			}
700		},
701		// stop music(not pause)
702		close : function(){
703			if(hlstrial.audio!=null){
704				hlstrial.audio.pause(); // audio elment has no stop method
705				hlstrial.audio = null;
706			}
707		},
708		// dispatch each event
709		click : function(){
710			switch(hlstrial.state){
711				case hlstrial.STATES.playing: //from palying to pause
712					hlstrial.state =  hlstrial.STATES.pause;
713					hlstrial.audio.pause();
714					event("pause");
715					break;
716				case hlstrial.STATES.pause: // from pause to playing
717					hlstrial.state = hlstrial.STATES.playing;
718					hlstrial.audio.play();
719					event("playing");
720					break;
721				case hlstrial.STATES.end: // from end to playing
722					hlstrial.state = hlstrial.STATES.playing;
723					var src = hlstrial.audio.src;
724					hlstrial.audio = null;
725					hlstrial.audio = new Audio();
726					hlstrial.audio.src= src;
727					hlstrial.audio.play();
728					event("playing");
729					break;
730			}
731		},
732	});
733})();
734// 友達プレゼント プレイリスト
735mumo.present = {
736		defaults:{
737			errorMessage:"登録に失敗しました。",
738		}
739};
740$(function(){
741	$("a.js-add_present_playlist").click(function(e){
742		var sendingKey = "sending";
743		e.preventDefault();
744
745		var self = $(this);
746
747		// 2重送信防止
748		if(!!self.data(sendingKey)){
749			return;
750		}else{
751			self.data(sendingKey, 1);
752		}
753
754		$.ajax({
755			url:self.data("href"),
756			cache:false,
757			success:function(data){
758				// 成功
759				if(data.success){
760					self.hide();
761					self.parent().find("a.js-confirm_present_playlist").show();
762					return;
763				}
764				// 以降は失敗
765				if(!!data.location){
766					location.assign(data.location); // 履歴に残る用にassignを使う
767				}else{
768					// 汎用的なエラー
769					alert(mumo.present.defaults.errorMessage);
770					location.reload();
771				}
772			},
773			error:function(){
774				// 通信エラーなど
775				alert(mumo.present.defaults.errorMessage);
776				location.reload();
777			},
778			complete:function(){
779				// 2重送信防止を解除
780				self.removeData(sendingKey);
781			},
782		});
783	});
784});
785
786/*
787 * クレジットカードのトークン決済処理
788 */
789function creditPurchase() {
790
791	// エラーの表示を消す
792	$(".cardError").hide();
793	$(".cardFormBox").removeClass("form-box--error");
794
795	var checkbox = document.getElementById("agreement");
796	var isValid = true;
797
798	if($("#default").length && $("#default").prop("checked")) {
799		// 登録済みのカードを使う場合も、同意のチェックボックスのみバリデーションをかける
800		if (!checkbox.checked) {
801			$("#agreementError").show();
802			isValid = false;
803		}
804		if(!isValid){
805			// バリデーションエラー発生時
806			$("html, body").scrollTop(0);
807			return;
808		}
809
810		// 登録済のクレジットカードを使う場合は、すぐデータ送信
811		$("#selectCard").val("default");
812		$("#credit_form").submit();
813	} else {
814		// 新しいクレジットカードを使用する場合
815		$("#selectCard").val("new");
816
817		// クライアントバリデーション
818		var regex = /^[a-zA-Z0-9 !-/:-@¥[-`{-~]+$/; // 半角英数字記号・半角スペースのみを許可する正規表現
819		if(!$("#cardNumber")[0].validity.valid){
820			$("#cardNumberError").show();
821			$("#cardNumberFormBox").addClass("form-box--error");
822			isValid = false;
823		}
824		if(!$("#cardName")[0].validity.valid || !(regex.test($("#cardName")[0].value))){
825			$("#cardNameError").show();
826			$("#cardNameFormBox").addClass("form-box--error");
827			isValid = false;
828		}
829		if(!$("#cardExpirationYear")[0].validity.valid || !$("#cardExpirationMonth")[0].validity.valid){
830			$("#cardExpirationError").show();
831			$("#cardExpirationFormBox").addClass("form-box--error");
832			isValid = false;
833		}
834		if(!$("#cardSecurityCode")[0].validity.valid){
835			$("#cardSecurityCodeError").show();
836			$("#cardSecurityCodeFormBox").addClass("form-box--error");
837			isValid = false;
838		}
839		if(!$("#email")[0].validity.valid){
840			$("#emailError").show();
841			$("#emailFormBox").addClass("form-box--error");
842			isValid = false;
843		}
844		if (!checkbox.checked) {
845			$("#agreementError").show();
846			isValid = false;
847		}
848		if(!isValid){
849			// バリデーションエラー発生時
850			$("html, body").scrollTop(0);
851			return;
852		}
853
854		// カード番号入力欄の入力値
855		var cardNo = $("#cardNumber").val()
856		var limitY = $("#cardExpirationYear").val();
857		var limitM = $("#cardExpirationMonth").val();
858		var secCode = $("#cardSecurityCode").val();
859		var fullName = $("#cardName").val();
860		var email = $("#email").val();
861
862		// API にカード番号,カード有効期限(年),カード有効期限(月),セキュリティコード, 生月日(月),生月日(日),
863		// 電話番号,カナ氏名(姓),カナ氏名(名),カード名義,メールアドレス,国際電話番号(国名コード),国際電話番号,
864		// 携帯電話番号(国名コード),携帯電話番号,郵便番号,国名コード,都市名,請求先住所情報ã
864®é †ç•ªã§ã‚»ãƒƒãƒˆã™ã‚‹ã€‚
865		// (設定しない項目は空文字をセット)
866		try {
867			SpsvApi.spsvCreateToken(cardNo, limitY, limitM, secCode,"","","","","",fullName, email,"","","","","","","","");
868		} catch (e) {
869			console.log(e);
870			alert("クレジットカードの登録が出来ませんでした。電波状況をご確認頂くか、しばらく経ってから再度お試し下さい。\nERR001");
871			$("html, body").scrollTop(0);
872			location.reload();
873		}
874	}
875}
876function setCreditToken(token, card) {
877	if(token == "") {
878		alert("クレジットカードの登録が出来ませんでした。入力内容や電波状況をご確認頂くか、しばらく経ってから再度お試し下さい。\nERR002");
879		$("html, body").scrollTop(0);
880		location.reload();
881	}
882
883	// クレジットカードデータ送信フォーム内の要素へトークンを設定
884	$("#cardToken").val(token);
885
886	// データ送信
887	$("#credit_form").submit();
888}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.