function replaceAll(aString, c1, c2)
{
    if (aString == "") return aString
    if (c1 == "") return aString

    // avoid infinite recursion when substituting aa for a by
    // providing an offset into the string.
    var argc = replaceAll.arguments.length
    if (argc < 4) {n = 0} else {n = replaceAll.arguments[3]}

    // find the first occurrence of c1 after the threshold
    var i = aString.indexOf(c1, n)

    // stop recursion and return the current string when c1 not found
    if (i < 0) return aString

    // extract substrings s1 and s2 around the c1
    var s1 = aString.substring(0, i)
    var s2 = aString.substring(i+c1.length, aString.length)

    // recurse with this new string
    return replaceAll(s1+c2+s2, c1, c2, (i+c2.length))
}

/*
機能  :cmdパラメータをセットし、フォームデータを送信する
引数  :cmdパラメータ値
引数  :フォームオブジェクト
引数  :フォームtargetパラメータ値
戻り値:なし
備考  :
*/
function setCmdTarget_postData(in_cmd, in_target, in_form){
    in_form.cmd.value = in_cmd;
    in_form.target=in_target;
    in_form.submit();
}


function postFormCmd(in_form,in_cmd,in_target){
    in_form.cmd.value = in_cmd;
    in_form.target = in_target;
    in_form.submit();
}

function setHiddenValue(in_elem,in_var){
    in_elem.value = in_var;

}

//汎用モジュール

var windowF = ""
function openWindowFoucus(aUrl, aWindowName, aPropaty)
{
    //var windowF;
    windowF=window.open(aUrl, aWindowName, aPropaty);
    window.onerror = null;
    windowF.blur(); 
    windowF.focus(); 
}
function openMinWindowFoucus(aUrl, aWindowName)
{
    openWindowFoucus(aUrl,aWindowName,"width=300,height=10,toolbar=no,resizable=yes,scrollbars=yes");
}

/**
* 指定されたラジオボタンを全て[0]の位置でチェックします。
* @param ラジオボタンのエレメント名
* @param ラジオボタンのエレメント名の最大値
* 例　
<input type=radio name='radio0'
<input type=radio name='radio1'
<input type=radio name='radio2'
と定義されている場合、
checkAllRadio("radio",3)
として呼び出す
*/
function checkAllRadio(aName,aCount){
    for (var i=0; i < aCount; i++){
        window.execScript(aName + i + "[0].checked=true");
    }
}
/**
* 指定されたチェックボックスを全て現在の状態から反転させます。
* @param チェックボックスのエレメント名
*/
function checkAllCheckbox(aCheckboxObj){
    for (var i=0; i < aCheckboxObj.length; i++){
        //window.execScript(aName + i + "[0].checked=true");
        if (aCheckboxObj[i].checked){
            aCheckboxObj[i].checked=false;
        } else {
            aCheckboxObj[i].checked=true;
        }
    }
}

function checkboxAllTrue(aCheckboxObj){
    count = 0;
    for (var i=0; i < aCheckboxObj.length; i++){
        aCheckboxObj[i].checked=true;
        count++;
    }
    if (count==0){
        aCheckboxObj.checked=true;
    }
}
function checkboxAllFalse(aCheckboxObj){
    count = 0;
    for (var i=0; i < aCheckboxObj.length; i++){
        aCheckboxObj[i].checked=false;
    }
    if (count==0){
        aCheckboxObj.checked=false;
    }
}
/**
* 指定されたエレメントの値に消費税を加算します。
* @param 対象とするエレメント名
*/
function addTax(aElement){
    if (aElement.value!=""){
        var price = eval(aElement.value);
        price = price * 1.05;
        aElement.value=Math.floor(price);
    }
}

function setComma(aElement){
    if (aElement.value!=""){
        val = aElement.value;
        val = comma(val);
        aElement.value = val;
    }
    window.status="";
}

/**
* 指定されたエレメント値の値をカンマ区切りで表示させます。
* @param 対象とするエレメント名
*/
function addComma(aElement){
    var code = event.keyCode;
    if (code != 9 && code != 16 && code != 37 && code != 39 && aElement.value!=""){
        val = aElement.value;
        val = comma(val);
        //aElement.value=val;
        window.status=val;
    }
}
function comma(val){
    if (val==""){
        return "";
    }
    if (val=="-"){
        return "-";
    }
    var minus = "";
    if (val.charAt(0)=="-"){
        minus = "-";
        val=val.substring(1);
    }
    var tmp="",c=0;
    for(i=0;i<val.length;i++){
        if(val.charAt(i)>="0"&&val.charAt(i)<="9"||val.charAt(i)=="."&&c++==0){
            tmp+=val.charAt(i);
        }
    }
    var d="",i=tmp.indexOf(".");
    if(i!=-1){
        d=tmp.substring(i);
        //if(d=="."){
        //    d="";
        //}
        tmp=tmp.substring(0,i);
    }
    while(tmp.charAt(0)=="0"&&tmp!="0"){
        tmp=tmp.substring(1);
    }
    val=tmp;
    tmp="";
    for(i=val.length-1;i>=0;i--){
        tmp=val.charAt(i)+tmp;
        if((val.length-i)%3==0&&i!=0){
            tmp=","+tmp;
        }
    }
    if(tmp==""&&d!=""){
        tmp="0";
    }
    if(minus!=""&&tmp==""){
        minus="";
    }
    return minus+tmp+d;
}

/**
* 非/表示　切替行を表示します。
* id 表示するグループ名(id名)
* lineCount 表示グループの行数
*/
function addEditLine(id,lineCount){
    for (var i=1;i <= lineCount;i++){
        var obj=document.getElementById(id + i);
        if(obj.style.display=="none"){
            obj.style.display="block";
            return;
        }
    }
}
/**
* 非/表示　切替行を非表示にします。
* id 表示するグループ名(id名)
* disableLineNo 非表示にする行番号
* lineCount 表示グループの行数
*/
function disableLine(id,disableLineNo,lineCount){
    for (var i=1;i <= lineCount;i++){
        var obj=document.getElementById(id + i);
        if (i<disableLineNo){
            obj.style.display="block";
        } else {
            obj.style.display="none";
        }
    }

}
/**
 * OPTIONオブジェクトを新規に生成し、取得します。
 */
function newOption(val,label){
    elm = document.createElement('option');
    elm.text = label;
    elm.value = val;
    return elm;
}
/**
 * OPTIONオブジェクトを新規に生成し、追加します。
 */
function addNewOption(selectEle,val,label){
    var s_opts = selectEle.options;
    selectEle.add(newOption(val,label),document.all ? s_opts.length : s_opts[s_opts.length]); 
}
function setAddressFromPostCode(aUrl,aFormName,postCodeEle,addressEle){
    aUrl += "?cmd=common_searchAddress&formName=" + aFormName + "&postCodeEle=" + postCodeEle.name + "&postCode=" + postCodeEle.value + "&addressEle=" + addressEle.name;
    fWindow=window.open(aUrl, "searchAddress", "width=300,height=10,toolbar=no,resizable=yes,scrollbars=yes");		 
}
function changeSelectEle2(aUrl,aFormName,targetSelectEle){
    aUrl += "?formName=" + aFormName + "&targetSelectEle=" + targetSelectEle.name;
    fWindow=window.open(aUrl, "changeSelectEle2", "width=300,height=10,toolbar=no,resizable=yes,scrollbars=yes");
}

function changeImage(targetEleId,imgSrc){
    var obj=document.getElementById(targetEleId);
    obj.src=imgSrc;
}
function blockId(targetId){
    var obj=document.getElementById(targetId);
    if (obj != null){
      obj.style.display="block";
    }
}
function inlineId(targetId){
    var obj=document.getElementById(targetId);
    if (obj != null){
      obj.style.display="inline";
    }
}
function noneId(targetId){
    var obj=document.getElementById(targetId);
    if (obj != null){
      obj.style.display="none";
    }
}

function changeClass(elementId,className){
    document.getElementById(elementId).className = className;
}

function getRadioValue(elementName){
    var radioEle = document.getElementsByName(elementName);
    for(i=0 ; i<radioEle.length ; i++){
            if(radioEle[i].checked){
                    return radioEle[i].value;
            }
    }
    return 0;
}

function getCookie(key){
    var tmp = document.cookie + ";";
    var index1 = tmp.indexOf(key, 0);
    if(index1 != -1){
            tmp = tmp.substring(index1,tmp.length);
            var index2 = tmp.indexOf("=",0) + 1;
            var index3 = tmp.indexOf(";",index2);
            return(unescape(tmp.substring(index2,index3)));
    }
    return("");
}

function setCookie(key, val){
	document.cookie = key + "=" + escape(val) + ";";
}

function getScrollCookie() {
  var scrollValue = getCookie("scroll");
  if (scrollValue.length > 0) {
    window.scrollTo(0, scrollValue);
    setCookie("scroll", 0);
  }
}

function setScrollCookie(doc, win) {
  var top  = 0;
  if (navigator.userAgent.indexOf('Gecko')!=-1) {
    top  = win.pageYOffset;
  } else if (navigator.userAgent.indexOf('Opera')!=-1) {
    top  = win.pageYOffset;
  } else {
    top  = doc.body.scrollTop
  }
  doc.cookie = "scroll=" + escape(top) +";";
}

function getJavaScriptEscape(value) {
  if (value.length > 0) {
    value = value.split("&");
    value = value.join("&amp;");
    value = value.split("<");
    value = value.join("&lt;");
    value = value.split(">");
    value = value.join("&gt;");
    value = value.split("'");
    value = value.join("&#39;");
    value = value.split("\"");
    value = value.join("&#34;");
    value = value.split("\n");
    value = value.join("<br>");
  }
  return value;
}

/**
* ドキュメント要素（エレメント）の可視属性を設定する。
* elementId 要素ID
* visibilityVal 要素の可視属性
*   スタイル・シートのvisibility値です。
*   visible（規定値：表示する）、hidden（表示しない）、inherit（継承）。
*/
function setElementVisibility(elementId, visibilityVal) {
    var targetEle = document.getElementById(elementId);
    targetEle.style.visibility = visibilityVal;
    if (visibilityVal == "visible"){
        changeBGVisibility(targetEle,"hidden");
    } else {
        changeBGVisibility(targetEle,"visible");
    }
}
/*
以下はレイヤー制御で使用
*/
function changeBGVisibility(targetEle,visibilityVal) {
    var tags = new Array("applet", "iframe", "select");
    for (var i=0; i < tags.length ;i++){
        var check_elements = document.getElementsByTagName(tags[i]);        
        for (var j = check_elements.length; j > 0;) {
            var check_element = check_elements[--j];
            if (checkArea(targetEle,check_element)){
                check_element.style.visibility = visibilityVal;
            }
        }
    }
}
function checkChild(targetEle,cehckEle){
    if (targetEle == cehckEle){
        return true;
    }
    for(var i=0; i< targetEle.childNodes.length; i++){
        if (checkChild(targetEle.childNodes[i],cehckEle)){
            return true;
        }
    }
    return false;
}
function checkArea(targetEle,cehckEle){
    if (checkChild(targetEle,cehckEle)){
        return false;
    }
    //x座標のチェック
    var tp = absolutePos(targetEle);
    var EX1 = tp.x;
    var EX2 = targetEle.offsetWidth + EX1;
    var EY1 = tp.y;
    var EY2 = targetEle.offsetHeight + EY1;
    var cp = getAbsolutePos(cehckEle);
    var CX1 = cp.x;
    var CX2 = cehckEle.offsetWidth + CX1;
    var CY1 = cp.y;
    var CY2 = cehckEle.offsetHeight + CY1;
    if ((CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) {
        return false;
    } else {
        return true;
    }
}
function absolutePos(el) {
    var r = { x: el.offsetLeft, y: el.offsetTop };
    if (el.offsetParent) {
        var tmp = getAbsolutePos(el.offsetParent);
        r.x += tmp.x;
        r.y += tmp.y;
    }
    return r;
}
