(function(){

function Splitter(ref){

	if (ref.childNodes.length == 0) {
		return;
	}

	this.root=cn('div').cls('SLplitter');
	this.prev=this.root.ac2('div').cls('side_ prev');
	this.next=this.root.ac2('div').cls('side_ next');
	this.pages=this.root.ac2('div').cls('links');

	this.pagesContainer=$(this.pages.ac(ref.cloneNode(true))).cls('pages');

	this.slider=this.root.ac2('div').cls('slider');
	this.pointer=this.slider.ac2('div').cls('pointer');
	this.curPos=this.slider.ac2('div').cls('curPos');
	this.lastValue=0;
	this.initValue=0;

	ref.style.display='none';

	if (ref.nextSibling) {
		ref.parentNode.insertBefore(this.root,ref.nextSibling);
	} else {
		this.root.sp(ref.parentNode);
	}

	this.sliderDrag=false;
	this.Init();
	this.SetSliderVisiblility();
	var t=this;
	$E.Add(window,'resize',function(){
		t.SetSliderVisiblility();
		var percent=t.lastValue;
		t.MovePointer(percent);
		t.MoveCurPos(t.initValue);
		if (!t.isPagingFits()) {
			t.MovePage(percent);
		}
	});
	
	$E.DOMready(function(){
		t.SetSliderVisiblility();
		var percent=t.lastValue;
		t.MovePointer(percent);
		t.MoveCurPos(t.initValue);
		if (!t.isPagingFits()) {
			t.MovePage(percent);
		}

	});
}

Splitter.prototype={

	Init:function(){
		var pageNo=0,pagesCount=this.pagesContainer.childNodes.length,el=null,i=0, ViewCount=0, active=null;
		while(el=this.pagesContainer.childNodes[i++]){
			if (el.offsetLeft<this.pages.offsetWidth) {
				ViewCount++;
			}
			if(el.nodeName.toLowerCase()=='strong'){
				active = el;
				pageNo=i;
			}
		}

		var ViewHalf=Math.ceil(ViewCount/2);
		var percent=this.initValue = this.lastValue = 100*pageNo/pagesCount;

		if (!percent) {
percent = 0;
		}
		this.MoveCurPos(percent);

		if (!this.isPagingFits()) {
			if (pageNo<ViewHalf) {
				percent=0;
			} else if (pageNo>(pagesCount-ViewHalf)) {
				percent = 100;
			} else if ((pageNo>=ViewHalf) && (pageNo<ViewCount)) {
				percent = 100*(pageNo-ViewHalf)/pagesCount;
			} else {
				percent=(2*active.offsetLeft-this.pages.offsetWidth+active.offsetWidth)*50/(this.pagesContainer.offsetWidth-this.pages.offsetWidth);
			}
			this.MovePage(percent);
			this.MovePointer(percent);
		}

		this.SideLinks(active);

		$E.Add(this.slider,'mousedown',this.SliderStart.bind(this));
		$E.Add(document,'mousemove',this.SliderMove.bind(this));
		$E.Add(this.slider,'mouseup',this.SliderStop.bind(this));
		$E.Add(document,'mouseup',this.SliderStop.bind(this));
	},

	MovePointer:function(percent){
		this.pointer.ss({left:percent+'%'});
		this.AdjustPos(this.pointer, this.pointer, percent);
	},

	MoveCurPos:function(percent){
		this.curPos.ss({left:percent+'%'});
		this.AdjustPos(this.curPos, this.curPos, percent);
	},
	
	AdjustPos:function(moveObj, alignObj) {
		moveObj.ss({left:(moveObj.offsetLeft-alignObj.offsetWidth/2)+'px'});
	},

	MovePage:function(percent){
		var offset=(this.pagesContainer.offsetWidth-this.pages.offsetWidth)*percent/100;
		if(offset<0){
			offset=0;
		}
		this.pagesContainer.ss({left:'-'+offset+'px'});
	},

	SliderMove:function(e){
		e.stop();
		if(!this.sliderDrag){
			return;
		}
		var w=this.slider.offsetWidth;
		var sliderPos=getXY(this.slider);

		var offset=e.x-sliderPos.x;

		var percent=100*(offset/w);

		if (percent<0) {
			percent = 0;
		}

		if (percent>100) {
			percent=100;
		}
		this.lastValue=percent;

		this.MovePointer(percent);
		this.MovePage(percent);
	},

	SliderStart:function(e){
		this.sliderDrag=true;
		this.SliderMove(e);
	},

	SliderStop:function(e){
		this.sliderDrag=false;
	},

	SetPointerAtPercent:function(percent) {
		this.pointer.ss({left:percent+'%'});
		this.pointer.ss({left:(this.pointer.offsetLeft-this.pointer.offsetWidth/2)+'px'});
	},

	SideLinks:function(curObj){
		var parent=this.pagesContainer;
		if (parent.firstChild!=curObj) {
			this.prev.add('a','\u2190 Prev').att('href',curObj.previousSibling.href).cls('top prev');
			this.prev.add('a','First').att('href',parent.firstChild.href);
		} else {
			this.prev.add('span','\u2190 Prev').cls('top prev');
			this.prev.add('span','First');
		}

		if (parent.lastChild!=curObj) {
			this.next.add('a','Next \u2192').att('href',curObj.nextSibling.href).cls('top next');
			this.next.add('a','Last').att('href',parent.lastChild.href);
		} else {
			this.next.add('span','Next \u2192').cls('top next');
			this.next.add('span','Last');
		}
	},

	SetSliderVisiblility:function(){
		this.slider.ss({display:this.isPagingFits() ? 'none' : 'block'});
	},

	isPagingFits:function(){
		return this.pages.offsetWidth>=this.pagesContainer.lastChild.offsetLeft;
	}
};

var els=document.getElementsByTagName('div'),el=null,i=0;
var splitters=[];
while(el=els[i++]){
	if(el.className=='splitter'){
		splitters.push(el);
	}
}
if(splitters.length){
	splitters.each(function(el){
		new Splitter(el);
	});
}

})();
