
/*
	IE heeft andere opacity mode
*/
function isIE() {
	var browser = navigator.appName;
	if (browser == "Microsoft Internet Explorer") {
		return true;
	};
	return false;
}

//////////////////////////////////////////////////////////////////
// Popups
//////////////////////////////////////////////////////////////////
function window_popup(url,name,scrollbar,booReturn) {
	var width = 950;
	var height = 680;
	if(scrollbar == "" || scrollbar == null) scrollbar = false;
	win_defaults = 'status=no,scrollbars='+(scrollbar ? 'yes' : 'no')+',menubar=no,top='+(screen.availHeight-height)/2+',left='+(screen.availWidth-(width))/2+',width='+width+',height='+height+',dependent=yes,resizable=no,modal=yes';
	activepopup=window.open(url,name,win_defaults);
	activepopup.focus();
	if (booReturn) return activepopup;
}
function message_popup(url,name,width,height,scrollbar) {
	var width = width?width:550;
	var height = height?height:400;
	var scrollbar = scrollbar?scrollbar:"no";
	win_defaults = 'status=no,scrollbars='+scrollbar+',menubar=no,top='+(screen.availHeight-height)/2+',left='+(screen.availWidth-(width))/2+',width='+width+',height='+height+',dependent=yes,resizable=no,modal=yes';
	var activepopup=window.open(url,name,win_defaults);
	activepopup.focus();
}

//////////////////////////////////////////////////////////////////
// XML Functies
//////////////////////////////////////////////////////////////////


function get_xmldoc() {
	var xmldoc = false;
	if (document.implementation && document.implementation.createDocument) {
		xmldoc = document.implementation.createDocument("", "", null);
	} else if (window.ActiveXObject) {
		xmldoc = new ActiveXObject("Microsoft.XMLDOM");
	}
	return xmldoc;
}

/*
* Maakt een client-side xmldoc van een xml-string
*/
function xmldoc_from_string(xml) {
	var xmldoc = get_xmldoc();
	
	// xml string proberen te laden...
	try {
		xmldoc.loadXML(xml);
	} catch(e) {
		xmldoc = (new DOMParser()).parseFromString(xml, "text/xml");
	}

	return xmldoc;
}

// Create the xml getter for Mozilla
if (window.DOMParser &&
	window.XMLSerializer &&
	window.Node && Node.prototype && Node.prototype.__defineGetter__) {
	Document.prototype.__defineGetter__("xml", function () {
		return (new XMLSerializer()).serializeToString(this);
	});
}

function selectNodes(aExpr, aNode) {
	if (window.ActiveXObject) {
		return aNode.selectNodes( aExpr );
	} else {
		var xpe = new XPathEvaluator();
		var nsResolver = xpe.createNSResolver(  aNode.ownerDocument ? aNode.ownerDocument.documentElement : aNode.documentElement );
		var result = xpe.evaluate(aExpr, aNode, nsResolver, 0, null);
		var found = [];
		while (res = result.iterateNext()) { found.push(res); }
		return found;
	}
}

function selectSingleNode(aExpr, aNode) {
	if (window.ActiveXObject) {
		return aNode.selectSingleNode(aExpr);
	} else {
		var xpe = new XPathEvaluator();
		var nsResolver = xpe.createNSResolver(  aNode.ownerDocument ? aNode.ownerDocument.documentElement : aNode.documentElement );
		var result = xpe.evaluate(aExpr, aNode, nsResolver, 0, null);
		return result.iterateNext();
	}
}

// function..: Retreive an Attribute Nodevalue
// Input.....: ElementNode, strAttributeName
// Output....: String / "" if node = null;
// Created by: Michiel In 't Velt
function GetNodeValue(ElementNode, strAttributeName, strValueIfEmpty) {
    if (ElementNode!=null) {
		if (strAttributeName && strAttributeName!="") {
	        return selectSingleNode("@"+strAttributeName,ElementNode)!=null?selectSingleNode("@"+strAttributeName,ElementNode).nodeValue:(strValueIfEmpty==null?"":strValueIfEmpty);
		} else {
			var strNodeValue = ElementNode.nodeValue;
			if (strNodeValue==null && ElementNode.childNodes[0] && ElementNode.childNodes[0].data) strNodeValue = ElementNode.childNodes[0].data;
			if (strNodeValue==null) strNodeValue="";
			return strNodeValue;
		}
	} else {
        return (strValueIfEmpty==null?"":strValueIfEmpty);
	}
}

// function..: Retreive the text of a Node
// Input.....: ElementNode
// Output....: String / "" if node = null;
// Created by: Michiel In 't Velt
// 2 september 2005
function GetNodeText(ElementNode, strValueIfEmpty) {
    if (ElementNode!=null) return ElementNode.text;	else return (strValueIfEmpty==null?"":strValueIfEmpty);
}


// function..: Set an Attribute NodeValue for a node
// Input.....: ElementNode=node to use, strAttributeName = name of the attribute
//				strValue=value to set
// Output....: True if successful : otherwise the false
// Created by: Michiel In 't Velt
function SetNodeValue(ElementNode, strAttributeName, strValue) {
	if (ElementNode == null || strValue == null)
		return false;
	else if (strAttributeName && strAttributeName != "") {
		var tmpNewAttr = selectSingleNode("@"+strAttributeName,ElementNode);
		if (!tmpNewAttr) {
			ElementNode.attributes.setNamedItem(ElementNode.ownerDocument.createAttribute(strAttributeName));
			tmpNewAttr = selectSingleNode("@"+strAttributeName,ElementNode);
		}
		tmpNewAttr.nodeValue=strValue;
		return true;
	} else {
		if (ElementNode.nodeValue!=null) {
			ElementNode.nodeValue=strValue;
		} else if (ElementNode.text!=null) {
			ElementNode.text=strValue;
		} else {
			if (ElementNode.childNodes.length==0) {
				ElementNode.appendChild(bind_XMLdoc.createTextNode(strValue));
			}
			ElementNode.childNodes[0].data=strValue;
		}
	}
}

function SetNodeText(ElementNode, TargetNodeName, strValue) {
	var target = selectSingleNode(TargetNodeName,ElementNode);
	if (target) {
		SetNodeValue(target,false,strValue);
	} else {
		var od = ElementNode.ownerDocument;
		SetNodeValue(ElementNode.appendChild(od.createElement(TargetNodeName)),false,strValue);
	}
}	


function getXMLHttpRequest() {
	var req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) {
    	try {
			req = new XMLHttpRequest();
            if (req.overrideMimeType) {
                    req.overrideMimeType('text/xml');
            }
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
    return req;
}

function SendXMLRequest(strURL, strRequest, XMLdoc) {
	if (strRequest) {
		try {
			var XMLRequest = get_xmldoc();
			XMLRequest.loadXML(strRequest);
		} catch(e) {
			var XMLRequest = (new DOMParser()).parseFromString(strRequest, "text/xml");
		}
	} else if (XMLdoc) {
		var XMLRequest = XMLdoc
	} else {
		var XMLRequest = null;
	}

	var xmlhttp = new getXMLHttpRequest();
	xmlhttp.open("POST", strURL, false);
	xmlhttp.send(XMLRequest);
	if (!xmlhttp.responseXML) {
		return (new DOMParser()).parseFromString(xmlhttp.responseText, "text/xml");
	} else  {
		return xmlhttp.responseXML;
	}
}

/**
 * Deze functie voert een HTTP post actie uit m.b.v. een XML HTTP Request
 * SYNCHROON
 * TEST-functie!
 * Rick: bugix: 2006-05-29: Nu gaat deze functie ook correct om met verschillende encodings!    
 */
function SendHttpRequestPostSync( url, postdata, expectedRootNode, displayTextInDebugDivId )
{
	if (!expectedRootNode) {expectedRootNode='root'}

	// Obtain an XMLHttpRequest instance
	var req = new getXMLHttpRequest();

	// Open an HTTP POST connection to the shopping cart servlet.
	// Third parameter specifies request is asynchronous.
	//alert('httprequest:'+postdata);
	req.open("POST", url, false);

	// Specify that the body of the request contains form data
	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
	req.setRequestHeader("Charset", "UTF-8");


	// Send form encoded data stating that I want to add the
	// specified item to the cart.
	req.send( postdata );

	if( displayTextInDebugDivId )
	{
		document.getElementById( displayTextInDebugDivId ).innerHTML = "textnode";
		document.getElementById( displayTextInDebugDivId ).firstChild.nodeValue = req.responseText;
		//document.getElementById( displayTextInDebugDivId ).innerHTML =
		//	"<u><b>SendHttpRequestPostSync(</b> " + url+",'"+postdata+"','"+expectedRootNode+"'<b>)</b></u><br />" +
		//			req.responseText;
				//document.getElementById( displayTextInDebugDivId ).innerHTML;
	}

	// http errrs status start at 400
	if (req.status >= 400) {
//		alert("Fout bij laden document: " + req.statusText + "-" + req.responseText );
		if( !displayTextInDebugDivId )
		{
			var w = window.open('','_blank');
			w.document.write(req.responseText );
			w.focus();
		}
		return false
	} else {
		/* WERKT NIET IS IE ONLY:
		// copy to Sarissa document from a HttpRequest object
		var outDoc = Sarissa.getDomDocument();
		outDoc.validateOnParse = false;
		outDoc.async = true;
		if( !outDoc.loadXML(String(req.responseText) ) )
		{
//			alert( "Ongeldige XML:" + req.responseText );
			var w = window.open('','_blank');
			w.document.write(req.responseText );
			w.focus();
		}
		*/
		try {
			var outDoc = get_xmldoc();
			if (!req.responseXML)
			{
				outDoc.loadXML(req.responseText);
			}
			else
			{
				outDoc = req.responseXML;
			}
		} catch(e) {
			var outDoc = (new DOMParser()).parseFromString(req.responseText, "text/xml")
		}
		if( outDoc== null || (selectSingleNode("/"+expectedRootNode,outDoc) == null ) ) // outDoc.selectSingleNode("/"+expectedRootNode) == null )
		{
//			alert( "Ongeldige XML:" + req.responseText );
			if( !displayTextInDebugDivId )
			{
				var w = window.open('','_blank');
				w.document.write(req.responseText );
				w.focus();
				return null;	// PARSE ERROR in Gecko based browser
			}
			return false;
		}
		return outDoc;
	}


	/*
	return req;
	if (!req.responseXML) {
		return (new DOMParser()).parseFromString(req.responseText, "text/xml");
	} else  {
		return req.responseXML;
	}
	*/
}

/**
 * Deze functie geeft de huidige datum terug in YYYYMMHH formaat voor gebruik in XML
 */
 
function Date2XML(d) {
  if (!d) var now = new Date(); else var now=d;
  var strDate = "";
  
  strDate = now.getFullYear() + "";
  strDate += (((now.getMonth()+1)<10) ? "0" : "") + (now.getMonth()+1);
  strDate += ((now.getDate()<10) ? "0" : "") + now.getDate();
  return strDate;  
}

/**
*
* Javascript trim, ltrim, rtrim
* http://www.webtoolkit.info/
*
*
**/

function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
