﻿function c(JSZZ,keywork,href,color)
{
//	var ff=document.getElementById('content').innerHTML;
//	ff = ff.replace(JSZZ,'<a style="color:'+color+';" target="_blank" title="'+keywork+'" href="'+href+'">'+keywork+'</a>');
//	document.getElementById('content').innerHTML=ff;
}

window.addEvent = function(elem,evt,handler){
	if(window.addEventListener){ // Mozilla, Netscape, Firefox
		elem.addEventListener(evt, handler, false);
	} else { // IE
		elem.attachEvent('on'+evt, handler);
	}

}

document.getElementsByClassName = function(node, classname)
{
    var a = [];
    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
        if(re.test(els[i].className))a.push(els[i]);
    return a;
}

KeywordExtractor = {

    exact: false,

    style_name: 'keyword',

    complex_mode: true,
	
    onload: false,//onload
	
	overTip: true //false

}




KeywordExtractor.extractHTML = function(html, query) {
    var re = new Array();

    for (var i = 0; i < query.length; i ++) {
        query[i]['kw'] = query[i]['kw'].toLowerCase();
        if (KeywordExtractor.exact)
            re.push('\\b'+query[i]['kw']+'\\b');
        else
            re.push(query[i]['kw']);
    }

    re = new RegExp('('+re.join("|")+')', "gi");

    var subs;
    if (navigator.userAgent.search(/Safari/) >= 0 || !KeywordExtractor.complex_mode) 
    {
        subs = '<span class="'+KeywordExtractor.style_name+'">$1</span>'
    } 
	else
	{

        subs = function(match) {for(var j=0;j < query.length; j ++){
				if(match == query[j]['kw']){
					var word = query[j];
					switch(word.type){
						case 'img':
							return _render_img(word);
						case 'highlight':
							return _render_highlight(word);
						case 'link':
							return _render_link(word);
						case 'linkhighlight':
							return _render_linkhighlight(word);}}}
			  return '<span title="keyword without render">'+match+'</span>';};
    }

    var last = 0;
    var tag = '<';
    var skip = false;
    var skipre = new RegExp('^(script|style|textarea)', 'gi');
    var part = null;
    var result = '';

    while (last >= 0) 
	{
        var pos = html.indexOf(tag, last);
		
        if (pos < 0) {
            part = html.substring(last);
	    last = -1;
        } else {
            part = html.substring(last, pos);
            last = pos+1;
        }
        if (tag == '<') {
            if (!skip)
			{
                part = part.replace(re, subs);
			}
            else
                skip = false;
        } else if (part.match(skipre)) {
            skip = true;
        }
        result += part + (pos < 0 ? '' : tag);
        tag = tag == '<' ? '>' : '<';
    }

   
    return result;
};

//render functions
_render_img = function(w){
	return '<img src="'+w.data.src+'" title="'+w.kw+'" />';
}

_render_highlight = function(w){
	return '<span style="color:'+w.data.color+';">'+w.kw+'</span>';
	//return '<span style="color: '+w.data.color+'; cursor:pointer; text-decoration:underline;">'+w.kw+'</span>';
}

_render_link = function(w){
	return '<a target="_blank" title="'+w.data.href+'" href="'+w.data.href+'">'+w.kw+'</a>';
}

_render_linkhighlight = function(w){
	return '<a style="color:'+w.data.color+';" target="_blank" title="'+w.data.href+'" href="'+w.data.href+'">'+w.kw+'</a>';
}




KeywordExtractor.extractElement = function(elm, query) {
    if (!query)
	return;

    var oldhtml = elm.innerHTML;
	
    var newhtml = KeywordExtractor.extractHTML(oldhtml, query);

    if (oldhtml != newhtml)
        elm.innerHTML = newhtml;
};

KeywordExtractor.showTip = function(evt){
	evt = evt?evt:window.event;
	var elem = evt.target?evt.target:evt.srcElement;
	var kw = elem.innerHTML;
	
	var left = evt.pageX || (evt.clientX +(document.documentElement.scrollLeft || document.body.scrollLeft));
	var top = evt.pageY || (evt.clientY +(document.documentElement.scrollTop || document.body.scrollTop));
	
	var divTip = document.getElementById('keyword_tip');
	divTip.style.left = left+10 + 'px';
	divTip.style.top = top+10 + 'px';
	divTip.innerHTML = '<span style="cursor:pointer;" onclick="KeywordExtractor.hideTip();">X</span><br/><span>content of '+kw+'</span>';
	divTip.style.display = '';
	
}

KeywordExtractor.hideTip = function(){
	var divTip = document.getElementById('keyword_tip');
	divTip.innerHTML = '';
	divTip.style.display = 'none';
}

KeywordExtractor.attachEvent = function(){
	var spans = document.getElementsByClassName(document.body,'keyword');
	for(var i=0;i<spans.length;i++){
		window.addEvent(spans[i],'click',KeywordExtractor.showTip);
	}
	
}

KeywordExtractor.extract = function(elem) {
	var q = KeywordExtractor.keywords;
	var e = null;
	if(elem&&elem!=null){
		KeywordExtractor.extractElement(elem,q);
	}else if (q && (e = document.getElementById('content') )){
			//Hilite.hiliteElement(e, q);
			KeywordExtractor.extractElement(e,q);
			//alert(e.tagName+';'+q);
	}
	
	var divTip = document.createElement('div');
	divTip.id = 'keyword_tip';
	document.body.appendChild(divTip);
	divTip.style.position = 'absolute';
	divTip.style.display = 'none';
	divTip.style.width = '200';
	divTip.style.height = '200';
	
	
	KeywordExtractor.attachEvent();
	
};

// Trigger the extract using the onload handler.
if (KeywordExtractor.onload) {
    if (window.onload) {
		KeywordExtractor._old_onload = window.onload;
		window.onload = function(ev) {
			KeywordExtractor._old_onload(ev);
			KeywordExtractor.extract();
		};
    } else {
		window.onload = KeywordExtractor.extract;
    }
}
