

var easyZoeken = {

	landen: [],

	streken: [],

	afstanden: [],

	liggingen: [],

	accommodaties: [],

	faciliteiten: [],

	sterren: [],

	groottes: [],

	paginaNummer: 0,

	bindClicks: function(){
		$('#sidebar a').unbind('click');
		$('#sidebar a').bind('click',function() {
			easyZoeken.filter( $(this), false );
			return false;
		});
		$('.opener').unbind('click');
		$('.opener').bind('click',function() {
			var id = $(this).attr('id');
			$('#' + id + 'f').slideToggle();
			return false;
		});
		$('.paging a').unbind('click');
		$('.paging a').bind('click',function() {
			easyZoeken.goToPage( $(this).attr('rel') );
			return false;
		});
		$('#opties a').unbind('click');
		$('#opties a').bind('click',function() {
			if( $(this).hasClass('back') ) {
				return true;
			}
			easyZoeken.filter( $(this), true );
			return false;
		});
	},

	filter: function( link, remove ) {
		$('.loading').css('height',$('#sidebar').height());
		$('.loading').show();
		var type = link.attr('class').replace(' nobg','');
		var id   = link.attr('rel');
		if( remove ) {
			easyZoeken.addFilter(type,id,false);
		} else {
			if( link.parent().attr('id') == type + 'On' ) { // uitzetten
				easyZoeken.addFilter(type,id,false);
			} else {	// aanzetten
				easyZoeken.addFilter(type,id,true);
			}
		}
	},

	addFilter: function(type,id,status) {
		switch( type ) {
			case 'landen':
				if( status == true ) {
					easyZoeken.landen[ easyZoeken.landen.length ] = id;
				} else {
					easyZoeken.landen.splice( InArray( id, easyZoeken.landen ), 1 ); // = null;
				}
				easyZoeken.landen.sort(function(a,b){return a - b})
				break;
			case 'streken':
				if( status == true ) {
					easyZoeken.streken[ easyZoeken.streken.length ] = id;
				} else {
					easyZoeken.streken.splice( InArray( id, easyZoeken.streken ), 1 ); // = null;
				}
				easyZoeken.streken.sort(function(a,b){return a - b})
				break;
			case 'afstanden':
				if( status == true ) {
					easyZoeken.afstanden[ easyZoeken.afstanden.length ] = id;
				} else {
					easyZoeken.afstanden.splice( InArray( id, easyZoeken.afstanden ), 1 ); // = null;
				}
				easyZoeken.afstanden.sort(function(a,b){return a - b})
				break;
			case 'liggingen':
				if( status == true ) {
					easyZoeken.liggingen[ easyZoeken.liggingen.length ] = id;
				} else {
					easyZoeken.liggingen.splice( InArray( id, easyZoeken.liggingen ), 1 ); // = null;
				}
				easyZoeken.liggingen.sort(function(a,b){return a - b})
				break;
			case 'accommodaties':
				if( status == true ) {
					easyZoeken.accommodaties[ easyZoeken.accommodaties.length ] = id;
				} else {
					easyZoeken.accommodaties.splice( InArray( id, easyZoeken.accommodaties ), 1 ); // = null;
				}
				easyZoeken.accommodaties.sort(function(a,b){return a - b})
				break;
			case 'faciliteiten':
				if( status == true ) {
					easyZoeken.faciliteiten[ easyZoeken.faciliteiten.length ] = id;
				} else {
					easyZoeken.faciliteiten.splice( InArray( id, easyZoeken.faciliteiten ), 1 ); // = null;
				}
				easyZoeken.faciliteiten.sort(function(a,b){return a - b})
				break;
			case 'sterren':
				if( status == true ) {
					easyZoeken.sterren[ easyZoeken.sterren.length ] = id;
				} else {
					easyZoeken.sterren.splice( InArray( id, easyZoeken.sterren ), 1 ); // = null;
				}
				easyZoeken.sterren.sort(function(a,b){return a - b})
				break;
			case 'groottes':
				if( status == true ) {
					easyZoeken.groottes[ easyZoeken.groottes.length ] = id;
				} else {
					easyZoeken.groottes.splice( InArray( id, easyZoeken.groottes ), 1 ); // = null;
				}
				easyZoeken.groottes.sort(function(a,b){return a - b})
				break;
		}
		easyZoeken.paginaNummer = 0;
		easyZoeken.zoek( 'both' );
	},

	goToPage: function( nr ) {
		easyZoeken.paginaNummer = nr;
		easyZoeken.zoek( 'paging' );
	},

	zoek: function( type ) {
		$('#opties').addClass('loadinggif');
		var i;
		var url = 'l/';
		for( i = 0; i < easyZoeken.landen.length; i++ ) {
			url += easyZoeken.landen[i] + '/';
		}
		url += 's/';
		for( i = 0; i < easyZoeken.streken.length; i++ ) {
			url += easyZoeken.streken[i] + '/';
		}
		url += 'a/';
		for( i = 0; i < easyZoeken.afstanden.length; i++ ) {
			url += easyZoeken.afstanden[i] + '/';
		}
		url += 'li/';
		for( i = 0; i < easyZoeken.liggingen.length; i++ ) {
			url += easyZoeken.liggingen[i] + '/';
		}
		url += 'ac/';
		for( i = 0; i < easyZoeken.accommodaties.length; i++ ) {
			url += easyZoeken.accommodaties[i] + '/';
		}
		url += 'fa/';
		for( i = 0; i < easyZoeken.faciliteiten.length; i++ ) {
			url += easyZoeken.faciliteiten[i] + '/';
		}
		url += 'st/';
		for( i = 0; i < easyZoeken.sterren.length; i++ ) {
			url += easyZoeken.sterren[i] + '/';
		}
		url += 'gr/';
		for( i = 0; i < easyZoeken.groottes.length; i++ ) {
			url += easyZoeken.groottes[i] + '/';
		}
		url += 'p/' + easyZoeken.paginaNummer;

		$.get( 'http://zoeken.petitparadis.nl/vakanties/' + url, function(data) {
			$('#vakanties').html( data );
			if( type == 'paging' ) {
				$('#mainnav .loading').hide();
			}
			easyZoeken.bindClicks();
		});

		// paging does not change the values on the left side of the screen :)
		if( type != 'paging' ) {
			$.get( 'http://zoeken.petitparadis.nl/sidebar/' + url, function(data) {
				$('#sidebar').html( data );
				$('#mainnav .loading').hide();
				easyZoeken.bindClicks();
			});
		}
	}

}

/**
* This function is our port of the PHP in_array function
* Two parameters:
* needle: item to be found in the array
* array: array in which we have to search
* return the key index, or -1 if there's nothing found
*/
InArray = function( needle, array ) {
	for( var i=0; i<array.length; i++ ){
		if( array[i] == needle ){
			return i;
		}
	}
	return -1;
};

/**
* Function is our port of the PHP array_key_exists function to JS
* Two parameters
* key: key to be found in the object/array
* array: array/ object to search in
* return true if the key is found. Return false otherwise
*/
ArrayKeyExists = function(key, array){
	for( var i in array ){
		if( key == i ){
			return true;
		}
	}
	return false;
};
