/* ripped from http://www.onlinetools.org/articles/unobtrusivejavascript/cssjsseparation.html */
/*
	a
	    defines the action you want the function to perform.
	o
	    the object in question.
	c1
	    the name of the first class
	c2
	    the name of the second class

	Possible actions are:

	swap
	    replaces class c1 with class c2 in object o.
	add
	    adds class c1 to the object o.
	remove
	    removes class c1 from the object o.
	check
	    test if class c1 is already applied to object o and returns true or false
	toggle
	    test if class c1 is already applied to object o and remove if so, otherwise add class c1
*/
function jscss(a,o,c1,c2)
{
	switch (a)
	{
		case 'swap':
			o.className=!jscss('check',o,c1)?o.className.replace(c2,c1):
			o.className.replace(c1,c2);
			break;
		case 'add':
			if(!jscss('check',o,c1)){o.className+=o.className?' '+c1:c1;}
			break;
		case 'remove':
			var rep=o.className.match(' '+c1)?' '+c1:c1;
			o.className=o.className.replace(rep,'');
			break;
		case 'check':
			return new RegExp('\\b'+c1+'\\b').test(o.className);
			break;
		case 'toggle':
			var operation = 'add';
			if(jscss('check',o,c1))
				operation = 'remove';

			jscss(operation,o,c1,c2);

			return operation;
			break;
	}
	return null;
};

function cssQueryClass(query, classname)
{
	var items = cssQuery(query);

	for(var i=0;i < items.length; i++)
	{
		jscss('add', items[i], classname, '');
	}
};

function addEvent(obj, evType, fn)
{
	if(typeof obj == 'undefined' || !obj)
		return false;

	if (obj.attachEvent)
	{
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	}
	else if (obj.addEventListener)
	{
		obj.addEventListener(evType, fn, false);
		return true;
	}

	return null;
};

function getObj(ev, ob)
{
	if(!ob)
	{
		var targ;
		if (!ev) ev = window.event;

		if (ev.target) targ = ev.target;
		else if (ev.srcElement) targ = ev.srcElement;

		if (targ && targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;

		return targ;
	}
	else
	{
		return ob;
	}
};

function getCookie(sName)
{
	var aCookie = document.cookie.split('; '), i = aCookie.length, aCrumb;
	while (i--)
	{
 		aCrumb = aCookie[i].split('=');
		if (sName == aCrumb[0])
			return typeof aCrumb[1] != 'undefined'? unescape(aCrumb[1]) : null;
	}

	return null;
}

function setCookie(sName, sValue)
{
	document.cookie = sName + '=' + escape(sValue) + '; expires=Fri, 31 Dec 2099 23:59:59 GMT; path=/';
}

// transparantPNG - Based on http://www.schillmania.com/projects/png/ but very much completely rewritten
// Apply a filter in IE to make png's (both images and background-images) transparant
function transparantPNG()
{
	var appVersion = navigator.appVersion.toLowerCase();
	var isIE = navigator.appName.toLowerCase().indexOf('internet explorer')+1 ? 1:0;
	var isWin = appVersion.indexOf('windows')+1 ? 1:0;
	var ver = parseFloat(appVersion.split('msie ')[1]);

	if ((isIE && isWin && ver >= 5.5))
	{
		// Here you can decide which elements to search for png's (you can use * but that will be very slow)
		var elements = cssQuery('.transparantPNG');
		var object;
		var imagesource;

		for (var i=0; i < elements.length; i++)
		{
			object = elements[i];

			if (object.getAttribute('src')) {
				imagesource = object.getAttribute('src');
				object.src = 'transparantPNG.gif';
			} else if (object.currentStyle.backgroundImage.toString() && object.currentStyle.backgroundImage.toString() != "none") {
				var cssBackground = object.currentStyle.backgroundImage.toString();
				var j = cssBackground.indexOf('url("')+5;
				imagesource = cssBackground.substr(j,cssBackground.length-j-2);
				object.style.backgroundImage = 'none';
			} else {
				return false;
			}

			object.style.writingMode = 'lr-tb';
			object.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+imagesource+"',sizingMethod='crop')";
		}
	}
}

function sidebarToggle()
{
	var items = cssQuery('div#related h3');

	for(var i=0;i<items.length;i++)
	{
		addEvent(items[i], 'click', _sidebarToggle);
	}
}

function _sidebarToggle(ev, ob)
{
	var x = getObj(ev, ob);

	while(x.tagName != 'H3')
	{
		x = x.parentNode;
	}

	jscss('swap', x, 'uncollapsed', 'collapsed');
	jscss('swap', x.nextSibling, 'uncollapsed', 'collapsed');
}

function scalePageCreate()
{
	var items = cssQuery('li#text-size span.small, li#text-size span.medium, li#text-size span.large');
	var pageSize = getCookie('PageSize')

	if(pageSize)
	{
		document.body.style.fontSize = pageSize;
	}

	if(items.length == 0)
		return;

	for(var i=0;i<items.length;i++)
	{
		addEvent(items[i], 'click', scalePage);
	}
}

function scalePage(ev, ob)
{
	var x = getObj(ev, ob);

	if(jscss('check', x, 'small', ''))
	{
		document.body.style.fontSize = '0.5em';
		setCookie('PageSize', '0.5em');
	}
	else if(jscss('check', x, 'medium', ''))
	{
		document.body.style.fontSize = '0.7em';
		setCookie('PageSize', '0.7em');
	}
	else if(jscss('check', x, 'large', ''))
	{
		document.body.style.fontSize = '1em';
		setCookie('PageSize', '1em');
	}
}

function fixBrowserIssues()
{
	/* fixes for all IE versions */
	if(navigator.userAgent.indexOf('MSIE') != -1 && navigator.userAgent.indexOf('Opera') == -1)
	{
		cssQueryClass('li:first-child', 'first-child');
		cssQueryClass('li:last-child', 'last-child');
		cssQueryClass('div#blocks > div', 'child');
	}

	/* fixes for IE versions < 7 */
	if(navigator.userAgent.indexOf('MSIE') != -1 && navigator.userAgent.indexOf('Opera') == -1 && navigator.userAgent.indexOf('MSIE 7.0') == -1)
	{
		_positionRibbon();
		addEvent(window, 'resize', _positionRibbon);

		cssQueryClass('div#sidebar > ul, form > ul, div.content-block table td > ul', 'child');
		cssQueryClass('li a[rel=info]', 'rel-info');
		cssQueryClass('li a[rel=map]', 'rel-map');
		cssQueryClass('li a[rel=shop]', 'rel-shop');
		cssQueryClass('a[rel=more]', 'rel-more');
		cssQueryClass('a[rel=add-shopitem]', 'rel-add-shopitem');
		cssQueryClass('a[rel=show-cart]', 'rel-show-cart');
		cssQueryClass('a[rel=shoplink]', 'rel-shoplink');
		cssQueryClass('a[rel=postcard]', 'rel-postcard');
		cssQueryClass('a[rel=guide]', 'rel-guide');
		cssQueryClass('input[type=image]', 'image');
		cssQueryClass('input[type=text], input[type=password]', 'text');

		//document.body.style.display = "none";
		//document.body.style.display = "block";
	}
}

function _positionRibbon()
{
	var ribbon = document.getElementById('eindejaarsactie');

	if(!ribbon)
		return;

	/* set timeout of 100ms to make sure the user has finished resizing */
	setTimeout(function() {
		ribbon.style.left = '-' + document.body.offsetLeft + 'px';
		// ribbon.style.display = 'block';
	}, 100);
};

/* Find all contact forms and hide the div. Add a Event to open/close the div. */
function contactToggleAdd()
{
	var contactForm = document.getElementById('contact-form');
	var contactHeader;

	if(contactForm)
	{
		var div = contactForm;
		var i;
		var hide = true;

		while(div.className != 'content-block' && div.tagName != 'html')
		{
			div = div.parentNode;
		}

		// assign ID to contactform container
		div.id = 'contact-form-container';

		var inputs = contactForm.getElementsByTagName('input');

		for(i=0; i<inputs.length;i++)
		{
			if((inputs[i].value != '' && inputs[i].type != 'checkbox') && inputs[i].className != 'formButton' && inputs[i].className != 'emailformRadioButton' && inputs[i].type != 'hidden')
				hide = false;
		}

		if(hide)
			div.style.display = 'none';
		else
		{
			div.style.display = 'block';
			document.location.hash = div.id;
		}

		contactHeader = div.previousSibling;
		contactHeader.className = 'hideContact';
	}

	addEvent(contactHeader, 'click', _contactToggle);
}

function prefillTextInput()
{
	var items = cssQuery('.prefill');
	for(var i = 0; i < items.length; i++)
	{
		if (navigator.userAgent.indexOf('MSIE') != -1 && navigator.userAgent.indexOf('Opera') == -1 && navigator.userAgent.indexOf('MSIE 8') == -1)
		{
			items[i].value = '';
			jscss('remove', items[i], 'prefill');
		}
		else if (items[i].nodeName == 'INPUT')
		{
			var result = addEvent(items[i], 'click', function () {
				if (jscss('check', items[i], 'prefill'))
				{
					items[i].value = '';
					jscss('remove', items[i], 'prefill');
				}
			});

		}
		else if (items[i].nodeName == 'FORM')
		{
			var removePrefill = function () {
				var subItems = cssQuery('.prefill', items[i]);
				for(var j = 0; j < subItems.length; j++)
				{
					subItems[j].value = '';
					jscss('remove', subItems[j], 'prefill');
				}
			};
			var result = addEvent(items[i], 'click', removePrefill);
			var result = addEvent(items[i], 'submit', removePrefill);
		}
	}
}

function switch_guidefields(elem)
{
	var value = elem.value;
	var items = cssQuery('.field-guide, .field-guidenear, .field-guideroute');
	for(var i = 0; i < items.length; i++)
	{
		jscss('add', items[i], 'hidden');
	}

	var items = cssQuery('.field-' + value);
	for(var i = 0;i < items.length; i++)
	{
		jscss('remove', items[i], 'hidden');
	}
}

function _contactToggle(ev, ob)
{
	var contactForm = document.getElementById('contact-form');

	if(contactForm)
	{
		var div = contactForm;

		while(div.className != 'content-block' && div.tagName != 'html')
			div = div.parentNode;

		if(div.style.display == 'none')
		{
			div.style.display = 'block';
			document.location.hash = div.id;
		}
		else
			div.style.display = 'none';

		jscss('swap', div.previousSibling, 'showContact', 'hideContact');
	}
}

function checkJS()
{
	setCookie('Javascript', 'true');
}

/*
example syntax:

var test =	createDOMNode(	'div', {"class" : 'waa' },
			[
				createDOMNode(	'span', {"class" : 'woei'},
				[
					'snotbeuken'
				]),
				'waa',
				123
			]);
*/
function createDOMNode(tagname, options, children)
{
	var me = document.createElement(tagname), option, child;

	for(option in options)
	{
		if(option == 'event')
		{
			addEvent(me, options[option][0], options[option][1]);
		}
		else
		{
			if (option == 'class')
			{
				me.setAttribute('className', options[option]);
			}

			me.setAttribute(option, options[option]);
		}
	}

	for(var i = 0; (child=children[i]); i++)
	{
		if( in_array(typeof child, ["string", "number"]) )
		{
			child = document.createTextNode(child);
		}
		me.appendChild(child);
	}

	return me;
};

function in_array(needle, haystack)
{
	return (array_search(needle, haystack) !== false);
};

function array_search(needle, haystack)
{
	for(var i = 0; i < haystack.length;i++)
	{
		if(haystack[i] == needle)
		{
			return i;
		}
	}

	return false;
};

var subCartFilled = false;

function leavePage()
{
	if(subCartFilled)
	{
		var message = "Uw bestelling is nog niet toegevoegd aan het winkelmandje, klik op 'Plaats bestelling' om de bestelling toe te voegen.";
		return message;
	}
	window.onbeforeunload = null;
}

function focusPcSearch()
{
	var x = document.getElementById('postcodenlzoekform');

	if(x)
		x.focus();
}

/************************ Make AJAX request ************************/
function makeRequest()
{
	var http_request = false;

	if (window.XMLHttpRequest)
	{ 							/* Mozilla, Safari, ... */
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType)
		{
			http_request.overrideMimeType('text/xml');
		}
	}
	else if (window.ActiveXObject) /* IE */
	{
		try
		{
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				return false;
			}
		}
	}

	if(!http_request)
	{
		return false;
	}
	else
	{
		return http_request;
	}
}

