var sTitles = {
	xCord : 0,
	yCord : 0,
	tipElements : ['acronym'],
	obj : Object,
	tip : Object,
	active : 0,

	opendic : function(){
		var ii = sTitles.obj.getAttribute('tip');

		if(document.location.toString().indexOf('/dictionary/') != -1){
			show3(ii);
		} else {
			document.location = '/dictionary/' + ii + '/';
		}
	},
	updateXY : function(e) {
		if ( document.captureEvents ) {
			sTitles.xCord = e.pageX;
			sTitles.yCord = e.pageY;
		} else if ( window.event.clientX ) {
			sTitles.xCord = window.event.clientX+document.documentElement.scrollLeft;
			sTitles.yCord = window.event.clientY+document.documentElement.scrollTop;
		}
	},
	tipOut: function() {
		if ( window.tID ) {
			clearTimeout(tID);
		}
		if ( window.opacityID ) {
			clearTimeout(opacityID);
		}
		sTitles.tip.style.visibility = 'hidden';
	},
	checkNode : function() {
		var trueObj = this.obj;
		if ( this.tipElements.inArray(trueObj.nodeName.toLowerCase()) ) {
			return trueObj;
		} else {
			return trueObj.parentNode;
		}
	},
	tipOver : function(e) {
		sTitles.obj = this;
		tID = window.setTimeout("sTitles.tipShow()",300);
		sTitles.updateXY(e);
	},
	tipShow : function() {
		var scrX = Number(this.xCord);
		var scrY = Number(this.yCord);
		var tp = parseInt(scrY+15);
		var lt = parseInt(scrX+10);
		var anch = this.checkNode();
		var addy = '';
		var access = '';
		if ( anch.nodeName.toLowerCase() == 'a' ) {
			addy = (anch.href.length > 25 ? anch.href.toString().substring(0,25)+"..." : anch.href);
			var access = ( anch.accessKey ? ' <span>['+anch.accessKey+']</span> ' : '' );
		} else {
			addy = anch.firstChild.nodeValue;
		}
		this.tip.innerHTML = "<p>"+descs[anch.getAttribute('tip')]+"<em>"+access+aux[anch.getAttribute('tip')]+"</em></p>";
		if ( parseInt(document.documentElement.clientWidth+document.documentElement.scrollLeft) < parseInt(this.tip.offsetWidth+lt) ) {
			this.tip.style.left = parseInt(lt-(this.tip.offsetWidth+10))+'px';
		} else {
			this.tip.style.left = lt+'px';
		}
		if ( parseInt(document.documentElement.clientHeight+document.documentElement.scrollTop) < parseInt(this.tip.offsetHeight+tp) ) {
			this.tip.style.top = parseInt(tp-(this.tip.offsetHeight+10))+'px';
		} else {
			this.tip.style.top = tp+'px';
		}
		this.tip.style.visibility = 'visible';
		this.tip.style.opacity = '.1';
		this.tipFade(10);
	},
	tipFade: function(opac) {
		var passed = parseInt(opac);
		var newOpac = parseInt(passed+10);
		if ( newOpac < 100 ) {
			this.tip.style.opacity = '.'+newOpac;
			this.tip.style.filter = "alpha(opacity:"+newOpac+")";
			opacityID = window.setTimeout("sTitles.tipFade('"+newOpac+"')",20);
		}
		else {
			this.tip.style.opacity = '1';
			this.tip.style.filter = "alpha(opacity:100)";
		}
	}
};

Highl = {
    elementid: 'wrds',
    exact: true,
    max_nodes: 70,
    onload: true,
    style_name: 'searchword',
    style_name_suffix: false,
    debug_referrer: '',
    skipClassRE: /title_a|title_b/
};
var x,y;

Highl.HighlElement = function(elm, query) {
    if (!query || elm.childNodes.length == 0)
	return;

    var qre = new Array();

    for (word in query) {
         if (Highl.exact)
            qre.push("(^|[ :;,\\.\ \-\\)\\(]+)(" + word + ")($|[ :;,\\.\\-\\)\\(]+)");
        else
            qre.push('()(' + word  + ')()');
    }

    qre = new RegExp(qre.join("|"), "mi");

	retest = new RegExp("^[ :;,\\.\\-\\)\\(]+$");

    var textproc = function(node) {
        var match = qre.exec(node.data);

        if (match) {
			var val = match[0];

			var v1 = '';
			var v2 = '';
			var ii;

			for(var i = 1; i < match.length; i++){

				if(match[i]){
					if(retest.test(match[i])){
						v1 = match[i];
					} else {
						v2 = match[i];
						ii = words[v2.toLowerCase()];

						break;
					}
				}
			}

            var node2 = node.splitText(match.index + v1.length);
            var node3 = node2.splitText(v2.length);

            var span = node.ownerDocument.createElement('acronym');
            node.parentNode.replaceChild(span, node2);
            span.className = Highl.style_name;
            if(!descs[ii]) descs[ii] = 'краткое описание пока отсутствует';

			addEvent(span,'mouseover',sTitles.tipOver);
			addEvent(span,'mouseout',sTitles.tipOut);
			addEvent(span,'click', sTitles.opendic);

			span.setAttribute('tip',ii);
			//span.setAttribute('ii',ii]);

            span.appendChild(node2);

            return span;
        } else {
            return node;
        }
    };

    Highl.walkElements(elm.childNodes[0], 1, textproc);
};


Highl.walkElements = function(node, depth, textproc) {

    var skipre = /^(script|style|textarea|input)/i;
    var count = 0;
    while (node && depth > 0) {

        count ++;
        if (count >= Highl.max_nodes) {
            var handler = function() {
                Highl.walkElements(node, depth, textproc);
            };
            setTimeout(handler, 50);
            return;
        }

        if (node.nodeType == 1) { // ELEMENT_NODE
            if (!skipre.test(node.tagName) && node.childNodes.length > 0) {
                node = node.childNodes[0];
                depth ++;
                continue;
            }
        } else if (node.nodeType == 3) { // TEXT_NODE

        	if(!Highl.skipClassRE.test(node.parentNode.className))
            	node = textproc(node);
        }

        if (node.nextSibling) {
            node = node.nextSibling;
        } else {
            while (depth > 0) {
                node = node.parentNode;
                depth --;
                if (node.nextSibling) {
                    node = node.nextSibling;
                    break;
                }
            }
        }
    }
};

Highl.Highl = function(){
	if (!document.getElementById || !document.createElement || !document.getElementsByTagName){
		return;
	}

	hID = document.getElementById(Highl.elementid);

	sTitles.tip = document.createElement('div');
	sTitles.tip.id = 'toolTip';
	hID.appendChild(sTitles.tip);

	sTitles.tip.style.top = '0';
	sTitles.tip.style.visibility = 'hidden';

	Highl.HighlElement(hID, words);

};

// Trigger the highlight using the onload handler.
if (Highl.onload) {
	addEvent(window, 'load', Highl.Highl);
}
addEvent(window,'unload',EventCache.flush);