// Colruyt Recepten Interface Manager
// © 2008 Colruyt
var rc = {};
rc.e=function(id){
	if (typeof(id) != "string") return (id);
	
	if (document.getElementById) return (document.getElementById(id));
	if (document.all) return (document.all[id]);
	
	return(null);
}
rc.addEvent = function(obj, evt, func, bubble){
	try{
	if (obj.addEventListener)
		obj.addEventListener(evt, func, bubble);
	else
		obj.attachEvent('on' + evt, func);
	}catch(e){};
}
rc.isOfClass = function(obj, str){
	if (!obj.className) return(false);
	var classes = obj.className.split(" ");
	for (var i=0; i < classes.length; i++)	if (classes[i] == str) return (true);
	return (false);
}
rc.init = function(){
	rc.e("receptenloader").style.display = "none";
	rc.e("receptinhoud").style.display = "none";
	rc.e("xmlbestand").value = null;
	
	rc.e("printreceptbutton").orighref = rc.e("printreceptbutton").href;
	
	var links = document.getElementsByTagName("a");	
	for(var i=0; i<links.length; i++){
		if (rc.isOfClass( links[i], "xmlrecept") && links[i].href){
			//	link aanpassen zodat'ie de ajax gaat laden, en niet
			//	gewoon de xml;
			links[i]["recept"]=links[i].getAttribute("href");
			links[i].href="javascript:void(0);"; //remove den hyperlink himself
			
			rc.addEvent (links[i], "click", function(target){
				var p = target.srcElement;
				if(p) while (p.tagName.toUpperCase() != "A") p = p.parentNode;
				else p = this;
				rc.loadRecept(p["recept"]);
				return (false);
			});
		}
	}
	
	var url = rc.checkURLforRecept();
	if(url) rc.loadRecept(url);
}
rc.checkURLforRecept = function(fullURL){
	if (window.location.search.length > 0){
		var sarr = window.location.search.replace("?","").replace("#","").split("&");
		for (var i=0; i<sarr.length; i++){
			var params = sarr[i].split("=");
			if(params[0] == "r")
				if(fullURL==true)
					return(params[1]);
				else
					return("xml/"+params[1]+".xml");				
		}
	}
	return("");
}
rc.clearRecept = function(){
	
	var ajaxelements = [ "img", "div", "a" ];
	
	var contents = document.getElementsByTagName("div");
	for (var i=0; i<contents.length; i++){
			try{
				if(contents[i].getAttribute("name") == "ajaxcontent"){
					while(contents[i].childNodes.length > 0){
						contents[i].removeChild(contents[i].firstChild);
					}
				}
			}catch(err){}
	}
		
	/* hide elements... */
	for (var a=0; a < ajaxelements.length; a++){
		var contents = document.getElementsByTagName(ajaxelements[a]);
		for (var i=0; i<contents.length; i++)
			try{
				if(contents[i].getAttribute("name") == "hidecontents"){
					contents[i].style.display = 'none';
				}
			}catch(err){}
	}
		
	/* remove tags... */
	//var contents = document.getElementsByName("ajaxremovetags");
	for (var a=0; a < ajaxelements.length; a++){
		var contents = document.getElementsByTagName(ajaxelements[a]);
		for (var i=0; i<contents.length; i++){
			try{
				if(contents[i].getAttribute("name") == "ajaxremovetags"){
					var tmp = contents[i].getAttribute("tags");
					if(tmp) {
						var tgs = tmp.split(',');
						for (var t=0; t<tgs.length; t++)
						if (contents[i][tgs[t]])
							contents[i][tgs[t]] ="";
					}
				}
			}catch(err){}
		}
	}
}
rc.fixOpmaak=function(itxt){
	/* 
		Joris: replace tabs en newlines 
		1) Verwijder de enclosing tag
		2) Verwijder de leading en trailing linefeeds, as well as de tabs en formfeeds (ASCII)
		3) Verwijder de leading en trailing linefeeds, as well as de tabs en formfeeds (Unicode) // FIX
		4) Replace de overige linefeeds met nen br-tag
	*/
	return(itxt.replace(/^<\S[^><]*>|<\S[^><]*>$/g,"").replace(/^[ \x0D\x0A]+|^[ \x0A]+|^[ \x0D]+|[ \x0D\x0A]+$|[ \x0A]+$|[ \x0D]+$|\x09|\x0C/g,"").replace(/^[ \u000D\u000A]+|^[ \u000A]+|^[ \u000D]+|[ \u000D\u000A]+$|[ \u000A]+$|[ \u000D]+$|\u0009|\u000C/g,"").replace(/\u000D\u000A|\u000A|\x0D\x0A|\x0A/g, "<br/>"));
}
rc.isInLijstje = function(url){
	try{
		if(!url) url = rc.e("xmlbestand").value;
		if(!url) return;
		else {
			if(!rl.lijstje) return;
			for (var i=0; i<rl.lijstje.length; i++)
				if(rl.lijstje[i] == url) return(true);
		}
		return(false);
	}catch(e){}
}
rc.loadRecept = function(url){
	rc.e("xmlbestand").value = null;
	rc.e("receptenloader").style.display = "block";
	rc.e("receptinhoud").style.display = "none";
	
	if(rc.isInLijstje(url))
		try{ rl.setRemove(); }catch(err){}
	else
		try{ rl.setAdd(); }catch(err){}
	
	rc.e("printreceptbutton").href = rc.e("printreceptbutton")["orighref"].replace("?", "?r=" + url + "&");
	rc.clearRecept();

	var onloadbasic = function(){
		rc.e("xmlbestand").value = url;
		rc.e("receptenloader").style.display = "none";
			
		//var xcont = this.req.responseXML; // WERKT NIET?
		var xcont = xml.parseXMLString(this.req.responseText.replace(/encoding="(unicode|utf-8)"/g,""));
		var docroot = xcont.documentElement;
		if(!docroot) docroot = xcont.lastChild;
		
		try{
			rc.updateAllNodes(docroot);
		}finally{
			Effect.BlindDown("receptinhoud");
			try{
				// dit is voor naar het receptje te scrollen !!!!
				// het Effect zelf duurt 1 second, dus na 1 second nog eens scrollen.
				rc.e("receptinhoud").scrollIntoView(false);
				window.setTimeout(function(){rc.e("receptinhoud").scrollIntoView(true);}, 1000);
			}catch(se){}
		}
	};
		
	var tmp = new net.ContentLoader(url, onloadbasic);
}
rc.loadAndPrintRecept = function(url){
	rc.e("receptenloader").style.display = "block";
	rc.e("receptinhoud").style.display = "none";
	rc.clearRecept();

	var onloadbasic = function(){
		rc.e("receptenloader").style.display = "none";
			
		var xcont = xml.parseXMLString(this.req.responseText);
		var docroot = xcont.documentElement;
		if(!docroot) docroot = xcont.lastChild;
		
		try{
			rc.updateAllNodes(docroot);
		}finally{
			rc.e("receptenloader").style.display = "none";
			rc.e("receptinhoud").style.display = "block";
		}
	};	
	var tmp = new net.ContentLoader(url, onloadbasic);
}
rc.updateAllNodes=function(docroot){
	for (var i=0; i<docroot.childNodes.length; i++){
		var xnode = docroot.childNodes[i];
		if(xnode.firstChild){
			if(xnode.innerHTML)
				var itxt = xnode.innerHTML;
			if(xnode.textContent)
				var itxt = xnode.textContent;
			else var itxt = String(xml.toString(xnode));
			
			itxt=rc.fixOpmaak(itxt);
			if(itxt.length > 0)
			if (xnode.getAttribute("attribute")){
				rc.setAttribute (xnode.nodeName, xnode.getAttribute("attribute"), itxt);
			}else if (xnode.getAttribute("attr")){
				rc.setAttribute (xnode.nodeName, xnode.getAttribute("attr"), itxt);
			}else{
				rc.updateContent (xnode.nodeName, itxt);
			}
		}
	}
}
rc.updateContent=function(id, content){
	el = rc.e(id);
	if (el){
		if (el.style.display == "none") el.style.display = "inherit";
		if (el.parentNode.style.display == "none") el.parentNode.style.display = "block";
		el.innerHTML = content;		
	}
}
rc.setAttribute=function(id, attrib, content){
	el = rc.e(id);
	if (el){
		if (el.style.display == "none") el.style.display = "block";
		el[attrib] = content;
	}
}
