var warned = 0; // har  vi varnat anvandaren?

function insertAfter(parent, node, referenceNode) {
	parent.insertBefore(node, referenceNode.nextSibling);
}

function update_breadcrumbs(new_url) {

	if(visited_sites.length>4) {
		visited_sites.shift();
	}
		
	visited_sites.push(new_url);
	ul_visited = document.getElementById('visited'); // links.. ?
	items = ul_visited.getElementsByTagName('li');

	var img_right = document.createElement('img');
	img_right.setAttribute('src','images/right.png');

	if(items.length>4) {
			//alert(document.getElementById('results'));
			new Effect.Highlight(ul_visited.firstChild);
			new Effect.Fade(ul_visited.firstChild);
			window.setTimeout('ul_visited.removeChild(ul_visited.firstChild)', 500);
	}	
	
		
	li= document.createElement('li');
	exec_url = unescape(new_url);		

	var a_ref = createOnclick('a', "feedEater('"+exec_url+"');");

	if (visited_sites.length>1) {
		a_ref.appendChild(img_right);
	}

	a_ref.appendChild(document.createTextNode(exec_url));

	li.appendChild(a_ref);
	ul_visited.appendChild(li);
	new Effect.Appear(li);
	new Effect.Highlight(li);

	
}

function javascript_sucks_replace(ref, new_e, old_e) {
	if (ref.childNodes.length>0) {
		ref.replaceChild(new_e, old_e);
	} else {
		ref.appendChild(new_e);
	}
}

//Effect.Grow(this);

function createOnclick(e_type, dothis) {
				if (ie) {		// whoa, this only took me like 2-4 hours to solve. i hope billg is fckin proud.
					ref = document.createElement(e_type);
					ref.setAttribute('href','javascript:void(0);');
					ref.onclick = function() { eval(dothis); }
				} else {
					ref = document.createElement(e_type); 
					ref.setAttribute('onclick',dothis);
				}	
				return ref;
}


function create_expandable_span(content,span_name,stick_to_div, e_extra) {
	var text_span_ref = document.createElement('span');	
	//alert(span_name);
	text_span_ref.setAttribute('id',span_name);
	
	var extra_ref = document.getElementById(e_extra);
	//alert(e_extra + ' => ' + extra_ref);
	if (content.length>255) {
		var short_text = content.substr(0,255) + '... ';
		var extra_text = content.substr(255,content.length-255);
		
		//var text_a_more = createOnclick('a', "wtf();");
		var text_a_more = document.createElement('a');
		text_a_more.appendChild(document.createTextNode('More'));
		var img_right = document.createElement('img');
		img_right.setAttribute('src','images/right.png');
		text_a_more.appendChild(img_right);		
		text_a_more.setAttribute('href','javascript:void(0);');
		
		var text_a_less = document.createElement('a');
		var img_left = document.createElement('img');
		img_left.setAttribute('src','images/left.png');
		text_a_less.appendChild(img_left);				
		text_a_less.appendChild(document.createTextNode('Less'));
		text_a_less.setAttribute('href','javascript:void(0);');
		
		text_a_less.onclick = function() { // forstorsa
			var span_more = document.getElementById(span_name);
			span_more.replaceChild(text_a_more, span_more.lastChild);
			new Effect.SlideUp(extra_ref);
		}
		

		text_a_more.onclick = function() { // forminska
			span_more = document.getElementById(span_name); 
			span_more.replaceChild(text_a_less, span_more.lastChild);
			new Effect.SlideDown(extra_ref);
			
		};
		
		//alert(short_text);
		text_span_ref.appendChild(document.createTextNode(short_text));
		text_span_ref.appendChild(text_a_more);
		
		tmp_span = document.createElement('span');
		tmp_span.setAttribute('id',e_extra+'-span');
		tmp_span.appendChild(document.createTextNode(extra_text));
		
		//alert(e_extra);
		//alert(extra_ref.childNodes[0]);
		//alert(text_span_ref.id);
		//alert(document.getElementById(e_extra+'-span'));
		extra_ref.replaceChild(tmp_span, document.getElementById(e_extra+'-span'));
		//alert('test');
		new Effect.Fade(tmp_span, {duration: 0});
		
	} else {
	//alert(content);
		text_span_ref.appendChild(document.createTextNode(content + ' ')); // space for the less.
	}
	
	var ref_text=document.getElementById(stick_to_div);
	javascript_sucks_replace(ref_text, text_span_ref, ref_text.childNodes[0]);
	
}

function linkUpdater(site) {
	// uppdatera lankarna / items
	ol_links = document.getElementById('links-ol'); // links.. ?
	ol_links_extra = document.getElementById('links-ol-extra'); // words
	
	items = ol_links.getElementsByTagName('li');
	items_extra = ol_links_extra.getElementsByTagName('li');


	while(items.length>0) {
			ol_links.removeChild(ol_links.firstChild);
	}
	
	while(items_extra.length>0) {
			ol_links_extra.removeChild(ol_links_extra.firstChild);
	}	
	
	ref_links = site.getElementsByTagName('link');
	
	var links_max = ref_links.length>10 ? 10 : ref_links.length;
	for (var i = 0; i < links_max; i++) {
				li = document.createElement('li');
				exec_url = unescape(ref_links[i].getAttribute('url'));
				var a_ref = createOnclick('a', "feedEater('"+exec_url+"');");
				
				var link_anchor = ref_links[i].childNodes[0].nodeValue;
				
				link_anchor = (typeof(link_anchor)=='string') ? link_anchor : 'Error';
				
				if (link_anchor.length>35) { 
					link_anchor = link_anchor.substr(0,35) + '... '; 
				}
				a_ref.appendChild(document.createTextNode(link_anchor));
				a_ref.setAttribute('href','javascript:void(0);');
				a_ref.setAttribute('title',unescape(ref_links[i].getAttribute('url')));
								
				li.appendChild(a_ref);
				ol_links.appendChild(li);
		}
		
	for (var i = links_max; i < ref_links.length; i++) {
				li = document.createElement('li');
				exec_url = unescape(ref_links[i].getAttribute('url'));
				var a_ref = createOnclick('a', "feedEater('"+exec_url+"');");
				
				var link_anchor = ref_links[i].childNodes[0].nodeValue;
				link_anchor = (typeof(link_anchor)=='string') ? link_anchor : 'Error';
				if (link_anchor.length>35) { 
					link_anchor = link_anchor.substr(0,35) + '... '; 
				}
				a_ref.appendChild(document.createTextNode(link_anchor));
				a_ref.setAttribute('href','javascript:void(0);');
				a_ref.setAttribute('title',unescape(ref_links[i].getAttribute('url')));
								
				li.appendChild(a_ref);
				ol_links_extra.appendChild(li);
		}
		

	var links_expander = document.getElementById('links-expander');
	if(links_max<ref_links.length) {

			
			var links_more_a = document.createElement('a');
			links_more_a.appendChild(document.createTextNode('More'));
			var img_right = document.createElement('img');
			img_right.setAttribute('src','images/right.png');
			links_more_a.appendChild(img_right);
						
			links_more_a.setAttribute('href','javascript:void(0);');
			

			var links_less_a = document.createElement('a');

			var img_left = document.createElement('img');
			img_left.setAttribute('src','images/left.png');
			links_less_a.appendChild(img_left);
						
			links_less_a.appendChild(document.createTextNode('Less'));
			links_less_a.setAttribute('href','javascript:void(0);');
			
			links_less_a.onclick = function() { // forminska
				links_expander.replaceChild(links_more_a, links_expander.firstChild);
				new Effect.SlideUp(document.getElementById('links-extra'));
			}

			links_more_a.onclick = function() { // forstorsa
				links_expander.replaceChild(links_less_a, links_expander.firstChild);
				if (ie) {
					new Effect.Appear(document.getElementById('links-extra'));
				} else {
					new Effect.SlideDown(document.getElementById('links-extra'));
				}
			}
			
			
			if (links_expander.hasChildNodes()) {
				links_expander.replaceChild(links_more_a, links_expander.firstChild);
				//new Effect.SlideUp(document.getElementById('links-extra'));
				//links_expander.style.display = 'none';
				links_expander.style.display = 'block';
			} else {
				links_expander.appendChild(links_more_a);
				links_expander.style.display = 'block';
			}	
	} else {
				links_expander.style.display = 'none';
	}
		
		//alert('ie sucks 3');
			
}

/*
n-div: start of div-name (words/stats)
*/
function wordUpdater(n_div, site, e_xml) {

	// uppdatera orden
	ul_words = document.getElementById(n_div+'-ul'); // words
	//alert(document.getElementById('words-').);
	ul_words_extra = document.getElementById(n_div+'-ul-extra'); // words
	items = ul_words.getElementsByTagName('li');
	items_extra = ul_words_extra.getElementsByTagName('li');
	
	//alert('ie sucks 5');
	while(items.length>0) {
			ul_words.removeChild(ul_words.firstChild);
	}

	while(items_extra.length>0) {
			ul_words_extra.removeChild(ul_words_extra.firstChild);
	}

	ref_words = site.getElementsByTagName(e_xml);
	//alert(site.length);
	//ref_words = site;//.getElementsByTagName('word');
	var words_max = ref_words.length>10 ? 10 : ref_words.length;
	for (var i = 0; i < words_max; i++) {
		li = document.createElement('li');
		li.appendChild(document.createTextNode(ref_words[i].getAttribute('freq') + ' ' + ref_words[i].childNodes[0].nodeValue));	
		ul_words.appendChild(li);
	}
	
	for (var i = words_max; i < ref_words.length; i++) {
		li = document.createElement('li');
		li.appendChild(document.createTextNode(ref_words[i].getAttribute('freq') + ' ' + ref_words[i].childNodes[0].nodeValue));	
		ul_words_extra.appendChild(li);		
	}

	var words_expander = document.getElementById(n_div+'-expander');	
	if(words_max<ref_words.length) {

			
			var words_more_a = document.createElement('a');
			words_more_a.appendChild(document.createTextNode('More'));
			var img_right = document.createElement('img');
			img_right.setAttribute('src','images/right.png');
			words_more_a.appendChild(img_right);
			words_more_a.setAttribute('href','javascript:void(0);');
			

			var words_less_a = document.createElement('a');
			var img_left = document.createElement('img');
			img_left.setAttribute('src','images/left.png');
			words_less_a.appendChild(img_left);
			words_less_a.appendChild(document.createTextNode('Less'));
			words_less_a.setAttribute('href','javascript:void(0);');
			
			words_less_a.onclick = function() { // forminska
				words_expander.replaceChild(words_more_a, words_expander.firstChild);
				new Effect.SlideUp(document.getElementById(n_div+'-extra'));
			}

			words_more_a.onclick = function() { // forstorsa
				words_expander.replaceChild(words_less_a, words_expander.firstChild);

				if (ie) {
					new Effect.Appear(document.getElementById(n_div+'-extra'));
				} else {
					new Effect.SlideDown(document.getElementById(n_div+'-extra'));
				}
			}
			
			
			if (words_expander.hasChildNodes()) {
				words_expander.replaceChild(words_more_a, words_expander.firstChild);
				words_expander.style.display = 'block';
			} else {
				words_expander.appendChild(words_more_a);
				words_expander.style.display = 'block';
			}	
	} else {
				words_expander.style.display = 'none';
	}	
}




function divUpdater(n_div, data) {

	//alert(n_div,data);
	
	/* 
		stoppa in 0..255 i keywords
		255- i keywords-extra
		länk i keywords-expander
	*/
	
	var normal_ref = document.getElementById(n_div);
	var extra_ref = document.getElementById(n_div+'-extra');
	var expander_ref = document.getElementById(n_div+'-expander');
	
	
	if (normal_ref.hasChildNodes()) {
		//alert(normal_ref.firstChild);
		normal_ref.removeChild(normal_ref.firstChild);
	}
	
	if (extra_ref.hasChildNodes()) {
		extra_ref.removeChild(extra_ref.firstChild);
	}
	
	var tmp_p = document.createElement('p');
	tmp_p.appendChild(document.createTextNode(data.length>0 ? data.substr(0,255) : ''));

//	alert(n_div + ' '+ normal_ref);
	normal_ref.appendChild(tmp_p);

	if (data.length>255) {
			var tmp_p = document.createElement('p');
			tmp_p.appendChild(document.createTextNode(data.substr(255,data.length-255)));
			extra_ref.appendChild(tmp_p);
			var more_a = document.createElement('a');
			more_a.appendChild(document.createTextNode('More'));
			var img_right = document.createElement('img');
			img_right.setAttribute('src','images/right.png');
			more_a.appendChild(img_right);
			more_a.setAttribute('href','javascript:void(0);');
			

			var less_a = document.createElement('a');
			var img_left = document.createElement('img');
			img_left.setAttribute('src','images/left.png');
			less_a.appendChild(img_left);
			less_a.appendChild(document.createTextNode('Less'));
			less_a.setAttribute('href','javascript:void(0);');
			
			less_a.onclick = function() { // forminska
				expander_ref.replaceChild(more_a, expander_ref.firstChild);
				new Effect.SlideUp(extra_ref);
			}

			more_a.onclick = function() { // forstorsa
				expander_ref.replaceChild(less_a, expander_ref.firstChild);
				//alert();

				if (ie) {
					new Effect.Appear(extra_ref);
				} else {
					new Effect.SlideDown(extra_ref);
				}

				//new Effect.SlideDown(extra_ref);
			}
			
			
			if (expander_ref.hasChildNodes()) {
				expander_ref.replaceChild(more_a, expander_ref.firstChild);
				expander_ref.style.display = 'block';
			} else {
				expander_ref.appendChild(more_a);
				expander_ref.style.display = 'block';
			}	
	}	else {
				expander_ref.style.display = 'none';
				//alert('gömmer');
	}	

}

function updatePage(fetch_url, feed) {
	update_breadcrumbs(fetch_url);

	//alert('ie sucks 0.1');	


// uppdatera filesize


	var e_ref = document.getElementById('filesize');
	//alert(rank.getElementsByTagName('rank')[0].childNodes[0].nodeValue);
	e_ref.replaceChild(
		document.createTextNode(' ' + feed.getElementsByTagName('site')[0].getAttribute('filesize') + 'b'),
		e_ref.childNodes[1]
	);

	e_ref.setAttribute('href',feed.getElementsByTagName('site')[0].getAttribute('url'));



// resultat.. ?

	var ref_results=document.getElementById('results');
	ref_results.style.display='block';

	var site = feed.getElementsByTagName('site')[0];
	//alert('ie sucks 0.5');	
	
	
	// skriv ut url
	var url_data = site.getAttribute('url');
	var ref_url=document.getElementById('url');
	javascript_sucks_replace(ref_url, document.createTextNode(url_data), ref_url.childNodes[0]);

	// andra url i sokfalt
	var the_url = document.getElementById('the_url');
	the_url.value = url_data;
	//skriv ut desc

	var desc_data = site.getElementsByTagName('description')[0].childNodes[0].nodeValue;
	var ref_description=document.getElementById('description-div');
	var description_p = document.createElement('p');
	description_p.appendChild(document.createTextNode(desc_data));
	javascript_sucks_replace(ref_description, description_p, ref_description.childNodes[0]);
	
	
	//alert('ie sucks 1.0');
	// skriv ut title
	var title_data = site.getElementsByTagName('title')[0].childNodes[0].nodeValue;
	//alert('ie sucks 1.1 ' + title_data);
	//alert('ie sucks 1.2');
	var ref_title=document.getElementById('title');
	javascript_sucks_replace(ref_title, document.createTextNode(title_data), ref_title.childNodes[0]);

	//alert('ie sucks 1.5');
	// skriv ut text (content)
	
	
	/*
	text_data = site.getElementsByTagName('text')[0].childNodes[0].nodeValue;
	create_expandable_span(text_data, 'span_text_more','text','text-extra');
	*/
	text_data = site.getElementsByTagName('text')[0].childNodes[0].nodeValue;
	divUpdater('text',text_data);
	
	
	// skriv ut keywords 
	keyword_data = site.getElementsByTagName('keywords')[0].childNodes[0].nodeValue;
	divUpdater('keywords-div',keyword_data);
	
	/*
	keyword_data = site.getElementsByTagName('keywords')[0].childNodes[0].nodeValue;
	//alert(keyword_data);
	create_expandable_span(keyword_data, 'span_keywords_more', 'keywords', 'keywords-extra');
	*/

	
	//alert('ie sucks 2');
	

	// links
	linkUpdater(site);


  // links
	wordUpdater('words',site,'word');
	
	// stats
	wordUpdater('stats',site,'stat');	
}


function updateRank(e_id, rank) {

	
	var e_ref = document.getElementById(e_id);
	//e_ref.removeChild($('img_'+e_id));
	//alert(rank.getElementsByTagName('rank')[0].childNodes[0].nodeValue);
	e_ref.replaceChild(
		document.createTextNode(' ' + rank.getElementsByTagName('rank')[0].childNodes[0].nodeValue),
		e_ref.childNodes[1]
	);

	e_ref.setAttribute('href',rank.getElementsByTagName('rank')[0].getAttribute('url'));
	
}


function showLoading(e_id) {
 	imga = document.createElement('img');
 	imga.setAttribute('src','images/indicator_tiny_red.gif');
 	imga.setAttribute('id','img_' + e_id);
 	imga.style.margin = '0px 0px 0px 5px;';
 	//function insertAfter(parent, node, referenceNode) {
 	//alert();
 	$(e_id).replaceChild(imga,$(e_id).childNodes[1]);
 	//$(e_id).appendChild(imga);
 	
 	return true;
}

function feedEater(fetch_url) { // yez children, this function eats small kids.

	
	var reg = new RegExp("http://");
	if ( !fetch_url.match( reg )) {
		fetch_url = 'http://' + fetch_url;
	}
	
	if(visited_sites[visited_sites.length-1]==fetch_url) {  // no need to repeat ourselfs
		if (warned==0) {
			warned = 1;
			alert('This URL is already loaded on page!'); 
		}
		
		return false; 
	} 
	warned = 0; // reset warned-flag.

	feed_url = 'result.php?url=' + fetch_url;	
	try {
		ajax_obj_page = ajaxac_createXMLHttp();
		ajax_obj_page.open('get', feed_url);

		xmlhttpsuccess_page = function() { updatePage(fetch_url, ajax_obj_page.responseXML); }
		onreadychange_page = function(){
                                if (ajax_obj_page.readyState == 4 && ajax_obj_page.status == 200 && xmlhttpsuccess_page) {
                                    xmlhttpsuccess_page();
                               } }
		ajax_obj_page.onreadystatechange = onreadychange_page;
		ajax_obj_page.send(null);
  } catch (e) { alert('Problem creating XML-request. Please upgrade your browser.') }
                        

	feed_url = 'pagerank.php?url=' + fetch_url;	
	try {
		showLoading('google');
		ajax_obj_pagerank = ajaxac_createXMLHttp();
		ajax_obj_pagerank.open('get', feed_url);

		xmlhttpsuccess_pagerank = function() { updateRank('google', ajax_obj_pagerank.responseXML); }
		onreadychange_pagerank = function(){
                                if (ajax_obj_pagerank.readyState == 4 && ajax_obj_pagerank.status == 200 && xmlhttpsuccess_pagerank) {
                                    xmlhttpsuccess_pagerank();
                               } }
		ajax_obj_pagerank.onreadystatechange = onreadychange_pagerank;
		ajax_obj_pagerank.send(null);
  } catch (e) { alert('Problem creating XML-request. Please upgrade your browser.') }

	feed_url = 'alexa.php?url=' + fetch_url;	
	try {
		showLoading('alexa');
		ajax_obj_alexa = ajaxac_createXMLHttp();
		ajax_obj_alexa.open('get', feed_url);

		xmlhttpsuccess_alexa = function() { updateRank('alexa', ajax_obj_alexa.responseXML); }
		onreadychange_alexa = function(){
                                if (ajax_obj_alexa.readyState == 4 && ajax_obj_alexa.status == 200 && xmlhttpsuccess_alexa) {
                                    xmlhttpsuccess_alexa();
                               } }
		ajax_obj_alexa.onreadystatechange = onreadychange_alexa;
		ajax_obj_alexa.send(null);
  } catch (e) { alert('Problem creating XML-request. Please upgrade your browser.') }  	
  	

/* links in */
	feed_url = 'links.php?url=' + fetch_url;	
	try {
		showLoading('links');
		ajax_obj_links = ajaxac_createXMLHttp();
		ajax_obj_links.open('get', feed_url);

		xmlhttpsuccess_links = function() { updateRank('links', ajax_obj_links.responseXML); }
		onreadychange_links = function(){
                                if (ajax_obj_links.readyState == 4 && ajax_obj_links.status == 200 && xmlhttpsuccess_links) {
                                    xmlhttpsuccess_links();
                               } }
		ajax_obj_links.onreadystatechange = onreadychange_links;
		ajax_obj_links.send(null);
  } catch (e) { alert('Problem creating XML-request. Please upgrade your browser.') }  	
  	



	return false; // always return false. because thats.. way cool and stuff.
}