/*
 * $Id: w3proxy.js 21 2009-08-05 09:10:40Z arne $
 *
 * @author Arne-Wigand Baganz
 * @since 14-07-2009
 * @copyright W3 Solutions GmbH
 */
var W3OutputDiv = "w3output";
var W3MaxHits = 5;
var W3Page = 1;
var W3SiteSearch = {
	show : function() {
		document.getElementById(W3OutputDiv).style.display = 'block';
	},

	close : function() {
		document.getElementById(W3OutputDiv).style.display = 'none';
	},

	buildHtml : function(json) {
		var hitsOnPage = 0; // default
		if (json.searchresult['hits'] != 0) { // got hits
			hitsOnPage = json.searchresult['resultset']['result'].length; // currentPage
			if (hitsOnPage == null) {
				hitsOnPage = 1;
			}
		}
		var html = "<div id='search_container'><div id='search_results'>";
		html += "<div id='closeResults'><a href='#' onclick='W3SiteSearch.close();'> &times; </a></div>";
		html += "<h3>W3SiteSearch";
		if (hitsOnPage > 0) {
			html += " Ergebnisse " + (parseInt(json.searchresult['start']) + 1)
					+ " - "
					+ (parseInt(json.searchresult['start']) + hitsOnPage);
		}
		html += "</h3>";
		html += "<h1>" + json.searchresult['hits'] + " Treffer in "
				+ json.searchresult['time'] + " sek. gefunden.</h1>";

		var suggestLen = 0;
		try {
			suggestLen = json.searchresult['suggest']['word'].length; // ['word']
			if (json.searchresult['suggest']['word'] instanceof Array == false) { // only
				// one
				// result
				suggestLen = 1;
			}
		} catch (err) {
		}

		if (suggestLen > 0) {
			html += "<strong>Meinten Sie:</strong>";
			if (suggestLen == 1) {
				html += W3SiteSearch
						.renderSuggestion(json.searchresult['suggest']['word']);
			} else {
				for ( var i = 0; i < suggestLen; i++) {
					if (i > 0) {
						html += " &middot;"
					}
					html += W3SiteSearch
							.renderSuggestion(json.searchresult['suggest']['word'][i]);
				}
			}
			html += "<br/><br/>";
		}

		if (json.searchresult['hits'] > 1 && hitsOnPage != 1) {
			/*
			 * for each(var result in json.searchresult['resultset']['result']){ //
			 * {for each} works currently only in firefox! html +=
			 * W3SiteSearch.renderHit(result); }
			 */
			for ( var i = 0; i < hitsOnPage; i++) { // 
				html += W3SiteSearch
						.renderHit(json.searchresult['resultset']['result'][i]);
				if (i == W3MaxHits) {
					break;
				}
			}
		} else if (json.searchresult['hits'] == 1 || hitsOnPage == 1) { // just
			// one
			// hit
			// at
			// all
			// OR
			// one
			// last
			// page
			html += W3SiteSearch
					.renderHit(json.searchresult['resultset']['result']);
		} else { // no hit
			html += "Ihre Suche nach <em>" + json.searchresult['search']
					+ "</em> hat leider keine Ergebnisse geliefert.";
			return html;
		}

		if (W3Page > 1) { // back button
			var prevUrl = "javascript:W3SiteSearch.getNextPage(" + (W3Page - 1)
					+ ");";
			html += "<a href='" + prevUrl
					+ "' target='_top'>&lt;&lt; zur&uuml;ck</a> &middot;";
		}
		html += " Seite " + W3Page + " ";

		// if (json.searchresult['hits'] - json.searchresult['count'] > 0) { //
		// has more result pages
		if (json.searchresult['hits'] - json.searchresult['start']
				- json.searchresult['count'] > 0) { // has more result pages
			var nextUrl = json.searchresult['nextPage']; // get it from JSON
			nextUrl = "javascript:W3SiteSearch.getNextPage(" + (W3Page + 1)
					+ ");";
			html += "&middot; <a href='" + nextUrl
					+ "' target='_top'>weiter &gt;&gt;</a>";
		}

		html += "</div></div>";

		return html;
	},

	renderHit : function(result) {
		var html = "";

		html += "<strong><a href='" + result['url'] + "'>" + result['title']
				+ "</a></strong><br/>";
		html += "<span class='search_desc'>"
				+ result['abstract'].substring(0, 128) + "</span><br/>";
		html += "<span class='small gruen'>" + result['url'] + "</span><br/>";
		html += "<span class='small'>Datum: " + result['date'];
		if (result['size'] > 0) {
			html += "&middot; Gr&ouml;&szlig;e: " + result['size'] + " Bytes";
		}
		html += "</span><br/><br/>";

		return html;
	},

	renderSuggestion : function(word) {
		var html = "";

		html += " <a href='javascript: W3SiteSearch.search(\"" + word
				+ "\");'>" + word + "</a>";

		return html;
	},

	init : function() {
		var error = "";
		try { // get form values
			var id = document.w3Form.id.value;
			var key = document.w3Form.key.value;
			var bool = document.w3Form.verknuepfung.value;
			var search = escape(document.w3Form.searchtext.value);
		} catch (err) {
			error = err;
			document.getElementById("w3output").innerHTML = "Fehler: Bitte &uuml;berpr&uuml;fen Sie Ihren W3 SiteSearch Code!";
		}

		//id = 1; // XXX to be removed (for testing only)
		//key = "36322481c6e8474015c560ae94851767"; // XXX to be removed (for testing only)

		if (error == "") {
			/*var url = "http://localhost/search/service/json?id=1&key=36322481c6e8474015c560ae94851767&searchtext="
					+ search + "&wrap=1&page=" + W3Page;*/
			var url = "http://www.w3sitesearch.de/service/json?id=" + id
					+ "&key=" + key + "&searchtext=" + search + "&wrap=1&page="
					+ W3Page;
			
			/*
			 * append our javascript dynamically
			 */
			var head = document.getElementsByTagName("head").item(0);
			var script = document.createElement("script");
			script.src = url;
			script.setAttribute("type", "text/javascript");
			script.setAttribute("charset", "utf-8");
			head.appendChild(script);
		}
	},

	populate : function(json) {
		document.getElementById(W3OutputDiv).innerHTML = W3SiteSearch
				.buildHtml(json);
		W3SiteSearch.show();
	},

	getNextPage : function(page) {
		W3Page = page;
		W3SiteSearch.init();
	},

	load : function() { // load first page
		W3Page = 1;
		W3SiteSearch.init();
	},

	search : function(term) { // execute a new search
		document.w3Form.searchtext.value = term;
		W3SiteSearch.load();
	}
}