function create(tag,props) {	var elem=document.createElement(tag);
	for(var i in props) elem[i]=props[i];
	return elem;
}

gallary=function(images,obj) {	this.padding=15;

	this.photoContainer=create('div',{id:'bigPhotoHolder'});
	this.photoContainer.style.display='none';
	var wrap=create('div',{id:'bigPhotoWrap'});
	this.photoContainer.appendChild(wrap);

	this.photoTitle=create('div',{id:'bigPhotoTitle'});
	this.photoTitle.appendChild(create('div',{id:'bigPhotoTitle_wrap'}));
	wrap.appendChild(this.photoTitle);

	this.loader=create('div',{id:'bigPhotoLoader'});
	wrap.appendChild(this.loader);

	this.imageContainer=create('img');
	wrap.appendChild(this.imageContainer);


    this.photoLinks=create('div',{id:'bigPhotoLinks'});
	this.prevButton=create('a',{className:'prev',innerHTML:(obj && obj.prev_title ? obj.prev_title : '')});
	this.nextButton=create('a',{className:'next',innerHTML:(obj && obj.next_title ? obj.next_title : '')});
	this.photoLinks.appendChild(this.prevButton);
	this.photoLinks.appendChild(this.nextButton);
	wrap.appendChild(this.photoLinks);


	this.footer=create('div',{id:'bigPhotoFooter'});
	var wrap_footer=this.footer.appendChild(create('div',{id:'bigPhotoFooter_wrap'}));
	this.closeButton=create('div',{id:'bigPhotoClose'});
	this.closeButton.appendChild(create('a',{innerHTML:(obj && obj.close_title ? obj.close_title : '')}));
	wrap_footer.appendChild(this.closeButton);
	wrap.appendChild(this.footer);
	this.photoContainer.appendChild(wrap);

	this.over=create('div',{id:'overlay'});
 	this.over.onclick=gebtn(this.closeButton,"a")[0].onclick=this.close.bind(this);
 	this.nextButton.onclick=this.nextImage.bind(this);
 	this.prevButton.onclick=this.prevImage.bind(this);

	this.photoContainer.onmousewheel=this.over.onmousewheel=this.adjust.bind(this);
    if(window.addEventListener) {
    	this.over.addEventListener('DOMMouseScroll',this.adjust.bind(this),false);
    	this.photoContainer.addEventListener('DOMMouseScroll',this.adjust.bind(this),false);
    }

	hide(this.photoContainer);
	this.photos=[];
	this.originalPhotos=[];
	this.imageTitles=[];
    var src='';
    var img='';
	for(var i=0;i<images.length;i++) {		this.imageTitles[i]=this.getImageTitle(images[i]);

		img=gebtn(images[i],"img");
		if(img && img[0]) img=img[0];

		(function(context,k,elem){				addHandler(images[k],'click',function(event){context.openHandler(event,elem)});
		})(this,i,img);

		this.photos.push(images[i].href);
		this.originalPhotos.push(img.src);
	}

    this.photoContainer.style.width="400px";
    this.photoContainer.style.height="400px";


	var pageSize=getPageSize();
	this.over.style.width=pageSize[0]+"px";
	this.over.style.height=pageSize[1]+"px";

	this.curImage=undefined;

}

gallary.prototype={
	getImageTitle : function (img) {		if(img.title) return img.title;
		else return "";	},
	open : function (fotoElem) {		 	document.body.appendChild(this.over);
		    document.body.appendChild(this.photoContainer);
		    setOpacity(this.over,75);

            show(this.over);
            show(this.photoContainer);
            hide(this.loader);



            this.adjust();

            var src=fotoElem.src;
            var index=-1;
            for(var i=0;i<this.originalPhotos.length;i++) {
            	if(src==this.originalPhotos[i]) {
            		index=i;
            		break;
            	}
			 }
            if(index!=-1) this.changeImage(index);
	},
	openHandler : function(event,image) {
		this.open(image);
		event=event||window.event;
		if(event.preventDefault) event.preventDefault();
		event.returnValue=false;
	},
	changeImage : function (index) { 		 var heightWithoutImage;		 if(this.curImage) {
		 	heightWithoutImage=getHeight(this.photoContainer)-this.imageContainer.height;
		 } else heightWithoutImage=0;

		 this.hideAll();
		 this.curImage=index;

		 var image=new Image();
		 image.onload=(function(){		 	hide(this.loader);

			this.imageContainer.src = this.photos[this.curImage];
			this.photoTitle.firstChild.innerHTML=this.imageTitles[this.curImage];
			var startWidth=getWidth(this.photoContainer);
			var startHeight=getHeight(this.photoContainer);

			var css=resetCSS(this.photoContainer,{'width':image.width+2*this.padding+"px"});
			var titleHeight=fullHeight(this.photoTitle);
			restoreCSS(this.photoContainer,css);

			var endWidth=image.width+2*this.padding;
			var endHeight=image.height+fullHeight(this.footer)+(titleHeight && this.photoTitle.innerHTML!='' ? titleHeight : 0)+2*this.padding;

			if(startWidth!=endWidth) {
				var t=new tween(this.photoContainer,"width",startWidth,endWidth,0.5,2);
				t.addEventListener('EnterFrame',this.adjust.bind(this));
				if(startHeight!=endHeight) {					t.addEventListener('Complete',(function(){this.startHeightTween(startHeight,endHeight,index)}).bind(this));
				} else t.addEventListener('Complete',(function(){this.showImage(index)}).bind(this));
		  	} else if (startHeight!=endHeight) {		  		this.startHeightTween(startHeight,endHeight,index);
		  	} else this.showImage(index);

     	 }).bind(this);
		 image.src=this.photos[this.curImage];
	},
	startHeightTween : function(startHeight,endHeight,index){		var tt=new tween(this.photoContainer,"height",startHeight,endHeight,0.5,2);
		tt.addEventListener('Complete',(function(){this.showImage(index)}).bind(this));
		tt.addEventListener('EnterFrame',this.adjust.bind(this));
	} ,
	showImage : function(index) {		this.showAll();
		if(index==this.photos.length-1) hide(this.nextButton);
		else show(this.nextButton);
		if(index==0) hide(this.prevButton);
		else show(this.prevButton);
	},
	nextImage : function() {
		this.changeImage(this.curImage+1);
	},
	prevImage : function() {
		this.changeImage(this.curImage-1);
	},
	hideAll : function() {
            show(this.loader);
            hide(this.nextButton);
            hide(this.prevButton);
            hide(this.footer);
            hide(this.photoTitle);
            hide(this.imageContainer);
	},
	showAll : function() {
            hide(this.loader);
            show(this.nextButton);
            show(this.prevButton);
            show(this.footer);
            show(this.photoTitle);
            setOpacity(this.imageContainer,0);
            var t=new tween(this.imageContainer,'opacity',0,1,0.5,0);
            show(this.imageContainer);
	},
	adjust: function() {
		var w=getWidth(this.photoContainer);
		var h=getHeight(this.photoContainer);
		var t=scroll_Y()+(windowHeight()/2) - (h/2);
		if(t<0) t=0;
		var l=scroll_X()+(windowWidth()/2) - (w/2);
		if(l<0) l=0;

		if(l && t) {
			this.photoContainer.style.left=l+"px";
			this.photoContainer.style.top=t+"px";
		}

		var pageSize=getPageSize();
		this.over.style.width=pageSize[0]+"px";
		this.over.style.height=pageSize[1]+"px";
	},
	close : function(event) {
		hide(this.over);
		hide(this.photoContainer);
		event=event||window.event;
		if(event.preventDefault) event.preventDefault();
		event.returnValue=false;
	}
}


function getGallaryImages() {	var image_links=document.getElementsByTagName('a');
	var images=[];
	for(var i=0;i<image_links.length;i++) {
		if(image_links[i].attributes['rel'] && image_links[i].attributes['rel'].value=='gallary') {
			images[images.length]=image_links[i];
		}
	}
	return images;
}
