// JavaScript Document
/* This code opens a small sub-page (i.e. DIV) after a client registered event */
// Copyrighted by AB, 2011

// Main function call
/*window.onload = formValidation;*/
addLoadEvent(pageDisplay);

function pageDisplay() {
	
	// VARIABLES
	// main
	var element_trig_open = /^(side-news_temp)/; // trigger element opening sub-element identifier (i.e.IL, P...)(REGEXP NEEDED IF MORE THEN ONE ELEMENT)
	var element_trig_arch = "side-news_temp-arch"; // trigger element opening archive (same as above except from attribute "ID")  
	var element_trig_wrap_ID = "dbtNewsID"; // trigger element group wrapper ID (i.e. UL, DIV...) (DB column ID, as reference)
	var element_trig_wrap_class = "news"; // trigger element group wrapper class (i.e. UL, DIV...) (DB table ID)
	var element_disp_targ_0 = "dbtNewsNaslov"; // display element target #1 ID (i.e. P...) (DB column data #1, i.e. naslov) 
	var element_disp_targ_1 = "dbtNewsTekst"; // display element target #1 ID (i.e. P...) (DB column data #1, i.e. text)
	var element_disp_targ_2 = "dbtNewsDatum"; // display element target #1 ID (i.e. P...) (DB column data #1, i.e. datum)
	var element_disp_targs = new Array(element_disp_targ_0, element_disp_targ_1, element_disp_targ_2); // display element targets (grouped)
	var element_disp_news = "side-extra_temp"; // displayed element / page news body (i.e. DIV) (MUST BE ID)
	var element_disp_arch = "side-extra_temp-arch"; // displayed element / page news archive (i.e. DIV) (MUST BE ID)
	var element_disp_arch_list = "side-extra_list_body"; // displayed element / page news archive list (i.e. UL) (MUST BE ID)
	var element_disp_close = "side-extra_text_cls"; // displayed element closing sub-element (i.e. IMG) (MUST BE ID)
	var element_disp_arch_close = "side-extra_text_arh_cls"; // displayed element archive closing sub-element (i.e. IMG) (MUST BE ID)
	// styles
	var element_close_src_def = "image/sbar/side-div-nws-txt_cls.png"; // image source for close button
	var element_close_src = "image/sbar/side-div-nws-txt_cls_p.png"; // image source for close button when pressed
	var event_trig_style_opacity = 0.5; // text opacity for element that triggered event
	var event_trig_style_back_def = "url(image/sbar/side-li-links.png) 10px 0px no-repeat"; // background for trigger element when active
	var event_trig_style_back = "url(image/sbar/side-li-links-a.png) 10px 0px no-repeat"; // background for trigger element
	// local DOM variables
	var trigger_element_wrap = document.getElementById(element_trig_wrap_ID); 
	var display_element_news = document.getElementById(element_disp_news);
	var display_element_arch = document.getElementById(element_disp_arch);
	var display_element_arch_list = document.getElementById(element_disp_arch_list);
	var display_element_close = document.getElementById(element_disp_close);
	var display_element_arch_close = document.getElementById(element_disp_arch_close);	
			
	// find trigger element (open page)
	for (var i = 0, len = trigger_element_wrap.childNodes.length; i < len; i++) {
		if ((trigger_element_wrap.childNodes[i].id) && (element_trig_open.test(trigger_element_wrap.childNodes[i].id))) {
			if (trigger_element_wrap.childNodes[i].title == "") { // disable empty slots (via "title" attribute)
				trigger_element_wrap.childNodes[i].style.textDecoration = "none";
				trigger_element_wrap.childNodes[i].style.cursor = "default";
				continue;
			}
			// var children
			var trigger_element_value = trigger_element_wrap.childNodes[i].childNodes;
			// news title
			for (var j = 0, len2 = trigger_element_value.length; j < len2; j++) { // find all neccessary data
				// open archive
				if (trigger_element_wrap.childNodes[i].id == element_trig_arch) {
					openArchive(trigger_element_wrap.childNodes[i], display_element_news, display_element_arch);
				}
				// go to last titles
				if ((trigger_element_value[j].nodeName.toLowerCase() == "input") && (trigger_element_wrap.childNodes[i].id != element_trig_arch)) {
					openPageExec(trigger_element_wrap.childNodes[i], trigger_element_value[j], display_element_news, display_element_arch, trigger_element_wrap.childNodes[i]);
				}
			}
		}
		else continue;
	}
	
	// open archive list
	function openArchive(trigger, news, archive) { // reference not needed yet
		// ARCHIVE DISPLAY ELEMENT / PAGE
		trigger.onclick = function() { 
			// STYLES
			// trigger element
			trigger.style.opacity = event_trig_style_opacity;
			trigger.style.background = event_trig_style_back;
			// display element
			news.style.display = "none"; 
			archive.style.display = "block"; 
			archive.parentNode.style.display = "block"; 
			// checked chosen title
			for (var i = 0, len = display_element_arch_list.childNodes.length; i < len; i++) {
				if (display_element_arch_list.childNodes[i].nodeName.toLowerCase() == "li") {
					// var children
					var archive_element_value = display_element_arch_list.childNodes[i].childNodes; 
					// news title
					for (var j = 0, len2 = archive_element_value.length; j < len2; j++) { // find all neccessary data
						if (archive_element_value[j].nodeName.toLowerCase() == "input") {
							openPageExec(display_element_arch_list.childNodes[i], archive_element_value[j], news, archive, trigger);
						}
					}
				}
			}	
		}
		return true;
	}
	
	// execution show on / off
	function openPageExec(trigger, reference, news, archive, guide) {
		/*	DESCRIPTION ::
			trigger = list item that contains the news title
			reference = element (INPUT HIDDEN) that containe value for DB search (unique ID)
			news = main news displaying page
			archive = archive list displaying page
			guide = original link from sidebar menu (news:guide=trigger; archive:guide=link from menu (i.e. "archive")) 
		*/
		// DISPLAY ELEMENT / PAGE
		trigger.onclick = function() {
			// STYLES
			// trigger element
			if (guide.id != element_trig_arch) {
				trigger.style.opacity = event_trig_style_opacity;
				trigger.style.background = event_trig_style_back;
			}
			else {
				guide.style.opacity = 1.0;
				guide.style.background = event_trig_style_back_def;
			}
			// display element
			archive.style.display = "none"; 
			news.style.display = "block"; 
			news.parentNode.style.display = "block"; 			
			// CREATE AJAX OBJECT
			// code for IE7+, Firefox, Chrome, Opera, Safari
			try {
				xmlhttp = new XMLHttpRequest();
			}
			// code for IE6, IE5
			catch (e) { 
 				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  			}
			// EXTRACT RESULTS BY ID - INIT
			for (var ajxloop = 0; ajxloop < element_disp_targs.length; ajxloop++) {
				// var - TARGET
				var target =  element_disp_targs[ajxloop];
				// var - INIT
				var url_init_params = "script/ajaxPageDisplay.php?dbtable=" + element_trig_wrap_class + "&dbcol=" + element_trig_wrap_ID + "&dbcolvalue=" + reference.value + "&dbdata=" + target;
				// OPEN COMM - INIT
				xmlhttp.open("GET", url_init_params, false);
				// SEND REQUEST- INIT
				xmlhttp.send(null);
				// WRITE DOC
				var target_childnodes = document.getElementById(target).childNodes; 
				for (txtnode = 0; txtnode < target_childnodes.length; txtnode++) {
					if (target_childnodes[txtnode].nodeType == 3) {
						target_childnodes[txtnode].nodeValue = xmlhttp.responseText;
					}
				}
			}
		}	
		return true;	
	}
	
	// CLOSE ELEMENT / PAGE
	// news
	display_element_close.onmousedown = function() { closePageInit(display_element_close); }
	display_element_close.onmouseup = function() { closePageFin(display_element_close); }
	display_element_arch_close.onmousedown = function() { closePageInit(display_element_arch_close); }
	display_element_arch_close.onmouseup = function() { closePageFin(display_element_arch_close); }	
	// start closing (mouse up)
	function closePageInit(exit) {
		// news
		if (exit == display_element_close) {
			display_element_close.setAttribute("src", element_close_src);
		}
		// archive
		else {
			display_element_arch_close.setAttribute("src", element_close_src);
		}
	}
	// close (mouse down)
	function closePageFin(exit) { 
		// news
		if (exit == display_element_close) {
			display_element_news.style.display = "none";
			display_element_news.parentNode.style.display = "none";
			display_element_close.setAttribute("src", element_close_src_def);
		}
		// archive
		else {
			display_element_arch.style.display = "none";
			display_element_arch.parentNode.style.display = "none";
			display_element_arch_close.setAttribute("src", element_close_src_def);
		}
		// trigger attributes
		for (var i = 0, len = trigger_element_wrap.childNodes.length; i < len; i++) { 
			if ((trigger_element_wrap.childNodes[i].id) && (element_trig_open.test(trigger_element_wrap.childNodes[i].id))) {
				// var children
				var trigger_element_value = trigger_element_wrap.childNodes[i].childNodes;
				// news title
				for (var j = 0, len2 = trigger_element_value.length; j < len2; j++) { // find all neccessary data
					if ((trigger_element_value[j].nodeName.toLowerCase() == "input") || ((trigger_element_wrap.childNodes[i].id == element_trig_arch))) {
						trigger_element_value[j].parentNode.style.opacity = 1.0;
						trigger_element_value[j].parentNode.style.background = event_trig_style_back_def;
					}					
				}
			}
		}		
	}
				 
}
