/* Dynamic Options - Michal Kubis (kubis@pobox.sk) */
/* Dynamicky vyber pomocou JavaScriptu - www.Interval.cz */

/* globalne premenne */
var s = new Array() // inicializacia pola SELECTov
var o = "_mk_do_" // oddelovac OPTIONu od vrateneho textu v poslednom SELECTe
var html="" // generovany html kod

/* 
function PocetSelectov(kod) - zisti z kolkych SELECTov sa sklada formular,
podla kodu, ktory je vstupnym argumentom funkcie DO(kod)
 */
function PocetSelectov(kod){
var pocet_selectov = 1
for(var i=0 ; i<kod.length ; i++)
	if(kod.charAt(i) == ".")
		pocet_selectov++
return pocet_selectov
}

function DO(kod){
var index1
var index2

pocet_selectov = PocetSelectov(kod)

html += "<form name=f_do>"

for(var id_select=0 ; id_select<pocet_selectov ; id_select++){
	html += "<select size=1 onChange=ChangeDO(" + id_select + "," + pocet_selectov + ")>"
	NaplnSelecty(id_select + 1,pocet_selectov) // generujem html retazec - plnim kazdy SELECT vsetkymi OPTIONami
	html += "</select>"
	}

html += "&nbsp;&nbsp;<input type=button value=Ok onClick=SubmitDO(" + pocet_selectov + ")>"
html += "</form>"

document.write(html)

for(var id_select=0 ; id_select<pocet_selectov ; id_select++){ // ako prve sa zobrazi to, co je na vstupe DO()
	document.f_do.elements[id_select].options[kod.split(".")[id_select]].selected = true
	ChangeDO(id_select,pocet_selectov)
	}
}

/*
function ReturnCode(end_select) - vrati code po prvok SELECT s indexom end_select podla zvolenych OPTION
*/
function ReturnCode(end_select){ 
var code=""
for(var i=0 ; i<end_select ; i++){
	code += document.f_do.elements[i].selectedIndex
	if(i < end_select - 1)
		code += "."
	}
return code
}

/*
function SubmitDO(pocet_selectov) - ak sa stlaci potvrdzovacie tlacitko zavola sa funkcia SubmitDO, ktora nacita napr. dalsiu stranku (v ukazke sa zavola iba okno alert)
*/
function SubmitDO(pocet_selectov){
alert("-=[ Dynamic Options ]=-\n\n" + s[ReturnCode(pocet_selectov)].split(o)[1])
// window.location.href = s[ReturnCode(pocet_selectov)].split(o)[1]
}

/*
function ChangeDO(id_select,pocet_selectov)</b> - naplní všetky prvky SELECT s indexom od id_select, podľa toho, čo bolo zvolené na prvkoch po SELECT s indexom id_select
*/
function ChangeDO(id_select,pocet_selectov){
var id_option // indexovane od nuly !
var code_before // code pred id_select

for(id_select++ ; id_select<pocet_selectov ; id_select++){
	code_before = ReturnCode(id_select) // vygeneruje code pred id_select

	id_option = 0
	d = document.f_do.elements[id_select].options
	
	do{
		if(id_select == pocet_selectov - 1){ // posledny SELECT
			if(id_option < d.length)
				d[id_option].text = s[code_before + "." + id_option].split(o)[0]
			else			
				d[id_option] = new Option(s[code_before + "." + id_option].split(o)[0])
			}

		else{ //  naplnenie SELECTu OPTIONami
			if(id_option < d.length)
				d[id_option].text = s[code_before + "." + id_option]
			else
				d[id_option] = new Option(s[code_before + "." + id_option]) 
			}

		id_option++ // idem na dalsi OPTION
		}while(s[code_before + "." + id_option] != null) // existuje OPTION s takymto code ?
	d[0].selected = true // vybraty prvy OPTION

	var dlzka=d.length - 1 // pomocna premenna (zakazdym sa length zmeni)
	for(var i=dlzka ; i>=id_option ; i--)
		d[i] = null // odstran prvok
	d.length = id_option // nova dlzka OPTIONov 
	}
}

/* 
NaplnSelecty(pocet_selectov) - pomocou JavaScriptu generujem novy JavaScript kod (cyklus do, while) pomocou ktoreho naplnim jednotlive SELECTy vsetkymi OPTIONami, ktore k nim patria - plnim !globalnu! premennu html
*/
function NaplnSelecty(napln,pocet_selectov){ 
var i
var js = ""
var index = ""

for(i=0 ; i<napln ; i++){
	index += "p[" + i + "]"
	if(i<napln - 1)
		index += " + '.' + "
	}

js += "<scr" + "ipt language='JavaScript'>\n"

js += "var p = new Array(" + napln + ")\n"

for(i=0 ; i<napln ; i++)
	js += "p[" + i + "] = 0\n"

for(i=0 ; i<napln ; i++)
	js += "do{\n"

if(napln == pocet_selectov)
	js += "html += '<option>' + s[" + index + "].split(o)[0]\n"
else
	js += "html += '<option>' + s[" + index + "]\n"

js += "p[" + (napln - 1) + "]++\n"
js += "}while(s[" + index + "] != null)\n"

for(i=napln - 1 ; i>=1 ; i--){
	js += "p[" + i + "]=0\n"
	js += "p[" + (i-1) + "]++\n"
	js += "}while(s[" + index + "] != null)\n"
	}

js += "</scr" + "ipt>"

document.write(js)
}
