function get_object(id) {
	if (document.all) {
		return document.all(id);
	}	else {
		return document.getElementById(id);
	}
}

function show_object(id, ini, jmlkolom, text, height, width) {
	if (get_object(id).style.display == 'block') { // toggle
		get_object(id).style.display = 'none';
	} else {
		// tutup dulu semua layer kolom
		for (i=0; i<jmlkolom; i++) {
			get_object(text+i).style.display = 'none';
		}
		// tampilkan layer kolom pilihan
		get_object(id).style.display	= 'block';
		//get_object(id).style.top			= findPosY(ini)-(get_object(id).style.height);
		get_object(id).style.top			= findPosY(ini)-height;
		get_object(id).style.left 		= findPosX(ini);
		get_object(id).style.width 		= width;
	}
}

function findPosX(obj)	{
	curleft = 0;
	if (obj.offsetParent) { 
		while (obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}	else 
	if (obj.x) curleft += obj.x;
	return curleft;
}

function findPosY(obj) {
	curtop = 0;
	if (obj.offsetParent)	{
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}	else 
	if (obj.y) curtop += obj.y;
	return curtop;
}

function toggle_cek(form, check) {
	for (i=0; i<document.forms[form].elements.length; i++) {
		if (document.forms[form].elements[i].type=='checkbox') {
			document.forms[form].elements[i].checked = check;
		}
	}
} // end of the 'setCheckboxesRange()' function

ELEMENT_NODE	= 1;
TEXT_NODE 		= 3;

function init_combo(prioritas) {
	for (i=0; i<prioritas.length; i++) {
		elm = get_object('td_prioritas['+prioritas[i]+']');
		while (elm.hasChildNodes()) { // hapus anak elemen td
			elm.removeChild(elm.firstChild);
		}
		combobox	= document.createElement("select");
		combobox.setAttribute("id", 'layout[prioritas]['+prioritas[i]+']');
		for (j=0; j<prioritas.length; j++) {
			option = document.createElement("option");
			option.setAttribute("value", j);
			if (j==i) {
				option.setAttribute("selected", "1"); // ini kalo di IE lalu pencet reset jadi ngga jalan dng benar juga
			}
			option.appendChild(document.createTextNode(j+1));
			combobox.appendChild(option);
		}
		combobox.onchange = tukar_nilai;
		combobox.name = 'layout[prioritas]['+prioritas[i]+']';
		//combobox.selectedIndex = i; // ngga jalan di IE/DOM kalo di reset
		//combobox = combo_maker('layout[prioritas]['+prioritas[i]+']', prioritas.length, i); // hoeee, ngga bisa >_<, cuma 1 combo yg bisa ke render ????
		elm.appendChild(combobox);
	}
}

function combo_maker(nama, jumlah, selected) {
	combobox	= document.createElement("select");
	for (i=0; i<jumlah; i++) {
		option = document.createElement("option");
		option.setAttribute("value", i);
		if (selected==i) {
			option.setAttribute("selected", "1");
		}
		option.appendChild(document.createTextNode(i+1));
		combobox.appendChild(option);
	}
	combobox.name = nama;
	combobox.onchange = tukar_nilai;
	return combobox;
}

// menukar nilai prioritas pengurutan kolom
function tukar_nilai(evt) {
	var target;
	if (evt) { // DOM
		target = evt.target;
	} else { // IE
		target = event.srcElement;
	}
	var oldIndex;
	change = false;
	var nama1;
	for (i=0; ((i<prioritas.length) && (!change)); i++) { // prioritas pasti unik
		if (('prioritas['+prioritas[i]+']')==target.name) { // cari index sebelum diganti
			oldIndex = i;
			change = true;
			nama1 = prioritas[i];
		}
	}
	change = false;
	var nama2;
	for (i=0; ((i<prioritas.length) && (!change)); i++) { // prioritas pasti unik
		if (i==target.selectedIndex) { // ganti selectedIndex target
			get_object('layout[prioritas]['+prioritas[i]+']').selectedIndex = oldIndex;
			nama2 = prioritas[i];
			change = true;
		}
	}
	prioritas[oldIndex] = nama2;
	prioritas[target.selectedIndex] = nama1;
}

function navigasi(pilih, pilihan) {
	elm = get_object("navigasi");
	while (elm.hasChildNodes()) { // hapus semua tombol dulu
		elm.removeChild(elm.childNodes[0]);
	}
	if (pilihan>1) { // item mungkin pindah
		if (pilih>1) { // buat button teratas
			elm.appendChild(tombol("Teratas", "Teratas"));
			elm.appendChild(document.createElement("br"));
		}
		if (pilih>0) { // buat button atas
			elm.appendChild(tombol("Atas", "Atas"));
			elm.appendChild(document.createElement("br"));
		}
		if (pilih<pilihan-1) { // buat button bawah
			elm.appendChild(tombol("Bawah", "Bawah"));
			elm.appendChild(document.createElement("br"));
		}
		if (pilih<pilihan-2) { // buat button terbawah
			elm.appendChild(tombol("Terbawah", "Terbawah"));
		}
	}
}

function tombol(name, text) {
	btn = document.createElement("input");
	btn.setAttribute("type", "button");
	btn.setAttribute("name", name);
	btn.value = text;
	btn.onclick = click_event;
	return btn;
}

function trim(str) {
	return '';
}

function remove_text_child(node) { // biar kompatibel dengan IE dan DOM
	now = node.firstChild;
	while (now) { // jika masih punya saudara
		next = now.nextSibling;
		if (now.nodeType!=ELEMENT_NODE) { // yang bukan elemen dihapus
			node.removeChild(now);
		}
		now = next;
	}
	return node;
}

function set_radio_hidden(tbody) {
	for (i=0; i<tbody.childNodes.length; i++) {
		tr_now = tbody.childNodes[i];
		td_now = remove_text_child(tr_now).firstChild; // td berisi radio-namakolom-hidden
		remove_text_child(td_now).firstChild.value = i; // radio
		remove_text_child(td_now).lastChild.value = i; // hidden
	}
	return tbody;
}

function click_event(evt) {
	var target;
	if (evt) { // DOM
		target = evt.target;
	} else { // IE
		target = event.srcElement;
	}
	var item_now;
	found = false;
	for (i=0; ((i<target.form.radio_letak.length) && (!found)); i++) {
		if (target.form.radio_letak[i].checked) {
			item_now = target.form.radio_letak[i].parentNode.parentNode; // <tr> yang dipilih
			found = true;
		}
	}
	tbody = remove_text_child(item_now.parentNode); // <tbody>
	switch (target.name) { // nama tombol
		case "Teratas":
			item_temp = tbody.firstChild; // <tr> pertama
			tbody.insertBefore(item_now, item_temp);
			break;
		case "Atas":
			item_temp = item_now.previousSibling;
			tbody.insertBefore(item_now, item_temp);
			break;
		case "Bawah":
			item_temp = item_now.nextSibling;
			tbody.insertBefore(item_temp, item_now);
			break;
		case "Terbawah":
			item_new = document.createElement("tr"); // buat elemen <tr> alien
			tbody.appendChild(item_new); // pasang elemen <tr> alien
			tbody.insertBefore(item_now, item_new);
			tbody.removeChild(item_new); // hapus elemen <tr> alien
			break;
	} // end switch
	set_radio_hidden(tbody);
	item_now.firstChild.firstChild.checked = '1';
	navigasi(item_now.firstChild.firstChild.value, tbody.childNodes.length);
}

function pilih_radio(ini) {
	td = ini.parentNode;
	remove_text_child(td).firstChild.click();
}

function init_letak(tbody) {
	temp = new Array();
	for (i=0; i<tbody.childNodes.length; i++) {
		temp[i] = tbody.childNodes[i].getAttribute('id'); // ini <tr>
	}
	return temp;
}

function reset_tabel() {
	temp = new Array();
	tbody = get_object('daftar_kolom');
	for (i=0; i<tbody.childNodes.length; i++) { // clone semua <tr>
		temp[i] = tbody.childNodes[i].cloneNode(true);
	}
	while (tbody.hasChildNodes()) { // hapus semua <tr> dulu
		tbody.removeChild(tbody.firstChild);
	}
	for (i=0; i<letak_awal.length; i++) { // sesuaikan dengan letak_awal kolom
		found = false;
		var tr;
		for (j=0; ((j<temp.length) && (!found)); j++) {
			if (letak_awal[i]==temp[j].getAttribute('id')) {
				found = true;
				tr = temp[j];
			}
		}
		tbody.appendChild(tr);
	}
	set_radio_hidden(tbody);
	navigasi(0, tbody.childNodes.length);
}

function toggle_tampil(id, ini, lebar, group) {
	if (get_object(id).style.display=='block') {
		get_object(id).style.display = 'none';
	} else {
		for (i=0; i<group.length; i++) { // tutup semuanya
			get_object(group[i]).style.display = 'none';
		}
		get_object(id).style.display	= 'block';
		get_object(id).style.top			= findPosY(ini)+1+ini.offsetHeight+'px';
		get_object(id).style.width 		= lebar;
		get_object(id).style.left 		= findPosX(ini)+'px';
	}
}