/* EMBEDHELPER - Copyright (c) 2009 James Padolsey - http://github.com/jamespadolsey/embedHelper/tree/master */
var embedHelper=(function(){var a=(function(){var b=document.getElementsByTagName("script");return b[b.length-1]})();return{getConfig:function(g){var b=a.innerHTML,d={},c=Array.prototype.slice.call(arguments);try{d=(new Function("return "+b.replace(/\n|\r/g,"")))()}catch(f){}c.push(d);return this.merge.apply(this,c)},merge:function(g,f){if(typeof g!=="object"){g={}}for(var e in f){if(!f.hasOwnProperty||f.hasOwnProperty(e)){var b=f[e];if(typeof b==="object"){g[e]=this.merge(g[e],b);continue}g[e]=b}}for(var d=2,c=arguments.length;d<c;d++){this.merge(g,arguments[d])}return g},getQueryParams:function(){var g=a.src,c,d,f,e={},b=Array.prototype.slice.call(arguments);if(g.indexOf("?")>-1){c=g.split("?")[1].split("&");d=c.length;while(d--){f=c[d].split("=");e[f[0]]=f[1]}}b.push(e);return this.merge.apply(this,b)},insert:function(e){if(e.nodeName&&!e.length){return a.parentNode.insertBefore(e,a)}if(typeof e==="string"){var c=document.createElement("div");c.innerHTML=e;e=c.childNodes}for(var d=0,b=e.length||0;d<b;++d){this.insert(e[d])}return this},scriptRef:a}})();

/* Object Sorter */
var tfObjSort={init:function(){Array.prototype.objSort=function(){tfObjSort.setThings(this);var a=arguments;var x=tfObjSort;x.a=[];x.d=[];for(var i=0;i<a.length;i++){if(typeof a[i]=="string"){x.a.push(a[i]);x.d.push(1)};if(a[i]===-1){x.d[x.d.length-1]=-1}}return this.sort(tfObjSort.sorter)};Array.prototype.strSort=function(){tfObjSort.setThings(this);return this.sort(tfObjSort.charSorter)}},sorter:function(x,y){var a=tfObjSort.a;var d=tfObjSort.d;var r=0;for(var i=0;i<a.length;i++){if(typeof x+typeof y!="objectobject"){return typeof x=="object"?-1:1}var m=x[a[i]];var n=y[a[i]];var t=typeof m+typeof n;if(t=="booleanboolean"){m*=-1;n*=-1}else if(t.split("string").join("").split("number").join("")!=""){continue};r=m-n;if(isNaN(r)){r=tfObjSort.charSorter(m,n)};if(r!=0){return r*d[i]}}return r},charSorter:function(x,y){if(tfObjSort.ignoreCase){x=x.toLowerCase();y=y.toLowerCase()};var s=tfObjSort.chars;if(!s){return x>y?1:x<y?-1:0}x=x.split("");y=y.split("");l=x.length>y.length?y.length:x.length;var p=0;for(var i=0;i<l;i++){p=s.indexOf(x[i])-s.indexOf(y[i]);if(p!=0){break}}if(p==0){p=x.length-y.length};return p},setThings:function(x){this.ignoreCase=x.sortIgnoreCase;var s=x.sortCharOrder;if(!s){this.chars=false;return true};if(!s.sort){s=s.split(",")};var a="";for(var i=1;i<1024;i++){a+=String.fromCharCode(i)};for(var i=0;i<s.length;i++){z=s[i].split("");var m=z[0];var n=z[1];var o="";if(z[2]=="_"){o=n+m}else{o=m+n};a=a.split(m).join("").split(n).join(o)};this.chars=a}};tfObjSort.init();

/* Cookie helper */
var Cookie=function(name){if(typeof arguments[1]=='string'){if(arguments[2]){var date=new Date();date.setTime(date.getTime()+(arguments[2]*24*60*60*1000));var expires="; expires="+date.toGMTString()}else var expires="";document.cookie=name+"="+arguments[1]+expires+"; path=/"}else if(arguments[1]===false){Cookie(name,'',-1)}else{var nameEQ=name+"=";var ca=document.cookie.split(';');for(var i=0;i<ca.length;i++){var c=ca[i];while(c.charAt(0)==' ')c=c.substring(1,c.length);if(c.indexOf(nameEQ)==0)return c.substring(nameEQ.length,c.length)}return null}};

/* Url helper */
var url_helper={qs:false,get:function(key){var qs=this.qs;if(qs===false){qs={};q=window.location+'';q=q.split('?');if(q[1]){$.each(q[1].split('&'),function(i,value){v=value.split('=');qs[v[0]]=v[1]});this.qs=qs}}if(qs[key])return qs[key];return false}};

/* HORIZON SEARCH WIDGET */
var horizon_widget = {
	host:			'http://www.horizontraining.nl/',
	//host:			'http://horizon/',
	expander_width:	700
};

(function(){
	
	var horizon_widget = window.horizon_widget;
	
	var search_assets_url = horizon_widget.host + 'widget/';
	var widget_host = horizon_widget.host + 'widget/widget.php';
	
	//google analytics tracker
	var ga_tracker, ga_tracker_ID = 'UA-4091634-2';
	function ga_track(action, label, value) {
		if(!ga_tracker) {
			if(window.pageTracker && window.pageTracker._getAccount() == ga_tracker_ID) {
				ga_tracker = window.pageTracker;
			} else {
				if(!window._gat) {
					$.ajaxSetup({async: false});
					$.getScript((("https:" == document.location.protocol) ? 'https://ssl.' : 'http://www.') + 'google-analytics.com/ga.js');
					$.ajaxSetup({async: true});
				}
				gt = window._gat || false;
				if(gt && gt._getTracker) ga_tracker = gt._getTracker(ga_tracker_ID);
			}
		}
		
		if(ga_tracker) ga_tracker._trackEvent('widget', action, label);
	}
	
	var $time = Date.now || function(){
		return +new Date;
	};
	
	var ie6 = $.browser.msie && $.browser.version == '6.0';
	var ie7 = $.browser.msie && $.browser.version == '7.0';
	var search_data, search_is_closed, search_ext, search_ext_width, search_current_sort;
	var search_cached_result = {}, current_active, change_go_link, last_request = false;
	var search_colors = {
		1:	'green',
		2:	'cyan',
		3:	'blue'
	};
	
	var options = embedHelper.getConfig({
		container:		false,
		expander_width:	horizon_widget.expander_width
	});
	if(!options.container) return;
		
	if(!window.jQuery) {
		var e = document.createElement("script");
		e.src = search_assets_url + 'jquery.js';
		e.type = 'text/javascript';
		e.onreadystatechange = function() {
			if (this.readyState == 'loaded' || this.readyState == 'complete') {
				search_start();
			}
		};
		e.onload = function() {
			search_start();
		};
		document.getElementsByTagName('head')[0].appendChild(e);
	} else {
		search_start();
	}
	
	var actions = {
		show:	function(a) {
			if(search_is_closed) search_show_panel();
		},
		close:	function() {
			if(!search_is_closed) search_show_panel();
		}
	};
	
	function search_start() {
		
		$(document).ready(function(){
			
			search_ext_width = options.expander_width;
			
			css = document.createElement('link');
			css.setAttribute('rel', 'stylesheet');
			css.setAttribute('type', 'text/css');
			css.setAttribute('href', search_assets_url + 'widget.css');
			document.getElementsByTagName('head')[0].appendChild(css);
			
			div = $('<div/>').attr('id','horizon-widget').appendTo($('#' + options.container)).html('<h3 id="widgettitle"><img src="' + search_assets_url + 'search_logo.jpg" alt="logo" class="logo" />Trainingswijzer 2010</h3>');
			//if(div.height() > 600) div.css('height',600);
			$('#widgettitle').click(function() { search_show_panel(); } );
			
			form = $('<form/>').attr('id','horizon-widget-form').html('<div class="search-box"><input type="text" class="search-box-input" /><input type="submit" class="search-box-btn" value="zoeken" /></div>').appendTo(div);
			ul = $('<ul/>').appendTo(div);
			if(ie6) ul.css('margin-top', 50);
			div.append('<div class="horizon-widget-pre-legend">Het carrièreprogramma:</div>');
			legend = $('<ol/>').html('<li class="horizon-widget-legend-l1"><span></span> &lt; 3 jaar ervaring in het vak</li><li class="horizon-widget-legend-l2"><span></span> 3-8 jaar ervaring in het vak</li><li class="horizon-widget-legend-l3"><span></span> &gt; 8 jaar ervaring in het vak</li>').attr('id', 'horizon-widget-legend').appendTo(div);
			div.append('<div class="horizon-widget-post-legend"><a href="http://' + window.location.host + '/horizon-t-o/carriereprogramma">Meer informatie</a></div>');
			div.append('<div id="preloader" class="preloader"><img src="' + search_assets_url + 'search_loader.gif" alt="preloader" /></div>');
			
			legend.click(function() {
				window.location = 'http://' + window.location.host + '/horizon-t-o/carriereprogramma';
			});
			
			//sort links
			//ext = $('<div/>').attr('id','ext').html('<div id="btn"></div><div class="top"><a class="sort" href="#" rel="views">Meest bekeken</a><a class="sort active" href="#" rel="level">Niveau</a><a class="sort" href="#" rel="price">Prijs</a><a href="#" rel="date" class="sort">Datum</a><a href="#" id="horizon-widget-go">Voeg geselecteerde trainingen toe aan leertraject</a></div><div id="all"></div><div id="smooth"></div>').appendTo(div);
			
			//add-to-cart links
			//ext = $('<div/>').attr('id','ext').html('<div id="btn"></div><div class="top"><a href="#" class="horizon-widget-go">Voeg geselecteerde trainingen toe aan leertraject</a></div><div id="all"></div><div class="bottom"><a href="#" class="horizon-widget-go">Voeg geselecteerde trainingen toe aan leertraject</a></div><div id="smooth"></div>').appendTo(div);
			
			ext = $('<div/>').attr('id','ext').html('<div id="btn"></div><div class="top"><div class="fase1">Fase 1</div><div class="fase2">Fase 2</div><div class="fase3">Fase 3</div></div><div id="all"></div><div class="bottom"></div><div id="smooth"></div>').appendTo(div);
			//ext.setAttribute('onmouseover', 'alert('!')');
			search_load_filters(widget_host + '?do=get_filters');
			
			search_ext = $('#horizon-widget #ext > *').not($('#horizon-widget #ext #btn, #horizon-widget #ext #smooth')).hide();
			search_is_closed = true;
			
			$('.horizon-widget-go').click(function(e) {
				e.preventDefault();
				e.stopPropagation();
				
				if(current_active == 'all') {
					current_active = [];
					for(var i in search_data) {
						current_active.push(search_data[i].id);
					}
				}
				t_page = change_go_link ? '' : 'save_tr=ja&';
				url = horizon_widget.host +'direct-inschrijven/?' + t_page + 'c=' + current_active.join(',');
				window.location = url;
			});
			
			$('#horizon-widget #ext .top a').click(function() {
				$(this).addClass('active');
				$(this).siblings().removeClass('active');
				search_current_sort = $(this).attr('rel');
				search_get_boxes();
				return false;
			});
			
			$('#horizon-widget #ext #btn').click(function() { search_show_panel(); } ).mouseenter(function() {
				$('#horizon-widget #ext #btn, #horizon-widget #ext, #horizon-widget #ext #smooth').addClass('hover');
			}).mouseleave(function() {
				$('#horizon-widget #ext #btn, #horizon-widget #ext, #horizon-widget #ext #smooth').removeClass('hover');
			});
			$('#horizon-widget-form').submit(function() {
				search_is_closed ? search_show_panel() : search_filter_data();
				return false;
			});
			
		});
	}
	
	function get_selected_filters() {
		var filters = {};
		var val = $('#horizon-widget-form .search-box .search-box-input').val();
		if(val.length > 0) filters.keyword = val;
		
		change_go_link = false;
		$('#horizon-widget ul li.search-list ul li input').each(function() {
			if($(this).attr('checked')) {
				if($(this).attr('value') == '3') change_go_link = true;
				filters[$(this).attr('name')] = $(this).attr('value');
			}
		});
		
		$('.horizon-widget-go').text(change_go_link ? 'Direct inschrijven' : 'Voeg geselecteerde trainingen toe aan leertraject');
		
		filters = jQuery.param(filters);
		return filters;
	}
	
	function search_filter_data() {
		//if(last_request !== false && $time() - last_request < 50) return;
		filters = get_selected_filters();
		Cookie('horizon_widget_filters',filters);
		if(filters == '' || filters == 'keyword=') {
			$('#horizon-widget #ext #all a').fadeTo(500, 1);
			current_active = 'all';
			return;
		}
		
		var q = $('#horizon-widget-form .search-box .search-box-input').val();
		//if(q.length > 0) ga_track('/widget/search?query=' + q);
		if(q.length > 0) ga_track('search', q);
		
		var preloader = $('<div/>').attr('id','preloader').appendTo('#horizon-widget #ext #all');
		if(search_cached_result[filters]) {
			set_actives(search_cached_result[filters]);
		} else {
			
			last_request = $time();
			
			$.ajax({
				url: widget_host + '?do=search&filters=' + escape(filters) + '&callback=?',
				dataType: 'jsonp',
				jsonp: 'callback',
				success: function(res){
					search_cached_result[filters] = res;
					set_actives(res);
				}
			});
		}
		
		function set_actives(res) {
			active = [];
			$.each(res, function(i, item) {
				active[parseInt(item)] = true;
			});
			current_act = [];
			$('#horizon-widget #ext #all a').each(function() {
				var box = $(this);
				id = box.attr('id').replace('bx_','');
				if(active[id]) current_act.push(id);
				box.fadeTo(400, (active[id] ? 1 : .3));
			});
			current_active = current_act;
			preloader.remove();
		}
	}
	
	function search_get_boxes() {
		var all = $('#horizon-widget #ext #all').empty();
		$('<div/>').attr('class','preloader').html('<img src="' + search_assets_url + 'search_loader.gif" alt="preloader" />').appendTo(all);
		
		var show_data = function(data) {
			all.empty();
			var titles = ['Trainingen', 'Verdiepings-modules', 'Modules'];
			
			row = []; col = [];
			for(i = 0; i < 3; i++) {
				var row = $('<div/>').attr('id', 'rowa' + i).appendTo(all);
				$('<div/>').attr('id', 'col_legend').appendTo(row).html(titles[i]);
				col[i] = [];
				for(j = 0; j < 3; j++) {
					col[i][j] = $('<div/>').attr('id', 'col_data').addClass('fase' + j).appendTo(row);
				}
			}
			
			$.each(data, function(i,item){
				var i = item.training_type == 1 ? 0 : item.training_type == 2 ? 2 : 1;
				$('<a/>').attr({
					href:	item.link,
					rel:	item.link,
					id:		'bx_' + item.id
				}).data('item', item).html((item.widget_name || item.title)).appendTo(col[i][item.level - 1]);
			});
			
			var l2c = col[2][1].add(col[2][2]).height(Math.max(col[2][1].height(), col[2][2].height()));
			
			$('<a/>').attr('href', 'http://' + window.location.host + '/horizon-t-o/carriereprogramma').html('<span>Meer informatie</span> over ons unieke carriereprogramma vindt u <u>hier</u>.').addClass('link').appendTo(col[2][2]);
			
			search_filter_data();
		};
		
		data = search_data || false;
		if(!data) {
			$.getJSON(widget_host + '?do=get_trainings&callback=?', function(data){
				search_data = data;
				show_data(data);
			});
		} else { 
			show_data(data);
		}
	}

	function search_show_panel(btn) {
		width = search_is_closed ? search_ext_width : 6;
		search_is_closed = search_is_closed ? false : true;
		$('#horizon-widget #ext').animate({
			width:	width,
			right:	-width
		}, 500, 'swing', search_is_closed ? function() {
			var all = $('#horizon-widget #ext #all').empty();
			//$('#horizon-widget #ext #btn').css('background-image',$('#horizon-widget #ext #btn').css('background-image').replace('btn2','btn'));
			$('#horizon-widget #ext #btn').removeClass('btn2');
			search_ext.hide(btn);
		} : function() {
			search_ext.show();
			//$('#horizon-widget #ext #all').css('min-height', $('#horizon-widget #ext').height() - 55);
			//$('#horizon-widget #ext #btn').css('background-image',$('#horizon-widget #ext #btn').css('background-image').replace('btn','btn2'));
			$('#horizon-widget #ext #btn').addClass('btn2');
			search_get_boxes(btn);
		});
	}
	
	function search_load_filters(url) {
		$.ajax({
			url: url,
			dataType: 'jsonp',
			jsonp: 'callback',
			success: function(data){
				var list = $('#horizon-widget ul');
				
				var a = Cookie('horizon_widget_filters');
				current_actives = {};
				if(a) {
					a = a + '';
					a = a.split('&');
					
					for(i = 0, l = a.length; i < l; i++) {
						tre = a[i].split('=');
						current_actives[tre[0]] = tre[1];
					}
					
					if(current_actives.keyword) $('#horizon-widget-form .search-box .search-box-input').val(current_actives.keyword);
				}
				
				$.each(data, function(i,item){
					item.title = item.title || '[ no_title ]';
					
					var s_type = 'radio';
					if(item.name == 'themas') {
						s_type = 'checkbox';
					}
					
					title = $('<li/>').attr({
						'class':	'search-title',
						rel:		item.name
					}).data('ga_track', true).text(item.title || '[ no_title ]').appendTo(list).click(function() {
						if($(this).data('ga_track')) {
							$(this).data('ga_track', false);
							//ga_track('/widget/' + $(this).attr('rel'));
							ga_track('expand', $(this).attr('rel'));
						} else {
							$(this).data('ga_track', true);
							ga_track('close', $(this).attr('rel'));
						}
					});
					
					if(current_actives[item.name]) {
						title.addClass('search-title2');
					}
					
					if(item.title.toLowerCase() == 'termijn' && (!ie6 && !ie7)) title.addClass('search-half-p');
					options2 = $('<li/>').attr('class', 'search-list').appendTo(list).attr('rel',s_type);
					if($.browser.msie) options2.css('display', 'none');
					
					if(item.options.length) {
						var ul = $('<ul/>').appendTo(options2);
						
						$.each(item.options, function(i, item2){
							
							var has_sub = item2.sub && item2.sub.length > 0;
							
							if(has_sub) {
								
								html = '<label style="font-weight:bold;cursor:default;padding:0">' + item2.title + '</label>';
								
								title2 = $('<li/>').html(html).appendTo(ul);
								
								$.each(item2.sub, function(i, item3){
									val = '';
									if(current_actives[item.name] && current_actives[item.name] == item3.value) val = ' checked="checked"';
									
									html = '&nbsp;<input type="' + s_type + '" name="' + item.name + (s_type == 'radio' ? '' : i) + '" id="' + item.name + '_opt' + i + '" value="' + item3.value + '" ' + val + ' />' 
									+ ' <label for="' + item.name + '_opt' + i + '" style="width:155px">' + item3.title + '</label>';
									
									title3 = $('<li/>').html(html).appendTo(ul).children('img, label').click(function() {
										search_is_closed ? search_show_panel() : setTimeout(function() { search_filter_data(); }, 100);
									});
								});
								
							} else {
								val = '';
								if(current_actives[item.name] && current_actives[item.name] == item2.value) val = ' checked="checked"';
								
								html = '<input type="' + s_type + '" name="' + item.name + (s_type == 'radio' ? '' : i) + '" id="' + item.name + '_opt' + i + '" value="' + item2.value + '" ' + val + ' />' 
								+ ' <label for="' + item.name + '_opt' + i + '">' + item2.title + '</label>';
								
								title2 = $('<li/>').addClass((item.title.toLowerCase() == 'termijn' && (!ie6 && !ie7)) ? 'search-half' : '').html(html).appendTo(ul).children('img, label').click(function() {
									search_is_closed ? search_show_panel() : setTimeout(function() { search_filter_data(); }, 100);
								});
							}
							
							title2.data('f_title', item2.title).data('ga_track', true).click(function() {
								if($(this).data('ga_track')) {
									$(this).data('ga_track', false);
									option = $(this).parent().parent().parent().prev().attr('rel');
									//ga_track('/widget/' + option + '/' + $(this).data('f_title'));
									ga_track('select', option + '/' + $(this).data('f_title'));
								} else {
									$(this).data('ga_track', true);
									//ga_track('deselect', 'filter', option + '/' + $(this).data('f_title'));
								}
							});
							
						});
					}
					
					if(current_actives[item.name]) {
						if($.browser.msie) {
							ie_margin = ($.browser.version == '6.0') ? '-1.2em' : 0;
							options2.show().css('margin-top', ie_margin).find('ul').show();
						} else {
							options2.children().slideToggle('fast');
						}
					}
					
				});
				$('#preloader').hide();
				
				$('#horizon-widget ul li ul').each(function() {
					li = $(this).children('li:last').css({
						background: 'url(' + search_assets_url + 'search_shadow2.jpg) repeat-x left bottom',
						paddingBottom: 7
					});
					if(li.hasClass('search-half')) {
						li.prev().css({
							background: 'url(' + search_assets_url + 'search_shadow2.jpg) repeat-x left bottom',
							paddingBottom: 7
						});
					}
				});
				
				$('#horizon-widget ul li.search-title').click(function(e) {
					var el = $(this).next();
					if($.browser.msie) {
						ie_margin = ($.browser.version == '6.0') ? '-1.2em' : 0;
						if(el.css('display') == 'none') {
							el.show().css('margin-top', ie_margin).children().show();
						} else {
							el.hide().css('margin-top', 0);
						}
					} else {
						el.children().slideToggle('fast');
					}
					
					el.children().children().each(function() {
						els = $(this).children().each(function() {
							if($(this)[0].tagName.toLowerCase() == 'input') $(this).attr('checked', false);
							if($(this)[0].tagName.toLowerCase() == 'img') $(this).attr('src', $(this).attr('src').replace('2',''));
						});
					});
					
					bg = $(this).css('background-image');
					if(bg.indexOf('arrow2') != -1) search_filter_data();
					$(this).css('background-image', (bg.indexOf('2') !== -1 ? bg.replace('2','') : bg.replace('arrow','arrow2')));
				});
				
				$('#horizon-widget ul li.search-list ul li').each(function(el) {
					var parent = $(this).parent();
					input = $(this).children('input').css('display','none');
					if(input.length) {
						value = input.val();
						label = $(this).children('label').attr('rel',value).click(function() {
							set_value(parent, $(this).attr('rel'));
							return false;
						}).mouseenter(function() {
							the_img.trigger('mouseenter');
						}).mouseleave(function() {
							the_img.trigger('mouseleave');
						});
						
						radio = input.attr('checked') ? search_assets_url + 'search_radio2.jpg' : search_assets_url + 'search_radio.jpg';
					
						var the_img = $('<img />').attr({
							src:	radio,
							id:		'r_' + input.attr('id'),
							rel:	value
						}).click(function(){
							set_value(parent, $(this).attr('rel'));
							return false;
						}).insertBefore(label).mouseenter(function() {
							if($(this).attr('src').indexOf('search_radio.jpg') != -1) {
								$(this).attr('src', search_assets_url + 'search_radio3.jpg');
							}
						}).mouseleave(function() {
							if($(this).attr('src').indexOf('search_radio3.jpg') != -1) {
								$(this).attr('src', search_assets_url + 'search_radio.jpg');
							}
						});
					}
					
				});
				if(url_helper.get('widget') == 'expand') search_show_panel();
			}
		});
	}
	
	var set_value = function(el, value) {
		var type = el.parent().attr('rel');
		el.children('li').each(function() {
			input = $(this).children('input');
			if(input.length) {
				img = $(this).children('img');
				if(type == 'checkbox') {
					if(input.val().toLowerCase() == value.toLowerCase()) {
						if(img.attr('src').indexOf('radio2') != -1) {
							input.attr('checked', false);
							img.attr('src',search_assets_url + 'search_radio.jpg');
						} else {
							input.attr('checked', true);
							img.attr('src',search_assets_url + 'search_radio2.jpg');
						}
					}
				} else {
					if(input.val().toLowerCase() == value.toLowerCase()) {
						input.attr('checked', !input.attr('checked'));
						img.attr('src', (!input.attr('checked') ? search_assets_url + 'search_radio.jpg' : search_assets_url + 'search_radio2.jpg'));
					} else {
						input.attr('checked', false);
						img.attr('src',search_assets_url + 'search_radio.jpg');
					}
				}
			}
		});
		search_is_closed ? search_show_panel() : setTimeout(function() { search_filter_data(); }, 100);
	};
	
	window.horizon_widget = actions;
	
})();