/* funkcjonalność usuwania niepotrzebnych pustych znaków */
function trim(str, chars) {	var strr = new String(str); return ltrim(rtrim(strr, chars), chars); }
function ltrim(str, chars) { chars = chars || "\\s"; return str.replace(new RegExp("^[" + chars + "]+", "g"), ""); }
function rtrim(str, chars) { chars = chars || "\\s"; return str.replace(new RegExp("[" + chars + "]+$", "g"), ""); }

//scroll
var ScrollBar = new Class({

		Implements: [Events, Options],

		options: {
			maxThumbSize: 15,
			wheel: 8,
			arrows: true,
			hScroll: true // horizontal scrollbars
		},

		initialize: function(textv, options){
			this.setOptions(options);
			this.content = new Element('div', {'class':'scroller_content'}).injectBefore(textv);
			textv.injectInside(this.content);
			this.main = new Element('div', {'class':'scroller_main'}).injectBefore(this.content);
			this.content.injectInside(this.main);
			var w = parseInt(textv.getStyle('width'));
			this.main.setStyles({
					width: w-30,
					height: textv.getStyle('height'),
					"position":"relative",
					'float':'left',
					'display': 'inline',
					'margin-left':textv.getStyle('margin-left') });
			this.content.setStyles({ 
					width: w-30,
					height: textv.getStyle('height'),
					'overflow': 'hidden',
					'float':'left',
					'display': 'inline',
					"position":"relative"
			 });
			textv.setStyles({height:'','margin-left':0, 'width': w-30});
					
			if (this.options.arrows == true){
				this.arrowOffset = 90;
			} else {
				this.arrowOffset = 0;
			}
			
			if (this.options.hScroll == true){
				this.hScrollOffset = 15;
			} else {
				this.hScrollOffset = 0;
			}				

			this.vScrollbar = new Element('div', {
    				'class': 'vScrollbar'
				}).injectAfter(this.content);
			this.vScrollbar.setStyles({'float': 'left',	'margin-left':10});				

			if (this.options.arrows == true){	
				this.arrowBegin = new Element('div', {
    					'class': 'arrowBegin'
					}).injectInside(this.vScrollbar);	
				this.arrowTop = new Element('div', {
    					'class': 'arrowTop'
					}).injectInside(this.vScrollbar);
				this.arrowUp = new Element('div', {
    					'class': 'arrowUp'
					}).injectInside(this.vScrollbar);
			}	

			this.vTrack = new Element('div', {
    				'class': 'vTrack'
				}).injectInside(this.vScrollbar);
			this.vTrack.setStyles({'height':380});
				
			this.vThumb = new Element('div', {
    				'class': 'vThumb'
				}).injectInside(this.vTrack);

			if (this.options.arrows == true){				
				this.arrowDown = new Element('div', {
    					'class': 'arrowDown'
					}).injectInside(this.vScrollbar);
								
				this.arrowBottom = new Element('div', {
    					'class': 'arrowBottom'
					}).injectInside(this.vScrollbar);
				this.arrowEnd = new Element('div', {
    					'class': 'arrowEnd'
					}).injectInside(this.vScrollbar);	
			}		
			
			this.hScrollbar = new Element('div', {
    				'class': 'hScrollbar'
				}).injectAfter(this.vScrollbar);
			this.hScrollbar.setStyles({'clear': 'both'});
			
			if (this.options.arrows == true){							
				this.arrowLeft = new Element('div', {
    					'class': 'arrowLeft'
					}).injectInside(this.hScrollbar);
			}

			this.hTrack = new Element('div', {
    				'class': 'hTrack'
				}).injectInside(this.hScrollbar);
			this.hTrack.setStyles({'width':300});
			
			this.hThumb = new Element('div', {
    				'class': 'hThumb'
				}).injectInside(this.hTrack);							
	
			if (this.options.arrows == true){
				this.arrowRight = new Element('div', {
    					'class': 'arrowRight'
					}).injectInside(this.hScrollbar);
			}											

			this.corner = new Element('div', {
    				'class': 'corner'
				}).injectAfter(this.hScrollbar);
			
			this.bound = {
				'vStart': this.vStart.bind(this),
				'hStart': this.hStart.bind(this),				
				'end': this.end.bind(this),
				'vDrag': this.vDrag.bind(this),
				'hDrag': this.hDrag.bind(this),				
				'wheel': this.wheel.bind(this),
				'vPage': this.vPage.bind(this),
				'hPage': this.hPage.bind(this)				
			};

			this.vPosition = {};
			this.hPosition = {};			
			this.vMouse = {};
			this.hMouse = {};			
			this.update();
			this.attach();
			this.zero();
		},

		zero: function() {
			this.content.scrollTop = 0;
			this.vUpdateThumbFromContentScroll();
		},
		
		update: function(){
			textv = this.content.getElement('div');
			
			this.main.setStyle('height', this.content.offsetHeight + this.hScrollOffset);
			this.vTrack.setStyle('height', this.content.offsetHeight - this.arrowOffset);
						
			this.main.setStyle('width', this.content.offsetWidth + ((textv.offsetWidth != this.content.offsetWidth - 30)?30:0));
			this.hTrack.setStyle('width', this.content.offsetWidth - this.arrowOffset);
			
			// Remove and replace vertical scrollbar			
			if (this.content.scrollHeight <= this.main.offsetHeight) {
				this.vScrollbar.setStyle('display', 'none');
				if (this.options.hScroll == true){				
					this.hTrack.setStyle('width', this.hTrack.offsetWidth + 30);
				}	
				this.content.setStyle('width', this.content.offsetWidth + 30);
			} else {
				this.vScrollbar.setStyle('display', 'block');
			}
			
			/* poprawka dla scrollerów dokładanych i update'owanych przez ajax'a */
			if(textv.offsetWidth != this.content.offsetWidth)
				this.content.setStyle('width', textv.offsetWidth);
			/* koniec poprawki */
			
			
			if (this.options.hScroll == true){			
			
				// Remove and replace horizontal scrollbar
				if (this.content.scrollWidth <= this.main.offsetWidth) {
					this.hScrollbar.setStyle('display', 'none');
					this.vTrack.setStyle('height', this.vTrack.offsetHeight + this.hScrollOffset);				
					this.content.setStyle('height', this.content.offsetHeight + this.hScrollOffset);	
				} else {
					this.hScrollbar.setStyle('display', 'block');			
				}
			
				// Remove and replace bottom right corner spacer			
				if (this.content.scrollHeight <= this.main.offsetHeight || this.content.scrollWidth <= this.main.offsetWidth) {
					this.corner.setStyle('display', 'none');				
				} else {
					this.corner.setStyle('display', 'block');			
				}		
			
				// Horizontal

				this.hContentSize = this.content.offsetWidth;
				this.hContentScrollSize = this.content.scrollWidth;
				this.hTrackSize = this.hTrack.offsetWidth;

				this.hContentRatio = this.hContentSize / this.hContentScrollSize;
				this.hThumbSize = (this.hTrackSize * this.hContentRatio).limit(this.options.maxThumbSize, this.hTrackSize);
				this.hScrollRatio = this.hContentScrollSize / this.hTrackSize;
				this.hThumb.setStyle('width', this.hThumbSize);

				this.hUpdateThumbFromContentScroll();
				this.hUpdateContentFromThumbPosition();			

			} else {
					this.hScrollbar.setStyle('display', 'none');
					this.corner.setStyle('display', 'none');										
			}
			

			// Vertical
			
			this.vContentSize = this.content.offsetHeight;
			this.vContentScrollSize = this.content.scrollHeight;
			this.vTrackSize = this.vTrack.offsetHeight;

			this.vContentRatio = this.vContentSize / this.vContentScrollSize;
			this.vThumbSize = (this.vTrackSize * this.vContentRatio).limit(this.options.maxThumbSize, this.vTrackSize);
			this.vScrollRatio = this.vContentScrollSize / this.vTrackSize;
			this.vThumb.setStyle('height', this.vThumbSize);

			this.vUpdateThumbFromContentScroll();
			this.vUpdateContentFromThumbPosition();
			
		},

		vUpdateContentFromThumbPosition: function(){
			this.content.scrollTop = this.vPosition.now * this.vScrollRatio;
		},
		
		hUpdateContentFromThumbPosition: function(){
			this.content.scrollLeft = this.hPosition.now * this.hScrollRatio;
		},		

		vUpdateThumbFromContentScroll: function(){
			this.vPosition.now = (this.content.scrollTop / this.vScrollRatio).limit(0, (this.vTrackSize - this.vThumbSize));
			this.vThumb.setStyle('top', this.vPosition.now);
		},
		
		hUpdateThumbFromContentScroll: function(){
			this.hPosition.now = (this.content.scrollLeft / this.hScrollRatio).limit(0, (this.hTrackSize - this.hThumbSize));
			this.hThumb.setStyle('left', this.hPosition.now);
		},		

		attach: function(){
			this.vThumb.addEvent('mousedown', this.bound.vStart);
			
			if (this.options.wheel) this.content.addEvent('mousewheel', this.bound.wheel);
			//this.vTrack.addEvent('mouseup', this.bound.vPage);
			this.arrowBottom.addEvent('mouseup', this.bound.vPage);
			this.arrowTop.addEvent('mouseup', this.bound.vPage);
			
			this.hThumb.addEvent('mousedown', this.bound.hStart);
			this.hTrack.addEvent('mouseup', this.bound.hPage);			
			
			if (this.options.arrows == true){
				this.arrowUp.addEvent('mousedown', function(event){
						this.interval = (function(event){
						this.content.scrollTop -= this.options.wheel;
						this.vUpdateThumbFromContentScroll();
					}.bind(this).periodical(40))
				}.bind(this));
			
				this.arrowUp.addEvent('mouseup', function(event){
					$clear(this.interval);
				}.bind(this));
			
				this.arrowUp.addEvent('mouseout', function(event){
					$clear(this.interval);
				}.bind(this));
						
				this.arrowDown.addEvent('mousedown', function(event){
						this.interval = (function(event){
						this.content.scrollTop += this.options.wheel;
						this.vUpdateThumbFromContentScroll();
					}.bind(this).periodical(40))
				}.bind(this));
			
				this.arrowDown.addEvent('mouseup', function(event){
					$clear(this.interval);
				}.bind(this));
			
				this.arrowDown.addEvent('mouseout', function(event){
					$clear(this.interval);
				}.bind(this));
			
				this.arrowLeft.addEvent('mousedown', function(event){
						this.interval = (function(event){
						this.content.scrollLeft -= this.options.wheel;
						this.hUpdateThumbFromContentScroll();
					}.bind(this).periodical(40))
				}.bind(this));
			
				this.arrowLeft.addEvent('mouseup', function(event){
					$clear(this.interval);
				}.bind(this));
			
				this.arrowLeft.addEvent('mouseout', function(event){
					$clear(this.interval);
				}.bind(this));
			
				this.arrowRight.addEvent('mousedown', function(event){
						this.interval = (function(event){
						this.content.scrollLeft += this.options.wheel;
						this.hUpdateThumbFromContentScroll();
					}.bind(this).periodical(40))
				}.bind(this));
			
				this.arrowRight.addEvent('mouseup', function(event){
					$clear(this.interval);
				}.bind(this));
			
				this.arrowRight.addEvent('mouseout', function(event){
					$clear(this.interval);
				}.bind(this));
			}			
						
		},
		
		wheel: function(event){
			this.content.scrollTop -= event.wheel * this.options.wheel;
			this.vUpdateThumbFromContentScroll();
			event.stop();
		},

		vPage: function(event){
			if (event.page.y > this.vThumb.getPosition().y) this.content.scrollTop += this.content.offsetHeight;
			else this.content.scrollTop -= this.content.offsetHeight;
			this.vUpdateThumbFromContentScroll();
			event.stop();
		},
		
		hPage: function(event){
			if (event.page.x > this.hThumb.getPosition().x) this.content.scrollLeft += this.content.offsetWidth;
			else this.content.scrollLeft -= this.content.offsetWidth;
			this.hUpdateThumbFromContentScroll();
			event.stop();
		},		

		vStart: function(event){
			this.vMouse.start = event.page.y;
			this.vPosition.start = this.vThumb.getStyle('top').toInt();
			document.addEvent('mousemove', this.bound.vDrag);
			document.addEvent('mouseup', this.bound.end);
			this.vThumb.addEvent('mouseup', this.bound.end);
			event.stop();
		},
		
		hStart: function(event){
			this.hMouse.start = event.page.x;		
			this.hPosition.start = this.hThumb.getStyle('left').toInt();
			document.addEvent('mousemove', this.bound.hDrag);
			document.addEvent('mouseup', this.bound.end);
			this.hThumb.addEvent('mouseup', this.bound.end);
			event.stop();
		},		

		end: function(event){
			document.removeEvent('mousemove', this.bound.vDrag);
			document.removeEvent('mousemove', this.bound.hDrag);			
			document.removeEvent('mouseup', this.bound.end);
			this.vThumb.removeEvent('mouseup', this.bound.end);
			this.hThumb.removeEvent('mouseup', this.bound.end);			
			event.stop();
		},

		vDrag: function(event){
			this.vMouse.now = event.page.y;
			this.vPosition.now = (this.vPosition.start + (this.vMouse.now - this.vMouse.start)).limit(0, (this.vTrackSize - this.vThumbSize));
			this.vUpdateContentFromThumbPosition();
			this.vUpdateThumbFromContentScroll();
			event.stop();
		},
		
		hDrag: function(event){
			this.hMouse.now = event.page.x;
			this.hPosition.now = (this.hPosition.start + (this.hMouse.now - this.hMouse.start)).limit(0, (this.hTrackSize - this.hThumbSize));
			this.hUpdateContentFromThumbPosition();
			this.hUpdateThumbFromContentScroll();
			event.stop();
		}		

	});

/* obsługa scrollerów */
function addScrollers() {
	if(!(document.scr && document.scr.length > 0)) {
		document.scr = new Array();
	}
	var i = 0;
	$$('.scroll').each(function(textv) {
		var height = 0;
		textv.getChildren().each(function(el) {
			height += el.getSize().y;
		});

		textv.setStyle('display', 'block');
		textv.setStyle('overflow', 'visible');
		if(height > parseInt(textv.getStyle('height'))) {
			document.scr[i] = new ScrollBar(textv, {'hScroll': false});
			i += 1;
		}
	});
}

window.addEvent('domready', function(){
	
	/* IE6 menu hack #1 */
	if(window.ie6) {
		var bg = new Element('div');
		bg.setAttribute('id', 'belkaBgIe');
		bg.injectInside($('belka'));
	}
	
//	/* IE6 menu hack #2 - wyłączenie podmenu */
//	$$('#submenu div').each(function(el) { el.setStyle('display', 'none') });
//	/* koniec obsługi głównego menu */
	
	/* IE6 header hack, zunifikowany na wszystko - wpisanie SWFObjecta */
	if($$('#flashHeader').length > 0 && bottom_so) {
		bottom_so.write("flashHeader");
	}
	
	/* IE6 float hack */
	if(window.ie6) {
		function repairFloat() {
			var winWidth = window.getWidth();
			
			if(winWidth < 1045) {
				$$('html').each(function (el) { el.setStyle('overflow-x', 'scroll')});
				window.scrollTo(1000, 0);
				$$('#content').each(function (el) { el.setStyle('width', 1045)});
				$$('#footer').each(function (el) { el.setStyle('width', 1045)});
			}
			else {
				$$('#content').each(function (el) { el.setStyle('width', '100%')});
				$$('#footer').each(function (el) { el.setStyle('width', '100%')});
				$$('html').each(function (el) { el.setStyle('overflow-x', 'hidden')});
			}
		}
		window.onresize = repairFloat;
		repairFloat();
		repairFloat();
	}
	
 	/* wyłącz lewe menu, jeśli to nie jest dział enduro */
 	if($$('body#enduro').length == 0 && $$('#sidemenucontent').length > 0) {
		var mySlide = new Fx.Slide('sidemenucontent');
	 	$$('.dropper').each(function(item) {
	 		item.addEvent('click', function(e){
				e = new Event(e);
				mySlide.toggle();
				$E('a#sideMenuArrow').toggleClass('dropdown');
				e.stop();
			});
	 	});
 		
	 	/* rozciągnięcie aktywnego fragmentu lewego menu w pionie */
 		var sideMenuContent = $$('#sidemenucontent > li');
 		var sizeall = 434 - (sideMenuContent.length-1)*26;
 		sideMenuContent.each(function(el) {
 			if(el.getElement('a').hasClass('selected') && $defined(el.getElement('ul'))) {
 				el.setStyle('height', sizeall);
 			}
 		})
 		$$('#sidemenucontent > li').getLast().addClass ('last-child');
 		window.menuLeft = mySlide;
		if($E('ul#menu').hasClass('menuInitClosed')) {
			menuLeft.hide();
			$E('a#sideMenuArrow').toggleClass('dropdown');
		}
		else { menuLeft.show(); }
		
 		$('sidemenu').setStyle('visibility', 'visible');
 	}

	/* obsługa drukowania */
	$$('#printIcon').addEvent('click', function(e) {
		print();
	});
		
	/* image rotator */
	if($defined($E('dl#leftBox dd'))) {
		$E('dl#leftBox dd').setStyle('display', 'block').addClass('active');
	}	
	
	$$('dl#leftBox dt a').each(function(next) {
		next.addEvent('click', function (e) {
			// var e = new Event(e); e.stop();
			var active = $E('dl#leftBox dd.active');
			var follow = active.getNext();
			if (!$defined(follow)) follow = active.getParent().getElement('dd');
			
			active.removeClass('active');
			follow.addClass('active');
			
			active.setStyle('display', 'none');
			follow.setStyle('display', 'block');
		});
	});
	if($defined($E('dl#leftBox dt a'))) {
		(function() { $E('dl#leftBox dt a').fireEvent('click'); }).periodical(6000);
	}
	/* koniec rotatora */
	
	/* dodanie window.open */
	$$('a.openNew').each(function(el) {
		el.addEvent('click', function(e) {
			var e = new Event(e); e.stop();
			var newWin = window.open(el.getProperty('href'));
		});
	});

	/* dodaj scrollery wszędzie, gdzie potrzebne */	
	window.setTimeout("addScrollers();", 10);
});
