function PhotoScroller(holderId, params){
	params= params || {};
	
	var box = document.createElement('div');
	
	if(holderId){
		var holder = document.getElementById(holderId);
		box = (holder ? holder : document.getElementsByTagName('body')[0]).appendChild(box);
	}
	box.className = 'ps_box';
	
	box.img = box.appendChild(document.createElement('img'));
	box.img.className = 'ps_image';
	box.img.src = '';
	
	box.content = box.appendChild(document.createElement('div'));
	box.content.className = 'ps_content';
	
	box.blind = box.content.appendChild(document.createElement('div'));
	box.blind.className = 'ps_blind';
	
	box.front = box.content.appendChild(document.createElement('div'));
	box.front.className = 'ps_front';
	
	box.header = box.front.appendChild(document.createElement('h2'));
	box.header.innerHTML = 'Title';

	box.description = box.front.appendChild(document.createElement('div'));
	box.description.className = 'ps_description';
	box.description.innerHTML = 'Lorem Ipsum';
	
	box.nav = box.front.appendChild(document.createElement('div'));
	box.nav.className = 'ps_nav';
	
	box.pages = box.nav.appendChild(document.createElement('ul'));
	
	var span = box.nav.appendChild(document.createElement('span'));
	span.className = 'ps_morelink';
	
	if(params.commonRef){
        span.innerHTML = params.commonRef;
        box.link = null;
	}else{
        box.link = span.appendChild(document.createElement('a'));
        box.link.innerHTML = 'Читати далі';
        box.link.href = '#read-more';
        span.appendChild(document.createTextNode(' →'));
	}
	
	box.appendChild(document.createElement('ins')).className = 'ps_corner ps_corner_lt';
	box.appendChild(document.createElement('ins')).className = 'ps_corner ps_corner_rt';
	box.appendChild(document.createElement('ins')).className = 'ps_corner ps_corner_rb';
	box.appendChild(document.createElement('ins')).className = 'ps_corner ps_corner_lb';
	
	box._addCssClass = function(elm, className){
		var patt=new RegExp('\\b'+className+'\\b','i');
		if(!patt.test(String(this.className)))
			elm.className=elm.className+' '+className;
	}
	
	box._removeCssClass = function(elm, className){
		var patt=new RegExp('\\b'+className+'\\b','i');
		if(patt.test(String(this.className)))
			elm.className=String(elm.className).replace(patt,'');
	}

	box.run = function(data, startIndex){
		this.data = data;
		this.showSlide(startIndex || 0);
		
		//laziest way to precache files
		for(var i=0; i<this.data.length; i++){
			(new Image).src = this.data[i].image;		
		}
	}

	box.populateNav = function(selectedNum){
		box.pages.innerHTML = '';
		for(var i=0; i<this.data.length; i++){
			var li = box.pages.appendChild(document.createElement('li'));
			if(selectedNum == i)
				li.className = 'current';
			
			var link = li.appendChild(document.createElement('a'));
			link.innerHTML = i + 1;
			link.href = '#show-slide';
			link.num = i;
			link.onclick = function(){
				box.showSlide(this.num);
				return false;
			};
		}
	}

	box.showSlide = function(num){
		this.header.innerHTML = this.data[num].title;
		this.img.src = this.data[num].image;
		this.description.innerHTML = this.data[num].description;
		if(this.link) this.link.href = this.data[num].link;
		if(this.data.length > 1) this.populateNav(num);
	}
	
	return box;
}
