	//全てのオブジェクトを使用不可にする
	function disableAllObject(){
		$('input').attr('disabled','disabled');
		$('select').attr('disabled','disabled');
	}

    function popupSetOffset(e,sender,id) {
		var offset = 0;
		
        var sizeX = $('#' + id).outerWidth(); 
        var sizeY = $('#' + id).outerHeight(); 
        //offsetX = (e.clientX < $(window).width() / 2) ? offset: -(sizeX + offset);
        //offsetY = (e.clientY < $(window).height() / 2) ? offset: -(sizeY + offset);
		var position = $(sender).position();
        var cssObj = {
            top: position.top + $(sender).outerHeight(),
            left: position.left + $(sender).outerWidth() / 2 - 20
        }
        $('#' + id).css(cssObj);
    }

 	function popupIn(e,sender,id){
        var message = $(sender).attr('message');
        $('#' + id).text(message);
        $('#' + id).fadeIn(300);
        popupSetOffset(e,sender,id);
    }
    
	function popupOut(e,sender,id){
        $('#' + id).hide();
    }

	function showReserveInfo(reserveNo,panelWidth,panelHeight){
		//パネルを表示する
		showPanel("/stores/reserveInfo/" + reserveNo,panelWidth,panelHeight);
	}

	//予約情報を保存する
	function saveReserveInfo( e, s, formId ){
		
		//formデータをJsonに変換
		jsonData = createFormToJson( s, formId );

		$.ajax({
		   type: "POST",
		   dataType: "json",
		   prosessData: false,
		   cache: false,
		   url: "/stores/reserveInfo/",
		   data: jsonData,
		   success: function(data){
				closePanel();
				$('#divReserveWait' + data['reserveNo']).fadeOut(1000,function(){
					$('#reserveWaitCount').text($('#reserveWaitCount').text() - 1);
				});
		   },
			error: function(XMLHttpRequest, textStatus, errorThrown){
				alert(textStatus);
				alert(XMLHttpRequest.responseText);
		   }
	 	});
	}

	//メール情報を送信する
	function sendMail( e, s, formId ){
		
		//formデータをJsonに変換
		jsonData = createFormToJson( s, formId );

		$.ajax({
		   type: "POST",
		   dataType: "json",
		   prosessData: false,
		   cache: false,
		   url: "/info/mail/",
		   data: jsonData,
		   success: function(data){
		   		
		   		//エラーチェックを行う
		   		if( ajaxCheckError(formId,data) ){
			   		$('#resultMessage').text(data.message);
					setTimeout("closePanel()",1500);
				}
		   },
			error: function(XMLHttpRequest, textStatus, errorThrown){
				alert(textStatus);
				alert(XMLHttpRequest.responseText);
		   }
	 	});
	}
	
	//予約用カレンダーを更新にする
	function refreshReserveCalendar( e, s,url, selectStoreTable ){
		$.ajax({
		   type: "POST",
		   prosessData: false,
		   cache: false,
		   url: url,
		   data: "selectStoreTable=" + (selectStoreTable == undefined ? "" : selectStoreTable ),
		   success: function(data){
				$('#reserveCalendar').after('<div id="dummyLong"></div>');
		   		$('#reserveCalendar').slideUp(500,function(){
				   		$('#reserveCalendar').html(data);
				   		$('#reserveCalendar').slideDown(500,function(){$('#dummyLong').remove();});
				   	});
		   },
			error: function(XMLHttpRequest, textStatus, errorThrown){
				alert(textStatus);
				alert(XMLHttpRequest.responseText);
		   }
	 	});
	}

	function showPanel(url,panelWidth,panelHeight){
		var screen = $('#screen');
		var panel = $('#panel');

		//横、縦を全て覆うように設定
        var cssObj = {
            width: $(document).width(),
            height: $(document).height()
        }

        var cssObjPanel = {
        	top: $(this).scrollTop() + ($(this).height() - panel.height()) / 2,
            left: ($(this).width() - panelWidth) / 2,
            width:panelWidth,
            height:panelHeight
        }

        screen.css(cssObj);
        panel.css(cssObjPanel);

		$.get(url, function(data){
			panel.html(data);
			panel.fadeIn(300);
		});

		screen.show();
		
		screen.bind("click",closePanel);
	}

	function closePanel(){
		//パネルを閉じる
		$('#screen').hide();
		$('#panel').fadeOut(300);
	}
	
	//formの値をjsonに変換する
	function createFormToJson(s,formId){
		var form = $("#" + formId );
		var param = {};

		// serializeArrayの戻り値は[{key: 'キーの名前', value: '値'}]という形式になっている
		$(form.serializeArray()).each(function(i, v) {
			param[v.name] = v.value;
		});
		
		//送信元のコントロールIDを設定する
		param[s.name] = s.value;

		//送信元がJsonデータであることを示す
		param['_dataType'] = 'json';

		var data = $.toJSON(param);
		data = $.evalJSON( data );

		return data;
	}
	
	function imageDeleteButtonClick(s,e,id,pathId){
		//値を削除
		$('#' + pathId).val('');

		//イメージを削除
		$('#' + id + '_img').fadeOut(1000,function(){ $(s).hide() } );
	}
	
	function ajaxCheckError(formId,data){
   		//エラーメッセージを全て削除
   		$('.ajaxErrorMessage').remove();
   		
   		if( ! data.result){
   			//エラーの場合
			jQuery.each(data, function(key, val) {
				switch(key){
					case 'message':
					case 'result':
						break;
					default:
						id = formId + initCap(key);
						if( $('#' + id).next('span').get() != '' ){
							$('#' + id).next('span').after(createErrorDiv(val));
						}else{
							$('#' + id).after(createErrorDiv(val));
						}
						break;
				}
			});
   			return false;
   		}
   		
   		return true;
	}
	
	//先頭文字を大文字にする
	function initCap(val){
		return val.substring(0, 1).toUpperCase() + val.substring(1);
	}
	
	//エラーDIVを出力する
	function createErrorDiv(message){
		$str = '<div class="ajaxErrorMessage">';
		$str += '<div class="error-message-left error-message">';
		$str += '<img id="id6509641835873452" src="/img/31p_112.gif"/>';
		$str += '</div>';
		$str += '<div>';
		$str += '<div class="error-message">' + message + '</div>';
		$str += '<br/>';
		$str += '</div>';
		$str += '</div>';
		
		return $str;
	}
