"use strict";
/*
 *  Vizualizacio
 *
 * version: v7.1.12 2008.12.15.
 *
 * GLOBAL NAMESPACEBE SZEMETEL:
 * 	NDA
 * 	nda_vizualizacio_token
 *
 * HA VAN GLOBALBAN, AKKOR HASZNALJA:
 * 	vizuRecordsetFnc
 * 	NdaQuery
 *
 * PROTOTYPE DEPS:
 * 	$()
 * 	Event
 * 	Effect
 */

NDA = {
	ndaObject: null,
	cimkeFelhoMegjelenites: true,
	default_querystr: '',
	help_text_focsoport: "A cimke böngésző az optimális megjelenés érdekében összevon bizonyos cimkéket  egy algoritmus segítségével. Például, ha a \"kiadvány\" kulcsszó a legtöbb esetben az \"irodalom\" kulcsszóval együtt szerepel, akkor a főcsoportosító algoritmus a kezdeti cimkefelhőből kiveszi a \"kiadvány\" cimkét és az ahhoz tartozó tartalmakat az \"irodalom\" cimkére kattintva lehet elérni. Olyan esetekben amikor keresés vagy szűkítés által már alacsony számosságú cimkefelhőhöz jutottunk, úgy az összes cimke megjelenítése érdekében kikapcsolhatjuk a főcsoportozást.",
	nda_vizualizacio_baseURL: '',
	baseurl: '',
	vizu_host: '',
	nda_vizu_url_hack: undefined,
	script_host: '',
	display_host: '',
	same_host: false,
	lucenequerystr: '',

	nda_vizualizacioObject: function()
	{
		var response;
		var aData = undefined;
		var aCloudRep = [];
		var iCloudRepPointer = 0;
		var iTagNr = 0;
		var sTagid = undefined;
		var sDivHeight = 0;
		var aShowCloud = [];
		var aDivArray = [];
		var sResponseSemaphore = true;
		var iCorrection = 0.1;
		
		this.operation = 'cloud';
		this.metaType = 'tag';
		this.focsoport = true;
		this.rendezes = true;  //true: abc, false: cardinality
		this.sDatabase = 'nda2-test';
		this.iCloudOffset = 0;
		this.iCloudLength = 50;
		this.lasttag = undefined;
		this.newRequestSemaphore = true;

		this.lastParam = undefined;
		
		var aPath = []; // 0: metatype; 1: metaid; 2: enabled? 3: metavalue
		var iPathNr = 0;
		
		var sMinTag = undefined;
		var sMaxTag = undefined;

		var iFontColor = 100;
		var iFontSize = 9;
		var iFontInter = 5;
		
		var bLogAlgorithm = false;
		
		var bHashmark = true;    
		
		var previousCount = 0;

		this.startToken = '';

		this.initialize = function()
		{

			NDA.default_querystr = '';

			NDA.nda_vizu_comm_requestlists = [];

			NDA.cimkeFelhoMegjelenites = true;
	/* function calls */


			if (typeof(nda_vizualizacio_token) == 'undefined') {
				nda_vizualizacio_token = '';
			}
			if (typeof(nda_vizualizacio_collection) == 'undefined') {
				nda_vizualizacio_collection = '';
			}


			if (window.location.href.indexOf('#')>0 && window.location.href.split('#')[1])
			{
				if (typeof(nda_vizualizacio_token)== 'string' && nda_vizualizacio_token!=='')
				{
					nda_vizualizacio_token='';
					NDA.nda_vizu_url_hack = true;
				}
			}
			else
			{
				NDA.nda_vizu_url_hack = false;
			}

			this.createDivs();

			for (var i=0; i<this.iCloudLength; i++)
			{
				sTagid = 'nda_stagid' + i;
				this.createItem('div', 'nda_vizualizacio_cloud', sTagid);
				$(sTagid).addClassName('nda_cloud_tag').hide();
			}

			if (document.getElementById('query') && document.getElementById('query').value && !NDA.nda_vizu_url_hack)
			{
				NDA.default_querystr = document.getElementById('query').value;
			}

			Event.observe('vizu_focsoport_label','mouseover',function(){NDA.vizu_focsoport_label_mouseover();});
			Event.observe('vizu_focsoport_label','mouseout',function(){NDA.vizu_focsoport_label_mouseout();});

			this.makeRequest(); 
		};
		
		this.makeRequest = function(page) 
		{
			if (!page)
			{
				this.iCloudOffset = 0;
			}
			
			if (this.newRequestSemaphore)
			{
				this.newRequestSemaphore = false;
				this.getInfo(true);

				if (iPathNr > 0)
				{
					this.getInfo();
				}
				setTimeout(function() { NDA.ndaObject.getCloud(); },500);
			}
		};
		
		
		this.getCloud = function() 
		{   
			$('nda_progress_gif').show();
			var temp = [];
			
			var lasttag;
			for (var po=0; po<aPath.length; po++)
			{
				if ( aPath[po][2] )
				{
					temp[po] = [];
					temp[po][0]=aPath[po][0];
					temp[po][1]=aPath[po][1];
					lasttag=po;
				}
				
			}

			var param = {};
			switch (this.metaType)
			{
				case 'tag':
					$('nda_vizualizacio_tags').className = 'nda_vizualizacio_menu_button_aktiv';
					$('nda_vizualizacio_authors').className = 'nda_vizualizacio_menu_button';
					$('nda_vizualizacio_type').className = 'nda_vizualizacio_menu_button_last';
					break;
				case 'szerzo':
					$('nda_vizualizacio_tags').className = 'nda_vizualizacio_menu_button';
					$('nda_vizualizacio_authors').className = 'nda_vizualizacio_menu_button_aktiv';
					$('nda_vizualizacio_type').className = 'nda_vizualizacio_menu_button_last';
					break;
				case 'type':
					$('nda_vizualizacio_tags').className = 'nda_vizualizacio_menu_button';
					$('nda_vizualizacio_authors').className = 'nda_vizualizacio_menu_button';
					$('nda_vizualizacio_type').className = 'nda_vizualizacio_menu_button_aktiv';
					break;
			}

			var str = '';

			if (!iPathNr && this.startToken)
			{
				nda_vizualizacio_token = this.startToken;
			} 
			if (typeof(nda_vizualizacio_token)== 'string' && nda_vizualizacio_token)
			{
				str = nda_vizualizacio_token;
				this.lastParam = nda_vizualizacio_token;
				this.startToken = nda_vizualizacio_token;
				nda_vizualizacio_token = false;
				param.subRecordset = this.startToken;
			}

			param = {};
			param.operation = this.operation;
			param.metaType = this.metaType;
			param.offset = this.iCloudOffset;
			param.length = this.iCloudLength;
			param.focsop = this.focsoport;
			param.path = temp;
			param.database = this.sDatabase;
			param.subRecordset = this.startToken;
                        param.collection = nda_vizualizacio_collection;
			str = Object.toJSON(param);
			this.lastParam = param;
			
			NDA.nda_vizu_comm(
			{		    
				method:'post',
				postBody: 'param='+str,
				
				onComplete: function(request) 
				{
					NDA.ndaObject.response = request.responseText.evalJSON(true);
					
					if ( (param.operation=='cloud' || this.startToken) && (NDA.ndaObject.response.header.cloudStatus != 'full') )
					{
						if (NDA.ndaObject.response.cloudItems.length===0 || NDA.ndaObject.response.cloudItems.length != NDA.ndaObject.previousCount)
						{
							NDA.ndaObject.jsonParse();
							NDA.ndaObject.pushArray();
						}
						setTimeout(function() { NDA.ndaObject.getCloud(); },1000);
					}
					else
					{   
						// keszvan
						NDA.ndaObject.newRequestSemaphore = true;
						NDA.ndaObject.jsonParse();
						NDA.ndaObject.refreshNavigation();
						NDA.ndaObject.pushArray();
						$('nda_progress_gif').hide();
						
						if (NDA.nda_vizu_url_hack)
						{
							var title = document.location.href.split('#')[1].split('/')[1];
							title = unescape(title);
							var tagid = document.location.href.split('#')[1].split('/')[0].split(':')[1];
							NDA.ndaObject.addPathItem('tag',tagid,title);
							NDA.nda_vizu_url_hack = false;
						}
					}
					NDA.ndaObject.previousCount = NDA.ndaObject.response.cloudItems.length;
				}
			});
		};
		
		this.getInfo = function(last)
		{
			var lasttag;
			var temp = [];
			for (var po=0; po<aPath.length; po++)
			{
				if ( aPath[po][2] )
				{
					temp[po] = [];
					temp[po][0]=aPath[po][0];
					temp[po][1]=aPath[po][1];
					lasttag=po;
				}
			}

			this.lasttag = lasttag;

			var str = '';
			var param = {};
			param.operation = 'info';
			param.database = this.sDatabase;
			param.metaType = this.metaType;
                        param.collection = nda_vizualizacio_collection;

			if (aPath.length===0)
			{
				param.subRecordset = nda_vizualizacio_token;
				if (!param.subRecordset && this.startToken) {
					param.subRecordset = this.startToken;
				}
			}
			if (last)
			{
				param.path = temp;
				str = Object.toJSON(param);

				NDA.nda_vizu_comm( 
				{		    
					method:'post',
					postBody: 'param='+str,
					
					onComplete: function(request2) 
					{				
						var response = request2.responseText.evalJSON(true);
						
						var sData = response.availableRecordCount;
						$('nda_vizualizacio_szamossag').update(sData);
					}
				});
			}
			else
			{
				var temp2 = [];
				if (lasttag!==undefined)
				{
					temp2[0] = [];
					temp2[0][0] = aPath[lasttag][0];
					temp2[0][1] = aPath[lasttag][1];
				}
				param.path = temp2;
				str = Object.toJSON(param);
				NDA.nda_vizu_comm( 
				{		    
					method:'post',
					postBody: 'param='+str,
					
					onComplete: function(request3) 
					{				
						var response = request3.responseText.evalJSON(true);
						
						var sData = '('+response.availableRecordCount+')';
						if (NDA.ndaObject.lasttag!==undefined)
						{
							var id = 'nda_cardilanity' + NDA.ndaObject.lasttag;
							if (document.getElementById(id)) {
								$(id).update(sData);
							}
						}
					}
				});
			}
		};
		
		
		this.jsonParse = function()
		{
			var aNameArr = [];
			var aSortArr = [];
			var data;
			var sTagid;
			var i = 0, k = 0, j = 0;
			
			sResponseSemaphore = true;
			data = this.response;
			
			for (k=0; k<data.cloudItems.length; k++)
			{
				var z=data.cloudItems.length-1;
				while (z>0)
				{
					var iLeft  = parseInt(data.cloudItems[z][1], 10);
					var iRight = parseInt(data.cloudItems[(z-1)][1], 10);
					if (iLeft < iRight)
					{
					
						var temp=data.cloudItems[z];
						data.cloudItems[z]=data.cloudItems[(z-1)];
						data.cloudItems[(z-1)]=temp;
					}
					z--;
				}
			}
			
			if (this.rendezes)
			{
				for (i=0; i<data.cloudItems.length; i++ )
				{
					aNameArr[i]=data.cloudItems[i][0].toLowerCase();
				}

				aNameArr = aNameArr.sort();

				for (i=0; i<aNameArr.length; i++ )
				{
					for (j=0; j<data.cloudItems.length; j++ )
					{
						temp = data.cloudItems[j][0];
						
						if (temp.toLowerCase() == aNameArr[i])
						{ 
							aCloudRep[iCloudRepPointer] = [];						 
							aCloudRep[iCloudRepPointer][0] = data.cloudItems[j][0];  // tag name
							aCloudRep[iCloudRepPointer][1] = data.cloudItems[j][1];  // tag cardinality
							aCloudRep[iCloudRepPointer][2] = data.cloudItems[j][2];  // tag id
							aCloudRep[iCloudRepPointer][3] = j; // hanyadik elem
							iCloudRepPointer++;
						}
					}
				}
			}
			else
			{

				var opt=0;
				for (j=data.cloudItems.length-1; j>=0;j--)
				{
					aCloudRep[iCloudRepPointer] = [];
					aCloudRep[iCloudRepPointer][0] = data.cloudItems[j][0];  // tag name
					aCloudRep[iCloudRepPointer][1] = data.cloudItems[j][1];  // tag cardinality
					aCloudRep[iCloudRepPointer][2] = data.cloudItems[j][2];  // tag id
					aCloudRep[iCloudRepPointer][3] = j; // hanyadik elem
					iCloudRepPointer++;
				}
			}
		};

		this.addPathItem = function(metaType,metaId,metaValue)
		{

			for(var i=0;i<aPath.length;i++)
			{
				if (aPath[i][0] == metaType && aPath[i][1] == metaId)
				{
					// mar benne van az utban
					return false;
				}
			}

			aPath[iPathNr] = [];
			aPath[iPathNr][0] = metaType; //metatype
			aPath[iPathNr][1] = metaId; //metaid
			aPath[iPathNr][2] = true;
			aPath[iPathNr][3] = metaValue; //meta value
			NDA.ndaObject.printCloudPath(metaValue, metaType);
			iPathNr++;

			sResponseSemaphore = false;
			
			this.makeRequest();
			
		};

		this.newRequest = function(point)
		{
			if (sResponseSemaphore)
			{
				var sEqPath = false;
				/* scan path */
				for (var k=0; k<aPath.length; k++)
				{
					if (aPath[k][1]==aShowCloud[point][1])
					{
						aPath[k][2] = true;
						
						var tag = 'nda_path_name' + k;
						var tagdel = 'nda_tagdel' + k;
						var hashmark = 'nda_hashmark' + k;
						$(tag).setStyle({color: '#000000'});
						$(tagdel).setStyle({color: '#000000'}).update('<img width="7" height="7" border="0" alt="" src="'+NDA.nda_vizualizacio_baseURL+'img/icon_x.gif"/>');
						NDA.ndaObject.pathModify();
						sEqPath = true;
					}
				}
				
				this.addPathItem(this.metaType,aShowCloud[point][1],aShowCloud[point][2]);
			}
		};
		
		this.printCloudPath = function(tagname, tagtype)
		{
			var tag = 'nda_path_name' + iPathNr;
			var tagdel = 'nda_tagdel' + iPathNr;
			var tagexclusive = 'nda_tagexclusive' + iPathNr;
			var hashmark = 'nda_hashmark' + iPathNr;
			var szamossag = 'nda_cardilanity' + iPathNr;
			
			var sType;

			switch(tagtype)
			{
				case 'tag':
					sType = '';
					break;
				case 'szerzo':
					sType = 'sz:';
					break;
				case 'type':
					sType = 't:';
					break;
			}

			var sElement = 'nda_path_ul';

			var insert =  '<li id="'+tag+'li" class="pathli"><span id="'+tag+'" alt="eddig a kulcsszóig" title="eddig a kulcsszóig">'+sType+tagname+'</span><br/>';
			insert += '<span id="'+tagdel+'" class="tagdel" alt="kulcsszó törlése" title="kulcsszó törlése"><img "7" height="7" border="0" alt="" src="'+NDA.nda_vizualizacio_baseURL+'img/icon_x.gif"/></span>';
			insert += '<span id="'+tagexclusive+'" class="tagexclusive" alt="csak ez a kulcsszó" title="csak ez a kulcsszó"><img "7" height="7" border="0" alt="" src="'+NDA.nda_vizualizacio_baseURL+'img/icon_up.gif"/></span>';
			insert += '</li>';

			this.createItem('span',sElement,'path'+tag, insert);

			$(tag).addClassName('nda_path');
			//$(tagdel).addClassName('nda_path');
			
			this.pathModify();
			
			Event.observe("nda_path_root", 'click', function(event) 
			{
				for (var i=0; i<aPath.length; i++)
				{
					aPath[i][2] = false;
					$('nda_path_name' + i).hide();
					$('nda_path_name' + i+'li').hide();
					$('nda_tagdel' + i).hide();
				}
				aPath = [];
				
				iPathNr = 0;
				
				NDA.ndaObject.addremoveSearchResultButton();

				setTimeout(NDA.ndaObject.makeRequest, 500);
			});
			Event.observe(tagexclusive, 'click', function(event) 
			{
				var id = $(Event.element(event)).id;
				if (!id)
				{
					id = Event.element(event).parentNode.id;
				}
				var nr = parseInt(id.substr(16), 10);
				var tag = 'nda_path_name' + nr;
				for (var i=0; i<iPathNr; i++)
				{
					if (i!=nr)
					{
						aPath[i][2] = false;
						$('nda_path_name' + i).setStyle({color: '#aaaaaa'});
						$('nda_tagdel' + i).setStyle({color: '#aaaaaa'});
						$('nda_tagdel' + i).update('<img width="7" height="7" border="0" alt="" src="'+NDA.nda_vizualizacio_baseURL+'img/icon_plus.gif"/>');
					}
				}
				
				iPathNr = 1;
				
				NDA.ndaObject.pathModify();
				setTimeout(NDA.ndaObject.makeRequest, 500);
			} );
			Event.observe(tagdel, 'click', function(event) 
			{
				var id = $(Event.element(event)).id;
				if (!id)
				{
					id = Event.element(event).parentNode.id;	
				}
				var nr = parseInt(id.substr(10), 10);
				var tag = 'nda_path_name' + nr;
				var tagdel = 'nda_tagdel' + nr;
				
				if (aPath[nr][2])
				{
					aPath[nr][2] = false;
					$(tag).setStyle({color: '#aaaaaa'});
					$(tagdel).setStyle({color: '#aaaaaa'});
					$(tagdel).update('<img width="7" height="7" border="0" alt="" src="'+NDA.nda_vizualizacio_baseURL+'img/icon_plus.gif"/>');
				   
				}
				else
				{
					aPath[nr][2] = true;
					$(tag).setStyle({color: '#FFFFFF'});
					$(tagdel).setStyle({color: '#FFFFFF'});
					$(tagdel).update('<img width="7" height="7" border="0" alt="" src="'+NDA.nda_vizualizacio_baseURL+'img/icon_x.gif"/>');
					
				}
				NDA.ndaObject.pathModify();
				NDA.ndaObject.makeRequest();
			} );
			
			Event.observe(tag, 'click', function(event) 
			{
				var id = $(Event.element(event)).id;
				var nr = parseInt(id.substr(13), 10);
				
				var tag = 'nda_path_name' + nr;
				var tagdel = 'nda_tagdel' + nr;
				
				if (aPath[nr][2])
				{
					
					for (var tmp=nr+1; tmp< iPathNr; tmp++)
					{
						aPath[tmp][2] = false;
						$('nda_path_name' + tmp).update('');
						$('nda_tagdel' + tmp).update('');
						$('nda_path_name' + tmp+'li').hide();
					}
					
					iPathNr = nr+1;
					NDA.ndaObject.pathModify();
					NDA.ndaObject.makeRequest();
				}
				
			});
			
		};

		this.pathLenCount = function() {
		    var c = 0;
		    for (var j = 0; j < aPath.length; ++j) {
		      if (aPath[j][2]) {
				c++;
		      }
		    }
		    return c;
		};
		
		this.addremoveSearchResultButton = function() {
			if (NDA.same_host) {
			  return;
			}
			var target = $('nda_search_result_button'),
				c = this.pathLenCount();

			if (c == 0) {
			  target.hide();

			} else if (c > 0) {
			  target.show();
			}
		};

		this.pathModify = function()
		{
			var lasttrueitem;
			var lucenequerystr = ''+NDA.default_querystr;
			var tagidsstr = '';
			for(var j=0;j<aPath.length;j++)
			{
				if (aPath[j][2])
				{
					lasttrueitem=j;
					if (lucenequerystr.length>0) {
						lucenequerystr+= ' AND ';
					}

					if (aPath[j][0]=='tag') {
						lucenequerystr+= 'subject';
					}
					if (aPath[j][0]=='szerzo') {
						lucenequerystr+= 'creator';
					}
					if (aPath[j][0]=='type') {
						lucenequerystr+= 'type' ;
					}

					lucenequerystr += ': "'+aPath[j][3]+'"'; 
					if (aPath[j][0]=='tag')
					{
						if (tagidsstr) {
							tagidsstr += ',';
						}
						tagidsstr += aPath[j][1];	
					}
				}
			}

			NDA.lucenequerystr = lucenequerystr;

			if (lasttrueitem!==undefined)
			{
				this.lasttag = lasttrueitem;
			}
			// ha tudjuk, akkor adjuk át a keresőnek
			if (typeof(NdaQuery)!='undefined') {
				NdaQuery.search(lucenequerystr,0,this.startToken);
			} else {
				if (window.location.href.indexOf('.nda.hu/')!=-1 || window.location.href.indexOf('http://nda.hu/')!==-1) {
					window.location.href = 'http://kereso.nda.hu/?query='+lucenequerystr+'#'+aPath[0][0]+':'+aPath[0][1]+'/'+escape(aPath[0][3]);
				}
			}
			if (typeof(vizuRecordsetFnc)!='undefined')
			{
				vizuRecordsetFnc(tagidsstr);
			}
			
			this.addremoveSearchResultButton();
		};
		
		this.attunes = function(id,elem)
		{
			$(id).update(elem);
			//Effect.Appear($(id));
			$(id).show();
		};
		
		this.pushArray = function()
		{
			var i = 0;
			var sTagid = '';
			for (i=0; i<iCloudRepPointer; i++)
			{
				//insert = '<span title="'+aCloudRep[i][1]+'" alt="'+aCloudRep[i][1]+'">';
				var insert = aCloudRep[i][0];
				//insert = '</span>';// + '(' + aCloudRep[i][1] +') '; 

				sTagid = 'nda_stagid' + i;
				
				/* set min & max size */
				 
				this.checkMinMax( parseInt( aCloudRep[i][1], 10 ) );
				$(sTagid).alt = aCloudRep[i][1];
				$(sTagid).title = aCloudRep[i][1];

				if (!$(sTagid).visible())
				{
					$(sTagid).update(insert);
					//Effect.Appear($(sTagid));
					$(sTagid).show();
				}
				else
				{
					Effect.Fade($(sTagid));
					var sInOne = sTagid;
					var sInTwo = insert;

					var timeoutfnc = function(a, b) {
						return function () { NDA.ndaObject.attunes(a,b); };
					};
					setTimeout(timeoutfnc(sInOne, sInTwo), 2000);
					
				}
				aShowCloud[i] = [];
				aShowCloud[i][0] = sTagid;  //div id
				aShowCloud[i][1] = aCloudRep[i][2];  //tag id
				aShowCloud[i][2] = aCloudRep[i][0];  //tag name
				Event.observe(sTagid, 'click', function(event)
				{
					var point = 0;
					while ( !($(Event.element(event)).id == aShowCloud[point][0]) )
					{
						point++;
					}     
					NDA.ndaObject.newRequest(point);
				});

				if (aCloudRep[i][0].length===0 || aCloudRep[i][0].length>30)
				{
					$(sTagid).update('').hide();
				}
			}
			
			/* clear */
			if ( (iCloudRepPointer>0) || ((iCloudRepPointer===0)&&(this.newRequestSemaphore)) )
			{

				for (i=iCloudRepPointer; i<this.iCloudLength; i++)
				{
					sTagid = 'nda_stagid' + i;
					$(sTagid).update('').hide();
				}
			}
			var maxcolors = []; // szamossag indexu szinek
			/* set CSS style */
			for (i=0; i<iCloudRepPointer; i++)
			{
				sTagid = 'nda_stagid' + i;
				var aStyle = [];
				
				aStyle = this.setCloudSize(aCloudRep[i][1], aCloudRep[i][3]);

				//sColor = 'rgb('+aStyle[1]+', '+aStyle[1]+', '+aStyle[1]+')';
				//sColorT = aStyle[1].toString(16);
	//		    sColor = '#'+sColorT+sColorT+sColorT;

				var sColor = aStyle[1];
				$(sTagid).setStyle({ fontSize: aStyle[0]+'px', color: sColor});

				if (typeof(maxcolors[aCloudRep[i][1]])!='undefined')
				{
					var szin = maxcolors[aCloudRep[i][1]];
					if (parseInt(sColor.substr(1,2),16) > parseInt(szin.substr(1,2),16))
					{
						// ha vilagosabb mint a mar mentett akkor felulirjuk
						maxcolors[aCloudRep[i][1]] = sColor;
					}
				}
				else
				{
					maxcolors[aCloudRep[i][1]] = sColor;
				}

				if ($(sTagid).getHeight() > sDivHeight)
				{
					sDivHeight = $(sTagid).getHeight();
				}
			}
			for (i=0; i<iCloudRepPointer; i++)
			{
				sTagid = 'nda_stagid' + i;
				$(sTagid).style.color = maxcolors[aCloudRep[i][1]];
				//$(sTagid).setStyle({ height: sDivHeight});
			}
			
			iCloudRepPointer = 0;
		};
		
		this.checkMinMax = function(elem)
		{
			if (sMinTag === undefined)
			{
				sMinTag = elem;
			}
			else if (sMinTag > elem)
			{
				sMinTag = elem;
			}
			
			if (sMaxTag === undefined)
			{
				sMaxTag = elem;
			}
			else if (sMaxTag < elem)
			{
				sMaxTag = elem;
			}
		};
		
		
		this.createItem = function(itemName, node, itemID, content, sClass)
		{		
			var nodeid  = (!node) ? this.getTag('body').item(0) : $(node);
			var newItem = document.createElement(itemName);
			
			if (content) 
			{
				newItem.innerHTML = content;
			}
			
			newItem.setAttribute('id', itemID);
			nodeid.appendChild(newItem);    	
		};
		
		/**
		 * 
		 * @param integer sData rekord szamossag
		 * @param integer nr hanyadik a felhoben
		 */
		this.setCloudSize = function(sData, nr)
		{
			var resp = [];
			var threshold = [];
			sData = parseInt(sData, 10);
			
			resp[0] = iFontSize;
			resp[1] = iFontColor;
			
			var iFontInterTemp = 0;

			if (iCloudRepPointer<iFontInter)
			{
				iFontInterTemp = iCloudRepPointer;
			}
			else
			{
				iFontInterTemp = iFontInter;
			}
				
			
			/*log algorithm*/
			var delta = (sMaxTag-sMinTag)/iFontInterTemp;
			
			for (var p=1; p<=iFontInterTemp; p++)
			{
				threshold[p] = 100*(Math.log((sMinTag+p*delta)+2));
			}
			var size = 0;
			var fontset_flag=false;
			for (size=1; size<=iFontInterTemp; size++)
			{
				if ( !fontset_flag )
				{
					if( 100*(Math.log(sData+2)) <= threshold[size] )
					{
						var logalg = iFontSize + (size-1);
						var logalgcolor = ( iFontColor-((iFontColor/iFontInterTemp)*(size-1)) );
						fontset_flag=true;
					}
				}
			}

			/*simple algorithm*/
			fontset_flag=false;
			delta = iCloudRepPointer/iFontInterTemp;
			
			for (size=1; size<=iFontInterTemp; size++)
			{
				if ( !fontset_flag )
				{
					if( nr<=delta*size )
					{
						var simplealg = iFontSize + (size-1);
						var simplealgcolor = ( iFontColor-((iFontColor/iFontInterTemp)*(size-1)) );
						fontset_flag=true;
					}
				}
			}

			/* eq */
		   
			resp[0] = parseInt( (iCorrection*logalg)+((1-iCorrection)*simplealg), 10 );
			
			var R = 65+30;
			var G = 152+30;
			var B = 212+30;
			nr = nr+1;
			var cloudLength = this.response.cloudItems.length;
			var r = (255-R)*(cloudLength-(cloudLength-nr))/cloudLength+R;
			var g = (255-G)*(cloudLength-(cloudLength-nr))/cloudLength+G;
			var b = (255-B)*(cloudLength-(cloudLength-nr))/cloudLength+B;
			resp[1] = '#'+Math.round(r).toString(16)+Math.round(g).toString(16)+Math.round(b).toString(16);
			//console.log('resp1:'+resp[1]);
			return resp;
		};
		
		this.page = function(sData)
		{
			if (sData=='right')
			{
				this.iCloudOffset += this.iCloudLength; 
			}
			else if (sData=='left')
			{
				this.iCloudOffset -= this.iCloudLength; 
			}
			this.makeRequest(true);
		};
		
		
		this.refreshNavigation = function()
		{
			
			if (this.iCloudOffset===0)
			{
				$('nda_vizualizacio_left').innerHTML='&nbsp;';
			}
			else
			{
				$('nda_vizualizacio_left').update('Vissza');
			}
			
			if (iCloudRepPointer == this.iCloudLength)
			{
			   $('nda_vizualizacio_right').update('Tovább');
			}
			else
			{
				$('nda_vizualizacio_right').innerHTML='&nbsp;';
			}
		};
		
		this.changeCorrection = function(iData)
		{
			iCorrection = iData;
			this.makeRequest(); 
		};

		this.createDivs = function()
		{
			var box = $("nda_vizualizacio_box");
			try
			{
				var boxidtype = typeof(box.id);
			}
			catch(e)
			{
				box = document.createElement("div");
				box.id = "nda_vizualizacio_box";
				document.body.appendChild(box);
			}
			var menu = document.createElement("ul");
			menu.id = "nda_vizualizacio_menu";

			menu.innerHTML += '<li id="nda_vizualizacio_tags" class="nda_vizualizacio_menu_button_aktiv" onclick="NDA.switchMetaType(\'tag\')">tagek</li>';
			menu.innerHTML += '<li id="nda_vizualizacio_authors" class="nda_vizualizacio_menu_button" onclick="NDA.switchMetaType(\'szerzo\')">szerzők</li>';
			menu.innerHTML += '<li id="nda_vizualizacio_type" class="nda_vizualizacio_menu_button" onclick="NDA.switchMetaType(\'type\')">típus</li>';

			box.appendChild(menu);

			var header = document.createElement("div");
			header.id = "nda_vizualizacio_header";

			header.innerHTML += '<span id="nda_path_root" alt="kiindulási címkefelhő" title="kiindulási címkefelhő">/</span>\n';
			header.innerHTML += '<ul id="nda_path_ul" class="path"></ul>\n';

			header.innerHTML += '<div id="nda_progress_gif">&nbsp;</div>';
			
			box.appendChild(header);

			box.innerHTML += '<div id="nda_vizualizacio_cloud"></div>\n';
			
			var pager = document.createElement("div");
			pager.id = "nda_vizualizacio_page";
			var html = '';

			html += '<span id="nda_vizualizacio_left" class="nda_pager" onclick="NDA.ndaObject.page(\'left\')">&nbsp;</span>';

			html += '<span id="nda_search_result_button" class="nda_pager" style="display: none;" onclick="NDA.jumpToResults();">Találatok</span>';

			html += '<span id="nda_vizualizacio_right" class="nda_pager" onclick="NDA.ndaObject.page(\'right\')">&nbsp;</span>';
			
			pager.innerHTML = html;
			
			box.appendChild(pager);
			
			var footer = document.createElement("div");
			footer.id = "nda_vizualizacio_footer";

			html = '';

			html += '<div id="nda_vizualizacio_footer_head"><img src="'+NDA.nda_vizualizacio_baseURL+'img/button_tag-option.gif" id="vizu_settings_button" onclick="NDA.toggleSettings();"/></div>';
			html += '<div id="nda_vizualizacio_footer_content" style="display:none;">';
			html += '<span id="help_text_focsoport" class="vizu_help" style="display:none;">'+NDA.help_text_focsoport+'</span><span id="vizu_focsoport_label">Főcsoport</span>:\n';
			html += '<span id="nda_vizualizacio_switch" onclick="NDA.switchCloud()">kikapcsol</span>\n';
			html += 'Ábécé rendezés: <span id="nda_vizualizacio_rendezes" onclick="NDA.switchRendezes()">kikapcsol</span>\n';
	//		html += 'Adatbázis:<span id="nda_vizualizacio_database" onclick="switchDatabase()">nda2-test</span>\n';
			html += 'Találatok:<span id="nda_vizualizacio_szamossag">0</span>\n';
			html += '<br/>\n';
			html += '</div>\n';
			footer.innerHTML  = html;

			box.appendChild(footer);
		};

		this.addScript = function(url)
		{
			var script      = document.createElement('script');
			script.src  = url;
			script.type = 'text/javascript';

			/* create script element */
			document.getElementsByTagName('head')[0].appendChild(script);

		};
		/* object construct */
		
		this.initialize();   

	},

	jumpToResults: function() {
	  window.open('http://'+NDA.script_host+'/?query='+NDA.lucenequerystr,'_blank');
	},

	switchCloud:function()
	{
		NDA.ndaObject.focsoport = (NDA.ndaObject.focsoport)	? false : true;
		NDA.ndaObject.makeRequest();
		var updatestr = '';
		if (NDA.ndaObject.focsoport) {
			updatestr = 'kikapcsol';
		} else {
			updatestr = 'bekapcsol';
		}
		$('nda_vizualizacio_switch').update(updatestr);
	},

	switchRendezes:function()
	{
		NDA.ndaObject.rendezes = (NDA.ndaObject.rendezes) ? false : true;
		NDA.ndaObject.makeRequest();
		var updatestr = '';
		if (NDA.ndaObject.rendezes) {
			updatestr = 'kikapcsol';
		} else {
			updatestr = 'bekapcsol';
		}
		$('nda_vizualizacio_rendezes').update(updatestr);
	},

	switchDatabase:function()
	{
		NDA.ndaObject.sDatabase = (NDA.ndaObject.sDatabase == 'nda2') ? 'nda2-test' : 'nda2';
		$('nda_vizualizacio_database').update(NDA.ndaObject.sDatabase);
		NDA.ndaObject.makeRequest();
	},

	switchMetaType:function(sData)
	{
		if (sData!='tag' && NDA.ndaObject.focsoport)
		{
			NDA.ndaObject.focsoport = false;
		}
		if (sData=='tag' && !NDA.ndaObject.focsoport)
		{
			NDA.ndaObject.focsoport = true;
		}
		var updatestr = '';
		if (NDA.ndaObject.focsoport) {
			updatestr = 'kikapcsol';
		} else {
			updatestr = 'bekapcsol';
		}
		$('nda_vizualizacio_switch').update(updatestr);
		NDA.ndaObject.metaType = sData;
		NDA.ndaObject.makeRequest();
	},

	toggleSettings:function()
	{

		var t = null;
		if ($('nda_vizualizacio_footer_content').offsetHeight === 0)
		{
			t = Effect.BlindDown('nda_vizualizacio_footer_content');
			$('vizu_settings_button').src = NDA.nda_vizualizacio_baseURL+'img/button_tag-option_active.gif';
		}
		else
		{
			t = Effect.BlindUp('nda_vizualizacio_footer_content');
			$('vizu_settings_button').src = NDA.nda_vizualizacio_baseURL+'img/button_tag-option.gif';
		}
	},

	addScript :function(url)
	{
	//	alert('adding script:'+nda_vizualizacio_baseURL+url);
		document.write('<script type="text/javascript" src="'+NDA.nda_vizualizacio_baseURL+url+'"></script>');
	},

	addCss :function(url)
	{
		document.write('<link rel="stylesheet" type="text/css" href="'+NDA.nda_vizualizacio_baseURL+url+'" />'); //http://dev.nda.hu/nda/vizualizacio/
	},

	logit:function(str)
	{
		if (typeof(console)=='object')
		{
			console.log(str);
		}
	},

	toggleCimkeFelhoGomb:function()
	{
		// document.cookie.match(new RegExp('(^|;)\\s*' + escape('vizuNyitva') + '=([^;\\s]*)'))[2]
		if (NDA.cimkeFelhoMegjelenites)
		{
			NDA.cimkeFelhoMegjelenites=false;	
			document.cookie = escape('vizuNyitva') + '=' + escape('ki' || '');
			NDA.logit('ki');
		}
		else
		{
			NDA.cimkeFelhoMegjelenites = true;
			document.cookie = escape('vizuNyitva') + '=' + escape('be' || '');
			NDA.logit('be');
		}
	},

	vizu_focsoport_label_mouseover:function()
	{
		Effect.Appear('help_text_focsoport');
	},

	vizu_focsoport_label_mouseout:function()
	{
		Effect.Fade('help_text_focsoport');
	},

	nda_vizu_comm :function(params) {
		NDA.nda_vizu_comm_requestlists.push(params.onComplete);
		var id = NDA.nda_vizu_comm_requestlists.length -1;

		var sc = document.createElement('script');
		sc.type = 'text/javascript';
		sc.id = 'NDA.nda_vizu_comm_script_'+id;
		sc.src = NDA.nda_vizualizacio_baseURL+'proc.php?randid='+Math.random()+'&callbackid='+id+'&'+params.postBody;

		document.getElementsByTagName('head')[0].appendChild(sc);
	},

	nda_vizu_comm_callback:function(callbackid, jsonstr) {
		NDA.nda_vizu_comm_requestlists[callbackid]({responseText: jsonstr});
		NDA.nda_vizu_comm_requestlists[callbackid] = null;
		var sc = document.getElementById('NDA.nda_vizu_comm_script_'+callbackid);
		sc.parentNode.removeChild(sc);
	}
};


/* INIT OF THE ENTIRE VIZU */
(function() {
	function nda_find_self() {
		var baseurl = document.location.href.split('/');
		baseurl.pop();
		NDA.display_host = baseurl[2];
		NDA.vizu_host = baseurl[0]+'//'+baseurl[2];
		baseurl = baseurl.join('/');
		baseurl += '/';
		NDA.baseurl = baseurl;

		var scripts = document.getElementsByTagName('script');
		for(var i=0;i<scripts.length;i++)
		{
			var scripturl = scripts[i].src;
			if (scripturl.split('/')[0]!='http:')
			{
				if (scripturl.substr(0,1)=='/')
				{
					scripturl = NDA.vizu_host+scripturl;
				}
				else
				{
					scripturl = NDA.baseurl+scripturl.substr(1);
				}
			}
			if (scripturl.substr(scripturl.length-15) == 'vizualizacio.js')
			{
				NDA.nda_vizualizacio_baseURL = scripturl.substr(0,(scripturl.length-18));
				if (NDA.nda_vizualizacio_baseURL.split('/')[2]!=location.href.split('/')[2])
				{
					NDA.nda_vizualizacio_baseURL = NDA.nda_vizualizacio_baseURL.replace('www.','');
				}
				break;
			}
		}
		NDA.script_host = NDA.nda_vizualizacio_baseURL.split('/')[2];

		NDA.same_host = (NDA.script_host == NDA.display_host);
	}

	function ndaStartScript() 
	{	
		var elements = document.getElementsByTagName('a');
		var toggleElement = false;

		for(var i=0;i<elements.length;i++)
		{
			if(elements[i].href == 'javascript:void(0);' && elements[i].childNodes.length==1 && elements[i].childNodes[0].tagName == 'SPAN' && elements[i].childNodes[0].innerHTML=='Címkefelhő')
			{
				// ez a mi gombunk
				Event.observe(elements[i], 'click', NDA.toggleCimkeFelhoGomb);
				toggleElement = elements[i];
			}
		}
	//	document.getElementById("tagBrowser");
		var tagBrowser = document.getElementById("tagBrowser");
		if (!tagBrowser)
		{
			cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape('vizuNyitva') + '=([^;\\s]*)'));
			if (cookie)
			{
				if (cookie[2]=='ki' && toggleElement)
				{
//					openTagBrowser(toggleElement); 
//					ez mintha nem is lenne, miez?
					NDA.cimkeFelhoMegjelenites = false;

				}
			}
	//		tagBrowser.style.display = "none"; // lenyitva kedés
		}	
		/* create nda_searchObject */ 
		NDA.ndaObject = new NDA.nda_vizualizacioObject();
	}


	if (window.onload) {
		var vo = window.onload;
		window.onload = function() {
			vo();
			ndaStartScript();
		};
	} else {
		window.onload = ndaStartScript;
	}

	nda_find_self();
	NDA.addScript('js/prototype.js');
	NDA.addScript('js/scriptaculous.js');
	NDA.addCss ('css/ndavizualizacio.css');

	document.write("<div id='nda_vizualizacio_box'></div>");
})();

