	var obj;
	var objknob;
	var oldmouseX;
	var mouseX;
	var stxtbox;
	var etxtbox;
	var ac = 0;
	var lastclick;
	var ivalue; 
	var oox = {	prop1:"test" };
	var ev_ms = false;
	var mouserx;
	var pushed = '';
	var offset;
		
	aapp = new app;
	aapp.myfunction();
	$e = function(id) {
		return (document.getElementById) ? document.getElementById(id): document.all[id];
	}
	
	$t = function(tag, obj) {
		if (obj) {
			return obj.getElementsByTagName(tag);
		} else {	
			return document.getElementsByTagName(tag);
		}	
	}
	
	$eve = function(ev) {
		ev = ev || window.event ;
		return ev.target || ev.srcElement;
	}

	$a = function(vobj,attrib) {
		if (typeof(vobj) != "object") {
			return $e(vobj).getAttribute(attrib);
		} else {	
			return vobj.getAttribute(attrib);
		}
	}	


function app() {
	this.myfunction=function() {  }	
}	
	

	
Array.prototype.indexOf = function(val, fromIndex) {
	if (typeof(fromIndex) != 'number') fromIndex = 0;
	for (var index = fromIndex,len = this.length; index < len; index++)
		if (this[index] == val) return index;
	return -1;
}

function getDocElementById(id) {
	return (document.getElementbyId) ? document.getElementById(id): document.all[id];
}

	function slidemdown(e) {
		activeslide(e);
	}
	
	function slidedblclick(){
		if (obj.className.substr(0,6) != "slider") {
			if (obj.className.substr(1,4) != "knob") {
				objknob = obj.parentNode;
				obj = objknob.parentNode;
			}
			else {
				objknob = obj;
				obj = obj.parentNode;
			}	
			obj.knob = objknob;
		}

		if (!(obj.discreteScale)) {
			//set NScale knob to the value 
			setKnobByValue(obj.knob);			
			showKnobScale(obj.knob);
		}
		// switch the knob
		value = obj.knob.value 
		if (obj.knob.id == "e") {
			obj.knob = obj.sknob;
		} else {
			obj.knob = obj.eknob;
		}
		obj.knob.value = value;
		setKnobByValue(obj.knob);			
		showKnobScale(obj.knob);
	}	
	
	function initSlide() {
		obj.inited = true;
		obj.stxtbox = document.getElementById(obj.getAttribute("stxtbox"));
		obj.etxtbox = document.getElementById(obj.getAttribute("etxtbox"));
		obj.marginLeft = parseInt(obj.getAttribute("marginLeft"));
		obj.length = obj.offsetWidth - obj.marginLeft * 2;

		// for firefox
		if (!obj.scaletype) {
			obj.scaletype = obj.getAttribute("scaletype");
			obj.scalelabel = obj.getAttribute("scalelabel");
			obj.scalecount = obj.getAttribute("scalecount");
			obj.scale = obj.getAttribute("scale");
			obj.discreteScale = obj.getAttribute("discreteScale");
			obj.maxvalue = parseFloat(obj.getAttribute("maxvalue"));
			obj.minvalue = parseFloat(obj.getAttribute("minvalue"));
		}	
				
		if (obj.scaletype=="D" || obj.scaletype =="N"){  
			obj.scalecount = obj.scalelabel.split(",").length ;
			if ( obj.scaletype =="N") { obj.scalecount = obj.scalecount - 2; }
			obj.scaleunit = obj.length/obj.scalecount;	
		} else {
			obj.scaletype ="L";	
			obj.scaleunit = 1;
		}

		obj.minleft = (obj.scaletype=="D") ? (obj.minvalue/obj.scalecount)*obj.length + obj.marginLeft: ScaleLength(obj.minvalue,false) +obj.marginLeft;
		obj.maxleft = (obj.scaletype=="D") ? (obj.maxvalue/obj.scalecount)*obj.length + obj.marginLeft - 1: ScaleLength(obj.maxvalue,false) +obj.marginLeft;
		for(var i=0;i < obj.childNodes.length; i= i + 1) {
			if (obj.childNodes[i].className == "eknob") {
				obj.eknob = obj.childNodes[i];
				obj.childNodes[i].txtbox = obj.etxtbox;
				obj.eknob.reverse = true;
		
			} else {
				if (obj.childNodes[i].className == "sknob") {
					obj.sknob = obj.childNodes[i];
					obj.childNodes[i].txtbox = obj.stxtbox;
					obj.sknob.reverse = false;
				}
			}	
		}
		obj.sknob.style.left=obj.sknob.style.left;
		obj.gap = (obj.discreteScale) ?	obj.scaleunit : parseFloat(obj.mingap);
	}

	function activeslide(ev) {
		ev = window.event || ev;
		obj = ev.srcElement || ev.target;

		//fix doubleclick for FireFox
		var d = new Date();		
		ct1 = d.getTime();
		if (lastclick) {
			if (ct1- lastclick < 300) { 	
				slidedblclick();
				return;
			}
		}
		lastclick =  ct1
		//fix
		if (obj.className.substr(0,6) != "slider") {
			if (obj.className.substr(1,4) != "knob") {
				objknob = obj.parentNode;
				obj = objknob.parentNode;
			}
			else {
				objknob = obj;
				obj = obj.parentNode;
			}	
			obj.knob = objknob;
		}	
		if (!(obj.inited)) {
			initSlide();
		}
		// tip content switch
		// tip_switch(0);

		oldmouseX = ev.clientX + document.body.scrollLeft;
		obj.knob = getCloestKnob();
		mouserx = oldmouseX - absLeft(obj);

		if (obj.knob.id == "s") {
			newleft = mouserx - obj.knob.offsetWidth;
		} else {
			newleft = mouserx;
		}
		newleft = chkmaxmin(obj.knob, newleft); 
		obj.knob.style.left = newleft + "px";
		obj.knob.value = PosValue(obj.knob);
		showKnobScale(obj.knob);
		mouseX = ev.clientX + document.body.scrollLeft;
		if (document.addEventListener) {
			//Firefox
			document.addEventListener("mousemove", moveSlider, true);
			document.addEventListener("mouseup", stopSlider, true);
		}
		else if (document.attachEvent) {
			//IE
			document.attachEvent("onmousemove", moveSlider);
			document.attachEvent("onmouseup", stopSlider);
		}
		return
	}
	
	function getCloestKnob() {
		if( oldmouseX - (obj.sknob.offsetWidth + absLeft(obj.sknob))  > absLeft(obj.eknob) - oldmouseX) {
			return obj.eknob;
		} else {
			return obj.sknob;
		}	
	} 
	
	function moveSlider(ev) {
		if (ev_ms) { return; }
		slidex= absLeft(obj);
		ev_ms = true;
		ev = window.event || ev;
		mouseX = ev.clientX+ document.body.scrollLeft;
		offset = mouseX - oldmouseX;
		oldmouseX = mouseX;
		if (obj.knob) {
			// check for min and max
			newleft = parseInt(obj.knob.style.left) + offset; 
			newleft = chkmaxmin(obj.knob, newleft);
			obj.knob.style.left = newleft + "px"
			refreshKnob(obj.knob);
		}
		ev_ms = false;
		return false;
	}
	
	function stopSlider(e) {
		if (obj.discreteScale) {
			setKnobByValue(obj.knob);
			if (!(pushed == '')) { 
				setKnobByValue(pushed); 
				pushed = ''
			}
		}	
		if (document.removeEventListener) { // Remove event listeners from 'document' (W3C).
			document.removeEventListener('mousemove', moveSlider, true)
			document.removeEventListener('mouseup', stopSlider, true)
		}
		else if (document.detachEvent) { // Remove event listeners from 'document' (IE).
			document.detachEvent('onmousemove', moveSlider);
			document.detachEvent('onmouseup', stopSlider);
		}
		action = obj.getAttribute("action");
		if (action) {
			eval(action);
		}	
	}	

	function chkmaxmin (knob, leftpos) {
		if (knob.id == 's') {
			if (leftpos + knob.offsetWidth < obj.minleft) {
				return obj.minleft - knob.offsetWidth;
			} else {
				if (leftpos + knob.offsetWidth + obj.gap/2 >= obj.maxleft) {
					return obj.maxleft - obj.gap/2 - knob.offsetWidth;
				} else if (leftpos + knob.offsetWidth + obj.gap/2 >= parseInt(obj.eknob.style.left)) {
					obj.eknob.style.left = leftpos + + knob.offsetWidth + obj.gap/2 + "px";
					refreshKnob(obj.eknob);
					pushed = obj.eknob;
				}
			} 	
		} else {
			if (leftpos < obj.minleft + obj.gap/2) {
				return obj.minleft + obj.gap/2 ;
			} else if (leftpos > obj.maxleft) {
				return obj.maxleft ;
			} else if (leftpos <= parseInt(obj.sknob.style.left) + obj.sknob.offsetWidth + obj.gap/2) {
				obj.sknob.style.left = leftpos - obj.gap/2 - obj.sknob.offsetWidth + "px";
				refreshKnob(obj.sknob);
				pushed = obj.sknob;
			} 
		}
		return leftpos;
	}

	function refreshKnob(knob) {

		knob.value = PosValue(knob);
		showKnobScale(knob);
	}	

	function LengthValue(knoblength) {
	 	if (obj.scaletype == "D" || obj.scaletype == "N") {
		 	value = Math.floor((knoblength)/obj.length * (obj.scalecount));
	 	} else {
//			return (obj.knob.reverse) ? (obj.length-knoblength)/obj.length * obj.scale - 1 : length/obj.length * obj.scale;
	 	}
		return value;
	}

	function LengthPos(knob, length) {
		var objoffset = absLeft(obj)
		return (knob.id == 's') ? length - knob.offsetWidth + obj.marginLeft: length + obj.marginLeft;
	}
	
	function PosValue(knob) {
		knoblength = PosLength(knob);
		return LengthValue(knoblength);
	 }

	function PosLength(knob) {
		return (knob.id == "s") ? knob.offsetWidth + parseInt(knob.style.left)  - obj.marginLeft: parseInt(knob.style.left) - obj.marginLeft; 
	}	

	function ScalePos(knob, scale) {
		var length = ScaleLength(scale);
		return LengthPos(knob, length);
	}
	
	function ScaleLength( scale) {
		var value;
		arr = obj.scalelabel.split(",");
		for (var i=0;i < obj.scalecount+1; i=i+1) {
			if (scale < parseFloat(arr[i])) {
				value = i-1;
				break;
			}
			value = i - 1;
		}
		nvalue1 = parseFloat(arr[value+1]);
		offset = scale - nvalue1 
		if (offset >= 0) {
			nvalue2 = parseFloat(obj.scalelabel.split(",")[value+2]);
		} else {
			nvalue2 = parseFloat(obj.scalelabel.split(",")[value]);
		}
		if ( (scale > parseFloat(obj.scalelabel.split(",")[obj.scalecount])) || (scale < parseFloat(obj.scalelabel.split(",")[1]))) {
			offset = offset / 2;
		}	
		newlength = obj.scaleunit * (value +.5) + offset / Math.abs(nvalue2-nvalue1) * obj.scaleunit ;
		return newlength;
	}


	function showKnobScale(knob) {
	 	if (obj.discreteScale) {
			knob.txtbox.value = obj.scalelabel.split(",")[knob.value];
		} else if (obj.scaletype == "N") {
			if (knob.value == obj.scalecount) {
				knob.txtbox.value = (knob.id=='s') ? obj.maxlabel: "";				
			} else {
				var value  = NScale(knob);
				if (knob.txtbox.getAttribute("dataformat")) {
					dataformat = knob.txtbox.getAttribute("dataformat");
		 			scale = eval(dataformat);
				}	
				knob.scale = scale;
	 			knob.txtbox.value = scale;
	 		}	
		}	
	}

	function setKnobByValue(knob) {
		if (knob.id=='s') {
			knob.style.left = (obj.marginLeft + obj.scaleunit * knob.value) - knob.offsetWidth + "px";
		} else {
			knob.style.left = (obj.marginLeft + obj.scaleunit * (parseInt(knob.value)+1)) + "px";
		}	
	}
	
	function NScale(knob) {
		knoblength = PosLength(knob);
		arr = obj.scalelabel.split(",");
		nvalue1 = parseFloat(arr[knob.value+1]);
		var offset = (knoblength - (knob.value+.5)*obj.scaleunit)
		if (offset > 0) {
			nvalue2 = parseFloat(obj.scalelabel.split(",")[value+2]);
			if (value + 1 == obj.scalecount){ 
				offset = offset * 2;
			}	
		} else {
			nvalue2 =  parseFloat(obj.scalelabel.split(",")[value]);
			if (value==0) {
				offset = offset * 2
			}
		}
		offset = Math.abs(offset);
		scale = nvalue1 + (nvalue2-nvalue1) / obj.scaleunit * offset;
		return scale;
	}


	function setSlideByScale(scale, slideid, knobname) {
		obj = $e(slideid) ;
		if (!(obj.inited)) {
			initSlide();
		}
		if (scale > parseFloat(obj.maxvalue)) {
			scale = obj.maxvalue;
		} else {
			if (scale < obj.minvlue) {
				scale = obj.minvalue;
			}	
		}	
		if (knobname == 'sknob') {
			newleft = ScalePos(obj.sknob, scale);
			obj.sknob.style.left = newleft + "px";
		} else {	
			newleft = ScalePos(obj.eknob, scale);
			obj.eknob.style.left = newleft + "px";
		}			
	}

	function valueof(v) {
		value = parseFloat(v);
		if (isNaN(v)) {
			v = v.replace("$","");
			return parseFloat(v);		
		}
		return value;
	}	
	
	function absLeft(e) {
		curleft = 0	
		do {
			curleft += e.offsetLeft;
		} while (e=e.offsetParent);

		return curleft;	
	
	}
	