
/////////////////////////////////////////////////////////////////////////////
var sdeDebugMode = false;

/////////////////////////////////////////////////////////////////////////////
// 送信ステータス
var orteusSubmitStatus = false;

// 一時的に check を OFF するフラグ。あるボタンのみ一時的にチェックオフ
// したい場合に、onClick でこれを true にしてから submit する
var sdeDisableCheckSubmitStatus = false;

// 一時的に client side validation を OFF にするフラグ。
var sdeDisableClientValidationStatus = false;

/////////////////////////////////////////////////////////////////////////////
// 二重送信チェック
function sdeCheckDoubleSubmit() {
    var result = true;
	if (sdeDebugMode) {
		alert("sdeCheckDoubleSubmit : sdeDisableCheckSubmitStatus = " + sdeDisableCheckSubmitStatus);
	}

    if (sdeDisableCheckSubmitStatus == false) {
        if (orteusSubmitStatus) {
            result = false;
        } else {
            orteusSubmitStatus = true;
            result = true;
        }
    }
    sdeDisableCheckSubmitStatus = false;
    return result;
}

// 互換関数
function orteusCheckDoubleSubmit() {
    return sdeCheckDoubleSubmit();
}

/////////////////////////////////////////////////////////////////////////////
// 一度だけ二重送信チェックを無効にする
function sdeDisableCheckSubmitOnce() {
    sdeDisableCheckSubmitStatus = true;
}

/////////////////////////////////////////////////////////////////////////////
// 名前を指定して Form を submit する
// 非推奨にしたい
function orteusSubmitForm(formname, method) 
{
    var form = null;
    for (i=0; i < document.forms.length; i++) {
        if (document.forms[i].name == formname) {
            form = document.forms[i];
            break;
        }
    }
    if (form == null) {
        alert("Form name error : " + formname);
        return false;
    }

    var action = form.action;
    var params = "com.nec.jp.orteusActionMethod.orteusSubmitByLink=" + method;
    
    if (-1 == action.indexOf("?", 0)) {
        action = action + "?" + params;
    }
    else {
        action = action + "&" + params;
    }
    
    form.action = action;
    form.submit();
    
    return false;
}

/////////////////////////////////////////////////////////////////////////////
// form object, event 名を指定して submit する
function sdeSubmitFormWithEvent(form, method, target, checkDoubleSubmit, validation) 
{
    return sdeInternalSubmitForm(form, "com.nec.jp.orteusActionMethod.orteusSubmitByLink", method, target, checkDoubleSubmit, validation);
}

/////////////////////////////////////////////////////////////////////////////
// form object, button 名を渡して submit する
function sdeStrutsSubmitFormViaButton(form, buttonName, target, checkDoubleSubmit, validation) {
    return sdeSubmitFormWithButton(form, buttonName, target, checkDoubleSubmit, validation);
}

// form object, button 名を渡して submit する
function sdeSubmitFormWithButton(form, buttonName, target, checkDoubleSubmit, validation) {
    
    // ボタンの検索
    var button = null;
    var candName = buttonName.toLowerCase();
    for(i=0;i<form.elements.length;i++){
        if(form.elements[i].id.toLowerCase() == candName || form.elements[i].name.toLowerCase() == candName){
            button = form.elements[i];
            break;
        }
    }
    if (button == null) {
        // error
		if (sdeDebugMode) {
			alert("sdeSubmitFormWithButton : button is not found : " + buttonName);
		}
        return false;
    }
    
    return sdeInternalSubmitForm(form, button.name, button.name, target, checkDoubleSubmit, validation);
}

/////////////////////////////////////////////////////////////////////////////
// 内部送信メソッド

function sdeInternalSubmitForm(form, eventKey, eventValue, target, checkDoubleSubmit, validation) 
{
    if (checkDoubleSubmit == false) {
        // 二重送信チェックをしない。form.onSubmit によりチェックする
        sdeDisableCheckSubmitOnce();
		if (sdeDebugMode) {
			alert("sdeInternalSubmitForm : call sdeDisableCheckSubmitOnce");
		}
    }
    
    // client validation
    if (validation == false) {
        sdeDisableClientValidationOnce();
		if (sdeDebugMode) {
			alert("sdeInternalSubmitForm : call sdeDisableClientValidationOnce");
		}
    }

    // onsubmit を呼び出す
    if (form.fireEvent("onsubmit") == false) {
		if (sdeDebugMode) {
			alert("sdeInternalSubmitForm : onsubmit return false.");
		}
        return false;
    }

    var orgAction = form.action;
    var action = orgAction;
    // method parameter
    action = addParameter(action, eventKey + "=" + eventValue);

    // server validation
    if (validation == false) {
        action = addParameter(action, "orteusSubmitValidation." + eventKey + "=false");
    }

    // target check
    var orgTarget = form.target;
    if (target != null) {
        form.target = target;
        // target が指定されたら、keepRequestContextFlag も ON にする
        action = addParameter(action, "orteusLeftReqCtxt=true");
    }

    form.action = action;

	if (sdeDebugMode) {
		alert("sdeInternalSubmitForm : form.action = " + form.action);
	}

    form.submit();
    
	if (sdeDebugMode) {
		alert("sdeInternalSubmitForm : form is submitted.");
	}

    // 元に戻す
    form.action = orgAction;
    form.target = orgTarget;
    return true;
}

/////////////////////////////////////////////////////////////////////////////
// 一度だけ client side validation を無効にする
function sdeDisableClientValidationOnce() 
{
    sdeDisableClientValidationStatus = true;
}

/////////////////////////////////////////////////////////////////////////////
// client side validtion を実行する
function sdeDoClientValidation(form, func)
{
    if (func == null) {
		if (sdeDebugMode) {
			alert("sdeDoClientValidation : func is null");
		}
		return true;
	}

	if (sdeDebugMode) {
		alert("sdeDoClientValidation : sdeDisableClientValidationStatus = " + sdeDisableClientValidationStatus);
	}

    var result = true;
    if (sdeDisableClientValidationStatus == false) {
        result = func(form);
    }
    sdeDisableClientValidationStatus = false;
    return result;
}

/////////////////////////////////////////////////////////////////////////////
// パラメータ結合
function addParameter(url, param)
{
    var result = url;
    if (-1 == result.indexOf("?", 0)) {
        result = result + "?" + param;
    }
    else {
        result = result + "&" + param;
    }
    return result;
}

/////////////////////////////////////////////////////////////////////////////
// decapitalize
// java.bean.Introspector と同じ仕様で decapitalize する
function sdeBeanNameDecapitalize(name) {

    if (name == null || name.length == 0) {
        return name;
    }
    
    if (name.length > 1 && sdeIsUpperCase(name.charAt(1)) && sdeIsUpperCase(name.charAt(0))){
        return name;
    }

    var result = name.charAt(0).toLowerCase();
    result = result + name.substring(1, name.length);
    return result;
}

/////////////////////////////////////////////////////////////////////////////
// 小文字判定
function sdeIsLowerCase(c) {
    
    if (c.length == 0) return false;
    
    var code = c.charCodeAt(0);
    if (0x61 <= code && code <= 0x7a) return true;
    
    return false;
}

// 大文字判定
function sdeIsUpperCase(c) {
    
    if (c.length == 0) return false;
    
    var code = c.charCodeAt(0);
    if (0x41 <= code && code <= 0x5a) return true;
    
    return false;
}


