// Custom sorting plugin
(function($) {
    $.fn.sorted = function(customOptions) {
        var options = {
            reversed: false,
            by: function(a) {
                return a.text();
            }
        };
        $.extend(options, customOptions);
        $data = $(this);
        arr = $data.get();
        arr.sort(function(a, b) {
            var valA = options.by($(a));
            var valB = options.by($(b));
            if (options.reversed) {
                return (valA < valB) ? 1 : (valA > valB) ? -1 : 0;
            } else {
                return (valA < valB) ? -1 : (valA > valB) ? 1 : 0;
            }
        });
        return $(arr);
    };
})(jQuery);


// Custom sorting plugin bike price
(function($) {
    $.fn.sortedPrice = function(customOptions) {
        var options = {
            reversed: false,
            by: function(a) {
                return a.text();
            }
        };
        $.extend(options, customOptions);
        $data = $(this);
        arr = $data.get();
        arr.sort(function(a, b) {
            var valA = options.by($(a));
            var valB = options.by($(b));
            if (options.reversed) {
                return (valA > valB) ? 1 : (valA < valB) ? -1 : 0;
            } else {
                return (valA > valB) ? -1 : (valA < valB) ? 1 : 0;
            }
        });
        return $(arr);
    };
})(jQuery);







// DOMContentLoaded 2012
$(function() {


    // bind radiobuttons in the form
    var $filterSort = $('#bikefilter input[name="sort"]');
    
    var $filterplec = $('#bikefilter input[name="plec"]');
    var $filterkat = $('#bikefilter input[name="kat"]');
    var $filterEinsatz = $('#bikefilter input[name="einsatz"]');
    var $filterRahmenmaterial = $('#bikefilter input[name="rahmenmaterial"]');
    var $filterFederwegGabel = $('#bikefilter input[name="federwegGabel"]');
    var $filterFederwegHinterbau = $('#bikefilter input[name="federwegHinterbau"]');
    var $filterStvo = $('#bikefilter input[name="stvo"]');
    var $filterPreis = $('#bikefilter input[name="preis"]');
    var $filterSchaltung = $('#bikefilter input[name="schaltung"]');
    var $filterFarbe = $('#bikefilter input[name="farbe"]');
    var $filterLaufradgroesse = $('#bikefilter input[name="laufradgroesse"]');
    var $filterKurbel = $('#bikefilter input[name="kurbel"]');
    var $filterBremse = $('#bikefilter input[name="bremse"]');
    
    var $filterReset = $('#bikefilter .reset');



    // get the first collection
    var $applications = $('#bikeList');

    // clone applications to get a second collection
    var $data = $applications.clone();




    // QUICKSAND LISTENER FÜR RADIO BUTTONS FILTERLISTE
    $filterplec
    .add($filterkat)
    .add($filterEinsatz)
    .add($filterRahmenmaterial)
    .add($filterFederwegGabel)
    .add($filterFederwegHinterbau)
    .add($filterStvo)
    .add($filterPreis)
    .add($filterSchaltung)
    .add($filterFarbe)
    .add($filterLaufradgroesse)
    .add($filterBremse)
    .add($filterKurbel)
    .add($filterSort)
    .change(function(e) {
        bikeFilterSort($applications, $data, $(this).attr('name'), $(this).val());
        //window.scrollTo(0,0);
    });





    // RESETTER
    $('#bikefilter .reset').each(function(i) {
        
        $(this).click(function(i) {
            
            $filterName = $(this).prev().prev().attr('name');
            
            $('#bikefilter input[name="' + $filterName + '"]').attr('checked', false);
         	//$('#bikefilter input[name="' + $filterName + '"].hideAll').attr('checked', true);
            $('#bikefilter input[name="' + $filterName + '"]:nth(0)').attr('checked', true);
            $filterValue = $('#bikefilter input[name="' + $filterName + '"]').val();
            //$('#bikefilter input[name="plec"]')[0].checked = true;
            bikeFilterSort($applications, $data, $filterName, $filterValue);
            $(this).removeClass('show-reset');
            $(this).parent().removeClass('selected');
        });
    });

	
	// START BIKEFINDER	
	if($('#bikeFilterStartplecValue').html() != null || $('#bikeFilterStartkatValue').html() != null || $('#bikeFilterStartEinsatzValue').html() != null) {
		
		//bikeFilterSort($applications, $data, 'init', 'init');
		//$('#bikeValues').html() = '';
	}
	
	if(document.URL.search('/bikefinder/') == -1){
		bikeFilterSort($applications, $data, 'init', 'init');
	}
	
	if(document.URL.search('plec') != -1){
		//alert(document.URL.search('plec'));
		bikeFilterSort($applications, $data, 'init', 'init');
	}

});




var $initBikes = 1;


function bikeFilterSort($applications, $data, $filterName, $filterValue) {
	
	
	if($applications == 'NULL'){
	    var $applications = $('#bikeList');
		var $data = $applications.clone();
	}

    // FILTERWERTE
    $plec = $('#bikefilter input[name="plec"]:checked').val();
    $kat = $('#bikefilter input[name="kat"]:checked').val();
    $einsatz = $('#bikefilter input[name="einsatz"]:checked').val();
    $rahmenmaterial = $('#bikefilter input[name="rahmenmaterial"]:checked').val();
    $federwegGabel = $('#bikefilter input[name="federwegGabel"]:checked').val();
    $federwegHinterbau = $('#bikefilter input[name="federwegHinterbau"]:checked').val();
    $stvo = $('#bikefilter input[name="stvo"]:checked').val();
    $preis = $('#bikefilter input[name="preis"]:checked').val();
    $schaltung = $('#bikefilter input[name="schaltung"]:checked').val();
    $farbe = $('#bikefilter input[name="farbe"]:checked').val();
    $laufradgroesse = $('#bikefilter input[name="laufradgroesse"]:checked').val();
    $kurbel = $('#bikefilter input[name="kurbel"]:checked').val();
    $bremse = $('#bikefilter input[name="bremse"]:checked').val();


    // FILTERARRAY
    // --------------------------------------------------------------------------------------
    var $filteredData = $data.find('li');


    //if($($filterPrice+':checked').val() != 'all') $filteredData = $filteredData.filter('li[data-type=' + $($filterPrice+":checked").val() + ']');
    if ($plec && $plec != 'all')
        $filteredData = $filteredData.filter('.plec_' + $plec);
    if ($kat && $kat != 'all')
        $filteredData = $filteredData.filter('.kat_' + $kat);
    if ($einsatz && $einsatz != 'all')
        $filteredData = $filteredData.filter('.einsatz_' + $einsatz);
    if ($rahmenmaterial && $rahmenmaterial != 'all')
        $filteredData = $filteredData.filter('.rahmenmaterial_' + $rahmenmaterial);
    if ($federwegGabel && $federwegGabel != 'all')
        $filteredData = $filteredData.filter('.federwegGabel_' + $federwegGabel);
    if ($federwegHinterbau && $federwegHinterbau != 'all')
        $filteredData = $filteredData.filter('.federwegHinterbau_' + $federwegHinterbau);
    if ($stvo && $stvo != 'all')
        $filteredData = $filteredData.filter('.stvo_' + $stvo);
    if ($preis && $preis != 'all')
        $filteredData = $filteredData.filter('.preis_' + $preis);
    if ($schaltung && $schaltung != 'all')
        $filteredData = $filteredData.filter('.schaltung_' + $schaltung);
    if ($farbe && $farbe != 'all')
        $filteredData = $filteredData.filter('.farbe_' + $farbe);
    if ($laufradgroesse && $laufradgroesse != 'all')
        $filteredData = $filteredData.filter('.laufradgroesse_' + $laufradgroesse);
   	if ($kurbel && $kurbel != 'all')
        $filteredData = $filteredData.filter('.kurbel_' + $kurbel);
    if ($bremse && $bremse != 'all')
        $filteredData = $filteredData.filter('.bremse_' + $bremse);


    //SORTARRAY
    // --------------------------------------------------------------------------------------
    // if sorted by weight
    if ($('#bikefilter input[name="sort"]:checked').val() == "weight") {
        var $sortedData = $filteredData.sorted({
            by: function(v) {
                return parseFloat($(v).find('span[data-type=weight]').text());
            }
        });
    
    }
    // if sorted by kolekcja
    if ($('#bikefilter input[name="sort"]:checked').val() == "kolekcja") {
        var $sortedData = $filteredData.sorted({
            by: function(v) {
                return parseFloat($(v).find('span[data-type=kolekcja]').text());
            }
        });
    
    }
    // if sorted by bikename
    if ($('#bikefilter input[name="sort"]:checked').val() == "bikename") {
        var $sortedData = $filteredData.sorted({
            by: function(v) {
                return $(v).find('span[data-type=bikename]').text();
            }
        });
    
    }
    // if sorted by price
    if ($('#bikefilter input[name="sort"]:checked').val() == "price") {
        var $sortedData = $filteredData.sortedPrice({
            by: function(v) {
                return parseFloat($(v).find('span[data-type=price]').text());
            }
        });
    
    }
    // if sorted by color
    if ($('#bikefilter input[name="sort"]:checked').val() == "color") {
        var $sortedData = $filteredData.sorted({
            by: function(v) {
                return $(v).find('span[data-type=color]').text();
            }
        });
    
    }



    // finally, call quicksand
    $applications.quicksand($sortedData, {
        duration: 1000
        //easing: 'easeInOutQuad'
    
    }, function() {

        // LISTENFILTER ÄNDERN
        if ($filterName != 'sort') {
            listFilter($filterName, $filterValue);
        }
        
       	moveBikelist();
    	$initBikes = 0;
    });






}




// LISTENFILTER SETZEN
function listFilter($filterName, $filterValue) {

    
    if ($filterValue != 'all') {
        $filterCounter = $('#bikeList').children('.' + $filterName + '_' + $filterValue).size();
        $('#bikefilter input[name="' + $filterName + '"]:checked').parent().addClass('selected');
        $('#bikefilter input[name="' + $filterName + '"]').not(":checked").parent().addClass('hidden-element');
        //$('#bikefilter input[name="' + $filterName + '"]').not(":checked").parent().slideUp();
        $('#bikefilter input[name="' + $filterName + '"]:checked').next().html(' (' + $filterCounter + ')');
        // RESETTER
        $('#bikefilter input[name="' + $filterName + '"]:checked').next().next().addClass('show-reset');
    } 
    
    else {
        //$('#bikefilter input[name="' + $filterName + '"]:checked').parent().css('display', 'block');
        //$('#bikefilter input[name="' + $filterName + '"]').not(":checked").parent().slideDown();
        $('#bikefilter input[name="' + $filterName + '"]').not(":checked").parent().removeClass('hidden-element');
        // RESETTER
        $('#bikefilter input[name="' + $filterName + '"]').not(":checked").next().next().addClass('was-ist-das');
    }
    
    
    if ($filterValue == 'init') {
    	// plec
    	if($('#bikeFilterStartplecValue').html() != null){
	        $filterCounter = $('#bikeList').children('.' + $('#bikeFilterStartplecName').html() + '_' + $('#bikeFilterStartplecValue').html()).size();
	        $('#bikefilter input[name="plec"]:checked').parent().addClass('selected');
	        //$('#bikefilter input[name="plec"]').not(":checked").parent().slideUp();
	        $('#bikefilter input[name="plec"]').not(":checked").parent().addClass('hidden-element');
	        $('#bikefilter input[name="plec"]:checked').next().html(' (' + $filterCounter + ')');
	        $('#bikefilter input[name="plec"]:checked').next().next().addClass('show-reset');
        }
        // kat
        if($('#bikeFilterStartkatValue').html() != null){
	        $filterCounter = $('#bikeList').children('.' + $('#bikeFilterStartkatName').html() + '_' + $('#bikeFilterStartkatValue').html()).size();
	        $('#bikefilter input[name="kat"]:checked').parent().addClass('selected');
	        //$('#bikefilter input[name="kat"]').not(":checked").parent().slideUp();
	        $('#bikefilter input[name="kat"]').not(":checked").parent().addClass('hidden-element');
	        $('#bikefilter input[name="kat"]:checked').next().html(' (' + $filterCounter + ')');
	        $('#bikefilter input[name="kat"]:checked').next().next().addClass('show-reset');
        }
        // EINSATZ
        if($('#bikeFilterStartEinsatzValue').html() != null){
	        $filterCounter = $('#bikeList').children('.' + $('#bikeFilterStartEinsatzName').html() + '_' + $('#bikeFilterStartEinsatzValue').html()).size();
	        $('#bikefilter input[name="einsatz"]:checked').parent().addClass('selected');
	        //$('#bikefilter input[name="einsatz"]').not(":checked").parent().slideUp();
	        $('#bikefilter input[name="einsatz"]').not(":checked").parent().addClass('hidden-element');
	        $('#bikefilter input[name="einsatz"]:checked').next().html(' (' + $filterCounter + ')');
	        $('#bikefilter input[name="einsatz"]:checked').next().next().addClass('show-reset');
        }
    }
    
    



    // BIKE COUNTER FILTERLIST INPUTS
    $('#bikefilter fieldset:not(.sortierung) input').each(function(i) {
    
        counterFilter($(this).attr('name'), $(this).val(), $(this));
        
        $(this).parent().removeClass('empty-filter');
        //$(this).parent(':not(.hideAll)').css('display', 'block');
        
        var filterContains = $(this).next('.counter').text();
        if (filterContains === ' 0') {
        	//$(this).parent().addClass('empty-filter').slideUp();
        	$(this).parent().addClass('empty-filter');
        }

    });
    
    
    
    // BIKE COUNTER FILTERLIST LABELS
    $('#bikefilter fieldset:not(.sortierung)').each(function(i) {
    
    	$(this).removeClass('empty-filtergroup');
    	
        $filterCounterAll = $(this).children('label').size();
        $filterCounterSelected = $(this).children('label.selected').size();
        $filterCounterEmpty = $(this).children('label.empty-filter').size();
        $filterCounterPassiv = $(this).children('label.hidden-element').size();
        
    	$labelCounter = parseInt($filterCounterAll - $filterCounterSelected - $filterCounterEmpty); 
    	//$('#bikeClone').html($('#bikeClone').html() + $filterCounterAll + ' - ' + $filterCounterSelected + ' - ' + $filterCounterEmpty + ' == ' + $labelCounter + ' ### ');
    	
    	if($labelCounter == 1 && $filterCounterSelected < 1 || $labelCounter == 2 && $filterCounterSelected < 1){
        	//$(this).addClass('hideAll');
        	$(this).addClass('empty-filtergroup');
        }
    });


}





// ZU TOP ANKER SPRINGEN
function moveBikelist() {

	if($initBikes == 0){
		targetOffset = $('#bikeList').offset().top-$(".globalNav").height()-30;
		jQuery(window).scrollTo(targetOffset, 1000, {duration:3000, offset:-10});
	}

}








// FILTERCOUNTER SETZEN

function counterFilter($filterName, $filterValue, $filterButton) {
    $bikesCounter = $('#bikeList').children('.' + $filterName + '_' + $filterValue).size();
    $filterButton.next().html(' ' + $bikesCounter + '');
	//$('#tester').append($bikesCounter + ' ## ' );
	
}



// Hide/Show Filter Sidebar

function toggleFilter() {
	var filterBar = $('#filtercontainer');
	if (filterBar.is(':visible')) {
		filterBar.hide();
		$('.listBikes').removeClass('narrow');
		$('.toggleFilter').addClass('left');
	}
	else {
		filterBar.show();
		$('.listBikes').addClass('narrow');
		$('.toggleFilter').removeClass('left');
	}
}





$(document).ready(function() {
	
	$('#filtercontainer').before('<div class="toggleFilter"><div class="toggle-icon" /></div>');
	
	$('#filtercontainer').hover(function() {
		$('.toggleFilter').toggleClass("active");
	});

	$('.toggleFilter').click(function() {
	  toggleFilter();
	});
	
//	var $applications = $("#bikeList");
//    var $data = $applications.clone();
//	bikeFilterSort($applications ,$data, "plec", "mann");
});






















// ALT.......................................

// AJAX TEST
function ajaxFilter1() {
    $plec = $('#bikefilter input[name="plec"]:checked').val();

    //$currUid = '<?=$currUid?>';
    //$currNav = '<?=$currNav?>';
    //$rootline1 = '<?=$rootline1?>';
    
    $currUid = $('input[name="currUid"]').val();
    $currNav = $('input[name="currNav"]').val();
    $rootline1 = $('input[name="rootline1"]').val();
    
    $bikeList = $('#bikeList').html();
    
    jQuery.ajax({
        type: "POST",
        url: "index.php",
        data: "eID=cccc_bikeselector_ajax&plec=" + $plec + "&currUid=" + $currUid + "&currNav=" + $currNav + "&rootline1=" + $rootline1 + '&bikeList=' + $bikeList,
        success: function(msg) {
            //alert( "Data Saved: " + msg );
            $('#filtercontainer').html(msg);
        }
    });
}



function jumpTester(){
	var $applications = $("#bikeList");
    var $data = $applications.clone();
	bikeFilterSort($applications ,$data, "plec", "mann");
}


