var WidgetScale = Class.create();

WidgetScale.prototype = {
	widgets:new Array(),		
	initialize:function (){		
		var body = $$('body')[0];		
		if(Object.isElement(body)){			
			var element = null;
			for(var i=0; (element = body.down('div[name="widget:scale"]',i)) != null; i++){
				element['align'] = 'left';				
				this.initWidget(element,i);				
			}			
		}
	},
	
	initWidget:function(element,i){			
		var bullet = element.down('img[name="widget:scale:select"]');					
		if(Object.isElement(bullet)){			
			bullet.hide();
			var elm_id = ':scale:'+i;
			var input_id = element.getAttribute('widget:rezult:id');
			element.setAttribute('widget:id',elm_id);
			bullet.setAttribute('widget:id',elm_id);
			bullet.setAttribute('widget:rezult:id',input_id);			
			this.widgets[elm_id] = new Array();
			this.widgets[elm_id].sizes = new Array(0,element.getWidth()-bullet.getWidth());												
			var wgt_value = element.getAttribute('widget:value');
			var value = false;
			if(wgt_value != null)
				value = parseInt(wgt_value);				
			if( value != 'NaN' && Object.isNumber(value))
				if(this.setWidgetValue(bullet,value,elm_id,true))
					bullet.show();
			this.initBulletDragEvent(bullet,element,elm_id);
			this.initWidgetEvent(element);
			element.appendChild(Builder.node('input',{'type':'hidden','id':input_id,'name':input_id,'value':'-1'}));
		}	
	},

	setWidgetValue:function(bullet, value, elm_id, tod){
		if(bullet.name != 'widget:scale:select') return false;
		if(!elm_id) elm_id = bullet.getAttribute('widget:id');
		if(this.widgets.include(elm_id) && this.widgets[elm_id].sizes[0] >= value && this.widgets[elm_id].sizes[1] <= value || tod){
			if(tod && value > this.widgets[elm_id].sizes[1]) 
				value = Math.min(this.widgets[elm_id].sizes[1],value);
			else if(tod && value < this.widgets[elm_id].sizes[0])
				value = Math.max(this.widgets[elm_id].sizes[0],value);	
			rezult_id = bullet.getAttribute('widget:rezult:id');			
			if(rezult_id != null){
				var rezult_elm = $(rezult_id);
				if(rezult_elm) rezult_elm.value = value;					
			}			
			bullet.setStyle({'left':value});			
			return true;
		}
		return false;	
	},
	
	initWidgetEvent:function(element){
		element.stopObserving().observe('click', (
			(function(event) { 				
				event.stop();
				var element = event.element();				
				var bullet = element.down('img[name="widget:scale:select"]');				
				var eventX = event.pointerX();
				var viewportoffset  = element.viewportOffset();								
				if(Object.isElement(bullet))				
					if(this.setWidgetValue(bullet,eventX-viewportoffset[0],false,true))
						bullet.show();
			}).bind(this)
		));
	},
	
	initBulletDragEvent:function(bullet,element,elm_id){
		if(!elm_id) elm_id = bullet.getAttribute('widget:id');				
		this.widgets[elm_id].event = new Array();		
		this.widgets[elm_id].event.canDrag = false;	
		element.stopObserving().observe('mousedown', (
			(function(event) { 				
				event.stop();
				var bullet = event.element();				
				var elm_id = bullet.getAttribute('widget:id');				
				this.widgets[elm_id].event.canDrag = true;					
				this.widgets[elm_id].event.mouseOpenPosX = event.pointerX();								
				this.widgets[elm_id].event.left = parseInt(bullet.getStyle('left'));
			}).bind(this)
		)).observe('mouseup', (
			(function(event) { 				
				event.stop();	
				var bullet = event.element();
				var elm_id = bullet.getAttribute('widget:id');				
				this.widgets[elm_id].event.canDrag = false;					
			}).bind(this)
		)).observe('mouseover', (
			(function(event) { 				
				event.stop();
				var bullet = event.element();				
				var elm_id = bullet.getAttribute('widget:id');				
				this.widgets[elm_id].event.canDrag = false;					
			}).bind(this)
		)).observe('mousemove', (
			(function(event) { 				
				event.stop();
				var bullet = event.element();				
				var elm_id = bullet.getAttribute('widget:id');
				if(this.widgets[elm_id].event.canDrag){																														
					var posX = event.pointerX()-this.widgets[elm_id].event.mouseOpenPosX+this.widgets[elm_id].event.left;
					this.setWidgetValue(bullet,posX,elm_id,true);										
				}	
			}).bind(this)
		));
		
		bullet.stopObserving().observe('mousedown', (
			(function(event) { 				
				event.stop();
				var bullet = event.element();				
				var elm_id = bullet.getAttribute('widget:id');				
				this.widgets[elm_id].event.canDrag = true;					
				this.widgets[elm_id].event.mouseOpenPosX = event.pointerX();								
				this.widgets[elm_id].event.left = parseInt(bullet.getStyle('left'));
			}).bind(this)
		)).observe('mouseup', (
			(function(event) { 				
				event.stop();	
				var bullet = event.element();
				var elm_id = bullet.getAttribute('widget:id');				
				this.widgets[elm_id].event.canDrag = false;					
			}).bind(this)
		)).observe('mouseover', (
			(function(event) { 				
				event.stop();
				var bullet = event.element();				
				var elm_id = bullet.getAttribute('widget:id');				
				this.widgets[elm_id].event.canDrag = false;					
			}).bind(this)
		)).observe('mousemove', (
			(function(event) { 				
				event.stop();
				var bullet = event.element();				
				var elm_id = bullet.getAttribute('widget:id');
				if(this.widgets[elm_id].event.canDrag){																														
					var posX = event.pointerX()-this.widgets[elm_id].event.mouseOpenPosX+this.widgets[elm_id].event.left;
					this.setWidgetValue(bullet,posX,elm_id,true);										
				}	
			}).bind(this)
		));		
	}
		
	
}

document.observe('dom:loaded', 
	(function () { 
		new WidgetScale();				
	}).bind(this)
);
