sl=new Array();
var slist={};
sdata={};
var drag=false;
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 reInit() {
	for(var i=0; i<sl.length; i++) {
		var cursl = sl[i];
		var sid = cursl['sid'];
		$("#"+sid+" .slider-rule").find("div").remove();
		slist[sid]['init']=false;
	}
	initSlider();
}

function initSelSlider(sid) {
	if ($("#"+sid).is(":visible") && !slist[sid]['init']) {
		initPoints(sid);
		initControls(sid);
		initSliderDrag(sid);
		slist[sid]['init']=true;
	}
	checkSliderParam(sid);
}

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>');
	});
	slist[sid]['iSliderLeft']=jparent.offset().left;
	jparent.bind("mousedown",function(event) {
		var leftpos = event.clientX-slist[sid]['iSliderLeft'];
		clickSliderRule(sid,leftpos);
	});
	jparent.bind("mouseup",function(event) {
		var pos = $("#"+sid+" .slider-control-left").offset().top-$(".flblock").offset().top-5;;
		setLBut(pos);
		if (!drag) {
			refreshView();
		}
	});
}

function initControls(sid) {
	var jparent = $("#"+sid+" .slider-rule");
	slist[sid]['iSliderWidth']=jparent.outerWidth();
	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>');
	
	//Disable line
	jparent.append('<div class="slider-disline leftdis" sl="'+sid+'" style="left:0%; width:0%;"></div>');
	jparent.append('<div class="slider-disline rightdis" sl="'+sid+'" style="left:0%; width:0%;"></div>');
	
	//HINT
	jparent.append('<div class="hint hint-shadow" sl="'+sid+'" style="left:10%;display:none"><span class="text"></span><span class="bt"></span></div>');
	
	//Active line
	var from_name = $("#"+sid+" .slfrom").attr("name");
	var to_name = $("#"+sid+" .slto").attr("name");
	
	var from_val_active = sdata[from_name];
	var to_val_active = sdata[to_name];
	if (from_val_active && to_val_active) {
		var lpos = getPosFromVal(sid,from_val_active);
		var rpos = getPosFromVal(sid,to_val_active);
		var width = rpos-lpos;
		jparent.append('<div class="slider-active-line" sl="'+sid+'" style="left:'+lpos+'%;width:'+width+'%;"></div>');
	}else{
		jparent.append('<div class="slider-active-line" sl="'+sid+'" style="left:0%;width:0%;"></div>');
	}
	
	slist[sid]['iSliderLine'] = jparent.children("div.slider-sel-line");
	slist[sid]['iSliderDislineLeft'] = jparent.children("div.leftdis");
	slist[sid]['iSliderDislineRight'] = jparent.children("div.rightdis");
	slist[sid]['iSliderHint'] = jparent.children("div.hint");
	slist[sid]['iSliderActiveLine'] = jparent.children("div.slider-active-line");
	
	//END Disable line
	//slist[sid]['iSliderPrevControlWidth'] = $("#"+sid+" .slider-rule .slider-control-left");
	
	setControlPos(sid,iFromVal,'slider-control-left');
	setControlPos(sid,iToVal,'slider-control-right');

	$("#"+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;
	
	if (sControlClass.indexOf("right")!=-1 && val=="") {
		val=iSToVal;
	}
	
	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+"%");
	
	if (sControlClass.indexOf('left')!=-1) {
		slist[sid]['curSelLineLeftPos']=(leftpos*slist[sid]['iSliderWidth']/100);
	}else{
		slist[sid]['curSelLineRightPos'] = (leftpos*slist[sid]['iSliderWidth']/100);
	}
	
	//refreshSliderLine(sid);
}

function getPosFromVal(sid,val,isLeft) {
	var iSFromVal = slist[sid].slpoint.points[0].ival;
	var iSToVal = slist[sid].slpoint.points[slist[sid].slpoint.points.length-1].ival;
	
	if (!isLeft && val=="") {
		val=iSToVal;
	}
	
	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;	
		}
	});
	return leftpos;
	
	//refreshSliderLine(sid);
}

function refreshSliderLine(sid) {
	var line = slist[sid]['iSliderLine'];
	var illeft = slist[sid]['curSelLineLeftPos'];
	var irleft = slist[sid]['curSelLineRightPos'];
	
	line.css("left",slist[sid]['curSelLineLeftPos']+"px");
	line.css("width",((irleft-illeft)/slist[sid]['iSliderWidth']*100)+'%');
	
	slist[sid]['iSliderDislineLeft'].css("width",(slist[sid]['curSelLineLeftPos']/slist[sid]['iSliderWidth']*100)+"%");
	slist[sid]['iSliderDislineRight'].css("left",((slist[sid]['curSelLineRightPos']+1)/slist[sid]['iSliderWidth']*100)+"%");
	slist[sid]['iSliderDislineRight'].css("width",((slist[sid]['iSliderWidth']-slist[sid]['curSelLineRightPos'])/slist[sid]['iSliderWidth']*100)+"%");
}

function initSliderDrag(sid) {
	var grid;
	if (slist[sid].scroolType=='x') {
		//X
		grid=[slist[sid]['iSliderLeft'],0,slist[sid]['iSliderLeft']+1+slist[sid]['iSliderWidth'],0]
	}else{
		//Y
	}
	//drag_step=Math.round(slist[sid]['iSliderWidth']/((slist[sid].slpoint.points[slist[sid].slpoint.points.length-1].ival-slist[sid].slpoint.points[0].ival)/slist[sid].slpoint.points[0].istep));
	drag_step=1;
	//console.log("drag_step: "+drag_step);
	slist[sid]['curSelLineLeftPos'] = $("#"+sid+" .slider-control-left").offset().left-slist[sid]['iSliderLeft']+7;
	slist[sid]['curSelLineRightPos'] = $("#"+sid+" .slider-control-right").offset().left-slist[sid]['iSliderLeft'];
	slist[sid]['iSliderPrevC']=
		$("#"+sid+" .slider-control-left").draggable({
		axis: 'x',
		containment: grid,
		grid: [drag_step,0],
		drag: sliderMove,
		addClasses:false,
		start:startDrag,
		stop:stopDrag,
		scope:this
	});
	slist[sid]['iSliderNextC']=
		$("#"+sid+" .slider-control-right").draggable({
		axis: 'x',
		containment: grid,
		grid: [drag_step,0],
		drag: sliderMove,
		start:startDrag,
		stop:stopDrag,
		addClasses:false,
		scope:this
	});
}

function startDrag(event,ui) {	
	drag=true;
}

function sliderMove(event, ui) {
	var sid = ui.helper.attr('sl');
	var isLeft = ui.helper.hasClass('slider-control-left');
	var line = slist[sid]['iSliderLine'];
	
	if (isLeft) {
		slist[sid]['curSelLineLeftPos'] = (ui.offset.left-slist[sid]['iSliderLeft']);
		line.css("left",slist[sid]['curSelLineLeftPos']);
		slist[sid]['iSliderDislineLeft'].css("width",(slist[sid]['curSelLineLeftPos']/slist[sid]['iSliderWidth']*100)+"%");
	}else{
		slist[sid]['curSelLineRightPos'] = (ui.offset.left-slist[sid]['iSliderLeft']);
		slist[sid]['iSliderDislineRight'].css("left",((slist[sid]['curSelLineRightPos']+1)/slist[sid]['iSliderWidth']*100)+"%");
		if ((slist[sid]['curSelLineRightPos']+1)>=slist[sid]['iSliderWidth']) {
			slist[sid]['iSliderDislineRight'].css("width","0%");
		}else{
			slist[sid]['iSliderDislineRight'].css("width",((slist[sid]['iSliderWidth']-slist[sid]['curSelLineRightPos'])/slist[sid]['iSliderWidth']*100)+"%");
		}
	}
	var illeft = slist[sid]['curSelLineLeftPos'];
	var irleft = slist[sid]['curSelLineRightPos'];
	line.css("width",((irleft-illeft)/slist[sid]['iSliderWidth']*100)+'%');
	if (isLeft) {
		setValueFromPos(sid,(illeft),isLeft);
	}else{
		setValueFromPos(sid,irleft,isLeft);
	}
	if (!slist[sid]['iSliderHint'].is(":visible")) {
		slist[sid]['iSliderHint'].show();
	}
	//$(ui).css("left",(ui.offset.left/slist[sid]['iSliderWidth']*100)+"%")
}

function setValueFromPos(sid,pos,isPrev) {
	var curval=0;
	var iHint="";
	var isLastFirst=false;
	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;
			iHint=(!el.hint) ? curval:el.hint;
			if (index==0 || index==(slist[sid].slpoint.points.length-1)) {isLastFirst=true;}
			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) {}
			iHint=curval;
			return false;	
		}
	});
	setHintPos(sid,pos,curval,iHint);
	if (isLastFirst) {curval="";}
	if (isPrev) {
		$("#"+sid+" .slfrom").val(curval);
	}else{
		$("#"+sid+" .slto").val(curval);
	}
	return curval;
	
}

function setHintPos(sid,leftpos,val,iHint) {
	slist[sid]['iSliderHint'].css("left",(leftpos/slist[sid]['iSliderWidth']*100)+"%");
	slist[sid]['iSliderHint'].children("span.text").html(iHint);
} 

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

function clSlider(btn) {
	var sid = $(btn).prev("input").attr("sl");
	$(btn).parents(".slblock2").find("input[type='text']").val("");
	setControlPos(sid,"","slider-control-left");
	setControlPos(sid,"","slider-control-right");
	sliderChange($("#"+sid+" .slfrom"));
	sliderChange($("#"+sid+" .slto"));
	var pos = $(btn).offset().top-$(".flblock").offset().top-5;
	setLBut(pos);
	refreshSliderLine(sid);
	refreshView();
}

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


function stopDrag(event, ui) {
	
	var sid = ui.helper.attr('sl');
	slist[sid]['iSliderHint'].hide();
	var isLeft = ui.helper.hasClass('slider-control-left');
	
	if (isLeft) {
		slist[sid]['iPLimit'] = ui.helper.offset().left+7;
		var right_stop = slist[sid]['iSliderLeft']+slist[sid]['iSliderWidth'];
		slist[sid]['iSliderNextC'].draggable( "option", "containment", [slist[sid]['iPLimit'],0,(right_stop+1),0]);
		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]);
		sliderChange($("#"+sid+" .slto"));
		//refreshView();
	}
	
	refreshSliderLine(sid);
	var pos = ui.helper.offset().top-$(".flblock").offset().top-5;;
	setLBut(pos);
	refreshView();
	drag=false;
}

function setLBut(top) {
	$("#slleft_but").css("top",top+"px");
	$("#slleft_but").show();
	//$("#slleft_but").fadeIn(50).delay(5000).fadeOut(50);
}

function clickSliderRule(sid,lpos) {
	var left_dist = Math.abs($("#"+sid+" .slider-control-left").offset().left-lpos-slist[sid]['iSliderLeft']);
	var right_dist = Math.abs($("#"+sid+" .slider-control-right").offset().left-lpos-slist[sid]['iSliderLeft']);
	if (left_dist<right_dist) {
		var val = setValueFromPos(sid,lpos,true) ;
		setControlPos(sid,val,'slider-control-left');
		sliderChange($("#"+sid+" .slfrom"));
		$("#"+sid+" .slider-control-left").trigger("dragstart");
	}else{
		var val = setValueFromPos(sid,lpos,false) ;
		setControlPos(sid,val,'slider-control-right');
		sliderChange($("#"+sid+" .slto"));
	}
	//var pos = $("#"+sid+" .slider-control-left").offset().top-$(".flblock").offset().top-5;;
	//setLBut(pos);
	refreshSliderLine(sid);
	//refreshView();
}

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"));
	}
}

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