// site dragbars (for bolan.prisfakta.se)
var sDragBars = {
	elems: [
		{
			id:"bottenlan-dragbar",
			minVal:0,
			maxVal:4000000,
			copyValTo:"bottenlan"
		},
		{
			id:"topplan-dragbar",
			minVal:0,
			maxVal:1000000,
			copyValTo:"topplan"
		}
	],
	pointer: $(document).create("img", {alt:"V", style:"position:absolute; margin:-6px 0 0 -3px; width:6px; height:12px; cursor:pointer;", src:"/images/triangle.png", title:"Dra för att ändra"}),
	init: function() {
		var D = sDragBars;
		for (var i=0; i<D.elems.length; i++) {
			var elem = D.elems[i];
			if (!$$(elem.id) || !$$(elem.copyValTo))
				continue;
			var pointer = $(D.pointer.cloneNode(true)).setAttributes({id: elem.id+"-pointer"});
			var bar = $(document).create("div", {id:elem.id+"-container", style:"position:relative; height:2px; background:#999; margin:0 0 0.5em 0;"}, false, pointer);
			pointer.addEvent("mousedown", D.calcCurWidth);
			pointer.i = i;
			DragDrop.initElement(pointer, function(x, y) {
				x = Math.between(0, x, DragDrop.draggedObject.curWidth);
				sDragBars.moveTo(x/DragDrop.draggedObject.curWidth, this.i);
				return [x, 0];
			});
			$$(elem.id).replace(bar);
			
			$$(elem.copyValTo).addEvent("keyup", function() {
				sDragBars.valUpdated(Number(this.value), this.i);
			});
			$$(elem.copyValTo).i = i;
			
			// om nåt är förifyllt är det bra att köra det
			$$(elem.copyValTo).triggerEvent("keyup");
		}
	},
	calcCurWidth: function() {
		this.curWidth = parseInt($(this.parentNode).getStyle("width"));
	},
	moveTo: function(pos, i) {
		var elem = sDragBars.elems[i];
		$$(elem.copyValTo).value = Math.round( elem.minVal + pos*(elem.maxVal-elem.minVal), -2);
	},
	valUpdated: function(x, i) {
		if (isNaN(x))
			return;
		var elem = sDragBars.elems[i];
		x = Math.between(elem.minVal, x, elem.maxVal);
		var p = $$(elem.id+"-pointer");
		p.tmp = sDragBars.calcCurWidth;
		p.tmp();
		p.setStyle("left", (x-elem.minVal)/(elem.maxVal-elem.minVal)*p.curWidth+"px");
	}
};
DOMAssistant.DOMReady(sDragBars.init);


// general
function init() {
	Math.between = function(min, v, max) { return (v<min?min:(v>max?max:v)); }
	Math.oldRound = Math.round;
	Math.round = function(n, p) { // rounding function with precision (like PHP)
		return (!p || isNaN(p = parseInt(p)) ? Math.oldRound(n) : Math.oldRound(n * Math.pow(10, p)) / Math.pow(10, p));
	};
}
init();

// modified from quirksmode.org
function addEventSimple(obj,evt,fn) {
	if (obj.addEventListener)
		obj.addEventListener(evt,fn,false);
	else if (obj.attachEvent)
		obj.attachEvent('on'+evt,fn);
}
function removeEventSimple(obj,evt,fn) {
	if (obj.removeEventListener)
		obj.removeEventListener(evt,fn,false);
	else if (obj.detachEvent)
		obj.detachEvent('on'+evt,fn);
}
var DragDrop = {
	noCheck : function(x,y) {
		return [x,y];
	},
	initElement : function (elem, checkDragPosFn) {
		$(elem).checkDragPos = checkDragPosFn || DragDrop.noCheck;
		elem.addEvent("mousedown", DragDrop.startDrag);
	},
	startDrag : function (e) {
		var d = DragDrop;
		if (d.draggedObject)
			d.releaseElement();
		d.startX = this.offsetLeft;
		d.startY = this.offsetTop;
		d.draggedObject = this;
		this.addClass("dragged");

		var evt = e || window.event;
		d.initialMouseX = evt.clientX;
		d.initialMouseY = evt.clientY;
		$(document).addEvent('mousemove', d.dragMouse);
		$(document).addEvent('mouseup', d.releaseElement);
		this.focus();
		return false;
	},
	dragMouse : function (e) {
		var evt = e || window.event;
		var d = DragDrop;
		var dx = evt.clientX - d.initialMouseX;
		var dy = evt.clientY - d.initialMouseY;
		var pos = d.draggedObject.checkDragPos(d.startX + dx, d.startY + dy);
		d.draggedObject.setStyle({
			left : pos[0] + "px",
			top : pos[1] + "px"
		});
		return false;
	},
	releaseElement : function() {
		var d = DragDrop;
		$(document).removeEvent('mousemove', d.dragMouse);
		$(document).removeEvent('mouseup', d.releaseElement);
		d.draggedObject.removeClass("dragged");
		d.draggedObject = null;
	}
}


