(function($){
try {
	$.fn.streetviewer = function(options) {
		// Set default parameters
		var settings = $.extend({
			// Location of root folder
			base_url: 'http://www.streetsonline.com.au/',
			
			// Location of view file that generates the file structure
			view_file_url: '',
			
			// Location of images for current street
			image_url: '',
			
			// Location of street map
			map_url: '',
			
			// Goto end of street button
			nav_last: $('#nav_last'),
			
			// Goto start of street button
			nav_first: $('#nav_first'),
			
			// Goto next screen button
			nav_next: $('#nav_next'),
			
			// Goto previous screen button
			nav_previous: $('#nav_previous'),
			
			// Goto evens view button
			nav_evens: $('#nav_evens'),
			
			// Goto odds view button
			nav_odds: $('#nav_odds'),
			
			nav_left: $('#nav_left'),
			
			nav_right: $('#nav_right'),
			
			nav_left_hover: $('#nav_left_hover'),
			
			nav_right_hover: $('#nav_right_hover')
			
			//nav_map: $('#nav_map_active'),
		}, options||{});
		
		var container_width = $('div#streetviewer_street').width();

		// Open map view
		/*settings.nav_map.click(function() {
			// Attach loading animation to image while loading
			$('#map_placeholder').addClass('streetviewer_loader');
			
			var img = new Image();
			
			$(img).load(function () {
				// set the image hidden by default    
				$(img).hide();
				$(img_wrapper).removeClass('streetviewer_loader').html(img);
				$(img).fadeIn();
			}).attr('src', settings.image_url + 'map.jpg');	   
		});*/
		
		
		// On screen resize
		$(window).resize(function() {
			container_width = $('div#streetviewer_street').width();		  
		});
		
		// Scroll left
		settings.nav_left.mouseover(function() {
			$('div#streetviewer_street').stop().animate({scrollLeft: 0}, (parseInt($('div#streetviewer_street').scrollLeft()) + $(window).width()) * 2,'linear');
		}).mouseout(function() {
			//load_images();
			$('div#streetviewer_street').stop();
		});
		
		// Hover left
		settings.nav_left_hover.mouseover(function() {
			$('div#streetviewer_street').stop().animate({scrollLeft: 0}, (parseInt($('div#streetviewer_street').scrollLeft()) + $(window).width()) * 2,'linear');
			settings.nav_left_hover.stop().fadeTo(0, 0.8);
		}).mouseout(function() {
			$('div#streetviewer_street').stop();
			settings.nav_left_hover.stop().fadeTo(0, 0.3);
		});
		
		// Scroll right
		settings.nav_right.mouseover(function() {
			$('div#streetviewer_street').stop().animate({scrollLeft: $('div#streetviewer_street ul').width() - $(window).width() }, (Math.abs(parseInt($('div#streetviewer_street').scrollLeft()) - $('div#streetviewer_street ul').width())) * 2,'linear');								 
		}).mouseout(function() {
			$('div#streetviewer_street').stop();
		});
		
		// Hover right
		settings.nav_right_hover.mouseover(function() {
			$('div#streetviewer_street').stop().animate({scrollLeft: $('div#streetviewer_street ul').width() - $(window).width() }, (Math.abs(parseInt($('div#streetviewer_street').scrollLeft()) - $('div#streetviewer_street ul').width())) * 2,'linear');								 
			settings.nav_right_hover.stop().fadeTo(0, 0.8);
		}).mouseout(function() {
			$('div#streetviewer_street').stop();
			settings.nav_right_hover.stop().fadeTo(0, 0.3);
		});
		
		/** END BIND NAV BUTTONS**/

		
		/*function load_images_in_view() {
			var container_width = $('div#streetviewer_street').width(); 

			$('div#streetviewer_street li').each(								 
				function() {
					var start_pos = $(this).width() + $(this).position().left >= 0;
					var end_pos = $(this).position().left <= (container_width);
			
				  	if(start_pos && end_pos) {
						// Attach loading animation to image while loading
						$(this).find('div.streetviewer_image').addClass('streetviewer_loader');
						
						// If image not loaded
						//if(!($(this).find('img'))) {
							
							var img_wrapper = $(this).find('div.streetviewer_image');
							var img = new Image();
							var property_id = $(this).attr('id');
						
							$(img).load(function () {
								// set the image hidden by default    
								$(img).hide();
								$(img_wrapper).removeClass('streetviewer_street_loader').append(img);
								$(img).fadeIn();
							}).attr('src', settings.image_url + property_id + '.jpg');
						//}
					
						$(this).mouseover(function() {
							// Set width to contaner side
							$(this).find('.streetviewer_tooltip').css('width',container_width);
							
							$(this).find('.streetviewer_tooltip').stop().show();
						}).mouseout(function() {
							$(this).find('.streetviewer_tooltip').stop().hide();
						});
					}
				}
			);
  		}*/
		//var start_element_pos = 0;
		//var end_element_pos = 0;
		
		
		/** DYNAMIC IMAGE LOADING 
			This function loads images dynamically that are currently in view.
		**/
		/*
		wrapper = $('#streetviewer_street img');
		
		function load_images() {
			var container_width = $('div#streetviewer_street').width();
			var is_hover = false;
			
			$(wrapper).each(function() {
				var start_pos = $(this).position().left + $(this).parent().parent().prev().width()  >= 0;
				var end_pos = $(this).position().left <= (container_width);
				$('#streetviewer_fade_left').stop().fadeTo(0,0.5);
				$('#streetviewer_fade_right').fadeTo(0,0.5);
				
				if($(this).attr('class') != 'loaded' && start_pos && end_pos) {
					$(this).parent().addClass('streetviewer_image_loader');
					$(this).attr('src',settings.image_url + $(this).attr('id') + '.jpg').load(function() {
						$(this).parent().removeClass('streetviewer_image_loader');																			   
					});
					$(this).addClass('loaded');
					
					// Attach mouseover event to show tooltip
					$(this).mouseover(function() {
		   
						// Set width of tooltip to contaner side
						$(this).parent().parent().find('.streetviewer_tooltip').css('width',container_width);
						
						// Show tooltip
						$('.streetviewer_tooltip').stop().hide();
						$(this).parent().parent().find('.streetviewer_tooltip').stop().show();
						
						// Fade left
						//$('#streetviewer_fade_left').stop().width($(this).position().left);
						$('#streetviewer_fade_left').stop().animate({width:$(this).position().left},100);
						
						// Fade right
						//$('#streetviewer_fade_right').stop().width(container_width - $(this).position().left - $(this).width()).css('left',$(this).position().left + $(this).width());
						$('#streetviewer_fade_right').stop().width(container_width);
						$('#streetviewer_fade_right').stop().animate({left:$(this).position().left + $(this).width()},100);
						
					}).mouseout(function() {
						$('#streetviewer_fade_left').stop().animate({width:0},100);
						$('#streetviewer_fade_right').stop().animate({left:container_width},100);
						//$('#streetviewer_fade_right').stop().animate({right:-container_width});
					});
				}
			})

			$('#streetviewer_street').hover(function() {
													
			}, function() {
				$('.streetviewer_tooltip').stop().hide();
			});
			
			$('#streetviewer_street img').filter('[class=loaded]');
		}*/
		
		
		var center_element = $('#streetviewer_street img').get(Math.floor($('#streetviewer_street img').size() / 2));
		var left_elements = $('#streetviewer_street img').slice(0,(Math.floor($('#streetviewer_street img').size() / 2)));
		var right_elements = $('#streetviewer_street img').slice((Math.floor($('#streetviewer_street img').size() / 2)) + 1,$('#streetviewer_street img').size());

		
		// Loads images from centre
		function load_images() {
			// Attach loading animation
			 $('#streetviewer_street .streetviewer_image').addClass('streetviewer_image_loader');
			
			// Goto center of street
			//$('#streetviewer_street').scrollLeft(parseInt($(center_element).position().left) - parseInt($('div#streetviewer_street').width() / 2));

			// Load center image
			$(center_element).hide().attr('src',settings.image_url + $(center_element).attr('id') + '.jpg').load(function() {
				$(center_element).fadeIn(0,function(){
					// Attach tooptip
					attach_tooltip(center_element);
					
					// Load images on left
					load_image_left();		
					
					// Load images on right
					load_image_right();
				}).parent().removeClass('streetviewer_image_loader');
			});
			
			$('#streetviewer_street').mouseout(function() {
				$('.streetviewer_tooltip').stop().hide();
				$('#streetviewer_fade_right').stop().width(0);
				$('#streetviewer_fade_left').stop().width(0);
				$('.streetviewer_businesscard_wrapper').stop().hide();
			});
		}
		
		// Load images on left side
		function load_image_left() {
			var element = $(left_elements).get($(left_elements).size() - 1);
			
			$(element).hide().load(function() {
				$(element).fadeIn(0,function(){
					// Remove element from elements list
					left_elements = $(left_elements).slice(0,$(left_elements).size() - 1);
					
					// Attach tooptip
					attach_tooltip(element);
					
					if($(left_elements).size() > 0) {
						load_image_left();
					}
				}).parent().removeClass('streetviewer_image_loader');
			}).attr('src',settings.image_url + $(element).attr('id') + '.jpg');
		}
		
		// Load images on right side
		function load_image_right() {
			var element = $(right_elements).get(0);

			$(element).hide().load(function() {
				$(element).fadeIn(0,function(){
					// Remove element from elements list
					right_elements = $(right_elements).slice(1,$(right_elements).size());
					
					// Attach tooptip
					attach_tooltip(element);
					
					if($(right_elements).size() > 0) {
						load_image_right();
					}
				}).parent().removeClass('streetviewer_image_loader');
			}).attr('src',settings.image_url + $(element).attr('id') + '.jpg');
		}
		
		function attach_tooltip(image_element) {
			// Set transparency to side faders
			$('#streetviewer_fade_left').stop().fadeTo(0,0.5);
			$('#streetviewer_fade_right').stop().fadeTo(0,0.5);

			// Attach mouseover event to show tooltip
			$(image_element).parent().parent().mouseover(function() {
				// Set location of businesscard
				$(image_element).parent().parent().find('.streetviewer_businesscard_wrapper').css('left',$(image_element).position().left + $('#streetviewer_street').scrollLeft());
				
				// Show businesscard
				$(image_element).parent().parent().find('.streetviewer_businesscard_wrapper').stop().show();
				
				// Set width of tooltip to contaner side
				$(image_element).parent().parent().find('.streetviewer_tooltip').css('width',container_width);
				
				// Set location of tooltip
				$(image_element).parent().parent().find('.streetviewer_tooltip').css('left',$('#streetviewer_street').scrollLeft());
				
				// Show tooltip
				$(image_element).parent().parent().find('.streetviewer_tooltip').stop().show();
				
				// Fade left
				$('#streetviewer_fade_left').stop().width($(this).position().left).css('left',$('#streetviewer_street').scrollLeft());
				

				// Fade right
				$('#streetviewer_fade_right').stop().width(container_width);
				$('#streetviewer_fade_right').stop().css('left',$(this).position().left + $(this).width() + $('#streetviewer_street').scrollLeft());
			})
		}
		
		/** BIND NAV BUTTONS **/
		
		// Go to end of street
		settings.nav_last.click(function(){
			$('div#streetviewer_street').stop().animate({scrollLeft: $('div#streetviewer_street ul').width() - $('div#streetviewer_wrapper').width() },1000,'swing',function() {
				load_images();																																								 
			})
		});
		
		// Got to start of street
		settings.nav_first.click(function(){
			$('div#streetviewer_street').stop().animate({scrollLeft: 0 },1000,'swing',function() {																		   
			})
		});
		
		// Go to next screen
		settings.nav_next.click(function(){													
			$('div#streetviewer_street').stop().animate({scrollLeft: parseInt($('div#streetviewer_street').scrollLeft()) + $('div#streetviewer_wrapper').width() },1000,'swing',function() {																																										  
			})
		});
		
		// Go to previous screen
		settings.nav_previous.click(function(){
			$('div#streetviewer_street').stop().animate({scrollLeft: parseInt($('div#streetviewer_street').scrollLeft()) - $('div#streetviewer_wrapper').width() },1000,'swing',function() { 																																							  
			})
		});
		
		// Go to evens view
		settings.nav_evens.click(function() {
			center_element = 0;
			left_elements = 0;
			right_elements = 0;
			$('#streetviewer_loader').width(container_width).show();
			
			$('#streetviewer_street').load(settings.base_url+'index.php/main/street2/?street_id='+$('#street_id').val() + '&side=E',null,function() {																												
				$('#streetviewer_loader').hide();
				$('div#nav_odds').css('background-position','top');
				$('div#nav_evens').css('background-position','bottom');
				
				center_element = $('#streetviewer_street img').get(Math.floor($('#streetviewer_street img').size() / 2));
				left_elements = $('#streetviewer_street img').slice(0,(Math.floor($('#streetviewer_street img').size() / 2)));
				right_elements = $('#streetviewer_street img').slice((Math.floor($('#streetviewer_street img').size() / 2)) + 1,$('#streetviewer_street img').size());
				
				/** INITIALISE THE FOLLOWING SETTINGS ON STARTUP **/
				// Set transparency on objects
				settings.nav_left_hover.fadeTo(0, 0.3);
				settings.nav_right_hover.fadeTo(0, 0.3);
				$('.shopfront_link').fadeTo(0, 0.8);
				$('.streetviewer_tooltip').fadeTo(0,0.9);
				
				// Goto center of street
				$('#streetviewer_street').scrollLeft(parseInt($('#streetviewer_street').scrollLeft()) + parseInt($(center_element).position().left) - parseInt($('div#streetviewer_street').width() / 2));

				load_images();
			});
		});
		
		// Go to odds view
		settings.nav_odds.click(function() {
			center_element = 0;
			left_elements = 0;
			right_elements = 0;
			$('#streetviewer_loader').width(container_width).show();
			
			$('#streetviewer_street').load(settings.base_url+'index.php/main/street2/?street_id='+$('#street_id').val() + '&side=O',null,function() {																													
				$('#streetviewer_loader').hide();
				$('div#nav_odds').css('background-position','bottom');
				$('div#nav_evens').css('background-position','top');
				
				center_element = $('#streetviewer_street img').get(Math.floor($('#streetviewer_street img').size() / 2));
				left_elements = $('#streetviewer_street img').slice(0,(Math.floor($('#streetviewer_street img').size() / 2)));
				right_elements = $('#streetviewer_street img').slice((Math.floor($('#streetviewer_street img').size() / 2)) + 1,$('#streetviewer_street img').size());
				/** INITIALISE THE FOLLOWING SETTINGS ON STARTUP **/
				// Set transparency on objects
				settings.nav_left_hover.fadeTo(0, 0.3);
				settings.nav_right_hover.fadeTo(0, 0.3);
				$('.shopfront_link').fadeTo(0, 0.8);
				$('.streetviewer_tooltip').fadeTo(0,0.9);
				
				// Goto center of street
				$('#streetviewer_street').scrollLeft(parseInt($('#streetviewer_street').scrollLeft()) + parseInt($(center_element).position().left) - parseInt($('div#streetviewer_street').width() / 2));
				
				load_images();
			});
		});
		
		/** INITIALISE THE FOLLOWING SETTINGS ON STARTUP **/

		// Set transparency on objects
		settings.nav_left_hover.fadeTo(0, 0.3);
		settings.nav_right_hover.fadeTo(0, 0.3);
		$('.shopfront_link').fadeTo(0, 0.7);
		$('.streetviewer_tooltip')
		.fadeTo(0,0.9);
		
		// Goto center of street
		$('#streetviewer_street').scrollLeft(parseInt($('#streetviewer_street').scrollLeft()) + parseInt($(center_element).position().left) - parseInt($('div#streetviewer_street').width() / 2));
				
		// Load odd side of street on startup
		load_images();
		
		// Set map to middle of screen
		//$('#map_placeholder').width($('div#streetviewer_street').width());
	};
} catch(err) {
	alert(err);	
}
})(jQuery);