function fx_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=fx_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

var xObjwin;
//一覧ポップ
function fx_pop(URL)
{
    fx_NewWin(URL,'subwin','width=500,height=600,scrollbars=yes');
}

///////////////////////////////////////////////////////////////////////////////
//関数：    fmNewWin()
//
//引数：    
//
//戻値：    なし
//
//機能：    WindowsをOpenする
//
////////////////////////////////////////////////////////////////////////////////
function fx_NewWin(wURL, wFlameNM, wAttr, lIdx)
{


    if( !!xObjwin )
    {
        if ( xObjwin.closed == false )
        {
            xObjwin.close();
        }
    }
    if ( wAttr.indexOf('height',0) == -1 )
    {
        wAttr += ',height=' + ( screen.availHeight - 30 )
    }
   if(typeof(lIdx) == "undefined") {
      lIdx= 0;
   }
   
   if ( wAttr=='' )
   {
        wAttr = 'resizable=yes';
   }
   else
   {
        wAttr = wAttr + ',resizable=yes';
   }
    //alert(wAttr);

    xObjwin = window.open('about:blank', wFlameNM, wAttr);
    //必要に応じてsubmit
    //xObjwin.location.href = wURL
    //fx_submit(wURL,lIdx,wFlameNM);

   if(typeof(lIdx) == "undefined") {
      lIdx= 0;
   }

   if(typeof(wFlameNM) == "undefined") {
        sTarget = "_self";
   }

   window.document.forms[lIdx].target = wFlameNM;
   window.document.forms[lIdx].action = wURL;
   window.document.forms[lIdx].submit();


}

function fx_submit(sURL,lIdx,sTarget)
{
   var sAttr = '';

    if(document.forms[0].i_init)
    {
        document.forms[0].i_init.value= '';
    }

   if(typeof(lIdx) == "undefined") {
      lIdx= 0;
   }

   if(typeof(sTarget) == "undefined") {
        sTarget = "_self";
   }

   
   window.document.forms[lIdx].target = sTarget;
   window.document.forms[lIdx].action = sURL;
   window.document.forms[lIdx].submit();
}



function fx_is_opener(NW)
{
    var ua = navigator.userAgent
    if( !!NW.opener )
        if( ua.indexOf('MSIE 4')!=-1 && ua.indexOf('Win')!=-1 ) 
            return !window.opener.closed
        else return typeof window.opener.document == 'object'
    else return false
}

function fx_set_date() {
	myDate=new Date();
	fx_findObj("selYYYY").value=myDate.getFullYear();
	fx_findObj("selMM").value=sprintf('%02d',myDate.getMonth()+1);
	fx_findObj("selDD").value=sprintf('%02d',myDate.getDate());
}

function printf() {
  document.write(va_sprintf(printf.arguments));
}

// str = sprintf(format, ...);
function sprintf() {
  return va_sprintf(sprintf.arguments);
}

function va_sprintf(args) {
  var ch;
  var value;
  var longflag;
  var ljust;
  var len, llen;
  var zpad;
  var p;
  var output;
  var format_index, arg_index;
  var argc, argv;
  var specin;
  var format;

  output = '';
  format_index = 0;
  arg_index = 1;
  argv = args;
  argc = args.length;
  format = args[0];

  while (format_index < format.length) {
    ch = format.substr(format_index++, 1);
    if (ch != '%' || format_index == format.length) {
      output += ch;
    } else {
      // ch == '%'
      ljust = len = zpad = longflag = 0;
      llen = -1;
      p = format_index;
      specin = true;

      while (specin) {
	ch = format.substr(format_index++, 1);
	switch(ch) {
	case '-':
	  ljust = 1;
          continue;

	case '0':         // set zero padding if len not set
	  if(len == 0)
	    zpad = 1;
	  // FALLTHROUGH
	case '1': case '2': case '3':
	case '4': case '5': case '6':
	case '7': case '8': case '9':
	  len = len * 10 + parseInt(ch);
	  continue;

	case '.':
	  llen = len;
	  len = 0;
	  continue;

	case '*':
	  if (arg_index < argc)
	    len = parseInt(argv[arg_index++]);
	  else
	    len = 0;
	  if (len < 0) {
	    ljust = 1;
	    len = -len;
	  }
	  continue;

	case 'l':
	  longflag = 1;
	  continue;

	case 'u': case 'U':
	  if (arg_index < argc) {
	    if (longflag) {
	      value = parseInt(argv[arg_index++]);
	    } else {
	      value = parseInt(argv[arg_index++]);
	      value %= 4294967296;
	    }
	  } else {
	    value = 0;
	  }
	  output += _dopr_fmtnum(value, 10,0, ljust, len, zpad);
	  break;

	case 'o': case 'O':
	  if (arg_index < argc) {
	    if (longflag) {
	      value = parseInt(argv[arg_index++]);
	    } else {
	      value = parseInt(argv[arg_index++]);
	      value %= 4294967296;
	    }
	  } else {
	    value = 0;
	  }
	  output += _dopr_fmtnum(value, 8,0, ljust, len, zpad);
	  break;

	case 'd': case 'D':
	  if (arg_index < argc) {
	    if (longflag) {
	      value = parseInt(argv[arg_index++]);
	    } else {
	      value = parseInt(argv[arg_index++]);
	      value %= 4294967296;
	    }
	  } else {
	    value = 0;
	  }
	  output += _dopr_fmtnum(value, 10,1, ljust, len, zpad);
	  break;

	case 'x':
	  if (arg_index < argc) {
	    if (longflag) {
	      value = parseInt(argv[arg_index++]);
	    } else {
	      value = parseInt(argv[arg_index++]);
	      value %= 4294967296;
	    }
	  } else {
	    value = 0;
	  }
	  output += _dopr_fmtnum(value, 16,0, ljust, len, zpad);
	  break;

	case 'X':
	  if (arg_index < argc) {
	    if (longflag) {
	      value = parseInt(argv[arg_index++]);
	    } else {
	      value = parseInt(argv[arg_index++]);
	      value %= 4294967296;
	    }
	  } else {
	    value = 0;
	  }
	  output += _dopr_fmtnum(value, -16,0, ljust, len, zpad);
	  break;

	case 's':
	  if (arg_index < argc) {
	    value = argv[arg_index++];
	    if(value == null)
	      value = "(null)";
	    else
	      value = value + "";	// toString
	  } else {
	    value = '';
	  }
	  output += _dopr_fmtstr(value, ljust, len, llen);
	  break;

	case 'c':
	  if (arg_index < argc) {
	    value = parseInt(argv[arg_index++]);
	  } else {
	    value = 0;
	  }
	  output += _dopr_fromCharCode(value);
	  break;

	case '%':
	  output += '%';
	  break;

/* Not supported
	case 'f': case 'e': case 'E': case 'g': case 'G':
	  if (arg_index < argc) {
	    value = argv[arg_index++];
	  } else {
	    value = 0.0;
	  }
	  output += _dopr_fmtdouble(format.substr(p, format_index - p), value);
	  break;
*/

	default:
	  if(p + 1 == format_index) {
	    output += '%';
	    output += ch;
	  }
	  else {
	    // alert("format error: " + format);
	  }
	  break;
	}
	specin = false;
      }
    }
  }
  return output;
}

// Private function
function _dopr_fmtnum(value, base, dosign, ljust, len, zpad)
{
  var signvalue = '';
  var uvalue;
  var place = 0;
  var padlen;		// amount to pad
  var caps = 0;
  var convert;
  var output;

  convert = '';
  output = '';

  if(value >= 0)
    uvalue = value;
  else
    uvalue = (value % 4294967296) + 4294967296;

  if (dosign) {
    if (value < 0) {
      signvalue = '-';
      uvalue = -value;
    }
  }

  if (base < 0) {
    caps = 1;
    base = -base;
  }

  if(uvalue == 0) {
    convert = '0';
    place = 1;
  } else {
    while (uvalue) {
      if(caps)
	convert = '0123456789ABCDEF'.substr(uvalue % base, 1) + convert;
      else
	convert = '0123456789abcdef'.substr(uvalue % base, 1) + convert;
      uvalue = parseInt(uvalue / base);
      place++;
    }
  }

  padlen = len - place;
  if (padlen < 0) padlen = 0;
  if (ljust) padlen = -padlen;

  if (zpad && padlen > 0) {
    if(signvalue) {
      output += signvalue;
      --padlen;
      signvalue = 0;
    }

    while (padlen > 0) {
      output += '0';
      --padlen;
    }
  }

  while (padlen > 0) {
    output += ' ';
    --padlen;
  }
  if (signvalue) {
    output += signvalue;
  }

  output += convert;
        
  while(padlen < 0) {
    output += ' ';
    ++padlen;
  }
  return output;
}

// Private function
function _dopr_fmtstr(value, ljust, field_len, llen)
{
  var padlen;			// amount to pad
  var slen, truncstr = 0;
  var output = '';

  slen = value.length;

  if (llen != -1) {
    var rlen;

    rlen = field_len;
    if (slen > rlen) {
      truncstr = 1;
      slen = rlen;
    }
    field_len = llen;
  }
  padlen = field_len - slen;
        
  if (padlen < 0)
    padlen = 0;
  if (ljust)
    padlen = -padlen;
  while (padlen > 0) {
    output += ' ';
    --padlen;
  }
  if (truncstr) {
    output += value.substr(0, slen);
  } else {
    output += value;
  }

  while (padlen < 0) {
    output += ' ';
    ++padlen;
  }
  return output;
}

