/*__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

- SPLITTERS LIBRARY -

SAMNAKA (c) 2008-2009 
Web : www.samnaka.fr
Contact : contact@samnaka.fr

This code source is property of SAMNAKA (c) company.
Ce code source est la propriété de la société SAMNAKA (c)
__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ */

var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}
function cancelevent (){
      window.event.returnValue = false;
}
// Check if navigator is Internet Explorer or not
function navigatori_is_IE() {	
	
	if (navigator.appName == 'Microsoft Internet Explorer')
		return true;
	else
		return false
}
/* Return the mouse position into and object.x / object.y */
function get_Mouse_Position(ev){	
				
	if(ev.pageX || ev.pageY){
	      return {x:ev.pageX, y:ev.pageY};
	}
	return {
	      x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
	      y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}

// Splitter class definition
var class_splitter = Class.create();
class_splitter.prototype = { 
	
	initialize:function(v_container, v_input_min, v_input_max, v_input_min_display, v_input_max_display,v_min_string, v_max_string) {
				
		try {
			

			this.class_Name = "class";
			if (navigatori_is_IE()) this.class_Name = "className";		
			
			this.min_string = v_min_string;
			this.max_string = v_max_string;
						
			this.container = doc_id(v_container);
			this.container_height = this.container.clientHeight;
			this.container_width = this.container.clientWidth;
								
			this.array_values = new Array();
									
			this.input_min = doc_id(v_input_min);
			this.input_max = doc_id(v_input_max);						

			this.input_min_display = undefined;
			this.input_max_display = undefined;
			
			if (v_input_min_display != undefined) this.input_min_display = doc_id(v_input_min_display);
			if (v_input_max_display != undefined) this.input_max_display = doc_id(v_input_max_display);									
			
			this.btn_min = document.createElement('div');
			this.btn_min.setAttribute(this.class_Name, "splitter_btn_min");		
			this.btn_min_content = document.createElement('div');
			this.btn_min_content.setAttribute(this.class_Name, "splitter_btn_min_content");		
			this.btn_min.appendChild(this.btn_min_content);
			
			this.btn_max = document.createElement('div');
			this.btn_max.setAttribute(this.class_Name, "splitter_btn_max");		
			this.btn_max_content = document.createElement('div');
			this.btn_max_content.setAttribute(this.class_Name, "splitter_btn_max_content");		
			this.btn_max.appendChild(this.btn_max_content);
			
			this.scrollbar = document.createElement('div');
			this.scrollbar.setAttribute(this.class_Name, "splitter_scrollbar");								
			
			this.scrollbar_selected = document.createElement('div');
			this.scrollbar_selected.setAttribute(this.class_Name, "splitter_scrollbar_selected");
			
			
			this.container.appendChild(this.btn_min);
			this.container.appendChild(this.btn_max);
			this.container.appendChild(this.scrollbar);
			this.container.appendChild(this.scrollbar_selected);

			this.value_min = 0;		
			this.value_max = this.container.offsetWidth;
						
			this.btn_min.style.left = -this.btn_min.clientWidth +"px";
			this.btn_min.style.top = (this.container_height/2) - (this.btn_min.clientHeight/2) +"px";			

			this.btn_max.style.left = (this.container_width) +"px";
			this.btn_max.style.top = (this.container_height/2) - (this.btn_max.clientHeight/2) +"px";			

			this.scrollbar.style.left = 0;
			this.scrollbar.style.width = (this.container_width-4) +"px";
			this.scrollbar.style.top = (parseInt(this.container_height)/2) - ( parseInt(this.scrollbar.clientHeight)/2) +"px";			
			this.scrollbar.style.zIndex = 0;			

			this.scrollbar_selected.style.left = ((parseInt(this.btn_min.style.left.replace("px","")) +parseInt(this.btn_min.clientWidth))-3) +"px";
			this.scrollbar_selected.style.width = ( (parseInt(this.btn_max.style.left.replace("px","")) - parseInt(this.scrollbar_selected.style.left.replace("px","")))+3) +"px";
			this.scrollbar_selected.style.top = (this.container_height/2) - (this.scrollbar_selected.clientHeight/2) +"px";			
			this.scrollbar_selected.style.zIndex = 1;						
			
			/* Adding the events */
			var that = this;
			addEventListener2(this.btn_min, "mousedown", function(event, Object) { that.btn_mouseDown(event,"MIN"); });
			addEventListener2(this.btn_max, "mousedown", function(event, Object) { that.btn_mouseDown(event,"MAX"); });
			addEventListener2(this.btn_min, "mouseup", function(event) { that.btn_mouseUp(event); });
			addEventListener2(this.btn_max, "mouseup", function(event) { that.btn_mouseUp(event); });
			
			addEventListener2(this.container, "mousemove", function(event) { that.btn_mouseMove(event); });

			this.mouse_position_x = undefined;
			this.btn_position_x = undefined;
			this.btn_selected = undefined;
			this.btn_selected_name = "";
			
			this.display_values();
		
		}catch(error) { }		
	},
	
	initialize_values:function(v_values, v_separator) {
		
		if (typeof(v_separator) == "undefined") v_separator = ";";		
		this.array_values = v_values.split(v_separator);
	},
	
	// Clicking a button 	
	btn_mouseDown:function (evt, v_object) {
		
		if (v_object == "MIN") {
			
			this.btn_selected = this.btn_min;
			this.btn_selected_name = v_object;
			
		}else if (v_object == "MAX") {
			
			this.btn_selected = this.btn_max;
			this.btn_selected_name = v_object;
			
		}
		
		this.mouse_position_x = get_Mouse_Position(evt).x;
		this.btn_position_x = parseInt(this.btn_selected.style.left.replace("px",""));		
		
	},
	
	// Release the click 
	btn_mouseUp:function (evt) {
		
		this.mouse_position_x = undefined;
		this.btn_position_x = undefined;
		this.btn_selected = undefined;
		
		this.btn_max.style.zIndex = 100;
		this.btn_min.style.zIndex = 100;
	},
	
	// Moving the mouse
	btn_mouseMove:function (evt) {
				
		if (this.btn_selected == undefined) return -1;
		
		var flag_done = false;
		
		// Getting mouse position
		var mouse_position = get_Mouse_Position(evt);		
				
		// Calculating the new button position
		var v_left = parseInt(this.btn_position_x) + ( parseInt(mouse_position.x) - parseInt(this.mouse_position_x) );		
		
		var v_direction = 1;
		if (parseInt(mouse_position.x) < parseInt(this.mouse_position_x)) v_direction = -1;
											
		v_btn_max_left = parseInt(this.btn_max.offsetLeft);
		v_btn_min_left = parseInt(this.btn_min.offsetLeft);		
		v_btn_max_width = parseInt(this.btn_max.offsetWidth);
		v_btn_min_width = parseInt(this.btn_min.offsetWidth);		
		
		if (this.btn_selected_name == "MIN") if (v_direction == 1) if ((v_btn_min_left + v_btn_min_width)>= v_btn_max_left) v_left = (v_btn_max_left-v_btn_min_width);

		if (this.btn_selected_name == "MAX") if (v_direction == -1) if (v_btn_max_left <= (v_btn_min_left + v_btn_min_width)) v_left = (v_btn_min_left + v_btn_min_width);
				
		if ( parseInt(v_left) <= -this.btn_min.clientWidth-2) v_left = -this.btn_min.clientWidth;
		
		if ( parseInt(v_left) >   this.container_width-2)    v_left = this.container_width;

		if (this.btn_selected_name == "MIN") {
			this.value_min = v_left + v_btn_min_width;
		}

		if (this.btn_selected_name == "MAX") {
			this.value_max = v_left;
		}
				
		//this.print_debug(this.container_width +"min = " +this.value_min +" - max = " +this.value_max);
		
		/* Positionning the button */
		this.btn_selected.style.left = v_left +"px";
		this.scrollbar_selected.style.left = ((parseInt(this.btn_min.style.left.replace("px","")) +parseInt(this.btn_min.clientWidth))-3) +"px";
		this.scrollbar_selected.style.width = ( (parseInt(this.btn_max.style.left.replace("px","")) - parseInt(this.scrollbar_selected.style.left.replace("px","")))+3) +"px";
					
		// Setting the values related to the new position
		this.display_values();						
		
	},
	
	display_values:function() {
		
		try {
			
			var v_value_min = this.value_min;
			var v_value_max = this.value_max;
			
			if ( (this.value_min<=0) && (this.min_string.length>0)) {
				v_value_min = this.min_string;
				this.input_min.value = this.array_values[this.value_min];
			}else {
				if ( (this.value_min>=0) && (this.value_min<= this.array_values.length-1) ) {
					v_value_min = this.array_values[this.value_min];
					this.input_min.value = this.array_values[this.value_min];
				}
			}
			
			if ( (this.value_max>=this.array_values.length-1) && (this.max_string.length>0)) {
				v_value_max = this.max_string;
				this.input_max.value = this.array_values[this.value_max];
			}else {		
				if ((this.value_max>=0) && (this.value_max<= this.array_values.length-1)) {
					v_value_max = this.array_values[this.value_max];		
					this.input_max.value = this.array_values[this.value_max];
				}
			}		
			
			if (this.btn_min_content != null) {
				if (this.input_min_display!= undefined) 
					this.input_min_display.innerHTML = v_value_min;
				else
					this.btn_min_content.innerHTML = v_value_min;
			}
			
			if (this.btn_max_content != null) {			
				if (this.input_max_display!= undefined) 
					this.input_max_display.innerHTML = v_value_max;
				else
					this.btn_max_content.innerHTML = v_value_max;		
			}
			
		}catch(err) {
			
			
			
		}
	},
	
	set_values:function(v_value_min, v_value_max) {		
		
		if (typeof(v_value_min) == "undefined") v_value_min = "";
		if (typeof(v_value_max) == "undefined") v_value_max = "";
		
		if (v_value_min.length<=0) v_value_min = this.array_values[0];
		if (v_value_max.length<=0) v_value_max = this.array_values[this.array_values.length-1];
		
		v_min_left = null;
		v_max_left = null;
		
		for (var i=0;i<=this.array_values.length-1;i++) {
			
			//if (v_min_left == null) if (this.array_values[i] == v_value_min) v_min_left = i;
			
			//if (v_max_left == null) if (this.array_values[i] == v_value_max) v_max_left = i;			

			if (this.array_values[i] == v_value_min) v_min_left = i;
			
			if (this.array_values[i] == v_value_max) v_max_left = i;			

		}		
		
		if (this.btn_min != null) {
			if (v_min_left != null) 	{
				this.btn_min.style.left = ( parseInt(v_min_left) - parseInt(this.btn_min.offsetWidth) ) +"px";
				this.value_min = v_min_left;
			}
		}
		if (this.btn_max != null) {
			if (v_max_left != null) 	{
				this.btn_max.style.left = v_max_left +"px";		
				this.value_max = v_max_left;
			}
		}
		
		this.display_values();
	},
	
	print_debug:function(v_message) {
		
		if (!doc_id("desktop_debug")) {
			
			var div_debug = document.createElement("div");
			div_debug.setAttribute("id","desktop_debug");
			div_debug.style.position = "fixed";
			div_debug.style.width = "200px";
			div_debug.style.height = "200px";
			div_debug.style.right = "0";
			div_debug.style.top = "0";
			div_debug.style.backgroundColor = "#ffffff";
			div_debug.style.border = "solid 1px #000000";
			div_debug.style.zIndex = 1000;
			//div_debug.style.position = "absolute";			
			document.body.appendChild(div_debug);
		}
		
		doc_id("desktop_debug").innerHTML = v_message;		
		
	}			
};
