window.addEvent('domready', function() {
    initTrefwoordSelect();
    initTrefwoordHighlighting();
    initRating();
    initReactiePlaatsen();
    initInloggen();
    initRegistreren();
    initDoorsturen();
	initRegisterSubmit();
//	initEnterSubmitFix();
	initArticleCategoryHover();
	initNetwerklinks();
	initScroll();
	initWoordenboekWoorden();
	initRegisterNewsletterSubmit(); // Deze altijd aan het einde houden. Anders raken de overtextjes in de war.
});


/* **************************************************************
 * Trefwoorden
 * **************************************************************/

function initTrefwoordSelect() {
	$$('#trefwoord').addEvent('change', function() {
		this.form.submit();
	});
}

function initTrefwoordHighlighting() {
	highlightTags();
	$$('.article')
		.addEvent('mouseenter', function() {
			var tagIds = $(this).get('tagids') || '';
			highlightTags(tagIds.split(','));
		})
		.addEvent('mouseleave', function() {
			highlightTags();
		});
}

function highlightTags(tagIds) {
	$$('.keywords_ul li').removeClass('active');
	if (tagIds) {
		$each(tagIds, function(tagId) {
			if(typeof(tagId) == 'object') //flash geeft soms een array[array[tagids]] door ipv de verwachtte vorm array[tagids]
				highlightTags(tagId);
			else
				$$('.keywords_ul li[tagid='+tagId+']').addClass('active');
		});
	}
	
}


/* **************************************************************
 * Rating
 * **************************************************************/

function initRating() {
	
	var setRating = function(rating, value) {
		rating.getElement('.stars_bar').setStyle('width', value+'%');
	};
	
	$$('.rating').each(function(rating){
		
		setRating(rating, rating.get('percent'));
		
		if (!rating.get('myvote') && rating.get('entitypointer_id')) {
			
			rating.getElement('.votes').addEvent('mouseleave', function(){
				setRating(rating, rating.get('percent'));
			});
			
			rating.getElements('.vote').each(function(vote){
				var vote_value = vote.get('vote_value');
				vote.addEvent('mouseenter', function(){
					setRating(rating, vote_value*20);
				});
				vote.addEvent('click', function(){
					if (userLoggedIn()) {
						setRating(rating, vote_value*20);
						rating.set('percent', vote_value*20);
						var entitypointer_id = rating.get('entitypointer_id');
						var part = rating.get('part');
						var request = new Request({
							url: $('base').get('href')+'/Rating/Vote',
							method: 'post',
							data: 'entitypointer_id='+entitypointer_id+'&rating='+vote_value,
							onComplete: function() { location.reload(); }
						});
						request.send();
					} else {
						loginRequired();
					}
				});
			});
		}
	});
}


/* **************************************************************
 * Reactie plaatsen
 * **************************************************************/

function initReactiePlaatsen() {
	var reacties = $('reacties');
	
	if (!reacties) {
		return;
	}
	
	var textarea = reacties.getElement('textarea[name=text]');
	textarea.addEvent('click', function() {
		loginRequired();
	});
	reacties.getElement('input[name=submit_reactie]').addEvent('click', function(e) {
		loginRequired();
		if (!userLoggedIn()) {
			new Event(e).stop();
		}
	});
	
}


/* **************************************************************
 * Inloggen
 * **************************************************************/

function userLoggedIn() {
	// Vergeet niet dat deze functies altijd onveilig zijn!
	return javascriptVars.userLoggedIn;
}
function loginRequired(message) {
	if (!userLoggedIn()) {
		if (!message) {
			message = 'je moet hiervoor ingelogd zijn';
		}
		alert(message);
	}
}

function initInloggen() {
	var loginbox = $('login_box');
	var menuinloggen = $('menu-inloggen');
	
	if (!loginbox || !menuinloggen) {
		return;
	}

	menuinloggen.addEvent('click', function(e) {
		loginbox.toggleClass('login_show');
		inlog_email_over = new OverText($('login_email'),{poll:true,delay:100});
		inlog_pass_over = new OverText($('login_pass'), {poll:true,delay:100});
		new Event(e).stop();
	});
}


/* **************************************************************
 * Registreren
 * **************************************************************/

function initRegistreren() {
	var registerbox = $('registerbox');
	
	if (!registerbox) {
		return;
	}
	
	$$('#menu-registreren,.wordlid_block_submit,#reactie_plaatsen_register', '#registerbox .networklogin_block_sluiten').addEvent('click', function(e) {
		/*
		lg.toggleBbg();
		registerbox.toggle();
		registerbox.getElements('input').each(function(item){
			if(item.hasClass('networklogin_input')) {
				new OverText(item,{poll:true,delay:100});
			}
		});

		new Event(e).stop();
		*/
		window.scrollTo(0,0);
		window.location = $('base').get('href')+'184/abonnement';
		new Event(e).stop();
	});
	
}


/* **************************************************************
 * Doorsturen
 * **************************************************************/

function initDoorsturen() {
	var doorstuurlink = $$('.doorsturen_link');
	
	if (!doorstuurlink) {
		return;
	}
	
	$each(doorstuurlink, function (d) {
		div_id = 'doorsturen_' + d.id.substr(d.id.lastIndexOf('_') + 1);
		
		var doorsturen = $(div_id);
		d.addEvent('click', function(e) {
			var height = doorsturen.getStyle('height');
			doorsturen.tween('height', (height == 100) ? [100,0] : [0, 100]);
			new Event(e).stop();
		});
		
		doorsturen.getElements('form').addEvent('submit', function(e) {
			if (($('ontvanger_naam').value == '') ||
				($('ontvanger_email').value == '') ||
				($('verzender_naam').value == '') ||
				($('verzender_email').value == '')) {
				new Event(e).stop();
			}
		});	
	});
}


/* **************************************************************
 * Registreren
 * **************************************************************/

function initRegisterSubmit() {
	nw = $('networklogin_submit_aanmelden')
	if(!nw) {
		return;
	}
	nw.getParents('form').addEvent('submit', function(e) {
		lg.start('Bezig met verwerken van uw aanvraag...');
		e.stop();
		new Request.JSON({
				url: $('base').get('href')+'user/register',
				timeout: 30,
				data: {
					email: $('networklogin_aanmelden_email').get('value'),
					ww1: $('networklogin_aanmelden_ww').get('value'),
					ww2: $('networklogin_aanmelden_email2').get('value'),
					ooksproutnetwerk: $('networklogin_aanmelden_ooksproutnetwerk').get('checked')
				},
				onSuccess: function(json, text) {
					lg.stop();
					if(json) {
						if(json.error=='0') {
							window.location = window.location;
						}
						else {
							alert('Fout opgetreden bij registreren: '+json.msg);
						}
					}
				},
				onFailure: function (xhr) {
					lg.stop();
					alert('De aanvraag kostte teveel tijd, probeert u het nog eens.');
				}
				}).send();
	});
}


/* **************************************************************
 * Aanmelden nieuwsbrief
 * **************************************************************/

function initRegisterNewsletterSubmit() {
	
	$$('.newsletter_form input[type="text"]').each(function(item){
		new OverText(item);//, {wrap: true});
	});

}


function registerNieuwsbrief(data) {
        new Request.JSON({
                url: $('base').get('href')+'registernewsletter',
                data: {
                        email: data.getElements('input[name="email"]')[0].get('value')
                },
                onSuccess: function(json,text) {
                        if(json && typeof(json.error)!='undefined') {
                                if(json.error=="0") {
                                        window.location = window.location;
                                } else {
                                        alert(json.msg);
                                }
                        }
                }
        }).send();
}


/* **************************************************************
 * Enter > Submit
 * **************************************************************/

// Op enter drukken in een form zonder submit button. Nodig omdat we vaak image inputs gebruiken daarvoor.
function initEnterSubmitFix() {
/*    $$('input').addEvent('keydown', function(e) {
    	if (e.key == 'enter') {
    		this.getParent('form').submit();
    		new Event(e).stop();
    	}
    });*/

	$$('input').addEvent('keydown', function(e) {
		if(e.key == "enter") {
			e.stop();
			frm = this.getParent('form');

			if(smt = frm.getElement('input[type="image"],input[type="submit"]')) {
				smt.click();
			}
		}
	});
}


/* **************************************************************
 * Categorylink hover
 * **************************************************************/

// Article niet highlighten wanneer je over de categorylink gaat.
function initArticleCategoryHover() {
	$$('.article').each(function(el) {
		el.getElements('.article_details_category').addEvent('mouseenter', function(e) {
			el.setStyle('backgroundColor', '#ffffff');
		});
		el.getElements('.article_details_category').addEvent('mouseleave', function(e) {
			el.setStyle('backgroundColor', null);
		});
	});
}



function initNetwerklinks() {
	$$('.widget_netwerk_footer_link, .netwerk_footer_link').addEvent('click', function() {
		window.location.href = $('base').href + 'netwerk/';
	});
}


/**
 * Zorgen dat het opgegeven element volledig zichtbaar is. Aan de boven- of onderkant van het scherm 
 * #top-reacties     -> Het eerste element met .anchor_reacties zal bovenaan de pagina staan
 * #bottom-reacties  -> Het eerste element met .anchor_reacties zal onderaan de pagina staan 
 */
function initScroll() {
	
	var hash = window.location.hash.substring(1);
	
	var firstDash = hash.search('-');
	var header = hash.substring(0, firstDash);
	var body = hash.substring(firstDash+1);
	
	var el = $$('.anchor_'+body)[0];
	if (!el) {
		return;
	}
	
	switch (header) {
	case "top":
		window.scrollTo(0, el.getPosition(window).y);
		break;
	case "bottom":
		window.scrollTo(0, el.getPosition(window).y - window.getSize().y + el.getSize().y);
		break;
	default: 
		// niks doen
		break;
	}
	
}



function initWoordenboekWoorden() {
	var tips = new Tips('.woordenboekwoord', {
		className: 'woordenboekTip',
		fixed: true
	});
	tips.addEvent('show', function(tip, el) {
		var tiptext = tip.getElements('.tip-text');
		if (!el.retrieve('tiploaded')) {
			tiptext.set('html', 'laden...');
			new Request.JSON({
				url: $(el).get('href'),
				timeout: 30,
				data: {
					json: true
				},
				onSuccess: function(json, text) {
					tiptext.set('html', json.omschrijving);
					el.store('tiploaded', true);
					el.store('tip:text', json.omschrijving);
				}
			}).send();
		}
	});
}

