﻿function Gallery(id, min, max, defaultSize, urlSuffix){
	var d = document;
	var i;
	this.body = d.getElementById(id);
	this.imgs = this.body.getElementsByTagName('img');
	this.maxSize = defaultSize;
	this.urlSuffix = urlSuffix?urlSuffix:""; 
					//es kpnelu a SRCin, vor heto grvi chaps@
	this.sliderParentId = "sliderP";
	this.body.Gallery = this;	//DOM
	
	this.init = function(){
		this.sizes = new Array();
		var x= (max-defaultSize)/4;
		for(i=0;i<5;i++)
			this.sizes.push(Math.round(defaultSize + i*x));
		
		this.srcs = new Array();
		this.ids = new Array();
		this.commentPs = new Array();
		for(i=0;i<this.imgs.length;i++){
			this.srcs[i] = this.imgs[i].src;	//havaqenq SRCner@ massivi mej
			this.ids[i] = this.imgs[i].id.substr(5);	//IDner@ (id="photoNN")
			this.commentPs[i] = this.imgs[i].parentNode.parentNode.getElementsByTagName('p');	//comment-neri Per@
			this.imgs[i].parentGallery=this;
			this.imgs[i].galleryId = i;
			this.imgs[i].onclick=function(){
				this.parentGallery.openLarge(this.galleryId);
			};
			if(this.imgs[i].alt!=0)
				this.imgs[i].tooltip = new tooltip(this.imgs[i], this.imgs[i].alt, 250);
			
		}
		
		//SLIDER
		var x = new Slider(this.sliderParentId, min, max, defaultSize);
		new tooltip(x.body, "Փոխեք մանրանկարների չափերը");
		x.Gallery = this;
		x.onChange = function(v){
			this.Gallery.changeSize(v);
		};
	};
	
	this.changeSize = function(v){
		this.veradasavorel(v);
		var st;
		for(var i=0;i<this.imgs.length;i++){
			st = this.imgs[i].offsetWidth>this.imgs[i].offsetHeight ? "width" : "height";
			this.imgs[i].style[st]=v+'px';
			// KARELI A KLORACNEL !
		}
		if(v>this.maxSize)
			this.requestImages(v);
	};
	this.requestImages = function(size){
		for(i=0;i<this.sizes.length;i++)
			if(size<this.sizes[i]){
				size = this.sizes[i];
				this.maxSize = size;
				break;
			}
		
		for(i=0;i<this.imgs.length;i++)
			this.imgs[i].src = this.srcs[i]+this.urlSuffix + size;
	};
	this.veradasavorel = function(size){
		var padding = 12;
		//gtnenq motaka TRn
		var TR = this.imgs[0].parentNode;
		while(TR.tagName.toLowerCase() != 'tr')
			TR = TR.parentNode;
		// gtanq ...
		var TBody = TR.parentNode;
		var TDs = TBody.getElementsByTagName('td');
		var TRs = TBody.getElementsByTagName('tr');
		var q = TRs.length; //hishenq, vor heto jnjenq
		
		var perRow = Math.floor(
				TR.parentNode.offsetWidth / (size+padding) );
		var numberOfRows = Math.ceil( TDs.length / perRow );
		
		var i,j,k=TDs.length-1;
		var newTRs=new Array();
		var x;
		for(i=0;i<numberOfRows;i++){
			x=d.createElement('tr');
			for(j=0;j<perRow;j++){
				x.appendChild(TDs[0]);
				// amen mi TDn urish TR teghapokheluc
				// "TDs" massiv@ poqranum a, dra hamar
				// misht arajin elementn enq tanum
				if(TDs.length==0) break;
			}
			newTRs.push(x);
			//miangamic append chi kareli anel, vorovhetev
			// TDs massivi length@ eli kmecana !
		}
		for(i=0;i<q;i++)
			TBody.removeChild(TRs[0]);
		for(i=0;i<newTRs.length;i++)
			TBody.appendChild(newTRs[i]);
	};
	
	this.openLarge = function(id){
		this.currentId = id;
		this.currentPhotoId = this.ids[id];
		if(!this.preview)
			this.createPreviewDiv();
		if(this.preview.style.display!="block"){
			this.preview.style.display="block";
		}
		this.preview.img.src = this.srcs[id];
		this.preview.img.style.height = "480px";
		this.preview.img.style.opacity = "0.4";
		this.preview.text.show(true);
		this.preview.img.onload = function(){
			this.src = this.Gallery.getLargeSrc(id);
			this.onload = function(){
				this.style.opacity="1";
				this.Gallery.preview.text.show(false);
			}
		};
		
		this.preview.description.innerHTML = this.imgs[id].alt;
		
		// slaqner@ ! 
		var x = !this.srcs[id-1] ? function(){return;} : function(){this.Gallery.openLarge(id-1);};
		this.preview.left.onclick = x;
			x = !this.srcs[id+1] ? function(){return;} : function(){this.Gallery.openLarge(id+1);};
		this.preview.right.onclick =x;
		
		//COMMENTS
		this.refreshComments(id);
		this.preview.comments.style.display = 'none';	//ete nakhord nkari jamanak erevum er, hima taqcnenq
	};
	this.refreshComments = function(){
		// Previewi mej commentner@ jnjum enq, grum enq tvial id-i hamar eghacner@
		this.preview.commentsList.innerHTML='';
		var commentsNumber = this.commentPs[this.currentId].length;
		for(var i=0;i<commentsNumber;i++){
			this.preview.commentsList.innerHTML += '<p class="comment">' + this.commentPs[this.currentId].item(i).innerHTML + '</p>';
		}
		this.preview.commentsCount.innerHTML = '('+commentsNumber+')';		
	};
	
	
	this.createPreviewDiv = function(){
		this.preview = this.createElem('div',"galleryPreview",'');
		d.body.appendChild(this.preview);
			
		this.preview.img = d.createElement('img');
		this.preview.img.id = "photo";
		this.preview.img.Gallery = this;
		
		// Nkaragrutiun@
		this.preview.description= this.createElem("div","photoDesc",'');
		
		//Knopkeq@
		var close = this.createElem('div','close','X');
		close.Gallery = this;
		close.onclick = function(){
			this.Gallery.preview.style.display = "none";
		};
		
		this.preview.left =this.createElem('div','lr left','&lt;');
		this.preview.right=this.createElem('div','lr right','&gt;');
		
		this.preview.text = this.createElem('div','text','Loading...');
		this.preview.text.show = function(b){
			this.style.display = b?"block":"none";
		};
		
		this.preview.appendChild(close);
		this.preview.appendChild(this.preview.left);
		this.preview.appendChild(this.preview.right);
		this.preview.appendChild(this.preview.text);
		this.preview.appendChild(this.preview.img);
		this.preview.appendChild(this.preview.description);
		
		//COMMENTS
		this.preview.addLink = this.createElem('a','commentAdd','Մեկնաբանել լուսանկարը');
		this.preview.addLink.onclick = createForm;
		
		this.preview.viewLink = this.createElem('a','commentView','Ցույց տալ/թաքցնել մեկնաբանությունները ');
		this.preview.viewLink.onclick = function(){
			this.Gallery.preview.comments.style.display=
				(this.Gallery.preview.comments.style.display!='block'?'block':'none');
		};
		this.preview.commentsCount = this.createElem('span','','');
		this.preview.viewLink.appendChild(this.preview.commentsCount);
		
		this.preview.comments = this.createElem('div','comments','');
		this.preview.commentsList = this.createElem('div','commentsList','');
		
		this.preview.appendChild(this.preview.addLink);
		this.preview.appendChild(this.preview.viewLink);
		this.preview.appendChild(this.preview.comments);
		this.preview.comments.appendChild(this.preview.commentsList);
	};
	
	this.getLargeSrc = function(id){
		return this.srcs[id].substr(0, this.srcs[id].search(/\?/));
		//ktrum a minchev ? nshan@
	};
	
	//PRIVATE
	this.createElem = function(tag, classname, innerhtml){
		var x = d.createElement(tag);
		x.className = classname;
		x.Gallery = this;
		x.innerHTML = innerhtml;
		return x;
	};
	
	this.init();
	
}

//ADD-COMMENT FORM 
// hech lav chem grel, aranc "class"i ideai, baic de haves chunem noric grelu
function createForm(){ //=a.onclick
	this.f = document.createElement('form');
	this.f.className = 'addComment';
	
	this.f.toggle = function(){	//enable/disable
		var bln = this.textarea.disabled==true?false:true;
		this.input.disabled=bln;
		this.textarea.disabled=bln;
		this.hastatel.disabled=bln;
		this.herqel.disabled=bln;
	}
	
	this.f.responseHandler = function(f, resp){
		//stegh THIS@ window-n a stacvum, amen inch petq a pokhancel PARAMSov
		//f-@ mer formn a
		if(resp=="OK"){	//amen inch lav a
			var d = new Date();
			d = d.getFullYear() + '-' + (d.getMonth()+1) + '-' + (d.getDate()) + ' '
				+ (d.getHours()) + ':' + (d.getMinutes())+ ':' + (d.getSeconds());
			
			//Hima amenaskzbnakan nkari taki p.hiddenComment-ner@ avelacnenq mekov ! heto refresh kanenq commentner@ Galleryum
			var newp = document.createElement('p');
			newp.innerHTML = '<span>'+d+'<span>'+f.input.value+'</span></span>'+f.textarea.value;
			newp.className = 'hiddenComment';
			var id = f.parentNode.Gallery.currentId;
			var parentTD = f.parentNode.Gallery.imgs[id].parentNode.parentNode;
			parentTD.insertBefore( newp, parentTD.firstChild);
			f.parentNode.Gallery.refreshComments(); //refresh
			
			f.herqel.disabled = false; //miacnenq, vor CLICK@ kanchenq
			f.herqel.click();
		}else{
			f.errdiv = document.createElement("p");
			f.errdiv.className="error";
			f.errdiv.innerHTML = resp;
			f.errdiv.appendChild(document.createElement('img'));
			f.insertBefore(f.errdiv,f.textarea);
			
			f.toggle();
		}
	};
	
	this.f.inputlabel=document.createElement('label');
	this.f.inputlabel.innerHTML = 'Ձեր անունը';
	this.f.input=document.createElement('input');
	this.f.textarea=document.createElement('textarea');
	
	this.f.hastatel = document.createElement('button');
	this.f.hastatel.innerHTML = "Ավելացնել մեկնաբանություն";
	this.f.hastatel.onclick = function(){
		// stegh THIS@ arden BUTTONn a, baic ira form@ eli mer formn a !
		var name = this.form.input.value;
		var comment = this.form.textarea.value;
		this.form.toggle();
		if(this.form.errdiv){
			this.form.removeChild(this.form.errdiv);
			this.form.errdiv = null;
		}
		var id = this.form.parentNode.Gallery.currentPhotoId;
		AJAX("addComment?photoId="+id, "POST", "name="+name+"&comment="+comment,this.form.responseHandler, this.form);
		return false;
	};
	
	this.f.herqel = document.createElement('button');
	this.f.herqel.innerHTML = "Հերքել";
	this.f.herqel.onclick = function(){
		//this.form.previousSibling.style.display = "block";
		this.form.parentNode.removeChild(this.form);
		return false;
	};
	
	this.f.appendChild(this.f.inputlabel);
	this.f.appendChild(this.f.input);
	this.f.appendChild(this.f.textarea);
	this.f.appendChild(this.f.hastatel);
	this.f.appendChild(this.f.herqel);
	
	this.parentNode.appendChild(this.f);

	this.f.input.focus();
	
	return false;
}
