// JavaScript Document

/* lookup_check.js - ABAK.NET d.o.o.
skripte, ki vsebujejo za povezavo z podakti. Vrne zeljeno vrednost med podanim tagm

Avtor Matjaz, 19.08.05
Zadnji popravek: 14.11.05
*/

var ie = document.all ? true : false;
var form_fildi ="";
var st_zapisov_form ="";
var l_search = "";
var l_url_el = "";
var service_array = new Array("lookup_city.cfm", "lookup_country.cfm", "lookup_post.cfm");

/* lookup_check 
	funkcija nam updejta forme ce je vnos eden
	vhodni parametri:
	1. - id-viewa
	2. - ime filda v bazi za pogoj
	3. - vrendost za primerjanje v pogoju
	4. - fildi v bazi (seznam (foo,bar))
	5. - fildi v formi (isto seznam, za updejtanje vrednosi - npr 2 napisani fild dobi vrednost drugega polja v bazi)
	6. - ime diva v katerega se napise koliko je vnosov.
	7. - ime diva/spana kjer je url do lookupa z spremenjivkami
	8. - id diva v kerem je pkeyi
	9. - id elementa kareri klice to funkcijo
	10.- katero funkcijo poklice ko je uspesno poklical "XML" potrebno za simuliranje tipke dropdown. (Simon)
*/
var pokazi_pod = ''; // da lahko globalno dostopamo
var lookup_ne = 0; // ce je 1 potem ne lookup_check ne gleda ...
var vrednost_filda = []; // asociativni array [ime_filda] = vrednost, to so objekti in ne asociativni array...
var vrednost_filda_set =0; // prek length oneja nemremo preverjate ce je vrednost_filda nastavleno - tak ka moremo prek ene drujge spremenjivke - FU JS!
var l_history = new Array(); // Lokalna zgodovina
var lookup_after_function = ''; // zarade toga ka te tou funkcijo pozovejmo tude ce je ekzaktne zapis
var pokazi_prve_zapise=0; // to je ka pokaze dropdown ce priklacimo puscico doj :>
var odprt = false; // lookup ni odprt
var l_height = 0;
/* getService - Olajsamo si delo z */
var getLookupService = function( p_service )
{
	return service_array[ p_service ] ? service_array[ p_service ] : service_array[ 0 ];
}
/* lookup_init (<id katerega ignoriramo - tisti keri se je nazadnje spremenil>)
   initiniziramo spremenjivke
*/
function lookup_init (ignore_id) {
	fildi = document.getElementsByTagName('input');
	
	// history
	
	var l_histarr = new Array();
	var n_histarr = new Array();
	
	for (i=0; i<fildi.length;i++) {
		if (fildi[i].type == "hidden" || fildi[i].type == "text") {
			if (fildi[i].id != ignore_id) {
				l_histarr.push(fildi[i].value);
				n_histarr.push(fildi[i].id);
				vrednost_filda[fildi[i].id] = fildi[i].value;
			} else {
				l_histarr.push(fildi[i].value);
				n_histarr.push(fildi[i].id);
				vrednost_filda[fildi[i].id] = '';
			}
		}
	}
	
	//l_histarr.join( n_histarr );
	l_history.push( l_histarr );
	
	vrednost_filda_set = 1;
	if(lookup_div = document.getElementById('lookup_div')) {
	} else { 
		lookup_div = document.createElement('div');
		document.getElementsByTagName('body')[0].appendChild(lookup_div);
		lookup_div.setAttribute('style',"border-style:solid; border-width: thin;");
		lookup_div.style.position="absolute";
		lookup_div.style.backgroundColor="#FFFFFF";
		lookup_div.id="lookup_div";
		lookup_div.name="lookup_div";
		lookup_div.style.zIndex = 9999;

	};


}
/* lookup_check (<viewid>,<fild kjer je pogoj>,<vsebina pogoja>, <fildi v bazi, loceni z vejico>, <fildi na formi, loceni z vejico>, <st zapisov>, <ime elementa kjer je url>,<form filed kjer je kljuc>,[dodatni pogoj],[funkcija ki se klice po izvedeni izbiri],[funkcija, ki klice posebno funkcijo])
   funkcija podane poslje zahtevo na server, odgovor se obdela v funckiji lookup_update
   @mod Simon, dropdown
*/
//                     1     2           3               4      5       6             7       8             9              10           11              12
function lookup_check( view, fild_pogoj, vrednost_pogoj, fildi, form_f, st_zapisov_f, url_el, f_fild_pkeyi, pokazi_pod_id, pogoj_extra, after_function, update_function )
{
	if( trace )
	{
		trace( AbStringUtil( "Lookup dropdown" ), AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION );
	}
	
	if(!update_function)
	{
		function_update = lookup_update;
	}
	else
	{
		function_update = update_function;
	}
	
	form_fildi = form_f.split(",");
	
	hide_div_iframe(); 
	pokazi_pod = document.getElementById(pokazi_pod_id);
	
	if (vrednost_filda_set <= 0 && !update_function) 
	{
		lookup_init(pokazi_pod.id);
	}
	
	if (lookup_ne == 1) {
		lookup_ne = 0;
		return 0;
	}
	
	if (vrednost_pogoj.length <= 0 && pokazi_prve_zapise == 0) {
		
		for(i=0;i<form_fildi.length;i++) {
			document.getElementById(form_fildi[i]).value='';
			vrednost_filda[form_fildi[i]] = '';
			if (after_function) {
				eval(after_function);
			}
		}
		return 0;
	}

	if (after_function) {
		lookup_after_function = after_function;
	} else {
		lookup_after_function = '';
	}

	if (typeof(vrednost_filda[pokazi_pod.id]) == "string" && vrednost_filda[pokazi_pod.id] == vrednost_pogoj && pokazi_prve_zapise==0) {
		return 0;
	}
	vrednost_filda[pokazi_pod.name] = vrednost_pogoj;

	if( !update_function )
		document.getElementById(f_fild_pkeyi).value = '';
	
	if(lookup_div = document.getElementById('lookup_div')) {
	} else { 
		lookup_div = document.createElement('div');
		document.getElementsByTagName('body')[0].appendChild(lookup_div);
		//lookup_div.setAttribute('style',"border-style:solid; border-width: thin;");
		lookup_div.setAttribute('class', 'lookup_div');
		lookup_div.className = 'lookup_div';
		lookup_div.style.position="absolute";
		lookup_div.style.backgroundColor="#FFFFFF";
		lookup_div.id="lookup_div";
		lookup_div.name="lookup_div";
		lookup_div.style.zIndex = 9999;

	};
	  var x = pokazi_pod.offsetLeft;
	  var y = pokazi_pod.offsetTop + pokazi_pod.offsetHeight;
	  var parent = pokazi_pod;
	  while (parent.offsetParent) {
		parent = parent.offsetParent;
		x += parent.offsetLeft;
		y += parent.offsetTop;
	  }
  	//show_load(x,y);
	lookup_div.style.top  = (y) + 'px';
	lookup_div.style.left = x+ 'px';
	lookup_div.style.display="none";
	/* konec prikazovanja lookupa*/
	l_url_el = url_el;
	if(st_zapisov_f) { 
		st_zapisov_form = st_zapisov_f;
	} else {
		st_zapisov_form="";
	}
	vrednost_pogoj = vrednost_pogoj.replace(/&/g,"%26");
	l_search =fild_pogoj+"^"+vrednost_pogoj;
	pogoj= encodeURIComponent(" and lcase("+fild_pogoj+") LIKE '"+vrednost_pogoj.toLowerCase()+"%'");
	if(!pogoj_extra)
		pogoj_extra="";
	var povezava = new AbXmlHttp();
	if (!povezava) return 0;

	var service_url = AbStringUtil( "/ajax/", getLookupService( view ) );
	//Spodnja vrstica je debugger
	//okno("../lookup/lookup_check.cfm", "GET", "view="+view+"&pogoj="+pogoj+"&fildi="+fildi+"&form_f="+form_f+"&after_function="+lookup_after_function+"&pkey_field="+fild_pogoj+"&dodaten_pogoj="+pogoj_extra);
	povezava.connect( service_url, "GET", "view="+view+"&pogoj="+pogoj+"&fildi="+fildi+"&form_f="+form_f+"&after_function="+lookup_after_function+"&pkey_field="+fild_pogoj+"&dodaten_pogoj="+pogoj_extra+"&function="+function_update.name, function_update);
}
/* lookup_update(<xml podatki ki jih vrne ajax>) 
   obdelajo se rezultati zahteve
*/
function lookup_update (xml) {
	var xml_data = xml.responseXML;
	var st_zapisov = xml_data.getElementsByTagName('RecordNum')[0].firstChild.nodeValue; // st zapisov
	if (st_zapisov_form != "") {
		document.getElementById(st_zapisov_form).innerHTML=st_zapisov;
	}
	if (st_zapisov == 1) {
		fildi = xml_data.getElementsByTagName('Field');
		for(i=0;i<fildi.length;i++) {
			trace( form_fildi[i] );
			document.getElementById(form_fildi[i]).value=fildi[i].getElementsByTagName('FieldValue')[0].firstChild.nodeValue.replace(/%26/ig,'&');
			vrednost_filda[form_fildi[i]] =fildi[i].getElementsByTagName('FieldValue')[0].firstChild.nodeValue.replace(/%26/ig,'&');

		}
		if (lookup_after_function != '') {
			eval(lookup_after_function);
			lookup_after_function = '';
		}
	}
	
	if (st_zapisov > 1) {
		jscode = xml.responseText.substr(xml.responseText.search("<JSCode>")+8,xml.responseText.search("</JSCode>")-xml.responseText.search("<JSCode>")-8);
		document.getElementById('lookup_div').innerHTML=jscode;
		document.getElementById('lookup_div').style.display="block";
		div_iframe(document.getElementById('lookup_div'));
		lookup_oznacen_zapis=-1;
	}
	onchng1 = 0;
	if (st_zapisov == 0) {
		jscode = xml.responseText.substr(xml.responseText.search("<JSCode>")+8,xml.responseText.search("</JSCode>")-xml.responseText.search("<JSCode>")-8);
		document.getElementById('lookup_div').innerHTML=jscode;
		document.getElementById('lookup_div').style.display="block";
		div_iframe(document.getElementById('lookup_div'));
		lookup_oznacen_zapis=-1;

		if( document.body.className == "filter" )
		{
			l_height = document.getElementById('lookup_div').offsetHeight;
			if ( a < l_height )
			{
				parent.document.getElementById("filterfs").rows = ""+l_height+",*";
			}
		}
		//onchng1 = pokazi_pod.onchange;
		//pokazi_pod.onchange = '';
		//lookup(l_url_el,l_search);
	}
	if (onchng1) {
		pokazi_pod.onchange = onchng1;
	}
}

function lookup_update_drop (xml) {
	var xml_data = xml.responseXML;
	var st_zapisov = xml_data.getElementsByTagName('RecordNum')[0].firstChild.nodeValue; // st zapisov
	if (st_zapisov_form != "") {
		document.getElementById(st_zapisov_form).innerHTML=st_zapisov;
	}
	/*
	if (st_zapisov == 1) {
		fildi = xml_data.getElementsByTagName('Field');
		for(i=0;i<fildi.length;i++) {
			document.getElementById(form_fildi[i]).value=fildi[i].getElementsByTagName('FieldValue')[0].firstChild.nodeValue.replace(/%26/ig,'&');
			vrednost_filda[form_fildi[i]] =fildi[i].getElementsByTagName('FieldValue')[0].firstChild.nodeValue.replace(/%26/ig,'&');

		}
		if (lookup_after_function != '') {
			eval(lookup_after_function);
			lookup_after_function = '';
		}
	}
	*/
	//if (st_zapisov > 1) {
	jscode = xml.responseText.substr(xml.responseText.search("<JSCode>")+8,xml.responseText.search("</JSCode>")-xml.responseText.search("<JSCode>")-8);
	document.getElementById('lookup_div').innerHTML=jscode;
	document.getElementById('lookup_div').style.display="block";
	div_iframe(document.getElementById('lookup_div'));
	lookup_oznacen_zapis=-1;
	//}
	onchng1 =0;
	/*
	if (st_zapisov == 0) {
		jscode = xml.responseText.substr(xml.responseText.search("<JSCode>")+8,xml.responseText.search("</JSCode>")-xml.responseText.search("<JSCode>")-8);
		document.getElementById('lookup_div').innerHTML=jscode;
		document.getElementById('lookup_div').style.display="block";
		div_iframe(document.getElementById('lookup_div'));
		lookup_oznacen_zapis=-1;

		//onchng1 = pokazi_pod.onchange;
		//pokazi_pod.onchange = '';
		//lookup(l_url_el,l_search);
	}
	*/
	if (onchng1) {
		pokazi_pod.onchange = onchng1;
	}
//	hide_load();
}

var lookup_funkcija;
lookup_oznacen_zapis=-1;

/* lookup_key(<funckija>,<stevilo znakov>,<element>) 
   funkcija se klice ko uporabnik v formi spremeni besedilo. poklice se lookup_check 
*/
function lookup_key (funkcija,st_znakov,e) {
	var source=ie? event.srcElement : e.target;

	if (vrednost_filda_set <= 0) {
		lookup_init("");
	}
	
	//document.title=typeof(window['lookup_div']);
	
	if (typeof(window['lookup_div']) == "object" && document.getElementById('lookup_div').style.display=="block") { // je lookup onej vuzgane 
		var tipka = (e)?e.keyCode:window.event.keyCode;
		if (tipka ==38) {// gor
			if (lookup_oznacen_zapis>=1) {
				document.getElementsByName('lookup_vrstica')[lookup_oznacen_zapis].onmouseout();
				lookup_oznacen_zapis--;
				document.getElementsByName('lookup_vrstica')[lookup_oznacen_zapis].onmouseover();
				lookup_ne = 1; 
				pokazi_pod.blur();
				setTimeout("pokazi_pod.focus()",10);
				return 1;
			}
		} else if (tipka == 40) {//dol
			st_vrstic = document.getElementsByName('lookup_vrstica').length;
			if (lookup_oznacen_zapis < st_vrstic -1) {
				if(lookup_oznacen_zapis != -1) { document.getElementsByName('lookup_vrstica')[lookup_oznacen_zapis].onmouseout()};
				lookup_oznacen_zapis++;
				document.getElementsByName('lookup_vrstica')[lookup_oznacen_zapis].onmouseover();
				lookup_ne = 1; 
				pokazi_pod.blur();
				setTimeout("pokazi_pod.focus()",10);

				return 1;
				
			}
		} else if ((tipka == 13 || tipka == 9) && lookup_oznacen_zapis != -1) {//enter = 13, tab = 9
			document.getElementsByName('lookup_vrstica')[lookup_oznacen_zapis].onclick();
			document.body.onkeydown = '';
			pokazi_pod.blur();
			hide_div_iframe();
			setTimeout("pokazi_pod.focus()",10);
			return 1;
		};
		
	} else {	
		var tipka = (e)?e.keyCode:window.event.keyCode;
		if (tipka == 40 && st_znakov<=0){ 
			pokazi_prve_zapise=1;
			lookup_dropdown=1;funkcija();lookup_dropdown=1;
			pokazi_prve_zapise=0;
			return 1;
		}
	}
	if (tipka == 8 || tipka == 46) { // 8 = backspace; 46 = delete; 9 = tab
		st_znakov--;
	} else {
		st_znakov++;
	}
	if (st_znakov >= 1 && tipka != 13 && tipka !=9 && tipka != 38 && tipka != 40) { // ;\
		lookup_funkcija = funkcija;
		if(typeof(window["t"]) != "undefined"){
			clearTimeout(t)
		};
		t=setTimeout("lookup_dropdown=1;lookup_funkcija();lookup_dropdown=1",500);
	} else if (st_znakov <= 0) {
		if(lookup_div = document.getElementById('lookup_div')) {
			lookup_div.style.display = "none";
			hide_div_iframe();
		}
	}
	vrednost_filda[source.id] = source.value;
	return 1;
}
/*	lookup (<element kjer je url>,<kaj iscemo>,<element>)
	odpre lookup
*/
function lookup (i,s,e) {
	if (e) {
		var tipka = (e)?e.keyCode:window.event.keyCode;
		if (tipka !=32) {
			return 0;
		}
	}
	
	var url= document.getElementById(i).innerHTML.replace(/&amp;/g,"&");
	okno(url+urlencode(s).replace(/&/g,"%26"),'lookup');	
}
/*	lookup_drop (isto kot lookup_check - zadnji)
	akcija za odpiranje lookupa kot dropdown element
*/
function lookup_drop(view,fild_pogoj,vrednost_pogoj,fildi,form_f,st_zapisov_f,url_el,f_fild_pkeyi,pokazi_pod_id,pogoj_extra,after_function)
{
	if (typeof(window['lookup_div']) == "object" && document.getElementById('lookup_div').style.display=="block")
	{
			document.getElementById('lookup_div').style.display='none';
			hide_div_iframe(); // IE-iframe pod div elementom, izogibanje nevšečnostim. dropdown pod div elementom
			lookup_refocus();
			return 1;
	}
	else
	{
			// pokaze lookup! s klikom.
			pokazi_prve_zapise=1; 
			lookup_dropdown=1;lookup_check(view,fild_pogoj,vrednost_pogoj,fildi,form_f,st_zapisov_f,url_el,f_fild_pkeyi,pokazi_pod_id,pogoj_extra,after_function,lookup_update_drop);lookup_dropdown=1;
			pokazi_prve_zapise=0;
			if(pokazi_pod_id)
				document.getElementById(pokazi_pod_id).focus();
			return 1;
	}

}
/* lookup_refocus 
   funkcija refokusira element
*/
function lookup_refocus () {
	pokazi_pod.blur();
	setTimeout("pokazi_pod.focus()",10);	
}
/*	lookup_history (<idji textfieldov>, <pkey element>)
	Funkcija se klice ko samo pogledamo v lookup pa ne naredimo nicesar
*/
function lookup_history()
{
	/*
	var num = l_history.length;
	var val_elem = l_history[num-1];
	alert(val_elem);
	*/
}

function div_iframe (element) {
	/* predelaj ka de sikdar iste div zejlo */
	//divNode.insertAdjacentHTML("afterEnd", '<IFRAME style="position: absolute;z-index:4;" src="javascript:false;" frameBorder="0" scrolling="no" />');
	//var iframeShim = document.getElementById(sTableID + "_hvrShm");
	if (!document.all) {
		return 0;
	};
	if(iframe = document.getElementById('iframe_pod_div')) {
	} else { 
		iframe = document.createElement('iframe');
		document.getElementsByTagName('body')[0].appendChild(iframe);
		iframe.style.position="absolute";
		iframe.src="javascript:false;";
		iframe.id="iframe_pod_div";
	 	iframe.style.zIndex = 4;
		iframe.frameborder = '0';

	};
	iframe.style.top = element.style.top;
	iframe.style.left = element.style.left
	iframe.style.width = element.offsetWidth;
	iframe.style.height = element.offsetHeight;
	iframe.style.display='block';
	return 1;
}
function hide_div_iframe () {
	if(document.all && (iframe = document.getElementById('iframe_pod_div'))) {
		iframe.style.display='none';
		//alert("ccc");
	}
}

