
/**
 * @filename jslint.js
 * @fileoverview Javascript jslint settings.
 */

/**
 * Jslint settings for the Javascript code verification, jslint.com
 */
/*jslint
adsafe: false, bitwise: true, browser: true, cap: false, newcap: false, css: false, 
debug: false, eqeqeq: true, evil: false, forin: false, fragment: true, laxbreak: true, 
nomen: false, on: false, onevar: false, passfail: false, plusplus: true, regexp: true, 
rhino: false, safe: false, sidebar: false, strict: false, sub: false, undef: true, 
white: false, widget: false 
*/

/**
 * SearchBox globals for jslint
 */
/*global */

/**
 * @filename searchbox.js.
 * @fileoverview SearchBox implementation
 */

/**
 * SearchBox API
 */
var SearchBox = {

	dgEBCN: function(className, tag, elm) {
		elm = elm || document;
		var elements = elm.getElementsByClassName(className),
			nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
			returnElements = [],
			current,
			i,
			il;
		for(i=0, il=elements.length; i<il; i+=1){
			current = elements[i];
			if(!nodeName || nodeName.test(current.nodeName)) {
				returnElements.push(current);
			}
		}
		return returnElements;		
	},

	dE: function(className, tag, elm) {
		tag = tag || "*";
		elm = elm || document;
		var classes = className.split(" "),
			classesToCheck = "",
			xhtmlNamespace = "http://www.w3.org/1999/xhtml",
			namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
			returnElements = [],
			elements,
			node,
			j,
			jl;
		for(j=0, jl=classes.length; j<jl; j+=1){
			classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
		}
		try	{
			elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
		}
		catch (e) {
			elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
		}
		while ((node = elements.iterateNext())) {
			returnElements.push(node);
		}
		return returnElements;	
	},

	dF: function(className, tag, elm) {
		tag = tag || "*";
		elm = elm || document;
		var classes = className.split(" "),
			classesToCheck = [],
			elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
			current,
			returnElements = [],
			match,
			k,
			kl,
			l,
			ll,
			m,
			ml;
		for(k=0, kl=classes.length; k<kl; k+=1){
			classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
		}
		for(l=0, ll=elements.length; l<ll; l+=1){
			current = elements[l];
			match = false;
			for(m=0, ml=classesToCheck.length; m<ml; m+=1){
				match = classesToCheck[m].test(current.className);
				if (!match) {
					break;
				}
			}
			if (match) {
				returnElements.push(current);
			}
		}
		return returnElements;
	},

	getElementsByClassName: function(className, tag, elm) {
		if (document.getElementsByClassName) {
			// function dgEBCN
			return SearchBox.dgEBCN(className, tag, elm);
		}
		else if (document.evaluate) {
			// function dE
			return SearchBox.dE(className, tag, elm);
		}
		else {
			// function dF
			return SearchBox.dF(className, tag, elm);
		}
	},

	linksToIframe: function() {
		var searchbox,
			source,
			height,
			links,
			searchboxLength,
			i,
			url,
			site;
		if (SearchBox.getElementsByClassName('e-searchbox').length > 0) {
			// Old solution. May be used by someone.
			searchbox = SearchBox.getElementsByClassName('e-searchbox');
			site = 'eniro';
			url = 'http://www.eniro.se/sokboxar/sokbox.shtml?';
		}
		else if (SearchBox.getElementsByClassName('e-eniro').length > 0) {
			site = 'eniro';
			searchbox = SearchBox.getElementsByClassName('e-eniro');
			url = 'http://www.eniro.se/sokboxar/sokbox.shtml?';
		}
		else if (SearchBox.getElementsByClassName('e-gulesider').length > 0) {
			site = 'gulesider';
			searchbox = SearchBox.getElementsByClassName('e-gulesider');
			url = 'http://www.gulesider.no/sokefelt/sokefelt.shtml?';
		}
		else if (SearchBox.getElementsByClassName('e-krak').length > 0) {
			site = 'krak';
			searchbox = SearchBox.getElementsByClassName('e-krak');
			url = 'http://www.krak.dk/sogeboks/sogeboks.shtml?';
		}
		searchboxLength = searchbox.length;
		for (i = 0; i < searchboxLength; i+=1) {
			searchbox[i].id = 'e-searchbox' + i;
			source = searchbox[i].className.split(' ')[1];
			height = 140;
			if (source === 'e-maps' || source === 'e-web' || site === 'gulesider') {
				height = 100;
			}
			links = SearchBox.getElementsByClassName('e-link', 'a', document.getElementById('e-searchbox' + i));
			if (links.length === 4) {
				searchbox[i].innerHTML = '<iframe frameborder="0" scrolling="no" src="' + url + source + '" allowtransparency="true" height="' + height + '" width="140" title="Sök på Eniro.se"></iframe>';
			}
		}
	},
	initialize: function() {
		SearchBox.linksToIframe();
	}
};
SearchBox.initialize();
