

// [AA (a.avenwedde@mobizcorp.de)] Pls. refer to 'product-filters.js' for any additional calls also.
// Didn't moved the calls because may be referenced somewhere else at 
// those place.



//[AA] Encapsulated into function to be called _not_ onload automatically
// (Providing more better event flow).

jQuery(document).ready(function(){
    var left=0;
    var right=0;

   completeProductFilters(); 
    
});



function completeProductFilters() {
  
     
    var $ = jQuery;

    /********** SO: price-slider-range settings **********/
	// dynamic values:
	var pmin = Math.floor($('#price-min').val());
	var pmax = Math.ceil($('#price-max').val());
    
    // question: 0 is obviously the absolute minimum, but what is the absolute maximum? 600?
    //var sliderInitialValues = [$('#price-min').val(), $('#price-max').val()];
	var sliderInitialValues = [pmin, pmax];
   
    // or static values (may be better):
    //pmin = 0;
	//pmax = 600;
    $("#price-slider-range").slider({
       animate: true,
       range: true,
       min: pmin,
       max: pmax,
       values: sliderInitialValues,
       slide: function(event, ui) {
    		$('#priceRangeLeft').html('$'+ui.values[0]);
			$('#priceRangeRight').html('$'+ui.values[1]);
       },
       stop: function(event, ui){
           var rangeValues = [];
           $('#refine_subnav_actual .price_slider .white_font label').each(function(i){
               rangeValues[i] = this.innerHTML.substring(1); //substring starting at 1 to leave off the dollarsign
           });
          
           //var url = '?minPrice='+rangeValues[0]+'&maxPrice='+rangeValues[1]
           var url = $('#priceRefine').attr('rel');
                      
           setPriceMin(rangeValues[0]);
           setPriceMax(rangeValues[1]);
           url = getRefineUrl();
           rf.filterResults(url);
       }
    });
    
    // we want to show the dollar amounts under the slider thumbs/handles, we'll do this via the appended spans:
    /*
    $('#price-slider-range .ui-slider-handle').each(function(i){
        $(this).append('<span>$'+sliderInitialValues[i]+'</span>');
    });
     */
    
    // slider replaces need for labels and inputs. [kinda]
    $('#price-min,#price-max,label[for=price-min],label[for=price-max]').remove();
    /********** EO: price-slider-range settings **********/
    
   
    /********** SO: size-slider-range settings **********/
    
	// dynamic values:
	 var sizemin = Math.floor($('#size-min').val()*2);
	 var sizemax = Math.ceil($('#size-max').val()*2);

    // question: 0 is obviously the absolute minimum, but what is the absolute maximum? 600?
    //var sliderInitialValues = [$('#size-min').val(), $('#size-max').val()];
	 var sliderInitialValues = [sizemin, sizemax];
    
    // or static values (may be better):
    //sizemin = 0;
	//sizemax = 600;    
    $("#size-slider-range").slider({
        animate: true,
        range: true,
        min: sizemin,
        max: sizemax,
        values: sliderInitialValues,        
        slide: function(event, ui) {
    	left=Math.round(ui.values[0])/2;
    	right=Math.round(ui.values[1])/2;
    	
    	
		var min=left;
		var mini=parseInt(min.toString());
		
		var dec=min-mini;	
		var dec2=dec.toFixed(2);	
		var frc = "";					
		if (dec2==.33) {frc=" 1/3";}
		if (dec2==.50) {frc=" 1/2";}
		if (dec2>.6) {frc=" 2/3";}
			$('#sizeRangeLeft').html(mini + frc);
    		
			var min=right;
			var mini=parseInt(min.toString());
			
			var dec=min-mini;	
			var dec2=dec.toFixed(2);	
			var frc = "";					
			if (dec2==.33) {frc=" 1/3";}
			if (dec2==.50) {frc=" 1/2";}
			if (dec2>.6) {frc=" 2/3";}	
			
			$('#sizeRangeRight').html(mini + frc);
    		
        },
        stop: function(event, ui){
            var szRangeValues = [];           
            $('#refine_subnav_actual .size_slider .white_font label').each(function(i){
            	szRangeValues[i] = this.innerHTML; 
            });
        
            addRefinementSize(left,right);
            url = getRefineUrl();
            rf.filterResults(url);
  
        }
    });
    
    // we want to show the dollar amounts under the slider thumbs/handles, we'll do this via the appended spans:
    /*
    $('#size-slider-range .ui-slider-handle').each(function(i){
        $(this).append('<span>'+sliderInitialValues[i]+'</span>');
    });
    */
    
    // slider replaces need for labels and inputs. [kinda]
    $('#size-min,#size-max,label[for=size-min],label[for=size-max]').remove();
    
    /********** EO: size-slider-range settings **********/
    
    $('#refine_subnav_actual .school-list').jScrollPane({showArrows:true, scrollbarWidth: 21, scrollbarMargin: 0, arrowSize: 19});
    $('#refine_subnav_actual .school-list li').click(function(){
        
        
        var relax = false;

        // [AA] Using id's instead of jQuery DOM traversing features is much more
        // flexible, because:

        // - doesn't loose references with dynamic updates,
        // - independency of xml / html stucture.
        
        var school = $(this).attr("id").split("-")[1];
        var schoolurl = $(this).attr("team");
        
        
        //remove previous selection if there is one
        if(selectedTemp.length>0){
        	addRefinementSchool(selectedTemp[0],true);
        	$('#refine_subnav_actual .school-list li').removeClass('selected');
    	}
        
        //apply selected style
        $(this).addClass('selected');
        addRefinementSchool(schoolurl,relax);
        // get client-based refinement url:
        url = getRefineUrl();
        rf.filterResults(url);
        return false;
    });
    
    
}


/* NOT USED WITHIN COLUMBIA YET */

/**********  NEW (crocs footwear,columbia sportswear..) *************/

/* New settings for to be more flexible with product refinements definitions. */

/** [AA] New, lean settings, using ajaxhref.js, to replace most parts above.
    and to be more flexible for future use.
    
    Advantages:
    No overhead with developer-confusing client-server roundtrips*, no additional server-logic for
    ajax-requesets required, no doubling of template code (.isml/.js).
    
    Drawbacks:
    With dynamic update of html code, all dynamically added object references
    (i.e. attached events) are lost. 
    
    Instead of re-appling events and to relay onto the dom-structure, assign unique ids to 
    the elements. This is even more versatile for general use.
    
    (*) are more encapsulated into libraries.
 */

// TODO: Encapsulate into own namespace, if needed.

// Define special callbacks for refinement-updates here:
	   // Supported params (hooks) onstart|onend
	   // to define more hooks, modify ajaxhref.js

	 // Globally used collapsed refinments store (workaround, should be supported by server itself).
	 // [AA] UPDATE 04/2009: Also done by server templates now.
	 
       var  activeSizeTab = "regular";

	   // The global AJAXHREF_EXCHANGE_HASH (ajaxhref.js) can be used to exchange objects.
	   function refine(param , isCachedRequest ) {
	     
	     var myurl = AJAXHREF_EXCHANGE_HASH['url'];
	     var append = "";
	     
	     // Append this GET request by the collapsed refinement groups:
	     
	     
	     if (myurl) {
		     
		     append = "&selectedSizeTab=" + activeSizeTab;
		     myurl = myurl + append;
		     // Pass-back this modified url of this callback:
		     AJAXHREF_EXCHANGE_HASH['url'] = myurl;
		 }
	     

	     //alert('refine callback called.');


	     var fadeSpeed = "normal";
	     
	     // With cached requests, too much fading produces overhead/delays, so shorten up:
	     if (isCachedRequest) {
	       if (isCachedRequest == "yes") {
	         
	         fadeSpeed = "fast";
	       }
	     }
	     
	     if (param == "onstart") {
	       // Give user a visual hint, that something is done behind the scenes:
	       document.body.style.cursor = "wait";
	       // NEW: Skip fadeOut with fast transitions (i.e. if cached).
	       if (fadeSpeed != "fast") {
	         jQuery("#results-col").fadeOut(fadeSpeed);
	       }
	     }
	     if (param == "onend") {
  			
  		   // at product-filters, re-apply some settings again:
  		   completeProductFilters('update');
	       
	       jQuery("#results-col").fadeIn(fadeSpeed);
	       // Switch back wait cursor:
	       document.body.style.cursor="default";
	       	
	     }
	   }
	   
	   
	   
	   /* Toggle a refinement group and store its state at clients side.
	     for later use without to relay on jQuery.
	    */
	   /* elem:current dom element (object)*/
	   
	   function refineTab(elem) {
	     
	     
	     var id = elem.id;
         
         if (id == "filter-regular-link") {
           //alert("Set Regular");
           activeSizeTab = "regular";
           document.getElementById("product-filter-tabs-1").style.display="block";
           document.getElementById("product-filter-tabs-2").style.display="none";
         }
         else if (id=="filter-big-link") {
            //alert("Set big");
            activeSizeTab = "big";
            document.getElementById("product-filter-tabs-1").style.display="none";
            document.getElementById("product-filter-tabs-2").style.display="block";
         }
         return false;
         
	    

	   }
	   
	   var selectedColors = [];
	   var selectedSizes = [];
	   var selectedType = [];	   
   	   var selectedTemp = [];
	   
   	 //  var selectedType = null;
   	
   	   //price range
   	   var selectedPriceMin = null;
	   var selectedPriceMax = null;
	   
	   //size range
	   var selectedSizeMin = null;
	   var selectedSizeMax = null;

	   //Temperature Rating Sort Order
	   var tempRatingSortOrder = null;
	   
	   var refineBaseUrl = null;
	   
	   // TODO (check): is this needed, don't think so
	   function refineUrlInit() {
		  		    
		  refineBaseUrl = window.location.href;
		  
	   }
	   
	   /*
	   [AA]
	    For ajax requests, save the states of the selected refinement values
	    at client. Could/should be done more generally.
	    This part is implemented for the current requirements of columbia.	    
	   */
	   
	   
	   function addRefinementColor(color,mode,id) {
	        	
	     if (mode=='turnoff') {	    
	    	
	    	var newAr = [];
	       for (var i=0;i<selectedColors.length;i++) {
	         if (selectedColors[i] != color) {
	           newAr[newAr.length] = selectedColors[i];
	         }
	       }	       
	       selectedColors = newAr;

	       var tmpclick="addRefinementColor('"+color+"','turnon','"+id+"');";    
	       var anc=document.getElementById(id+'-anc');
	       anc.attributes['onclick'].value = tmpclick;
		       var tempsrc=document.getElementById(id+'img').src;	  
	       if (tempsrc.indexOf('_on.gif')>0)  {
	       document.getElementById(id+'img').src=tempsrc.replace('_on.gif','.gif');
       
	       }
	
	     }
	     else {	    

	       selectedColors[selectedColors.length] = color;
	    
	       var tmpclick="addRefinementColor('"+color+"','turnoff','"+id+"');";
	       var anc=document.getElementById(id+'-anc');
	       anc.attributes['onclick'].value = tmpclick;
	 
	       var tempsrc=document.getElementById(id+'img').src;	
	       if (tempsrc.indexOf('_on.gif')==-1) {
	    	   document.getElementById(id+'img').src=tempsrc.replace('.gif', '_on.gif');
	       }
	   
	     }
	     url = getRefineUrl();
         rf.filterResults(url);

	    
	   }
	
		function addRefinementSize(min,max) {
			var newAr = [];
			var cntr=0;
			var t='';
			for (var i=min*2;i<(max*2)+1;i++) {
				var tempsize=i/2;
				newAr[cntr]=tempsize.toFixed(1);
				t=t+tempsize.toFixed(1)+'|';
				cntr++;
			}
		selectedSizes = newAr;
	   }

		function setRefinementType(type) 
		{		
			selectedType=type; 
	   }	
		
		   function addRefinementType(type,mode,id) {
			  
			     if (mode=='turnoff') {	    
			    	
			    	var newAr = [];
			       for (var i=0;i<selectedType.length;i++) {
			         if (selectedType[i] != type) {
			           newAr[newAr.length] = selectedType[i];
			         }
			       }	       
			       selectedType = newAr;

			       var tmpclick="addRefinementType('"+type+"','turnon','"+id+"');";    
			       var anc=document.getElementById(id+'-anc');
			       anc.attributes['onclick'].value = tmpclick;
				       var tempsrc=document.getElementById(id+'img').src;	  
				       if (tempsrc.indexOf('_rollover.gif')==-1) {
				    	   document.getElementById(id+'img').src=tempsrc.replace('.gif', '_rollover.gif');
				       }
			
			     }
			     else {	    

			       selectedType[selectedType.length] = type;
			    
			       var tmpclick="addRefinementType('"+type+"','turnoff','"+id+"');";
			       var anc=document.getElementById(id+'-anc');
			       anc.attributes['onclick'].value = tmpclick;
			      
			       var tempsrc=document.getElementById(id+'img').src;	
			       if (tempsrc.indexOf('_rollover.gif')>0)  {
				       document.getElementById(id+'img').src=tempsrc.replace('_rollover.gif','.gif');
			       }
			   
			     }
			     
			    
			     url = getRefineUrl();
		         rf.filterResults(url);
		   }
			
		   
		   
	   // 'Temp'  refinement value:
	   function addRefinementTempSortOrder(tempSortOrder) {
		   tempRatingSortOrder = tempSortOrder;
		   	url = getRefineUrl();
	        rf.filterResults(url);
	   }
	   
	   function setPriceMin(p) {
	      selectedPriceMin = p;
	      getRefineUrl();
	   }
	   
	   function setPriceMax(p) {
	     selectedPriceMax = p;
	   }
	   
	   function setSizeMin(sz) {		  
	      selectedSizeMin = sz;	      
	   }
	   
	   function setSizeMax(sz) {
	     selectedSizeMax = sz;
	   }
	   
	   
	   // Reset all (javascript-state-based) filter values:
	   function resetFilters() {
	      
	      setPriceMin(null);
	      setPriceMax(null);
	      setTempRatingSortOrder(null);
	      setSizeMin(null);
	      setSizeMax(null);
	      selectedSizes = [];
	      selectedType = [];
	   //   selectedType = null;
	      selectedColors = [];
	      selectedTemp = [];
	   }
	   
	   
	   // [AA] Columbia project based. 
	   // Assembles the refine URL for ajax-based updates of the category grid.
	   // This is a workaround to by-passing the default server based URLs for refinements.
	   // 'relax / refine'
	   
	   
	   
	   
	   function getRefineUrl() {
	     
	     // get the refinement base Url:
	     var url = refineBaseUrl;
	     
	     if(!url.match(/\?/)) url = url + '?';
	     
	     // append parameters manually here:
	     var append = "";
	     
	     // This is a workaround/pass-by the demandware refinement handling:
	     // This part has to be extended for future use of other refinements, if needed.
	     
	     var count = 1;
	     
	     /*
	     if (selectedType.length > 0) 
	     {
	    	 append += (append==''?'':'&')+"prefn"+count+"=productShoeType&prefv"+count+"=" + selectedType.join("|");	    	 
	    	 count++;
		 }
	     */
	     if (tempRatingSortOrder) {
	    	 append += (append==''?'':'&')+"srule="+tempRatingSortOrder;	    	  
	     }
	
	     if (selectedType) 
	     {
	    	
	    	 append += (append==''?'':'&')+"prefn"+count+"=productShoeType&prefv"+count+"=" + selectedType.join("|");	    	 
	    	 count++;
		 }
	     
	     if (selectedColors.length > 0) 
	     {
	    	 append += (append==''?'':'&')+"prefn"+count+"=filterColor&prefv"+count+"=" + selectedColors.join("|");
	    	 count++;
	     }
	          
	     if (selectedPriceMin) {
	        append += (append==''?'':'&')+"pmin="+Math.floor(selectedPriceMin);	  
	     }
	     
	     if (selectedPriceMax) {
	        append += (append==''?'':'&')+"pmax="+( Math.ceil(selectedPriceMax) + .01*1 );
	     }
	     
	     /* */ 
	     if (window.left !== undefined){
	    	 selectedSizeMin=left;
	    	 selectedSizeMax=right;
	     }
	     if (selectedSizeMin && selectedSizeMax) {
	    	
	    	 var sizerange = (( Math.ceil(selectedSizeMax) - Math.floor(selectedSizeMin) ) + 1 ) * 2;
	    	 var newAr = [];
	    	 var basevalue = Math.floor(selectedSizeMin);
	    	 for (var i=0;i<sizerange;i++) {
	    		 newAr[newAr.length] = basevalue;
	    		 basevalue=basevalue*1+0.5*1;
	    	 }
		       
	    	 append += (append==''?'':'&')+"prefn"+count+"=variationSize&prefv"+count+"=" + newAr.join("|");
	    	 
	    	 count++;       
	     
	     }
	    
		 
	     url = url + "&" + append+"&format=ajax";     
	     refineUrlInit();

	     return url;
	     
	    
	   }
	   
	   // [AA] Set the initial search-url to keep flexibility:
	   refineUrlInit();


