;(function($){

	$(window).load(function(event){
		// Form manipulation
		var jForm = $('form#ajaxSubmit');
		((0 < jForm.size()) ? jForm : $('form:first')).formMan2();
	});

	// From http://groups.google.com/group/jquery-en/browse_thread/thread/df28d794de5a9c4e/d53038a86929c34f?pli=1
	$.fn.sort = function() {return this.pushStack( $.makeArray( [].sort.apply( this, arguments ) ) );}; 

	// Form manipulation
	$.fn.formMan2 = function(opts) {
		var settings = {
			sFMsgCls	: "errmsg",
			sMsgSaved	: "\u767b\u9332\u3057\u307e\u3057\u305f\u3002", // 登録しました。のメッセージ
			sKeepCls	: "unreplaceable",
			onRowPlace: null
		};
		$.extend(settings, $.hybs.defaults, opts || {});
		
		return this.each(function() {
			var oForm = this;
			var mParams = {};
			// 処理先のJSPを自動でajaxSubmitモードにする
			// mParams[settings.sAjxSbmtKey] = 'true';
			
			/*-------------------------------------------------
				form Plugin のパラメーター設定
			---------------------------------------------------*/
			var formOpts = {};
			// formOpts.data = mParams;

			// submit前
			formOpts.beforeSubmit = function (formData, jqForm, options) {
			/* -----------------------------------------
				// 画面に押された操作ボタンのcommandをを取得
				var sName = settings.sHybsCmd;
				var aPair = $.grep(formData, function(a){return (a.name == sName);});
				if(aPair) {
						sName = 'hX_' + aPair[0].value + 'CMD';
						aPair = $.grep(formData, function(a){return (a.name == sName);});
				}
				jqForm[0].hCMD = (aPair) ? aPair[0].value : '';
			   ----------------------------------------- */

				return (settings.beforeSubmit) ? settings.beforeSubmit(formData, jqForm, options) : true;
			};

			// 成功時
			formOpts.success = function(data, status, $form) {
				var sHybsCmd = $form.data($.hybs.defaults.sHybsCmd).cmd;

				// サーバーから帰ってきたデータにrow_errorの有無を確認する
				if(data.indexOf("row_error") >=0) {
					// 二度押しチェックのフラグを戻す
					isClicked = false
					var match = /(?:<\/table>)*[\S\s]*(\[\d+ - \d+\]\/\[\d+\])[\S\s]*(<table[^>]*?>[\S\s]+?row_error[\S\s]*<\/table>)/m.exec(data);
					$.hybs.ogAlert(match ? (match[1] + match[2]) : data);
				}
				else if($.inArray(sHybsCmd, [settings.sCmdInsert, settings.sCmdCopy, settings.sCmdModify, settings.sCmdDelete
																												, settings.sCmdEntry, settings.sCmdUndo]) >= 0) {
					// command=ENTRYでサーバーから帰ってきたデータにid="noTransitionUrl"が有れば、そのURLの画面に遷移する
					if(sHybsCmd == settings.sCmdEntry) {
						var match = /<div id="noTransitionUrl">(.*)<\/div><div id="noTransitionTarget">(.*)<\/div>/m.exec(data);
						if(match) {
							var sUrl = match[1];
							var sFrame = match[2];
							var oFrame = ( sFrame != "null" ) ? eval( "top." + sFrame ) : window;
							oFrame.location.href = sUrl;
						}
					}
				}
			};

			// エラー発生時
			formOpts.error = function (xhr, status, e) {
				$.hybs.ogLog(status + '\n' + xhr.responseText);

				$.hybs.ogAlert(status + '<br/>' + xhr.responseText);
			};

			// 送信し、データが戻された後の完了処理
			formOpts.complete = function (xhr, status) {
				// クリックしたボタン情報をクリア
				$(oForm).removeData($.hybs.defaults.sHybsCmd);
			}

			// 動作させるcommandを選択 ajaxSubmit.jsはENTRY時のみ動作させる。
			formOpts.cmds = formOpts.cmds || 
						[settings.sCmdEntry];

			//ajaxFormを呼び出す
			$(oForm).ajaxHybsForm(formOpts);
		});
	};

})(jQuery);

