/**
* @ Author 	: < wckang@bb.co.kr > 
* @ Data	: 08.10.07
* @ Content	: Price Multe_bar
	new PriceBarControl(element,{option},submitAction)	
*/

if(!PriceBarControl) var PriceBarControl = {};
PriceBarControl = Class.create();

PriceBarControl.prototype = {
	initialize : function (ele,price,onsubmit)
	{
		var pricebar = this;	
		var dualSlider;	

		// form element id
		this.maxbar;
		//this.frm_s_price	= 's_price';
		this.frm_s_price	= 'ckpr_from';
		//this.frm_e_price	= 'e_price';
		this.frm_e_price	= 'ckpr_to';
		this.imagePath		= '/images/model_list/';
		this.type_flag		= 1;
		this.ele			= $(ele);
		this.price			= price || {}
		this.min_price 		= 0;
		this.onsubmit 		= onsubmit;
		this.max_price 		= Number(this.clear_comma(this.price.max))
		this.s_min_price 	= Number(this.clear_comma(this.price.s_min)) || this.min_price ;
		this.s_max_price 	= Number(this.clear_comma(this.price.s_max)) || this.max_price ;

		this.setDefault();	
		this.inputElement();
		this.defaultValues	= this.getDefaultValue();
		this.sliderBar();
	},

	setDefault : function()
	{	
		this.ele.style.position = 'relative';
		this.ele.style.zIndex 	= '0';
		this.ele.className 		= 'price_multi_bar_dd';

		if(this.s_min_price > this.s_max_price)
		{
			var tmp = this.s_min_price

			this.s_min_price = this.s_max_price;
			this.s_max_price = tmp;
		}
		this.default_price_key = 1000;
		this.max_range = (this.max_price/this.default_price_key); 
		this.diff = Math.round((this.max_range * 0.07));
		
		if(window.navigator.userAgent.indexOf('MSIE 7.0')>0)
		{
			this.brower = "ie7";
		}
		else if(window.navigator.userAgent.indexOf('MSIE 6.0')>0)
		{
			this.brower = "ie6";
		}
		else if(window.navigator.userAgent.indexOf('Firefox')>0)
		{
			this.brower = "ff";
		}
		else if(window.navigator.userAgent.indexOf('Safari')>0)
		{
			this.brower = "sf";
		}else
		{
			this.brower = "ie7";
		}
		
		switch(this.brower)
		{
			default:
			case 'ie7':
				this.price_msg_top = '-15px';
				this.price_msg_left = 8;
			break;
			case 'ie6':
				this.price_msg_top = '-15px';
				this.price_msg_left = 38;
			break;
			case 'ff':
				this.price_msg_top = '-30px';
				this.price_msg_left = 0;
			break;
			case 'sf':
				this.price_msg_top = '-30px';
				this.price_msg_left = 0;
			break;
		}
	},

	// html element create
	inputElement : function()
	{
		var element = Builder.node('div', { id: 'typeA' }, 
		[
			Builder.node('div',{id:'LeftPrice',style:'top:'+this.price_msg_top},
			[
				Builder.node('ul',
				[
					Builder.node('li',{className:"Lleft"}),
					Builder.node('li',{id:'s_price_div',className:"Lmiddle"}),
					Builder.node('li',{className:"Lright"})
				])
			]),

			Builder.node('div',{id:'RightPrice',style:'top:'+this.price_msg_top},
			[
				Builder.node('ul',
				[
					Builder.node('li',{className:"Rleft"}),
					Builder.node('li',{id:'e_price_div',className:"Rmiddle"}),
					Builder.node('li',{className:"Rright"})
				])
			]),

			Builder.node('ul',{className:"price_multi_bar"},
			[
				Builder.node('li',{id:'price_bar_type_a'},
				[
					Builder.node('div',{className:"scale1"},
					[
						Builder.node('div',{id:"slider_track",style:'cursor:pointer',className:"scale"}),
						Builder.node('div',{id:"sliderselect",style:'cursor:pointer'}),
						Builder.node('div',{id:"leftHandle"}),
						Builder.node('div',{id:"rightHandle"}),

					]),
		


				]),


				Builder.node('li',{id:'price_bar_type_b',className:"field",style:'width:311px;display:none'},
				[
					Builder.node('input',{type:'text', className:"money_input", id:this.frm_s_price, name:this.frm_s_price}),
					"¿ø ~ ",
					Builder.node('input',{type:'text', className:"money_input", id:this.frm_e_price, name:this.frm_e_price}),
					"¿ø "
				]),

				Builder.node('li',
				[
					Builder.node('a',{href:'#'},
					[
						Builder.node('img',{id:'formsearch',src: this.imagePath + 'btn_catesearch.gif',style:'margin-top:5px'})
					])
				]),
				Builder.node('li',
				[
					Builder.node('a',{href:'#'},
					[
						Builder.node('img',{id:'typechange',src: this.imagePath + 'btn_qinput.gif',style:'margin-top:5px'})
					])
				]),
			])
		]);

 		this.ele.appendChild(element);
		Event.observe("slider_track", "mousedown", this.mouseDown.bindAsEventListener(this));
		Event.observe("sliderselect", "mousedown", this.mouseDown.bindAsEventListener(this));
		Event.observe("typechange", "click", this.typeChange.bindAsEventListener(this));
		Event.observe("formsearch", "click", this.formsearch.bindAsEventListener(this));

		Event.observe(this.frm_s_price, "keyup", this.keyDown_frmPrice.bindAsEventListener(this));
		Event.observe(this.frm_e_price, "keyup", this.keyDown_frmPrice.bindAsEventListener(this));

		Event.observe(this.frm_s_price, "focus", this.focus_frmPrice.bindAsEventListener(this));
		Event.observe(this.frm_e_price, "focus", this.focus_frmPrice.bindAsEventListener(this));
	},

	// event focus
	focus_frmPrice : function(e)
	{
		var event 	= window.event || e;
		var target 	= Event.element(event);
		target.select();
	},

	// event keydown
	mouseDown : function(e)
	{
		var event 	= window.event || e;
		var target 	= Event.element(event);
		var x 		= Event.pointerX(e) - Position.cumulativeOffset($("slider_track"))[0]; // mouse event x
		var h0 		= Position.positionedOffset($("leftHandle"))[0];  // left handle
		var h1 		= Position.positionedOffset($("rightHandle"))[0]; // right handle
		var idx		= dualSlider.activeHandleIdx; // select handle 0 : left, 1 : right
		var width	= $("slider_track").getWidth(); // divÀÇ width
		//alert( x );
		var s		= (this.max_range + this.diff) / width ;
		var value 	= 0;

		//Å¬¸¯ÇÑ½ÃÁ¡ÀÌ handle1 º¸´Ù Å¬°æ¿ì idx = 1
		if(x >= h1)
		{
			idx = 1;
		}

		//Å¬¸¯ÇÑ½ÃÁ¡ÀÌ handle0 º¸´Ù ÀÛÀ»°æ¿ì idx = 0
		if(x <= h0)
		{
			idx = 0;
		}

		value = x * s;
		dualSlider.setValue(value , idx);
		
		if(!idx)
		{
			$(this.frm_s_price).value = this.comma(this.numround(this.default_price_key * ( value ), "s"));
		}else
		{
			$(this.frm_e_price).value = this.comma(this.numround(this.default_price_key * (value - this.diff), "e"));
		}

		this.setPriceDiv();
	},

	// event keydown
	keyDown_frmPrice : function(e)
	{
		var event 		= window.event || e;
		var target 		= Event.element(event);
		target.value	= this.comma(target.value)
	},

	// °¡°Ý´ë ¸ðµå ¹Ù¼±ÅÃ , Á÷Á¢ÀÔ·Â
 	typeChange : function(e)
	{
		if(this.type_flag==1)
		{
			this.type_flag = 2;
			$('price_bar_type_b').style.display = "block";

			$('price_bar_type_a').style.display = "none";
			$('RightPrice').style.display 		= "none";
			$('LeftPrice').style.display 		= "none";

			$("typechange").src = this.imagePath + 'btn_bar.gif';
		}else
		{
			this.type_flag = 1;
			$('price_bar_type_b').style.display = "none";

			$('price_bar_type_a').style.display = "block";
			$('RightPrice').style.display 		= "block";
			$('LeftPrice').style.display 		= "block";

			$("typechange").src = this.imagePath + 'btn_qinput.gif';
		}
	},

	// °Ë»ö
    formsearch : function(e)
    {
        //var form = document.forms['variable'];
        //form.submit();
        chg_range(document.forms['sheetF']);
    },

	// µû¶ó´Ù´Ï´Â °¡°Ý ¸Þ½ÃÁö
	setPriceDiv : function()
	{
		var pos =	Position.positionedOffset($("leftHandle"));
		$("LeftPrice").style.left =(pos[0] + 35 - this.price_msg_left - ($(this.frm_s_price).value.toString().length * 6) )  + "px";
		$("s_price_div").update($(this.frm_s_price).value);
	
		var pos =	Position.positionedOffset($("rightHandle"));
		$("RightPrice").style.left =(pos[0] - this.price_msg_left + 45) + "px";
		$("e_price_div").update($(this.frm_e_price).value);
	},

	// sliderbar app
	sliderBar : function()
	{	
		var thisObj		= this;
		var min_price 	= this.min_price;
		var max_price 	= this.max_price;
		var frm_s_price = this.frm_s_price
		var frm_e_price = this.frm_e_price

		dualSlider = new Control.Slider(['leftHandle', 'rightHandle'],
											 'price_bar_type_a',
											 {
											  restricted:true,
											  sliderValue: this.defaultValues,
											  spans:['sliderselect'],
											  range:$R(0,this.max_range+this.diff)
											  });
		$(frm_s_price).value = this.comma(this.s_min_price); 
		$(frm_e_price).value = this.comma(this.s_max_price); 
		thisObj.setPriceDiv();
		
		// sliding event
		dualSlider.options.onSlide = function(v, evt)
		{

			// Get left handle offsets
			lowerL = v[0];
			lowerR = v[0] + thisObj.diff;

			// Get right handle offsets
			upperL = v[1] - thisObj.diff;
			upperR = v[1];


			// First handle
			if ((evt.activeHandleIdx == 0) && (lowerL >= upperL))
			{


				// Set the new slider value
				dualSlider.setValue(upperL, 0);
				v[0] = upperL;

			}
			
			// Second handle
			if ((evt.activeHandleIdx == 1) && (upperR <= lowerR))
			{

				// Set the new slider value
				dualSlider.setValue(lowerR, 1);
				v[1] = lowerR;
			}

			var v0 = v[0];
			var v1 = v[1]-thisObj.diff;

			//$("debug").innerHTML =  v0 + " | " + v1 ;

			$(frm_s_price).value = thisObj.comma(thisObj.numround(thisObj.default_price_key * v0), "s");
			$(frm_e_price).value = thisObj.comma(thisObj.numround(thisObj.default_price_key * v1), "e");
			thisObj.setPriceDiv();

		}
		
		// slider mouse over event
		dualSlider.options.onChange = function(v, evt)
		{
			/**
			 * add jijang@bb.co.kr
			 * date 2008.10.10
			if( getCookie( "msearch" ) == "Y" )
			{
				cs.set_search_product_cnt();
			}

			 */
		/*
			var frm = Event.findElement(dualSlider.event,'form');
			if( frm != document ) frm.submit();
		*/
		}
	},//end sliderbar

	getDefaultValue : function ()
	{
		var x
		var y;
		// x - min
		if(this.s_min_price <= this.min_price)
		{
			x = 0;
		}
		else
		{
			x = this.s_min_price / this.max_price * this.max_range;
		}

		// y - max
		if(this.s_max_price >= this.max_price)
		{
			y = this.max_range + this.diff;
		}else
		{
			y = this.s_max_price / this.max_price * this.max_range + this.diff;
		}
		return [x,y];
	},
	numround : function(num, flag)
	{
		if ( flag == "s" )
		{
			var newnum = Math.floor(num/100) * 100;
		}
		else
		{
			var newnum = Math.ceil(num/100) * 100;
		}

		if(newnum < 0) newnum = 0;
		if(newnum > this.max_price) newnum = this.max_price;
		return newnum;
	},
	// in comma
	comma : function (num) 
	{
		var str = num.toString().replace(/,/gi,"")
		var len = str.length;

		var str1 = "";

		for( i = 1; i <= len; i++ ) 
		{
			str1 = str.charAt(len-i)+str1;
			if((i%3 == 0)&&(len-i != 0)) str1 = ","+str1;
		}
		return str1;
	},

	// out comma
	clear_comma : function (str)
	{
		var str1 = str.replace(/,/gi,"");
		return str1;
	}
}//end PriceBarControl Class

