// Erzeugt eine Bilder-Gallery
// Autor: Martin Plangg, martin.plangg@aon.at

// Dateien: gallery.js, gallery.css, gallery.htm

// Definition der Liste der Galerien
var ofGalleryArray;		//Array mit allen Gallerien
var ofGalleryArrayOffset = 5;	//Anzahl der Spalten im Array Gallerien
var ofGalleryCols;		//Anzahl Gallerien in der Uebersicht
var ofGallerySequence;		//Reihenfolge der Galerien


// Kategorie
var ofGalleryCatArray;		//Array Kategorien
var ofGalleryCatArrayOffset = 2;//Anzahl der Spalten im Array Kategorien
var ofGalSelCat;		//Ausgewählte Kategorie

// Globale Variablen zum Definieren pro Galerie
var ofGallery = "";		//Galerie-Name
var ofGalTitle;			//Überschrift
var ofGalBottomText;		//Text unter Thnumb-Nails
var ofGalFootText;		//Fusstext (Bilder von ...)
var ofGalPicPath;		//Pfad-Offset zu Bildern
var ofGalTnPath;		//Pfad-Offset zu ThumbNails
var ofGalCols;			//Max Anzahl Spalten ThumbNails
var ofGalRows;			//Max Anzahl Zeilen ThumbNails
var ofGalArray;			//Array mit Bildinformationen
var ofGalMainWidth;		//Vordefinierte Breite Gross-Bild
var ofGalTnWidth;		//Vordefinierte Breite ThumbNails

var ofGalPicNum = 0;		//Aktuelle Bildnummer
var ofGalArrowImgPrev = "../images/pfeilprev.gif";
var ofGalArrowImgNext = "../images/pfeilnext.gif";

// Fixe Variablen (Programmcode-Abhaengig
var ofGalPicArrOffset = 3;	//Anzahl der Spalten im BilderArray


// INIT-Function
function ofGalInit()
{
	ofGallery = "";
	ofGalTitle = "";
	
	ofGalleryArray = new Array();
	ofGalleryCols = 4;
	
	ofGalArray = new Array();

	ofGalMainWidth = 580;
	ofGalTnWidth = 100;
	
	ofGalCols = 2;
	ofGalRows = 99;
}

// Search-String entschlüsseln
// Setzt: ofGallery, ofGalPicNum
function ofGalParseSearchString(iSearch)
{
	var iPos1 = 0;
	var iPos2 = 0;
	var sTmp;
	ofGalSelCat = "";
	ofGallery = "";
	ofGalPicNum = 0;

	if (iSearch.substr(0, 1) == "?") iSearch = iSearch.substr(1, iSearch.length - 1);
	if (iSearch == "") return;
// Kategorie suchen
	iPos1 = iSearch.indexOf("cat=");
	if (iPos1 >= 0) {
		sTmp = iSearch.substr(iPos1 + 4, iSearch.length - iPos1 - 4);
		iPos2 = sTmp.indexOf("&");
		if (iPos2 >= 0) sTmp = sTmp.substr(0, iPos2);
		ofGalSelCat = sTmp;
	}

// Galleriename suchen
	iPos1 = iSearch.indexOf('gal=');
	if (iPos1 >= 0) {
		sTmp = iSearch.substr(iPos1 + 4, iSearch.length - iPos1 - 4);
		iPos2 = sTmp.indexOf("&");
		if (iPos2 >= 0) sTmp = sTmp.substr(0, iPos2);
		ofGallery = sTmp;
	}

// Bildnummer suchen
	iPos1 = iSearch.indexOf("pic=");
	if (iPos1 >= 0) {
		sTmp = iSearch.substr(iPos1 + 4, iSearch.length - iPos1 - 4);
		iPos2 = sTmp.indexOf("&");
		if (iPos2 >= 0) sTmp = sTmp.substr(0, iPos2);
		ofGalPicNum = parseInt(sTmp);
	}


// wurde der Gallerie-Name ohne Tag angegeben?
	if (ofGalSelCat == "" && ofGallery == "") {
		iPos1 = iSearch.indexOf("&");
		if (iPos1 > 0) {
			ofGallery = iSearch.substr(0, iPos1);
			ofGalPicNum = parseInt(iSearch.substr(iPos1 + 1, iSearch.length - iPos1 - 1));
		} else {
			ofGallery = iSearch;
		}
	}

// Suche Kategorie zur Gallerie
	if (ofGallery != "") {
		var i;
		for (i=0; i < ofGalleryArray.length / ofGalleryArrayOffset; i++) {
			if (ofGalleryArray[i * ofGalleryArrayOffset + 2] == ofGallery) {
				ofGalSelCat = ofGalleryArray[i * ofGalleryArrayOffset + 0];
			}
		}
	}

}


// Link erstellen
function ofGalGetLink(iGallery, iPicNum)
{
	var link;
	
	link = location.pathname + '?gal=' + iGallery
	
	if (iPicNum) link += '&pic=' + iPicNum

	return link;	
}


//Screibt die komplette Gallerie mit document.writeln
function ofGalWriteGallery()
{
	var col = 0;		// Spalte
	var i = 0;		// Array-Index
	var j = 0;
	var oLine = "";
	var colWidth = 0;	// %-Angabe für Spalten in Tabelle
	var prevPic = 0;	//vorgeriges Bild (Pfeil)
	var nextPic = 0;	//naechstes Bild (Pfeil)
	var tnclass = ""	//Klasse des TN-Bildes
	
	//--- Variablen prüfen ---
	if (ofGalPicPath[ofGalPicPath.length-1] != "/") 
		ofGalPicPath = ofGalPicPath + "/";
	ofGalTnPath =  parent.ofGalTnPath;
	if (ofGalTnPath[ofGalTnPath.length-1] != "/") 
		ofGalTnPath = ofGalTnPath + "/";
	
	//--- Erstes / Letztes Bild ---
	var lastPic = ofGalArray.length / ofGalPicArrOffset - 1;
	var firstPic = 0;

	if (ofGalPicNum <= 0) {
		prevPic = lastPic;
		ofGalPicNum = 0;
	} else	prevPic = ofGalPicNum - 1;
	
	if (ofGalPicNum >= lastPic) {
		nextPic = 0;
		ofGalPicNum = lastPic;
	} else	nextPic = ofGalPicNum + 1;
	
	//--- MainTable ---
	document.writeln('<table width="' + (ofGalMainWidth + ofGalTnWidth * ofGalCols)
		+ '" class="galMainTable"><tr><td class="galHeadSelectTd">');
	
	//--- Galerie-Auswahl-Liste ---
	ofGalWriteSelectForm();
	
	// Zu viele Bilder auf der Seite?
	var maxPic = ofGalCols * ofGalRows
	if (lastPic >= maxPic) {
		document.writeln('<span class="galHeadPageLink">&nbsp;Seite:&nbsp;</span>');
		for(i = 0; (i * maxPic) <= lastPic; i++) {

			if (ofGalPicNum >= (i * maxPic)
			&&  ofGalPicNum < ((i+1) * maxPic))
				aClass = "galHeadPageMarked";
			else
				aClass = "galHeadPageLink";

			document.writeln('<a class="' + aClass + '" '
				+ 'href="' + ofGalGetLink(ofGallery, i * maxPic) + '">&nbsp;'
				+ (i+1) + '&nbsp;</a>');
		}
		firstPic = maxPic * Math.floor(ofGalPicNum / maxPic);
		lastPic =  Math.min(firstPic + maxPic - 1, lastPic);
		
	}
	
	//--- Kopfzeile ---
	document.writeln('</td><td class="galHeadLine">'
		+ '<table width="100%"><tr><td align="left">'
		+ '<a href="' + ofGalGetLink(ofGallery, prevPic) + '"><img border=0 src="' + ofGalArrowImgPrev + '"></a>'
		+ '</td><td align="center">'
		+ '<h2 align="center">' + ofConvertToHTML(ofGalTitle) + '</h2>'
		+ '</td><td align="right">'
		+ '<a href="' + ofGalGetLink(ofGallery, nextPic) + '"><img border=0 src="' + ofGalArrowImgNext + '"></a>&nbsp;'
		+ '</td></tr></table>'
		+ '</td></tr><tr><td class="galLeftTnTable">'
		+ '<table width="100%" cellpadding="0"><tr>');
	
	//--- ThumbNail - Tabelle ---
	for(i = firstPic; i <= lastPic; i++) {
		j = i * ofGalPicArrOffset;
		if ((i != 0) && (i % ofGalCols == 0)) {
			document.writeln('</tr><tr>');
		}
		if (i == ofGalPicNum)	{ tnclass = "galLeftTnImgSel" }
		else			{ tnclass = "galLeftTnImg" }
		
		document.writeln('<td>'
			+ '<a href="' + ofGalGetLink(ofGallery, i) + '">'
			+ '<img class="' + tnclass + '" src="' + ofGalTnPath + ofGalArray[j+1]
//			+ '" alt="' + ofConvertToHTML(ofGalArray[j+2]) + '"></a></td>');
			+ '" alt=""></a></td>');
	
	}
	document.writeln('</tr><tr><td class="galLeftBottomText" colspan="2">'
		+ ofConvertToHTML(ofGalBottomText) + '</td></tr>'
		+ '</table></td><td width="' + (ofGalMainWidth)
		+ '" valign="top" align="center" rowspan="2">');
	
	//--- Tabelle mit aktuellem Bild ---
	ofGalWritePictureTable(nextPic);
	
	//--- ENDE MainTable ---
	document.writeln('</td></tr>');
	if (ofGalFootText != "")
		document.writeln('<tr><td class="galLeftFootText">'
			+ ofConvertToHTML(ofGalFootText) + '</td></tr>');
	document.writeln('</table>');
}

// Schreibt die Tabelle mit dem HauptBild
function ofGalWritePictureTable(iNextPic)
{
	var j = ofGalPicNum * ofGalPicArrOffset;

	document.writeln('<table><tr><td>'
		+ '</td><td align="right">'
		+ '</td></tr><tr><td colspan="2">'
		+ '<a href="' + ofGalGetLink(ofGallery, iNextPic) + '">'
		+ '<center><img border=0 src="' + ofGalPicPath + ofGalArray[j] + '" alt="' + ofConvertToHTML(ofGalArray[j+2]) + '"></center>'
		+ '</a></td></tr><tr><td colspan="2" class="galRightBottomtext">' + ofConvertToHTML(ofGalArray[j+2])
		+ '</td></tr></table>');

/* height / width???
		+ '<center><table style="background-repeat:no-repeat; background-position:center" background="' + ofGalPicPath + ofGalArray[j] + '" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td>'
		+ '<img border=0 src="../images/bildp1.gif" height="560" width="560" alt="' + ofConvertToHTML(ofGalArray[j+2]) + '">'
		+ '</td></tr></tbody></table></center>'
*/

}

// Schreibt den Index aller Gallerien als Tabelle mit TN und Text
function ofGalWriteGalleryIndex()
{
	var i;
	var j;
	var col = 0;
	var sOut = "";
	
	document.writeln('<h2 style="border-bottom:2px solid #C0C0C0; '
		+ 'padding-bottom:10px; text-align:center">'
		+ '<b>Bildergalerie</b></h2>');

	ofGalSortGalleryArray();

	if (ofGalleryCatArray) {
		for (i=0; i < ofGalleryCatArray.length / ofGalleryCatArrayOffset; i++) {
	
			j = i * ofGalleryCatArrayOffset;
			if (i == 0) {
				if (ofGalSelCat == "") ofGalSelCat = ofGalleryCatArray[j];
			} else {			
				sOut += "&nbsp;|&nbsp;";
			}
			
			if (ofGalSelCat == ofGalleryCatArray[j]) sOut += '<b>';
			sOut += '<a href=' + location.pathname + '?cat='
				+ ofGalleryCatArray[j] + '>'
				+ ofConvertToHTML(ofGalleryCatArray[j + 1])
				+ '</a>';
			if (ofGalSelCat == ofGalleryCatArray[j]) sOut += '</b>';
			
		}
		sOut = '<tr><td colspan="' + ofGalleryCols + '" class="galIndexSep">'
			+ '<b>Kategorie:</b>&nbsp;' + sOut + '</td></tr>';
	}
	
	for (i=0; i < ofGallerySequence.length; i++) {
		j = ofGallerySequence[i] * ofGalleryArrayOffset;

		if (ofGalSelCat == "" || ofGalleryArray[j] == ofGalSelCat) {

			// Trenner?
			if (ofGalleryArray[j+2] == "") {
				// offene Zeile abschliessen
				if ((col != 0) && (col % ofGalleryCols != 0)) {
					while (col % ofGalleryCols != 0) {
						sOut += '<td></td>';
						col++;
					}
					sOut += '</tr>';
				}
				
				sOut += '<tr><td colspan="' + ofGalleryCols + '" class="galIndexSep">'
					 + ofGalleryArray[j+3]
					 + '</td></tr><tr>';
				col = 0;	
			} else {

				if (col % ofGalleryCols == 0) sOut = sOut + '<tr>';
				
				sOut += '<td class="galGalleryIcons">'
					+ '<a href="' + ofGalGetLink(ofGalleryArray[j+2]) + '">'
					+ '<img class="galLeftTnImg" src="' + ofGalleryArray[j+4] + '"><br>'
					+ ofConvertToHTML(ofGalleryArray[j+3]) + '</a><br></td>';
				col ++;

				if ((col != 0) && (col % ofGalleryCols == 0))
					sOut += '</tr>';
			}
		}
	}
	document.writeln('<table style="width:100%">' + sOut + '</tr></table>');
}

// Schreibt die Gallerie-Auswahl
function ofGalWriteSelectForm()
{
	var tmpStr = "";
	var i, j;
	ofGalSortGalleryArray();
	
	if (ofGalSelCat != "") tmpStr = "cat=" + ofGalSelCat;
	
	document.writeln('<form class="galHeadSelectForm">'
		+ '<select size="1" name="GalSelChoice" class="galHeadSelectDropDown"'
		+ 'onChange="ofGalSelectFormGo(this.form.GalSelChoice.options['
		+ 'this.form.GalSelChoice.options.selectedIndex].value)"> '
		+ '<option style="font-weight:bold; background-color:#D0D0D0;" value="' + tmpStr + '">[ Zur&uuml;ck zur &Uuml;bersicht ]</option>');
//		+ '<option value="nothing">&nbsp;</option>');
	for (i=0; i < ofGallerySequence.length; i++) {
		j = ofGallerySequence[i] * ofGalleryArrayOffset;
		if (ofGalleryArray[j+2] == ofGallery)	tmpStr = 'selected style="color:#0000FF;"';
		else					tmpStr = "";
		
// Nur von aktueller Kategorie ausgeben
		if (ofGalSelCat == "" || ofGalleryArray[j+0] == ofGalSelCat) {
			if (ofGalleryArray[j+2] == '') {
				//document.writeln('<option value="nothing">&nbsp;</option>');
				document.writeln('<option value="nothing" style="font-weight:bold; background-color:#D0D0D0;">'
					+ ofConvertToHTML(ofGalleryArray[j+3])
					+ '</option>');
			} else {
			document.writeln('<option ' + tmpStr + ' value="gal='
				+ ofGalleryArray[j+2] + '">&nbsp;-&nbsp;'
				+ ofConvertToHTML(ofGalleryArray[j+3])
				+ '</option>');
			}
		}
	}
	document.writeln('</select></form>');
}

function ofGalSortGalleryArray()
{
	var tmpArr = new Array();
	var tmpStr;
	var tmpPos;
	var i;
	for (i=0; i < ofGalleryArray.length / ofGalleryArrayOffset; i++)
		tmpArr[i] = (ofGalleryArray[i * ofGalleryArrayOffset + 0]
			  +  ofGalleryArray[i * ofGalleryArrayOffset + 1] + "_" + i);
	
	tmpArr.sort();
	tmpArr.reverse();
	
	ofGallerySequence = new Array();
	
	for (i=0; i < tmpArr.length; i++) {
		tmpStr = tmpArr[i];
		tmpPos = tmpStr.search(/_/);
		ofGallerySequence[i] = (tmpStr.substr(tmpPos + 1, tmpStr.length - tmpPos) * 1)
	}

}

function ofGalSelectFormGo(iURI)
{
	if(iURI == "nothing") {
		document.forms[0].reset();
		document.forms[0].elements[0].blur();
		return;
	} else {
		location.href = location.pathname + '?' + iURI;
	}
}



function ofGalleryCreateGalArray(iCount, iLength) {
// iCount = Anzahl der Bilder
// iLength = Länge der Bildnummern ( 2 -> 01.jpg, 3 -> 001.jpg )
//	ofGalArray = new Array( '01.jpg', '01.jpg', '',
//				'02.jpg', '02.jpg', '');
	
	var i;
	var src;
	var retArr = new Array();
	
	for (i = 0; i < iCount; i++) {

		src = String(i+1);

		while (src.length < iLength) src = "0" + src;

		src += ".jpg";

		retArr[ i*3 + 0] = src;
		retArr[ i*3 + 1] = src;
		retArr[ i*3 + 2] = '';

	}
	
	return retArr;
}

function ofGallerySetCommentForPicture(iGalArray, iPicNum, iComment)
{
	var i = (iPicNum - 1) * 3 + 2;

	if (iGalArray.length >= i) {
		iGalArray[ i ] = iComment;
	}
}