var adstudio = function(){
	var _private = {
		uitgeverSitesMap: {},
		uitgeverSelector: '',
		titelAdvertentietypeIdsMap: {},
		mogelijkeAdvertentietypeIds: [],
		onClickPrev: function(){
			$('#nextstep,#prevstep,div.uitgever').hide();
			$('#nextstep').unwrap().appendTo('#stepnavigatie');
			$('#uitgeverSelection').show();
			return false;
		},
		onClickUitgever: function(){
			_private.uitgeverSelector = '#' + this.id + '_titels';
            $(this).parent().hide();
			// uncheck alle checkboxen van een andere uitgever
			$('.uitgever').filter(':not('+_private.uitgeverSelector+')').find(':checkbox:checked').each(function(){
				this.checked = false;
			});
			// en maak 'Uw selectie' leeg
            $(_private.uitgeverSelector).show().find('.selectie tr').remove();
            // zet de 'Volgende' knop in 'Uw selectie' box
            $('#nextstep').show().appendTo(_private.uitgeverSelector+' .selectiemiddle div').wrap('<div class="clearfix"/>');
			$('#prevstep').show();
            // toon eerder geselecteerde titels
			_private.showSelectedTitles();
			_private.determineMogelijkeAdvertentietypeIdsVanGekozenTitels();
			_private.disableTitelsMetNietMatchendeAdvertentietypeIds();
		},
		initTitleSearch: function(uitgever_id){
			var sites = _private.uitgeverSitesMap[uitgever_id].sites; //jsonPath(_private.uitgeverSitesMap, '$..sites');

            $('#'+uitgever_id+'_titels .searchwebsite').autoSuggest(sites, {
            	asHtmlID: 'as'+uitgever_id,
    			startText: "Zoek website",
    			emptyText: "Niets gevonden",
    			limitText: "Maar 1 keuze mogelijk",
    			selectionLimit: 1,
    			resultClick: function(data){ location.href='#site_'+data.attributes.id; },
    			selectionClick: function(elem){ location.href='#site_'+$('input.as-values').val().replace(',',''); },
    			selectionAdded: function(elem){ $('.as-original').hide(); },
    			selectionRemoved: function(elem){ $('.as-original').show(); elem.remove(); },
    			selectedItemProp: "naam",
            	selectedValuesProp: "id",
            	searchObjProps: "naam"
            });
        },
		retrieveUitgeversData: function(){
			//, {ug: 'NDC'}
			$.getJSON("/online/titelselectie/onlineTitelDetails.jl", function(uitgeversData){
				_private.storeUitgeversData(uitgeversData);
				_private.renderSites();
				_private.relocateNextButtonOnImplicitUitgeverSelection();
			});
		},
		relocateNextButtonOnImplicitUitgeverSelection: function(){
	        // in het geval er impliciet een uitgever gekozen is, via account relatie of querystring parameter
	        if ($('#uitgeverSelection').size() == 0) {
	        	$('.uitgever').each(function(){
	        		_private.uitgeverSelector = '#'+this.id;
	        		console.log('_private.uitgeverSelector '+_private.uitgeverSelector);
	        		console.log($(_private.uitgeverSelector+' .selectiemiddle div'));
	                $('#nextstep').show().appendTo(_private.uitgeverSelector+' .selectiemiddle div').wrap('<div class="clearfix"/>');
	        	})
	        }
        },
		storeUitgeversData: function(uitgeversData){
			$.each(uitgeversData, function(i, uitgever){
				_private.uitgeverSitesMap[uitgever.naam] = uitgever;
				uitgever['topsites'] = [];
				$.each(uitgever.sites, function(i, site){
					if (site.topsite_positie != '') {
						uitgever.topsites.push(site);
					}
					$.each(site.titels, function(i, titel){
						_private.titelAdvertentietypeIdsMap[titel.id] = titel.advertentietype_ids;
					});
				});
				$.each(uitgever.sites, function(i, site){
					if (uitgever.topsites.length < 4 && site.topsite_positie == '') {
						uitgever.topsites.push(site);
					}
				});
				uitgever.topsites.sort(function(a,b){
					if(a.topsite_positie == '') {
						return 1
					} else if(b.topsite_positie == '') {
						return -1
					} else {
						return a.topsite_positie - b.topsite_positie;
					}
				});
			});
        },
		renderSites: function(data){
			$.each(_private.uitgeverSitesMap, function(uitgever, uitgeverData){
				var html = $.resiglet($("#item_tmpl").html(), uitgeverData);
				$('#'+uitgever+'_titels').html(html);
				_private.initTitleSearch(uitgever);
			});
		},
		onChangeTitelSelectie: function(){
			_private.renderInUwSelectie(this.value, this.checked);
			_private.determineMogelijkeAdvertentietypeIdsVanGekozenTitels();
			_private.disableTitelsMetNietMatchendeAdvertentietypeIds();
		},
		verwijderTitelSelectie: function() {
			var titelId = $(this).parent('tr').remove().attr('class');

        	$('input:checkbox[value='+titelId+']').removeAttr('checked');
		},
		renderInUwSelectie: function(titelId, checked){
			var titel = jsonPath(_private.uitgeverSitesMap, '$..titels[?(@.id=='+titelId+')]');

			if (checked) {
				$(_private.uitgeverSelector+' .selectie table').append('<tr class="'+titelId+'"><td width="95%" valign="top">'+titel[0].site+'<br/><span class="kanaal">'+titel[0].kanaal+'</span></td><td class="unselect" title="verwijderen">&nbsp;</td></tr>');
			} else {
				$(_private.uitgeverSelector+' .selectie tr.'+titelId).remove();
			}
		},
		determineMogelijkeAdvertentietypeIdsVanGekozenTitels: function(){
			_private.mogelijkeAdvertentietypeIds = [];
			$('input:checkbox:checked').each(function(){
				var advertentietypeIdsVanTitel = _private.titelAdvertentietypeIdsMap[this.value],
					resulterendeMogelijkeAdvertentietypeIds = [];

				if (_private.mogelijkeAdvertentietypeIds.length == 0) {
					resulterendeMogelijkeAdvertentietypeIds = advertentietypeIdsVanTitel;
				} else {
					$.each(_private.mogelijkeAdvertentietypeIds, function(i, mogelijkeAdvertentietypeId){
						if ($.inArray(mogelijkeAdvertentietypeId, advertentietypeIdsVanTitel) > -1) {
							resulterendeMogelijkeAdvertentietypeIds.push(mogelijkeAdvertentietypeId);
						}
					});
				}

				_private.mogelijkeAdvertentietypeIds = resulterendeMogelijkeAdvertentietypeIds;
			});
		},
		disableTitelsMetNietMatchendeAdvertentietypeIds: function(){
			$('input:checkbox').removeAttr('disabled').parent().next().find('label').removeClass('disabled').removeAttr('title');
			if (_private.mogelijkeAdvertentietypeIds.length > 0) {
				$('input:checkbox:not(.'+_private.mogelijkeAdvertentietypeIds.join(',.')+')')
					.attr('disabled','disabled')
						.parent().next().find('label')
							.addClass('disabled')
							.attr('title','Deze titelkeuze is niet mogelijk vanwege afwijkende advertentietypes.');
			}
		},
		showSelectedTitles: function(){
	        $.each(_public.geselecteerdeTitelIds, function(index, titelId){
	        	$(_private.uitgeverSelector+' input:checkbox[value='+titelId+']').attr('checked','checked').each(function(){
					_private.renderInUwSelectie(titelId, true);
	        	});
	        });
		}
	};

	var _public = {
		onready: function() {
			$('#nextstep').hide();
			$('#prevstep').hide().find('a').attr('href','#').click(_private.onClickPrev);
			_private.retrieveUitgeversData();
	        $('#uitgeverSelection a').click(_private.onClickUitgever);
	        $('.uitgever').delegate('input:checkbox','change',_private.onChangeTitelSelectie);
	        $('.uitgever').delegate('.unselect','click',_private.verwijderTitelSelectie);
		},
		geselecteerdeTitelIds: []
	};

	// maak de public methods zichtbaar voor de buitenwereld
	return _public;
}(); // <-- voer de functie direct uit

$(document).ready(adstudio.onready);


