﻿//---------------------------------------------------------------------------------
//  (c) 2007 Guardian Networks, Inc
//---------------------------------------------------------------------------------
GNgui.Slider = Class.create();
GNgui.Slider.prototype = 
{
	initialize:function(Left,Top,ID,ParentElement,Target)
	{
	this.ID=ID;

	this.dragObj=new Object();
	this.dragObj.Draggable=false;

	this.SliderControl=$ce('div');

	this.StreetMin=165;
	this.StreetMax=2500;
	this.CityMin=2600;
	this.CityMax=50000;
	this.StateMin=51000;
	this.StateMax=6000000;

	this.Altitude=165;
	this.ZoomSelect="Street";

	this.ZoomMin=this.StreetMin;
	this.ZoomMax=this.StreetMax;

	this.ZoomUpperLimit = 22;
	this.ZoomLowerLimit = 147;

	//Element.extend(this.SliderControl);

	this.SliderControl.id=ID;
	this.SliderControl.className='SliderControl Opacity10';
	$ac($e(ParentElement),this.SliderControl);

	this.SliderBar=$ce('img');
	//nElement.extend(this.SliderBar);
	this.SliderBar.id=ID+'Bar';
	this.SliderBar.className='SliderControlBar Opacity10';
	this.SliderBar.src='./'+Target+'/images/zoom_slide.png';
	$ac(this.SliderControl,this.SliderBar);

	this.ZoomMinus=$ce('img');
	//Element.extend(this.ZoomMinus);
	this.ZoomMinus.id=ID+'Minus';
	this.ZoomMinus.className='ZoomMinus';
	this.ZoomMinus.src='./'+Target+'/images/zoom_img_minus.gif';
	this.ZoomMinus.alt = "Zoom Out";
	$ac(this.SliderControl,this.ZoomMinus);

	this.ZoomPlus=$ce('img');
	//Element.extend(this.ZoomPlus);
	this.ZoomPlus.id=ID+'Plus';
	this.ZoomPlus.className='ZoomPlus';
	this.ZoomPlus.src='./'+Target+'/images/zoom_img_plus.gif';
	this.ZoomPlus.alt = "Zoom In";
	$ac(this.SliderControl,this.ZoomPlus);

	this.SliderCursor=$ce('img');
	//Element.extend(this.SliderCursor);
	this.SliderCursor.id=ID+'Cursor';
	this.SliderCursor.className='SliderCursor';
	this.SliderCursor.src='./'+Target+'/images/zoom_slider.png';
	this.SliderCursor.style.top=this.ZoomUpperLimit;
	$ac(this.SliderControl,this.SliderCursor);

	this.SliderStreet=$ce('img');
	//Element.extend(this.SliderStreet);
	this.SliderStreet.id=ID+'Street';
	this.SliderStreet.className='SliderStreet';
	this.SliderStreet.src='./'+Target+'/images/zoom_street.png';
	this.SliderStreet.alt = "Street";
	$ac(this.SliderControl,this.SliderStreet );

	this.SliderCity=$ce('img');
	//Element.extend(this.SliderCity);
	this.SliderCity.id=ID+'City';
	this.SliderCity.className='SliderCity';
	this.SliderCity.src='./'+Target+'/images/zoom_city.png';
	this.SliderCity.alt = "City";
	$ac(this.SliderControl,this.SliderCity );

	this.SliderState=$ce('img');
	//Element.extend(this.SliderState);
	this.SliderState.id=ID+'State';
	this.SliderState.className='SliderState';
	this.SliderState.src='./'+Target+'/images/zoom_state.png';
	this.SliderState.alt = "State";
	$ac(this.SliderControl,this.SliderState);

	Gutenberg.Subscribe('MouseWheelDown',this.SetSliderDown.bind(this));
	Gutenberg.Subscribe('MouseWheelUp',this.SetSliderUp.bind(this));

	this.SliderControl.onmouseover=this.MouseOverSliderControl;
	this.SliderControl.onmouseout=this.MouseOutSliderControl;
	Event.observe(this.SliderControl,'mousedown',Catch.bindAsEventListener());
	Event.observe(this.SliderControl,'click',Catch.bindAsEventListener());
	Event.observe(this.SliderControl,'mouseup',Catch.bindAsEventListener());

	Event.observe(this.SliderControl,'contextmenu',function(){return false;});

	Event.observe(this.SliderStreet,'click',this.ClickSliderStreet.bindAsEventListener(this));
	Event.observe(this.SliderCity,'click',this.ClickSliderCity.bindAsEventListener(this));
	Event.observe(this.SliderState,'click',this.ClickSliderState.bindAsEventListener(this));

	Event.observe(this.SliderCursor,'mousedown',this.MouseDownSliderCursor.bindAsEventListener(this));
	Event.observe(this.SliderCursor,'mousemove',this.MouseMoveSliderCursor.bindAsEventListener(this));
	Event.observe(this.SliderCursor,'mouseup',this.MouseUpSliderCursor.bindAsEventListener(this));
	},

	MouseOverSliderControl:function()
	{
	ZoomToolBox.SliderControl.style.cursor='pointer';
	ZoomToolBox.SliderControl.className="SliderControl";
	ZoomToolBox.SliderBar.className="SliderControlBar";
	ZoomToolBox.SliderCursor.className="SliderCursor";
	ZoomToolBox.SliderControl.className="SliderControl";
	ZoomToolBox.ZoomMinus.className="ZoomMinus";
	ZoomToolBox.ZoomPlus.className="ZoomPlus";
	ZoomToolBox.SliderStreet.className="SliderStreet";
	ZoomToolBox.SliderCity.className="SliderCity";
	ZoomToolBox.SliderState.className="SliderState";

	clearTimeout (ZoomToolBox.ZoomHiderTimer);
	},

	MouseOutSliderControl:function()
	{
	ZoomToolBox.ZoomHiderTimer=setTimeout(
	function()
	{
	ZoomToolBox.SliderControl.className="SliderControl Opacity10";
	ZoomToolBox.SliderBar.className="SliderControlBar Opacity10";
	ZoomToolBox.SliderControl.className="SliderControl Opacity10";
	ZoomToolBox.SliderCursor.className="SliderCursor Opacity10";
	ZoomToolBox.ZoomMinus.className="ZoomMinus Opacity10";
	ZoomToolBox.ZoomPlus.className="ZoomPlus Opacity10";
	ZoomToolBox.SliderStreet.className="SliderStreet  Opacity10";
	ZoomToolBox.SliderCity.className="SliderCity  Opacity10";
	ZoomToolBox.SliderState.className="SliderState  Opacity10";
	},50);
	},

	ClickSliderStreet:function(event)
	{
	this.SetSliderZoom("Street",this.StreetMin);

	this.ZoomMin=this.StreetMin;
	this.ZoomMax=this.StreetMax;

	Event.stop(event);
	return false;
	},

	ClickSliderCity:function(event)
	{
	this.SetSliderZoom("City",this.CityMin);

	this.ZoomMin=this.CityMin;
	this.ZoomMax=this.CityMax;

	Event.stop(event);
	return false;
	},

	ClickSliderState:function(event)
	{
	this.SetSliderZoom("State", this.StateMin); 

	this.ZoomMin=this.StateMin;
	this.ZoomMax=this.StateMax;

	Event.stop(event);
	return false;
	},

	MouseDownSliderCursor:function(event)
	{
	this.dragObj.Draggable=true;

	this.dragObj.StartY=event.clientY;

	Event.stop(event);
	return false;
	},

	MouseMoveSliderCursor:function(event)
	{
	if(this.dragObj.Draggable)
	{
	var NewY=event.clientY-this.dragObj.StartY+$et(this.SliderCursor);

	if(NewY<22)
	{
	NewY=22;
	}
	if(NewY>147)
	{
	NewY=147;
	}

	$et(this.SliderCursor,NewY);

	this.dragObj.StartY=event.clientY;
	}

	Event.stop(event);
	return false;
	},

	MouseUpSliderCursor:function(event)
	{
	this.dragObj.Draggable=false;

	this.ComputeNewAltitude();

	Event.stop(event);
	return false;
	},

	SetSliderDown:function()
	{
	var NewY=$et(this.SliderCursor);
	if(NewY!=this.ZoomUpperLimit)
	{
	NewY-=15;
	if(NewY<this.ZoomUpperLimit)
	{
	NewY=this.ZoomUpperLimit;
	}
	$et(this.SliderCursor, NewY);
	this.ComputeNewAltitude();
	}
	},

	SetSliderUp:function()
	{
	var NewY=$et(this.SliderCursor);
	if(NewY!=this.ZoomLowerLimit)
	{
	NewY+=15;
	if(NewY>this.ZoomLowerLimit)
	{
	NewY=this.ZoomLowerLimit;
	}
	$et(this.SliderCursor,NewY);
	this.ComputeNewAltitude();
	}
	},

	SetSliderZoom:function(ZoomSelect,Altitude)
	{
	this.ZoomSelect=ZoomSelect;
	this.Altitude=parseInt(Altitude);

	$et(this.SliderCursor,this.ZoomUpperLimit);
	Gutenberg.PublishNow('NewZoomLevel',this.Altitude,this.ZoomLowerLimit,this.ZoomUpperLimit);
	},

	SetAltitude:function(Altitude)
	{
	this.Altitude=parseInt(Altitude);

	switch(true)
	{
	case(this.Altitude>=this.StreetMin&&this.Altitude<=this.StreetMax):
	this.ZoomSelect="Street";
	this.ZoomMin=this.StreetMin;
	this.ZoomMax=this.StreetMax;
	break;
	case(this.Altitude>=this.CityMin&&this.Altitude<=this.CityMax):
	this.ZoomSelect="City";
	this.ZoomMin=this.CityMin;
	this.ZoomMax=this.CityMax;
	break;
	case(this.Altitude>=this.StateMin&&this.Altitude<=this.StateMax):
	this.ZoomSelect="State";
	this.ZoomMin=this.StateMin;
	this.ZoomMax=this.StateMax;
	break;
	default:
	this.Altitude=this.StreetMin;
	this.ZoomSelect="Street";
	this.ZoomMin=this.StreetMin;
	this.ZoomMax=this.StreetMax;
	}
		this.SliderCursor.style.top=((this.ZoomLowerLimit-this.ZoomUpperLimit)*(this.Altitude-this.ZoomMin))/(this.ZoomMax - this.ZoomMin) + this.ZoomUpperLimit;
	},

	ComputeNewAltitude:function()
	{
		this.Altitude=Math.round(((this.ZoomMax-this.ZoomMin)*($et(this.SliderCursor)-this.ZoomUpperLimit))/(this.ZoomLowerLimit-this.ZoomUpperLimit)+this.ZoomMin);
		Gutenberg.PublishNow('NewZoomLevel', this.Altitude);
		Gutenberg.PublishNow("MapCursorPosition",MapDisplayObject.MouseLatitude+','+MapDisplayObject.MouseLongitude+','+this.Altitude);
	}
}