// Dinosoft Oy Markku Koskela PxAdmin
// px/Update/pxadmin.js

var test = true;

var _keys = new Array(0);
var _values = new Array(0);
var _stack = "";
var _lang = "";

function getKeys() {
if (typeof(ds.document.DATA)=="object" ) {
	 var a = ds.document.DATA.keys.value;
	 _keys = (a.length > 0) ? toArray(a) : new Array(0);
	 }
}

function setKeys() {
if (typeof(ds.document.DATA)=="object" ) {
	 ds.document.DATA.keys.value = "¤" + _keys.join("¤");
	 }
}

function getValues() {
if (typeof(ds.document.DATA)=="object" ) {
	 var a = ds.document.DATA.values.value;
	 _values = (a.length > 0) ? toArray(a) : new Array(0);
	 }
}

function setValues() {
if (typeof(ds.document.DATA)=="object" ) {
	 ds.document.DATA.values.value = "¤" + _values.join("¤");
	 }
}


function getStack() {
if (typeof(ds.document.DATA)=="object" ) {
	 var a = ds.document.DATA.stack.value;
	 _stack = (a.length > 0) ? a : "";
	 }
}

function setStack() {
if (typeof(ds.document.DATA)=="object" ) {
	 ds.document.DATA.stack.value = "¤" + _stack;
	 }
}


function saveForm(id, form) {
	 		var a = form.elements;
	 		var c = new Array(a.length); // tahan kenttien arvot
	 		for (var i=0; i<a.length; i++) {  c[i] = getValueByType(a[i]);}
			var d = "."+ c.join("."); //#
	 		setItem(id,d);
}

function getValueByType(a) {
// a = input kentta. Sen tyypin mukaan saadaan talletettava tieto
var r = "";
switch (a.type) {
  case "radio" :
	case "checkbox" :
			r = (a.checked) ? "t" : ""; 
			return r;
	case "select-one" :
	case "select-multiple" :
			for (var i = 0; i<a.options.length; i++) { r +=  (a.options[i].selected) ? "lt": "l" ;}
			if (r.indexOf("t") == -1) r ="ln"; // ei yhtään valittua
			else {if ((r + "l").indexOf("ll") == -1) r ="la"; }// valittu kaikki
			return r;
	default :
			r = a.value;
			while(r.indexOf(".") > -1) r=r.replace(".","#"); //#
			while(r.indexOf(" ") > -1) r=r.replace(" ","+"); //#
			return r;
	} 
}

function setItem(id,d) {
	getKeys();
	getValues();
	var idx = _keys.length;
	for (var i = 0; i < idx; i++) { 
			if (_keys[i] == id){ 
				 idx = i; 
				 break;
				 }
			}
  _keys[idx] = id;
	_values[idx] = d;				 
	setKeys();
	setValues();
}

function getItem(id) {
	getKeys();
	getValues();
	r = "";
	var idx = -1;
	for (var i = 0; i < _keys.length; i++) { 
			if (_keys[i] == id){ 
      	 r = _values[i];
				 break;
				 }
			}
  return r;
}

function getItems(id) {
    r = new Array(0);
		a = getItem(id);
		if (a.length > 0) r = toArray(a);
   return r;
}

function restoreForm(a,f) {
// input-kenttien arvojen palautus
// array a sis arvot
var e = f.elements;
var b;
for (var i=0; i<a.length; i++) {
  switch (e[i].type) {
		 case "hidden" : 
		 case "button" : 
		 case "submit" : 
		 case "reset" : break;
  	 case "radio" :
		 case "checkbox" :
					e[i].checked = (a[i] == "t") ? true : false ;
					break;
		 case "select-one" :
		 case "select-multiple" :
		 			b = toArray(a[i]);
					switch (b[0]) {
						case "a" :
							for (var j = 0; j<e[i].options.length; j++) {
									e[i].options[j].selected = true;
									}
							break;
					  case "n" :		
							for (var j = 0; j<e[i].options.length; j++) {
								e[i].options[j].selected = false;
								}
							break;								
						default :
					  	if (e[i].options.length >= b.length) {
								for (var j = 0; j<e[i].options.length; j++) {
										e[i].options[j].selected = (b[j] == "t") ? true : false;
										}
								}
							break;
					}
					break;
		 default :
		 			while(a[i].indexOf("#") > -1) a[i]=a[i].replace("#",".");
		 			while(a[i].indexOf("+") > -1) a[i]=a[i].replace("+"," ");
					e[i].value = a[i];
					break; 
	   }
	}
}

function saveForms(forms, id) {
	var n;
	for (var i = 0; i < forms.length; i++) {
			n = id + i;
			saveForm(n,forms[i]);
			}
}

function restoreForms(forms, id) {
	var n;
	var a;
	for (var i = 0; i < forms.length; i++) {
			n = id + i;
			a = getItems(n);
			restoreForm(a,forms[i]);
			}
}

function clearForms(id,len) {
	var n;
	for (var i = 0; i < len; i++) {
			n = id + i;
			setItem(n,"");
			}
}

function changeItemValue(item, value, s) {
// Huom: value vakiomittainen
var i = s.indexOf(item + "%3d");
var l = 3 + item.length;
if (i > -1) s = s.substring(0,i+l) + value + s.substring(i + l + value.length);
	i = s.indexOf(item + "=");
	l = 1 + item.length;
	if (i >= -1) s = s.substring(0,i+l) + value + s.substring(i + l + value.length);
return s; 
}

function toArray(a) {
// util
var b = a.substring(0,1);
a = a.substring(1,a.length);
return  a.split(b);
}


function toStack(item) {
// lis item pinon alkuun. Erottimena ";"
getStack();
_stack = item + ";" + _stack;
setStack();
}

function fromStack() {
// luetaan pino
getStack();
// otetaan eka item pinosta. Erottimena ";"
var i = _stack.indexOf(";");
r = _stack.substring(0,i);
_stack = _stack.substring(i+1);
setStack();
return r;
}


function forward(fr1, fr2, f) {
// sivuhierarkiassa eteenpain
// fr1 frame johon target sijoitetaan
// fr1 nykyinen location talletetaan paluuosoitteeksi pinoon
// fr2 = talletettava frame - ei tarvitse olla ylimmalla tasolla
// f = form to be submitted - jos puuttuu, ei siirryta 
var s = frames[fr1].location.toString();
if (arguments.length > 1) {
	 var p = eval(fr2 + ".window.location.pathname"); 
	 var f = eval(fr2 + ".document.forms");
	 saveForms(f,p);
	 var i = s.indexOf("RESTORE=");
	 if ( i > -1) s = s.substring(0,i-1);
	 var c = (s.indexOf("?") == -1) ? "?" : "&";
 	 s = s + c + "RESTORE=" + p;
	 }
if (test) 
("ForwardtoStack=" + fr1 + ":" + s);	 
toStack(fr1 + ":" + s);
if (arguments.length > 2) {
	 if (test) alert(f);
   f.submit();
	 }
}

function back() {
// sivuhierarkiassa taaksepain
var s = fromStack();
var i = s.indexOf(":");
var fr = s.substring(0,i);
var l = s.substring(i+1);
l = changeItemValue("LANG",Lang(),l);
var b = true;
if (test) b = confirm("PaluuURL:" + fr + ".window.location =" + l);
if (b) {
	 if (l.length > 0) { eval(fr +".window.location = l");}
	 else {backwards();}
	 }
}

function restore(key,fr,forms,idx)
{
// key: page window.location.pathname
// fr: frame whose location string contains restore-clause 
// forms: forms to be restored
// idx: form idx to be submitted 
if (test) alert("restore:" + arguments);
var s = eval(fr + ".window.location.search"); 
var k = "RESTORE=" + key;
if (test) { var b = s.indexOf(key) > -1; 
	 					alert("location.search=" + s +"\nkey=" + k + "\nRestore=" + b );
						}
if (s.indexOf(key) > -1) {
	 restoreForms(forms,key);
	 if (arguments.length > 3) {
	 			var f = forms[idx]
				if (f.LANG) f.LANG.value = Lang();
				if (test) alert(f.name + ":LANG=" + f.LANG.value)
				f.submit();
				}
	 }
}

function shouldRestore(key,fr) {
var s =  eval(fr + ".window.location.search");
key = "RESTORE=" + key;
var b = s.indexOf(key) > -1;
if (test) alert("search="+ s + "\nkey=" + key + "\nshouldRestore=" + b );
return b;
}

function backwards(){
top.body.history.go(1-top.body.history.length);
}

function readRadio(r) {
if (r.value) { return (r.checked) ? r.value: "" ; }
else {
		for (var i = 0; i < r.length; i++)
		 if (r[i].checked) { return r[i].value;}
		 }
return "";		 
}		  

function trimStart(s) {
// Drop leading blank characters
var r ="";
for (var i=0; i<s.length; i++) {if (s.charAt(i) !=" ") break;} 
		return s.substring(i);
}		
		 
function showStack() {
getStack();
var s = _stack.split(";");
var m = "";
for (var i = 0; i<s.length; i++) m += s[i] + "\n";
alert(m); 
}

function showDat() {
getKeys();
getValues();
var m = "";
for (var i = 0; i < _keys.length; i++)  {
  m += _keys[i] + " : " + _values[i] + "\n"; 
	}
alert(m);	
}
 
function showHidden(fr) {
if (arguments.length == 0) { 
	 show("Syntax:","showHidden(<fr>)");return;
	 }
var m = "";
var f = fr.document.forms;
var n;
for (i = 0; i < f.length; i++) {
		n = f[i].name;
		n = (n.length > 0) ? n : i;
		m += "form " + n + "\n";
		m = showHiddenFields(f[i],m); 
		} 
alert(m);
}

function showHiddenFields(form,m) {
var n;
var f;
for (var i = 0; i<form.elements.length; i++) {
		f = form.elements[i];
		if (f.type == "hidden") {
			n = f.name;
			n = (n.length > 0) ? n : "field " + i;
			m += " - " + n + " : " + f.value + "\n";
			}
		}
return m;		
}


function isFirst(bool){
if (ds.document) {
	 var d = ds.document.SESSION;
	 if (arguments.length==0) {
	 		return d.isfirst.value.toUpperCase()=="TRUE";
 	 		} else {
	 		d.isfirst.value=bool;
	 		}
	 } else {
	 if (arguments.length==0) return true;
	 }
}


