sl=new Array();
var slist={};
function initSlider() {
	//console.log("Init sliders");
	for(var i=0; i<sl.length; i++) {
		var cursl = sl[i];
		var sid = cursl['sid'];
		slist[sid] = cursl;
		if ($("#"+sid).is(":visible") && !slist[sid]['init']) {
			//console.log("init slider points: "+sid);
			initPoints(sid);
			//console.log("init slider controls: "+sid);
			initControls(sid);
			initSliderDrag(sid);
			slist[sid]['init']=true;
		}
		checkSliderParam(sid);
	}
	//refreshView();
}

function initPoints(sid) {
	var jparent = $("#"+sid+" .slider-rule");
	$(slist[sid].slpoint.points).each(function(index,el) {
		jparent.append('<div class="slider-label" style="left:'+el.ipercent+'%"><span>'+el.slabel+'</span></div>');
	});
}

function initControls(sid) {
	var jparent = $("#"+sid+" .slider-rule");
	slist[sid]['iSliderWidth']=jparent.width();
	slist[sid]['iSliderLeft']=jparent.offset().left;
	var iFromVal = $("#"+sid+" .slfrom").val();
	var iToVal = $("#"+sid+" .slto").val();
	
	$("#"+sid+" .slfrom").attr('sl',sid);
	$("#"+sid+" .slto").attr('sl',sid);
	
	
	jparent.append('<div class="slider-control-left" sl="'+sid+'" style="left:0%"></div>');
	jparent.append('<div class="slider-control-right" sl="'+sid+'" style="left:100%"></div>');
	jparent.append('<div class="slider-sel-line" sl="'+sid+'" style="left:0%; width:100%;"></div>');
	
	//slist[sid]['iSliderPrevControlWidth'] = $("#"+sid+" .slider-rule .slider-control-left");
	
	setControlPos(sid,iFromVal,'slider-control-left');
	setControlPos(sid,iToVal,'slider-control-right');
	/*
	if (iFromVal>slist[sid].slpoint.points[0].ival) {
		sliderChange($("#"+sid+" .slfrom"));
	}
	if (iToVal<slist[sid].slpoint.points[slist[sid].slpoint.points.length-1].ival) {
		sliderChange($("#"+sid+" .slto"));
	}
	*/
	$("#"+sid+" .slfrom").change(function() {
		var sid = $(this).attr('sl');
		//console.log("left sid: "+sid);
		var val = $(this).val();
		if (!val || val<=0) {val=slist[sid].slpoint.points[0].ival;}
		setControlPos(sid,val,'slider-control-left');
		refreshSliderLine(sid);
	});
	$("#"+sid+" .slto").change(function() {
		var sid = $(this).attr('sl');
		var val = $(this).val();
			if (!val || val<=0) {val=slist[sid].slpoint.points[slist[sid].slpoint.points.length-1].ival;}
		setControlPos(sid,val,'slider-control-right');
		refreshSliderLine(sid);
	});
	refreshSliderLine(sid);
}

function setControlPos(sid,val,sControlClass) {
	var iSFromVal = slist[sid].slpoint.points[0].ival;
	var iSToVal = slist[sid].slpoint.points[slist[sid].slpoint.points.length-1].ival;
	
	val = parseFloat(val);
	
	if (val<iSFromVal) {val=iSFromVal;} //Check input values for limit
	else if (val>iSToVal) {val=iSToVal;}
	//console.log("VAL: "+val);
	var leftpos = 0;
	$(slist[sid].slpoint.points).each(function(index,el) {
		//console.log("el val: "+el.ival);
		if (val==el.ival) {
			leftpos = el.ipercent;
			return false;
		}else if (el.ival>val) {
			var stop_index = index;
			var start_index=index-1;
				if (start_index<0) start_index=0;
			var iperdelta = slist[sid].slpoint.points[stop_index].ipercent-slist[sid].slpoint.points[start_index].ipercent;
			var ivaldelta = slist[sid].slpoint.points[stop_index].ival-slist[sid].slpoint.points[start_index].ival;

			
			var last_val = slist[sid].slpoint.points[start_index].ival;
			var last_per = slist[sid].slpoint.points[start_index].ipercent;
			try {
			leftpos = last_per+((val-last_val)*iperdelta/ivaldelta);
			}catch(e) {}
			
			//leftpos = Math.round(val*iperdelta/ivaldelta);
			//console.log(leftpos);
			return false;	
		}
	});
	$("#"+sid+" ."+sControlClass).css("left",leftpos+"%");
}

function refreshSliderLine(sid) {
	var line = $("#"+sid+" .slider-rule .slider-sel-line");
	var illeft = $("#"+sid+" .slider-rule .slider-control-left").offset().left-slist[sid]['iSliderLeft'];
	var irleft = $("#"+sid+" .slider-rule .slider-control-right").offset().left-slist[sid]['iSliderLeft'];
	
	line.css("left",$("#"+sid+" .slider-rule .slider-control-left").css("left"));
	line.css("width",Math.round((irleft-illeft-7)/slist[sid]['iSliderWidth']*100)+'%');
}

function initSliderDrag(sid) {
	var grid;
	if (slist[sid].scroolType=='x') {
		//X
		grid=[slist[sid]['iSliderLeft'],0,slist[sid]['iSliderLeft']+slist[sid]['iSliderWidth'],0]
	}else{
		//Y
	}
	drag_step=1;
	//console.log("width slider: "+slist[sid]['iSliderWidth']);
	slist[sid]['iSliderPrevC']=
		$("#"+sid+" .slider-control-left").draggable({
		axis: 'x',
		containment: grid,
		grid: [drag_step,0],
		drag: sliderMove,
		addClasses:false,
		stop:stopDrag,
		scope:this
	});
	slist[sid]['iSliderNextC']=
		$("#"+sid+" .slider-control-right").draggable({
		axis: 'x',
		containment: grid,
		grid: [drag_step,0],
		drag: sliderMove,
		stop:stopDrag,
		addClasses:false,
		scope:this
	});
}

function sliderMove(event, ui) {
	var sid = ui.helper.attr('sl');
	var isLeft = ui.helper.hasClass('slider-control-left');
	var line = $("#"+sid+" .slider-rule .slider-sel-line");
	var illeft = $("#"+sid+" .slider-rule .slider-control-left").offset().left-slist[sid]['iSliderLeft'];
	var irleft = $("#"+sid+" .slider-rule .slider-control-right").offset().left-slist[sid]['iSliderLeft'];
	
	line.css("left",$("#"+sid+" .slider-rule .slider-control-left").css("left"));
	line.css("width",Math.round((irleft-illeft-7)/slist[sid]['iSliderWidth']*100)+'%');
	
	if (isLeft) {
		setValueFromPos(sid,(illeft+8),isLeft);
	}else{
		setValueFromPos(sid,irleft,isLeft);
	}
	
}

function setValueFromPos(sid,pos,isPrev) {
	var curval=0;
	var posp = pos/slist[sid]['iSliderWidth']*100;
	////console.log("Pos: "+pos+" pos %: "+posp);
	$(slist[sid].slpoint.points).each(function(index,el) {
		if (Math.floor(posp)==el.ipercent) {
			curval = el.ival;
			return false;
		}else if (el.ipercent>posp) {
			var stop_index = index;
			var start_index=index-1;
				if (start_index<0) start_index=0;
			var iperdelta = slist[sid].slpoint.points[stop_index].ipercent-slist[sid].slpoint.points[start_index].ipercent;	
			var ivaldelta = slist[sid].slpoint.points[stop_index].ival-slist[sid].slpoint.points[start_index].ival;
			
			var last_val = slist[sid].slpoint.points[start_index].ival;
			var last_per = slist[sid].slpoint.points[start_index].ipercent;
			try {
			curval = last_val+((posp-last_per)*ivaldelta/iperdelta);
			if (slist[sid].slpoint.points[stop_index].istep>=1) {
				curval = my_ceil(curval,slist[sid].slpoint.points[stop_index].istep);
			}else{
				curval = curval.toFixed(1);
			}
			
			}catch(e) {}
			return false;	
		}
	});
	
	if (isPrev) {
		$("#"+sid+" .slfrom").val(curval);
	}else{
		$("#"+sid+" .slto").val(curval);
	}
}

function sliderChange(inp) {
	var action = $("#sform").attr('action');
	var name = inp.attr('name');
	action = action.replace(eval('/'+name+'_.+?\\&/i'),'');
	action = action+name+'_'+inp.val()+'&';
	$("#sform").attr('action',action);
	
}

function my_ceil(f, b) {
	return Math.ceil(Math.ceil(f)/b)*b;
}

function stopDrag(event, ui) {
	var sid = ui.helper.attr('sl');
	var isLeft = ui.helper.hasClass('slider-control-left');
	
	if (isLeft) {
		slist[sid]['iPLimit'] = ui.helper.offset().left+7;
		////console.log("left offset: "+slist[sid]['iSliderLeft']+" width:"+slist[sid]['iSliderWidth']);
		var right_stop = slist[sid]['iSliderLeft']+slist[sid]['iSliderWidth'];
		slist[sid]['iSliderNextC'].draggable( "option", "containment", [slist[sid]['iPLimit'],0,(right_stop+1),0]);
		////console.log("RIGHT PREDEL: "+slist[sid]['iPLimit']+" - "+right_stop);
		sliderChange($("#"+sid+" .slfrom"));
		refreshView();
	}else{
		slist[sid]['iNLimit'] = ui.helper.offset().left;
		slist[sid]['iSliderPrevC'].draggable( "option", "containment", [slist[sid]['iSliderLeft'],0,slist[sid]['iNLimit'],0]);
		////console.log("LEFT PREDEL: "+slist[sid]['iSliderLeft']+" - "+slist[sid]['iNLimit']);
		sliderChange($("#"+sid+" .slto"));
		refreshView();
	}
	
	refreshSliderLine(sid);
}

function checkSliderParam(sid) {
	var iFromVal = $("#"+sid+" .slfrom").val();
	var iToVal = $("#"+sid+" .slto").val();
	if (iFromVal>slist[sid].slpoint.points[0].ival) {
		sliderChange($("#"+sid+" .slfrom"));
	}
	if (iToVal<slist[sid].slpoint.points[slist[sid].slpoint.points.length-1].ival) {
		sliderChange($("#"+sid+" .slto"));
	}
}

//$(document).ready(function() {
	//checkFilterParam();
    //initSlider();
//});
