// main.js

nMenu = 0;
MenuOn = 0;

function bg0(oo) { oo.style.backgroundColor= "#ffdddd"; }
function bg1(oo) { oo.style.backgroundColor= "#ccffcc"; }
function dec(x,d) { with(Math){ if(x<0) { return "-"+dec(-x,d); } s1=String(round((1+x)*pow(10,d)));t1=s1.length; res=String( s1.substr(0,t1-d) -1); res2 = s1.substr(t1-d); if(res2>0) {res = res +'.'+res2; } return res; }}
function cal_click(oo) {
  s1 = oo.id.substr(4);
  var aa = { inputField:s1, ifFormat:'%Y-%m-%d', button:'dummy' }
  Calendar.setup(aa);
  dummy.onclick(); 
  calendar.showAtElement(fld(s1));
}
function disp0(n) { hideSelect(0); fld('list'+n).style.display = 'none'; }
function disp1(n) { hideSelect(1); fld('list'+n).style.display = ''; }
function dispAll(t) { for(n=1; n<=nMenu; n++) { fld('list'+n).style.display = (t==0) ?'none':''; } if(t==0) { hideSelect(0); }}
function fld(name) { oo = document.getElementById(name); if(oo==null) {alert('Unknown '+name);} else {return oo;} }
function fld2(name) { oo = document.getElementById(name); return oo; }
function go(txt) { form1.keyword.value=txt; form1.curpage.value=1; form1.submit(); }
function go2(pg) { form1.curpage.value=pg;  form1.submit1.value='GOTO'; form1.submit(); }
function go3(txt) { form1.direct.value=1; go(txt); }
function go4(dir) { form1.direct.value=dir; form1.submit(); }
function main1(prog1) { with (form0) { target='_self'; prog.value=prog1; submit(); } }
function main2(prog1,a2) { with (form0) { target='_self'; prog.value=prog1; act2.value=a2; submit(); } }
function msg(txt) { fld('msg_area').innerHTML=txt; }
function reload_cbo(fn,s1) { oo=fld(fn); oo.length=0; for(var k=0; k<s1.length; k++) oo.options.add ( new Option( s1[k], s1[k])); }
function reload_cbo2(fn,s1,s2) { 
  oo=fld2(fn); if (oo==null) return;
  oldval=oo.options[oo.selectedIndex].text;
  oo.length=0; 
  for(var k=0; k<s1.length; k++) { 
    var opt = document.createElement("option");
    oo.options.add(opt); 
    opt.value = s1[k];
    opt.text = s2[k];
    if(s2[k]==oldval) oo.selectedIndex=k;
  }
}
function round2 (x,d) { with (Math) { return round (x * pow(10,d) ) / pow(10,d) ; } }
function sum(t,r,s) { s1=0; s2=s.split2(/,/); for(i in s2) { s1 = s1 + v(fld("f"+s2[i]+"f"+r+"f"+t)) } return s1; }
function sum2(t,s){s1=0;for(r=1;r<=v(fld("son_t"+t));r++){s1=s1+v(fld("f"+s+"f"+r+"f"+t));}return s1; }
function toggle(o1) { o1.checked = !o1.checked; }
function toggleMenu() { MenuOn = (MenuOn==1)?0:1; }
function toggle_disp(a1) { oo=fld(a1); oo.style.display=(oo.style.display=='')?'none':''; return false; }
function v (oo) { with (Math) { x = parseFloat(String(oo.value)); return isNaN(x) ? 0 : x; } }
function wopen(fname) { window.open(fname); }

function unicode2url(str) {
      str = String(str);
	var i,c,ret="",strSpecial="!\"#$%&'()*+,/:;<=>?@[\]^`{|}~%";
	for(i=0;i<str.length;i++){
		if(str.charCodeAt(i)>=0x4e00)
			ret += "%u"+str.charCodeAt(i).toString(16)
		else{
			c=str.charAt(i);
			if(c==" ")
				ret+="+";
			else if(strSpecial.indexOf(c)!=-1)
				ret+="%"+str.charCodeAt(i).toString(16);
			else
				ret+=c;
		}
	}
	return ret;
}

var pending1, pending2, pending3;

function getName(tbl, key) {
  pending2 = fld(key+'c');
  pending3 = fld(key+'e');
  fld('rpc').src = "/?prog=getName&table=" + tbl + "&val=" + unicode2url(fld(key).value);
  return true;
}

function addMore(aa) {
  aa.href = aa.href +"&caller="+unicode2url(fld2("prog").value) +"&keyword="+unicode2url(fld2("keyword").value) +"&curpage="+unicode2url(fld2("curpage").value) +"&act2="+unicode2url(fld2("act9").value) +"&id="+unicode2url(fld2("id").value);
}

var oField;

function chkCode(tbl, fn, sid) {
  oField = fld(fn);
  fld('rpc').src="/?prog=chkCode&table="+ tbl +"&sid="+sid+"&val="+unicode2url(oField.value);
}

function loadCode(tbl, key, part, tag, win, row) {
  url = "/?prog=loadCode";
  if (row !== "undefined") url = url + "&row=" + unicode2url(row);
  if (tbl !== "undefined") url = url + "&table=" + unicode2url(tbl);
  if (key !== "undefined") url = url + "&key=" + unicode2url(key);
  if (part!== "undefined") url = url + "&part="+ unicode2url(part);
  if (tag !== "undefined") url = url + "&tag=" + unicode2url(tag);
  if (win=="undefined" || win=='' || win=='ajax') { ajax_queue(url+"&ajax=1"); return; }
  if (win=="undefined" || win=='' ) win='rpc';
  oo = fld2(win); if (oo==null) oo = fld('rpc'); oo.src = url;
}

function remCode(val) {
  fld('rpc').src="/?prog=label2_prn&act=add&val="+unicode2url(val);
}

function sugCode(tbl, fn, key2) {
  oField = fld(fn);
  fld('rpc').src="/?prog=sugCode&table="+ tbl +"&val="+ unicode2url(oField.value) +"&key2="+ unicode2url(key2);
}

var pending1, pending2, page2, after_ret, ret_obj;

function js_ask(fldname, prog, win, but) {
  ret_obj = new Array;
  pending1 = fld2(fldname);
  arr4 = fldname.split2(/f/);
  arr5 = but.id.split2(/[f|b]/);
  if( (arr5.length>=3) && (arr4[1]!==arr5[1]) ) {
    fldname = 'f'+arr4[0]+'f'+arr5[1]+'f'+arr4[2];
    pending1 = fld2(fldname);
    arr4[1] = arr5[1];
  }
  if (prog.match('#')) { 
    arr3 = prog.split2(/#/); 
    f1 = (arr4.length==3)?'f'+arr4[0]+'f'+arr4[1]+arr3[1]:arr3[1]; 
    prog = arr3[0]+unicode2url(fld2(f1).value); 
  }
  if (prog.match('!')) { 
    arr3 = prog.split(/(\!|&)/); prog = arr3[0]; 
    for(i=1; i<arr3.length; i+=1) {
      o3 = fld2(arr3[i])
      esc = o3==null ? '' : unicode2url(o3.value);
      prog += (arr3[i].charAt(0)=='f') ?  esc : "&"+arr3[i]; 
    }
  }
  prog = "/?prog=" + prog + "&qmode=1";
  if(win==null || win=='') win="enquiry1";
  page2 = fld2(win);
  if ( page2 != null && !page2.closed ) {
    page2.src = prog;
    page2.style.display = '';
  }
  return false;
}

function js_ret(ok,code) {
  if (ok) { pending1.value=""+code; chk(pending1); }
  page2.style.display = 'none';
//  page2.innerHTML = '';
  return false;
}

function remove(el) { o1=fld(el); o2=o1.parentNode; o2.removeChild(o1); }

function relive(tag) {
  fld("tag"+tag+"alt").style.display='none';
  fld("tag"+tag+"row1").style.display='';
  fld("f"+tag+"s").value = '1';
  recalc();
}

function rowact(obj,but) {
  par = obj.parentNode.id;
  var i = par.indexOf('row');
  var tag = round2(par.substr(3,i-3),0);
  var row = round2(par.substr(i+3),0);

  flds = v(fld("fld_tag"+tag));
  rows = v(fld("f"+tag+"s"));

  if (but==1) { // move current row to top
    if (row==1) return;
    tmp = new Array();
    for (j=0; j<flds; j++) tmp[j] = fld("f"+tag+"f"+row+"f"+j).value;
    for(i=row; i>1; i--) 
      for (j=0; j<flds; j++)
	fld("f"+tag+"f"+i+"f"+j).value = fld("f"+tag+"f"+(i-1)+"f"+j).value;
    for (j=0; j<flds; j++) fld("f"+tag+"f1f"+j).value = tmp[j];
    return;
  }
  if (but==2) { // move row up one
    if (row==1) return;
    for (j=0; j<flds; j++) {
      tmp = fld("f"+tag+"f"+row+"f"+j).value;
      fld("f"+tag+"f"+row+"f"+j).value = fld("f"+tag+"f"+(row-1)+"f"+j).value;
      fld("f"+tag+"f"+(row-1)+"f"+j).value = tmp;
    }
    return;
  }
  if (but==3) { // delete current row
    if( rows==1 ) { // last row, kept in
      fld("tag"+tag+"row1").style.display='none';
      fld("tag"+tag+"alt").style.display='';
    } else {
      for(i=row; i<rows; i++) 
	for (j=0; j<flds; j++)
	   fld("f"+tag+"f"+i+"f"+j).value = fld("f"+tag+"f"+(1+i)+"f"+j).value;
      remove("tag"+tag+"row"+rows);
    }
    fld("f"+tag+"s").value = String(rows-1);
    recalc();
    return;
  } 
  if (but==4 || but==5) { // insert and append row
    hei = round2(fld('f'+tag+'height').value,0);
    o1 = make_sibling("tag"+tag+"row"+rows, false); // duplicate whole row tag9row9
    o1.id = "tag"+tag+"row"+(1+rows);	       // adjust id for row
    hd  = 'f'+tag+'f'+rows+'f';
    hd2 = 'f'+tag+'f'+(1+rows)+'f';
    hd3 = 'f'+tag+'f'+rows+'b'; // button calling js_ask
    hd4 = 'f'+tag+'f'+(1+rows)+'b';
    hdl = hd.length;
    for(var son=0; son<o1.childNodes.length; son++) {  // adjust id for new obj
      o2 = o1.childNodes[son];
      if( (nid=String(o2.id))!=="undefined" && nid!=="" ){
	if(nid.substr(0,hdl)==hd)   { o2.id=hd2+nid.substr(hdl); o2.name=o2.id; o2.value=''; } 
	if(nid.substr(0,hdl)==hd3)  { o2.id=hd4+nid.substr(hdl); o2.name=o2.id; } // retain button value
	if(nid.substr(0,4)=='cal_') { o2.id='cal_'+hd2+nid.substr(hdl+4); o2.name=o2.id; o2.value=''; }
 	if(nid=='seq') o2.innerHTML = String(rows+1);
      }
      if( (s1=String(o2.style))!=="undefined" && s1!=='' ) {  // adjust top for obj
	if ( o2.style.top.match('px') ) o2.style.top = hei + round2(o2.style.top.substr(0, o2.style.top.length-2),0) + 'px';
      }
    }
    if(but==4){ // this is insert
      for(i=rows+1; i>row; i--) { //every row below *row* copy above value
	for (j=0; j<flds; j++) { 
	  up1 = "f"+tag+"f"+(i-1)+"f"+j; 
	  if ( (o2=fld2(up1))!==null ) fld("f"+tag+"f"+i+"f"+j).value = o2.value;
	}
	tagrow="tag"+tag+"row"+i;
	o1 = fld2(tagrow); // line number seq for the row
	if(o1.id==tagrow) for(var son=0; son<o1.childNodes.length; son++) 
	  if ( o1.childNodes[son].id == 'seq' ) o1.childNodes[son].innerHTML = i;
      }
      for(j=0; j<flds; j++) { o1="f"+tag+"f"+row+"f"+j; if ( (o1=fld2(o1))!==null ) o1.value = ''; }
    }
    fld("f"+tag+"s").value = String(rows+1);
    recalc();
    return;
  }
  if (but==6) { // duplicate current row
    hei = round2(fld('f'+tag+'height').value,0);
    o1 = make_sibling("tag"+tag+"row"+rows, false); // duplicate whole row tag9row9
    o1.id = "tag"+tag+"row"+(1+rows);	       // adjust id for row
    hd  = 'f'+tag+'f'+rows+'f';
    hd2 = 'f'+tag+'f'+(1+rows)+'f';
    hd3 = 'f'+tag+'f'+rows+'b'; // button calling js_ask
    hd4 = 'f'+tag+'f'+(1+rows)+'b';
    hdl = hd.length;
    for(var son=0; son<o1.childNodes.length; son++) {  // adjust id for new obj
      o2 = o1.childNodes[son];
      if( (nid=String(o2.id))!=="undefined" && nid!=="" ){
	if(nid.substr(0,hdl)==hd)   { o2.id=hd2+nid.substr(hdl); o2.name=o2.id; o2.value=''; } 
	if(nid.substr(0,hdl)==hd3)  { o2.id=hd4+nid.substr(hdl); o2.name=o2.id; } // retain button value
	if(nid.substr(0,4)=='cal_') { o2.id='cal_'+hd2+nid.substr(hdl+4); o2.name=o2.id; o2.value=''; }
 	if(nid=='seq') o2.innerHTML = String(rows+1);
      }
      if( (s1=String(o2.style))!=="undefined" && s1!=='' ) {  // adjust top for obj
	if ( o2.style.top.match('px') ) o2.style.top = hei + round2(o2.style.top.substr(0, o2.style.top.length-2),0) + 'px';
      }
    }

      for(i=rows+1; i>row; i--) { //every row below *row* copy above value
	for (j=0; j<flds; j++) { 
	  up1 = "f"+tag+"f"+(i-1)+"f"+j; 
	  if ( (o2=fld2(up1))!==null ) fld("f"+tag+"f"+i+"f"+j).value = o2.value;
	}
	tagrow="tag"+tag+"row"+i;
	o1 = fld2(tagrow); // line number seq for the row
	if(o1.id==tagrow) for(var son=0; son<o1.childNodes.length; son++) 
	  if ( o1.childNodes[son].id == 'seq' ) o1.childNodes[son].innerHTML = i;
      }

    fld("f"+tag+"s").value = String(rows+1);
    recalc();
    return;
  } 
}

function make_sibling(el, b4orLast) { 
  var obj=fld(el);
  var clone=obj.cloneNode(true);
  if (b4orLast) { obj.parentNode.insertBefore(clone,obj); } else {obj.parentNode.appendChild(clone); }
  return clone;
}

function monthend(obj,tar) {
  y = obj.value.substr(0,4);
  m = obj.value.substr(5,2);
  last = m==2 ? ((y % 4) == 0 ? "29" : "28") :( m==1||m==3||m==5||m==7||m==8||m==10||m==12 ? "31" : "30");
  fld(tar).value = y+"-"+m+"-"+last;
}

function addson(tag) {
  if(rows=v(fld("f"+tag+"s"))) {
    hei = round2(fld('f'+tag+'height').value,0);
    o1 = make_sibling("tag"+tag+"row"+rows, false);
    o1.id = "tag"+tag+"row"+(1+rows);
    hd = 'f'+tag+'f'+rows+'f';
    hd2 = 'f'+tag+'f'+(1+rows)+'f';
    hdl = hd.length;
    for(var son=0; son<o1.childNodes.length; son++) {
      o2 = o1.childNodes[son];
      if( (nid=String(o2.id))!=="undefined" && nid!=="" ) {
	if ( nid.substr(0,hdl)==hd ) { o2.id = hd2 + nid.substr(hdl); o2.name = o2.id; o2.value=''; }
	if ( o2.id == 'seq' ) innerHTML = rows+1;
      }
      if( (s1=String(o2.style))!=="undefined" && s1!=='' ) {
	if ( o2.style.top.match('px') ) o2.style.top = hei + round2(o2.style.top.substr(0, o2.style.top.length-2),0) + 'px';
      }
    }
  } else {
    fld("tag"+tag+"row1").style.display='';
    fld("tag"+tag+"alt").style.display='none';
  }
  fld("f"+tag+"s").value = String(++rows);
  return rows;
}

function sayson(obj) {
  if(lvl>2) return;
  
  if(!obj.hasChildNodes()) return;
  cnt = obj.childNodes.length;
  txt += obj.id +" has "+ cnt +" children<br>";

  for(i=0; i<cnt; i++) {
    if ( (son = obj.childNodes[i]) !== null ) {
      if ( son.id!==null && son.id!=='' ) {
	txt += "["+i+"] id = " + son.id + "<br>";
      }
    }
  }
}

function askCode(prog, key, fld1, js) {
  pending1 = fld(key);
  pending2 = fld(fld1);
  page2 = fld(prog);
  after_ret = js;
  prog = prog + "&qmode=1";
  if ( page2 != null && !page2.closed ) { 
    if (page2.src != "/?prog=" + prog) page2.src = "/?prog=" + prog;
    page2.style.display = '';
  }
  return false;
}

function retCode(ok, prog, s1, s2) {
  if (ok) {
    if ( pending1 != null) pending1.value=''+s1; 
    if ( pending2 != null) pending2.value=''+s2; 
  }
  page2 = fld(prog);
  if ( page2 != null && !page2.closed ) { 
    page2.style.display = 'none';
  }
  if (after_ret!==null && after_ret!=='') eval(after_ret);
  return false;
}

function hideSelect(toggle) {
  var forms = document.getElementsByTagName("form");
  for(i=0; i<forms.length; i++) {
    var selects = forms[i].getElementsByTagName("select");
    for(j=0; j<selects.length; j++) {
	selects[j].style.visibility = (toggle ==1) ? "hidden" : "visible";
    }
  }
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return {x:curleft, y:curtop}
}

tag_cnt = 0

function disp(n) {
  obj = fld2('tag_but1');
  if (obj===null) return;
  tag_top = 30 + findPos(obj).y

  for(i=1; i<=tag_cnt; i++) { 
    oo = fld('tag_but'+i); 
    if (oo!=null) { oo.style.backgroundImage = (i==n) ? 'url(/inc/tag1.gif)' : 'url(/inc/tag0.gif)'; }
    oo = fld('tag'+i);
    if (oo!=null) { 
       oo.style.top = tag_top; oo.style.display = (i==n) ? '' : 'none'; 
    }
  }
  oo = fld2('scr');
  if (oo!==null) oo.value=n;
}

function open_code(scr, prog, part) {
  var page2 = fld('code'+scr);
//alert('page2 ok');
  if (part.match('!')) { arr = part.split(/!/); part = arr[0]+unicode2url(fld(arr[1]).value); }
  if (part.match('#')) { arr = part.split(/#/); part = arr[0]+unicode2url(fld(arr[1]).value); }
  prog=prog+'&'+part;
  if ( page2 != null && !page2.closed ) { 
    if (page2.src != "/?prog=" + prog) page2.src = "/?prog=" + prog;
    page2.style.display = '';
  }
  return false;
}

function close_code(scr) {
  var page2 = fld('code'+scr);
  if ( page2 != null ) { 
    page2.style.display = 'none';
  }
  return false;
}

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
    }



function cr2s(evt) {
    evt = (evt) ? evt : event;
    var target = (evt.target) ? evt.target : evt.srcElement;
    var form = target.form;
    var charCode = (evt.charCode) ? evt.charCode :
	((evt.which) ? evt.which : evt.keyCode);
    if (charCode == 13) {
	if (validateForm(form)) {
	    form.submit();
	    return false;
	}
    }
    return true;
}


var ua = navigator.userAgent.toLowerCase() 
chrome = (ua.indexOf("chrome/") != -1) ? 1 : 0;
safari = (chrome==0 && ua.indexOf("safari/") != -1) ? 1 : 0;
ie6 = (chrome==0 && safari==0) ? 1 : 0;

var old_split =  String.prototype.split; 
var my_split = function(seperator) { 
  var result2 = old_split.apply(this, arguments); 
  if (ie6==1) { return result2; }
  var result = [];
  for(var n2=1; n2<result2.length; n2++) result[n2-1] = result2[n2];
  return result 
} 
String.prototype.split2 = my_split; 

var X2={};
X2.eval=function(code){
 if(!!(window.attachEvent && !window.opera)){
  //ie
  execScript(code); 
 }else{
  //not ie
  window.eval(code);
 }
}

function stopRKey(evt) { 
  var evt = (evt) ? evt : ((event) ? event : null); 
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); 
  if ((evt.keyCode == 13) && (node.type=="text"))  {return false;} 
} 


// end main.js
