/*
 ------- IGal_object -------------
	version 1.4 2009-08-06
	IGal © 2009 Gossweiler Media AG
*/

IGal_object=function(args){
	this.args=args;
	this.init();
}

IGal_object.prototype.newDom=function(objPar,objTyp,objID,objClass){
	//domObb=this.newDom(meinParentObj,'div','meineID','meineClasse');
	
	var obj= document.createElement(objTyp);
	if(objID!=''){
		$(obj).setAttribute('id',objID);
	}

	if(objClass!=''){
		$(obj).addClassName(objClass);
	}

	if(objPar!=0){
		objPar.appendChild(obj);
	}

	return(obj);
}

IGal_object.prototype.init=function(){
	
	this.pref=new Object();
	//  main obj
	this.firstTime=true;
	this.currentImageDom=1;
	this.pageNr=0;
	this.currentNr=0;


	this.domParent=this.args['parent'] ? $(this.args['parent']):document.body;
	
	this.pref.closeLabel=this.args['closeLabel'] ? this.args['closeLabel']:"&nbsp;";

	var temp=this.args['itemloadLabel']
	if(temp){
		this.pref.itemloadLabel= temp=="icon" ? "&nbsp;" : temp;
	}else{
		this.pref.itemloadLabel=""
	}
	

	this.pref.projectorWidth=	this.args['projectorDim'][0];	//780;
	this.pref.projectorHeight=	this.args['projectorDim'][1];	//520
	this.pref.mainOffsetTop=	this.args['galOffset'][0];	//100
	this.pref.mainOffsetLeft=	this.args['galOffset'][1];	//40;
	
	this.pref.borderLeft=8;
	this.pref.borderRight=8;
	this.pref.pageLeftWidth=40;
	this.pref.pageRightWidth=40;
	
	this.pref.domListWidth=this.pref.projectorWidth-(this.pref.borderLeft+this.pref.borderRight);
	

	this.pref.tCursor='url(\'http://w4w.g-os.ch/i/cursor/lupe.cur\'), pointer;';
	this.pref.imgPrePath="http://w2w.g-os.ch";

	// ----- Args einlesen ----------

	/*
	'sourceMediaMatrix':'mediamatrix'
	'sourceMediaTN':'mediatn'
	'sourceMediaElmList':'mediaElmList'
	'matrixTNW':48
	'matrixTNH':48
	'matrixTNSpaceX':9.6
	'matrixTNSpaceY':9.6
	*/

	var n=0;
	this.aBackRef=new Object();

	this.runmode=this.args['runmode'];	// gallery, ptimg
   	this.path=this.args['path'];

	this.listTNW=(this.args['listTNDim'][0]);
	this.listTNH=(this.args['listTNDim'][1]);
	this.listTNSpaceX=(this.args['listTNDim'][2]);

	if(this.runmode=='gallery'){
		// ---- Gallery ---

		this.matrixTNW=(this.args['matrixTNDim'][0]);
		this.matrixTNH=(this.args['matrixTNDim'][1]);
		this.matrixTNSpaceX=(this.args['matrixTNDim'][2]);
		this.matrixTNSpaceY=(this.args['matrixTNDim'][3]);

		this.mediaMatrixImg=	$(this.args['sourceObj'][0]);
		this.mediaTNListImg=	$(this.args['sourceObj'][1]);	// das BildlistenIMG
		this.aMediaElm=		($(this.args['sourceObj'][2]).innerHTML).split(',');
		this.aMediaArchivItemID=($(this.args['sourceObj'][3]).innerHTML).split(',');
		this.aMediaArchivItemReccode=($(this.args['sourceObj'][4]).innerHTML).split(',');

	}

	this.listTNVisibleElm=Math.floor((this.pref.projectorWidth+this.listTNSpaceX-(2*this.listTNSpaceX))/(this.listTNW+this.listTNSpaceX));

	this.listCenterX=this.pref.projectorWidth/2;	//this.domList.getWidth()/2;

	this.aChild=new Array;

	this.domMain=this.newDom(0,'div','igal','igal');
	this.domMain.hide();
	this.domInner=this.newDom(this.domMain,'div','igalinner','inner');
	this.domTransfer=this.newDom(this.domMain,'div','igalTransfer','');
	this.domProjector=this.newDom(this.domInner,'div','igalprojector','projector');
	this.domImg1=this.newDom(this.domProjector,'img','igalImg1','bild');
	this.domImg1.setOpacity(0.0);
	this.domImg2=this.newDom(this.domProjector,'img','igalImg2','bild');
	this.domImg2.setOpacity(0.0);
	this.domInfo=this.newDom(this.domInner,'div','igalInfo','');
	this.domInfoLegend=this.newDom(this.domInfo,'p','igalInfoLegend','');
	this.domInfoLegend.update("&nbsp;");
	this.domList=this.newDom(this.domInner,'div','igallist','list');
	this.domListElm=this.newDom(this.domList,'div','igallistelm','');
	this.domListElmBorder=this.newDom(this.domListElm,'div','igallistelmBorder','');
	this.domListPageLeft=this.newDom(this.domList,'div','igallistPageLeft','igalpageleftpas');
	this.domListPageRight=this.newDom(this.domList,'div','igallistPageRight','igalpagerightpas');
	this.domBottom=this.newDom(this.domInner,'div','igalbottom','');

	var tBlaettern='<div id=\"igalleft\" class=\"igalleftact\">&nbsp;</div><div id=\"igalright\" class=\"igalrightact\">&nbsp;</div>'
	this.domBottom.update("<div id=\"igalautor\"><p>&nbsp;</p></div><div id=\"igalblaettern\">"+tBlaettern+"</div><div id=\"igaltool\">"+(this.pref.itemloadLabel ? "<div id=\"igalitemload\"><p class=\"close\">"+this.pref.itemloadLabel+"</p></div>" :"")+"<div id=\"igalclose\"><p class=\"close\">"+this.pref.closeLabel+"</p></div></div>");

	// ------ Alles an parent Obj anhaengen ----
	this.domParent.appendChild(this.domMain);

	// rollover cursor
	if (navigator.appVersion.match(/\bMSIE\b/)){
		var tCursor=this.pref.tCursor;
	}else if (navigator.appVersion.match(/\bSafari\b/)){
		var tCursor='-webkit-zoom-in';
	}else{
		var tCursor='-moz-zoom-in';
	}

	if(this.runmode=='gallery'){
		// ---- Gallery ---

		if(this.aMediaElm.last()==""){
			this.aMediaElm.pop();
		}

		if(this.aMediaArchivItemID.last()==""){
			this.aMediaArchivItemID.pop();
		}

		if(this.aMediaArchivItemReccode.last()==""){
			this.aMediaArchivItemReccode.pop();
		}
		/* --- mediaTNListImg --- */
		this.domListElm.appendChild(this.mediaTNListImg);
		this.mediaTNListImg.setStyle({'position':'absolute','left':'0px','top':'0px'});

		this.mediaTNListImg.observe('click', this.evClickMediaListImg.bind(this));

		this.mediaMatrixImg.observe('click', this.evClickMediaMatrixImg.bind(this));

		this.childAnz=this.aMediaElm.length;
		
		for(n=0;n<this.childAnz;n++){

			obj=new Object;
			obj['mediaID']=this.aMediaElm[n];
			obj['mediaArchivItemID']=this.aMediaArchivItemID[n];
			obj['mediaArchivItemReccode']=this.aMediaArchivItemReccode[n];
			obj['nr']=n;
			this.aChild.push(obj);
			this.aBackRef['ref'+n]=obj;

		}
	}else{
		// ---- ptImage ---
		aPTImage=$$('img.ptimg');

		m=aPTImage.length;
		for(n=0;n<m;n++){
			domImg=aPTImage[n];
			mediaID=domImg.id.substr(4,9)
			if((divobj=$('imgdiv_'+mediaID))){
				if(true){	//!$('img_'+mediaID).hasClassName('hide')){

					obj=new Object;
					obj['mediaID']=mediaID;
					obj['srcDivObj']=divobj;
					obj['nr']=n;
					obj['igal']=this;
					this.aChild.push(obj);
					this.aBackRef['ref_'+mediaID]=obj;
					$(divobj).setStyle({ cursor: tCursor });
					$(divobj).observe('click', this.evClick.bind(obj));

				}
			}
		}
		this.childAnz=this.aChild.length;
	}

	var w=this.childAnz *(this.listTNW+this.listTNSpaceX);
	this.domListElm.setStyle({'width':w+'px'});

	this.domListElmBorder.setStyle({'width':this.listTNW+"px"});
	this.domProjector.setStyle({'width':this.pref.projectorWidth+"px"});	
	this.domInfo.setStyle({'width':this.pref.projectorWidth+"px"});
	this.domBottom.setStyle({'width':this.pref.projectorWidth+"px"});
	this.domInner.setStyle({'width':this.pref.projectorWidth+"px"});	
	this.domList.setStyle({'width':this.pref.domListWidth+"px"});
	this.domListPageLeft.setStyle({'position':'absolute','left':-(this.pref.borderLeft)+"px"});
	this.domListPageRight.setStyle({'position':'absolute','left':(this.pref.domListWidth+this.pref.borderRight-this.pref.pageLeftWidth)+"px"});



	this.pageMax=Math.floor(this.childAnz/this.listTNVisibleElm); //0 -x

	if(this.pageMax==0){	// nur eine Seite
		this.domListPageLeft.hide();
		this.domListPageRight.hide();
	}
	
	if(this.childAnz==1){	// nur eine Bild
	
		$('igalleft').hide();
		$('igalright').hide();
		this.domListElm.hide();
	}

	if(this.pref.itemloadLabel){
		$('igalitemload').observe('click', this.evClickItemLoad.bind(this));
		$('igalitemload').setStyle({ cursor: 'pointer'});
	}

	$('igalclose').observe('click', this.evClickClose.bind(this));
	$('igalclose').setStyle({ cursor: 'pointer'});

	//console.dir(this);

}

IGal_object.prototype.cf=function(objOut,objIn,path,sec,checkLoad){
	this.cfInterval = setInterval(this.cfLoop.bind(this), 80);
	this.cfObjOut=objOut;
	this.cfObjIn=objIn;
	this.cfObjSec=sec;
	this.cfObjCheckLoad=checkLoad;

	this.cfObjIn.setOpacity(0.0);
	this.cfObjIn.src="";

	this.cfObjIn.onload = this.cfLoopCheck.bind(this);

	this.cfStart=false;
	this.cfOpacity1=0.0;
	this.cfOpacity2=this.cfObjOut.getStyle('opacity');
	this.cfTimeStep1=1/sec*(80/1000);
	this.cfTimeStep2=this.cfOpacity2/sec*(80/1000);

	this.cfObjIn.src=path//+"?"+Math.random()*999999999;

}

IGal_object.prototype.cfLoopCheck=function(){
	
	this.cfStart=true;
	this.cfTime=this.cfObjSec;
	if(this.cfObjIn.naturalWidth !=undefined){
		this.cfObjIn.style.width=this.cfObjIn.naturalWidth+"px";
		this.cfObjIn.style.height=this.cfObjIn.naturalHeight+"px";
	}
	this.cfObjIn.style.left=(this.listCenterX-(this.cfObjIn.width/2))+"px";

}

IGal_object.prototype.cfLoop=function(timePos){

	if(this.cfStart){

		this.cfOpacity1+=this.cfTimeStep1;
		this.cfOpacity2-=this.cfTimeStep2;

		if(this.cfOpacity1<1.0){
			this.cfObjIn.setOpacity(this.cfOpacity1);
			this.cfObjOut.setOpacity(this.cfOpacity2);
		}else{

			this.cfObjIn.setOpacity(1.0);
			this.cfObjOut.setOpacity(0.0);
			clearInterval(this.cfInterval);
			this.cfStart=false;
		}

	}

}

IGal_object.prototype.getChildObjFromDom=function(myDom){
	var mediaID=myDom.id.substr(4,9)
	var obj=this.aBackRef['ref_'+mediaID];
	return(obj);
}


IGal_object.prototype.evClickItemLoad=function(event){
	nr=this.currentNr;
	obj=this.aChild[this.currentNr];
	this.origImgFileID=obj['mediaID'];
	if(this.runmode=='gallery'){
		var path=this.path+obj['mediaArchivItemReccode']+'/?mode=itemload'

		var newWin = window.open(path, "IGalImage", "width=600,height=400,scrollbars=yes");
	newWin.focus();
	}


	
/*
var element = event.element();

	element.target='_blank';
element.href='test.gos?hitCount=1&linkID=';
*/

}

IGal_object.prototype.evClickClose=function(event){
	obj=this;
	obj.close();	// this ist childObj
}


IGal_object.prototype.evClick=function(event){
	obj=this;
	obj['igal'].setup(obj.nr);	// this ist childObj
}

IGal_object.prototype.evClickTN=function(event){
	var element = event.element();
	var nr=parseInt($(element).id.substr(9));
	iGalObj.showImg(nr);	// nur die Nr uebergeben
}

IGal_object.prototype.evClickMediaListImg=function(event){

	var offsetPoint=this.mediaTNListImg.cumulativeOffset();
	var centerPixelX=(Event.pointerX(event)-offsetPoint[0]);

	var cols=Math.round(this.mediaTNListImg.getWidth()/(this.listTNW+this.listTNSpaceX));
	var matrixX=Math.floor(centerPixelX/(this.listTNW+this.listTNSpaceX));
	var nr=matrixX;
	if(nr<this.childAnz){
		iGalObj.showImg(nr);
	}
}

IGal_object.prototype.evClickMediaMatrixImg=function(event){

	var offsetPoint=this.mediaMatrixImg.cumulativeOffset();

	var centerPixelX=(Event.pointerX(event)-offsetPoint[0]);
	var centerPixelY=(Event.pointerY(event)-offsetPoint[1]);
	var cols=Math.round(this.mediaMatrixImg.getWidth()/(this.matrixTNW+this.matrixTNSpaceX));
	var matrixX=Math.floor(centerPixelX/(this.matrixTNW+this.matrixTNSpaceX));
	var matrixY=Math.floor(centerPixelY/(this.matrixTNH+this.matrixTNSpaceY));
	var nr=matrixX+cols*matrixY;
	if(nr<this.childAnz){
		iGalObj.setup(nr);
	}
}

IGal_object.prototype.evClickLeft=function(event){
	nr=iGalObj.currentNr-1;
	if(nr>=0){
		iGalObj.showImg(nr);
	}
}

IGal_object.prototype.evClickRight=function(event){
	nr=iGalObj.currentNr+1;
	if(nr<iGalObj.childAnz){
		iGalObj.showImg(nr);
	}
}

IGal_object.prototype.evClickMediaListPageLeft=function(event){
	nr=iGalObj.currentNr-this.listTNVisibleElm;
	if(nr>=0){
		iGalObj.showImg(nr);
	}
}

IGal_object.prototype.evClickMediaListPageRight=function(event){
	nr=iGalObj.currentNr+this.listTNVisibleElm;
	if(nr>=this.childAnz-1){
		nr=this.childAnz-1;
	}
	iGalObj.showImg(nr);
}

IGal_object.prototype.setup=function(nr){



	if(this.runmode=='gallery'){
		this.domMain.style.top=this.pref.mainOffsetTop+'px';
		this.domMain.style.left=this.pref.mainOffsetLeft+'px';
	}else{
		var off=this.aChild[nr].srcDivObj.cumulativeOffset();
		this.domMain.style.top    = (off[1]-23) + 'px';
	}

	if(this.firstTime){
		this.firstTime=false;

		if(this.runmode=='popupview'){
			var obj=0;
			var domObj=0;
			w=this.listTNW;	//56
			h=this.listTNH;	//56
			s=this.listTNSpaceX; //8
			for(n=0;n<this.childAnz;n++){
				obj=this.aChild[n];
				
				var origImgPath=$('img_'+obj['mediaID']).src;
				origImgFile=origImgPath.substring((origImgPath.length)-32);
				origImgFileID=origImgFile.substring(19);			
				
				obj['tnDivObj']=this.newDom(this.domListElm,'div','tnDivObj_'+obj['nr'],'igal_tn');
				obj['tnDivObj'].setStyle({'width':w+'px','height':h+'px','marginRight':s+'px'});

				obj['tnImgObj']=this.newDom(obj['tnDivObj'],'img','tnImgObj_'+obj['nr'],'igal_tn');
				obj['tnImgObj'].setStyle({'width':w+'px','height':h+'px'});
				obj['tnImgObj'].src=this.pref.imgPrePath+'/!-17-'+w+'-'+h+'-0-0,0-0,5-0,8-'+ origImgFileID;
				obj['tnImgObj'].observe('click', this.evClickTN);
			}
		}
	}

	this.showImg(nr);
	this.domMain.show();
	this.domMain.scrollTo();
}

IGal_object.prototype.showImg=function(nr){

	// vorherige Objekte zurueck setzen
	if(this.currentNr>=0){
		obj=this.aChild[this.currentNr];
	}

	this.currentNr=nr;
	obj=this.aChild[this.currentNr];
	this.origImgFileID=obj['mediaID'];
	if(this.runmode=='gallery'){
		var ajaxPath=this.path+obj['mediaArchivItemReccode']+'/';

		new Ajax.Request(ajaxPath, {
			encoding:'UTF-8',
			method: 'post',
			postBody:'previewMode=ajax',

			onComplete:function(transport){

				$('igalTransfer').update(transport.responseText);
				var imgPath=$('igalDataImg').innerHTML;
				var obj=iGalObj.aChild[iGalObj.currentNr];

				if(iGalObj.currentImageDom==1){
					iGalObj.currentImageDom=2;
					iGalObj.cf($('igalImg1'),$('igalImg2'),imgPath,0.4,true);
				}else{
					iGalObj.currentImageDom=1;
					iGalObj.cf($('igalImg2'),$('igalImg1'),imgPath,0.4,true);
				}

				//$('igalImg').src=imgPath;

				if(iGalObj.runmode=='gallery'){
					$('igalInfoLegend').update($('igalDataLegend').innerHTML);
				}else{
					if(obj['srcDivObj'].select('p.legende').length>0){
						$('igalInfoLegend').update(obj['srcDivObj'].select('p.legende')[0].textContent);
					}else{
						$('igalInfoLegend').update("");
					}
				}

			}

		});

	}else{

		var ajaxPath=this.path+'?recid='+obj['mediaID'];
		var domCurrentImgObj=$('img_'+obj['mediaID']);
		var imgPath="";
		w=this.pref.projectorWidth;
		h=this.pref.projectorHeight;
		factorProjector=w/h;

		whex='0320';	//800
		hhex='0000';	//520
		var origW=domCurrentImgObj.width;
		var origH=domCurrentImgObj.height;
		var factorA=origW/origH;

		//var factorB=this.pref.projectorWidth/this.pref.projectorHeight;

		if(factorA<=1){//<factorProjector){
			// hochformat
			w=(this.pref.projectorHeight*(origW/origH)).toFixed(0);
			h=this.pref.projectorHeight;
			imgPath=this.pref.imgPrePath+'/!-16-'+w+'-'+h+'-0-0,0-0,5-0,8-'+ this.origImgFileID+".jpg";

		}else{
			//querformat

			if(domCurrentImgObj.hasClassName('resize')){
			w=this.pref.projectorWidth;
			h=(this.pref.projectorWidth/(origW/origH)).toFixed(0);
				imgPath=this.pref.imgPrePath+'/!-16-'+w+'-'+h+'-0-0,0-0,5-0,8-'+ this.origImgFileID+".jpg";
			}else{
				w=this.pref.projectorWidth;
				h=this.pref.projectorHeight
				imgPath=this.pref.imgPrePath+'/!-17-'+w+'-'+h+'-0-0,0-0,5-0,8-'+ this.origImgFileID+".jpg";
			}

		}

		// =================

		var obj=iGalObj.aChild[iGalObj.currentNr];

		if(iGalObj.currentImageDom==1){
			iGalObj.currentImageDom=2;
			iGalObj.cf($('igalImg1'),$('igalImg2'),imgPath,0.4,true);
		}else{
			iGalObj.currentImageDom=1;
			iGalObj.cf($('igalImg2'),$('igalImg1'),imgPath,0.4,true);
		}

		if(obj['srcDivObj'].select('p.legende').length>0){
			$('igalInfoLegend').update(obj['srcDivObj'].select('p.legende')[0].textContent);
		}else{
			$('igalInfoLegend').update("");
		}

		// =================

	}

	if(this.childAnz>1){
		if(this.currentNr==0){
			// ganz links
			$('igalleft').setAttribute('class','igalleftpas');
			$('igalright').setAttribute('class','igalrightact');

			$('igalleft').stopObserving('click', this.evClickLeft);
			$('igalright').observe('click', this.evClickRight);

			$('igalleft').setStyle({ cursor: 'auto'});
			$('igalright').setStyle({ cursor: 'pointer'});
			this.domProjector.setStyle({ cursor: 'pointer'});

			this.domProjector.observe('click', this.evClickRight);

		}else if(this.currentNr<(this.childAnz-1)){
			//mitten drin
			$('igalleft').setAttribute('class','igalleftact');
			$('igalright').setAttribute('class','igalrightact');
			$('igalleft').observe('click', this.evClickLeft);
			$('igalright').observe('click', this.evClickRight);
			this.domProjector.observe('click', this.evClickRight);

			$('igalleft').setStyle({ cursor: 'pointer'});
			$('igalright').setStyle({ cursor: 'pointer'});
			this.domProjector.setStyle({ cursor: 'pointer'});

		}else{
			//ganz rechts
			$('igalleft').setAttribute('class','igalleftact');
			$('igalright').setAttribute('class','igalrightpas');
			$('igalleft').observe('click', this.evClickLeft);
			$('igalright').stopObserving('click', this.evClickRight);
			this.domProjector.stopObserving('click', this.evClickRight);

			$('igalleft').setStyle({ cursor: 'pointer'});
			$('igalright').setStyle({ cursor: 'auto'});
			this.domProjector.setStyle({ cursor: 'auto'});
		}
	}

	this.visPos=nr % this.listTNVisibleElm;
	this.pageNr=Math.floor(nr/this.listTNVisibleElm);


	/*  Page Buttons */
		$('igallistPageLeft').	stopObserving	('click');
		$('igallistPageRight').	stopObserving	('click');

	if(this.childAnz>this.listTNVisibleElm){
		if(this.pageNr<1){
			// ganz links
			$('igallistPageLeft').	setAttribute('class','igalpageleftpas');
			$('igallistPageRight').	setAttribute('class','igalpagerightact');

			$('igallistPageLeft').	stopObserving	('click');
			$('igallistPageRight').	observe		('click', this.evClickMediaListPageRight.bind(this));

			$('igallistPageLeft').	setStyle({ cursor: 'auto'});
			$('igallistPageRight').	setStyle({ cursor: 'pointer'});

		}else if(this.pageNr<this.pageMax){
			//mitten drin
			$('igallistPageLeft').	setAttribute('class','igalpageleftact');
			$('igallistPageRight').	setAttribute('class','igalpagerightact');
			$('igallistPageLeft').	observe		('click', this.evClickMediaListPageLeft.bind(this));
			$('igallistPageRight').	observe		('click', this.evClickMediaListPageRight.bind(this));

			$('igallistPageLeft').	setStyle({ cursor: 'pointer'});
			$('igallistPageRight').	setStyle({ cursor: 'pointer'});

		}else{
			//ganz rechts
			$('igallistPageLeft').	setAttribute('class','igalpageleftact');
			$('igallistPageRight').	setAttribute('class','igalpagerightpas');
			$('igallistPageLeft').	observe		('click', this.evClickMediaListPageLeft.bind(this));
			$('igallistPageRight').	stopObserving	('click');

			$('igallistPageLeft').	setStyle({ cursor: 'pointer'});
			$('igallistPageRight').	setStyle({ cursor: 'auto'});
		}
	}else{
		// es gibt nur eine Seite

	}


	// --- Liste visualisieren

		this.domListElm.style.left=(0-(this.pageNr*this.listTNVisibleElm)*(this.listTNW+this.listTNSpaceX))+"px";	
		this.domListElmBorder.style.left=(this.currentNr)*(this.listTNW+this.listTNSpaceX)+"px";

}

IGal_object.prototype.close=function(){

	this.domMain.hide();
}