/**
* @version		$Id: global_nl.js 2008-03-15 marco meijeringh $
* @package		Joomla
* @copyright	Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/

// Event test for routes view
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

function addLoadListener(fn)
{
  if (typeof window.addEventListener != 'undefined')
  {
    window.addEventListener('load', fn, false);
  }
  else if (typeof document.addEventListener != 'undefined')
  {
    document.addEventListener('load', fn, false);
  }
  else if (typeof window.attachEvent != 'undefined')
  {
    window.attachEvent('onload', fn);
  }
  else
  {
    var oldfn = window.onload;
    if (typeof window.onload != 'function')
    {
      window.onload = fn;
    }
    else
    {
      window.onload = function()
      {
        oldfn();
        fn();
      };
    }
  }
}
function attachEventListener(target, eventType, functionRef, capture)
{
  if (typeof target.addEventListener != "undefined")
  {
    target.addEventListener(eventType, functionRef, capture);
  }
  else if (typeof target.attachEvent != "undefined")
  {
    var functionString = eventType + functionRef;
    target["e" + functionString] = functionRef;
    
    target[functionString] = function(event)
    {
      if(typeof event == "undefined"){event = window.event}; target["e" + functionString](event);
    };
    
    target.attachEvent("on" + eventType, target[functionString]);
  }
  else
  {
    eventType = "on" + eventType;

    if (typeof target[eventType] == "function")
    {
      var oldListener = target[eventType];

      target[eventType] = function()
      {
        oldListener();

        return functionRef();
      }
    }
    else
    {
      target[eventType] = functionRef;
    }
  }

  return true;
}

function detachEventListener(target, eventType, functionRef, capture)
{
  if (typeof target.removeEventListener != "undefined")
  {
    target.removeEventListener(eventType, functionRef, capture)
  }
  else if (typeof target.detachEvent != "undefined")
  {
    var functionString = eventType + functionRef;

    target.detachEvent("on" + eventType, target[functionString]);

    target["e" + functionString] = null;
    target[functionString] = null;
  }
  else
  {
    target["on" + eventType] = null;
  }

  return true;
}

function stopDefaultAction(event)
{
  event.returnValue = false;

  if (typeof event.preventDefault != "undefined")
  {
    event.preventDefault();
  }

  return true; 
}

function addMapControls() {
//window.addEvent('domready', function() {
	// insert xmlns:v for Google Maps Polylines in html tag
	if (!document.getElementsByTagName) return false;
	var htmlelements = document.getElementsByTagName("html");
	for (var i=0; i<htmlelements.length;i++) {
		var htmlelem = htmlelements[i];
		htmlelem.setAttribute("xmlns:v","urn:schemas-microsoft-com:vml");
	}

	// insert onload and onunload functions in body
	if (!document.getElementsByTagName) return false;
	var bodyelements = document.getElementsByTagName("body");
	for (var i=0; i<bodyelements.length;i++) {
		var elem = bodyelements[i];
		elem.setAttribute("onunload","GUnload()");
	}

	// insert map in document if css enabled
	var mapdiv = document.createElement("div");
	mapdiv.setAttribute("id","map");
	var routediv = document.getElementById("route");
	routediv.appendChild(mapdiv);

	var style = retrieveComputedStyle(mapdiv,"width");
	if (style == "550px" || style == "552px") {	
		var mapmsgdiv = document.createElement("div");
		mapmsgdiv.setAttribute("id","map_msg");
		var mapmsg = document.getElementById("map");
		mapmsg.appendChild(mapmsgdiv);
		GLoad();
	} else {
		routediv.removeChild(mapdiv);
	}
	
	// insert route informatie
	var routeviewlink = getQueryVariable("view");

	// insert accommodatie informatie
	var accoviewlink = getQueryVariable("view");
	if (accoviewlink == "accommodatie" || routeviewlink == "accommodaties") {
		var aleftdiv = document.getElementById("navigationblocks");

		var a_infodiv = document.createElement("div");
		a_infodiv.setAttribute("id","routeinfo");
		a_infodiv.setAttribute("class","moduletable");
	
		a_infodiv_h2 = document.createElement("h2");
		a_infodiv_h2_txt = document.createTextNode("Accommodaties");
		a_infodiv_h2.appendChild(a_infodiv_h2_txt);
		a_infodiv.appendChild(a_infodiv_h2);
	
		var a_searchdiv = document.createElement("div");
		a_searchdiv.setAttribute("id","gm_accommodaties");
		a_searchdiv.setAttribute("class","google_maps_sidebar");
		a_searchdiv_txt = document.createTextNode("Geen accommodaties gevonden");
		a_searchdiv.appendChild(a_searchdiv_txt);
		a_infodiv.appendChild(a_searchdiv);
	
		a_bezien_h3 = document.createElement("h3");
		a_bezien_h3_txt = document.createTextNode("Bezienswaardigheden");
		a_bezien_h3.appendChild(a_bezien_h3_txt);
		a_infodiv.appendChild(a_bezien_h3);
		
		var a_beziendiv = document.createElement("div");
		a_beziendiv.setAttribute("id","gm_bezienswaardigheden");
		a_beziendiv.setAttribute("class","google_maps_sidebar_search");
		a_beziendiv_txt = document.createTextNode("Geen bezienswaardigheden gevonden");
		a_beziendiv.appendChild(a_beziendiv_txt);
		a_infodiv.appendChild(a_beziendiv);
		
		aleftdiv.appendChild(a_infodiv);
	}
}

function retrieveComputedStyle(element, styleProperty) {
	var computedStyle = null;
	if (typeof element.currentStyle != "undefined") {
		computedStyle = element.currentStyle;
	} else {
		computedStyle = document.defaultView.getComputedStyle(element,null);
	}
	
	return computedStyle[styleProperty];
}

//Query variable
function getQueryVariable(variable) { 
	var query = window.location.search.substring(1); 
	var vars = query.split("&"); 
	for (var i=0;i<vars.length;i++) { 
		var pair = vars[i].split("="); 
		if (pair[0] == variable) { 
			return pair[1]; 
		} 
	} 
} 

//Query variable
function getQueryVariableURL(url, variable) { 
	var query = url; 
	var vars = query.split("&"); 
	for (var i=0;i<vars.length;i++) { 
		var pair = vars[i].split("="); 
		if (pair[0] == variable) { 
			return pair[1]; 
		} 
	} 
} 

// function to remove all children from element
function clearContentsFromElement(parentelement) { 
	if(!document.getElementById) return false;
	if(!document.hasChildNodes) return false;
	if (!document.getElementById(parentelement)) return false;
	var element = document.getElementById(parentelement);
	if (!element.hasChildNodes()) return false;
	// remove all children from element
	while (element.firstChild) {
	  element.removeChild(element.firstChild);
	}
}

function html_entity_decode(str) {
	// develop alternative with regular expressions
	str = str.replace(/&nbsp;/g," ");
	str = str.replace(/&agrave;/g,"a");
	str = str.replace(/&aacute;/g,"a");
	str = str.replace(/&acirc;/g,"a");
	str = str.replace(/&atilde;/g,"a");
	str = str.replace(/&auml;/g,"a");
	str = str.replace(/&aring;/g,"a");
	str = str.replace(/&egrave;/g,"e");
	str = str.replace(/&eacute;/g,"e");
	str = str.replace(/&ecirc;/g,"e");
	str = str.replace(/&euml;/g,"e");
	str = str.replace(/&igrave;/g,"i");
	str = str.replace(/&iacute;/g,"i");
	str = str.replace(/&icirc;/g,"i");
	str = str.replace(/&iuml;/g,"i");
	str = str.replace(/&ntilde;/g,"n");
	str = str.replace(/&ograve;/g,"o");
	str = str.replace(/&oacute;/g,"o");
	str = str.replace(/&ocirc;/g,"o");
	str = str.replace(/&otilde;/g,"o");
	str = str.replace(/&ouml;/g,"o");
	str = str.replace(/&ugrave;/g,"u");
	str = str.replace(/&uacute;/g,"u");
	str = str.replace(/&ucirc;/g,"u");
	str = str.replace(/&uuml;/g,"u");
	str = str.replace(/&yacute;/g,"y");
	str = str.replace(/&yuml;/g,"y");
	str = str.replace(/&quot;/g,"\"");
	str = str.replace(/&amp;/g,"&");
	str = str.replace(/&lt;/g,"<");
	str = str.replace(/&gt;/g,">");
	str = str.replace(/&ndash;/g,"-");
	str = str.replace(/&mdash;/g,"-");
	str = str.replace(/&lsquo;/g,"");
	str = str.replace(/&rsquo;/g,"");
	str = str.replace(/&sbquo;/g,"");
	str = str.replace(/&ldquo;/g,"\"");
	str = str.replace(/&rdquo;/g,"\"");
	str = str.replace(/&bdquo;/g,"\"");
	str = str.replace(/&lsaquo;/g,"<");
	str = str.replace(/&rsaquo;/g,">");
	return str;
}	

// ConvertHTML2DOM function
// element	- the DOM element where the HTML will be loaded
// HTML		- the string of valid HTML code
// clearfirst	- if false, existing child nodes of the element will be retained
function ConvertHTML2DOM(element, HTML, clearfirst) {

	// load the HTML as XML
	function Load(xmlString) {
		var xml;
		if (typeof DOMParser != "undefined") xml = (new DOMParser()).parseFromString(xmlString, "application/xml");
		else {
			var ieDOM = ["MSXML2.DOMDocument", "MSXML.DOMDocument", "Microsoft.XMLDOM"];
			for (var i = 0; i < ieDOM.length && !xml; i++) {
				try { xml = new ActiveXObject(ieDOM[i]); xml.loadXML(xmlString); }
				catch(e) {}
			}
		}
		return xml;
	}

	// recursively copy the XML into the DOM
	function Copy(domNode, xmlDoc, level) {

		if (typeof level == "undefined") level = 1;
		if (level > 1) {

			if (xmlDoc.nodeType == 1) {

				// element node
				var thisNode = document.createElement(xmlDoc.nodeName);

				// attributes
				for (var a = 0, attr = xmlDoc.attributes.length; a < attr; a++) {
					var aName = xmlDoc.attributes[a].name, aValue = xmlDoc.attributes[a].value, evt = (aName.substr(0,2) == "on");
					if (!evt) {
						switch (aName) {
							case "class": thisNode.className = aValue; break;
							case "for": thisNode.htmlFor = aValue; break;
							default: thisNode.setAttribute(aName, aValue);
						}
					}
				}

				// append node
				domNode = domNode.appendChild(thisNode);

				// attach event
				if (evt) domNode[aName] = function() { eval(aValue); };
			}
			else if (xmlDoc.nodeType == 3) {
				// text node
				var text = (xmlDoc.nodeValue ? xmlDoc.nodeValue : "");
				var test = text.replace(/^\s*|\s*$/g, "");
				if (test.indexOf("<!--") != 0 && test.indexOf("-->") != (test.length - 3)) domNode.appendChild(document.createTextNode(text));
			}
		}

		// do child nodes
		for (var i = 0, j = xmlDoc.childNodes.length; i < j; i++) Copy(domNode, xmlDoc.childNodes[i], level+1);
	}

	// load the XML and copies to DOM
	HTML = "<root>"+HTML+"</root>";
	var xmlDoc = Load(HTML);
	if (element && xmlDoc) {
		if (clearfirst != false) while (element.lastChild) element.removeChild(element.lastChild);
		Copy(element, xmlDoc.documentElement);
	}
}

addLoadEvent(addMapControls);