(function($) {
	$.fn.costSlider = function(options) {
		
		// make sure we selected something
		if (!this.length) {
			options && options.debug && window.console && console.warn( "nothing selected, can't create, returning nothing" );
			return;
		};
		
		var settings = $.extend(true, {}, $.fn.costSlider.defaults, options);

		return this.each(function(k,v) {

			var obj = $(this);
			var defaultX_arr = [];
			var val_arr = [];
			var sliderDropdown = obj.find(settings.sliderDropdown);

			//console.log(sliderDropdown.parent());
			sliderDropdown.parent().removeClass('slider_loading');
			sliderDropdown.remove();

			var divLen = sliderDropdown.children().length+1;
			var stepWidth = Math.floor(obj.innerWidth()/divLen);
			var sliderWidth = stepWidth*divLen
			
			obj.css('width',sliderWidth+'px')
			
			var html = '<div class="step_wrapper">';
			html += '<div><span class="slider_left" style="left:'+(stepWidth-8)+'px"><img src="/media/img/resource/slider_btn.png" /></span></div>';
			
			$.each(sliderDropdown.children(), function(k,i){
				html += '<div class="step" style="width:'+stepWidth+'px;" />';
				//console.log((k+1)*stepWidth);
				defaultX_arr.push((k+1)*stepWidth-8);
				val_arr.push($(i).attr('value'));
			});
			
			html += '<div><span class="slider_right" style="left:'+(sliderWidth-stepWidth-8)+'px"><img src="/media/img/resource/slider_btn.png" /></span></div>';
			html += '<div class="slider_inputs clearfix"><input class="min_input" value="0" readonly="readonly" /><input class="max_input" value="500+" readonly="readonly" /></div>'
			html += '</div>';
			html += '<input type="hidden" name="priceRange" id="priceRange" value="" />';
			
			obj.append(html);
			
			var slider_left = obj.find('.slider_left'),
				slider_right = obj.find('.slider_right');
			var val1 = 0,
				val2 = defaultX_arr.length;
			var priceRange = obj.find('#priceRange');
			
			slider_left.draggable({
				axis: 'x',
				containment: 'parent',
				drag: function(event, ui) {
					
					var sliderX = parseInt(slider_left.css('left').replace('px',''));
					
					for(var i=0; i<defaultX_arr.length-1; i++){
						if( checkRange( sliderX, (defaultX_arr[i] - (stepWidth/2) ), (defaultX_arr[i+1] - (stepWidth/2) ) ) ){
							val1 = i;
						}
					};
					
					obj.find('.min_input').val(val_arr[val1]);
				},
				stop: function(event, ui) {
					slider_right.parent().css('width', defaultX_arr[defaultX_arr.length-val1-2] + 16 );
					slider_right.parent().css('float','right');
					slider_left.css('left', defaultX_arr[val1] + "px");
					var ranges = "";
					for(var i=val1; i<val2; i++)
					{	
						if(val_arr[i+1].indexOf("+")!= -1){
							ranges+=val_arr[i+1];}
						else{
							ranges+=val_arr[i]+"-"+val_arr[i+1]+" ";}
					}
					priceRange.val(ranges);
				}
			});
			
			slider_right.draggable({
				axis: 'x',
				containment: 'parent',
				drag: function(event, ui) {
					
					var sliderX = parseInt(slider_right.css('left').replace('px',''));
					
					for(var i=0; i<defaultX_arr.length-1; i++){
						if( checkRange( sliderX, (defaultX_arr[i] - (stepWidth/2) ), (defaultX_arr[i+1] - (stepWidth/2) ) ) ){
							val2 = i;
						}
					};
					
					if( checkRange( sliderX, (defaultX_arr[defaultX_arr.length-1] - (stepWidth/2) ), (defaultX_arr[defaultX_arr.length-1] + (stepWidth/2) ) ) ){
						val2 = defaultX_arr.length-1;
					};
					
					obj.find('.max_input').val(val_arr[val2]);
				},
				stop: function(event, ui) {
					slider_left.parent().css('width', defaultX_arr[val2-1] + 16)
					slider_right.css('left', defaultX_arr[val2] + "px");
					var ranges = "";
					for(var i=val1; i<val2; i++)
					{
						if(val_arr[i+1].indexOf("+")!= -1){
							ranges+=val_arr[i+1];}
						else{
							ranges+=val_arr[i]+"-"+val_arr[i+1]+" ";}
					}
					priceRange.val(ranges);
				}
			});
			
			var getValueFrom = val_arr[val1];
			var getValueTo = val_arr[val2];
			var getValueFromX = defaultX_arr[0];
			var getValueToX = defaultX_arr[defaultX_arr.length-1];
			
			if(getParam('priceRange') != undefined && getParam('priceRange') != '' && getParam('priceRange') != null){
				if((getParam('priceRange').indexOf("undefined")!= -1)){
					getValueFrom = getParam('priceRange').split('-')[0].replace('%2B','+');
					getValueTo = val_arr[val_arr.length-1];
				}else if((getParam('priceRange').indexOf("%2B")!= -1) && (getParam('priceRange').indexOf("-")!= -1)){
					getValueFrom = getParam('priceRange').split('-')[0].replace('%2B','+');
					getValueTo = val_arr[val_arr.length-1];
				}else if((getParam('priceRange').indexOf("-",7)!= -1)){
					getValueFrom = getParam('priceRange').split('-')[0].replace('%2B','+');
					var temp_value = [];
					temp_value = getParam('priceRange').split('-');
					getValueTo = temp_value[(temp_value.length)-1].replace('+','');
				}else if((getParam('priceRange').indexOf("%2B")!= -1) && (getParam('priceRange').indexOf("-")== -1)){
					getValueFrom = val_arr[val_arr.length-2];
					getValueTo = val_arr[val_arr.length-1];
				}else{
					getValueFrom = getParam('priceRange').split('-')[0].replace('%2B','+');
					getValueTo = getParam('priceRange').split('-')[1].replace('+','');
				}
			}else{
				getValueFrom = val_arr[0];
				getValueTo = val_arr[val_arr.length-1];
			};
				
			//console.log(getValueFrom);
			//console.log(getValueTo);
			
			//defaultX_arr
			
			//alert(val_arr.indexOf('0'));

			getValueFromX = defaultX_arr[val_arr.indexOf(getValueFrom)];
			getValueToX = defaultX_arr[val_arr.indexOf(getValueTo)];
			
			//console.log(defaultX_arr[val_arr.indexOf(getValueFrom)]);
			
			obj.find('.min_input').val(getValueFrom);
			obj.find('.max_input').val(getValueTo);
			
			//console.log(val_arr.indexOf(getValueTo));
			
			slider_left.parent().css('width',defaultX_arr[val_arr.indexOf(getValueTo)-1] + 16);
			slider_right.parent().css('float','right');
			slider_right.parent().css('width',defaultX_arr[defaultX_arr.length-val_arr.indexOf(getValueFrom)-2] + 16);
			
			slider_left.css('left',getValueFromX+'px');
			slider_right.css('left',getValueToX+'px');
		
			var ranges = "";
			for(var i=0; i<(val_arr.length); i++)
			{	
				if(getValueFrom == val_arr[i]) {val1=i;}
				if(getValueTo == val_arr[i]) {val2=i;}
			}
			for(var i=val1; i<val2; i++){
				if(val_arr[i+1].indexOf("+")!= -1){
					ranges+=val_arr[i+1];}
				else{
					ranges+=val_arr[i]+"-"+val_arr[i+1]+" ";}
			}
			priceRange.val(ranges);
			//priceRange.val(getValueFrom + '-' + getValueTo);
			
		});
	};
	
	$.fn.costSlider.defaults = {
		sliderDropdown: '#priceRange'
	};
	
})(this.jQuery);

function checkRange(num,min,max){
    return num > min && num < max;
};
