var in_drag = false;
var sliders = new Array();
var slider_values = new Array();
var slider_labels = new Array();

var slider_min = new Array();
var slider_max = new Array();
var slider_selected_values = new Array();
var slider_mode = new Array();
var slider_start_pos = new Array();
var slider_snap_points = new Array();
	
function create_sliders() {
	var page_sliders = $('.qb_slider_table')
	
	if(page_sliders.length>0) {
		for(n=0;n<page_sliders.length;n++) {
			var mqid = page_sliders[n].id.substring(3,12);
			sliders[sliders.length] = mqid;
			var mqid_name = 'module_question_'+mqid;
			slider_values[mqid] = new Array();
			var slider_range = object_add('a', { 'id' : mqid_name+'_slider', 'class' : 'qb_slider_bg' });
			slider_table = page_sliders[n];
			if (slider_table) {
				slider_container = slider_table.parentNode;				
				var slider_replace_vals = $('.qb_slider_option', page_sliders[n]);
				for(r=0;r<slider_replace_vals.length;r++) {
					slider_values[mqid][slider_values[mqid].length] = slider_replace_vals[r].value;
					if (slider_replace_vals[r].checked || slider_replace_vals[r].selected) {
						slider_selected_values[mqid] = slider_replace_vals[r].value;
					}
				}
				current_value = slider_selected_values[mqid] ? slider_selected_values[mqid] : -1;
				if(current_value==-1) {
					var im = document.images;
 					for( var i=0;i<im.length; i++) {
						if(im[i].name!=null) {
							if(im[i].name.substr(0, mqid_name.length)==mqid_name) {
								var rex = new RegExp("but_radio_on");
								if(rex.exec(im[i].src)=="but_radio_on" || im[i].className == "qb_option_image_on")
									current_value = im[i].name.substr(mqid_name.length+1);
							}
						}
					}
				}
				slider_val = object_add('input', { 'type' : 'hidden', 'id' : mqid_name, 'name' : mqid_name, 'value' : current_value });
				slider_range.appendChild(slider_val);
				slider_button = object_add('div', {
							'alt' : 'Drag to select',
							'id': mqid_name+'_slider_button',
							'class' : 'qb_slider_button qb_slider_button_waiting',
							'tabindex' : '0'
							});
				slider_range.appendChild(slider_button);
				if(page_sliders[n].id.search(/_parent/)>0) {
					var parent_mqid = page_sliders[n].id.substring(26);
					slider_range.relatedHeader = parent_mqid;
				}
				slider_container.appendChild(slider_range);
				var mqid_obj = document.getElementById(mqid_name);
				mqid_obj.value = current_value;
				slider_snap_points[mqid] = new Array();
				slider_table.parentNode.removeChild(slider_table);
				apply_slider_events(mqid);
			}
		}
		for(i=0;i<sliders.length;i++)
			resize_slider(sliders[i], true);
	}
}

function handle_keys(e) {
	var mqid = e.data;
	var mqid_question = 'module_question_'+mqid;
	var mqid_obj = document.getElementById(mqid_question);
	if (mqid_obj) {
		var max_val = slider_values[mqid].length-1;
		var min_val = 0;
		var cur_val = -1;
		for (c=0;c<=max_val;c++) {
			if (slider_values[mqid][c]==mqid_obj.value) {
				cur_val = c;
				break;
			}
		}		
		if (e.keyCode==39) {
			if (cur_val<max_val)
				cur_val++;
		} else if (e.keyCode==37) {
			if (cur_val>min_val)
				cur_val--;
		}
		if (cur_val>=0) {
			mqid_obj.value = slider_values[mqid][cur_val];
			place_slider(mqid);
		}
	}	
}

function apply_slider_events(mqid) {
	var slider_mqid = 'module_question_'+mqid+'_slider';
	var slider_button = document.getElementById(slider_mqid+"_button");
	var slider_range = document.getElementById(slider_mqid);
	
	$('#'+slider_button.id).bind('keydown', mqid, handle_keys);
	$('#'+slider_range.id).bind('click', mqid, seek_slider);
	var instance = this;
	
	var xDelta = 0, yDelta = 0;
	var xStart = 0, yStart = 0;

	function enddrag(e) {
		in_drag = false;
		document.onmouseup = null;
		document.onmousemove = null;
		e = e || window.event;
		set_value(mqid, parseInt($('#'+slider_button.id).css('left')));
		slider_button.className = 'qb_slider_button';
	}

	function drag(e) {
		e = e || window.event;
		xDelta = xStart - parseInt(e.clientX);
		var new_pos = check_limits((parseInt($('#'+slider_button.id).css('left')) - xDelta), slider_mqid);
		set_value(mqid, new_pos, (slider_mode[mqid]!=1));
		if(slider_mode[mqid]!=1)
			slider_button.style.left = new_pos+'px';
		xStart = findPosX(slider_button);
		in_drag = slider_mqid;
		slider_button.className = 'qb_slider_button qb_slider_button_selected';
	}

	function md(e) {
		e = e || window.event;
		xStart = findPosX(slider_button);
		document.onmouseup = enddrag;
		document.onmousemove = drag;
		slider_button.className = 'qb_slider_button qb_slider_button_selected';
		return false;
	}
	slider_button.onmousedown = md;
}	

function check_limits(seek_val, slider_mqid) {
	if(isNaN(seek_val))
		seek_val = 0;
	if (seek_val<slider_min[slider_mqid])
		seek_val = slider_min[slider_mqid];
	if (seek_val>slider_max[slider_mqid])
		seek_val = slider_max[slider_mqid];
	return seek_val;
}

function seek_slider(e) {
	e = e || window.event;
	mqid = e.data;
	var slider_mqid = 'module_question_'+mqid+'_slider';
	var slider_button = document.getElementById(slider_mqid+"_button");
	var slider_range = document.getElementById(slider_mqid);

	if (slider_button && in_drag==false) {
		var x_pos = findPosX(slider_button);
		var current_pos = parseInt($('#'+slider_button.id).css('left'));
		var slider_button_width = Math.round(parseInt($('#'+slider_button.id).css('width'))/2, 0);	
		var new_pos = check_limits(current_pos+parseInt(e.clientX)-x_pos-slider_button_width, slider_mqid);
		slider_button.style.left = new_pos+'px';
		slider_button.className = 'qb_slider_button';
		set_value(mqid, parseInt($('#'+slider_button.id).css('left')));		
	}
}

function set_value(mqid, x, no_snap) {
	var mqid_question = 'module_question_'+mqid;
	var slider_mqid = 'module_question_'+mqid+'_slider';
	
	var total = slider_values[mqid].length-1;
	var range = slider_max[slider_mqid] - slider_min[slider_mqid];
	var nearest = (total/range)*x;	
	document.getElementById(mqid_question).value = slider_values[mqid][Math.round(nearest)];
	
	slider_selected_values[mqid] = slider_values[mqid][Math.round(nearest)];
	if(slider_mode[mqid]!=2 && !no_snap)
		place_slider(mqid);
}		

function place_slider(mqid) {
	var mqid_question = 'module_question_'+mqid;
	var mqid_obj = document.getElementById(mqid_question);
	if (mqid_obj) {
		for (c=0;c<slider_values[mqid].length;c++) {
			if (slider_values[mqid][c]==mqid_obj.value) {
				var slider_button = document.getElementById(mqid_question+"_slider_button");
				if(mqid_obj.value>1) {
					slider_button.className = 'qb_slider_button';
					toggle_slider_others(mqid);
				}
				slider_button.style.left = (c==0 ? '0' : (slider_snap_points[mqid][c]-slider_snap_points[mqid][0]-Math.round($(slider_button).width()/4)))+"px";
				break;
			}
		}
	}
}

function get_total_to_pos(mqid, pos) {
	var total_pos = 0;
	for (c=0;c<pos;c++)
		total_pos+=(c==0 ? slider_snap_points[mqid][c]/2 : slider_snap_points[mqid][c]);
		
	return total_pos;	
	
}

function toggle_slider_others(mqid) {

	var mqid_question = 'module_question_'+mqid;
	var mqid_obj = document.getElementById(mqid_question);
	
	var im = document.images;
 	for( var i=0;i<im.length; i++) {
		if(im[i].name!=null) {
			if(im[i].name.substr(0, mqid_question.length)==mqid_question) {
				var rex = new RegExp("but_radio_o");
				var m = rex.exec(im[i].src);
				if(m=="but_radio_o") {
					im[i].src = img_path + "but_radio_" + ((im[i].name.substr(mqid_question.length+1)==mqid_obj.value) ? "on" : "off")+ ".gif";
				} else {
					im[i].className = "qb_option_image_" + ((im[i].name.substr(mqid_question.length+1)==mqid_obj.value) ? "on" : "off");
				}
			}
		}
	}
		
}

function select_other(mqid, other_value) {
	var mqid_question = 'module_question_'+mqid;
	var slider_button = document.getElementById(mqid_question+'_slider_button');
	var slider_range = document.getElementById(mqid_question+'_slider');
	var slider_mqid = 'module_question_'+mqid+'_slider';
	var mqid_obj = document.getElementById(mqid_question);
		
	place_slider_off(mqid);
	mqid_obj.value = other_value;
}

function resize_slider(mqid, force_place) {
	var slider_header_id = 0;
	var mqid_question = 'module_question_'+mqid;
	var slider_button = document.getElementById(mqid_question+'_slider_button');
	var slider_range = document.getElementById(mqid_question+'_slider');
	var slider_mqid = 'module_question_'+mqid+'_slider';
	
	slider_header = document.getElementById("mq_"+mqid+"_headers");
	if(!slider_header && slider_range.relatedHeader)
		slider_header = document.getElementById("mq_"+slider_range.relatedHeader+"_headers");
		
	var full_width = $(slider_header).width();
	var header_kids = $('TH', slider_header);
	for(t=0;t<header_kids.length;t++) {
		if(header_kids[t].className=='qb_slider_other_header') {
			full_width = full_width-$(header_kids[t]).width();
		} else {
			slider_snap_points[mqid][t] = header_kids[t].offsetLeft+Math.round($(header_kids[t]).width()/2)+parseInt($(header_kids[t]).css('padding-left'))+parseInt($(header_kids[t]).css('padding-right'));			
		}
	}
	
	var slider_button_width = parseInt($('#'+slider_button.id).css('width'));
	var slider_left_margin = Math.round(slider_snap_points[mqid][0]-($(slider_button).width()/2));
	var slider_right_margin = Math.round(full_width-Math.round(slider_snap_points[mqid][slider_snap_points[mqid].length-1]))-($(slider_button).width()/2);
	var border_left = parseInt($('.qb_slider_bg').css('border-left-width'));
	var border_right = parseInt($('.qb_slider_bg').css('border-right-width'));
	var slider_width = full_width-slider_left_margin-slider_right_margin-border_left-border_right;

	slider_range.style.width = slider_width+'px';
	slider_range.style.marginRight = slider_right_margin+'px';
	slider_range.style.marginLeft = slider_left_margin+'px';
	
	if(!slider_min[slider_mqid])
		slider_min[slider_mqid] = 0;			

	slider_max[slider_mqid] = slider_width+slider_min[slider_mqid]-slider_button_width;
	if(slider_mode[mqid]!=2 || force_place!=null) {
		place_slider_off(mqid);
		place_slider(mqid);
	}

}

function place_slider_off(mqid) {
	var mqid_question = 'module_question_'+mqid;
	var slider_button = document.getElementById(mqid_question+'_slider_button');
	var slider_range = parseInt($('#'+mqid_question+'_slider').css('width'));
	
	slider_button.className = 'qb_slider_button qb_slider_button_waiting';
	var slider_button_width = parseInt($('#'+slider_button.id).css('width'));
	
	switch(slider_start_pos[mqid]) {
		case "2":
			slider_button.style.left = '0px';		
			break;

		case "1":
			slider_button.style.left = ((slider_range/2)-(slider_button_width/2))+'px';		
			break;
		
		case "0":
		default:
			slider_button.style.left = '-'+((slider_button_width*2)+5)+'px';
			break;			
	}
	
		
}

$(window).resize(function() {
	for(ri=0;ri<sliders.length;ri++)
		resize_slider(sliders[ri]);
});	

$(window).ready(function() {
	create_sliders();
	document.body.ondrag = function() { if(in_drag) return false } ;
	document.body.onselectstart = function() { if(in_drag) return false } ;
	for(i=0;i<sliders.length;i++) {
		place_slider(sliders[i]);
		resize_slider(sliders[i]);
	}
	$('.qnnr_overall_container').css('visibility', 'visible');
});	

