
/*****************

  (c) 2006 Q42 B.V.

  The contents of this file, partially or in whole, may not be reproduced
  without prior written permission by Q42 B.V.

*****************/


function myHnd(evt)
{
	if (evt.subject.id == "search-full-5") {
        if (evt.cb[0] == "option-expanded") {
            searchBudgetSlider.setSliderToInputValues();
        }
	}
}

Spif.CustomEvents.listen("afterChangeClassName", myHnd);

function SearchBudgetSlider() {
    Spif.DOMEvents.attach(window, "load", this.construct);
}

SearchBudgetSlider.prototype = {

    sliderBarWidth: 324, 
    sliderWidth: 13,
    sliderHalfWidth: null,
    sliderStepWidth: 27,
    sliderSteps: null,
    sliderMinAmount: 200,
    sliderMaxAmount: 1200,
    sliderStepsAmountFactor: null,
    rightSlider: null,
    leftSlider: null,
    rightCaption: null,
    leftCaption: null,
    sliderRightLabel: null,
    sliderLeftLabel: null,
    sliderBudgetTo: null,
    sliderNoPreference: null,
    sliderMoneyPattern: null,
    sliderMoneyRegExp: null,
    minBudget: null,
    maxBudget: null,
    range: null,
    
    
    
    /*
     * Set all properties
     */
    construct: function() {
    
        this.sliderHalfWidth = Math.round(this.sliderWidth / 2);
        this.sliderSteps = this.sliderBarWidth / this.sliderStepWidth;
        this.sliderMinAmount = parseInt(document.getElementById("minAmount").value);
        this.sliderMaxAmount = parseInt(document.getElementById("maxAmount").value);
        this.sliderStepsAmountFactor = this.sliderMaxAmount / this.sliderSteps;
        this.rightSlider = document.getElementById("rightSlider");
        this.leftSlider = document.getElementById("leftSlider");
        
        if (this.rightSlider != null || this.leftSlider != null) 
        {
        
            this.rightCaption = this.rightSlider.getElementsByTagName("div")[0];
            this.leftCaption = this.leftSlider.getElementsByTagName("div")[0];
            this.sliderRightLabel = document.getElementById("sliderRightLabelText").innerHTML;
            this.sliderLeftLabel = document.getElementById("sliderLeftLabelText").innerHTML;
            this.sliderBudgetTo = document.getElementById("sliderBudgetTo").innerHTML;
            this.sliderNoPreference = document.getElementById("sliderNoPreference").innerHTML;
            this.sliderMoneyPattern = document.getElementById("sliderMoneyPattern").innerHTML;
            this.sliderMoneyRegExp = /x/;
            
            this.minBudget = document.getElementById("minBudget");
            this.maxBudget = document.getElementById("maxBudget");
            this.range = document.getElementById("range");
        }
    },
    
    

    /*
     * Set sliders to form input values
     */
    setSliderToInputValues: function() {
        this.setLeftSliderByAmount(this.minBudget.value);
        this.setRightSliderByAmount(this.maxBudget.value);
    },
    
    
    
    /*
     * Set slider by amount
     */
    setLeftSliderByAmount: function(amount) 
    {
      var pt = function() {}
      var step = (amount / searchBudgetSlider.sliderStepsAmountFactor);
      step = (step == 0 || isNaN(step)) ? 1 : step;
      // step starts at 1 (amount: 100) but we need to start at 0:
      step = step - 1;
      pt.x = Math.round(step / searchBudgetSlider.sliderSteps * searchBudgetSlider.sliderBarWidth) - searchBudgetSlider.sliderHalfWidth;
      this.leftSlider.style.left = pt.x + "px";
      doLeftMove(null, pt);
    },
    
    

    /*
     * Set slider by amount
     */
    setRightSliderByAmount: function(amount) 
    {
      var pt = function() {}
      var step = (amount / searchBudgetSlider.sliderStepsAmountFactor);
      step = (step == 0 || isNaN(step)) ? searchBudgetSlider.sliderSteps + 1 : step;
      // step starts at 1 (amount: 100) but we need to start at 0:
      step = step - 1;
      pt.x = Math.round(step / searchBudgetSlider.sliderSteps * searchBudgetSlider.sliderBarWidth) - searchBudgetSlider.sliderHalfWidth;
      this.rightSlider.style.left = pt.x + "px";
      doRightMove(null, pt);
    }
    
}

var searchBudgetSlider = new SearchBudgetSlider();



/* 
 * Makes sure Sliders don't cross each other and slide with fixed steps. 
 */
function beforeLeftMove(el, pt) {
  
    var rightLeft = searchBudgetSlider.rightSlider.offsetLeft;
    var x = Math.min(pt.x, rightLeft - searchBudgetSlider.sliderStepWidth);
    // uncomment if you want the slider to snap to each amount while dragging
    // x = (Math.round(x / searchBudgetSlider.sliderStepWidth) * searchBudgetSlider.sliderStepWidth) - searchBudgetSlider.sliderHalfWidth;
    pt.x = x;
  
}



/* 
 * Makes sure Sliders don't cross each other and slide with fixed steps. 
 */
function beforeRightMove(el, pt) {
  
    var leftLeft = searchBudgetSlider.leftSlider.offsetLeft;
    var x = Math.max(pt.x, leftLeft + searchBudgetSlider.sliderStepWidth);
    // uncomment if you want the slider to snap to each amount while dragging
    // x = (Math.round(x / searchBudgetSlider.sliderStepWidth) * searchBudgetSlider.sliderStepWidth) - searchBudgetSlider.sliderHalfWidth;
    pt.x = x;

}



/* 
 * Changes the captions and the range bar between the sliders. 
 */
function doLeftMove(el, pt) {

    var sliderAmount = searchBudgetSlider.sliderStepsAmountFactor * (Math.round(searchBudgetSlider.sliderSteps * (pt.x  + searchBudgetSlider.sliderHalfWidth) / searchBudgetSlider.sliderBarWidth) + 1);

    if (sliderAmount < searchBudgetSlider.sliderMinAmount) {
        searchBudgetSlider.leftCaption.innerHTML = ''; // '&nbsp;&nbsp;&lt;';
        searchBudgetSlider.minBudget.value = 0;
    } else {
        searchBudgetSlider.leftCaption.innerHTML = sliderAmount;
        searchBudgetSlider.minBudget.value = sliderAmount;
    }
    var left = pt.x + searchBudgetSlider.sliderWidth;

    if (searchBudgetSlider.range.offsetWidth != 0) {
        searchBudgetSlider.range.style.width = (searchBudgetSlider.range.offsetWidth + searchBudgetSlider.range.offsetLeft - left)  + "px";
        searchBudgetSlider.range.style.left = left + "px";
    }  
}



/* 
 * Changes the captions and the range bar between the sliders. 
 */
function doRightMove(el, pt) {
 
    var sliderAmount = searchBudgetSlider.sliderStepsAmountFactor * (Math.round(searchBudgetSlider.sliderSteps * (pt.x  + searchBudgetSlider.sliderHalfWidth) / searchBudgetSlider.sliderBarWidth) + 1);

    if (sliderAmount > searchBudgetSlider.sliderMaxAmount) {
        searchBudgetSlider.rightCaption.innerHTML = '' // '&nbsp;&nbsp;&gt;';
        searchBudgetSlider.maxBudget.value = 0;
    } else {
        searchBudgetSlider.rightCaption.innerHTML = sliderAmount;
        searchBudgetSlider.maxBudget.value = sliderAmount;
    }
  
    if (searchBudgetSlider.range.offsetWidth != 0) {
        searchBudgetSlider.range.style.width = pt.x - searchBudgetSlider.range.offsetLeft + "px";
    }

}



/*
 * When we're done moving update the datacollector
 */
function afterLeftMove(el, pt) {
    searchBudgetSlider.setLeftSliderByAmount(searchBudgetSlider.minBudget.value);
    dataCollector.getTotals();
    ClickTracker.trackClick(new Click(resources.messages.clicktracker.ct_search_price_min + searchBudgetSlider.minBudget.value));
}

function afterRightMove(el, pt) {
    searchBudgetSlider.setRightSliderByAmount(searchBudgetSlider.maxBudget.value);
    dataCollector.getTotals();
    ClickTracker.trackClick(new Click(resources.messages.clicktracker.ct_search_price_max + searchBudgetSlider.maxBudget.value));
}

