﻿/*

	12.05.2008, dogan

	©2008 Tanyel Dogan, alle Rechte vorbehalten

*/

function Cms4dWriteFlash(fobj)
{
	var id = fobj.id;
	var src = Cms4dGlobals.arps + fobj.src;
	var playerw = fobj.playerw;
	var playerh = fobj.playerh;
	var playerbgcolor = fobj.playerbgcolor == undefined ? '#ffffff' : fobj.playerbgcolor;

	var datum = new Date();
	var d_y = datum.getFullYear();
	var d_m = datum.getMonth();
	var d_d = datum.getDate();
	var ncache = 'ncache=' + d_y + '_' + d_m + '_' + d_d;
	if(src.indexOf('&') == -1)
	{
		ncache = '?' + ncache;
	}
	else
	{
		ncache = '&' + ncache;
	}
	src = src + ncache;

	var t = '';
	t += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"';
		t += ' width="' + playerw + '"';
		t += ' height="' + playerh + '"';
		t += ' id="' + id + '"';
		t += ' align="left">\n';
	t += '<param name="allowScriptAccess" value="sameDomain" />\n';
	t += '<param name="movie" value="' + src + '" />\n';
	t += '<param name="loop" value="false" />\n';
	t += '<param name="menu" value="false" />\n';
	t += '<param name="quality" value="high" />\n';
	t += '<param name="salign" value="lt" />\n';
	t += '<param name="bgcolor" value="' + playerbgcolor + '" />\n';
	t += '<embed';
		t += ' src="' + src + '"';
		t += ' loop="false"';
		t += ' menu="false"';
		t += ' quality="high"';
		t += ' salign="lt"';
		t += ' bgcolor="' + playerbgcolor + '"';
		t += ' width="' + playerw + '"';
		t += ' height="' + playerh + '"';
		t += ' name="' + id + '"';
		t += ' align="left"';
		t += ' allowScriptAccess="sameDomain"';
		t += ' type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />\n';
	t += '</object>\n';
//alert(t);
	document.writeln(t);
}


function cms4d_get_scroll_offset()
{
	var o = new Object();
	o.sx = 0;
	o.sy = 0;

	var sx = 0;
	var sy = 0;
	if(typeof(window.pageYOffset) == 'number')
	{
		//Netscape kompatibel
		sx = window.pageXOffset;
		sy = window.pageYOffset;
	}
	else if(document.body && (document.body.scrollLeft || document.body.scrollTop))
	{
		//Firefox u.ä. DOM kompatible, IE6+ im Normalmodus
		sx = document.body.scrollLeft;
		sy = document.body.scrollTop;
	}
	else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop))
	{
		//IE6+ im Kompatibilitätsmodus
		sx = document.documentElement.scrollLeft;
		sy = document.documentElement.scrollTop;
	}

	o.sx = sx;
	o.sy = sy;
	return(o);
}

function cms4d_get_client_size()
{
	var o = new Object();
	o.w = 1;
	o.h = 1;

	var cw = 0;
	var ch = 0;
	if(typeof(window.innerWidth) == 'number')
	{
		//alle ausser IE
		cw = window.innerWidth;
		ch = window.innerHeight;
	}
	else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight))
	{
		//IE 6 und höher, Kompatibilitätsmodus
		cw = document.documentElement.clientWidth;
		ch = document.documentElement.clientHeight;
	}
	else if(document.body && (document.body.clientWidth || document.body.clientHeight))
	{
		//IE 4 o. höher, nicht im Kompatibilitätsmodus
		cw = document.body.clientWidth;
		ch = document.body.clientHeight;
	}

	o.w = cw;
	o.h = ch;
	return(o);
}


/*=== Protokollierung ===*/
function cms4d_log_obj()
{
	this.data_dtp = -1;
	this.data_id = -1
	this.data_language = '';
	this.data_url = '';
	this.data_n = '';
	this.data_f = '';
	this.toString = function()
	{
		var t = '';
		t += 'data_dtp: ' + this.data_dtp + '\n';
		t += 'data_id: ' + this.data_id + '\n';
		t += 'data_language: ' + this.data_language + '\n';
		t += 'data_url: ' + this.data_url + '\n';
		t += 'data_n: ' + this.data_n + '\n';
		t += 'data_f: ' + this.data_f + '\n';
		return(t);
	}
}
function cms4d_do_log(o)
{
	if(! document.getElementById)return;

	var t = Cms4dGlobals.arps + 'cms4d-weblog3-counterpix.aspx?';
	t += 'data_dtp=' + encodeURIComponent(o.data_dtp);
	t += '&data_id=' + encodeURIComponent(o.data_id);
	t += '&data_language=' + encodeURIComponent(o.data_language);
	t += '&data_url=' + encodeURIComponent(o.data_url);
	t += '&data_n=' + encodeURIComponent(o.data_n);
	t += '&data_f=' + encodeURIComponent(o.data_f);
	t += '&ncache=' + new Date().getTime();
	var src_str = t;

	var counterpix = null;
	try
	{
		document.getElementById('cms4d_weblog_counterpix');
		if(counterpix == null)
		{
			counterpix = document.createElement('img');
			counterpix.style.display = 'none';
			counterpix.src = src_str;
		}
	}
	catch(e){};

//alert(o.toString() + '\n' + src_str + '\n' + counterpix);
}


/*=== automatisierte Zoomfunktion ====*/
function cms4d_zoom(p_event, ctrlid)
{
	if(! document.documentElement)return;
	if(ctrlid == undefined)ctrlid = null;

	var eobj = null;
	var ctrlobj = null;
	var e = null;
	var eid = '';
	var esrc = '';
	var ebasepath = '';
	var zoomsrc = '';

	var pos1 = -1;

	if(window.event)
	{
		//IE
		eobj = window.event;
		e = eobj.srcElement;
	}
	else if(p_event != undefined)
	{
		//Firefox/Netscape/Opera
		eobj = p_event;
		e = eobj.target;
	}
	if(eobj == null || e == null)return;
	if(e.nodeName.toLowerCase() != 'img')return;
	eid = e.id;
	if(eid == null || eid == undefined || eid == '')return;
	esrc = e.src;
	if(esrc == null || esrc == undefined || esrc == '')return;
	esrc = esrc.toLowerCase();

	//Basisverzeichnis der Bildquelle
	//BEACHTE: es wird davon ausgegangen, dass hinter dem Seitenname/Bildnamen kein
	//Slash mehr auftritt, und Thumbnail und zughöriges Zoombild im selben Verzeichnispfad liegen.
	pos1 = esrc.lastIndexOf('/');
	if(pos1 == -1)return;
	ebasepath = esrc.substr(0, pos1 + 1);

	//---

	//Bei normalen Zoombildern ist ctrlid == null.
	//Dann wird die Quelle für das vergrösserte Bild aus der aktuellen src gefiltert
	if(ctrlid == null)
	{
		if(esrc.indexOf('image.aspx') != -1 && esrc.indexOf('id=') != -1)
		{
			//ID aus URL parsen ab dem "id=" wird jedes folgende Zeichen
			//daraufhin geprüft, ob es ein Ziffernzeichen ist. Wenn ja, dann
			//wird es zum Ziffernstring hinzuaddiert, der am Ende zu int gecastet wird.
			var image_id_str = '';
			pos1 = esrc.indexOf('id=');
			for(var i = (pos1 + 3); i < esrc.length; i++)
			{
				var c = esrc.substr(i, 1);
				if(! isNaN(c))
				{
					image_id_str += c;
				}
				else
				{
					break;
				}
			}

			if(! isNaN(image_id_str))
			{
				var image_id = parseInt(image_id_str);
				zoomsrc = ebasepath + 'image.aspx?id=' + image_id + '&size=3';
			}
		}
	}
	else
	{
		//Versuchen eine Referenz auf das Kontrolobjekt, i.d.R. eine Bildergalerie, zu finden.
		//Hier wird die Bildquelle des Zoombildes aus einem Array über ID gefiltert.
		//Das Kontrollobjekt wird vom Bildergaleriecontrol in die HTML-Ausgabe in einen
		//Scriptblock geschrieben (s.d.).
		try
		{
			ctrlobj = eval(ctrlid);
		}
		catch(ex)
		{
			ctrlobj = null;
		}

		if(ctrlobj != null)
		{
			//Nach der Eigenschaft suchen, die mit der img-id des aufrufenden Bildes übereinstimmt.
			//srclist ist ein Array mit Unterarrays.
			var srclist = ctrlobj.srclist;
			for(var i = 0; i < srclist.length; i++)
			{
				var myimg = srclist[i];
				var i_id = myimg[0];
				var i_zoomsrc = unescape(myimg[1]);
				if(i_id == eid)
				{
					zoomsrc = ebasepath + i_zoomsrc;
					break;
				}
			}
		}
	}

	if(zoomsrc == '')return;

	//---

	cms4d_zoom_open(zoomsrc, eid, ctrlobj);
}

function cms4d_zoom_open(src, eid, ctrlobj)
{
	if(! document.documentElement)return;
	if(src == '')return;
	var t = '';

	//Sicherstellen, dass nur GENAU 1 Zielcontainer im DOM vorhanden ist
	var wc = document.getElementById('cms4d_zoom_window_container');
	if(wc != null)
	{
		wc.parentNode.removeChild(wc);
	}

	//container je nach scrollOffset in Fenstermitte positionieren.
	//Viel einfacher wäre position:fixed. Allerdings verarbeitet IE6 dies nicht.
	var soff = cms4d_get_scroll_offset();
	var sx = soff.sx;
	var sy = soff.sy;

	var cs = cms4d_get_client_size();
	//ACHTUNG: für alle body.clientWidth statt w aus Funktion.
	var cw = document.body.clientWidth;
	var ch = cs.h;

	wc = document.createElement('div');
	wc.id = 'cms4d_zoom_window_container';
	wc.className = 'cms4d_zoom_window_container';
	with(wc.style)
	{
		left = sx + 'px';
		top = sy + 'px';
		width = cw + 'px';
		height = ch + 'px';
	}
	//ctrlobj der ggf. aktuellen Galerie zu HTML-Element vermerken.
	//Im Zweifelsfall null.
	wc.cms4d_zoom_ctrlobj = ctrlobj;

	//ggf. Navigation bei Bildergalerie
	//Der Array-Index des aktuell beim Öffnen angezeigten Bildes wird
	//im ctrlobj zwischengespeichert. Mit dem Aufruf der Funktion navigate wird
	//lediglich die Richtung übergeben, in der geblättert werden soll.
	//Dort wird dann nach dem Blättern der Index neu gesetzt, so dass
	//von da an die Kontrolle alleine über die bavigate-Funktion ausgeführt wird.
	var nav_str = '';
	if(ctrlobj != null)
	{
		var srclist = ctrlobj.srclist;
		for(var i = 0; i < srclist.length; i++)
		{
			var myimg = srclist[i];
			var i_id = myimg[0];
			var i_zoomsrc = myimg[1];
			if(i_id == eid)
			{
				ctrlobj.act_index = i;
				break;
			}
		}

		t = '';
		t += '<span class="cms4d_zoom_window_but_prev" onclick="cms4d_zoom_navigate(\'' + ctrlobj.ctrlid + '\',-1);">&lt;</span>';
		t += '&nbsp;';
		t += '<span class="cms4d_zoom_window_but_next" onclick="cms4d_zoom_navigate(\'' + ctrlobj.ctrlid + '\',1);">&gt;</span>';
		nav_str = t;
	}


t = '';
t += '<table id="cms4d_zoom_window_table" class="cms4d_zoom_window_table" border="0" cellpadding="0" cellspacing="0">\n';
	t += '<tr align="center">\n';
		t += '<td id="cms4d_zoom_window_cell">';

t += '<table id="cms4d_zoom_window_content_table" class="cms4d_zoom_window_content_table" border="0" cellpadding="0" cellspacing="0">\n';
	t += '<tr>\n';
		t += '<td class="cms4d_zoom_window_content_head">\n';
			t += '<table width="100%" border="0" cellpadding="2" cellspacing="0">\n';
				t += '<tr>\n';
					t += '<td><div style="width:20px;"></div></td>\n';
					t += '<td width="99%" align="center">';
						t += nav_str;
					t += '</td>\n';
					t += '<td width="20"><span class="cms4d_zoom_window_but_close" onclick="cms4d_zoom_close();" title="close">X</span></td>\n';
				t += '</tr>\n';
			t += '</table>\n';
		t += '</td>\n';
	t += '</tr>\n';

	t += '<tr>\n';
		t += '<td id="cms4d_zoom_window_content" class="cms4d_zoom_window_content">';
t += '<img id="cms4d_zoom_window_zoom_image" src="' + src + '" onclick="cms4d_zoom_close();" title="close" style="cursor:pointer;border:0;"/>';
		t += '</td>\n';
	t += '</tr>\n';
t += '</table>\n';

		t += '</td>\n';
	t += '</tr>\n';
t += '</table>\n';
	wc.innerHTML = t;

	document.body.appendChild(wc);

	//---

	//Funktion für Tastaturabfrage und Scrollen/Fenstervergrösserung registieren.
	//Werden beim Schliessen wieder deregistriert (s.u.).
	if(Cms4dDocumentEventControl != null)
	{
		Cms4dDocumentEventControl.add_event('keydown', 'cms4d_zoom_onkeydown', cms4d_zoom_keycheck);
		Cms4dDocumentEventControl.add_event('scroll', 'cms4d_zoom_onscroll', cms4d_zoom_reposition_container);
		Cms4dDocumentEventControl.add_event('resize', 'cms4d_zoom_onresize', cms4d_zoom_reposition_container);
	}


	//Protokollieren
	var obj = new cms4d_log_obj();
	obj.data_dtp = 2000;

	//Bei normalem Bildzoom mit image.aspx versuchen ID zu parsen
	obj.data_id = eid;
	var pos1 = src.indexOf('image.aspx?');
	if(pos1 > 0)
	{
		pos2 = src.indexOf('id=');
		if(pos2 > pos1)
		{
			var id_str = '';
			for(var i = pos2 + 3; i < src.length; i++)
			{
				var c = src.substr(i, 1);
				if(! isNaN(c))
				{
					id_str += c;
				}
				else
				{
					break;
				}
			}

			if(id_str != '' && ! isNaN(id_str))
			{
				obj.data_id = id_str;
			}
		}
	}

	obj.data_language = Cms4dGlobals.dlang;
	obj.data_url = src.replace(Cms4dGlobals.rrafp, '');

	obj.data_n = obj.data_url;
	var pos1 = obj.data_url.lastIndexOf('/');
	if(pos1 >= 0)
	{
		obj.data_n = obj.data_url.substr(pos1 + 1);
	}

	if(ctrlobj != null)
	{
		try
		{
			obj.data_f = ctrlobj.log_data_f;
		}
		catch(e){}
	}
	cms4d_do_log(obj);
}

function cms4d_zoom_close()
{
	if(! document.documentElement)return;

	//Handler deregistrieren
	if(Cms4dDocumentEventControl != null)
	{
		Cms4dDocumentEventControl.remove_event('keydown', 'cms4d_zoom_onkeydown', cms4d_zoom_keycheck);
		Cms4dDocumentEventControl.remove_event('scroll', 'cms4d_zoom_onscroll', cms4d_zoom_reposition_container);
		Cms4dDocumentEventControl.remove_event('resize', 'cms4d_zoom_onresize', cms4d_zoom_reposition_container);
	}

	var wc = document.getElementById('cms4d_zoom_window_container');
	if(wc != null)
	{
		wc.parentNode.removeChild(wc);
	}
}

function cms4d_zoom_navigate(ctrlid, d)
{
	if(! document.documentElement)return;
	var target_img = document.getElementById('cms4d_zoom_window_zoom_image');
	if(target_img == null)return;

	var ctrlobj = null;
	try
	{
		ctrlobj = eval(ctrlid);
	}
	catch(ex)
	{
		ctrlobj = null;
	}
	if(ctrlobj == null)return;

	//---

	//Es wird nur anhand des aktuell im ctrlobj eingestellten act_index
	//die neue Position in Richtung d gesucht.
	var act_index = ctrlobj.act_index;
	var srclist = ctrlobj.srclist;
	var smin = 0;
	var smax = srclist.length - 1;

	var new_index = act_index + d;
	if(new_index < smin)new_index = smax;
	if(new_index > smax)new_index = smin;
	//Neuen Index in ctrlobj zwischenspeichern für ggf. nächsten Aufruf von navigate
	ctrlobj.act_index = new_index;

	//Neus Bildobjekt
	var myimg = ctrlobj.srclist[new_index];
	var i_id = myimg[0];
	var i_zoomsrc = myimg[1];

	//Da hier davon ausgegangen wird, dass Thumbnail und Zoombild im selben Verzeichnis
	//liegen, kann der Basispfad aus der Thumbnailquelle extrahiert werden.
	var smallimg = document.getElementById(i_id);
	if(smallimg == null)return;
	var smallsrc = smallimg.src;
	pos1 = smallsrc.lastIndexOf('/');
	if(pos1 == -1)return;
	var target_basepath = smallsrc.substr(0, pos1 + 1);

	//Neue Bildquelle zuweisen
	var target_src = target_basepath + i_zoomsrc;
	target_img.src = target_src;


	//Protokollieren
	var obj = new cms4d_log_obj();
	obj.data_dtp = 2000;
	obj.data_id = i_id;
	obj.data_language = Cms4dGlobals.dlang;
	obj.data_url = target_src.replace(Cms4dGlobals.rrafp, '');

	obj.data_n = obj.data_url;
	var pos1 = obj.data_url.lastIndexOf('/');
	if(pos1 >= 0)
	{
		obj.data_n = obj.data_url.substr(pos1 + 1);
	}

	if(ctrlobj != null)
	{
		try
		{
			obj.data_f = ctrlobj.log_data_f;
		}
		catch(e){}
	}
	cms4d_do_log(obj);
}

function cms4d_zoom_reposition_container()
{
	//ACHTUNG: NS7 feuert das Event nur, wenn explizit mit der
	//Maus über die Scrollbar gescrollt wird. Nicht aber wenn
	//mit dem Mausrad gescrollt wird.
	if(! document.documentElement)return;
	var wc = document.getElementById('cms4d_zoom_window_container');
	if(wc == null)return;

	var soff = cms4d_get_scroll_offset();
	var sx = soff.sx;
	var sy = soff.sy;

	var cs = cms4d_get_client_size();
	//ACHTUNG: für alle body.clientWidth statt w aus Funktion.
	var cw = document.body.clientWidth;
	var ch = cs.h;

	with(wc.style)
	{
		left = sx + 'px';
		top = sy + 'px';
		width = cw + 'px';
		height = ch + 'px';
	}
}

function cms4d_zoom_keycheck(org_event, event_object)
{
	var wc = document.getElementById('cms4d_zoom_window_container');
	if(wc == null)return;

	if(event_object == null)return;
	if(event_object.key_code == null)return;
	var kc = event_object.key_code;

	//Schliessen bei ESCAPE
	if(kc == 27)cms4d_zoom_close();

	//blättern mit Pfeiltasten, wenn es sich um eine Galerie handelt.
	var ctrlobj = wc.cms4d_zoom_ctrlobj;
	if(ctrlobj != null)
	{
		var ctrlid = ctrlobj.ctrlid;
		if(kc == 37)
		{
			cms4d_zoom_navigate(ctrlid, -1);
		}
		else if(kc == 39)
		{
			cms4d_zoom_navigate(ctrlid, 1);
		}
	}
}


//---


function cms4d_document_event_object()
{
	this.eobj = null;
	this.etype = null;
	this.key_code = null;
	this.src_element = null;
	this.toString = function()
	{
		var t = '';
		t += 'eobj: ' + this.eobj + '\n';
		t += 'etype: ' + this.etype + '\n';
		t += 'key_code: ' + this.key_code + '\n';
		t += 'src_element: ' + this.src_element + '\n';
		return(t);
	}
}
function cms4d_document_event_handler()
{
	this.last_event = null;

	this.add_event = function(ename, fn_key, fn)
	{
		var hkey = ename + '_handlers';
		var hlist = this[hkey];
		if(hlist == undefined || hlist == null)
		{
			this[hkey] = new Object();
			hlist = this[hkey];
		}
		hlist[fn_key] = fn;
	}
	this.remove_event = function(ename, fn_key)
	{
		try
		{
			var hkey = ename + '_handlers';
			var hlist = this[hkey];
			hlist[fn_key] = undefined;
		}
		catch(e)
		{
		}
	}

	this.do_events = function(evnt)
	{
		var o = Cms4dDocumentEventControl;
		try
		{
			if(window.event)
			{
				o.last_event = new cms4d_document_event_object();
				o.last_event.eobj = window.event;
				o.last_event.etype = window.event.type.toLowerCase();
				o.last_event.key_code = window.event.keyCode;
				o.last_event.src_element = window.event.srcElement;
			}
			else if(evnt != undefined)
			{
				o.last_event = new cms4d_document_event_object();
				o.last_event.eobj = evnt;
				o.last_event.etype = evnt.type.toLowerCase();
				o.last_event.key_code = evnt.which;
				o.last_event.src_element = evnt.target;
			}

			if(o.last_event != null)
			{
				try
				{
					var hkey = o.last_event.etype + '_handlers';
					if(hkey != undefined && hkey != null)
					{
						var hlist = o[hkey];
						for(var i in hlist)
						{
							var fn = hlist[i];
							if(fn != undefined)fn(o.last_event.eobj, o.last_event);
						}
					}
				}
				catch(e)
				{
				}
			}
		}
		catch(e)
		{
		}
	}
}
var Cms4dDocumentEventControl = new cms4d_document_event_handler();


document.onkeydown = Cms4dDocumentEventControl.do_events;
window.onscroll = Cms4dDocumentEventControl.do_events;
window.onresize = Cms4dDocumentEventControl.do_events;


/*==============================================*/

//Inline Scripte können eine Funktion zum document.Cms4dDocumentOnloadControl
//als Eigenschaft hinzufügen. Diese wird dann erst ausgeführt, wenn alle
//Quellen der Seite komplett geladen sind.
//WICHTIG: damit das onload-Event zuverlässig in allen Browsern gefeuert wird, muss
//es explizit auf das BODY-Element im Layout gesetzt werden. Ein Zuweisung zur
//Laufzeit an dieser Stelle funktioniert nicht in allen Browsern.
function Cms4dDocumentOnload(evnt)
{
	var obj = document.Cms4dDocumentOnloadControl;
	if(obj == undefined || obj == null)return;
	for(var i in obj)
	{
		obj[i](evnt);
	}
}

