/* --- check if haystack contains needle --- */
function inArray(needle,haystack) {
	var valid = false;
	$.each(haystack, function(i) {
		if( haystack[i] == needle )
			valid = true;
	});
	return valid;
}

/* --- check input value against array with possible/correct values and return true or false --- */
function returnValidValue(obj) {		
	if( obj['input'].get(0).nodeName.toLowerCase() == 'input' && obj['input'].attr('type') == 'radio' ) {
		if( !inArray( $( obj['name'] + ':checked' ).val(), obj['values'] ) ) {
			return obj['name'];
		}
	} else {
		if( !inArray( obj['input'].val(), obj['values'] )	)
			return obj['name'];
	}	
	
	return false;
}

/* --- check valid e-mailaddress */
function validEmail(val) {
	var re_email = /^(\w+[\-\.])*\w+@(\w+\.)+[A-Za-z]+$/;
	return re_email.test(val)
}

/* --- return title of given obj name --- */
function getTitle(name) {

	var elem = $(name);
	// get text of <dt> for radiobuttons and checkboxes
	if( elem.get(0).nodeName.toLowerCase() == 'input' && ( elem.attr('type') == 'radio' || elem.attr('type') == 'checkbox' ) )
		return elem.parents('dd').prev().text().replace('*','');
	// else just get the label
	else
		return $('label[for=' + elem.attr('id') + ']').text();

}

/* --- form validation --- */
function validSignup(obj) {

	var invalid_fields = new Array;

	var checklist = new Array(),
		not_empty = new Array('input#tap_name','input#tap_address','input#tap_zipcode', 'input#tap_city', 'input#tap_amount'),
		valid_email = new Array('input#tap_email');
	
	
	// check based on value
	$.each(checklist, function(i) {
		var returnval = returnValidValue( checklist[i] );
		if( returnval != false ) {
			invalid_fields.push( returnval );
		}
	});

	// check if not empty
	$.each(not_empty, function(i) {
		if( obj.find(not_empty[i]).val() == '' )
			invalid_fields.push(not_empty[i]);
	});
	
	// check ik valid e-mail
	$.each(valid_email, function(i) {
		if( !validEmail( obj.find(valid_email[i]).val() ) )
			invalid_fields.push(valid_email[i]);
	});
	
	return invalid_fields;
}

/* --- mark invalid fields in form --- */
function markInvalidFields(signup,invalid_fields) {
	var invalid_name = 'finput_invalid';

	// remove all highlighted inputs
	signup.find('.'+invalid_name).removeClass(invalid_name);	
	// remove errormessage
	signup.find('.frmerror').remove();
	
	$.each(invalid_fields, function(i) {
		var current = signup.find(invalid_fields[i]);
		if( current.get(0).nodeName.toLowerCase() == 'input' && ( current.attr('type') == 'radio' || current.attr('type') == 'checkbox' ) ) {
			$.each(current,function(i) {
				signup.find('label[for=' + current.eq(i).attr('id') + ']').addClass(invalid_name);
			});
		} else {
			current.addClass(invalid_name);		
			signup.find('label[for=' + current.attr('id') + ']').addClass(invalid_name);
		}
	});

}


$(window).load(function() {
	// belt
	if( $.fn.belt ) $('div.belt').belt('initialize');
	
	// newsitem
	var newslinks = $('div.nwsIntro div.img a');
	if( newslinks.length ) {

		newslinks.fancybox(
			{
				'transitionIn'		: 'none',
				'transitionOut'		: 'none',
				'titlePosition' 	: 'over',
				'titleFormat'		: function(title, currentArray, currentIndex, currentOpts) {
					return '<span id="fancybox-title-over">Image ' + (currentIndex + 1) + ' / ' + currentArray.length + (title.length ? ' &nbsp; ' + title : '') + '</span>';
				}
			}
		)
		
	};

	// tap form
var signup = $('form#tap_signup');
	if( signup.length ) {
		
		signup.submit(function() {			
			var invalid_fields = validSignup(signup);
			markInvalidFields(signup,invalid_fields);

			if( invalid_fields.length ) {
				$('html, body').animate({scrollTop:0}, 500);
				$.ajax({
					url: '/inc/html/tapform_error.html',
					success: function(data) {
						signup.find('fieldset:eq(0)').before(data);

						if( $('input#language').val() == 'en' ) {
							signup.find('.frmerror p').html('You did not (correctly) fill in the following fields:');
						} else {
							signup.find('.frmerror p').html('U heeft de volgende velden niet (juist) ingevuld:');
						}
						
						var signup_frmerror = signup.find('.frmerror ul');
						$.each(invalid_fields,function(i) {
							signup_frmerror.append('<li>' + getTitle(invalid_fields[i]).replace('*','') + '</li>');
						});
					},
					async: false
				});
			}

			return !invalid_fields.length;
			
		});		
	}	


});
