var getFunctionsUrl="/suggest.php?keyword=",phpHelpUrl="/tag/",httpRequestKeyword="",userKeyword="",defaultKeyword="Поиск по меткам...",suggestions=0,suggestionMaxLength=255,isKeyUpDownPressed=false,autocompletedKeyword="",hasResults=false,timeoutId=-1,position=-1,oCache=new Object(),minVisiblePosition=0,maxVisiblePosition=9,debugMode=false,xmlHttpGetSuggestions=createXmlHttpRequestObject();
function createXmlHttpRequestObject(){var xmlHttp;try{xmlHttp=new XMLHttpRequest();}catch(e){var XmlHttpVersions=new Array("MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP");
for(var i=0;i<XmlHttpVersions.length && !xmlHttp;i++){try{xmlHttp=new ActiveXObject(XmlHttpVersions[i]);}catch(e){}}}
if(!xmlHttp) alert("Error creating the XMLHttpRequest object.");else return xmlHttp;}
function init(){var oKeyword=document.getElementById("keyword");oKeyword.setAttribute("autocomplete","off");setTimeout("checkForChanges()",500);}
function addToCache(keyword,values){oCache[keyword]=new Array();for(i=0;i<values.length;i++){oCache[keyword][i]=values[i];}}
function checkCache(keyword){if(oCache[keyword])return true;for(i=keyword.length-2;i>=0;i--){var currentKeyword=keyword.substring(0,i+1);if(oCache[currentKeyword]){var cacheResults=oCache[currentKeyword],keywordResults=new Array(),keywordResultsSize=0;for(j=0;j<cacheResults.length;j++){if(cacheResults[j].indexOf(keyword)==0){ks=keywordResultsSize++;keywordResults[ks]=cacheResults[j];}}addToCache(keyword,keywordResults);return true;}}return false;}
function trim(str){return str.replace(/^\s+|\s+$/g,'');}
function getSuggestions(keyword){if(keyword!=""&&!isKeyUpDownPressed){isInCache=checkCache(keyword);if(isInCache==true){httpRequestKeyword=keyword;userKeyword=keyword;displayResults(keyword,oCache[keyword])}else{if(xmlHttpGetSuggestions){try{if(xmlHttpGetSuggestions.readyState==4 || xmlHttpGetSuggestions.readyState==0){httpRequestKeyword=keyword;userKeyword=keyword;xmlHttpGetSuggestions.open("GET",getFunctionsUrl+encode(keyword),true);xmlHttpGetSuggestions.onreadystatechange=handleGettingSuggestions;xmlHttpGetSuggestions.send(null);}else{userKeyword = keyword;if(timeoutId!=-1)clearTimeout(timeoutId);timeoutId = setTimeout("getSuggestions(userKeyword);",500);}}catch(e){displayError("Can't connect to server:\n"+e.toString());}}}}}
function xmlToArray(resultsXml){var resultsArray=new Array();for(i=0;i<resultsXml.length;i++)resultsArray[i]=resultsXml.item(i).firstChild.data;return resultsArray;}
function handleGettingSuggestions(){if(xmlHttpGetSuggestions.readyState==4){if(xmlHttpGetSuggestions.status==200){try{updateSuggestions();}catch(e){displayError(e.toString());}}else{displayError("There was a problem retrieving the data:\n"+xmlHttpGetSuggestions.statusText);}}}
function updateSuggestions(){var response=xmlHttpGetSuggestions.responseText;if (response.indexOf("ERRNO")>=0 || response.indexOf("error:")>=0 || response.length==0)throw(response.length==0 ? "Void server response.":response);response = xmlHttpGetSuggestions.responseXML.documentElement;nameArray=new Array();if(response.childNodes.length){nameArray= xmlToArray(response.getElementsByTagName("name"));}if(httpRequestKeyword==userKeyword){displayResults(httpRequestKeyword,nameArray);}else{addToCache(httpRequestKeyword,nameArray);}}
function displayResults(keyword,results_array){var div="<table>";if(!oCache[keyword] && keyword)addToCache(keyword,results_array);if(results_array.length==0){div+="<tr><td style=\"color:#000\">По запросу <strong>\""+keyword+"\"</strong>  ничего не найдено</td></tr>";hasResults=false;suggestions=0;}else{position=-1;isKeyUpDownPressed=false;hasResults=true;suggestions=oCache[keyword].length;for(var i=0;i<oCache[keyword].length;i++){crtFunction=oCache[keyword][i];div+="<tr id='tr"+i+"' onclick='location.href=document.getElementById(\"a"+i+"\").href;' onmouseover='handleOnMouseOver(this);'"+" onmouseout='handleOnMouseOut(this);'>"+"<td align='left'><a id='a"+i+"' href='"+phpHelpUrl+oCache[keyword][i].replace(/\s/g,'_')+"";if(crtFunction.length<=suggestionMaxLength){div+="'><b>"+crtFunction.substring(0,httpRequestKeyword.length)+"</b>";div+=crtFunction.substring(httpRequestKeyword.length,crtFunction.length)+"</a></td></tr>";}else{if(httpRequestKeyword.length<suggestionMaxLength){div+="'><b>"+crtFunction.substring(0, httpRequestKeyword.length)+"</b>";div+=crtFunction.substring(httpRequestKeyword.length,suggestionMaxLength)+"</a></td></tr>";}else{div+="'><b>"+crtFunction.substring(0,suggestionMaxLength)+"</b></td></tr>"}}}}div+="</table>";var oScroll=document.getElementById("scroll");oScroll.scrollTop=0;oScroll.innerHTML=div;oScroll.style.visibility="visible";oScroll.className="visible";if(results_array.length>0)autocompleteKeyword();}
function checkForChanges(){var keyword=trim(document.getElementById("keyword").value);if(keyword=="" || keyword==defaultKeyword){hideSuggestions();userKeyword=defaultKeyword;httpRequestKeyword=defaultKeyword;}setTimeout("checkForChanges()",500);if((userKeyword!=keyword) && (autocompletedKeyword!=keyword) && (!isKeyUpDownPressed))getSuggestions(keyword);}
function handleKeyUp(e){e=(!e)?window.event:e;target=(!e.target)?e.srcElement:e.target;if (target.nodeType==3)target=target.parentNode;code=(e.charCode)?e.charCode:((e.keyCode)?e.keyCode:((e.which)?e.which:0));if(e.type=="keyup"){isKeyUpDownPressed=false;if((code<13 && code!=8) || (code>=14 && code<32) || (code >= 33 && code <= 46 && code!=38 && code!=40) || (code>=112 && code<=123)){}else if(code==13){if(position>=0){location.href=document.getElementById("a"+position).href;}}else if(code==40){newTR=document.getElementById("tr"+(++position));oldTR=document.getElementById("tr"+(--position));if(position>=0 && position<suggestions-1)oldTR.className="";if(position<suggestions-1){newTR.className="highlightrow";updateKeywordValue(newTR);position++;}e.cancelBubble=true;e.returnValue=false;isKeyUpDownPressed=true;if(position>maxVisiblePosition){oScroll=document.getElementById("scroll");oScroll.scrollTop+=18;maxVisiblePosition+=1;minVisiblePosition+=1;}}else if(code==38){newTR=document.getElementById("tr"+(--position));oldTR=document.getElementById("tr"+(++position));if(position>=0 && position<=suggestions-1){oldTR.className="";}if(position>0){newTR.className="highlightrow";updateKeywordValue(newTR);position--;if(position<minVisiblePosition){oScroll=document.getElementById("scroll");oScroll.scrollTop-=18;maxVisiblePosition-=1;minVisiblePosition-=1;}}else if(position==0)position--;e.cancelBubble=true;e.returnValue=false;isKeyUpDownPressed=true;}}}
function updateKeywordValue(oTr){var oKeyword=document.getElementById("keyword");oKeyword.value=oCache[userKeyword][oTr.id.substring(2,oTr.id.length)];}
function deselectAll(){for(i=0;i<suggestions;i++){var oCrtTr=document.getElementById("tr"+i);oCrtTr.className="";}}
function handleOnMouseOver(oTr){deselectAll();oTr.className="highlightrow";position=oTr.id.substring(2,oTr.id.length);}
function handleOnMouseOut(oTr){oTr.className="";position=-1;}
function encode(uri){if (encodeURIComponent){return encodeURIComponent(trim(uri));}if (escape){return escape(trim(uri));}}
function hideSuggestions(){var oScroll=document.getElementById("scroll");oScroll.style.visibility="hidden";}
function selectRange(oText,start,length){if(oText.createTextRange){var oRange=oText.createTextRange();oRange.moveStart("character",start);oRange.moveEnd("character",length-oText.value.length);oRange.select();}else if(oText.setSelectionRange){oText.setSelectionRange(start,length);}oText.focus();}
function autocompleteKeyword(){var oKeyword=document.getElementById("keyword");position=0;deselectAll();document.getElementById("tr0").className="highlightrow";updateKeywordValue(document.getElementById("tr0"));selectRange(oKeyword,httpRequestKeyword.length,oKeyword.value.length);autocompletedKeyword=oKeyword.value;}
function displayError(message){alert("Error accessing the server!"+(debugMode?"\n"+message:""));}

var Events={
	totalEvents: 30,
	eventLimit: 6,
	loadEvents: 6,
	div: null,
	nav: null,
	events: [],

	load: function(){
		this.events=new Array();
		JsHttpRequest.query(
            'ajax.php',{'action':'events','start': this.loadEvents},
            function(result, errors) {
               if (result) {
                  Events.events=result["Events"];
                  Events.show();
               }
            }, true
           );
	},

	show: function(){
		for (var i=0;i<this.events.length;i++) {
        	var line='<div class="tags_date_block"><div class="tags_mon">'+this.events[i].month+'</div><div class="tags_day">'+this.events[i].day+'</div></div>';
			line+='<div class="tags_block">';
			line+='<a href="/s'+this.events[i].id+'.html" class="h3">'+this.events[i].title+'</a>';
			var tags='';
            for (j=0;j<this.events[i].tags.length;j++) {
            	tags+='<a href="/tag/'+this.events[i].tags[j].replace(/\s/g,"_")+'">'+this.events[i].tags[j]+'</a>';
            	if (j!=this.events[i].tags.length-1) tags+=', ';
            }
            if (this.events[i].sub_title) line+='<div>'+this.events[i].sub_title+'</div>';
            if (tags)  line+='<div class="prod_tags"><img src="/i/tag.gif" width="12" height="10" alt="" /> '+tags+'</div>';
			line+='</div>';
			line+='<div style="height:5px;clear:both"><hr style="display:none"/></div>';
			this.div=ge('events');
           	var el=document.createElement('div');
           	el.innerHTML=line;
           	this.div.appendChild(el);
		}
		this.loadEvents+=this.events.length;
		if (this.loadEvents==this.totalEvents) this.nav.style.display="none";
	},

	showNav: function(){
		this.nav=ge('eventsnav');
		var a=document.createElement('a');
		a.href='javascript:Events.load()';
		a.innerHTML='&darr; Показать больше семинаров &darr;';
		this.nav.appendChild(a);
	}
};
