/* At the end of this file the 'init' function gets attached to the window.onload event */

var btConn = {
	config: {
		id: {
			frame: "btconn-selector-browse",
			scrollbar: "btconn-selector-scroller",
			bar: "btconn-selector-scroller-bar",
			left: "btconn-selector-scroller-left",
			right: "btconn-selector-scroller-right"
		}, 
		
		obj: {
			frame: null,
			scrollbar: null,
			bar: null,
			left: null,
			right: null
		}, 
		
		uri: {
			loadPhones: "xml/get-phones.php" ,
			loadPhoneResults: "xml/get-phone-results.php"
		},
		              
		tooltip_timer: null,
		scrollPerPixel: 0
	},
	
	init: function( )
	{
		btConn.config.obj.frame = document.getElementById( btConn.config.id.frame );
		btConn.config.obj.scrollbar = document.getElementById( btConn.config.id.scrollbar );
		btConn.config.obj.bar = document.getElementById( btConn.config.id.bar );
		btConn.config.obj.left = document.getElementById( btConn.config.id.left );
		btConn.config.obj.right = document.getElementById( btConn.config.id.right );
		
		if( document.onselectstart )
		{
			btConn.event.register( [btConn.config.obj.scrollbar, btConn.config.obj.frame ] , 'selectstart' , function( e )
				{
					btConn.event.cancel( e );
					return false;
				} );
		}

		btConn.event.register( [btConn.config.obj.scrollbar, btConn.config.obj.frame] , 'mouseover' , function( e )
			{
				var Images = btConn.config.obj.frame.getElementsByTagName( "img" );
				
				for( var i = 0; i < Images.length; i++ )
				{
					if( btConn.attr.get( Images[i].parentNode , 'class' ) && btConn.attr.get( Images[i].parentNode , 'class' ).indexOf( "current" ) == -1 )
					{                                    
						Images[i].parentNode.className = "no-opacity";
					}
				}
			} );
			
		btConn.event.register( [btConn.config.obj.scrollbar, btConn.config.obj.frame] , 'mouseout' , function( e )
			{
				if( btConn.scroller.isMouseDown == true )
				{
					btConn.scroller.onRelease = function( )
					{
						var Images = btConn.config.obj.frame.getElementsByTagName( "img" );
				
						for( var i = 0; i < Images.length; i++ )
						{
							if( btConn.attr.get( Images[i].parentNode , 'class' ) &&  btConn.attr.get( Images[i].parentNode , 'class' ).indexOf( "current" ) == -1 )
							{
								Images[i].parentNode.className = "opacity";
							}
						}
						
						btConn.scroller.onRelease = null;
					}
					
					return false;
				}
				
				var Images = btConn.config.obj.frame.getElementsByTagName( "img" );
				
				for( var i = 0; i < Images.length; i++ )
				{
					if( btConn.attr.get( Images[i].parentNode , 'class' ) && btConn.attr.get( Images[i].parentNode , 'class' ).indexOf( "current" ) == -1 )
					{
						Images[i].parentNode.className = "opacity";
					}
				}
			} );
		
		btConn.scroller.__calculatePixelToScroll( );
	
		if( document.all )	
		{
			/* IE does not support the 'user-select' CSS property. */
			btConn.config.obj.frame.ondrag = function( ){ return false; }
			btConn.config.obj.frame.onselectstart = function( ){ return false; }
			btConn.config.obj.scrollbar.ondrag = function( ){ return false; }
			btConn.config.obj.scrollbar.onselectstart = function( ){ return false; }
		}
		
		btConn.event.register( btConn.config.obj.bar , 'mousedown' , function( e )
			{
				btConn.scroller.startDrag( e );
			} );
			
		btConn.event.register( btConn.config.obj.scrollbar , 'mousedown' , function( e )
			{
				btConn.scroller.moveToThisPoint( e );
			} );
			
		btConn.event.register( btConn.config.obj.right , 'click' , function( e )
			{
				btConn.scroller.moveRight( e );
			} );
			
		btConn.event.register( btConn.config.obj.left , 'click' , function( e )
			{
				btConn.scroller.moveLeft( e );
			} );
		
		btConn.event.register( document , 'mouseup' , function( e )
			{
				btConn.scroller.stopDrag( e );
			} );
			
		btConn.event.register( document , 'mousemove' , function( e )
			{
				btConn.scroller.dragToThisPoint( e );
			} );
		
		btConn.config.obj.scrollbar.style.display = 'block';
	},
	
	scroller: {
		position: 0,
		startMouse: 0,
		isMouseDown: false,
		onRelease: null,
		onLocated: null,
		
		startDrag: function( e )
		{
			if( !e ) var e = window.event;
			var intMouse = btConn.mouse.getX( e );
			var intPosition = btConn.pos.getX( btConn.config.obj.scrollbar );
			
			btConn.scroller.startMouse = ( intMouse - intPosition ) - btConn.scroller.position;
			btConn.scroller.isMouseDown = true;
		}, 
		
		stopDrag: function( e )
		{	
			btConn.config.startMouse = 0;
			btConn.scroller.isMouseDown = false;
			
			if( btConn.scroller.onRelease != null )
			{
				btConn.scroller.onRelease( );
			}
		},

		moveToThisPoint: function( e )
		{
			if( !e ) var e = window.event;
			
			if( btConn.scroller.isMouseDown == true )
			{
				return false;
			}
			
			if( btConn.mouse.getTargetId( e ) != btConn.config.id.scrollbar )
			{
				return false;
			}
		
			var intMouse = btConn.mouse.getX( e );
			var intPosition = btConn.pos.getX( btConn.config.obj.scrollbar );
			var intTarget = 0;
			var intXLimit = ( btConn.config.obj.scrollbar.clientWidth - btConn.config.obj.bar.clientWidth 
				- btConn.config.obj.left.clientWidth - btConn.config.obj.right.clientWidth );
			
			intTarget = ( intMouse - intPosition );
			intTarget -= Math.floor( btConn.config.obj.bar.clientWidth / 2 );
			
			if( intTarget < 0 ) intTarget = 0;
			if( intTarget > intXLimit ) intTarget = intXLimit;

			btConn.config.obj.bar.style.left = intTarget + "px";
			btConn.scroller.position = intTarget;
			btConn.scroller.__moveFrame( );
		}, 
		
		dragToThisPoint: function( e )
		{
			if( !e ) var e = window.event;
			
			if( btConn.scroller.isMouseDown == false )
			{
				return false;
			}
		
			var intMouse = btConn.mouse.getX( e );
			var intPosition = btConn.pos.getX( btConn.config.obj.scrollbar );
			var intTarget = 0;
			var intXLimit = ( btConn.config.obj.scrollbar.clientWidth - btConn.config.obj.bar.clientWidth 
				- btConn.config.obj.left.clientWidth - btConn.config.obj.right.clientWidth );
			
			intTarget = ( intMouse - intPosition ) - btConn.scroller.startMouse;
			
			if( intTarget < 0 ) intTarget = 0;
			if( intTarget > intXLimit ) intTarget = intXLimit;

			btConn.config.obj.bar.style.left = intTarget + "px";
			btConn.scroller.position = intTarget;
			btConn.scroller.__moveFrame( );
		},
		
		moveRight: function( e )
		{
			if( !e ) var e = window.event;
			
			var intTarget = btConn.scroller.position + Math.floor( btConn.config.obj.frame.clientWidth / btConn.config.scrollPerPixel );
			var intXLimit = ( btConn.config.obj.scrollbar.clientWidth - btConn.config.obj.bar.clientWidth 
				- btConn.config.obj.left.clientWidth - btConn.config.obj.right.clientWidth );
				
			if( intTarget < 0 ) intTarget = 0;
			if( intTarget > intXLimit ) intTarget = intXLimit;
			
			btConn.config.obj.bar.style.left = intTarget + "px";
			btConn.scroller.position = intTarget;
			btConn.scroller.__moveFrame( );
			btConn.event.cancel( e );
		},
		
		moveLeft: function( e )
		{
			if( !e ) var e = window.event;
			
			var intTarget = btConn.scroller.position - Math.floor( btConn.config.obj.frame.clientWidth / btConn.config.scrollPerPixel );
			var intXLimit = ( btConn.config.obj.scrollbar.clientWidth - btConn.config.obj.bar.clientWidth 
				- btConn.config.obj.left.clientWidth - btConn.config.obj.right.clientWidth );
				
			if( intTarget < 0 ) intTarget = 0;
			if( intTarget > intXLimit ) intTarget = intXLimit;
			
			btConn.config.obj.bar.style.left = intTarget + "px";
			btConn.scroller.position = intTarget;
			btConn.scroller.__moveFrame( );
			btConn.event.cancel( e );
		},
		
		__moveFrame: function( )
		{                                                                                                   
			btConn.config.obj.frame.scrollLeft = ( btConn.scroller.position * btConn.config.scrollPerPixel );
		},
		
		__calculatePixelToScroll: function( )
		{ 
			btConn.config.scrollPerPixel = ( 
				( btConn.config.obj.frame.scrollWidth - btConn.config.obj.frame.offsetWidth ) / 
				( btConn.config.obj.scrollbar.offsetWidth - btConn.config.obj.left.offsetWidth 
					- btConn.config.obj.right.offsetWidth - btConn.config.obj.bar.offsetWidth ) );
                  
			return btConn.config.scrollPerPixel;
		}
	},
	
	event: {
		register: function( element , type , callback )
		{
			if( !element || !type || !callback ) return false;
			
			if( ( element.length && element.length > 1 ) && !element.nodeName )
			{         
				for( var i = 0; i < element.length; i++ )
				{
					btConn.event.register( element[i] , type , callback );
				}
				return;
			}
			
			if( document.attachEvent )
			{
				element.attachEvent( 'on' + type , this.createCallback( callback ) );
			}else
			{
				element.addEventListener( type , this.createCallback( callback ) , false );
			}
		}, 
		
		cancel: function( event )
		{
			if( !event ) var event = window.event;
			if( !event ) return false;
			
			if( event.stopPropagation ) event.stopPropagation();
			if( event.preventDefault ) event.preventDefault( );
			event.cancelBubble = true;
			event.returnValue = false;
			
			return false;
		},
		
		createCallback: function( callback )
		{
			return function( e )
			{
				if( !e ) var e = window.event;
				     
				callback( e );
			}
		}
	},
	
	mouse: {
		getX: function( e )
		{
			if( !e ) var e = window.event;
			if( !e ) return 0;
			
			if( e.pageX )
			{
				return e.pageX;
			}else if( e.clientX )
			{
				return e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
			}else
			{
				return 0;
			}
		},
		
		getY: function( e )
		{
			if( !e ) var e = window.event;
			if( !e ) return 0;
			
			if( e.pageY )
			{
				return e.pageY;
			}else if( e.clientY )
			{
				return e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
			}else
			{
				return 0;
			}
		},
		
		getTargetId: function( e )
		{
			if( !e ) var e = window.event;
			if( !e ) return;
			
			var theTarget = null;
			if( e.target )
			{
				return e.target.getAttribute( "id" );
			}else if( e.srcElement )
			{
				return e.srcElement.getAttribute( "id" );
			}
			
			return false;
		}
	},
	
	pos: {
		getX: function( obj )
		{
			var intLeft = 0;
			
			if( obj.x )
			{
				return obj.x;
			}
			
			if( !obj.offsetParent ) return 0;
			while( obj.offsetParent )
			{
				intLeft += obj.offsetLeft;
				obj = obj.offsetParent;
			}
			
			return intLeft;	
		},
		
		getY: function( obj )
		{
			var intTop = 0;
			
			if( obj.y )
			{
				return obj.y;
			}
			
			if( !obj.offsetParent ) return 0;
			while( obj.offsetParent )
			{
				intTop += obj.offsetTop;
				obj = obj.offsetParent;
			}
			
			return intTop;
		}
	},
	
	attr: {
		get: function( obj , name )
		{
			if( name == "class" && document.all ) return obj.getAttribute( "className" );
			
			return obj.getAttribute( name );
		},
		
		set: function( obj , name , value )
		{
			if( name == "class" && document.all ) return obj.setAttribute( "className" , value );
			
			return obj.setAttribute( name , value );
		}
	},
	
	web: {
		queu: [],
		timer: null,
		
		sendRequest: function( uri , parameters , callback )
		{
			if( !parameters ) var parameters = [];
			if( !callback ) var callback = null;
			parameters = parameters.join( "&" );
			
			var shoes = new XMLHttpRequest( );
			if( !shoes ) return false;
			
			shoes.open( "POST" , uri , true );
			shoes.onreadystatechange = function( ){ btConn.web.checkQueu( ); };
			shoes.setRequestHeader( "If-Modified-Since" , "Sat, 1 Jan 2000 00:00:00 GMT" );
			shoes.setRequestHeader( "Content-Type" , "application/x-www-form-urlencoded" );
			shoes.setRequestHeader( "Content-Length" , parameters.length );
			shoes.setRequestHeader( "Connection" , "close" );
			shoes.send( parameters );
			
			btConn.web.queu.push( [shoes,callback] );			
		},
		
		checkQueu: function( )
		{
			var buffer, callback = null;
			
			for( var i = 0; i < btConn.web.queu.length; i++ )
			{
				if( btConn.web.queu[i][0].readyState == 4 )
				{
					buffer = btConn.web.queu[i][0].responseXML;
					callback = btConn.web.queu[i][1];
					btConn.web.queu.splice( i , 1 );
					i--;
					
					if( callback ) callback( buffer );
				}
			}			
		}
	},
	
	browser: {
		readDefault: function( )
		{
			var browserList = btConn.config.obj.frame.getElementsByTagName( "ul" )[0];
			var browserWidth = 0; 
			var numLis=browserList.getElementsByTagName( "li" )
			for( var i = 0; i < numLis.length; i++ )
			{
				
				currentNode = numLis[i];
				if( currentNode.nodeType != 1 )
				{                
					browserList.removeChild( currentNode );
					continue;    
				}                                          
				
				if( currentNode.firstChild.nodeName == "A" )
				{                                   
					if( btConn.attr.get( currentNode.firstChild , 'class' ) == null || btConn.attr.get( currentNode.firstChild , 'class' ).indexOf( "current" ) == -1 )
/*
					{                                
						btConn.attr.set( currentNode.firstChild , 'class' , 'opacity' );
					}
*/                                                    
						
				    btConn.event.register( currentNode.firstChild , 'click' , function( e )
						{
							 return btConn.event.cancel( e );
						} );
				}

				
				
				browserWidth += numLis[i].offsetWidth;
			}
			
			
			//console.log(browserWidth)
			btConn.browser.setWidth( browserWidth );
		},
		
		setWidth: function( intWidth )
		{
			var browserNode = btConn.config.obj.frame.getElementsByTagName( "ul" )[0];
			browserNode.width = intWidth;
			browserNode.style.width = intWidth + "px";
			btConn.scroller.__calculatePixelToScroll( );
		}
	}
}

/* call the btConn.init( ); function */
btConn.event.register( window , 'load' , function( e )
	{
		btConn.init( );  
		btConn.browser.readDefault( );     
	} );
	
	
/* For IE6 */
if( !window.XMLHttpRequest )
{
	window.XMLHttpRequest = function( )
	{
		var Microsoft = new Array( );
		Microsoft.push( "MSXML2.XMLHTTP.6.0" );
		Microsoft.push( "MSXML2.XMLHTTP.3.0" );
		
		for( var i = 0; i < Microsoft.length; i++ )
		{
			try
			{
				return new ActiveXObject( Microsoft[i] );
			}catch( e ){ }
		}
		
		return false;
	}
}
	
/* Only link to this stylesheet if javascript is enabled. */
document.write( "<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"/lib/css/mapshare/guide/slider-js.css\" />" );
