// <THIS FIlE RUN ONLY ONCE
if(window.jsfiles_funcs_bubble==null){
window.jsfiles_funcs_bubble=true;
// THIS FIlE RUN ONLY ONCE>

// Bubble Form

function MakeBubbleForms(){
	
	function registerForm(id){
		var form=document.getElementById(id);
		if(form==null){
			//insert form to document
			div=document.createElement('div');
			var thebody=document.getElementById('body');
			thebody.insertBefore(div, thebody.firstChild);
			div.innerHTML='<iframe style="position:absolute; left:0px; top:0px; width:100%; height:100%; border:none;"></iframe><form method="post" id="'+id+'" style="position:absolute; z-index:101;"></form>';
			div.style.position='absolute';
			div.style.zIndex=100;
			div.style.left='0px';
			div.style.top='0px';
			//form.id=id;
			//form.method='post';
			form=document.getElementById(id);
			form.iframe=div.firstChild;
			form.div_el=div;
			var url=document.URL.split('.');
			var ext='';
			if(url.length>1) ext=url.pop();
			var date=new Date();
			url=url.join('.');//+'_random'+Math.round(date.getTime()/1000)+Math.round(Math.random()*1000);
			url=new Array(url,ext);
			//url=url+'?'+Math.round(date.getTime()/1000)+Math.round(Math.random()*1000);
			form.action=url.join('.');
		}
		if(form.isbubbleform) return;
		form.isbubbleform=true;
		if(form.iframe==null) form.style.position='absolute';
		form.linkuses=new Array();
		form.linkus_index=null;
		form.style.display='none';
		form.className='bubbleform';

		var div=form.header_div=document.createElement('div');
		form.appendChild(div);
		div.innerHTML='<table style="width:100%"><tr><td><a href="javascript: document.getElementById(\''+id+'\').submit()">accept</a></td><td style="text-align:right"><a href="javascript:document.getElementById(\''+id+'\').hideBubbleForm()">X</a></td></tr></table>';
		div.className='bubbleformaccept';
		
		form.hideBubbleForm=function(){
			if(form.style.display!='none'){
				var linkus=form.linkuses[form.linkus_index];
				form.style.display='none';
				if(form.iframe!=null) form.iframe.style.display='none';
				form.linkus_index=null;
				if(linkus.ltimout!=null){
					clearTimeout(linkus.ltimout);
					linkus.ltimout=null;
				}
			}
		}
		//var document_onmousemove=document.onmousemove;
		
		function this_onmousemove(evt){
			if(evt==null) evt=event;
			
			if(form!=null){
				if(form.linkuses[0].parentNode==null){
					form.div_el.parentNode.removeChild(form.div_el);
					form.div_el = null;
					form=null;
					myEvents.del_onmousemove(this_onmousemove);
					return;
				}
				var m=mousePageXY(evt);
				//alert(form.offsetTop);
				if(form.style.display!='none'){
					var linkus=form.linkuses[form.linkus_index];

					var pos=getElementPosition(linkus);
					//if(pos.left==0) alert(form.linkuses[0].parentNode);
					if(
						m.y<Math.min(form.offsetTop,pos.top) ||
						m.x<Math.min(form.offsetLeft,pos.left) ||
						m.y>Math.max(pos.top+linkus.offsetHeight, form.offsetTop+form.offsetHeight) ||
						m.x>Math.max(pos.left+linkus.offsetWidth, form.offsetLeft+form.offsetWidth)
					){
						if(linkus.ltimout==null){
							linkus.ltimout=setTimeout(
								function(){
									linkus.ltimout=null;
									form.hideBubbleForm();
									/*linkus.ltimout=null;
									form.style.display='none';
									if(form.iframe!=null) form.iframe.style.display='none';
									form.linkus_index=null;*/
								}
								,777
							);
						}
						/*if(linkus.out_time!=null){
							var cur_date=new Date();
							if((cur_date - linkus.out_time) > 500){
								form.style.display='none';
								if(form.iframe!=null) form.iframe.style.display='none';
								form.linkus_index=null;
							}
						}*/
					}
					else if(linkus.ltimout!=null){
						clearTimeout(linkus.ltimout);
						linkus.ltimout=null;
					}

				}
			}
			
		}
		
		myEvents.add_onmousemove(this_onmousemove);
	}
	this.registerForm=registerForm;
	
	function getOnLinkFunc(form,linkus_index){
		function kkk(){
			//if(form.linkus_index!==null || form.linkus_index===linkus_index) return;
			if(form.linkus_index!==null){
				var z=(form.linkus_index===linkus_index);
				form.hideBubbleForm();
				if(z) return;
			}
			
			form.linkus_index=linkus_index;
			
			for(var i=0;i<form.linkuses.length;i++){
				var d=(i==linkus_index)?'block':'none';
				var ctrls=form.linkuses[i].ctrls;
				for(var j=0; j<ctrls.length; j++)
					ctrls[j].style.display=d;
			}
			var body=document.getElementById('body');
			var b_h=body.scrollTop+body.scrollHeight;
			var b_w=body.scrollLeft+body.scrollWidth;
			form.style.display='block';
			var w=0;
			var ctrls=form.linkuses[linkus_index].ctrls;
			for(var j=0; j<ctrls.length; j++)
				if(ctrls[j].offsetWidth>w)
						w=ctrls[j].offsetWidth;
			form.header_div.style.width=w + 'px';
			var linkus=form.linkuses[form.linkus_index];
			var pos=getElementPosition(linkus);
			//status=pos.left;
			form.style.left=pos.left + 'px';
			//alert(body.offsetWidth);
			form.header_div.style.display='block';
			form.style.top=(pos.top-form.offsetHeight-5) + 'px';
			
			//check for exit from window area
			if(form.offsetTop<3) form.style.top=pos.top + linkus.offsetHeight + 5 + 'px'; //form.style.top=3 + 'px';
			if(form.offsetLeft<3) form.style.left=3 + 'px';
			if(form.offsetLeft+form.offsetWidth+3 > b_w) form.style.left=(b_w-form.offsetWidth-3) + 'px';
			//if(form.offsetTop+form.offsetHeight+3 > b_h) form.style.top=b_h-form.offsetHeight-3;
			
			if(form.iframe!=null){
				form.iframe.style.display='block';
				form.iframe.style.width=form.offsetWidth + 'px';
				form.iframe.style.height=form.offsetHeight + 'px';
				form.iframe.style.top=form.offsetTop + 'px';
				form.iframe.style.left=form.offsetLeft + 'px';
			}
		}
		return kkk;
	}
	
	function registerElements(form_id,link_id,ctrl_id){
		var ctrl=document.getElementById(ctrl_id);
		//if(ctrl.isbubbleel) return;
		//ctrl.isbubbleel=true;
	
		registerForm(form_id);
		var form=document.getElementById(form_id);
		var linkus=document.getElementById(link_id);
		
		if(form==null || ctrl==null || linkus==null) return;
		linkus.style.cursor='pointer';
		ctrl.parentNode.removeChild(ctrl);
		form.appendChild(ctrl);
		
		//remove deleted linkus
		var temp_arr=new Array();
		for(var i=0;i<form.linkuses.length;i++)
			if(form.linkuses[i].parentNode!=null) temp_arr[temp_arr.length]=form.linkuses[i];
		form.linkus_index=null;
		form.style.display='none';
		form.linkuses=temp_arr;
		//get linkus index
		for(i=0;i<form.linkuses.length;i++){
			//alert(i+': '+form.linkuses[i]);
			if(form.linkuses[i]===linkus) break;
		}
		if(i===form.linkuses.length)
			form.linkuses[i]=linkus;
		
		//add ctrl to linkus
		if(linkus.ctrls==null) linkus.ctrls=new Array();
		linkus.ctrls[linkus.ctrls.length]=ctrl;
		
		linkus.onmousemove=function(){
			linkus.className=linkus.className.replace(/ bubblelinkactive| bubblelink|bubblelinkactive|bubblelink/, '') + ' bubblelinkactive';
		}
		linkus.onmouseout=function(){
			linkus.className=linkus.className.replace(/ bubblelinkactive| bubblelink|bubblelinkactive|bubblelink/, '') + ' bubblelink';
		}
		linkus.onmouseout();
		linkus.onclick=getOnLinkFunc(form,i);
	}
	this.registerElements=registerElements;
	
	
	//---------sort element--------------\\
	
	
	function registerSortElement(div_id,sort_inp_id,desc_inp_id){
		var sort_inp=document.getElementById(sort_inp_id);
		sort_inp.desc_inp=document.getElementById(desc_inp_id);
		sort_inp.info_div=document.getElementById(div_id);
		sort_inp.info_div.style.textAlign='center';
		
		function kkk(num){
			var m=sort_inp.name.match(/(.*?)\[(.*?)\]/);
			if(m==null) return;
			var name=m[1];
			var index=m[2];
			if(index==='') return;
			var to_index=index*1+num;
			var el=null;
			for (var i=0; i < sort_inp.form.length; i++){
				m=sort_inp.form[i].name.match(/(.*?)\[(.*?)\]/);
				if(m!=null && m[1]==name && m[2]!=='' && m[2]==to_index) {
					el=sort_inp.form[i];
					break;
				}
			}
			
			if(el!=null){
				el.name=name+'['+index+']';
				el.desc_inp=name+'_['+index+']';
				el.info_div.setIndex(index);
				sort_inp.name=name+'['+(index*1+num)+']';
				sort_inp.desc_inp=name+'_['+(index*1+num)+']';
				sort_inp.info_div.setIndex(index*1+num);
			}
		}
		sort_inp.moveSort=kkk;
		
		sort_inp.info_div.setIndex=function(new_index){
			sort_inp.info_div.innerHTML=(new_index==='')?'':
				'<a href="javascript:document.getElementById(\''+sort_inp_id+'\').moveSort(-1);">&#60;&#60;</a> '+
				(new_index*1)+
				' <a href="javascript:document.getElementById(\''+sort_inp_id+'\').moveSort(1);">&#62;&#62;</a>';
		}

		sort_inp.info_div.setIndex(sort_inp.name.match(/\[(.*?)\]/)[1]);;
		
		sort_inp.onchangeSort=function(){
			var m=sort_inp.name.match(/(.*?)\[(.*?)\]/);
			if(m==null) return;
			var name=m[1];
			var index=m[2];
			
			var arr=new Array();
			for (var i=0; i < sort_inp.form.length; i++){
				m=sort_inp.form[i].name.match(/(.*?)\[(.*?)\]/);
				if(m==null || m[1]!=name || m[2]==='' || (index!=='' && m[2]==index)) continue;
				arr[arr.length]=sort_inp.form[i];
			}
			arr.sort(
				function(a,b){
					return a.name.match(/\[(.*?)\]/)[1]-b.name.match(/\[(.*?)\]/)[1];
				}
			);
			var new_index='';
			if(sort_inp.checked) {
				new_index=arr.length;
				arr[arr.length]=sort_inp;
			}
			sort_inp.name=name+'['+new_index+']';
			sort_inp.desc_inp.name=name+'_['+new_index+']';
			sort_inp.info_div.setIndex(new_index);
			
			new_index=0;
			for(i=0;i<arr.length;i++){
				if(!sort_inp.checked && sort_inp==arr[i]) continue;
				var el=arr[i];
				if(el!=null){
					el.name=name+'['+new_index+']';
					el.desc_inp.name=name+'_['+new_index+']';
					el.info_div.setIndex(new_index);
					new_index=new_index+1;
				}
			}
		}
		sort_inp.onclick=function(){
			if(!sort_inp.checked)
				sort_inp.desc_inp.checked=false;
			sort_inp.onchangeSort();
		}
		sort_inp.desc_inp.onclick=function(){
			if(sort_inp.desc_inp.checked && !sort_inp.checked){
				sort_inp.checked=true;
				sort_inp.onchangeSort();
			}
		}
	}
	this.registerSortElement=registerSortElement;
	
	// Value Filter
	function getFuncShowListColumnValues(list,ul){
		return function(data){
			if(list.step_load==0 || data.length<list.step_load){
				list.step_load=0; //stoping load values
				list.more.style.display='none';
				list.moreall.style.display='none';
			}
			else{
				list.more.style.display='block';
				list.moreall.style.display='block';
			}
			list.moreloading.style.display='none';
			for(var i=0;i<data.length;i++){
				var contin=false;
				for(var j=0;j<list.seted_values.length;j++){
					if(list.seted_values[j][0]==data[i][0]) {
						contin=true;
						break;
					}
				}
				if(contin) continue;
				var value=data[i];
				
				list.loaded_values[i]=value;
				
				addCheckboxToUl(ul,value[0],((value[1]==null)?value[0]:value[1]),false);
			}
			
		}
	}
	
	function addCheckboxToUl(ul,value,text,checked){
		
		var li=document.createElement('li');
		ul.appendChild(li);
		li.innerHTML='<input type="checkbox" '+(checked?'checked':'')+' name="'+ul.checkbox_name+'" value="'+((value==null)?'':value)+'">'+text;
		/*var inp=document.createElement('input');
		inp.type='checkbox';
		inp.value=value;
		alert(inp.checked);
		inp.name=ul.checkbox_name;
		li.appendChild(inp);
		inp.checked=true;
		var span=document.createElement('span');
		span.innerHTML=text;
		li.appendChild(span);*/
	}
	
	function registerValueSetFilterElement(sel_id,text_id,list_id,query_id,values){
		var sel=document.getElementById(sel_id);
		var text=document.getElementById(text_id);
		var list=document.getElementById(list_id);
		
		list.seted_values=values;
		list.loaded_values=[];
		list.start_load=0;
		list.step_load=25;
		list.style.height='100px';
		list.style.overflow='scroll';
		var ul=document.createElement('ul');
		ul.checkbox_name=text.name+'[]';
		list.appendChild(ul);
		for(var j=0;j<list.seted_values.length;j++){
			var value=list.seted_values[j];
			addCheckboxToUl(ul,value[0],(value[1]==null)?value[0]:value[1],true);
		}
		
		
		list.moreloading=document.createElement('div');
		list.moreloading.innerHTML='Values loading...';
		list.appendChild(list.moreloading);
		list.moreloading.style.display='none';
		
		list.more=document.createElement('a');
		list.more.innerHTML='More values...';
		list.appendChild(list.more);
		list.more.style.display='block';
		list.more.onclick=function(){
			if(list.step_load){
				list.moreall.style.display='none';
				list.more.style.display='none';
				list.moreloading.style.display='block';
				MiniAjax.getTableValues(getFuncShowListColumnValues(list,ul),{column_id:query_id,start:list.start_load,num:list.step_load});
				list.start_load+=list.step_load;
			}
		}


		list.moreall=document.createElement('a');
		list.moreall.innerHTML='More ALL values...';
		list.appendChild(list.moreall);
		list.moreall.style.display='block';
		list.moreall.onclick=function(){
			if(list.step_load){
				list.moreall.style.display='none';
				list.more.style.display='none';
				list.moreloading.style.display='block';
				MiniAjax.getTableValues(getFuncShowListColumnValues(list,ul),{column_id:query_id,start:list.start_load});
				list.step_load=0;
			}
		}

		sel.last_value=-1;
		sel.onchange=function(){
			if((sel.last_value==4) != (sel.value==4)){
				//text.value='';
				//list.innerHTML='';
			}
			if(sel.value==4 && query_id==null) sel.value=0;
			sel.last_value=sel.value;
			
			if(sel.value==4){
				text.style.display='none';
				list.style.display='block';
			}
			else{
				text.style.display='block';
				list.style.display='none';
				
			}
		}
		sel.onchange();
	}
	this.registerValueSetFilterElement=registerValueSetFilterElement;
	
	
	return this;
}

var bubbleForms= new MakeBubbleForms();
}