var addressBook;


function prepareTextAlignRadios(el,page){
		el.getElements('label').each(function(label){
			if(label.getNext().checked)
				label.set('opacity',1);
			label.addEvent('mouseover',function(){
				if(!label.getNext().checked)
					label.set('opacity',1);
			});
			label.addEvent('mouseleave',function(){
				if(!label.getNext().checked)
					label.set('opacity',0.8);			
			});
			label.addEvent('click',function(){
				var klass=label.getNext().getProperty('class');
				var alignType='v';
				var src;
				if(klass.indexOf('text_align')>=0)
					alignType='h';
				el.getElements('label').each(function(label2){
					var radioClass=label2.getNext().getProperty('class');
					var src;
					if(radioClass.indexOf('text_align')>=0&&alignType=='h'){
						label2.set('opacity',0.8);
						src=label2.getElement('img').getProperty('src');
						label2.getElement('img').setProperty('src',src.replace('_sel',''));					
					}
					if(radioClass.indexOf('text_valign')>=0&&alignType=='v'){
						label2.set('opacity',0.8);
						src=label2.getElement('img').getProperty('src');
						label2.getElement('img').setProperty('src',src.replace('_sel',''));					
					}
				});
				label.getNext().checked=true;
				label.set('opacity',1);
				src=label.getElement('img').getProperty('src');
				src=src.substr(0,src.indexOf('.gif'));
				label.getElement('img').setProperty('src',src+'_sel.gif');
				$('card-edit-preview'+page).setStyles({'display':'inline','border':0});
			});				
		});
}	

function refreshEditFields(el,page){
			var nel=el.getNext();
			var nnel=nel.getFirst();
			el.set('text','Kliknij aby wpisać życzenia').setStyle('color','#888');
			el.addEvent('click',function(e){
				if(!el.retrieve('clicked')){
					this.set('text','').setStyle('color','#FFEB42').store('clicked',true);
				}
			//	this.store('height',this.getSize().y);
				this.setStyles({'display':'none'});
				nel.setStyle('display','block');
				nnel.setStyles({'display':'inline','font-family':this.getStyle('font-family'),'font-size':this.getStyle('font-size')}).focus();
			});
			nnel.addEvent('blur',function(e){
				nel.setStyle('display','none');
				this.setStyle('display','none');
				var html=this.getProperty('value');
				html=html.trim();

	//			if(html!=this.retrieve('oldvalue')){
//					alert(1);
//					$('card-edit-preview'+page).setStyles({'display':'inline','border':0});
//					this.store('rightclick',false);
//				}
				html=stripTags(html);
				this.set('value',html);
				el.setStyle('display','inline').set('html',html.replace(new RegExp("\n", "gi"), "<br/>"));
			});
			if(nnel.type=="textarea"){
				nnel.addEvent('keyup',function(){
					$('card-edit-preview'+page).setStyles({'display':'inline','border':0});
					var html=this.getProperty('value');
					html=stripTags(html);
				//	this.set('value',html);
					el.set('html',html.replace(new RegExp("\n", "gi"), "<br/>"));
				});
				nnel.addEvent('contextmenu',function(e){
					$('card-edit-preview'+page).setStyles({'display':'inline','border':0});				
//					this.store('oldvalue',this.get('value'));
//					this.store('rightclick',true);
				});
			}
			if(nnel.type=="text"){
				nnel.addEvent('keyup',function(){
					$('card-edit-preview'+page).setStyles({'display':'inline','border':0});				
					var html=this.getProperty('value');
					html=stripTags(html);
				//	this.set('value',html);
					el.set('html',html.replace(new RegExp("\n", "gi"), "<br/>"));
				});
			}		
}

/*
function pulse(){
	var max=$$('.pulse').length;
	$$('.pulse').each(function(el,i){
		var fx=new Fx.Morph(el,{duration:700,'link':'cancel',transition: Fx.Transitions.Back.easeOut});
		if(i==max-1)
			fx.addEvent('onComplete',pulse);
		fx.start.delay(500+i*700,fx,{
		'top':[(el.getStyle('height').toInt()/2),0],
		'left':[(el.getStyle('width').toInt()/2),0],
		'width':[el.getStyle('width').toInt()/4,el.getStyle('width').toInt()],
		'height':[el.getStyle('height').toInt()/4,el.getStyle('height').toInt()]
		});
	});
}
*/
function stripTags(html){
//	var regexp=/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/g;
	var regexp=/http\:\/\/|https\:\/\/|ftp\:\/\//gi;
	var regexp2=/<(.|\n)*?>/g;
	html=html.replace(regexp,'');
	html=html.replace(regexp2,'');
	return html;
}
/*
function pulse(){
var max=$$('.pulse').length;

$$('.pulse').each(function(el,i){
		var fx=new Fx.Morph(el,{duration:700,'link':'cancel',transition: Fx.Transitions.Back.easeOut});
		if(i==max-1)
			fx.addEvent('onComplete',pulse);
		fx.start.delay(500+i*700,fx,{
		'top':[(el.getStyle('height').toInt()/2),0],
		'left':[(el.getStyle('width').toInt()/2),0],
		'width':[el.getStyle('width').toInt()/4,el.getStyle('width').toInt()],
		'height':[el.getStyle('height').toInt()/4,el.getStyle('height').toInt()]
		});
	});
}
*/

window.addEvent('load',function(){

	var big=$('content-big').getSize().y;
	var small=$('content-small').getSize().y;
	var margin=316;
	if(small>big){
		if(small-big<margin){
			$('endpage').setStyle('margin-top',-small+big);
		}
		else
			$('endpage').setStyle('margin-top',-margin);
	}
	else{
	//		var margin=-316;
	//		if(small-big<-margin)
	//			$('endpage').setStyle('margin-top',margin+(small-big));
	//		else
	//			$('endpage').setStyle('margin-top',margin);
	}
	
	setEditPanel();
	PNGFix('img/blank.gif');
/*	if($('carousel_container')){
		var fxGal=new Fx.Scroll(window);
		if(!Browser.Engine.webkit)
			fxGal.toElement($('middle').getElement('.section-title'));
	}	
*/	
/*
	new MooTooltips({
			container: 'card-edit-box',
			hovered:'.edit-tipper-page2',		// the element that when hovered shows the tip
			ToolTipClass:'ToolTips',	// tooltip display class
			toolTipPosition:-1, // -1 top; 1: bottom - set this as a default position value if none is set on the element
			sticky:false,		// remove tooltip if closed
			fromTop: -70,		// distance from mouse or object
			fromLeft: 50,	// distance from left
			duration: 300,		// fade effect transition duration
			fadeDistance: 20    // the distance the tooltip starts the morph
		});
	new MooTooltips({
			container: 'card-edit-box',	
			hovered:'.edit-tipper-page3',		// the element that when hovered shows the tip
			ToolTipClass:'ToolTips',	// tooltip display class
			toolTipPosition:-1, // -1 top; 1: bottom - set this as a default position value if none is set on the element
			sticky:false,		// remove tooltip if closed
			fromTop: -70,		// distance from mouse or object
			fromLeft: 50,	// distance from left
			duration: 300,		// fade effect transition duration
			fadeDistance: 20    // the distance the tooltip starts the morph
		});
		
		
	new MooTooltips({
			container: 'card-edit-box',	
			hovered:'.card-edit-manage-page1-tipper',		// the element that when hovered shows the tip
			ToolTipClass:'ToolTips',	// tooltip display class
			toolTipPosition:-1, // -1 top; 1: bottom - set this as a default position value if none is set on the element
			sticky:false,		// remove tooltip if closed
			fromTop: -10,		// distance from mouse or object
			fromLeft: 20,	// distance from left
			duration: 300,		// fade effect transition duration
			fadeDistance: 20    // the distance the tooltip starts the morph
		});
		
	new MooTooltips({
			hovered:'.gallery-preview-tipper',		// the element that when hovered shows the tip
			ToolTipClass:'ToolTips',	// tooltip display class
			toolTipPosition:-1, // -1 top; 1: bottom - set this as a default position value if none is set on the element
			sticky:false,		// remove tooltip if closed
			fromTop: -30,		// distance from mouse or object
			fromLeft: 50,	// distance from left
			duration: 300,		// fade effect transition duration
			fadeDistance: 20    // the distance the tooltip starts the morph
		});

	new MooTooltips({
			container: 'card-edit-box',		
			hovered:'.anim-tipper',		// the element that when hovered shows the tip
			ToolTipClass:'ToolTips',	// tooltip display class
			toolTipPosition:1, // -1 top; 1: bottom - set this as a default position value if none is set on the element
			sticky:false,		// remove tooltip if closed
			fromTop: -5,		// distance from mouse or object
			fromLeft: -170,	// distance from left
			duration: 300,		// fade effect transition duration
			fadeDistance: 20    // the distance the tooltip starts the morph
		});
		*/
/*	if($('carousel_items_container')){
		var firstImg=$('carousel_items_container').getElement('img');
		var infospan=firstImg.getParent().getNext();
	//	$('gallery-preview').getElement('button').removeEvents();
		$('gallery-preview').getElement('button').addEvent('click',function(e){
			var ev=new Event(e).stop();
			document.location.href=infospan.getNext().get('text');
		});
		$$('##carousel_items_container div.carousel_items').each(function(el){
			el.addEvent('mouseenter',function(){
				el.tween('background-color','#666666');
			});
			el.addEvent('mouseleave',function(){
				el.tween('background-color','#393939');
			});
		});
		var dymek=$(document.body).getElement('.ToolTips');
		var dymekTxt=firstImg.getProperty('alt');
		if(dymekTxt){
			dymek.setStyle('display','block');
			dymek.getElement('.message').set('text',dymekTxt);
		}
		else
			dymek.setStyle('display','none');
	}	
	*/
	if($('gallery-page')){
		
		$('gallery-preview').getElement('img').addEvent('load',function(e){
			this.set('opacity',1);
		});

		addGalleryEvents();
			
		var firstImg=$('gallery-page').getElement('img');
		var infospan=firstImg.getNext().getNext();	

		$('gallery-preview').getElement('button').addEvent('click',function(e){
			var ev=new Event(e).stop();
			document.location.href=infospan.get('text');
		});
	/*	var dymek=$(document.body).getElement('.ToolTips');
		var dymekTxt=firstImg.getProperty('alt');
		if(dymekTxt){
			dymek.setStyle('display','block');
			dymek.getElement('.message').set('text',dymekTxt);
		}
		else
			dymek.setStyle('display','none');
			*/
	}
	
//	$$('.pngfix').each(function(el){
//		el.setStyle('inline');
//	});
});

/*
window.addEvent('resize',function(){
	var bodysize=$(document.body).getSize();
	$('pasek').setStyle('left',bodysize.x-200);
});
*/

Element.implement({
	addLiveEvent: function(event, selector, fn){
		//if($(e.target).match(selector)){
			this.addEvent(event, function(e){
				var t = $(e.target);
				if (!t.match(selector)) return;
				fn.apply(t, [e]);
			}.bindWithEvent(this, selector, fn));
//		}
	}
});
	function loadNews(e){
		if($('content-big')){
			var ev=new Event(e).stop();
			var r=new Request.HTML({
				method: 'post',
				url: $(e.target).href+'&ajax=1',
				onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
					$('content-big').set('html',responseHTML);
					if(!Browser.Engine.webkit)
						var fx=new Fx.Scroll(window).toElement('content-big');
						$$('.art a').addEvent('click',function(e){
							var e=new Event(e).stop();
							window.open(this.href,'_blank');
							return false;
						});						
				},
				onFailure: $empty,
				onException: $empty
			}).get();
		}
	}
	function loadNewsPage(e){
		var ev=new Event(e).stop();
		var footer=$('footer-left');
		var fx1=new Fx.Tween(footer,{duration:200,transition:Fx.Transitions.Quad.easeInOut});
		var fx2=new Fx.Tween(footer,{duration:200,transition:Fx.Transitions.Quad.easeInOut});
		fx1.addEvent('onComplete',function(){
			var r=new Request.HTML({
				method: 'post',
				url: $(e.target).href+'&ajax=1',
				onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
					footer.set('html',responseHTML);
				//	animatedLinks();
					fx2.start('opacity',1);
				//var fx=new Fx.Scroll(window).toElement('content-big');
				},
				onFailure: $empty,
				onException: $empty
			}).get();
		});
		fx1.start('opacity',0);
	}
	function animatedLinks(){
		$$('#footer div div a','.category-desc-m a','.category-desc-date a','.news-title').each(function(el){
			var el2=el.getNext();
			var w=el.getSize().x-el.getStyle('padding-left').toInt()-el.getStyle('padding-right').toInt();
			el2.setStyles({'width':0,'opacity':0,'left':w/2+el.getStyle('padding-left').toInt()});
			el2.set('morph',{duration:400,transition: 'quad:out'});
			el.removeEvents('mouseenter');
			el.removeEvents('mouseleave');
			
			el.addEvent('mouseenter',function(){
				el2.morph({'left':el.getStyle('padding-left').toInt(),'width':w,'opacity':1});
			});
			el.addEvent('mouseleave',function(){
				el2.morph({'left':w/2+el.getStyle('padding-left').toInt(),'width':0,'opacity':0});
			});			
		});
	}
	
	function loadGalleryPage(e){
		if($('gallery-page')){
			var ev=new Event(e).stop();
			$('gallery-nav').getElement('span').setStyle('visibility','visible');
			var r=new Request.HTML({
				method: 'post',
				url: $(e.target).href+'&ajax=1',
				onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){

					$('gallery-page').set('html',responseHTML);
					var paths=new Array();
					var preimgs=$$('#gallery-page img');
					preimgs.each(function(el,i){
						paths[i]=el.src;
					});

					Asset.images(paths, {
						onComplete: function(){
							$('gallery-nav').getElement('span').setStyle('visibility','hidden');
						}
					});					
					addGalleryEvents();
/*					var firstImg=$('gallery-page').getElement('img');
					var infospan=firstImg.getNext();	
					var img=$('gallery-preview').getElement('img');
					img.setProperty('src',infospan.get('text')+'&rnd='+$time());
					img.getParent().setProperty('href',infospan.get('text'));
					$('gallery-preview').getElement('button').removeEvents().addEvent('click',function(e){
						var ev=new Event(e).stop();
						document.location.href=infospan.getNext().get('text');
					});
					*/
				},
				onFailure: $empty,
				onException: $empty
			}).get();
		}
	}

	function addGalleryEvents(){
		$$(['#gallery-page img.imgp','#gallery-page img.imgl']).each(function(el){
			el.store('alt',el.get('alt')).erase('alt');
			el.addEvent('click',function(e){
				var ev=new Event(e).stop();
				$('gallery-preview').getElement('img').set('opacity',0.75);
				var img=$('gallery-preview').getElement('span a>img');
				var infospan=el.getNext();
				var url=infospan.getNext().get('text');
				img.setProperty('src',infospan.get('text')+'&rnd='+$time());
				img.getParent().setProperty('href',url);
				var i=$('gallery-preview').getElement('i');
				var u=$('gallery-preview').getElement('>u');
				var opis=el.retrieve('alt').split(',');
				i.getElement('b').setStyle('display','none');
				i.getElement('u').setStyle('display','none');
				
				var icon1=Asset.image('./kartki/'+opis[0]+'/icon_pen.png', {
					onload: function(){
						i.getElement('b img').set('src','./kartki/'+opis[0]+'/icon_pen.png');
						i.getElement('b').setStyle('display','inline-block');
					}
				});
				
				var icon2=Asset.image('./kartki/'+opis[0]+'/icon_photo.png', {
					onload: function(){
						i.getElement('u img').set('src','./kartki/'+opis[0]+'/icon_photo.png').setStyle('display','inline');
						i.getElement('u').setStyle('display','inline-block');
					}
				});
				u.set('text',opis[1]);
				if(el.hasClass('imgp')){
					i.setStyle('margin-left',80);
					u.setStyle('margin-right',78);
				}
				else{
					i.setStyle('margin-left',20);
					u.setStyle('margin-right',22);
				}
				$('gallery-preview').getElement('button').removeEvents();
				$('gallery-preview').getElement('button').addEvent('click',function(e){
					var ev=new Event(e).stop();
					document.location.href=url;
				});
			});
			el.addEvent('mouseenter',function(){
				this.tween('border-color','#fff');
			});
			el.addEvent('mouseleave',function(){
				this.tween('border-color','#7C237D');
			});
		});
//	$('gallery-page').getElement('img').fireEvent('click',this,null);
	}
var CardAnim=new Class({

	Implements: [Options,Events], 
	
	options: {
	},

	initialize: function(options){
		this.setOptions(options);
		this.step=0;
		this.cardAnim=$('card-edit-page-anim-p')!=null?$('card-edit-page-anim-p'):$('card-edit-page-anim-l');
		this.orientation='p';
		if(this.cardAnim!=null){
		
		this.forward=this.cardAnim.getElement('a.anim-forward');
		this.backward=this.cardAnim.getElement('a.anim-backward');
		
		if(this.cardAnim.hasClass('p'))
			this.orientation='p';
		else
			this.orientation='l';
		this.backward.addEvent('click',function(e){
			var ev=new Event(e).stop();
			if(this.step>0){
				this.step--;
				this.go(-1);
				this.forward.setStyle('display','block');
			}
			if(this.step==0)
				this.backward.setStyle('display','none');			
		}.bind(this));
		this.forward.addEvent('click',function(e){
			var ev=new Event(e).stop();		
			if(this.step<2){
				this.go(1);
				this.step++;
				this.backward.setStyle('display','block');
			}
			if(this.step==2)
				this.forward.setStyle('display','none');
		}.bind(this));
		}
	},
	
	go: function(direction){

		this.fxPage1=new Fx.Morph($('anim-page-1-'+this.orientation),{link:'cancel',transition:Fx.Transition.linear});
		this.fxPage2=new Fx.Morph($('anim-page-2-'+this.orientation),{link:'cancel',transition:Fx.Transition.linear});
		this.fxPage3=new Fx.Morph($('anim-page-3-'+this.orientation),{link:'cancel',transition:Fx.Transition.linear});
		this.fxPage4=new Fx.Morph($('anim-page-4-'+this.orientation),{link:'cancel',transition:Fx.Transition.linear});
		if(this.orientation=='p'){
			if(this.step==0){
				if(direction==-1){
					this.fxPage2.addEvent('onComplete',function(){
						this.fxPage1.start({'width':[0,300]});
					}.bind(this));
					this.fxPage2.start({'width':[300,0],'left':[0,300]});
				}
				else{
					this.fxPage1.addEvent('onComplete',function(){
						this.fxPage2.start({'width':[0,300],'left':[300,0]});
					}.bind(this));
					this.fxPage1.start({'width':[300,0]});
				}
			}
			else{
				if(direction==-1){
					this.fxPage4.addEvent('onComplete',function(){
					this.fxPage3.start({'width':[0,300]});
				}.bind(this));
				this.fxPage4.start({'width':[300,0],'left':[0,300]});
				}
				else{
					this.fxPage3.addEvent('onComplete',function(){
						this.fxPage4.start({'width':[0,300],'left':[300,0]});
					}.bind(this));
					this.fxPage3.start({'width':[300,0]});
				}
			}
		}
		else{
			if(this.step==0){
				if(direction==-1){
					this.fxPage2.addEvent('onComplete',function(){
						this.fxPage1.start({'height':[0,300]});
					}.bind(this));
					this.fxPage2.start({'height':[300,0],'top':[0,300]});
				}
				else{
					this.fxPage1.addEvent('onComplete',function(){
						this.fxPage2.start({'height':[0,300],'top':[300,0]});
					}.bind(this));
					this.fxPage1.start({'height':0});
				}
			}
			else{
				if(direction==-1){
					this.fxPage4.addEvent('onComplete',function(){
					this.fxPage3.start({'height':[0,300]});
				}.bind(this));
				this.fxPage4.start({'height':[300,0],'top':[0,300]});
				}
				else{
					this.fxPage3.addEvent('onComplete',function(){
						this.fxPage4.start({'height':[0,300],'top':[300,0]});
					}.bind(this));
					this.fxPage3.start({'height':[300,0]});
				}
			}

		}

	}
	
	
});

/*
var StripSwitch=new Class({

	Implements: [Options,Events], 
	
	options: {
		duration: 4000,
		maxSteps: 2,
		fxDuration:1500,
		fxType: Fx.Transitions.Quad.easeInOut,
		baseName: './img/pasek_'
	},

	initialize: function(imgscontainer,strip,options){
		this.setOptions(options);
		this.step=2;
		this.strip=$(strip);
		this.stripsSrc=new Array();
		this.ie67=Browser.Engine.trident&&(Browser.Engine.version==4||Browser.Engine.version==5);
		this.ie6=Browser.Engine.trident&&Browser.Engine.version==4;
		this.fx1=new Fx.Tween(this.strip,{link:'cancel',duration:this.options.fxDuration,transition:this.options.fxType});
		this.fx2=new Fx.Tween(this.strip,{link:'cancel',duration:this.options.fxDuration,transition:this.options.fxType});
		this.fx1.addEvent('onComplete',function(){
			var src=this.options.baseName+this.step+'.png';
			this.strip.getElement('img').set('src',src);
			this.step++;
			if(this.step>this.options.maxSteps)
				this.step=1;
			this.fx2.start('opacity',1);
		}.bind(this));
		$(imgscontainer).getElements('img').each(function(el,i){
			this.stripsSrc[i]=el.get('src');
		}.bind(this));

		var im=new Asset.images(this.stripsSrc, {
			onComplete: function(){
				this.switchImage.periodical(this.options.duration,this);
			}.bind(this)
		});

	},
	
	switchImage: function(){
		if(this.ie67){
			var src=this.options.baseName+this.step+'.png';
			this.strip.setStyle('display','none');
			this.strip.getElement('img').style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"',sizingMethod='scale')";
			this.strip.getElement('img').src='./img/blank.gif';
			this.step++;
			if(this.step>this.options.maxSteps)
				this.step=1;
			this.strip.setStyle('display','block');
		}
		else
			this.fx1.start('opacity',0);
	}
});
*/
function setEditPanel(){
	$$('#card-edit-image1','#card-edit-image2').each(function(el){
		el.getNext().setStyle('height',el.getElement('img').getSize().y);
	});
	$$('#card-edit-image3').each(function(el){
		el.getPrevious().setStyle('height',el.getElement('img').getSize().y);
	});
	
	$$('.card-edit-page').each(function(el,index){
		if(index>0){
			$$('.card-edit-fields'+(index+1)).each(function(el2){
				var height=el2.getSize().y-28;
				//console.log(height);
				el2.getElements('.editable').each(function(el3){
					el3.setStyle('height',height);
				});
				el2.getElements('.card-edit-input').each(function(el3){
					el3.setStyle('height',height);
				});
			});
		}
	});

}

function addSlashes(str){
	return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\u0000/g, "\\0");
}
	
window.addEvent('domready',function(){

	$$('#dropdown>li').each(function(el){
		var ul=el.getElement('ul');
			if(ul)
				ul.set('tween',{duration:200,transition:Fx.Transitions.Quad.easeInOut});
		el.addEvents({
			'mouseenter':function(){
/*				$$('#dropdown ul ul').setStyle('display','none');
				var ul=el.getElement('ul');
				if(ul)
					ul.setStyle('display','block');
*/				$$('#dropdown ul ul').tween('height',0);
				var ul=el.getElement('ul');
				if(ul)
					ul.tween('height',56);
			},
			'mouseleave':function(){
/*				var ul=el.getElement('ul');
				if(ul)
					ul.setStyle('display','none');
*/				var ul=el.getElement('ul');
				if(ul)
					ul.tween('height',0);					
			}
		});
	});

var options={
		text : 'Wersja przeglądarki, której używasz jest przestarzała. Aby pobrać nową wersję przeglądarki kliknij tu: <a href="http://www.getfirefox.net">Firefox</a> <a href="http://www.microsoft.com/windows/internet-explorer/default.aspx">Internet Explorer</a>',
		url : '#',
		img_folder : '../img/'
	}

	$$('.tli').each(function(el){
		new TextLabelInput(el,{'inactive_color':'#000'});
	});
	$$('div.categories-m a[href="#"]').addEvent('click',function(e){e.stop();});
	
		$$('#content-big .art a').addEvent('click',function(e){
			var e=new Event(e).stop();
			window.open(this.href,'_blank');
			return false;
		});	
	
	if(Browser.Engine.trident&&Browser.Engine.version==4)
		new OldBrowserNotifier(options);


	
	if($('login-form')){
		$('name').addEvent('blur',function(e){
			if(this.value!='login')
				$('pass').value='';
		});
	}
/*
	if($('carousel_container')){
	var carousel1 =  new MooCarousel('carousel_wrapper','carousel_items_container','carousel_moveleft','carousel_moveright',c1_ns,c1_sss, false); //c_ns= number of slides , c_sss = slide step size
			
	$$('#carousel_items_container img').each(function(el){
		el.reflect({height:20,opacity:0.3});
		el.addEvent('click',function(e){
			var ev=new Event(e).stop();
			var img=$('gallery-preview').getElement('img');
			var infospan=el.getParent().getNext();
			img.setProperty('src',infospan.get('text')+'&rnd='+$time());
			$('gallery-preview').getElement('button').removeEvents();
			$('gallery-preview').getElement('button').addEvent('click',function(e){
				var ev=new Event(e).stop();
			//	alert(infospan.getNext().get('text'));
				document.location.href=infospan.getNext().get('text');
			});
			img.getParent().setProperty('href',infospan.getNext().get('text'));
//			$('gallery-preview').getElement('button').getParent().setProperty('href',infospan.getNext().get('text'));
			var dymek=$(document.body).getElement('.ToolTips');
			var dymekTxt=el.getProperty('alt');
			if(dymekTxt){
				dymek.setStyle('display','block');
				dymek.getElement('.message').set('text',dymekTxt);
			}
			else
				dymek.setStyle('display','none');
		});
	});

	}
	*/

	$$('.hback').each(function(el){
		el.addEvent('click',function(e){
			var ev=new Event(e).stop();
			history.go(-1);
		});
	});
	

/*
	var fav=$('favorites');
	if(Browser.Engine.trident||Browser.Engine.gecko){
		var url="http://www.magiakartek.pl";
		var title="Magiczny Serwis Kartek Drukowanych";
		fav.addEvent('click',function(){
		if(window.sidebar){ // Mozilla Firefox Bookmark
			window.sidebar.addPanel(title,url,"");
		}else if(window.external){ // IE Favorite
			window.external.AddFavorite(url,title);
		}
		else if(window.opera&&window.print){ // Opera Hotlist
			return true;}
		});
	}else{
		fav.setStyle('opacity',0.8).setStyle('cursor','auto');
		
	}
*/
	$$('#menu a').each(function(el){
		if(el.href.indexOf('#')>-1){
			el.addEvent('click',function(e){
				var ev=new Event(e).stop();
			});
		}
	});
	$$('#bloczki img').each(function(el){
		var fx=new Fx.Tween(el,{duration:100,transition:Fx.Transitions.Quad.easeInOut});
		el.addEvent('mouseenter',function(){
			fx.start('top','-7');
		});
		el.addEvent('mouseleave',function(){
			fx.start('top','-10');
		});
	});
	$$('.card-edit-upload-image').each(function(el){

		var swf = new Swiff.Uploader({
			path: 'js/Swiff.Uploader.swf',
			url: 'swiff/Swiff.uploader.php?user_image_name='+$(el).getNext().get('text'),
			verbose: true,
			queued: false,
			zIndex:13000,
			multiple: false,
			target: el,
			idleMsg: $(el).getElement('span').get('text'),
			instantStart: true,
			typeFilter: {
				'Images (*.jpg, *.jpeg)': '*.jpg; *.jpeg'
			},
			allowDuplicates:true,
			fileSizeMax: 5*1024 * 1024,
			onSelectSuccess: function(files) {
				if (Browser.Platform.linux) window.alert('Warning: Due to a misbehaviour of Adobe Flash Player on Linux,\nthe browser will probably freeze during the upload process.\nSince you are prepared now, the upload will start right away ...');
		//	log.alert('Starting Upload', 'Uploading <em>' + files[0].name + '</em> (' + Swiff.Uploader.formatUnit(files[0].size, 'b') + ')');
				this.setEnabled(false);
			},
			onSelectFail: function(files) {
				Roar.alert('Plik nie został dodany, wybierz mniejszy<br/>Maksymalna wielkość pliku to 5MB');

	//		log.alert('<em>' + files[0].name + '</em> was not added!', 'Please select an image smaller than 2 Mb. (Error: #' + files[0].validationError + ')');
			},
			appendCookieData: true,
			onQueue: function(){
				if (!swf.uploading) return;
				var size = Swiff.Uploader.formatUnit(swf.size, 'b');
				$(this.options.target).getElement('span').set('text', swf.percentLoaded + '% of ' + size);
			},
			onFileComplete: function(file) {
 
			// We *don't* save the uploaded images, we only take the md5 value and create a monsterid ;)
				if (file.response.error) {
				Roar.alert('Dodanie pliku nie powiodło się, spróbuj jeszcze raz.');
			//	alert(file.response.code );
//				log.alert('Failed Upload', 'Uploading <em>' + this.fileList[0].name + '</em> failed, please try again. (Error: #' + this.fileList[0].response.code + ' ' + this.fileList[0].response.error + ')');
				} else {
					$('card-edit-preview1').setStyles({'display':'inline','border':0});
				//	var md5 = JSON.decode(file.response.text, true).hash; // secure decode
 
	//			log.alert('Successful Upload', 'an MD5 hash was created from <em>' + this.fileList[0].name + '</em>: <code>' + md5 + '</code>.<br />gravatar.com generated a fancy and unique monsterid for it, since we did not save the image.');
 
	//			var img = $('demo-portrait');
	//			img.setStyle('background-image', img.getStyle('background-image').replace(/\w{32}/, md5));
	//			img.highlight();
				}
 
			file.remove();
				this.setEnabled(true);
			},
			onComplete: function() {
				el.getElement('span').set('text', this.options.idleMsg);
			}
		});
 

		el.addEvents({
			click: function() {
			//	swf.browse();
			this.focus();
				return false();
			},
			mouseenter: function() {
				this.addClass('hover');
			//	swf.reposition();
			},
			mouseleave: function() {
				this.removeClass('hover');
				this.blur();
			},
			mousedown: function() {
				this.focus();
			}
		});
 	});


	Sexy = new SexyAlertBox();

	//var myMenu = new MenuMatic({id:'dropdown'});

	var tips = new Tips($$('.a-disabled','.category-inactive','.menu-disabled a'), {
		className: 'tip-container',
			maxTitleChars: 50,
		text:$empty
	});	
	
	if($('koszyk-form')){
		if($('form-kod')){
			$('form-kod').getElement('button').addEvent('click',function(e){
				var ev=new Event(e).stop();
				new Request({
					'url':'./index.php?main=checkkod&kod='+$('kod').value,
					'method':'get',
					onSuccess:function(text,xml){
						if(text=='ok'){
							Sexy.alert('Kod jest prawidłowy i został właśnie wykorzystany.');
							$$('td.basket-sum').each(function(el,i){
								val=el.get('text').replace('Razem:','').toFloat();
								if(i==0){
									val=(val-7.9).round(2);
									el.set('html','<br/>'+val+(val==val.toInt()?'.00':'0')+' zł');
								}
								else if(i==1){
									val=(val-2.1).round(2);
									el.set('html','<br/>'+val+(val==val.toInt()?'.00':'0')+' zł');				
								}
								else{
									el.set('html','Razem:<br/>'+(val-10).round(2)+'.00 zł');								
								}
							});
						}
						else if(text=='duplicate')
							Sexy.alert('Wprowadzony kod już został wykorzystany przez kogoś innego.');
						else	
							Sexy.alert('Wprowadzony kod jest niepoprawny.');
					}
				}).send();
			});
		}
		$('koszyk-form').getElements('input[type="text"]').addEvent('keyup',function(e){
			var ev=new Event(e).stop();
			if(ev.key=='enter')
				return false;
		});
	}
	
/*
var myMooPath = new MooPath.Ellipse($('header-gallery'),$$('#header-gallery img'),$$('#header-gallery-tmp img'), {
				show: 0,
				autoPlay:true,
				fxoptions: {
					link: 'cancel',
					duration: 1000,
					transition: Fx.Transitions.linear
				}
			});

	*/
	Roar=new Roar({position: 'lowerRight',duration:5000});


	if($('message').get('text')!='')
	{
	//	Sexy.info($('message').get('text'));
		Roar.alert($('message').get('html'));
	}
	
	if($('user_calendar_item')){
		var cal=new Calendar({ dzien: 'Y-m-d' }, { direction: 0.5, tweak: { x: 6, y: 0 }});
	}

	$$('.card-edit-font-div2').each(function(el){
		var mySelect=new elSelect( {container : el,showRefresh:$('card-edit-preview2'),baseClass: 'elSelectFont',gfx:true} );		
	});
	$$('.card-edit-font-size-div2').each(function(el){
		var mySelect=new elSelect( {container : el,showRefresh:$('card-edit-preview2'),baseClass: 'elSelectShort',gfx:false} );		
	});
	$$('.card-edit-font-div3').each(function(el){
		var mySelect=new elSelect( {container : el,showRefresh:$('card-edit-preview3'),baseClass: 'elSelectFont',gfx:true} );		
	});
	$$('.card-edit-font-size-div3').each(function(el){
		var mySelect=new elSelect( {container : el,showRefresh:$('card-edit-preview3'),baseClass: 'elSelectShort',gfx:false} );		
	});	

	for(var i=1;i<=3;i++){
		$$('.card-edit-text-align-div'+i).each(function(el){
			prepareTextAlignRadios(el,i);
		});
	}


	$$('.form-validate').each(function(el){
		var v=new Validate(el.id,{validateOnBlur:true});
	});
	/*
	if($(document.body).getElement('form#register')){
			var v=new Validate('register',{validateOnBlur:true});	
	}
	if($(document.body).getElement('form#login-form')){
			var v=new Validate('login-form',{validateOnBlur:true});	
	}
	if($(document.body).getElement('form#profile')){
			var v=new Validate('profile',{validateOnBlur:true});	
	}
	if($(document.body).getElement('form#user_calendar_item')){
			var v=new Validate('user_calendar_item',{validateOnBlur:true});	
	}
	if($(document.body).getElement('form#address_book_item')){
			var v=new Validate('address_book_item',{validateOnBlur:true});	
	}
	if($(document.body).getElement('form#card-edit-page-buy')){
			var v=new Validate('card-edit-page-buy',{validateOnBlur:true});	
	}*/
	if($(document.body).getElement('form#address_book')){
		$(document.body).getElement('form#address_book').addEvent('submit',function(e){
			this.getElement('#action').setProperty('value','x');
		});
	}
	if($(document.body).getElement('form#user_calendar')){
		$(document.body).getElement('form#user_calendar').addEvent('submit',function(e){
			this.getElement('#action').setProperty('value','x');
		});
	}

	if($(document.body).getElement('form#register')){
		var form=$('register');
		$(form).getElement('#akceptacja_regulamin').addEvent('click',function(){
			if(this.checked)
				$(form).getElement('.button-register').set('opacity',1);
			else
				$(form).getElement('.button-register').set('opacity',0.5);
		});
	}
	for(i=1;i<=3;i++){
		$$('.card-edit-color-hex'+i).each(function(el){
			var picker=new ColorPicker(el,{trigger:$(el.getNext().id),showRefresh:'card-edit-preview'+i});
		});
	}
	
	$$('.ab-tools img.del').each(function(el){
		el.addEvent('click',function(e){
			var ev=new Event(e).stop();
			Sexy.confirm('Na pewno chcesz usunąć pozycję?', {onComplete: 
				function(returnvalue) { 
					if(returnvalue){
						$('form-address-book').getElement('#id_adres').value=el.getNext().get('text').split('|')[0];
						$('form-address-book').getElement('#key2').value=el.getNext().get('text').split('|')[1];
						$('form-address-book').submit();
					}
				}.bind(el)
			});
		});
	});
	$$(	'.uc-tools img.del').each(function(el){
		el.addEvent('click',function(e){
			var ev=new Event(e).stop();
			Sexy.confirm('Na pewno chcesz usunąć pozycję?', {onComplete: 
				function(returnvalue) { 
					if(returnvalue){
						$('form-user-calendar').getElement('#id_dzien').value=el.getNext().get('text').split('|')[0];
						$('form-user-calendar').getElement('#key1').value=el.getNext().get('text').split('|')[1];
						$('form-user-calendar').submit();
					}
				}.bind(el)
			});
		});
	});
	
	$$('.b-tools img.del').each(function(el){
		el.addEvent('click',function(e){
			var ev=new Event(e).stop();
			Sexy.confirm('Na pewno chcesz usunąć pozycję?', {onComplete: 
				function(returnvalue) { 
					if(returnvalue){
						$('form-basket').getElement('#pozycja').value=el.getNext().get('text');
						$('form-basket').submit();
					}
				}.bind(el)
			});
		});
	});
	

	if($('card-edit-box')){
		$$('button.preview2').addEvent('click',function(e){
			var ev=new Event(e).stop();
			$('card-edit-image2').fireEvent('click');
		});
		$$('button.preview3').addEvent('click',function(e){
			var ev=new Event(e).stop();
			$('card-edit-image3').fireEvent('click');
		});

		$$('.card-edit-preview1-button').addEvent('click',function(e){
			var ev=new Event(e).stop();
			$('card-edit-image1').fireEvent('click');
		});

		$$('.card-edit-preview1-button').addEvent('click',function(e){
			var ev=new Event(e).stop();
			$('card-edit-image1').fireEvent('click');
		});
		$$('.card-edit-preview2-button').addEvent('click',function(e){
			var ev=new Event(e).stop();
			$('card-edit-image2').fireEvent('click');
		});
		$$('.card-edit-preview3-button').addEvent('click',function(e){
			var ev=new Event(e).stop();
			$('card-edit-image3').fireEvent('click');
		});

		$('card-edit-image1').getElement('img').addEvent('load',function(e){
			this.set('opacity',1);
		});
		$('card-edit-image1').addEvent('click',function(e){
			$('card-edit-preview1').setStyles({'display':'none','border':0});
			this.getElement('img').set('opacity',0.75);
			var url=this.getElement('img').getNext().get('text');
			//url+='&rnd='+$time();
			var urlPost=url+'&rnd='+$time();
			$$('.card-edit-fields1').each(function(el){
				var id_obszar=el.getFirst().get('text');
				if(el.getElement('#card-edit-upload-image-'+id_obszar))
					urlPost+='&user_image_name'+id_obszar+'='+el.getElement('#card-edit-upload-image-'+id_obszar).get('text');				
				$$('.text_align-'+id_obszar).each(function(el){
					if(el.checked)
						urlPost+='&text_align'+id_obszar+'='+el.value;
				});
				$$('.text_valign-'+id_obszar).each(function(el){
					if(el.checked)
						urlPost+='&text_valign'+id_obszar+'='+el.value;
				});
				for(var i=0;i<10;i++){
					var ta=$('page1-text'+(i+1)+'-id_obszar'+id_obszar);
					if(ta!=null){
						if(!ta.getProperty('disabled'))
							urlPost+='&text'+(i+1)+'-id_obszar'+id_obszar+'='+escape(escape(addSlashes(ta.getProperty('value'))));
					}
				}
			});

			var r=new Request.HTML({
				method: 'post',
				url: url,
				onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
					this.getElement('img').setProperty('src',responseHTML);
				//	$('anim-page-1').getElement('img').setProperty('src',responseHTML);
					var p=$$('.pages img');
					p[0].setProperty('src',responseHTML);
				}.bind(this),
				onFailure: $empty,
				onException: $empty
			}).post(urlPost);			
		});
		$('card-edit-image2').getElement('img').addEvent('load',function(e){
			this.set('opacity',1);
		});
		$('card-edit-image2').addEvent('click',function(e){
			$('card-edit-preview2').setStyles({'display':'none','border':0});
			this.getElement('img').set('opacity',0.75);
			var url=this.getElement('img').getNext().get('text');
			//url+='&rnd='+$time();

			var urlPost=url+'&rnd='+$time();
			$$('.card-edit-fields2').each(function(el){
				var id_obszar=el.getFirst().get('text');
				if(el.getElement('#card-edit-color-'+id_obszar))
					urlPost+='&font_color'+id_obszar+'='+escape(el.getElement('#card-edit-color-'+id_obszar).value);
				var fontSel=$('font'+id_obszar+'tmp');
				if(fontSel)
					urlPost+='&font'+id_obszar+'='+fontSel.value;
				var fontSizeSel=$('fontsize'+id_obszar+'tmp');
				if(fontSizeSel)
					urlPost+='&font_size'+id_obszar+'='+fontSizeSel.value;
				$$('.text_align-'+id_obszar).each(function(el){
					if(el.checked)
						urlPost+='&text_align'+id_obszar+'='+el.value;
				});
				$$('.text_valign-'+id_obszar).each(function(el){
					if(el.checked)
						urlPost+='&text_valign'+id_obszar+'='+el.value;
				});
				for(var i=0;i<10;i++){
					var ta=$('page2-text'+(i+1)+'-id_obszar'+id_obszar);
					if(ta!=null){
						if(!ta.getProperty('disabled'))
							urlPost+='&text'+(i+1)+'-id_obszar'+id_obszar+'='+escape(escape(addSlashes(ta.getProperty('value'))));
					}
				}
			});
			var r=new Request.HTML({
				method: 'post',
				url: url,
				onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
					this.getElement('img').setProperty('src',responseHTML);
//					$('anim-page-2').getElement('img').setProperty('src',responseHTML);					
					var p=$$('.pages img');
					p[1].setProperty('src',responseHTML);
					}.bind(this),
				onFailure: $empty,
				onException: $empty
			}).post(urlPost);			
		});		
		$('card-edit-image3').getElement('img').addEvent('load',function(e){
			this.set('opacity',1);
		});
		$('card-edit-image3').addEvent('click',function(e){
			$('card-edit-preview3').setStyle('display','none');
			this.getElement('img').set('opacity',0.75);
			var url=this.getElement('img').getNext().get('text');
			//url+='&rnd='+$time();
			var urlPost=url+'&rnd='+$time();
			$$('.card-edit-fields3').each(function(el){
				var id_obszar=el.getFirst().get('text');
				if(el.getElement('#card-edit-color-'+id_obszar))
					urlPost+='&font_color'+id_obszar+'='+escape(el.getElement('#card-edit-color-'+id_obszar).value);
				var fontSel=$('font'+id_obszar+'tmp');
				if(fontSel)
					urlPost+='&font'+id_obszar+'='+fontSel.value;
				var fontSizeSel=$('fontsize'+id_obszar+'tmp');
				if(fontSizeSel)
					urlPost+='&font_size'+id_obszar+'='+fontSizeSel.value;					
				$$('.text_align-'+id_obszar).each(function(el){
					if(el.checked)
						urlPost+='&text_align'+id_obszar+'='+el.value;
				});
				$$('.text_valign-'+id_obszar).each(function(el){
					if(el.checked)
						urlPost+='&text_valign'+id_obszar+'='+el.value;
				});
				for(var i=0;i<10;i++){
					var ta=$('page3-text'+(i+1)+'-id_obszar'+id_obszar);
					if(ta!=null){
						if(!ta.getProperty('disabled'))
							urlPost+='&text'+(i+1)+'-id_obszar'+id_obszar+'='+escape(escape(addSlashes(ta.getProperty('value'))));
					}
				}
			});
			var r=new Request.HTML({
				method: 'post',
				url: url,
				onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
					this.getElement('img').setProperty('src',responseHTML);
//					$('anim-page-3').getElement('img').setProperty('src',responseHTML);					
					var p=$$('.pages img');
					p[2].setProperty('src',responseHTML);
					}.bind(this),
				onFailure: $empty,
				onException: $empty
			}).post(urlPost);			

		});
		
		$$('.card-edit-input').addEvent('keydown',function(e){
			if(e.key=='tab')
				var ev=new Event(e).stop();
		});
		$$('#card-edit-box .card-edit-fields1 span.editable').each(function(el){
			var nel=el.getNext();
			el.addEvent('click',function(e){
				var x=this.getSize().x+4;
				var y=this.getSize().y+(nel.type=="textarea"?20:0);
				this.setStyles({'display':'none','height':nel.type=='text'?17:'auto','width':'auto'});
				this.getNext().setStyles({'display':'inline','width':x,'height':y,'font-family':this.getStyle('font-family'),'font-size':this.getStyle('font-size')});
				this.getNext().focus();
				this.getNext().select();
			//	if(this.getNext().type=="textarea")
			//		new Element('br').inject(this.getNext(),'after');

			//		if(this.getNext().type=="textarea")
		//			this.getNext().setStyle('display','block');
		//		else
		//			this.getNext().setStyle('display','inline');
				
			});
			nel.addEvent('blur',function(e){
				this.setStyle('display','none');
		//		if(this.type=="textarea")
		//			this.getNext().destroy();
				var val=this.get('value');
				val=stripTags(val);
				if(val.trim()==''){
					this.set('value',' ');
					val=' ';
				}
				var html=val.replace(new RegExp("\n", "gi"), "<br/>");
				if(html.trim()==''||html.trim()=='<br/>'){
					html=' ';
					el.setStyles({'height':14,'width':20,'background-color':'#393939','border':'1px dotted #FFEB42','display':'inline-block'});
				}
				else
					el.setStyles({'height':'auto','width':'auto','display':'inline','border':'0'});
				el.set('html',html);
				//el.set('html',html);
				
			});
			if(nel.type=="textarea"){
				nel.addEvent('keyup',function(){
					$('card-edit-preview1').setStyles({'display':'inline','border':0});
					var html=this.getProperty('value');
					html=stripTags(html);
					this.set('value',html);
				//	if(html==''){
				//		html==' ';
				//		this.setProperty('value',html);
				//	}
					el.set('html',html.replace(new RegExp("\n", "gi"), "<br/>"));
					var styles=el.getDimensions();
					if(styles.width.toInt()<=0){
						styles.width=10;
					}
					if(styles.height.toInt()<=0){
						styles.height=20;
					}

				
					nel.setStyles({'width':styles.width+20,'height':styles.height+20});
				});
			}
			if(nel.type=="text"){
				nel.addEvent('keyup',function(){
					$('card-edit-preview1').setStyles({'display':'inline','border':0});		
					var html=this.get('value');
					html=stripTags(html);
						if(nel.hasClass('one-letter')){
							html=html.substr(0,1);
						}
					this.set('value',html);
					//console.log(html);
				//	if(html==''){
				//		html=='a';
				//		console.log(1);
				//		this.set('value',html);
				//	}
					el.set('html',html.replace(new RegExp("\n", "gi"), "<br/>"));
					var styles=el.getDimensions();
					if(styles.width.toInt()<=0){
						styles.width=10;
					}
					if(styles.height.toInt()<=0){
						styles.height=20;
					}
					
					nel.setStyles({'width':styles.width+15,'height':styles.height}).focus();
				});
			}			
		});
		$$('#card-edit-box .card-edit-fields2 span.editable').each(function(el){
			refreshEditFields(el,2);
			
		});		
		$$('#card-edit-box .card-edit-fields3 span.editable').each(function(el){
			refreshEditFields(el,3);
			
		});		

/*		$$('.card-edit-color-img').each(function(el,index){
			var sk=new MooRainbow(el.id,{id:'kolor'+index,startColor:new Color(el.getNext().value),onChange: function(color) {el.getNext().value = color.hex;}});
		});
*/
		$$('.card-edit-sample-color').each(function(el){
			el.addEvent('click',function(){
				var id=this.id.split('-')[1];
				$('card-edit-color-'+id).setProperty('value',this.getStyle('background-color'));
			});
		});
	}




/*	var bodysize=$(document.body).getSize();
	$('pasek').setStyle('left',bodysize.x-200);
	*/
/*
	var adsNS = new noobSlide({
			box: $('ads-box'),
			items: $$('#ads-box p'),
			size: 1000,
			autoPlay: true,
			fxOptions: {
				duration: 750,
				transition: Fx.Transitions.Quad.easeInOut,
				link: 'cancel'
			}
		});
*/
		if($('anim-forward')){
			var fxAnimPage=new Fx.Scroll(window);
		}
/*		if($('card-edit-nav')){
			var fxEdit=new Fx.Scroll(window);
			if(!Browser.Engine.webkit)
				fxEdit.toElement($('middle').getElement('.section-title'));
		}
	*/	
		if($('captcha')){
			$('captcha').addEvent('click',function(){
				this.src='./img/captcha.php?rand='+$time();
			});
		}
		
		if($('card-edit-page-buy')){
			$('id_sposob_wysylki').addEvent('change',function(e){
				var ev=new Event(e).stop();
					var r=new Request.JSON({
						url:'./index.php',
						onSuccess: function(json,text){
							var tab=$('table-card-buy');
							if(tab){
								tab.getElement('td.buy-sum').getNext().set('html','Koszt wysyłki:<br/>'+json.koszt_wysylki+' zł');
								tab.getElement('td.buy-total').set('html','Razem:<br/>'+(json.cena.toFloat()+json.koszt_wysylki.toFloat()).round(2)+' zł');
							}
							$('cena').set('value',json.cena.toFloat());
							$('koszt_wysylki').set('value',json.koszt_wysylki.toFloat());
							if(json.polska.toInt()!=1){
								$('panstwo_wysylka').set('value','');
								$('panstwo_wysylka').removeProperty('disabled');
							}
							else{
								$('panstwo_wysylka').setProperty('disabled','disabled');
								$('panstwo_wysylka').set('value','Polska');
							}
						}
					});
					r.send({
						method:'get',
						data:'id='+$('id_sposob_wysylki').get('value')+'&main=koszt-wysylki'
					})				
			});
		}
		if($('card-edit-box')){
			var editCardNS = new noobSlide({
				box: $('card-edit-box'),
				items: $$('#card-edit-box .card-edit-page'),
				size: 737,
				handles: $$('#card-edit-nav span'),
				onWalk: function(currentItem,currentHandle){
					this.handles.removeClass('card-edit-nav-active');
					currentHandle.addClass('card-edit-nav-active');
				/*	if($(currentItem).getElement('#card-edit-page-anim-l')){
						if(!Browser.Engine.webkit){
							var pos=$('card-edit-help-l').getPosition();
							fxAnimPage.start(0,pos.y-200);
						}
					}
				*/
/*				if($(currentItem).getElement('#card-edit-page-buy-div')){
						if(!Browser.Engine.webkit){
							var pos=$('card-edit-page-buy-div').getPosition();
							fxAnimPage.start(0,pos.y);
						}
					}
					else*/
					if($(currentItem).getElement('#card-edit-page-anim-l')){
						if(!Browser.Engine.webkit){
							var pos=$('anim-page-1-l').getPosition();
							fxAnimPage.start(0,pos.y-200);
						}
					}
					else{
						if(!Browser.Engine.webkit){
							var pos=$('card-edit-nav').getPosition();
							if($('card-edit-page1-nav-l'))
								fxAnimPage.start(0,pos.y-115);
							else
								if(currentItem.getElement('#card-edit-image1'))
									fxAnimPage.start(0,pos.y);
								else
									fxAnimPage.start(0,pos.y+50);
						}	
					}
				//	if($('card-edit-box').getElement('#card-edit-page-anim-l')){
					//	if($(currentItem).getElement('#card-edit-page4-nav-l')){

						//}
					//	if($(currentItem).getElement('#scroll-page-3')){
					//		if(!Browser.Engine.webkit)
					//			fxAnimPage.toElement('scroll-page-3');
					//	}
				//	}
					
				//	else{
				//		var pos=$('card-edit-nav').getPosition();
				//		fxAnimPage.start(0,pos.y+200);
				//	}
				},
				
				fxOptions: {
					duration: 750,
					transition: Fx.Transitions.Quad.easeInOut,
					link: 'cancel'
				}
			});
//			editCardNS.addActionButtons('previous',$$('#card-edit-box .card-edit-help .nsback'));
			editCardNS.addActionButtons('previous',$$('.nsback'));
		//	editCardNS.addActionButtons('next',$$('#card-edit-box .card-edit-help .nsforward'));
			editCardNS.addActionButtons('next',$$('.nsforward'));
		}

		$$('#table-user-calendar tr.mouse','#table-address-book tr.mouse','#table-basket tr.mouse').each(function(el){
			var fx=new Fx.Tween($(el),{duration:300,link:'cancel',transition:Fx.Transitions.Quad.easeInOut});
			el.addEvent('mouseenter',function(){
				fx.start('background-color','#666666');
			});
			el.addEvent('mouseleave',function(){
				fx.start('background-color','#393939');
			});
		});

		//setEditPanel();


		if($('newsletter-form')){
			$('newsletter-form').addEvent('submit',function(e){
				var ev=new Event(e).stop();
				var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;
				if(this.getElement('#newsletter-input').getProperty('value').toUpperCase().match(regEmail)){
					var r=new Request.HTML({
						method: 'get',
						url: '?main=newsletter-zapisz&ajax=1&email='+this.getElement('#newsletter-input').getProperty('value'),
						onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
							var msg="Nie udało się zapisać do newslettera";
							if(responseHTML=="sign_out")
								msg="Zostałeś wypisany z newslettera";
							else if(responseHTML=="sign_in")
								msg="Zostałeś zapisany do newslettera";
							Roar.alert(msg);
						},
						onFailure: $empty,
						onException: $empty
					}).get();
				}
			});
			$('newsletter-form').getElement('#newsletter-input').addEvents({
				'focus':function(){
					if(this.value=='Wpisz Twój mail') this.value='';
				},
				'blur':function(){
					if(this.value=='') this.value='Wpisz Twój mail';
				}
			});
		}
		if($('tellus-form')){
			$('tellus-form').addEvent('submit',function(e){
				var ev=new Event(e).stop();
				var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;
				if(this.getElement('#tellus-input').getProperty('value').toUpperCase().match(regEmail)){				
					var r=new Request.HTML({
						method: 'get',
						url: 'http://www.magiakartek.pl/index.php?main=polec-nas&ajax=1&email='+this.getElement('#tellus-input').getProperty('value'),
						onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
							var msg="Nie udało się wysłać e-maila";
							if(responseHTML=="ok")
								msg="E-mail został wysłany.";
							Roar.alert(msg);
						},
						onFailure: $empty,
						onException: $empty
					}).get();
				}
			});
			$('tellus-form').getElement('#tellus-input').addEvents({
				'focus':function(){
					if(this.value=='Wpisz mail znajomego') this.value='';
				},
				'blur':function(){
					if(this.value=='') this.value='Wpisz mail znajomego';
				}
			});
		}

		animatedLinks();

	//	$(document.body).addLiveEvent('click', '.load-news', function(e){loadNews(e);});
	//	$(document.body).addLiveEvent('click', '.load-news-page', function(e){loadNewsPage(e);});

		$(document.body).addLiveEvent('click', '.load-gallery-page', function(e){loadGalleryPage(e);});


	var ca=new CardAnim();
//	new StripSwitch($('pasek-tmp'),$('pasek'),{duration: 3000,maxSteps: 4,fxDuration:1000,baseName: './img/pasek_'});

	//	pulse();

});	

/*multibox */

/**************************************************************

	Script		: MultiBox
	Version		: 1.1
	Authors		: Samuel Birch
	Desc		: Supports jpg, gif, png, flash, flv, mov, wmv, mp3, html, iframe
	Licence		: Open Source MIT Licence

**************************************************************/

var MultiBox = new Class({

	Implements: [Options,Events],
	
	getOptions: function(){
		return {
			initialWidth: 250,
			initialHeight: 250,
			container: $(document.body),
			useOverlay: false,
			contentColor: '#FFF',
			showNumbers: true,
			showControls:true,
			showScrollX:false,
			showScrollY:false,
			//showThumbnails: false,
			//autoPlay: false,
			waitDuration: 2000,
			descClassName: false,
			descMinWidth: 400,
			descMaxWidth: 600,
			movieWidth: 400,
			movieHeight: 300,
			path: 'files/',
			timeOut: 100,
			onOpen: $empty,
			onClose: $empty
		};
	},

	initialize: function(className, options){
		this.setOptions(this.getOptions(),options);
		
		this.openClosePos = {};
		this.timer = 0;
		this.contentToLoad = {};
		this.index = 0;
		this.opened = false;
		this.contentObj = {};
		this.containerDefaults = {};
		
		if(this.options.useOverlay){
			this.overlay = new Overlay({container: this.options.container, onClick:this.close.bind(this)});
		}
		
		this.content = $$('.'+className);
		if(this.options.descClassName){
			this.descriptions = $$('.'+this.options.descClassName);
			this.descriptions.each(function(el){
				el.setStyle('display', 'none');
			});
		}
		
		this.container = new Element('div').setProperties({id: 'MultiBoxContainer'}).addClass('MultiBoxContainer').inject(this.options.container,'inside');
		this.box = new Element('div').addClass('MultiBoxContent').inject(this.container,'inside');
		if(this.options.showScrollY)
			this.box.setStyle('overflow-y','auto');
		if(this.options.showScrollX)
			this.box.setStyle('overflow-x','auto');
			
		
		this.closeButton = new Element('div').addClass('MultiBoxClose').inject(this.container,'inside').addEvent('click', this.close.bind(this));
		
		this.controlsContainer = new Element('div').addClass('MultiBoxControlsContainer').inject(this.container,'inside');
		this.controls = new Element('div').addClass('MultiBoxControls').inject(this.controlsContainer,'inside');
		
		
		this.previousButton = new Element('div').addClass('MultiBoxPrevious').inject(this.controls,'inside').addEvent('click', this.previous.bind(this));
		this.nextButton = new Element('div').addClass('MultiBoxNext').inject(this.controls,'inside').addEvent('click', this.next.bind(this));
		
		this.title = new Element('div').addClass('MultiBoxTitle').inject(this.controls,'inside');
		this.number = new Element('div').addClass('MultiBoxNumber').inject(this.controls,'inside');
		this.description = new Element('div').addClass('MultiBoxDescription').inject(this.controls,'inside');
		
		new Element('div').setStyle('clear', 'both').inject(this.controls,'inside');
		
		this.content.each(function(el,i){
			el.index = i;
			el.removeEvents();
			el.addEvent('click', function(e){
				var ev=new Event(e).stop();
				this.open(el);
			}.bind(this));
			if(el.href.indexOf('#') > -1){
				el.content = $(el.href.substr(el.href.indexOf('#')+1));
				if(el.content){el.content.setStyle('display','none');}
			}
		}, this);
		
		this.containerEffects = new Fx.Morph(this.container, {duration: 400, transition: Fx.Transitions.Back.easeInOut});
		this.controlEffects = new Fx.Morph(this.controlsContainer, {duration: 300, transition: Fx.Transitions.Back.easeInOut});
		
		this.reset();
	},
	
	setContentType: function(link){
		var str = link.href.substr(link.href.lastIndexOf('.')+1).toLowerCase();
		var contentOptions = {};
		if($chk(link.rel)){
			var optArr = link.rel.split(',');
			optArr.each(function(el){
				var ta = el.split(':');
				contentOptions[ta[0]] = ta[1];
			});
		}
		
		if(contentOptions.type != undefined){
			str = contentOptions.type;
		}
		
		this.contentObj = {};
		this.contentObj.url = link.href;
		this.contentObj.xH = 0;
		
		if(contentOptions.width){
			this.contentObj.width = contentOptions.width;
		}else{
			this.contentObj.width = this.options.movieWidth;
		}
		if(contentOptions.height){
			this.contentObj.height = contentOptions.height;	
		}else{
			this.contentObj.height = this.options.movieHeight;
		}
		if(contentOptions.panel){
			this.panelPosition = contentOptions.panel;
		}else{
			this.panelPosition = this.options.panel;
		}
		
		
		switch(str){
			case 'jpg':
			case 'gif':
			case 'png':
				this.type = 'image';
				break;
			case 'swf':
				this.type = 'flash';
				break;
			case 'flv':
				this.type = 'flashVideo';
				this.contentObj.xH = 70;
				break;
			case 'mov':
				this.type = 'quicktime';
				break;
			case 'wmv':
				this.type = 'windowsMedia';
				break;
			case 'rv':
			case 'rm':
			case 'rmvb':
				this.type = 'real';
				break;
			case 'mp3':
				this.type = 'flashMp3';
				this.contentObj.width = 320;
				this.contentObj.height = 70;
				break;
			case 'element':
				this.type = 'htmlelement';
				this.elementContent = link.content;
				this.elementContent.setStyles({
					display: 'block',
					opacity: 0
				});
	
				if(this.elementContent.getStyle('width') != 'auto'){
					this.contentObj.width = this.elementContent.getStyle('width').toInt();
				}
				
				this.contentObj.height = this.elementContent.getSize().size.y;
				this.elementContent.setStyles({
					display: 'none',
					opacity: 1
				});
				break;
				
			default:
				
				this.type = 'iframe';
				if(contentOptions.ajax){
					this.type = 'ajax';
				}
				break;
		}
	},
	
	reset: function(){
		this.container.setStyles({
			'opacity': 0,
			'display': 'none'
		});
		this.controlsContainer.setStyles({
			'height': 0
		});
		this.removeContent();
		this.previousButton.removeClass('MultiBoxButtonDisabled');
		this.nextButton.removeClass('MultiBoxButtonDisabled');
		this.opened = false;
	},
	
	getOpenClosePos: function(el){
		 var w,h;
		if(el.getFirst()){
			w = el.getFirst().getCoordinates().width-(this.container.getStyle('border').toInt()*2);
			if(w < 0){w = 0;}
			h = el.getFirst().getCoordinates().height-(this.container.getStyle('border').toInt()*2);
			if(h < 0){h = 0;}
			this.openClosePos = {
				width: w,
				height: h,
				top: el.getFirst().getCoordinates().top,
				left: el.getFirst().getCoordinates().left
			};
		}else{
			w = el.getCoordinates().width-(this.container.getStyle('border').toInt()*2);
			if(w < 0){w = 0;}
			h = el.getCoordinates().height-(this.container.getStyle('border').toInt()*2);
			if(h < 0){h = 0;}
			this.openClosePos = {
				width: w,
				height: h,
				top: el.getCoordinates().top,
				left: el.getCoordinates().left
			};
		}
		return this.openClosePos;
	},
	
	open: function(el){
	
		this.options.onOpen;
	
		this.index = this.content.indexOf(el);
		
		this.openId = el.getProperty('id');
		
		if(!this.opened){
			this.opened = true;
			
			if(this.options.useOverlay){
				this.overlay.show();
			}
			
			this.container.setStyles(this.getOpenClosePos(el));
			this.container.setStyles({
				opacity: 0,
				display: 'block'
			});
			
			this.containerEffects.start({
				width: this.options.initialWidth,
				height: this.options.initialHeight,
				top: ((window.opera ? window.innerHeight : window.getHeight())/2)-(this.options.initialHeight/2)-this.container.getStyle('border').toInt(),
				left: (window.getWidth()/2)-(this.options.initialWidth/2)-this.container.getStyle('border').toInt(),
				opacity: [0, 1]
			});
			
			this.load(this.index);
		
		}else{
			
			this.hideControls();
			this.getOpenClosePos(this.content[this.index]);
			this.timer = this.hideContent.bind(this).delay(500);
			this.timer = this.load.pass(this.index, this).delay(1100);
			
		}
		
	},
	
	getContent: function(index){
		this.setContentType(this.content[index]);
		var desc = {};
		this.descriptions.each(function(el,i){
			if(el.hasClass(this.openId)){
				desc = el.clone();
				desc.setProperty('class','multiBoxDesc');
			}
		},this);
		this.contentToLoad = {
			title: this.content[index].title,
			//desc: $(this.options.descClassName+this.content[index].id).clone(),
			desc: desc,
			number: index+1
		};
	},
	
	close: function(){
		if(this.options.useOverlay){
			this.overlay.hide();
		}
		this.hideControls();
		this.hideContent();
		this.containerEffects.cancel();
		this.zoomOut.bind(this).delay(500);
		this.options.onClose;
	},
	
	zoomOut: function(){
		this.containerEffects.start({
			width: this.openClosePos.width,
			height: this.openClosePos.height,
			top: this.openClosePos.top,
			left: this.openClosePos.left,
			opacity: 0
		});
		this.reset.bind(this).delay(500);
	},
	
	load: function(index){
		this.box.addClass('MultiBoxLoading');
		this.getContent(index);
		if(this.type == 'image'){
			var xH = this.contentObj.xH;
			this.contentObj = new Asset.image(this.content[index].href, {onload: this.resize.bind(this)});
			this.contentObj.xH = xH;
			/*this.contentObj = new Image();
			this.contentObj.onload = this.resize.bind(this);
			this.contentObj.src = this.content[index].href;*/
		}else{
			this.resize();
		}
	},
	
	resize: function(){
		var top = ((window.opera ? window.innerHeight : window.getHeight())/2)-((Number(this.contentObj.height)+this.contentObj.xH)/2)-this.container.getStyle('border').toInt()+window.getScrollTop();
		var left = (window.getWidth()/2)-(this.contentObj.width/2)-this.container.getStyle('border').toInt();
		if(top < 0){top = 0;}
		if(left < 0){left = 0;}
		
		this.containerEffects.cancel();
		this.containerEffects.start({
				width: this.contentObj.width,
				height: Number(this.contentObj.height)+this.contentObj.xH,
				top: top,
				left: left,
				opacity: 1
		});
		this.timer = this.showContent.bind(this).delay(500);
	},
	
	showContent: function(){
		now = new Date();
		if(this.options.timeOut > (now.getTime()-1500)){
			return true;
		}
		this.options.timeOut = new Date();

		this.box.removeClass('MultiBoxLoading');
		this.removeContent();
		
		this.contentContainer = new Element('div').setProperties({id: 'MultiBoxContentContainer'}).setStyles({opacity: 0, width: this.contentObj.width, height: (Number(this.contentObj.height)+this.contentObj.xH)}).injectInside(this.box);
		
		if(this.type == 'image'){
			this.contentObj.injectInside(this.contentContainer);
			
		}else if(this.type == 'iframe'){
			var iframe=new Element('iframe').setProperties({
				id: 'iFrame', 
				width: this.contentObj.width,
				height: this.contentObj.height,
				src: this.contentObj.url,
				frameborder: 0,
				scrolling: 'auto'
			}).injectInside(this.contentContainer);
		//	iframe.getElementsByTagName('body')[0].setStyle('background-color',this.options.contentColor);
			
		}else if(this.type == 'htmlelement'){
			this.elementContent.clone().setStyle('display','block').inject(this.contentContainer,'inside');
			
		}else if(this.type == 'ajax'){
			new Request.HTML({
				url: this.contentObj.url,
				method: 'get',
				update: 'MultiBoxContentContainer',
				evalScripts: true,
				link: 'cancel'
			}).get();
			
		}else{
			var obj = this.createEmbedObject().inject(this.contentContainer,'inside');
			if(this.str != ''){
				$('MultiBoxMediaObject').innerHTML = this.str;
			}
		}
		
		this.contentEffects = new Fx.Morph(this.contentContainer, {duration: 500, transition: Fx.Transitions.linear});
		this.contentEffects.start({
			opacity: 1
		});
		
		this.title.set('html',this.contentToLoad.title);
		this.number.set('html',this.contentToLoad.number+' z '+this.content.length);
		if(this.description.getFirst()){
			this.description.getFirst().destroy();
		}
		this.contentToLoad.desc.inject(this.description,'inside').setStyles({display: 'block'});
		//this.removeContent.bind(this).delay(500);
		
		this.timer = this.showControls.bind(this).delay(800);
	},
	
	hideContent: function(){
		this.box.addClass('MultiBoxLoading');
		this.contentEffects.start({
			opacity: 0
		});
		this.removeContent.bind(this).delay(500);
	},
	
	removeContent: function(){
		if($('MultiBoxMediaObject')){
			//$('MultiBoxMediaObject').setHTML('');
			$('MultiBoxMediaObject').destroy();
		}
		if($('MultiBoxContentContainer')){
			$('MultiBoxContentContainer').destroy();	
		}
	},
	
	showControls: function(){
		this.clicked = false;
		
		if(this.container.getStyle('height') != 'auto'){
			this.containerDefaults.height = this.container.getStyle('height')
			this.containerDefaults.backgroundColor = this.options.contentColor;
		}
		
		this.container.setStyles({
			'backgroundColor': this.controls.getStyle('backgroundColor'),
			'height': 'auto'
		});
		
		if(this.options.showControls){
			if(this.contentToLoad.number == 1){
				this.previousButton.addClass('MultiBoxPreviousDisabled');
			}else{
				this.previousButton.removeClass('MultiBoxPreviousDisabled');
			}
			if(this.contentToLoad.number == this.content.length){
				this.nextButton.addClass('MultiBoxNextDisabled');
			}else{
				this.nextButton.removeClass('MultiBoxNextDisabled');
			}
		
			this.controlEffects.start({'height': this.controls.getStyle('height')});
		}

	},
	
	hideControls: function(num){
		this.controlEffects.start({'height': 0}).chain(function(){
			this.container.setStyles(this.containerDefaults);
		}.bind(this));
	},
	
	showThumbnails: function(){
		
	},
	
	next: function(){
		if(this.index < this.content.length-1){
			this.index++;
			this.openId = this.content[this.index].getProperty('id');
			this.hideControls();
			this.getOpenClosePos(this.content[this.index]);
			//this.getContent(this.index);
			this.timer = this.hideContent.bind(this).delay(500);
			this.timer = this.load.pass(this.index, this).delay(1100);
		}
	},
	
	previous: function(){
		if(this.index > 0){
			this.index--;
			this.openId = this.content[this.index].getProperty('id');
			this.hideControls();
			this.getOpenClosePos(this.content[this.index]);
			//this.getContent(this.index);
			this.timer = this.hideContent.bind(this).delay(500);
			this.timer = this.load.pass(this.index, this).delay(1000);
		}
	},
	
	createEmbedObject: function(){
		if(this.type == 'flash'){
			var url = this.contentObj.url;
			
			var obj = new Element('div').setProperties({id: 'MultiBoxMediaObject'});
			this.str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" '
			this.str += 'width="'+this.contentObj.width+'" ';
			this.str += 'height="'+this.contentObj.height+'" ';
			this.str += 'title="MultiBoxMedia">';
  			this.str += '<param name="movie" value="'+this.options.path+url+'" />'
  			this.str += '<param name="quality" value="high" />';
  			this.str += '<embed src="'+this.options.path+url+'" ';
  			this.str += 'quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" ';
  			this.str += 'width="'+this.contentObj.width+'" ';
  			this.str += 'height="'+this.contentObj.height+'"></embed>';
			this.str += '</object>';
			
		}
		
		if(this.type == 'flashVideo'){
			//var url = this.contentObj.url.substring(0, this.contentObj.url.lastIndexOf('.'));
			var url = this.contentObj.url;
			
			var obj = new Element('div').setProperties({id: 'MultiBoxMediaObject'});
			this.str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" '
			this.str += 'width="'+this.contentObj.width+'" ';
			this.str += 'height="'+(Number(this.contentObj.height)+this.contentObj.xH)+'" ';
			this.str += 'title="MultiBoxMedia">';
  			this.str += '<param name="movie" value="'+this.options.path+'flvplayer.swf" />'
  			this.str += '<param name="quality" value="high" />';
  			this.str += '<param name="salign" value="TL" />';
  			this.str += '<param name="scale" value="noScale" />';
  			this.str += '<param name="FlashVars" value="path='+url+'" />';
  			this.str += '<embed src="'+this.options.path+'flvplayer.swf" ';
  			this.str += 'quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" ';
  			this.str += 'width="'+this.contentObj.width+'" ';
  			this.str += 'height="'+(Number(this.contentObj.height)+this.contentObj.xH)+'"';
  			this.str += 'salign="TL" ';
  			this.str += 'scale="noScale" ';
  			this.str += 'FlashVars="path='+url+'"';
  			this.str += '></embed>';
			this.str += '</object>';
			
		}
		
		if(this.type == 'flashMp3'){
			var url = this.contentObj.url;
			
			var obj = new Element('div').setProperties({id: 'MultiBoxMediaObject'});
			this.str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" '
			this.str += 'width="'+this.contentObj.width+'" ';
			this.str += 'height="'+this.contentObj.height+'" ';
			this.str += 'title="MultiBoxMedia">';
  			this.str += '<param name="movie" value="'+this.options.path+'mp3player.swf" />'
  			this.str += '<param name="quality" value="high" />';
  			this.str += '<param name="salign" value="TL" />';
  			this.str += '<param name="scale" value="noScale" />';
  			this.str += '<param name="FlashVars" value="path='+url+'" />';
  			this.str += '<embed src="'+this.options.path+'mp3player.swf" ';
  			this.str += 'quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" ';
  			this.str += 'width="'+this.contentObj.width+'" ';
  			this.str += 'height="'+this.contentObj.height+'"';
  			this.str += 'salign="TL" ';
  			this.str += 'scale="noScale" ';
  			this.str += 'FlashVars="path='+url+'"';
  			this.str += '></embed>';
			this.str += '</object>';
		}
		
		if(this.type == 'quicktime'){
			var obj = new Element('div').setProperties({id: 'MultiBoxMediaObject'});
			this.str = '<object  type="video/quicktime" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab"';
			this.str += ' width="'+this.contentObj.width+'" height="'+this.contentObj.height+'">';
			this.str += '<param name="src" value="'+this.contentObj.url+'" />';
			this.str += '<param name="autoplay" value="true" />';
			this.str += '<param name="controller" value="true" />';
			this.str += '<param name="enablejavascript" value="true" />';
			this.str += '<embed src="'+this.contentObj.url+'" autoplay="true" pluginspage="http://www.apple.com/quicktime/download/" width="'+this.contentObj.width+'" height="'+this.contentObj.height+'"></embed>';
			this.str += '<object/>';
			
		}
		
		if(this.type == 'windowsMedia'){
			var obj = new Element('div').setProperties({id: 'MultiBoxMediaObject'});
			this.str = '<object  type="application/x-oleobject" classid="CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,7,1112"';
			this.str += ' width="'+this.contentObj.width+'" height="'+this.contentObj.height+'">';
			this.str += '<param name="filename" value="'+this.contentObj.url+'" />';
			this.str += '<param name="Showcontrols" value="true" />';
			this.str += '<param name="autoStart" value="true" />';
			this.str += '<embed type="application/x-mplayer2" src="'+this.contentObj.url+'" Showcontrols="true" autoStart="true" width="'+this.contentObj.width+'" height="'+this.contentObj.height+'"></embed>';
			this.str += '<object/>';
			
		}
		
		if(this.type == 'real'){
			var obj = new Element('div').setProperties({id: 'MultiBoxMediaObject'});
			this.str = '<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"';
			this.str += ' width="'+this.contentObj.width+'" height="'+this.contentObj.height+'">';
			this.str += '<param name="src" value="'+this.contentObj.url+'" />';
			this.str += '<param name="controls" value="ImageWindow" />';
			this.str += '<param name="autostart" value="true" />';
			this.str += '<embed src="'+this.contentObj.url+'" controls="ImageWindow" autostart="true" width="'+this.contentObj.width+'" height="'+this.contentObj.height+'"></embed>';
			this.str += '<object/>';
			
		}
		
		return obj;
	}
	
});



/* png fix*/
function PNGFix(clear)
{

	if(Browser.Engine.trident&&Browser.Engine.version==4){
		$$('.pngfix').each(function(el){
			/*var id=el.getProperty('id');
			var s=new Element('span',{
				'class':el.getProperty('class'),
				'styles':{
					'display':'inline-block',
					'width':el.getProperty('width'),
					'height':el.getProperty('height'),
					'filter':'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+el.getProperty('src')+'\',sizingMethod=\'scale\')'
				}
			});
			s.setStyles(el.getStyles());
			s.replaces(el);
			$(s).setProperty('id',id);
			*/
			//var el=$(e.target);
			el.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+el.getProperty('src')+"',sizingMethod='scale')";
			el.src='img/blank.gif';
		});
	}
	
}

/* moo path*/
/*
Script: MooPath-0.1.js
	MooPath version 0.1 19-09 2008

License:
	MIT-style license.

Copyright:
	Copyright 2008
	Sjors van der Pluijm
	http://www.desjors.nl/blog

See also:
	http://mootools.net

Usage:
	window.addEvent('domready', function() {
		new MooPath.Ellipse($$('div.myelements'), {
			show: 2,
			ellipse: {x: 400, y: 400},
			factor: 0.8,
			fxoptions: {
				duration: 1000
			}
		});
	});
*/

/*
Class: Fx.Any
	Fx.Any is a hack of Fx.Elements to add custom properties to change. 
	Each property has a callback function that takes the element and the current value of 
	the property as its arguments.
	Callback example: {myname: function(el, value) {el.setStyle('height', value);}}

Arguments:
	elements  - see Fx.Elements
	callbacks - an object of callbacks
	options   - optional, see Fx.Elements
*/
Fx.Any = new Class({

	Extends: Fx.Elements,

	initialize: function(elements, callbacks, options) {
		this.callbacks = callbacks || {};
		this.parent(elements, options);
	},

	render: function(element, property, value) {
		if (this.callbacks[property]) {
			this.callbacks[property](element, value[0]['value']);
		} else {
			this.parent(element, property, value);
		}
	}
});

/*
Class: MooPath
	To use MooPath you need to subclass it and add the method 'set' which will
	set the position of the element at a point

Arguments:
	elements  - the elements to arrange
	options   - optional

Options:
	show      - the element to show at start (int)
	fxoptions - options, see Fx.Elements
*/
var MooPath = new Class({

	Implements: [Options],

	maxposition: 1,

	options: {
		show: 0,
		autoPlay:false,
		fxoptions: {},
		position: 'position',
		origsize: 'origsize'
	},

	initialize: function(container,elements, allelements,options) {
		this.setOptions(options);
 		this.elements = elements;
		this.container=container;
 		this.curel = this.options.show;
		this.stop=false;
		this.allelementsIndex=0;
		this.allelementsMax=allelements.length-1;
		this.allelements=allelements;
		this.allelementsSrc=new Array();
		this.ie67=Browser.Engine.trident&&(Browser.Engine.version==4||Browser.Engine.version==5);
		this.ie6=Browser.Engine.trident&&Browser.Engine.version==4;
		
		//$('header-gallery').setStyle('display','none');
			
	//	allelements.each(function(src,i){
	//		this.allelements[i]=src.getProperty('src');
	//	}.bind(this));

		this.container.addEvents({
						'mouseleave':function(){this.stop=false;this.display('next');}.bind(this),
						'mouseenter':function(){this.stop=true;}.bind(this)
						});
		this.fx = new Fx.Any(this.elements, {pathpoint: this.set.bind(this)}, this.options.fxoptions);
		if(this.options.autoPlay){
			this.fx.addEvent('onComplete',function(){
				if(!this.stop)
					this.display('next');
			}.bind(this));
		}
		
		for(i=0;i<allelements.length;i++){
			this.allelementsSrc[i]=allelements[i].getProperty('src');
		}
		var numelements = this.elements.length;
 		this.elements.each(function(el, i) {
 			el.store(this.options.origsize,  el.getDimensions());


			var src=this.allelementsSrc[i];
			el.setProperty('src',src);
			if(this.ie6){
				el.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"',sizingMethod='scale')";
				el.src='./img/blank.gif';
			}
			this.allelementsIndex++;

			// Position element on path
			if (!el.retrieve(this.options.position)) {
				el.store(this.options.position, (i - this.curel) / numelements);
			}
			el.setStyle('cursor', i==this.curel?'default':'pointer');
			el.addEvent('click',this.display.bind(this,i));
			//el.addEvent('click',function(e){var ev=new Event(e).stop();this.stop=true;}.bind(this));
			el.set('tween',{link:'ignore'});//,onComplete:this.switchImage.bind(this,el)});
			el.set('morph',{link:'ignore'});
 		}, this);
		var images=new Asset.images(this.allelementsSrc, {
			onComplete: function(){
				this.elements.each(function(el){
					this.set(el, el.retrieve(this.options.position));
					//el.setStyle('display','inline');
				}.bind(this));
				if(this.options.autoPlay){
					this.display('next');
				}
			}.bind(this)
		});
		


	},
	
	switchImage: function(el){
		var src=this.allelementsSrc[this.allelementsIndex];
	
		el.setProperty('src',src);
		el.getParent().setProperty('href',this.allelements[this.allelementsIndex].getParent().getProperty('href'));
//		this.allelements[this.allelementsIndex].replaces(el);
		this.allelementsIndex++;
		if(this.allelementsIndex>this.allelementsMax)
			this.allelementsIndex=0;
	//	console.log(this.allelementsIndex);
		if(Browser.Engine.trident&&Browser.Engine.version==4){
		//	alert("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+escape(src)+"',sizingMethod='scale')");
			el.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"',sizingMethod='scale')";
			el.src='img/blank.gif';
		}
	},
	
	/*
	Property: turn
		Do a full animation from position 0 to position 1
		
	Arguments:
		numrounds - integer, number of rounds

	Example:
		(start code)
		new MooPath.Ellipse($$('a')).turn(2);
		(end)
	*/
	turn: function(numrounds) {
		var diff = numrounds * this.maxposition * -1;
		var obj = {};
		this.elements.each(function(el, i) {
			var curpos = el.retrieve(this.options.position);
			obj[i] = {pathpoint: [curpos, curpos - diff]};
			el.store(this.options.position, curpos - diff);
		}, this);
		this.fx.start(obj);
	},

	/*
	Property: display
		Brings the element to position 0 (front).
		
	Arguments:
		idx - integer, the index of the item to show, or the actual element to show.

	Example:
		(start code)
		new MooPath.Ellipse($$('a')).display(1);
		(end)
	*/
	display: function(idx) {

		if ($type(idx) == 'element') {
		 	this.curel = idx = this.elements.indexOf(idx);
		} else if ($type(idx) == 'string') {
			if (idx == 'next') {
				this.curel--;
				if(this.curel<0)
					this.curel=this.elements.length-1;
				this.switchImage(this.elements[this.curel]);
				idx = this.elements[this.curel]?this.curel:this.elements.length-1;
			} else if (idx == 'previous') {
				this.curel++;
				if(this.curel>this.elements.length-1)
					this.curel=0;			
				idx = this.elements[this.curel]?this.curel:0;
			}
		} else {
			this.curel = idx;
		}

		var diff = this.movement(this.elements[idx]);
		if (diff == 0) return;

		var obj = {};
		this.elements.each(function(el, i) {
			var curpos = el.retrieve(this.options.position);
			obj[i] = {pathpoint: [curpos, curpos - diff]};
			el.store(this.options.position, curpos - diff);
			el.setStyle('cursor', i==this.curel?'default':'pointer');
		}, this);

		this.fx.start(obj);

	},

	movement: function(el) {
		// Calculate movement diff (current position + diff = new position)
		return el.retrieve(this.options.position);
	}
});
/*
Class: MooPath.Ellipse
	Move objects over an ellipse

Arguments:
	elements  - the elements to arrange
	options   - optional

Options:
	see MooPath and
	ellipse   - object with width and height of the ellipse
	factor    - objects far away look smaller
*/
MooPath.Ellipse = new Class({

	Extends: MooPath,

	options: {
		ellipse: {x: 400, y: 400},
		factor: 0.3
	},

	set: function(el, position) {
		// Set the styles of the element at position
		var origsize = el.retrieve(this.options.origsize);
		var a = this.options.ellipse.x/2;
		var b = this.options.ellipse.y/2;
		

		// 0-1 scale to 0-2pi
		position=position-Math.floor(position);
		if(position<=0.75&&position>=0.25){
			positionpi = 2*Math.PI * position;

			var x=a+a*Math.cos(positionpi-0.85*Math.PI);
			var y=b+b*Math.sin(positionpi);
			var factor = this.realFactor(y);
			var point={x:x,y:y};
		
			el.setStyles({
				'bottom':  Math.round(point.y),
				'left':    Math.round(point.x - (origsize.x * factor / 2)),
				'width':   Math.round(origsize.x * factor),
				'height':  Math.round(origsize.y * factor),
				'z-index': this.options.ellipse.y - Math.round(point.y)
			});
		//	el.morph({'opacity':1});
		}
		if(position<=0.7&&position>=0.25){
			el.setStyle('display','inline');
			if(!this.ie67)
				el.set('opacity',1);
		}
		else{
		//	if(el.getStyle('display')!='none')
				if(this.ie67)
					el.setStyle('display','none');
				else
					el.tween('opacity',0);

		}

			},
	realFactor: function(posy) {
		// Get the factor that aplies on position posy
		return ((this.options.ellipse.y - (posy)) * (1 - this.options.factor) / this.options.ellipse.y) + this.options.factor;
	},

	movement: function(el) {
		// Calculate movement diff (current position + diff = new position)
		var diff = el.retrieve(this.options.position);
		while (diff < 0) diff += this.maxposition;
		while (diff >= this.maxposition) diff -= this.maxposition;

		// Reverse direction
		if (diff >= this.maxposition / 2) {
			diff -= this.maxposition;
		}
		

		return diff;
	}
});

/* el select */
/**
* @file elSelect.js
* @downloaded from http://www.cult-f.net/2007/12/14/elselect/
* @author Sergey Korzhov aka elPas0
* @site  http://www.cult-f.net
* @date December 14, 2007
* 
*/
var elSelect = new Class({
	Implements: [Options,Events],
	options: {
		container: false,
		baseClass : 'elSelect',
		gfx: true
	},
	source : false,
	selected : false,
	_select : false,
	current : false,
	selectedOption : false,
	dropDown : false,
	optionsContainer : false,
	hiddenInput : false,
	showRefresh: false,
	/*
	pass the options,
	create html and inject into container
	*/
	initialize: function(options){
		this.setOptions(options);
		
		if ( !this.options.container ) return;
		
		this.selected = false;
		this.source = $(this.options.container).getElement('select');
		this.buildFrameWork();
		
		$(this.source).getElements('option').each(function(el,i) {this.addOption(el,i)}.bind(this));
		$(this.options.container).set('html','');
		this._select.injectInside($(this.options.container));
		
		this.bindEvents();
		

		
	},
	
	buildFrameWork : function() {
		this._select = new Element('div').addClass( this.options.baseClass );
		this.current = new Element('div').addClass('selected').injectInside($(this._select));
		this.selectedOption = new Element('div').addClass('selectedOption').injectInside($(this.current));
		this.dropDown = new Element('div').addClass('dropDown').injectInside($(this.current));
		new Element('div').addClass('clear').injectInside($(this._select));
		this.optionsContainer = new Element('div').addClass('optionsContainer').injectInside($(this._select));
		var t = new Element('div').addClass('optionsContainerTop').injectInside($(this.optionsContainer));
		var o = new Element('div').injectInside($(t));
		var p = new Element('div').injectInside($(o));
		t = new Element('div').addClass('optionsContainerBottom').injectInside($(this.optionsContainer));
		o = new Element('div').injectInside($(t));
		p = new Element('div').injectInside($(o));

		var id=this.source.getProperty('id');
		this.hiddenInput = new Element('input').setProperties({
			type  : 'hidden',
			name  : this.source.getProperty('name'),
			id	: id+'tmp'
		
		}).injectInside($(this.optionsContainer));
				
	},
	
	bindEvents : function() {
		document.addEvent('click', function() { 
				if ( this.optionsContainer.getStyle('display') == 'block') 
					this.onDropDown();
			}.bind(this));
			
		$(this.options.container).addEvent( 'click', function(e) { var ev=new Event(e).stop(); } );		
		this.current.addEvent('click', this.onDropDown.bindWithEvent(this) );
		
	},
	
	//add single option to select
	addOption: function( option,i ){
    	var o = new Element('div').addClass('option').setProperty('value',option.value);
		if ( option.disabled ) { o.addClass('disabled'); } else {
			o.addEvents( {
				'click': this.onOptionClick.bindWithEvent(this),
				'mouseout': this.onOptionMouseout.bindWithEvent(this),
				'mouseover': this.onOptionMouseover.bindWithEvent(this)
			});
		}
		
		if ( $defined(option.getProperty('class')) && $chk(option.getProperty('class')) )
			o.addClass(option.getProperty('class'));
		
		if(this.options.gfx)
			o.setStyle('background',option.getStyle('background'));
	
		if ( option.selected ) { 
			if ( this.selected) this.selected.removeClass('selected');
			this.selected = o;
			o.addClass('selected');
			if(!this.options.gfx)
				this.selectedOption.set('text',option.text);
			else
				this.selectedOption.setStyle('background-image',o.getStyle('background-image'));			
			this.hiddenInput.setProperty('value',option.value);
		}
		if(!this.options.gfx)
			o.set('text',option.text);
		else
			o.set('text',' ');			
		o.injectBefore($(this.optionsContainer).getLast());
		if(i==0&&this.options.gfx){
			this.selectedOption.setStyle('background-image',o.getStyle('background-image'));
			this.hiddenInput.setProperty('value',option.value);
		}
	},
	
	onDropDown : function( e ) {
			
			if ( this.optionsContainer.getStyle('display') == 'block') {
				this.optionsContainer.setStyle('display','none');
			} else {
				this.optionsContainer.setStyle('display','block');
				this.selected.addClass('selected');
				//needed to fix min-width in ie6
				var width =  this.optionsContainer.getStyle('width').toInt() > this._select.getStyle('width').toInt() ?
															this.optionsContainer.getStyle('width')
															:
															this._select.getStyle('width');
															
				this.optionsContainer.setStyle('width', width);
				this.optionsContainer.getFirst().setStyle('width', width);
				this.optionsContainer.getLast().setStyle('width', width);
			}						
	},
	onOptionClick : function(e) {
		var event = new Event(e);
		if ( this.selected != event.target ) {
			this.selected.removeClass('selected');
			event.target.addClass('selected');
			this.selected = event.target;
			if(this.options.gfx)
				this.selectedOption.setStyle('background-image',this.selected.getStyle('background-image'));
			else
				this.selectedOption.set('text',this.selected.get('text'));
			this.hiddenInput.setProperty('value',this.selected.getProperty('value'));
		}
		this.onDropDown();
		if(this.options.showRefresh){
			this.options.showRefresh.setStyles({'display':'inline','border':0});
		}
	},
	onOptionMouseover : function(e){
		var event = new Event(e);
		this.selected.removeClass('selected');
		event.target.addClass('selected');
	},
	onOptionMouseout : function(e){
		var event = new Event(e);
		event.target.removeClass('selected');
	}
	
});

/* color picker */
var ColorPicker=new Class({
	Implements: [Options],
	options:{
			el: null,
			trigger: null,
			showRefresh: null
	},


    
    initialize: function(el, options) {
		this.setOptions(options);
        this.colourArray =  new Array('#000000','#990000','#009900','#000099','#800080','#ea9400','#f93fff');
        this.el = $(el);
        this.trigger = $(this.options.trigger);
        this.trigger.addEvent('click', function() {this.toggleTable(this.trigger.id);}.bind(this));

        this.buildTable();
        
    },
     buildTable: function() {

            html = "<table id=\"" + this.trigger.id + "ColorPicker\" style=\"display: none\" class=\"colorPicker\">";
            for(i = 0; i < this.colourArray.length; i++) {
            //    if(i % 7 == 0) {
                    html += "<tr>";
              //  }
                html+= "<td style=\"background-color: " + this.colourArray[i] + ";\" title=\"" + this.colourArray[i] +  "\" onClick=\"$('" + this.el.id + "').value = '" + this.colourArray[i] + "'; $('" + this.trigger.id + "ColorPicker').setStyle('display','none');$('"+this.trigger.id+"').setStyle('color','"+this.colourArray[i]+"');";
				if(this.options.showRefresh)
					html+="$('"+this.options.showRefresh+"').setStyles({'display':'inline','border':0});";
				html+="\">";
                //if(i % 7 == 7) {
                    html += "</tr>";
                //}
            }
            html += "</table>";
            this.trigger.getNext().set('html',html);
			var pos=this.trigger.getPosition();
		//	this.trigger.getNext().setStyles({'left':pos.x,'top':pos.y+100});

    },
    toggleTable: function(id) {
        var obj=$(id+'ColorPicker');
        obj.setStyle('display',obj.getStyle('display')=='block'?'none':'block');
    }
});

/* reflection*/
/*!
	reflection.js for mootools v1.42
	(c) 2006-2008 Christophe Beyls <http://www.digitalia.be>
	MIT-style license.
*/

Element.implement({
	reflect: function(options) {
		var img = this;
		if (img.get("tag") == "img") {
			options = $extend({
				height: 30,
				opacity: 0.5
			}, options);

			img.unreflect();

			function doReflect() {
				var reflection, reflectionHeight = Math.floor(options.height), wrapper, context, gradient;

				if (Browser.Engine.trident) {
					reflection = new Element("img", {src: img.src, styles: {
						width: img.width,
						height: img.height,
						bottom: -img.height + reflectionHeight,
						filter: "flipv progid:DXImageTransform.Microsoft.Alpha(opacity=" + (options.opacity * 100) + ", style=1, finishOpacity=0, startx=0, starty=0, finishx=0, finishy=" + (options.height) + ")"
					}});
				} else {
					reflection = new Element("canvas");
					if (!reflection.getContext) return;
					try {
						context = reflection.setProperties({width: img.width, height: reflectionHeight}).getContext("2d");
						context.save();
						context.translate(0, img.height-1);
						context.scale(1, -1);
						context.drawImage(img, 0, 0, img.width, img.height);
						context.restore();
						context.globalCompositeOperation = "destination-out";

						gradient = context.createLinearGradient(0, 0, 0, reflectionHeight);
						gradient.addColorStop(0, "rgba(255, 255, 255, " + (1 - options.opacity) + ")");
						gradient.addColorStop(1, "rgba(255, 255, 255, 1.0)");
						context.fillStyle = gradient;
						context.rect(0, 0, img.width, reflectionHeight);
						context.fill();
					} catch (e) {
						return;
					}
				}
				reflection.setStyles({display: "block", border: 0});

				if (Browser.Engine.trident)
					wrapper = new Element(($(img.parentNode).get("tag") == "a") ? "span" : "div").injectAfter(img).adopt(img, reflection);
				else
					wrapper = new Element('div').injectAfter(img).adopt(img, reflection);
				
				wrapper.className = img.className;
				img.store("reflected", wrapper.style.cssText = img.style.cssText);
				wrapper.setStyles({width: img.width, height: img.height + reflectionHeight, overflow: "hidden"});
				img.style.cssText="display:block;border:0";
				img.className = "reflected";
			}

			if (img.complete) doReflect();
			else img.onload = doReflect;
		}

		return img;
	},

	unreflect: function() {
		var img = this, reflected = this.retrieve("reflected"), wrapper;
		img.onload = $empty;

		if (reflected !== null) {
			wrapper = img.parentNode;
			img.className = wrapper.className;
			img.style.cssText = reflected;
			img.store("reflected", null);
			wrapper.parentNode.replaceChild(img, wrapper);
		}

		return img;
	}
});
/* calendar */
// Calendar: a Javascript class for Mootools that adds accessible and unobtrusive date pickers to your form elements <http://electricprism.com/aeron/calendar>
// Calendar RC4, Copyright (c) 2007 Aeron Glemann <http://electricprism.com/aeron>, MIT Style License.
// Mootools 1.2 compatibility by Davorin Šego

var Calendar = new Class({	
	Implements: [Options],
	
	options: {
		blocked: [], // blocked dates 
		classes: [], // ['calendar', 'prev', 'next', 'month', 'year', 'today', 'invalid', 'valid', 'inactive', 'active', 'hover', 'hilite']
		days: ['Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota'], // days of the week starting at sunday
		direction: 0, // -1 past, 0 past + future, 1 future
		draggable: true,
		months: ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'],
		navigation: 1, // 0 = no nav; 1 = single nav for month; 2 = dual nav for month and year
		offset: 1, // first day of the week: 0 = sunday, 1 = monday, etc..
		onHideStart: Class.empty,
		onHideComplete: Class.empty,
		onShowStart: Class.empty,
		onShowComplete: Class.empty,
		pad: 1, // padding between multiple calendars
		tweak: {x: 0, y: 0} // tweak calendar positioning
	},

	// initialize: calendar constructor
	// @param obj (obj) a js object containing the form elements and format strings { id: 'format', id: 'format' etc }
	// @param props (obj) optional properties

	initialize: function(obj, options) {
		// basic error checking
		if (!obj) { return false; }

		this.setOptions(options);

		// create our classes array
		var keys = ['calendar', 'prev', 'next', 'month', 'year', 'today', 'invalid', 'valid', 'inactive', 'active', 'hover', 'hilite'];

		var values = keys.map(function(key, i) {
			if (this.options.classes[i]) {
				if (this.options.classes[i].length) { key = this.options.classes[i]; }
			}
			return key;
		}, this);

		this.classes = values.associate(keys);

		// create cal element with css styles required for proper cal functioning
		this.calendar = new Element('div', { 
			'styles': { left: '-1000px', opacity: 0, position: 'absolute', top: '-1000px', zIndex: 1000 }
		}).addClass(this.classes.calendar).injectInside(document.body);

		// iex 6 needs a transparent iframe underneath the calendar in order to not allow select elements to render through
		if (window.ie6) {
			this.iframe = new Element('iframe', { 
				'styles': { left: '-1000px', position: 'absolute', top: '-1000px', zIndex: 999 }
			}).injectInside(document.body);
			this.iframe.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
		}

		// initialize fade method
		this.fx = new Fx.Tween(this.calendar, {
			onStart: function() { 
				if (this.calendar.getStyle('opacity') == 0) { // show
					if (window.ie6) { this.iframe.setStyle('display', 'block'); }
					this.calendar.setStyle('display', 'block');
					this.fireEvent('onShowStart', this.element);
				}
				else { // hide
					this.fireEvent('onHideStart', this.element);
				}
			}.bind(this),
			onComplete: function() { 
				if (this.calendar.getStyle('opacity') == 0) { // hidden
					this.calendar.setStyle('display', 'none');
					if (window.ie6) { this.iframe.setStyle('display', 'none'); }
					this.fireEvent('onHideComplete', this.element);
				}
				else { // shown
					this.fireEvent('onShowComplete', this.element);
				}
			}.bind(this)
		});

		// initialize drag method
		if (window.Drag && this.options.draggable) {
			this.drag = new Drag.Move(this.calendar, { 
				onDrag: function() {
					if (window.ie6) { this.iframe.setStyles({ left: this.calendar.style.left, top: this.calendar.style.top }); } 
				}.bind(this) 
			}); 
		}
		
		// create calendars array
		this.calendars = [];

		var id = 0;
		var d = new Date(); // today

		d.setDate(d.getDate() + this.options.direction.toInt()); // correct today for directional offset

		for (var i in obj) {
			var cal = { 
				button: new Element('button', { 'type': 'button' }),
				el: $(i),
				els: [],
				id: id++,
				month: d.getMonth(),
				visible: false,
				year: d.getFullYear()
			};

			// fix for bad element (naughty, naughty element!)
			if (!this.element(i, obj[i], cal)) { continue; }
			
			cal.el.addClass(this.classes.calendar);

			// create cal button
			cal.button.addClass(this.classes.calendar).addEvent('click', function(cal) { this.toggle(cal); }.pass(cal, this)).injectAfter(cal.el);

			// read in default value
			cal.val = this.read(cal);

			$extend(cal, this.bounds(cal)); // abs bounds of calendar

			$extend(cal, this.values(cal)); // valid days, months, years

			this.rebuild(cal);

			this.calendars.push(cal); // add to cals array		
		}	
	},


	// blocked: returns an array of blocked days for the month / year
	// @param cal (obj)
	// @returns blocked days (array)

	blocked: function(cal) {
		var blocked = [];
		var offset = new Date(cal.year, cal.month, 1).getDay(); // day of the week (offset)
		var last = new Date(cal.year, cal.month + 1, 0).getDate(); // last day of this month
		
		this.options.blocked.each(function(date){
			var values = date.split(' ');
			
			// preparation
			for (var i = 0; i <= 3; i++){ 
				if (!values[i]){ values[i] = (i == 3) ? '' : '*'; } // make sure blocked date contains values for at least d, m and y
				values[i] = values[i].contains(',') ? values[i].split(',') : new Array(values[i]); // split multiple values
				var count = values[i].length - 1;
				for (var j = count; j >= 0; j--){
					if (values[i][j].contains('-')){ // a range
						var val = values[i][j].split('-');
						for (var k = val[0]; k <= val[1]; k++){
							if (!values[i].contains(k)){ values[i].push(k + ''); }
						}
						values[i].splice(j, 1);
					}
				}
			}

			// execution
			if (values[2].contains(cal.year + '') || values[2].contains('*')){
				if (values[1].contains(cal.month + 1 + '') || values[1].contains('*')){
					values[0].each(function(val){ // if blocked value indicates this month / year
						if (val > 0){ blocked.push(val.toInt()); } // add date to blocked array
					});

					if (values[3]){ // optional value for day of week
						for (i = 0; i < last; i++){
								var day = (i + offset) % 7;
	
								if (values[3].contains(day + '')){ 
									blocked.push(i + 1); // add every date that corresponds to the blocked day of the week to the blocked array
								}
						}
					}
				}
			}
		}, this);

		return blocked;
	},


	// bounds: returns the start / end bounds of the calendar
	// @param cal (obj)
	// @returns obj	

	bounds: function(cal) {
		// 1. first we assume the calendar has no bounds (or a thousand years in either direction)
		
		// by default the calendar will accept a millennium in either direction
		var start = new Date(1000, 0, 1); // jan 1, 1000
		var end = new Date(2999, 11, 31); // dec 31, 2999

		// 2. but if the cal is one directional we adjust accordingly
		var date = new Date().getDate() + this.options.direction.toInt();

		if (this.options.direction > 0) {
			start = new Date();
			start.setDate(date + this.options.pad * cal.id);
		}
		
		if (this.options.direction < 0) {
			end = new Date();
			end.setDate(date - this.options.pad * (this.calendars.length - cal.id - 1));
		}

		// 3. then we can further filter the limits by using the pre-existing values in the selects
		cal.els.each(function(el) {	
			if (el.get('tag') == 'select') {		
				if (el.format.test('(y|Y)')) { // search for a year select
					var years = [];

					el.getChildren().each(function(option) { // get options
						var values = this.unformat(option.value, el.format);
	
						if (!years.contains(values[0])) { years.push(values[0]); } // add to years array
					}, this);
	
					years.sort(this.sort);
			
					if (years[0] > start.getFullYear()) { 
						d = new Date(years[0], start.getMonth() + 1, 0); // last day of new month
					
						if (start.getDate() > d.getDate()) { start.setDate(d.getDate()); }
	
						start.setYear(years[0]); 
					}
					
					if (years.getLast() < end.getFullYear()) { 
						d = new Date(years.getLast(), end.getMonth() + 1, 0); // last day of new month
					
						if (end.getDate() > d.getDate()) { end.setDate(d.getDate()); }
	
						end.setYear(years.getLast());
					}		
				}
	
				if (el.format.test('(F|m|M|n)')) { // search for a month select
					var months_start = [];
					var months_end = [];

					el.getChildren().each(function(option) { // get options
						var values = this.unformat(option.value, el.format);
	
						if ($type(values[0]) != 'number' || values[0] == years[0]) { // if it's a year / month combo for curr year, or simply a month select
							if (!months_start.contains(values[1])) { months_start.push(values[1]); } // add to months array
						}
	
						if ($type(values[0]) != 'number' || values[0] == years.getLast()) { // if it's a year / month combo for curr year, or simply a month select
							if (!months_end.contains(values[1])) { months_end.push(values[1]); } // add to months array
						}
					}, this);
	
					months_start.sort(this.sort);
					months_end.sort(this.sort);
					
					if (months_start[0] > start.getMonth()) { 
						d = new Date(start.getFullYear(), months_start[0] + 1, 0); // last day of new month
					
						if (start.getDate() > d.getDate()) { start.setDate(d.getDate()); }
	
						start.setMonth(months_start[0]); 
					}
					
					if (months_end.getLast() < end.getMonth()) { 
						d = new Date(start.getFullYear(), months_end.getLast() + 1, 0); // last day of new month
					
						if (end.getDate() > d.getDate()) { end.setDate(d.getDate()); }
	
						end.setMonth(months_end.getLast());
					}		
				}
			}
		}, this);
		
		return { 'start': start, 'end': end };
	},


	// caption: returns the caption element with header and navigation
	// @param cal (obj)
	// @returns caption (element)

	caption: function(cal) {
		// start by assuming navigation is allowed
		var navigation = {
			prev: { 'month': true, 'year': true },
			next: { 'month': true, 'year': true }
		};
		
		// if we're in an out of bounds year
		if (cal.year == cal.start.getFullYear()) { 
			navigation.prev.year = false; 
			if (cal.month == cal.start.getMonth() && this.options.navigation == 1) { 
				navigation.prev.month = false;
			}		
		}		
		if (cal.year == cal.end.getFullYear()) { 
			navigation.next.year = false; 
			if (cal.month == cal.end.getMonth() && this.options.navigation == 1) { 
				navigation.next.month = false;
			}
		}

		// special case of improved navigation but months array with only 1 month we can disable all month navigation
		if ($type(cal.months) == 'array') {
			if (cal.months.length == 1 && this.options.navigation == 2) {
				navigation.prev.month = navigation.next.month = false;
			}
		}

		var caption = new Element('caption');

		var prev = new Element('a').addClass(this.classes.prev).appendText('\x3c'); // <		
		var next = new Element('a').addClass(this.classes.next).appendText('\x3e'); // >

		if (this.options.navigation == 2) {
			var month = new Element('span').addClass(this.classes.month).injectInside(caption);
			
			if (navigation.prev.month) { prev.clone().addEvent('click', function(cal) { this.navigate(cal, 'm', -1); }.pass(cal, this)).injectInside(month); }
			
			month.adopt(new Element('span').appendText(this.options.months[cal.month]));

			if (navigation.next.month) { next.clone().addEvent('click', function(cal) { this.navigate(cal, 'm', 1); }.pass(cal, this)).injectInside(month); }

			var year = new Element('span').addClass(this.classes.year).injectInside(caption);

			if (navigation.prev.year) { prev.clone().addEvent('click', function(cal) { this.navigate(cal, 'y', -1); }.pass(cal, this)).injectInside(year); }
			
			year.adopt(new Element('span').appendText(cal.year));

			if (navigation.next.year) { next.clone().addEvent('click', function(cal) { this.navigate(cal, 'y', 1); }.pass(cal, this)).injectInside(year); }
		}
		else { // 1 or 0
			if (navigation.prev.month && this.options.navigation) { prev.clone().addEvent('click', function(cal) { this.navigate(cal, 'm', -1); }.pass(cal, this)).injectInside(caption); }

			caption.adopt(new Element('span').addClass(this.classes.month).appendText(this.options.months[cal.month]));
			
			caption.adopt(new Element('span').addClass(this.classes.year).appendText(cal.year));
			
			if (navigation.next.month && this.options.navigation) { next.clone().addEvent('click', function(cal) { this.navigate(cal, 'm', 1); }.pass(cal, this)).injectInside(caption); }

		}

		return caption;
	},


	// changed: run when a select value is changed
	// @param cal (obj)

	changed: function(cal) {
		cal.val = this.read(cal); // update calendar val from inputs	

		$extend(cal, this.values(cal)); // update bounds - based on curr month

		this.rebuild(cal); // rebuild days select

		if (!cal.val) { return; } // in case the same date was clicked the cal has no set date we should exit		

		if (cal.val.getDate() < cal.days[0]) { cal.val.setDate(cal.days[0]); }
		if (cal.val.getDate() > cal.days.getLast()) { cal.val.setDate(cal.days.getLast()); }
		
		cal.els.each(function(el) {	// then we can set the value to the field
			el.value = this.format(cal.val, el.format); 		
		}, this);
		
		this.check(cal); // checks other cals

		this.calendars.each(function(kal) { // update cal graphic if visible
			if (kal.visible) { this.display(kal); }
		}, this);
	},


	// check: checks other calendars to make sure no overlapping values
	// @param cal (obj)

	check: function(cal) {
		this.calendars.each(function(kal, i) {
			if (kal.val) { // if calendar has value set
				var change = false;
			
				var bound;
				if (i < cal.id) { // preceding calendar
					bound = new Date(Date.parse(cal.val));
					
					bound.setDate(bound.getDate() - (this.options.pad * (cal.id - i)));

					if (bound < kal.val) { change = true; }
				}
				if (i > cal.id) { // following calendar
					bound = new Date(Date.parse(cal.val));
					
					bound.setDate(bound.getDate() + (this.options.pad * (i - cal.id)));
					
					if (bound > kal.val) { change = true; }
				}

				if (change) {
					if (kal.start > bound) { bound = kal.start; }
					if (kal.end < bound) { bound = kal.end; }

					kal.month = bound.getMonth();
					kal.year = bound.getFullYear();		

					$extend(kal, this.values(kal));			

					// TODO - IN THE CASE OF SELECT MOVE TO NEAREST VALID VALUE
					// IN THE CASE OF INPUT DISABLE

					// if new date is not valid better unset cal value
					// otherwise it would mean incrementally checking to find the nearest valid date which could be months / years away
					kal.val = kal.days.contains(bound.getDate()) ? bound : null;

					this.write(kal);

					if (kal.visible) { this.display(kal); } // update cal graphic if visible
				}
			}
			else {
				kal.month = cal.month;
				kal.year = cal.year;
			}
		}, this);
	},
	

	// clicked: run when a valid day is clicked in the calendar
	// @param cal (obj)

	clicked: function(td, day, cal) {
		cal.val = (this.value(cal) == day) ? null : new Date(cal.year, cal.month, day); // set new value - if same then disable

		this.write(cal); 

		// ok - in the special case that it's all selects and there's always a date no matter what (at least as far as the form is concerned)
		// we can't let the calendar undo a date selection - it's just not possible!!
		if (!cal.val) { cal.val = this.read(cal); }

		if (cal.val) {
			this.check(cal); // checks other cals						
			this.toggle(cal); // hide cal
		} 
		else { // remove active class and replace with valid
			td.addClass(this.classes.valid);
			td.removeClass(this.classes.active);
		}
	},
	

	// display: create calendar element
	// @param cal (obj)

	display: function(cal) {
		// 1. header and navigation
		this.calendar.empty(); // init div

		this.calendar.className = this.classes.calendar + ' ' + this.options.months[cal.month].toLowerCase();

		var div = new Element('div').injectInside(this.calendar); // a wrapper div to help correct browser css problems with the caption element

		var table = new Element('table').injectInside(div).adopt(this.caption(cal));
				
		// 2. day names		
		var thead = new Element('thead').injectInside(table);

		var tr = new Element('tr').injectInside(thead);
		
		for (var i = 0; i <= 6; i++) {
			var th = this.options.days[(i + this.options.offset) % 7];
			
			tr.adopt(new Element('th', { 'title': th }).appendText(th.substr(0, 1)));
		}

		// 3. day numbers
		var tbody = new Element('tbody').injectInside(table);
		tr = new Element('tr').injectInside(tbody);

		var d = new Date(cal.year, cal.month, 1);
		var offset = ((d.getDay() - this.options.offset) + 7) % 7; // day of the week (offset)
		var last = new Date(cal.year, cal.month + 1, 0).getDate(); // last day of this month
		var prev = new Date(cal.year, cal.month, 0).getDate(); // last day of previous month
		var active = this.value(cal); // active date (if set and within curr month)
		var valid = cal.days; // valid days for curr month
		var inactive = []; // active dates set by other calendars
		var hilited = [];
		this.calendars.each(function(kal, i) {
			if (kal != cal && kal.val) {
				if (cal.year == kal.val.getFullYear() && cal.month == kal.val.getMonth()) { inactive.push(kal.val.getDate()); }

				if (cal.val) {
					for (var day = 1; day <= last; day++) {
						d.setDate(day);
						
						if ((i < cal.id && d > kal.val && d < cal.val) || (i > cal.id && d > cal.val && d < kal.val)) { 
							if (!hilited.contains(day)) { hilited.push(day); }
						}
					}
				}
			}
		}, this);
		d = new Date();
		var today = new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime(); // today obv 
		
		for (var i = 1; i < 43; i++) { // 1 to 42 (6 x 7 or 6 weeks)
			if ((i - 1) % 7 == 0) { tr = new Element('tr').injectInside(tbody); } // each week is it's own table row

			var td = new Element('td').injectInside(tr);
						
			var day = i - offset;
			var date = new Date(cal.year, cal.month, day);
			
			var cls = '';
			
			if (day === active) { cls = this.classes.active; } // active
			else if (inactive.contains(day)) { cls = this.classes.inactive; } // inactive
			else if (valid.contains(day)) { cls = this.classes.valid; } // valid
			else if (day >= 1 && day <= last) { cls = this.classes.invalid; } // invalid

			if (date.getTime() == today) { cls = cls + ' ' + this.classes.today; } // adds class for today

			if (hilited.contains(day)) { cls = cls + ' ' + this.classes.hilite; } // adds class if hilited

			td.addClass(cls);

			if (valid.contains(day)) { // if it's a valid - clickable - day we add interaction
				td.setProperty('title', this.format(date, 'D M jS Y'));
				
				td.addEvents({
					'click': function(td, day, cal) { 
						this.clicked(td, day, cal); 
					}.pass([td, day, cal], this),
					'mouseover': function(td, cls) { 
						td.addClass(cls); 
					}.pass([td, this.classes.hover]),
					'mouseout': function(td, cls) { 
						td.removeClass(cls); 
					}.pass([td, this.classes.hover])
				});
			}

			// pad calendar with last days of prev month and first days of next month
			if (day < 1) { day = prev + day; }
			else if (day > last) { day = day - last; }

			td.appendText(day);
		}
	},


	// element: helper function
	// @param el (string) element id
	// @param f (string) format string
	// @param cal (obj)

	element: function(el, f, cal) {
		if ($type(f) == 'object') { // in the case of multiple inputs per calendar
			for (var i in f) { 
				if (!this.element(i, f[i], cal)) { return false; }		
			}
			
			return true;
		}

		el = $(el);

		if (!el) { return false; }
		
		el.format = f;
		
		if (el.get('tag') == 'select') { // select elements allow the user to manually set the date via select option
			el.addEvent('change', function(cal) { this.changed(cal); }.pass(cal, this));
		}
		else { // input (type text) elements restrict the user to only setting the date via the calendar
		//	el.readOnly = true;
		//	el.addEvent('focus', function(cal) { this.toggle(cal); }.pass(cal, this));
		}

		cal.els.push(el);

		return true;
	},


	// format: formats a date object according to passed in instructions
	// @param date (obj)
	// @param f (string) any combination of punctuation / separators and d, j, D, l, S, m, n, F, M, y, Y
	// @returns string

	format: function(date, format) {
		var str = '';
		
		if (date) {
			var j = date.getDate(); // 1 - 31
      var w = date.getDay(); // 0 - 6
			var l = this.options.days[w]; // Sunday - Saturday
			var n = date.getMonth() + 1; // 1 - 12
			var f = this.options.months[n - 1]; // January - December
			var y = date.getFullYear() + ''; // 19xx - 20xx
			
			for (var i = 0, len = format.length; i < len; i++) {
				var cha = format.charAt(i); // format char
				
				switch(cha) {
					// year cases
					case 'y': // xx - xx
						y = y.substr(2);
					case 'Y': // 19xx - 20xx
						str += y;
						break;
	
					// month cases
					case 'm': // 01 - 12
						if (n < 10) { n = '0' + n; }
					case 'n': // 1 - 12
						str += n;
						break;
	
					case 'M': // Jan - Dec
						f = f.substr(0, 3);
					case 'F': // January - December
						str += f;
						break;
	
					// day cases
					case 'd': // 01 - 31
						if (j < 10) { j = '0' + j; }
					case 'j': // 1 - 31
						str += j;
						break;
	
					case 'D': // Sun - Sat
						l = l.substr(0, 3);
					case 'l': // Sunday - Saturday
						str += l;
						break;
	
					case 'N': // 1 - 7
						w += 1;
					case 'w': // 0 - 6
						str += w;
						break;

					case 'S': // st, nd, rd or th (works well with j)
						if (j % 10 == 1 && j != '11') { str += 'st'; }
						else if (j % 10 == 2 && j != '12') { str += 'nd'; }
						else if (j % 10 == 3 && j != '13') { str += 'rd'; }
						else { str += 'th'; }
						break;
	
					default:
						str += cha;
				}
			}
		}

	  return str; //  return format with values replaced
	},


	// navigate: calendar navigation
	// @param cal (obj)
	// @param type (str) m or y for month or year
	// @param n (int) + or - for next or prev

	navigate: function(cal, type, n) {
		switch (type) {
			case 'm': // month
					if ($type(cal.months) == 'array') {
						var i = cal.months.indexOf(cal.month) + n; // index of current month
						
						if (i < 0 || i == cal.months.length) { // out of range
							if (this.options.navigation == 1) { // if type 1 nav we'll need to increment the year
								this.navigate(cal, 'y', n);		
							}
		
							i = (i < 0) ? cal.months.length - 1 : 0;
						}

						cal.month = cal.months[i];
					}
					else { 
						var i = cal.month + n;
		
						if (i < 0 || i == 12) {
							if (this.options.navigation == 1) {
								this.navigate(cal, 'y', n);	
							}
		
							i = (i < 0) ? 11 : 0;
						}
						
						cal.month = i;
					}		
					break;

				case 'y': // year
					if ($type(cal.years) == 'array') {
						var i = cal.years.indexOf(cal.year) + n;

						cal.year = cal.years[i]; 
					}
					else { 
						cal.year += n;
					}						
					break;		
		}

		$extend(cal, this.values(cal));

		if ($type(cal.months) == 'array') { // if the calendar has a months select
			var i = cal.months.indexOf(cal.month); // and make sure the curr months exists for the new year

			if (i < 0) { cal.month = cal.months[0]; } // otherwise we'll reset the month
		}


		this.display(cal);
	},


	// read: compiles cal value based on array of inputs passed in
	// @param cal (obj)
	// @returns date (obj) or (null)

	read: function(cal) {
		var arr = [null, null, null];

		cal.els.each(function(el) {
			// returns an array which may contain empty values
			var values = this.unformat(el.value, el.format);
			
			values.each(function(val, i) { 
				if ($type(val) == 'number') { arr[i] = val; }
			}); 
		}, this);

		// we can update the cals month and year values
		if ($type(arr[0]) == 'number') { cal.year = arr[0]; }
		if ($type(arr[1]) == 'number') { cal.month = arr[1]; }

		var val = null;

		if (arr.every(function(i) { return $type(i) == 'number'; })) { // if valid date
			var last = new Date(arr[0], arr[1] + 1, 0).getDate(); // last day of month

			if (arr[2] > last) { arr[2] = last; } // make sure we stay within the month (ex in case default day of select is 31 and month is feb)
			
			val = new Date(arr[0], arr[1], arr[2]);
		}

		return (cal.val == val) ? null : val; // if new date matches old return null (same date clicked twice = disable)
	},

	
	// rebuild: rebuilds days + months selects
	// @param cal (obj)

	rebuild: function(cal) {
		cal.els.each(function(el) {			
			/*
			if (el.get('tag') == 'select' && el.format.test('^(F|m|M|n)$')) { // special case for months-only select
				if (!cal.options) { cal.options = el.clone(); } // clone a copy of months select
			
				var val = (cal.val) ? cal.val.getMonth() : el.value.toInt();

				el.empty(); // initialize select

				cal.months.each(function(month) {
					// create an option element
					var option = new Element('option', {
						'selected': (val == month),
						'value': this.format(new Date(1, month, 1), el.format);
					}).appendText(day).injectInside(el);
				}, this);
			}
			*/

			if (el.get('tag') == 'select' && el.format.test('^(d|j)$')) { // special case for days-only select
				var d = this.value(cal);

				if (!d) { d = el.value.toInt(); } // if the calendar doesn't have a set value, try to use value from select

				el.empty(); // initialize select

				cal.days.each(function(day) {
					// create an option element
					var option = new Element('option', {
						'selected': (d == day),
						'value': ((el.format == 'd' && day < 10) ? '0' + day : day)
					}).appendText(day).injectInside(el);
				}, this);
			}
		}, this); 
	},


	// sort: helper function for numerical sorting

	sort: function(a, b) {
		return a - b;
	},


	// toggle: show / hide calendar 
	// @param cal (obj)

	toggle: function(cal) {
		document.removeEvent('mousedown', this.fn); // always remove the current mousedown script first
			
		if (cal.visible) { // simply hide curr cal						
			cal.visible = false;
			cal.button.removeClass(this.classes.active); // active
			
			this.fx.start('opacity', 1, 0);
		}
		else { // otherwise show (may have to hide others)
			// hide cal on out-of-bounds click
			this.fn = function(e, cal) { 
				var e = new Event(e);
			
				var el = e.target;

				var stop = false;
				
				while (el != document.body && el.nodeType == 1) {
					if (el == this.calendar) { stop = true; }
					this.calendars.each(function(kal) {
						if (kal.button == el || kal.els.contains(el)) { stop = true; }
					});

					if (stop) { 
						e.stop();
						return false;
					}
					else { el = el.parentNode; }
				}
				
				this.toggle(cal);
			}.create({ 'arguments': cal, 'bind': this, 'event': true });				

			document.addEvent('mousedown', this.fn);

			this.calendars.each(function(kal) {
				if (kal == cal) {
					kal.visible = true;
					kal.button.addClass(this.classes.active); // css c-icon-active
				}
				else {
					kal.visible = false;
					kal.button.removeClass(this.classes.active); // css c-icon-active
				}
			}, this);
			
			var size = window.getScrollSize();
			
			var coord = cal.button.getCoordinates();

			var x = coord.right + this.options.tweak.x;
			var y = coord.top + this.options.tweak.y;

			// make sure the calendar doesn't open off screen
			if (!this.calendar.coord) { this.calendar.coord = this.calendar.getCoordinates(); }

			if (x + this.calendar.coord.width > size.x) { x -= (x + this.calendar.coord.width - size.x); }
			if (y + this.calendar.coord.height > size.y) { y -= (y + this.calendar.coord.height - size.y); }
			
			this.calendar.setStyles({ left: x + 'px', top: y + 'px' });

			if (window.ie6) { 
				this.iframe.setStyles({ height: this.calendar.coord.height + 'px', left: x + 'px', top: y + 'px', width: this.calendar.coord.width + 'px' }); 
			}

			this.display(cal);
			
			this.fx.start('opacity', 0, 1);
		}
	},


	// unformat: takes a value from an input and parses the d, m and y elements
	// @param val (string)
	// @param f (string) any combination of punctuation / separators and d, j, D, l, S, m, n, F, M, y, Y
	// @returns array
	
	unformat: function(val, f) {
		f = f.escapeRegExp();
		
		var re = {
			d: '([0-9]{2})',
			j: '([0-9]{1,2})',
			D: '(' + this.options.days.map(function(day) { return day.substr(0, 3); }).join('|') + ')',					
			l: '(' + this.options.days.join('|') + ')',
			S: '(st|nd|rd|th)',
			F: '(' + this.options.months.join('|') + ')',
			m: '([0-9]{2})',
			M: '(' + this.options.months.map(function(month) { return month.substr(0, 3); }).join('|') + ')',					
			n: '([0-9]{1,2})',
			Y: '([0-9]{4})',
			y: '([0-9]{2})'
		}

		var arr = []; // array of indexes

		var g = '';

		// convert our format string to regexp
		for (var i = 0; i < f.length; i++) {
			var c = f.charAt(i);
			
			if (re[c]) {
				arr.push(c);

				g += re[c];
			}
			else {
				g += c;
			}
		}

		// match against date
		var matches = val.match('^' + g + '$');
		
		var dates = new Array(3);

		if (matches) {
			matches = matches.slice(1); // remove first match which is the date

			arr.each(function(c, i) {
				i = matches[i];
				
				switch(c) {
					// year cases
					case 'y':
						i = '19' + i; // 2 digit year assumes 19th century (same as JS)
					case 'Y':
						dates[0] = i.toInt();
						break;

					// month cases
					case 'F':
						i = i.substr(0, 3);
					case 'M':
						i = this.options.months.map(function(month) { return month.substr(0, 3); }).indexOf(i) + 1;
					case 'm':
					case 'n':
						dates[1] = i.toInt() - 1;
						break;

					// day cases
					case 'd':
					case 'j':
						dates[2] = i.toInt();
						break;
				}
			}, this);
		}

		return dates;
	},


	// value: returns day value of calendar if set
	// @param cal (obj)
	// @returns day (int) or null

	value: function(cal) {
		var day = null;

		if (cal.val) {
			if (cal.year == cal.val.getFullYear() && cal.month == cal.val.getMonth()) { day = cal.val.getDate(); }
		}

		return day;
	},
	

	// values: returns the years, months (for curr year) and days (for curr month and year) for the calendar
	// @param cal (obj)
	// @returns obj	

	values: function(cal) {
		var years, months, days;

		cal.els.each(function(el) {	
			if (el.get('tag') == 'select') {		
				if (el.format.test('(y|Y)')) { // search for a year select
					years = [];

					el.getChildren().each(function(option) { // get options
						var values = this.unformat(option.value, el.format);
	
						if (!years.contains(values[0])) { years.push(values[0]); } // add to years array
					}, this);
	
					years.sort(this.sort);
				}
	
				if (el.format.test('(F|m|M|n)')) { // search for a month select
					months = []; // 0 - 11 should be

					el.getChildren().each(function(option) { // get options
						var values = this.unformat(option.value, el.format);
	
						if ($type(values[0]) != 'number' || values[0] == cal.year) { // if it's a year / month combo for curr year, or simply a month select
							if (!months.contains(values[1])) { months.push(values[1]); } // add to months array
						}
					}, this);
	
					months.sort(this.sort);
				}
				
				if (el.format.test('(d|j)') && !el.format.test('^(d|j)$')) { // search for a day select, but NOT a days only select
					days = []; // 1 - 31
					
					el.getChildren().each(function(option) { // get options
						var values = this.unformat(option.value, el.format);

						// in the special case of days we dont want the value if its a days only select
						// otherwise that will screw up the options rebuilding
						// we will take the values if they are exact dates though
						if (values[0] == cal.year && values[1] == cal.month) {
							if (!days.contains(values[2])) { days.push(values[2]); } // add to days array
						}
					}, this);
				}
			}
		}, this);
		
		// we start with what would be the first and last days were there no restrictions
		var first = 1;
		var last = new Date(cal.year, cal.month + 1, 0).getDate(); // last day of the month
		
		// if we're in an out of bounds year
		if (cal.year == cal.start.getFullYear()) {
			// in the special case of improved navigation but no months array, we'll need to construct one
			if (months == null && this.options.navigation == 2) {
				months = [];
				
				for (var i = 0; i < 12; i ++) { 
					if (i >= cal.start.getMonth()) { months.push(i); } 
				}
			}
			
			// if we're in an out of bounds month
			if (cal.month == cal.start.getMonth()) { 
				first = cal.start.getDate(); // first day equals day of bound
			}
		}		
		if (cal.year == cal.end.getFullYear()) {
			// in the special case of improved navigation but no months array, we'll need to construct one
			if (months == null && this.options.navigation == 2) {
				months = [];
				
				for (var i = 0; i < 12; i ++) { 
					if (i <= cal.end.getMonth()) { months.push(i); } 
				}
			}

			if (cal.month == cal.end.getMonth()) { 
				last = cal.end.getDate(); // last day equals day of bound
			}
		}

		// let's get our invalid days
		var blocked = this.blocked(cal);

		// finally we can prepare all the valid days in a neat little array
		if ($type(days) == 'array') { // somewhere there was a days select
			days = days.filter(function(day) {
				if (day >= first && day <= last && !blocked.contains(day)) { return day; }
			});
		}
		else { // no days select we'll need to construct a valid days array
			days = [];
			
			for (var i = first; i <= last; i++) { 
				if (!blocked.contains(i)) { days.push(i); }
			}
		}		

		days.sort(this.sort); // sorting our days will give us first and last of month

		return { 'days': days, 'months': months, 'years': years };
	},


	// write: sets calendars value to form elements
	// @param cal (obj)

	write: function(cal) {
		this.rebuild(cal);	 // in the case of options, we'll need to make sure we have the correct number of days available
		
		cal.els.each(function(el) {	// then we can set the value to the field
			el.value = this.format(cal.val, el.format); 		
		}, this);
	}
});

Calendar.implement(new Events, new Options);


/* roar */
/**
 * Roar - Notifications
 *
 * Inspired by Growl
 *
 * @version		1.0.1
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */

var Roar = new Class({

	Implements: [Options, Events, Chain],

	options: {
		duration: 3000,
		position: 'upperLeft',
		container: null,
		bodyFx: null,
		itemFx: null,
		margin: {x: 10, y: 10},
		offset: 10,
		className: 'roar',
		onShow: $empty,
		onHide: $empty,
		onRender: $empty
	},

	initialize: function(options) {
		this.setOptions(options);
		this.items = [];
		this.container = $(this.options.container) || document;
	},

	alert: function(title, message, options) {
		var params = Array.link(arguments, {title: String.type, message: String.type, options: Object.type});
		var items = [new Element('h3', {'html': $pick(params.title, '')})];
		if (params.message) items.push(new Element('p', {'html': params.message}));
		return this.inject(items, params.options);
	},

	inject: function(elements, options) {
		if (!this.body) this.render();
		options = options || {};

		var offset = [-this.options.offset, 0];
		var last = this.items.getLast();
		if (last) {
			offset[0] = last.retrieve('roar:offset');
			offset[1] = offset[0] + last.offsetHeight + this.options.offset;
		}
		var to = {'opacity': 1};
		to[this.align.y] = offset;

		var item = new Element('div', {
			'class': this.options.className,
			'opacity': 0
		}).adopt(
			new Element('div', {
				'class': 'roar-bg',
				'opacity': 0.9
			}),
			elements
		);

		item.setStyle(this.align.x, 0).store('roar:offset', offset[1]).set('morph', $merge({
			unit: 'px',
			link: 'cancel',
			onStart: Chain.prototype.clearChain,
			transition: Fx.Transitions.Back.easeOut
		}, this.options.itemFx));

		var remove = this.remove.create({
			bind: this,
			arguments: [item],
			delay: 10
		});
		this.items.push(item.addEvent('click', remove));

		if (this.options.duration) {
			var over = false;
			var trigger = (function() {
				trigger = null;
				if (!over) remove();
			}).delay(this.options.duration);
			item.addEvents({
				mouseover: function() {
					over = true;
				},
				mouseout: function() {
					over = false;
					if (!trigger) remove();
				}
			});
		}
		item.inject(this.body).morph(to);
		return this.fireEvent('onShow', [item, this.items.length]);
	},

	remove: function(item) {
		var index = this.items.indexOf(item);
		if (index == -1) return this;
		this.items.splice(index, 1);
		item.removeEvents();
		var to = {opacity: 0};
		to[this.align.y] = item.getStyle(this.align.y).toInt() - item.offsetHeight - this.options.offset;
		item.morph(to).get('morph').chain(item.destroy.bind(item));
		return this.fireEvent('onHide', [item, this.items.length]).callChain(item);
	},

	empty: function() {
		while (this.items.length) this.remove(this.items[0]);
		return this;
	},

	render: function() {
		this.position = this.options.position;
		if ($type(this.position) == 'string') {
			var position = {x: 'center', y: 'center'};
			this.align = {x: 'left', y: 'top'};
			if ((/left|west/i).test(this.position)) position.x = 'left';
			else if ((/right|east/i).test(this.position)) this.align.x = position.x = 'right';
			if ((/upper|top|north/i).test(this.position)) position.y = 'top';
			else if ((/bottom|lower|south/i).test(this.position)) this.align.y = position.y = 'bottom';
			this.position = position;
		}
		this.body = new Element('div', {'class': 'roar-body'}).inject(document.body);
		if (Browser.Engine.trident4) this.body.addClass('roar-body-ugly');
		this.moveTo = this.body.setStyles.bind(this.body);
		this.reposition();
		if (this.options.bodyFx) {
			var morph = new Fx.Morph(this.body, $merge({
				unit: 'px',
				chain: 'cancel',
				transition: Fx.Transitions.Circ.easeOut
			}, this.options.bodyFx));
			this.moveTo = morph.start.bind(morph);
		}
		var repos = this.reposition.bind(this);
		window.addEvents({
			scroll: repos,
			resize: repos
		});
		this.fireEvent('onRender', this.body);
	},

	reposition: function() {
		var max = document.getCoordinates(), scroll = document.getScroll(), margin = this.options.margin;
		max.left += scroll.x;
		max.right += scroll.x;
		max.top += scroll.y;
		max.bottom += scroll.y;
		var rel = ($type(this.container) == 'element') ? this.container.getCoordinates() : max;
		this.moveTo({
			left: (this.position.x == 'right')
				? (Math.min(rel.right, max.right) - margin.x)
				: (Math.max(rel.left, max.left) + margin.x),
			top: (this.position.y == 'bottom')
				? (Math.min(rel.bottom, max.bottom) - margin.y)
				: (Math.max(rel.top, max.top) + margin.y)
		});
	}

});

/* noobslide*/
//var noobSlide=new Class({initialize:function(a){this.items=a.items;this.mode=a.mode||'horizontal';this.modes={horizontal:['left','width'],vertical:['top','height']};this.size=a.size||240;this.box=a.box.setStyle(this.modes[this.mode][1],(this.size*this.items.length)+'px');this.button_event=a.button_event||'click';this.handle_event=a.handle_event||'click';this.onWalk=a.onWalk||null;this.currentIndex=null;this.previousIndex=null;this.nextIndex=null;this.interval=a.interval||5000;this.autoPlay=a.autoPlay||false;this._play=null;this.handles=a.handles||null;if(this.handles){this.addHandleButtons(this.handles)}this.buttons={previous:[],next:[],play:[],playback:[],stop:[]};if(a.addButtons){for(var b in a.addButtons){this.addActionButtons(b,$type(a.addButtons[b])=='array'?a.addButtons[b]:[a.addButtons[b]])}}this.fx=new Fx.Tween(this.box,$extend((a.fxOptions||{duration:500,wait:false}),{property:this.modes[this.mode][0]}));this.walk((a.startItem||0),true,true)},addHandleButtons:function(a){for(var i=0;i<a.length;i++){a[i].addEvent(this.handle_event,this.walk.bind(this,[i,true]))}},addActionButtons:function(a,b){for(var i=0;i<b.length;i++){switch(a){case'previous':b[i].addEvent(this.button_event,this.previous.bind(this,[true]));break;case'next':b[i].addEvent(this.button_event,this.next.bind(this,[true]));break;case'play':b[i].addEvent(this.button_event,this.play.bind(this,[this.interval,'next',false]));break;case'playback':b[i].addEvent(this.button_event,this.play.bind(this,[this.interval,'previous',false]));break;case'stop':b[i].addEvent(this.button_event,this.stop.bind(this));break}this.buttons[a].push(b[i])}},previous:function(a){this.walk((this.currentIndex>0?this.currentIndex-1:this.items.length-1),a)},next:function(a){this.walk((this.currentIndex<this.items.length-1?this.currentIndex+1:0),a)},play:function(a,b,c){this.stop();if(!c){this[b](false)}this._play=this[b].periodical(a,this,[false])},stop:function(){$clear(this._play)},walk:function(a,b,c){if(a!=this.currentIndex){this.currentIndex=a;this.previousIndex=this.currentIndex+(this.currentIndex>0?-1:this.items.length-1);this.nextIndex=this.currentIndex+(this.currentIndex<this.items.length-1?1:1-this.items.length);if(b){this.stop()}if(c){this.fx.cancel().set((this.size*-this.currentIndex)+'px')}else{this.fx.start(this.size*-this.currentIndex)}if(b&&this.autoPlay){this.play(this.interval,'next',true)}if(this.onWalk){this.onWalk((this.items[this.currentIndex]||null),(this.handles&&this.handles[this.currentIndex]?this.handles[this.currentIndex]:null))}}}});
/*
Author:
	luistar15, <leo020588 [at] gmail.com>
License:
	MIT License
 
Class
	noobSlide (rev.19-06-08)

Arguments:
	Parameters - see Parameters below

Parameters:
	box: dom element | required
	items: dom collection | required
	size: int | item size (px) | default: 240
	mode: string | 'horizontal', 'vertical' | default: 'horizontal'
	addButtons:{
		previous: single dom element OR dom collection| default: null
		next:  single dom element OR dom collection | default: null
		play:  single dom element OR dom collection | default: null
		playback:  single dom element OR dom collection | default: null
		stop:  single dom element OR dom collection | default: null
	}
	button_event: string | event type | default: 'click'
	handles: dom collection | default: null
	handle_event: string | event type| default: 'click'
	fxOptions: object | Fx.Tween options | default: {duration:500,wait:false}
	interval: int | for periodical | default: 5000
	autoPlay: boolean | default: false
	onWalk: event | pass arguments: currentItem, currentHandle | default: null
	startItem: int | default: 0

Properties:
	box: dom element
	items: dom collection
	size: int
	mode: string
	buttons: object
	button_event: string
	handles: dom collection
	handle_event: string
	previousIndex: int
	nextIndex: int
	fx: Fx.Tween instance
	interval: int
	autoPlay: boolean
	onWalk: function
	
Methods:
	previous(manual): walk to previous item
		manual: bolean | default:false
	next(manual): walk to next item
		manual: bolean | default:false
	play (interval,direction,wait): auto walk items
		interval: int | required
		direction: string | "previous" or "next" | required
		wait: boolean | required
	stop(): stop auto walk
	walk(item,manual,noFx): walk to item
		item: int | required
		manual: bolean | default:false
		noFx: boolean | default:false
	addHandleButtons(handles):
		handles: dom collection | required
	addActionButtons(action,buttons):
		action: string | "previous", "next", "play", "playback", "stop" | required
		buttons: dom collection | required

Requires:
	mootools 1.2 core
*/
var noobSlide = new Class({

	initialize: function(params){
		this.items = params.items;
		this.mode = params.mode || 'horizontal';
		this.modes = {horizontal:['left','width'], vertical:['top','height']};
		this.size = params.size || 240;
		this.box = params.box.setStyle(this.modes[this.mode][1],(this.size*this.items.length)+'px');
		this.button_event = params.button_event || 'click';
		this.handle_event = params.handle_event || 'click';
		this.onWalk = params.onWalk || null;
		this.currentIndex = null;
		this.previousIndex = null;
		this.nextIndex = null;
		this.interval = params.interval || 5000;
		this.autoPlay = params.autoPlay || false;
		this._play = null;
		this.handles = params.handles || null;
		if(this.handles){
			this.addHandleButtons(this.handles);
		}
		this.buttons = {
			previous: [],
			next: [],
			play: [],
			playback: [],
			stop: []
		};
		if(params.addButtons){
			for(var action in params.addButtons){
				this.addActionButtons(action, $type(params.addButtons[action])=='array' ? params.addButtons[action] : [params.addButtons[action]]);
			}
		}
		this.fx = new Fx.Tween(this.box,$extend((params.fxOptions||{duration:500,wait:false}),{property:this.modes[this.mode][0]}));
		this.walk((params.startItem||0),true,true);
	},

	addHandleButtons: function(handles){
		for(var i=0;i<handles.length;i++){
			handles[i].addEvent(this.handle_event,this.walk.bind(this,i));
		}
	},

	addActionButtons: function(action,buttons){
		for(var i=0; i<buttons.length; i++){
			switch(action){
				case 'previous': buttons[i].addEvent(this.button_event,this.previous.bind(this,[true])); break;
				case 'next': buttons[i].addEvent(this.button_event,this.next.bind(this,[true])); break;
				case 'play': buttons[i].addEvent(this.button_event,this.play.bind(this,[this.interval,'next',false])); break;
				case 'playback': buttons[i].addEvent(this.button_event,this.play.bind(this,[this.interval,'previous',false])); break;
				case 'stop': buttons[i].addEvent(this.button_event,this.stop.bind(this)); break;
			}
			this.buttons[action].push(buttons[i]);
		}
	},

	previous: function(manual){
		this.walk((this.currentIndex>0 ? this.currentIndex-1 : this.items.length-1),manual);
	},

	next: function(manual){
		this.walk((this.currentIndex<this.items.length-1 ? this.currentIndex+1 : 0),manual);
	},

	play: function(interval,direction,wait){
		this.stop();
		if(!wait){
			this[direction](false);
		}
		this._play = this[direction].periodical(interval,this,[false]);
	},

	stop: function(){
		$clear(this._play);
	},

	walk: function(item,manual,noFx){
		if(item!=this.currentIndex){
			this.currentIndex=item;
			this.previousIndex = this.currentIndex + (this.currentIndex>0 ? -1 : this.items.length-1);
			this.nextIndex = this.currentIndex + (this.currentIndex<this.items.length-1 ? 1 : 1-this.items.length);
			if(manual){
				this.stop();
			}
			if(noFx){
				this.fx.cancel().set((this.size*-this.currentIndex)+'px');
			}else{
				this.fx.start(this.size*-this.currentIndex);
			}
			if(manual && this.autoPlay){
				this.play(this.interval,'next',true);
			}
			if(this.onWalk){
				this.onWalk((this.items[this.currentIndex] || null), (this.handles && this.handles[this.currentIndex] ? this.handles[this.currentIndex] : null));
			}
		}
	}
	
});
/* sexy alert box*/
/*
Script: SexyAlertBox.js
  http://www.coders.me/web-js-html/javascript/sexy-alert-box
  
Version:
  1.1

Author: 
  Eduardo D. Sada 
  http://www.coders.me

License:
	MIT license.

Based in <PBBAcpBox> (Pokemon_JOJO, <http://www.mibhouse.org/pokemon_jojo>)

Features:
  Mootools 1.2 100% Compatible
  Chain Implemented (Cola de mensajes)
  More styles (info, error, alert, prompt, confirm)

*/

/*
Class: SexyAlertBox
	Clone class of original javascript function : 'alert', 'confirm' and 'prompt'

Arguments:
	options - see Options below

Options:
	name - name of the box for use different style
	zIndex - integer, zindex of the box
	onReturn - return value when box is closed. defaults to false
	onReturnFunction - a function to fire when return box value
	BoxStyles - stylesheets of the box
	OverlayStyles - stylesheets of overlay
	showDuration - duration of the box transition when showing (defaults to 200 ms)
	showEffect - transitions, to be used when showing
	closeDuration - Duration of the box transition when closing (defaults to 100 ms)
	closeEffect - transitions, to be used when closing
	onShowStart - a function to fire when box start to showing
	onCloseStart - a function to fire when box start to closing
	onShowComplete - a function to fire when box done showing
	onCloseComplete - a function to fire when box done closing
*/

var SexyAlertBox = new Class({
  Implements: [Chain,Options,Events],

	getOptions: function(){
		return {
			name: 'SexyAlertBox',
			zIndex: 65555,
			onReturn: false,
			onReturnFunction : $empty,
			BoxStyles: {
				'width': 500
			},
			OverlayStyles: {
				'background-color': '#000',
				'opacity': 0.7
			},
			showDuration: 200,
			showEffect: Fx.Transitions.linear,
			closeDuration: 100,
			closeEffect: Fx.Transitions.linear,
			moveDuration: 500,
			moveEffect: Fx.Transitions.Back.easeOut,
			onShowStart : $empty,
			onShowComplete : $empty,
			onCloseStart : $empty,
			onCloseComplete : function(properties) {
				this.options.onReturnFunction(this.options.onReturn);
			}.bind(this)
		};
	},

	initialize: function(options){
    this.i=0;
    
		this.setOptions(this.getOptions(),options);

		this.Overlay = new Element('div', {
			'id': 'BoxOverlay',
			'styles': {
				'display': 'none',
				'z-index': this.options.zIndex,
				'position': 'absolute',
				'top': '0',
				'left': '0',
				'background-color': this.options.OverlayStyles['background-color'],
				'opacity': 0,
				'height': window.getScrollHeight() + 'px',
				'width': window.getScrollWidth() + 'px'
			}
		});

		this.Content = new Element('div', {
			'id': this.options.name + '-BoxContenedor'
		});

    this.Contenedor = new Element('div', {
      'id': this.options.name + '-BoxContent'
    }).adopt(this.Content);

		this.InBox = new Element('div', {
			'id': this.options.name + '-InBox'
		}).adopt(this.Contenedor);
		
		this.Box = new Element('div', {
			'id': this.options.name + '-Box',
			'styles': {
				'display': 'none',
				'z-index': this.options.zIndex + 2,
				'position': 'absolute',
				'top': '0',
				'left': '0',
				'width': this.options.BoxStyles['width'] + 'px'
			}
		}).adopt(this.InBox);

    this.Overlay.injectInside(document.body);
    this.Box.injectInside(document.body);

    this.preloadImages();
    
		window.addEvent('resize', function() {
			this.resizeOverlay();
		}.bind(this));
		
		window.addEvent('scroll', this.replaceBox.bind(this));
	},

	resizeOverlay: function() {
			if(this.options.display == 1) {
				this.Overlay.setStyles({
					'height': window.getScrollHeight() + 'px',
					'width': window.getScrollWidth() + 'px'
				});
				this.replaceBox();
			}

	},
  preloadImages: function() {
    var img = new Array(2);
    img[0] = new Image();img[1] = new Image();img[2] = new Image();
  //  img[0].src = this.Box.getStyle('background-image').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
   // img[1].src = this.InBox.getStyle('background-image').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
    //img[2].src = this.Contenedor.getStyle('background-image').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
  },


	/*
	Property: display
		Show or close box
		
	Argument:
		option - integer, 1 to Show box and 0 to close box (with a transition).
	*/	
	display: function(option){
		if(this.Transition)
			this.Transition.cancel();				

		// Show Box	
		if(this.options.display == 0 && option != 0 || option == 1) {

      if(Browser.Engine.trident4)
        $$('select', 'object', 'embed').each(function(node){ node.style.visibility = 'hidden'; });

			this.Overlay.setStyle('display', 'block');
			this.options.display = 1;
			this.fireEvent('onShowStart', [this.Overlay]);

			this.Transition = new Fx.Tween(this.Overlay,
				{
          property: 'opacity',
					duration: this.options.showDuration,
					transition: this.options.showEffect,
					onComplete: function() {

						sizes = window.getSize();
						scrollito = window.getScroll();
						this.Box.setStyles({
							'display': 'block',
							'left': (scrollito.x + (sizes.x - this.options.BoxStyles['width']) / 2).toInt()
						});

						this.replaceBox();
						this.fireEvent('onShowComplete', [this.Overlay]);

					}.bind(this)
				}
			).start(this.options.OverlayStyles['opacity']);

		}
		// Close Box
		else {

      if(Browser.Engine.trident4)
        $$('select', 'object', 'embed').each(function(node){ node.style.visibility = 'visible'; });

      this.queue.delay(500,this);

			this.Box.setStyles({
				'display': 'none',
				'top': 0
			});
			this.Content.empty();
			this.options.display = 0;

			this.fireEvent('onCloseStart', [this.Overlay]);

      if(this.i==1) {
        this.Transition = new Fx.Tween(this.Overlay,
          {
            property: 'opacity',
            duration: this.options.closeDuration,
            transition: this.options.closeEffect,
            onComplete: function() {
                this.fireEvent('onCloseComplete', [this.Overlay]);
            }.bind(this)
          }
        ).start(0);
      }

		}			
	},

	/*
	Property: replaceBox
		Move Box in screen center when brower is resize or scroll
	*/
	replaceBox: function() {
		if(this.options.display == 1) {
			sizes = window.getSize();
      scrollito = window.getScroll();

			if(this.MoveBox)
				this.MoveBox.cancel();
			
			this.MoveBox = new Fx.Morph(this.Box, {
				duration: this.options.moveDuration,
				transition: this.options.moveEffect
			}).start({

				'left': (scrollito.x + (sizes.x - this.options.BoxStyles['width']) / 2).toInt(),
				'top': (scrollito.y + (sizes.y - this.Box.offsetHeight) / 2).toInt()

			});

		}
	},


	queue: function() {
		this.i--;
		this.callChain();
	},


	/*
	Property: messageBox
		Core system for show all type of box
		
	Argument:
		type - string, 'alert' or 'confirm' or 'prompt'
		message - text to show in the box
		properties - see Options below
		input - text value of default 'input' when prompt
		
	Options:
		textBoxBtnOk - text value of 'Ok' button
		textBoxBtnCancel - text value of 'Cancel' button
		onComplete - a function to fire when return box value
	*/	
	messageBox: function(type, message, properties, input) {

		this.chain(function () {

      properties = $extend({
        'textBoxBtnOk': 'Tak',
        'textBoxBtnCancel': 'Nie',
        'textBoxInputPrompt': null,
        'password': false,
        'onComplete': $empty
      }, properties || {});


      this.options.onReturnFunction = properties.onComplete;

      this.ContenedorBotones = new Element('div', {
        'id': this.options.name + '-Buttons'
      });
      


      if(type == 'alert' || type == 'info' || type == 'error')
      {
          this.AlertBtnOk = new Element('input', {
            'id': 'BoxAlertBtnOk',
            'type': 'submit',
            'value': properties.textBoxBtnOk,
            'styles': {
              'width': '70px'
            }
          });
          
          this.AlertBtnOk.addEvent('click', function() {
            this.options.onReturn = true;
            this.display(0);
          }.bind(this));
        
          if(type == 'alert')
            this.clase = 'BoxAlert';
          else if(type == 'error')
            this.clase = 'BoxError';
          else if(type == 'info')
            this.clase = 'BoxInfo';
        
          this.Content.setProperty('class',this.clase).set('html',message);

          this.AlertBtnOk.injectInside(this.ContenedorBotones);

          this.ContenedorBotones.injectInside(this.Content);
          this.display(1);
      }
      else if(type == 'confirm')
      {
          this.ConfirmBtnOk = new Element('input', {
            'id': 'BoxConfirmBtnOk',
            'type': 'submit',
            'value': properties.textBoxBtnOk,
            'styles': {
              'width': '70px'
            }
          });

          this.ConfirmBtnCancel = new Element('input', {
            'id': 'BoxConfirmBtnCancel',
            'type': 'submit',
            'value': properties.textBoxBtnCancel,
            'styles': {
              'width': '70px'
            }
          });

          this.ConfirmBtnOk.addEvent('click', function() {
            this.options.onReturn = true;
            this.display(0);
          }.bind(this));

          this.ConfirmBtnCancel.addEvent('click', function() {
            this.options.onReturn = false;
            this.display(0);
          }.bind(this));

          this.Content.setProperty('class','BoxConfirm').set('html',message);

          this.ConfirmBtnOk.injectInside(this.ContenedorBotones);
          this.ConfirmBtnCancel.injectInside(this.ContenedorBotones);
          
          this.ContenedorBotones.injectInside(this.Content);
          this.display(1);
      }
      else if(type == 'prompt')
      {
          this.PromptBtnOk = new Element('input', {
            'id': 'BoxPromptBtnOk',
            'type': 'submit',
            'value': properties.textBoxBtnOk,
            'styles': {
              'width': '70px'
            }
          });

          this.PromptBtnCancel = new Element('input', {
            'id': 'BoxPromptBtnCancel',
            'type': 'submit',
            'value': properties.textBoxBtnCancel,
            'styles': {
              'width': '70px'
            }
          });
          
          type = properties.password ? 'password' : 'text';
          this.PromptInput = new Element('input', {
            'id': 'BoxPromptInput',
            'type': type,
            'value': input,
            'styles': {
              'width': '250px'
            }
          });

          this.PromptBtnOk.addEvent('click', function() {
            this.options.onReturn = this.PromptInput.value;
            this.display(0);
          }.bind(this));

          this.PromptBtnCancel.addEvent('click', function() {
            this.options.onReturn = false;
            this.display(0);
          }.bind(this));

          this.Content.setProperty('class','BoxPrompt').set('html',message + '<br />');
          this.PromptInput.injectInside(this.Content);
          var br=new Element('br').injectInside(this.Content);
          this.PromptBtnOk.injectInside(this.ContenedorBotones);
          this.PromptBtnCancel.injectInside(this.ContenedorBotones);


          this.ContenedorBotones.injectInside(this.Content);

          this.display(1);
      }
      else
      {
          this.options.onReturn = false;
          this.display(0);		
      }

    });

		this.i++;

		if(this.i==1) this.callChain();

	},

	/*
	Property: alert
		Shortcut for alert
		
	Argument:
		properties - see Options in messageBox
	*/		
	alert: function(message, properties){
		this.messageBox('alert', message, properties);
	},

	/*
	Property: info
		Shortcut for alert info
		
	Argument:
		properties - see Options in messageBox
	*/		
	info: function(message, properties){
		this.messageBox('info', message, properties);
	},

	/*
	Property: error
		Shortcut for alert error
		
	Argument:
		properties - see Options in messageBox
	*/		
	error: function(message, properties){
		this.messageBox('error', message, properties);
	},

	/*
	Property: confirm
		Shortcut for confirm
		
	Argument:
		properties - see Options in messageBox
	*/
	confirm: function(message, properties){
		this.messageBox('confirm', message, properties);
	},

	/*
	Property: prompt
		Shortcut for prompt
		
	Argument:
		properties - see Options in messageBox
	*/	
	prompt: function(message, input, properties){
		this.messageBox('prompt', message, properties, input);
	}
});


/* carousel*/
/*
Title 	: Simple Carousel with Paging Using Mootools
Author 	: Nikhil Kunder (nik1409@gmail.com)
Date 	: 2008/09/12
Version : 1.0
    moocarousel_v1.0.js  is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 	Lesser General Public License for more details.
*/

var MooCarousel = new Class({
	Implements: [Options,Events],
		wrapper:'',
		items:'',
		moveleft:'',
		moveright:'',
		slides:2,
		offset:350,
		currentslide:1,
		pos:0,
		ispaged:false,
		//aa:{},
		initialize: function(wrapper,items,moveleft,moveright, ns,sss,ispaged){
			//this.setOptions(options);
			this.wrapper = $(wrapper);
			this.items = $(items);
			this.moveleft = $(moveleft);
			this.moveright = $(moveright);
			this.slides = ns;
			this.offset = sss;
			this.ispaged = ispaged;
			this.scrolled=true;
			this.parent = this.wrapper.getParent();
			this.scroll = new Fx.Scroll(this.wrapper, {offset:{'x':0, 'y':0} });
			this.scroll.addEvent('onComplete',function(){
				this.scrolled=true;
			}.bind(this));
			this.dir = "right"; // direction of paging
			var that = this;
			
			this.fxLeft=new Fx.Tween(this.moveleft,{duration:300,transition:Fx.Transitions.Quad.easeInOut});
			this.fxRight=new Fx.Tween(this.moveright,{duration:300,transition:Fx.Transitions.Quad.easeInOut});
			this.fxLeft.set('opacity',0);
			this.moveleft.setStyle('float','left');
			
			if(this.ispaged){
				this.carousel_paging = new Element('div').addClass('carousel_paging');
				this.carousel_paging.id= this.wrapper.id + "_p";
				//alert(parseInt(this.slides));
				//	for (  i = parseInt(this.slides); i>0 ; i--){
				for (  i = 1;  i <= parseInt(this.slides) ; i++){
					var aa = new Element('a').addClass('page');
					if(i==1) aa.className= "current";
					aa.href="javascript:void(0);";
					aa.addEvent('click', this.page.bind(this, [i, aa, this.carousel_paging]));
					aa.innerHTML = i;
					aa.injectInside(this.carousel_paging);
				}
				//alert(this.carousel_paging.innerHTML);
				this.carousel_paging.injectAfter(this.parent);
				var carousel_fix = new Element('div').addClass('clearfix').injectBefore(this.carousel_paging);
				var carousel_fix = new Element('div').addClass('clearfix').injectInside(this.carousel_paging);
			}
			this.moveleft.addEvent('click', this.camoveleft.bind(this));
			this.moveright.addEvent('click', this.camoveright.bind(this));
			
		},
		
		
		camoveleft: function(event){
			event = new Event(event).stop();
			if(this.scrolled){
			this.scrolled=false;
			if(this.currentslide==2){
				this.fxLeft.start('opacity',0);
			}
			if(this.currentslide == 1) {
				return;
			}
			this.moveright.setStyle('float','left');
			this.fxRight.start('opacity',1);
			//this.aa[this.currentslide].className= "paging_anchor current"
			this.currentslide--;	
			if(this.ispaged){																						
				this.setcss('left');
				this.dir = 'left';
			}
			this.pos += -(this.offset);
			this.scroll.start(this.pos);this.scroll.toLeft();
			}
		},
		camoveright: function(event){
			event = new Event(event).stop();
			if(this.scrolled){
			this.scrolled=false;
			if(this.currentslide==this.slides-1){
				this.fxRight.start('opacity',0);

			}
			
			if(this.currentslide >= this.slides){
				return;
			}
			this.moveleft.setStyle('float','left');
			this.fxLeft.start('opacity',1);
			this.currentslide++;
			if(this.ispaged){																						
				this.setcss('right');
				this.dir = 'right';
			}
			this.pos += this.offset;
			this.scroll.start(this.pos);this.scroll.toLeft();
			//this.resetcss();
			//this.aa[this.currentslide].className= "paging_anchor current"
			}
		},
		
		page: function(pagenum,o, p){
			//event = new Event(event).stop();
			//alert("page -" + pagenum);
			var sss = ((pagenum-1)*this.offset) ;
			if(pagenum > this.slides) return;
			if(pagenum == 1) sss = 0;
			this.currentslide = pagenum
			this.pos = sss
			this.scroll.start(this.pos);this.scroll.toLeft();
			//o.className="current";
			this.resetcss(o, p);
			/*var pa = $$(".paging_anchor");
				pa.each(function(el,i){
				el.className="page";
			});*/
		},
		setcss:function(dir){
			var x = parseInt(this.currentslide)-1; 		
			if(x < 0 ) x = 0; if( x >9) x =9; 
			var o = this.carousel_paging.getElements('a')[x];
			this.resetcss(o,this.carousel_paging);
		},
		resetcss: function(o,p){
			var cpa = p.getElements('a');
			cpa.each(function(el,i){
				el.className="page";
			});
			o.className="current";
		}
		
	});
	MooCarousel.implement(new Events);
	MooCarousel.implement(new Options);
/* menu matic */
var MenuMatic=new Class({Implements:Options,options:{id:"nav",subMenusContainerId:"subMenusContainer",effect:"slide & fade",duration:600,physics:Fx.Transitions.Pow.easeOut,hideDelay:1000,stretchMainMenu:false,matchWidthMode:false,orientation:"horizontal",direction:{x:"right",y:"down"},tweakInitial:{x:0,y:0},tweakSubsequent:{x:0,y:0},center:false,opacity:95,mmbFocusedClassName:null,mmbClassName:null,killDivider:null,fixHasLayoutBug:false,onHideAllSubMenusNow_begin:(function(){}),onHideAllSubMenusNow_complete:(function(){}),onInit_begin:(function(){}),onInit_complete:(function(){})},hideAllMenusTimeout:null,allSubMenus:[],subMenuZindex:1,initialize:function(B){this.setOptions(B);this.options.onInit_begin();if(this.options.opacity>99){this.options.opacity=99.9}this.options.opacity=this.options.opacity/100;Element.implement({getId:function(){if(!this.id){var E=this.get("tag")+"-"+$time();while($(E)){E=this.get("tag")+"-"+$time()}this.id=E}return this.id}});this.options.direction.x=this.options.direction.x.toLowerCase();this.options.direction.y=this.options.direction.y.toLowerCase();if(this.options.direction.x==="right"){this.options.direction.xInverse="left"}else{if(this.options.direction.x==="left"){this.options.direction.xInverse="right"}}if(this.options.direction.y==="up"){this.options.direction.yInverse="down"}else{if(this.options.direction.y==="down"){this.options.direction.yInverse="up"}}var A=$(this.options.id).getElements("a");A.each(function(F,E){F.store("parentLinks",F.getParent().getParents("li").getFirst("a"));F.store("parentLinks",F.retrieve("parentLinks").erase(F.retrieve("parentLinks").getFirst()));F.store("childMenu",F.getNext("ul")||F.getNext("ol"));theSubMenuType="subsequent";if($(F.getParent("ul")||F.getParent("ol")).id===this.options.id){theSubMenuType="initial"}F.store("subMenuType",theSubMenuType);if(theSubMenuType==="initial"&&$(F.getNext("ul")||F.getNext("ol"))){F.addClass("mainMenuParentBtn")}else{if($(F.getNext("ul")||F.getNext("ol"))){F.addClass("subMenuParentBtn")}}}.bind(this));var D=new Element("div",{id:this.options.subMenusContainerId}).inject($(document.body),"bottom");$(this.options.id).getElements("ul, ol").each(function(F,E){new Element("div",{"class":"smOW"}).inject(D).grab(F)}.bind(this));D.getElements("a").set("tabindex","-1");A.each(function(G,E){if(!G.retrieve("childMenu")){return }G.store("childMenu",G.retrieve("childMenu").getParent("div"));this.allSubMenus.include(G.retrieve("childMenu"));G.store("parentSubMenus",G.retrieve("parentLinks").retrieve("childMenu"));var F=new MenuMaticSubMenu(this.options,this,G)}.bind(this));var C=$(this.options.id).getElements("a").filter(function(F,E){return !F.retrieve("childMenu")});C.each(function(F,E){F.addEvents({mouseenter:function(G){this.hideAllSubMenusNow();if(this.options.mmbClassName&&this.options.mmbFocusedClassName){$(F).retrieve("btnMorph",new Fx.Morph(F,{duration:(this.options.duration/2),transition:this.options.physics,link:"cancel"})).start(this.options.mmbFocusedClassName)}}.bind(this),focus:function(G){this.hideAllSubMenusNow();if(this.options.mmbClassName&&this.options.mmbFocusedClassName){$(F).retrieve("btnMorph",new Fx.Morph(F,{duration:(this.options.duration/2),transition:this.options.physics,link:"cancel"})).start(this.options.mmbFocusedClassName)}}.bind(this),mouseleave:function(G){if(this.options.mmbClassName&&this.options.mmbFocusedClassName){$(F).retrieve("btnMorph",new Fx.Morph(F,{duration:(this.options.duration*5),transition:this.options.physics,link:"cancel"})).start(this.options.mmbClassName)}}.bind(this),blur:function(G){if(this.options.mmbClassName&&this.options.mmbFocusedClassName){$(F).retrieve("btnMorph",new Fx.Morph(F,{duration:(this.options.duration*5),transition:this.options.physics,link:"cancel"})).start(this.options.mmbClassName)}}.bind(this),keydown:function(H){var G=new Event(H);if(H.key==="up"||H.key==="down"||H.key==="left"||H.key==="right"){H.stop()}if(H.key==="left"&&this.options.orientation==="horizontal"||H.key==="up"&&this.options.orientation==="vertical"){if(F.getParent("li").getPrevious("li")){F.getParent("li").getPrevious("li").getFirst("a").focus()}else{F.getParent("li").getParent().getLast("li").getFirst("a").focus()}}else{if(H.key==="right"&&this.options.orientation==="horizontal"||H.key==="down"&&this.options.orientation==="vertical"){if(F.getParent("li").getNext("li")){F.getParent("li").getNext("li").getFirst("a").focus()}else{F.getParent("li").getParent().getFirst("li").getFirst("a").focus()}}}}.bind(this)})},this);this.stretch();this.killDivider();this.center();this.fixHasLayoutBug();this.options.onInit_complete()},fixHasLayoutBug:function(){if(Browser.Engine.trident&&this.options.fixHasLayoutBug){$(this.options.id).getParents().setStyle("zoom",1);$(this.options.id).setStyle("zoom",1);$(this.options.id).getChildren().setStyle("zoom",1);$(this.options.subMenusContainerId).setStyle("zoom",1);$(this.options.subMenusContainerId).getChildren().setStyle("zoom",1)}},center:function(){if(!this.options.center){return }$(this.options.id).setStyles({left:"50%","margin-left":-($(this.options.id).getSize().x/2)})},stretch:function(){if(this.options.stretchMainMenu&&this.options.orientation==="horizontal"){var C=parseFloat($(this.options.id).getCoordinates().width);var D=0;var B=$(this.options.id).getElements("a");B.setStyles({"padding-left":0,"padding-right":0});B.each(function(F,E){D+=F.getSize().x}.bind(this));if(C<D){return }var A=(C-D)/B.length;B.each(function(F,E){F.setStyle("width",F.getSize().x+A)}.bind(this));B.getLast().setStyle("width",B.getLast().getSize().x-1)}},killDivider:function(){if(this.options.killDivider&&this.options.killDivider.toLowerCase()==="first"){$($(this.options.id).getElements("li")[0]).setStyles({background:"none"})}else{if(this.options.killDivider&&this.options.killDivider.toLowerCase()==="last"){$($(this.options.id).getElements("li").getLast()).setStyles({background:"none"})}}},hideAllSubMenusNow:function(){this.options.onHideAllSubMenusNow_begin();$clear(this.hideAllMenusTimeout);$$(this.allSubMenus).fireEvent("hide");this.options.onHideAllSubMenusNow_complete()}});var MenuMaticSubMenu=new Class({Implements:Options,Extends:MenuMatic,options:{onSubMenuInit_begin:(function(A){}),onSubMenuInit_complete:(function(A){}),onMatchWidth_begin:(function(A){}),onMatchWidth_complete:(function(A){}),onHideSubMenu_begin:(function(A){}),onHideSubMenu_complete:(function(A){}),onHideOtherSubMenus_begin:(function(A){}),onHideOtherSubMenus_complete:(function(A){}),onHideAllSubMenus_begin:(function(A){}),onHideAllSubMenus_complete:(function(A){}),onPositionSubMenu_begin:(function(A){}),onPositionSubMenu_complete:(function(A){}),onShowSubMenu_begin:(function(A){}),onShowSubMenu_complete:(function(A){})},root:null,btn:null,hidden:true,myEffect:null,initialize:function(B,A,C){this.setOptions(B);this.root=A;this.btn=C;this.childMenu=this.btn.retrieve("childMenu");this.subMenuType=this.btn.retrieve("subMenuType");this.childMenu=this.btn.retrieve("childMenu");this.parentSubMenus=$$(this.btn.retrieve("parentSubMenus"));this.parentLinks=$$(this.btn.retrieve("parentLinks"));this.parentSubMenu=$(this.parentSubMenus[0]);if(this.parentSubMenu){this.parentSubMenu=this.parentSubMenu.retrieve("class")}this.childMenu.store("class",this);this.btn.store("class",this);this.childMenu.store("status","closed");this.options.onSubMenuInit_begin(this);this.childMenu.addEvent("hide",function(){this.hideSubMenu()}.bind(this));this.childMenu.addEvent("show",function(){this.showSubMenu()}.bind(this));if(this.options.effect){this.myEffect=new Fx.Morph($(this.childMenu).getFirst(),{duration:this.options.duration,transition:this.options.physics,link:"cancel"})}if(this.options.effect==="slide"||this.options.effect==="slide & fade"){if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"){this.childMenu.getFirst().setStyle("margin-top","0")}else{this.childMenu.getFirst().setStyle("margin-left","0")}}else{if(this.options.effect==="fade"||this.options.effect==="slide & fade"){this.childMenu.getFirst().setStyle("opacity",0)}}if(this.options.effect!="fade"&&this.options.effect!="slide & fade"){this.childMenu.getFirst().setStyle("opacity",this.options.opacity)}var D=$(this.childMenu).getElements("a").filter(function(F,E){return !F.retrieve("childMenu")});D.each(function(F,E){$(F).addClass("subMenuBtn");F.addEvents({mouseenter:function(G){this.childMenu.fireEvent("show");this.cancellHideAllSubMenus();this.hideOtherSubMenus()}.bind(this),focus:function(G){this.childMenu.fireEvent("show");this.cancellHideAllSubMenus();this.hideOtherSubMenus()}.bind(this),mouseleave:function(G){this.cancellHideAllSubMenus();this.hideAllSubMenus()}.bind(this),blur:function(G){this.cancellHideAllSubMenus();this.hideAllSubMenus()}.bind(this),keydown:function(H){var G=new Event(H);if(H.key==="up"||H.key==="down"||H.key==="left"||H.key==="right"||H.key==="tab"){H.stop()}if(H.key==="up"){if(F.getParent("li").getPrevious("li")){F.getParent("li").getPrevious("li").getFirst("a").focus()}else{if(this.options.direction.y==="down"){this.btn.focus()}else{if(this.options.direction.y==="up"){F.getParent("li").getParent().getLast("li").getFirst("a").focus()}}}}else{if(H.key==="down"){if(F.getParent("li").getNext("li")){F.getParent("li").getNext("li").getFirst("a").focus()}else{if(this.options.direction.y==="down"){F.getParent("li").getParent().getFirst("li").getFirst("a").focus()}else{if(this.options.direction.y==="up"){this.btn.focus()}}}}else{if(H.key===this.options.direction.xInverse){this.btn.focus()}}}}.bind(this)})},this);$(this.btn).removeClass("subMenuBtn");if(this.subMenuType=="initial"){this.btn.addClass("mainParentBtn")}else{this.btn.addClass("subParentBtn")}$(this.btn).addEvents({mouseenter:function(E){this.cancellHideAllSubMenus();this.hideOtherSubMenus();this.showSubMenu();if(this.subMenuType==="initial"&&this.options.mmbClassName&&this.options.mmbFocusedClassName){$(this.btn).retrieve("btnMorph",new Fx.Morph($(this.btn),{duration:(this.options.duration/2),transition:this.options.physics,link:"cancel"})).start(this.options.mmbFocusedClassName)}}.bind(this),focus:function(E){this.cancellHideAllSubMenus();this.hideOtherSubMenus();this.showSubMenu();if(this.subMenuType==="initial"&&this.options.mmbClassName&&this.options.mmbFocusedClassName){$(this.btn).retrieve("btnMorph",new Fx.Morph($(this.btn),{duration:(this.options.duration/2),transition:this.options.physics,link:"cancel"})).start(this.options.mmbFocusedClassName)}}.bind(this),mouseleave:function(E){this.cancellHideAllSubMenus();this.hideAllSubMenus()}.bind(this),blur:function(E){this.cancellHideAllSubMenus();this.hideAllSubMenus()}.bind(this),keydown:function(E){E=new Event(E);if(E.key==="up"||E.key==="down"||E.key==="left"||E.key==="right"){E.stop()}if(!this.parentSubMenu){if(this.options.orientation==="horizontal"&&E.key===this.options.direction.y||this.options.orientation==="vertical"&&E.key===this.options.direction.x){if(this.options.direction.y==="down"){this.childMenu.getFirst().getFirst("li").getFirst("a").focus()}else{if(this.options.direction.y==="up"){this.childMenu.getFirst().getLast("li").getFirst("a").focus()}}}else{if(this.options.orientation==="horizontal"&&E.key==="left"||this.options.orientation==="vertical"&&E.key===this.options.direction.yInverse){if(this.btn.getParent().getPrevious()){this.btn.getParent().getPrevious().getFirst().focus()}else{this.btn.getParent().getParent().getLast().getFirst().focus()}}else{if(this.options.orientation==="horizontal"&&E.key==="right"||this.options.orientation==="vertical"&&E.key===this.options.direction.y){if(this.btn.getParent().getNext()){this.btn.getParent().getNext().getFirst().focus()}else{this.btn.getParent().getParent().getFirst().getFirst().focus()}}}}}else{if(E.key==="tab"){E.stop()}if(E.key==="up"){if(this.btn.getParent("li").getPrevious("li")){this.btn.getParent("li").getPrevious("li").getFirst("a").focus()}else{if(this.options.direction.y==="down"){this.parentSubMenu.btn.focus()}else{if(this.options.direction.y==="up"){this.btn.getParent("li").getParent().getLast("li").getFirst("a").focus()}}}}else{if(E.key==="down"){if(this.btn.getParent("li").getNext("li")){this.btn.getParent("li").getNext("li").getFirst("a").focus()}else{if(this.options.direction.y==="down"){this.btn.getParent("li").getParent().getFirst("li").getFirst("a").focus()}else{if(this.options.direction.y==="up"){this.parentSubMenu.btn.focus()}}}}else{if(E.key===this.options.direction.xInverse){this.parentSubMenu.btn.focus()}else{if(E.key===this.options.direction.x){if(this.options.direction.y==="down"){this.childMenu.getFirst().getFirst("li").getFirst("a").focus()}else{if(this.options.direction.y==="up"){}}}}}}}}.bind(this)});this.options.onSubMenuInit_complete(this)},matchWidth:function(){if(this.widthMatched||!this.options.matchWidthMode||this.subMenuType==="subsequent"){return }this.options.onMatchWidth_begin(this);var A=this.btn.getCoordinates().width;$(this.childMenu).getElements("a").each(function(E,D){var C=parseFloat($(this.childMenu).getFirst().getStyle("border-left-width"))+parseFloat($(this.childMenu).getFirst().getStyle("border-right-width"));var B=parseFloat(E.getStyle("padding-left"))+parseFloat(E.getStyle("padding-right"));var F=C+B;if(A>E.getCoordinates().width){E.setStyle("width",A-F);E.setStyle("margin-right",-C)}}.bind(this));this.width=this.childMenu.getFirst().getCoordinates().width;this.widthMatched=true;this.options.onMatchWidth_complete(this)},hideSubMenu:function(){if(this.childMenu.retrieve("status")==="closed"){return }this.options.onHideSubMenu_begin(this);if(this.subMenuType=="initial"){if(this.options.mmbClassName&&this.options.mmbFocusedClassName){$(this.btn).retrieve("btnMorph",new Fx.Morph($(this.btn),{duration:(this.options.duration),transition:this.options.physics,link:"cancel"})).start(this.options.mmbClassName).chain(function(){$(this.btn).removeClass("mainMenuParentBtnFocused");$(this.btn).addClass("mainMenuParentBtn")}.bind(this))}else{$(this.btn).removeClass("mainMenuParentBtnFocused");$(this.btn).addClass("mainMenuParentBtn")}}else{$(this.btn).removeClass("subMenuParentBtnFocused");$(this.btn).addClass("subMenuParentBtn")}this.childMenu.setStyle("z-index",1);if(this.options.effect&&this.options.effect.toLowerCase()==="slide"){if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"&&this.options.direction.y==="down"){this.myEffect.start({"margin-top":-this.height}).chain(function(){this.childMenu.style.display="none"}.bind(this))}else{if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"&&this.options.direction.y==="up"){this.myEffect.start({"margin-top":this.height}).chain(function(){this.childMenu.style.display="none"}.bind(this))}else{if(this.options.direction.x==="right"){this.myEffect.start({"margin-left":-this.width}).chain(function(){this.childMenu.style.display="none"}.bind(this))}else{if(this.options.direction.x==="left"){this.myEffect.start({"margin-left":this.width}).chain(function(){this.childMenu.style.display="none"}.bind(this))}}}}}else{if(this.options.effect=="fade"){this.myEffect.start({opacity:0}).chain(function(){this.childMenu.style.display="none"}.bind(this))}else{if(this.options.effect=="slide & fade"){if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"&&this.options.direction.y==="down"){this.myEffect.start({"margin-top":-this.height,opacity:0}).chain(function(){this.childMenu.style.display="none"}.bind(this))}else{if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"&&this.options.direction.y==="up"){this.myEffect.start({"margin-top":this.height,opacity:0}).chain(function(){this.childMenu.style.display="none"}.bind(this))}else{if(this.options.direction.x==="right"){this.myEffect.start({"margin-left":-this.width,opacity:0}).chain(function(){this.childMenu.style.display="none"}.bind(this))}else{if(this.options.direction.x==="left"){this.myEffect.start({"margin-left":this.width,opacity:0}).chain(function(){this.childMenu.style.display="none"}.bind(this))}}}}}else{this.childMenu.style.display="none"}}}this.childMenu.store("status","closed");this.options.onHideSubMenu_complete(this)},hideOtherSubMenus:function(){this.options.onHideOtherSubMenus_begin(this);if(!this.btn.retrieve("otherSubMenus")){this.btn.store("otherSubMenus",$$(this.root.allSubMenus.filter(function(A){return !this.btn.retrieve("parentSubMenus").contains(A)&&A!=this.childMenu}.bind(this))))}this.parentSubMenus.fireEvent("show");this.btn.retrieve("otherSubMenus").fireEvent("hide");this.options.onHideOtherSubMenus_complete(this)},hideAllSubMenus:function(){this.options.onHideAllSubMenus_begin(this);$clear(this.root.hideAllMenusTimeout);this.root.hideAllMenusTimeout=(function(){$clear(this.hideAllMenusTimeout);$$(this.root.allSubMenus).fireEvent("hide")}).bind(this).delay(this.options.hideDelay);this.options.onHideAllSubMenus_complete(this)},cancellHideAllSubMenus:function(){$clear(this.root.hideAllMenusTimeout)},showSubMenu:function(A){if(this.childMenu.retrieve("status")==="open"){return }this.options.onShowSubMenu_begin(this);if(this.subMenuType=="initial"){$(this.btn).removeClass("mainMenuParentBtn");$(this.btn).addClass("mainMenuParentBtnFocused")}else{$(this.btn).removeClass("subMenuParentBtn");$(this.btn).addClass("subMenuParentBtnFocused")}this.root.subMenuZindex++;this.childMenu.setStyles({display:"block",visibility:"hidden","z-index":this.root.subMenuZindex});if(!this.width||!this.height){this.width=this.childMenu.getFirst().getCoordinates().width;this.height=this.childMenu.getFirst().getCoordinates().height;this.childMenu.setStyle("height",this.height,"border");if(this.options.effect==="slide"||this.options.effect==="slide & fade"){if(this.subMenuType=="initial"&&this.options.orientation==="horizontal"){this.childMenu.getFirst().setStyle("margin-top","0");if(this.options.direction.y==="down"){this.myEffect.set({"margin-top":-this.height})}else{if(this.options.direction.y==="up"){this.myEffect.set({"margin-top":this.height})}}}else{if(this.options.direction.x==="left"){this.myEffect.set({"margin-left":this.width})}else{this.myEffect.set({"margin-left":-this.width})}}}}this.matchWidth();this.positionSubMenu();if(this.options.effect==="slide"){this.childMenu.setStyles({display:"block",visibility:"visible"});if(this.subMenuType==="initial"&&this.options.orientation==="horizontal"){if(A){this.myEffect.set({"margin-top":0}).chain(function(){this.showSubMenuComplete()}.bind(this))}else{this.myEffect.start({"margin-top":0}).chain(function(){this.showSubMenuComplete()}.bind(this))}}else{if(A){this.myEffect.set({"margin-left":0}).chain(function(){this.showSubMenuComplete()}.bind(this))}else{this.myEffect.start({"margin-left":0}).chain(function(){this.showSubMenuComplete()}.bind(this))}}}else{if(this.options.effect==="fade"){if(A){this.myEffect.set({opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}else{this.myEffect.start({opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}}else{if(this.options.effect=="slide & fade"){this.childMenu.setStyles({display:"block",visibility:"visible"});this.childMenu.getFirst().setStyles({left:0});if(this.subMenuType==="initial"&&this.options.orientation==="horizontal"){if(A){this.myEffect.set({"margin-top":0,opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}else{this.myEffect.start({"margin-top":0,opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}}else{if(A){if(this.options.direction.x==="right"){this.myEffect.set({"margin-left":0,opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}else{if(this.options.direction.x==="left"){this.myEffect.set({"margin-left":0,opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}}}else{if(this.options.direction.x==="right"){this.myEffect.set({"margin-left":-this.width,opacity:this.options.opacity});this.myEffect.start({"margin-left":0,opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}else{if(this.options.direction.x==="left"){this.myEffect.start({"margin-left":0,opacity:this.options.opacity}).chain(function(){this.showSubMenuComplete()}.bind(this))}}}}}else{this.childMenu.setStyles({display:"block",visibility:"visible"}).chain(function(){this.showSubMenuComplete(this)}.bind(this))}}}this.childMenu.store("status","open")},showSubMenuComplete:function(){this.options.onShowSubMenu_complete(this)},positionSubMenu:function(){this.options.onPositionSubMenu_begin(this);this.childMenu.setStyle("width",this.width);this.childMenu.getFirst().setStyle("width",this.width);if(this.subMenuType==="subsequent"){if(this.parentSubMenu&&this.options.direction.x!=this.parentSubMenu.options.direction.x){if(this.parentSubMenu.options.direction.x==="left"&&this.options.effect&&this.options.effect.contains("slide")){this.myEffect.set({"margin-left":this.width})}}this.options.direction.x=this.parentSubMenu.options.direction.x;this.options.direction.xInverse=this.parentSubMenu.options.direction.xInverse;this.options.direction.y=this.parentSubMenu.options.direction.y;this.options.direction.yInverse=this.parentSubMenu.options.direction.yInverse}var C;var A;if(this.subMenuType=="initial"){if(this.options.direction.y==="up"){if(this.options.orientation==="vertical"){C=this.btn.getCoordinates().bottom-this.height+this.options.tweakInitial.y}else{C=this.btn.getCoordinates().top-this.height+this.options.tweakInitial.y}this.childMenu.style.top=C+"px"}else{if(this.options.orientation=="horizontal"){this.childMenu.style.top=this.btn.getCoordinates().bottom+this.options.tweakInitial.y+"px"}else{if(this.options.orientation=="vertical"){C=this.btn.getPosition().y+this.options.tweakInitial.y;if((C+this.childMenu.getSize().y)>=$(document.body).getScrollSize().y){A=(C+this.childMenu.getSize().y)-$(document.body).getScrollSize().y;C=C-A-20}this.childMenu.style.top=C+"px"}}}if(this.options.orientation=="horizontal"){this.childMenu.style.left=this.btn.getPosition().x+this.options.tweakInitial.x+"px"}else{if(this.options.direction.x=="left"){this.childMenu.style.left=this.btn.getPosition().x-this.childMenu.getCoordinates().width+this.options.tweakInitial.x+"px"}else{if(this.options.direction.x=="right"){this.childMenu.style.left=this.btn.getCoordinates().right+this.options.tweakInitial.x+"px"}}}}else{if(this.subMenuType=="subsequent"){if(this.options.direction.y==="down"){if((this.btn.getCoordinates().top+this.options.tweakSubsequent.y+this.childMenu.getSize().y)>=$(document.body).getScrollSize().y){A=(this.btn.getCoordinates().top+this.options.tweakSubsequent.y+this.childMenu.getSize().y)-$(document.body).getScrollSize().y;this.childMenu.style.top=(this.btn.getCoordinates().top+this.options.tweakSubsequent.y)-A-20+"px"}else{this.childMenu.style.top=this.btn.getCoordinates().top+this.options.tweakSubsequent.y+"px"}}else{if(this.options.direction.y==="up"){if((this.btn.getCoordinates().bottom-this.height+this.options.tweakSubsequent.y)<1){this.options.direction.y="down";this.options.direction.yInverse="up";this.childMenu.style.top=this.btn.getCoordinates().top+this.options.tweakSubsequent.y+"px"}else{this.childMenu.style.top=this.btn.getCoordinates().bottom-this.height+this.options.tweakSubsequent.y+"px"}}}if(this.options.direction.x=="left"){this.childMenu.style.left=this.btn.getCoordinates().left-this.childMenu.getCoordinates().width+this.options.tweakSubsequent.x+"px";if(this.childMenu.getPosition().x<0){this.options.direction.x="right";this.options.direction.xInverse="left";this.childMenu.style.left=this.btn.getPosition().x+this.btn.getCoordinates().width+this.options.tweakSubsequent.x+"px";if(this.options.effect==="slide"||this.options.effect==="slide & fade"){this.myEffect.set({"margin-left":-this.width,opacity:this.options.opacity})}}}else{if(this.options.direction.x=="right"){this.childMenu.style.left=this.btn.getCoordinates().right+this.options.tweakSubsequent.x+"px";var D=this.childMenu.getCoordinates().right;var B=document.getCoordinates().width+window.getScroll().x;if(D>B){this.options.direction.x="left";this.options.direction.xInverse="right";this.childMenu.style.left=this.btn.getCoordinates().left-this.childMenu.getCoordinates().width+this.options.tweakSubsequent.x+"px";if(this.options.effect==="slide"||this.options.effect==="slide & fade"){this.myEffect.set({"margin-left":this.width,opacity:this.options.opacity})}}}}}}this.options.onPositionSubMenu_complete(this)}});

/* validation */

/**************************************************************

	Script		: Validate
	Version		: 2.1
	Authors		: Samuel Birch
	Desc		: Form validation
	Licence		: Open Source MIT Licence

**************************************************************/

var Validate = new Class({

	Implements: [Options,Events], 
	
	options: {
		validateOnBlur: false,
		errorClass: 'error',
		errorMsgClass: 'errorMessage',
		dateFormat: 'rrrr-mm-dd',
		showErrorsInline: true,
		buttonId: 'submit',
		label: 'Czekaj...'
	},

	initialize: function(form, options){
		this.setOptions(options);
		this.options.onFail = options.onFail || $empty;
		this.options.onSuccess = options.onSuccess || false;		
		this.valid=false;
		this.form=$(form);
		this.formId=this.form.getProperty('id');
//		this.elements = this.form.getElements('.required');
		this.elements = $$('#'+this.formId+' .required','#'+this.formId+' .same','#'+this.formId+' .samenot','#'+this.formId+' .number');
		this.list = [];
		this.elements.each(function(el,i){
			if(this.options.validateOnBlur){
				el.addEvent('blur', this.validate.bind(this, el));
				if(el.type=='radio'||el.type=='check')
					el.addEvent('click', this.validate.bind(this, el));

			}
		}.bind(this));
	//	this.form.removeEvents('submit',this.addSubmit);
		this.form.addEvent('submit', function(e){
			this.addSubmit(e);
		}.bind(this));
	},

	addSubmit: function(e){
			var event = new Event(e);
			var doSubmit = true;
			this.form.store('valid',true);
			this.elements.each(function(el,i){
				if(!this.validate(el)){
					event.stop();
					doSubmit = false;
					this.form.store('valid',false);
					this.list.include(el);
				}else{

					this.list.erase(el);
				}
			}.bind(this));
			
			if(!doSubmit){
				this.options.onFail(this.getList());
			}
			

	},
	getList: function(){
		var list = new Element('ul');
		this.list.each(function(el,i){
			if(el.title != ''){
			var li = new Element('li').injectInside(list);
			var l=new Element('label').setProperty('for', el.id).set('text',el.title.split('|')[0]).injectInside(li);
			}
		});
		return list;
	},
	
	validate: function(el){
		this.valid=true;
		this.clearMsg(el);
		switch(el.type){
			case 'text':
			case 'password':
			case 'textarea':
			case 'select-one':
					if(el.hasClass('samenot')){
						if(el.value==$(el.title.split('|')[1]).getProperty('value')){
							this.valid=true;
							this.clearMsg($(el.title.split('|')[1]));
						}else{
							this.valid=false;
							this.setMsg(el,el.title.split('|')[2]);
						}
					}


				if(el.value != ''){
					var k=el.getProperty('class');
					if(k.match(/.*length\[(.+)\].*/ig)){
						var l=k.replace(/.*length\[(.+)\].*/ig,'$1');
						if((el.value).trim().length<l){
							this.valid=false;
							this.setMsg(el,'Wprowadź conajmniej '+l+' znaków');
						}
						else{
							this.valid=true;
							
						}
					}					
	
					if(el.hasClass('same')){
						if(el.value==$(el.title.split('|')[1]).getProperty('value')){
							this.valid=true;
							this.clearMsg($(el.title.split('|')[1]));
						}else{
							this.valid=false;
							this.setMsg(el,el.title.split('|')[2]);
						}
					}
					if(el.hasClass('beginslike')){
						if(el.value.indexOf($(el.title.split('|')[1]).getProperty('value'))==0){
							this.valid=true;
							//this.clearMsg($(el.getProperty('alt').split('|')[0]));
						}else{
							this.valid=false;
							this.setMsg(el,el.title.split('|')[2]);
						}
					}
					if(el.hasClass('math')){
						if(el.value==eval(this.simpleDecode($(el.title.split('|')[1]).getProperty('value')))){
							this.valid=true;
							this.clearMsg($(el.title.split('|')[1]));
						}else{
							this.valid=false;
							this.setMsg(el,el.title.split('|')[2]);
						}
					}
					if(el.hasClass('ajax')){
						if(this.checkUnique(el.id,el.value)){
							this.valid=true;
						}
						else{
							this.valid=false;
							this.setMsg(el,'Taki login już istnieje');
						}
							
					}
					if(el.hasClass('email')){
						var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;
						if(el.value.toUpperCase().match(regEmail)){
							this.valid = true;
						}else{
							this.valid = false;
							this.setMsg(el, 'Wprowadź prawidłowy e-mail');
						}
					}
 
					if(el.hasClass('url')){
						var regURL = /^(http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&amp;%\$#\=~])*$/i;
						if(unescape(el.value).toLowerCase().match(regURL)){
							this.valid = true;
						}else{
							this.valid = false;
							this.setMsg(el, 'Wprowadź prawidłowy adres url');
						}
					}
					if(el.hasClass('number')){
						var regNum = /[-+]?[0-9]*\.?[0-9]+/;
						if(el.value.match(regNum)){
							this.valid = true;
						}else{
							this.valid = false;
							this.setMsg(el, 'Wprowadź liczbę');
						}
					}
					if(el.hasClass('postcode')){
						var regPC = /^[0-9]{2}\-[0-9]{3}$/;
						if(el.value.match(regPC)){
							this.valid = true;
						}else{
							this.valid = false;
							this.setMsg(el, 'Wprowadź prawidłowy kod pocztowy');
						}
					}
					
					if(el.hasClass('date')){
						
						//var d = Date.parseExact(el.value, this.options.dateFormat);
						if(el.value.match(/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/)){
							this.valid = true;
						}else{
							this.valid = false;
							this.setMsg(el, 'Wprowadź datę w formacie: '+this.options.dateFormat.toLowerCase());
						}
					}
					if(el.hasClass('captcha'))
					{
						if(this.checkCaptcha(el.value)){
							this.valid=true;						
						}
						else{
							this.valid=false;
							this.setMsg(el,'Proszę wpisać prawidłowy kod, lub kliknąć na obrazek po nowy kod');
						}
					}					
					if(el.hasClass('usernamedup'))
					{
						if(this.checkUnique(el.value)){
							this.valid=true;						
						}
						else{
							this.valid=false;
							this.setMsg(el,'Taki login jużistnieje');
						}					
					}					
				}else{
		
					if(!el.hasClass('samenot')&&el.hasClass('required')){
						this.valid = false;
						this.setMsg(el);
					}
				}
				break;
				
			case 'checkbox':
				if(!el.checked){
					this.valid = false;
					this.setMsg(el);
				}else{
					this.valid = true;
				}
				break;
				
			case 'radio':
				var rad;
				if(this.form[el.name].length>1)
					rad = $A(this.form[el.name]);
				else
					rad=new Array(this.form[el.name]);
				var ok = false;
				rad.each(function(e,i){
					if(e.checked){
						ok = true;
					}
				});
				if(!ok){
					this.valid = false;
					this.setMsg(rad.getLast(), ' Wybierz jednÄ… opcjÄ™');
				}else{
					this.valid = true;
					if(rad.length>0)
						this.clearMsg(rad.getLast());
					else
						this.clearMsg(rad);
				}
				break;
				
		}
		return this.valid;
	},
	
	setMsg: function(el, msg){
		if(msg == undefined){
			msg = el.title.split('|')[0];
		}
		if(this.options.showErrorsInline){
			if(el.error == undefined){
				el.error = new Element('span').addClass(this.options.errorMsgClass).setStyle('color','#f00').set('text',msg);
				if(el.getParent()){
					el.error.injectAfter(el);
				}
			}else{
				el.error.set('text',msg);
			}
			el.addClass(this.options.errorClass);
		}
	},
	
	clearMsg: function(el){
		el.removeClass(this.options.errorClass);
		if(el.error != undefined){
			el.error.dispose();
			el.error = undefined;
		}
	},
	
	checkCaptcha: function(value){
		var catpchaok=false;
		var res=new Request.HTML({
			method: 'get',
			async: false,
			url:'./php/check.php?captcha='+value,
			link:'ignore',			
			onComplete: function(){
		//		alert(this.response.text);
				if(this.response.text=='jak_po_masle'){
					catpchaok=true;
				}
				else{
					catpchaok=false;
				}
			}
		}).send();
		return catpchaok;
	},
	
	checkUnique: function(username){
		var unique=false;
		var res=new Request.HTML({
			method: 'get',
			url:'./index.php?main=checkuser&ajax=1&username='+username,
			async:false,							
			onComplete: function(){
				if(this.response.text=='sliska_sprawa'){
					unique=false;
				}
				else{
					unique=true;
				}
			}
		}).send();		
		return unique;
	}
	

	
});




	
/**
 * ToolTips - show tooltips on hover
 * @version		0.1
 * @MooTools version 1.2.1
 * @author Constantin Boiangiu <info [at] constantinb.com>
 */

var MooTooltips = new Class({
	
	Implements: [Options],
	
	options: {		
		container: null,	// hovered elements
		hovered:null,		// the element that when hovered shows the tip
		extra:null,
		ToolTipClass:'ToolTips',	// tooltip display class
		toolTipPosition:1, // -1 top; 1: bottom
		showDelay: 500,
		sticky:false,		// remove tooltip if closed
		fromTop: 0,		// distance from mouse or object
		fromLeft: 0,
		duration: 100,		// fade effect transition duration
		fadeDistance: 20    // the distance the tooltip starts fading in/out
	},
	
	initialize: function(options) {
		this.setOptions(options||null);
		if(!this.options.hovered && !this.options.extra) return;	
		if( this.options.hovered ){
			if($(this.options.container))
				this.elements = $(this.options.container).getElements(this.options.hovered);
			else
				this.elements = $(document.body).getElements(this.options.hovered);		
		}
		if(!$defined(this.elements)) this.elements = new Array();
		
		var e = new Hash(this.options.extra);
		e.each(function(el){
			$(el.id).set( 'rel', JSON.encode(el) );
			this.elements.include($(el.id));			
		},this);
		
		this.currentElement = null;
		this.attach();

	},
	
	attach: function(){
		this.elements.each(function(elem, key){
			var t = new Hash(JSON.decode(elem.getProperty('rel')));
			t.include('visible',0);
			
			var tooltip = this.createContainer(t.sticky||this.options.sticky);
			/* 
				set the tooltip content.  
				depending on where the content is, set the according parameters.
				
				Parameters for every element are:
				- content: element id to get the tip content from a HTML element ( a div within the page for example )
				- text: just input some text directly into the parameter and there you have it
				- ajax: get the content from a remote page				
			*/
			if( t.content )
				tooltip.message.set({'html':$(t.content).get('html')});
			else if( t.text )
				tooltip.message.set({'html':t.text});
			else if( t.ajax ){
				tooltip.message.set({'html':t.ajax_message||'Loading... please wait.'});
				new Element('div', {'class':'loading'}).injectInside(tooltip.message);
				/* the actual ajax call is made when element is hovered */
			}				
			/*
				by default, the tooltip is positioned below the element.
				if placed above, the script switches the CSS classes on the footer and header
				to make it point at the element hovered
			*/
			if( !t.position ) t.position = this.options.toolTipPosition;
			if( t.position == -1 ){
				tooltip.header.set({'class':'dockTopHeader'});
				tooltip.footer.set({'class':'dockTopFooter'});
			}
			
			tooltip.container.store('properties', t);
			elem.store('tip', tooltip.container);
			$(this.options.container||document.body).adopt(tooltip.container);
			//$(document.body).adopt(tooltip.container);
			elem.removeProperties('title','rel');
			
			var over = this.enter.bindWithEvent(this, elem);
			var out = this.leave.bindWithEvent(this, elem);
			
			var startEvent = t.focus ? 'focus' : 'mouseenter'; 
			var endEvent = t.focus ? 'blur' : 'click';			
			
//			elem.addEvent(startEvent, over);
			//if( t.sticky || this.options.sticky){
				tooltip.container.addEvent('click', this.hide.pass(tooltip.container).bind(this)  );
			//}
			elem.addEvent(endEvent, out.pass(tooltip.container));				
			
			this.enter(null,elem);
		}, this);
	},
	
	enter: function(event, element){
		var tip = element.retrieve('tip');		
		/* all the tip properties are stored on the element */
		var elProperties = tip.retrieve('properties');
		if(elProperties.visible == 1) return;
		
		if( elProperties.ajax && !elProperties.loaded ){
			new Request.HTML({
				url: elProperties.ajax, 
				update: tip.getElement('.message'),
				/* if loading fails, set the loaded propety back to false so when the element is hovered, a new request is made */
				onFailure: function(){
					elProperties.set('loaded',0);
				}
			}).get();
			/* 
				set it as loaded when user hovers the element. 
				This way, while loading, if the user hovers the element again, it will not make a new request 
			*/
			elProperties.set('loaded',1);
		}
		
		/* if property target set on element, show tooltip after target */	
		var showAfter = elProperties.target ? $(elProperties.target) : element;
		var elSize = showAfter.getCoordinates($(this.options.container||document.body));
		var tipSize = tip.getCoordinates($(this.options.container||document.body));
		
		this.fromTop = 0;
		if( elProperties.position == -1 )
			this.fromTop = elSize.top - this.options.fromTop - tipSize.height;
		else
			this.fromTop = elSize.top + this.options.fromTop + elSize.height;
		
		var top_dist = this.fromTop + (elProperties.position||this.options.toolTipPosition) * this.options.fadeDistance ;
		
		tip.setStyles({
			'top': top_dist,
			'left': elSize.left + this.options.fromLeft,			
			'z-index':'110000'
		});		
		
		elProperties.set('leave', top_dist);		
		this.currentElement = tip;
//		this.timer = $clear(this.timer);
//		this.timer = this.show.delay(this.options.showDelay, this);
		this.show();
	},
	
	leave: function(element){
		var elProperties = element.retrieve('properties');
		/* if tooltip is visible and sticky, it closes when close button is clicked */
		if( (elProperties.sticky || this.options.sticky) && elProperties.visible ){
			return;	
		}
		this.hide(element);
	},
	
	hide: function(element){
		this.timer = $clear(this.timer);		
		var elProperties = element.retrieve('properties');
		element.morph({'opacity':0,'top': elProperties.leave});
		elProperties.visible = 0;
	},
	
	show: function(){
		this.currentElement.setStyles({'display':'block','opacity':0,'z-index':100000});
		this.currentElement.morph({'opacity':1, 'top':this.fromTop});		
		//this.setVisible.delay(this.options.duration, this);
		this.setVisible();
	},
	
	setVisible: function(){
		var elProperties = this.currentElement.retrieve('properties');
		elProperties.visible = 1;				
	},
	
	createContainer: function( sticky ){
		var container = new Element('div').set({
			'class':this.options.ToolTipClass, 
			'styles':{ 
				'position':'absolute',
				'top':0,
				'left':0,
				'opacity':0,
				'z-index':'100000' 
			},
			'morph':{
				duration:this.options.duration, 
				link:'cancel', 
				transition:Fx.Transitions.Sine.easeOut
			}
		});
		var header = new Element('div', {'class':'dockBottomHeader'});
		if( sticky ){
			var closeBtn = new Element('div', { 'class':'sticky_close' }).injectInside(header);
		}	
		var message = new Element('div', {'class':'message'});
		var footer = new Element('div', {'class':'dockBottomFooter'});
		container.adopt( header, message, footer );
		
		return {'container':container,'header':header,'message':message,'footer':footer,'close':closeBtn||null};		
	}	
});
