var IE = false;

if (!document.attachEvent) {
    // firefox & friends
    window.addEventListener('load', psdSliderInit,true);
} else {
    // ie
	IE = true;
    window.attachEvent('onload',psdSliderInit);
}

function psdSliderInit() {
	var divs = document.getElementsByTagName("div");
	var c = divs.length;
	for (var i=0;i<c;i++) {
		var d = divs[i];
		if (!d.id) continue;
		var r = d.id.match(/^sl_c_([a-z]+)$/);
		if (!r) continue;
	
		new psdSlider(r[1]);
	}
	
	var inp = document.getElementsByTagName("input");
	var c = inp.length;
	for (var i=0;i<c;i++) {
		var d = inp[i];
		if (!d.name) continue;
		var r = d.name.match(/^add_([0-9]+)$/);
		if (!r) continue;
	
		d.onclick = psdUpdatePrice;
	}
	
	psdUpdatePrice();
}

function psdSlider(id) {
	var self = this;
	this.id = id;
	this.left = 0;
	this.mDown = false;
	this.mDownX = 0;
	this.maxLeft = 200;
	this.cX = 0;
	
	this.from = 0;
	this.to = 0;
	this.step = 0;
	this.price_from = 0;
	this.price_to = 0;
	this.price_step = 0;
	this.infinite = 0;
	
	
	this.init = function() {		
		psdAtt("sl_d_"+this.id, "mousedown", this.down);
		psdAtt("sl_d_"+this.id, "mouseup", this.up);
		psdAtt("sl_d_"+this.id, "mousemove", this.move);
		psdAtt("sl_c_"+this.id, "mouseout", this.up);
		
		var o = document.getElementById("sl_c_"+this.id);
		this.cX = findPos(o);
		
		this.from = parseInt(o.getAttribute("from"));
		this.to = parseInt(o.getAttribute("to"));
		this.step = parseInt(o.getAttribute("step"));
		this.price_from = parseFloat(o.getAttribute("price_from"));
		this.price_to = parseFloat(o.getAttribute("price_to"));
		this.price_step = parseFloat(o.getAttribute("price_step"));
		this.infinite = parseFloat(o.getAttribute("infinite"));
		
	//	if (this.infinite == 0) this.to--;
	
	}	
	
	this.updatePrice = function() {
//		var s = self.maxLeft / (self.to);

		//var x = Math.round(self.left/s)+self.from;
		var n = Math.round((self.left/(self.maxLeft/self.to))/self.step);
//		self.log(n);
		var x = n*self.step + self.from
		
		var o = document.getElementById("sl_t_"+self.id);
		var p = document.getElementById("sl_c_"+self.id);
		var i = document.getElementById("sl_i_"+self.id);
		if (!o) return;
		if (x <= self.to) {
			o.innerHTML = x;
			p.setAttribute("price", (self.price_step*n));
			i.value = x;
		}
		else {
			o.innerHTML = "infinite";
			p.setAttribute("price", self.infinite);
			i.value = x;
		}
		
		psdUpdatePrice();
	}
	
	this.move = function(e) {
		if (!self.mDown) return;
		if (!e) e = window.event;
		
		var mX = 0;
		if (IE) { // grab the x-y pos.s if browser is IE
	    	mX = e.clientX + document.body.scrollLeft;
	  	} else {  // grab the x-y pos.s if browser is NS
	    	mX = e.pageX;
	  	}
		var obj = document.getElementById("sl_d_"+self.id);
		if (!obj) return;
		self.left = self.left + (mX - self.mDownX);
		self.mDownX = mX;
		if (self.left > self.maxLeft) self.left = self.maxLeft; 
		if (self.left < 0) self.left = 0;
		obj.style.left = self.left+"px";
		
		self.updatePrice();
		
	}
	
	this.up = function(e) {
		self.mDown = false;
	}
	
	this.down = function(e) {
		if (!e) e = window.event;
		
		
		var mX = 0;
		if (IE) { // grab the x-y pos.s if browser is IE
	    	mX = e.clientX + document.body.scrollLeft;
	  	} else {  // grab the x-y pos.s if browser is NS
	    	mX = e.pageX;
	  	}
		
		self.mDown = true;
		self.mDownX = mX;
	}
	
	this.log = function(str) {
		var obj = document.getElementById("log");
		if (!obj) return;
		obj.innerHTML += str+"\n";
	}
	
	this.init();
}


function psdUpdatePrice() {
	var divs = document.getElementsByTagName("div");
	var c = divs.length;
	
	var total = 0;
	for (var i=0;i<c;i++) {
		var d = divs[i];
		if (!d.id) continue;
		var r = d.id.match(/^sl_c_([a-z]+)$/);
		if (!r) continue;
	
		var price = parseFloat(d.getAttribute("price"));
		total += price;
	}
	
	var inp = document.getElementsByTagName("input");
	var c = inp.length;
	
	for (var i=0;i<c;i++) {
		var d = inp[i];
		if (!d.name) continue;
		var r = d.name.match(/^add_([0-9]+)$/);
		if (!r) continue;
		if (!d.checked) continue;
	
		var price = parseFloat(d.getAttribute("price"));
		total += price;
	}
	
	var o = document.getElementById("sl_price");
	if (!o) return;
	o.innerHTML = total;
}

function psdAtt(obj, ev, f) {
	var o = document.getElementById(obj);
	
	if (!document.attachEvent) {
	    // firefox & friends
	    o.addEventListener(ev, f,true);
	} else {
	    // ie
	    o.attachEvent('on'+ev,f);
	}
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
					curleft += obj.offsetLeft;
				//	curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
		
//	return [curleft,curtop];
	return curleft;
}
