		var advanced_slider = function( selector, options ){
				var _options = {
					linkSelectorPrev:false,
					linkSelectorNext:false,
					images:[],
					callback:function(){},
					padding:20
				},
				image_count,
				imageNumber = 0,
				clickSelectorPrev = [],
				clickSelectorNext = [],
				mainBlock = $(selector),
				imageContainer,
				imageView = new Image(),
				imageProp = {
					width:0,
					height:0
				},
				imageViewInfo={},
				navigationLeftButton,
				navigationRightButton,
				set_number;
				
				if( !mainBlock ) return false;
				
				mainBlock.css({position:'relative'}).empty();
				
				if( typeof options == 'object' ) $.extend(_options, options);
				
				options = _options;
				
				if( options.linkSelectorPrev && typeof options.linkSelectorPrev == 'string' )
					clickSelectorPrev[clickSelectorPrev.length+1] = $(options.linkSelectorPrev);
				else if ( options.linkSelectorPrev && typeof options.linkSelectorPrev == 'array' )
					$.each(options.linkSelectorPrev,function(i,selector){
						clickSelectorPrev[clickSelectorPrev.length+1] = $(selector);
					});
				
				if( options.linkSelectorNext && typeof options.linkSelectorNext == 'string' )
					clickSelectorNext[clickSelectorNext.length+1] = $(options.linkSelectorNext);
				else if ( options.linkSelectorNext && typeof options.linkSelectorNext == 'array' )
					$.each(options.linkSelectorNext,function(i,selector){
						clickSelectorNext[clickSelectorNext.length+1] = $(selector);
					});
					
				image_count = options.images.length;
				
				if( image_count == 0 ) return false;
				
				imageContainer = $('<div class="advanced_slider_image_container"></div>')
						.css({
							display:'none',
							position:'absolute',
							backgroundPosition:'50% 50%',
							backgroundRepeat:'no-repeat',
							top:'50%',
							left:'50%',
							zIndex:5
						})
						.appendTo( mainBlock );
				
				imageView = $('<img />')
						.attr('src', options.images[0].src )
						.css({position:'absolute',left:'-2000px'})
						.appendTo( mainBlock );
				
				var _image_loaded = new Array();
				
				function loadImage( path, callback ){
					var callback = ( typeof callback == 'function' )? callback : function(){};
					if( !$.browser.msie ) $.get(path,callback);
					else{
						imageView[0].src = path;
						imageView[0].onload = callback;
					}
				}
				
				function loadNewImage(){
					//if( !$.browser.msie ) 
						imageContainer.fadeOut(200,function(){
							if( $.browser.msie ) this.style.removeAttribute('filter');
						});
					
					imageProp = {
						width : imageView[0].offsetWidth,
						height : imageView[0].offsetHeight
					}
					
					mainBlock.animate({height:imageProp.height+(options.padding*2)},function(){
						imageContainer
							.css({
								width:imageProp.width,
								height:imageProp.height,
								marginTop:(-(Math.round(imageProp.height/2))),
								marginLeft:(-(Math.round(imageProp.width/2))),
								backgroundImage:'url("'+imageViewInfo.src+'")',
								display:'block'
							});
							
							imageContainer.fadeIn(100,function(){
								imageContainer.css({display:'block'});
								if( $.browser.msie ) this.style.removeAttribute('filter');
							});
							
						options.callback( imageProp, imageViewInfo, (imageNumber+1), image_count );
					})
					//.css({height : ( imageProp.height+(options.padding*2) )})
					;
				}
				
				var _images_props = new Array();
				
				function setImage( number ){
					imageViewInfo = options.images[number];
					imageView.attr('src', imageViewInfo.src );
					if( _images_props[number] ){
						imageProp = _images_props[number];
						loadNewImage();
						return true;
					}
					loadImage( imageViewInfo.src, function(){
						_images_props[number] = imageProp = {
							width : imageView[0].offsetWidth,
							height : imageView[0].offsetHeight
						}
						loadNewImage();
					} );
					return true;
				}
				
				function prevImage( event ){
					if( image_count == 1 ) return false;
					if( imageNumber == 0  ) set_number = image_count - 1;
					else set_number = imageNumber - 1;
					setImage( imageNumber = set_number );
				}
				
				function nextImage( event ){
					if( image_count == 1 ) return false;
					if( ( imageNumber + 1 ) == image_count  ) set_number = 0;
					else set_number = imageNumber + 1;
					
					setImage( imageNumber = set_number );
				}
				
				if( clickSelectorPrev.length )
					$.each(clickSelectorPrev,function(index,object){
						$(object).click(prevImage);
					});
				
				if( clickSelectorNext.length )
					$.each(clickSelectorNext,function(index,object){
						$(object).click(nextImage);
					});
				
				function setProportions(callback){
					imageProp = {
						width : imageView[0].offsetWidth,
						height : imageView[0].offsetHeight
					}
				}
				
				setImage(0);
				
				$(function(){
					imageView.bind( 'load.imageLoaded', setProportions );
				});
				
				if( image_count > 1 ){
				
					navigationLeftButton = $('<a href="javascript:void(0);" class="advanced_slider_link_left"><span></span></a>')
						.css({
							position:'absolute',
							left:0,
							top:0,
							width:'50%',
							height:'100%',
							zIndex:1000,
							display:'block'
						}).appendTo( mainBlock ).click(prevImage).hover(function(){
							$(this).addClass('hover');
						},function(){
							$(this).removeClass('hover');
						});

					navigationLeftButton = $('<a href="javascript:void(0);" class="advanced_slider_link_right"><span></span></a>')
						.css({
							position:'absolute',
							right:0,
							top:0,
							width:'50%',
							height:'100%',
							zIndex:1000,
							display:'block'
						}).appendTo( mainBlock ).click(nextImage).hover(function(){
							$(this).addClass('hover');
						},function(){
							$(this).removeClass('hover');
						});

				}
			}
