/*
	teaser.js
	
	v0.06, 2007-02-19, Christian Augustin

*/
/*
	JavaScript 1.3+, W3C DOM Level 2
	
	Important!
	
	Load linkstyle.js before loading teaser.js for proper function of
	target and onclick features!
	
	For now, this module makes headline and image of a teaser clickable,
	if the teaser has only one link. The teaser is left untouched otherwise.
	
	ToDo
	- User and date dependent visibility of teasers.
	- Other special features that will come to mind ...
	
	History
	2007-02-19 cma: Changed .findTeasers to .initElements (new standard).
	2007-02-07 cma: Optionaly using window.onDomReady() for initialization.
	2007-01-26 cma: Bug with missing headlines fixed.
	2006-11-09 cma: Forgot image link for target and onclick.
	2006-11-01 cma: Honoring target and onclick.
	2006-02-28 cma: Initial setup.
	
*/


/* ===========================
   Constructor function ...
=========================== */

function Teaser(obj) {
	if (!obj || !obj.getElementsByTagName) return;
	this.n = Teaser.teasers.length;
	Teaser.teasers[this.n] = this;
	this._teaser = this;
	
	var links = obj.getElementsByTagName('a');
	if (links.length != 1 || !links[0].href) return;
	var href = links[0].href;
	var trgt = links[0].target;
	var onclk = links[0].onclick;
	
	var headls = obj.getElementsByTagName(Teaser.headline);
	if (headls.length) {
		headls[0].innerHTML = '<a href="' + href + '"'
			+ '>' + headls[0].innerHTML + '<\/a>';
		if (trgt) headls[0].firstChild.target = trgt;
		if (onclk) headls[0].firstChild.onclick = onclk;
	};
	
	var imgs = obj.getElementsByTagName('img');
	if (imgs.length) {
		var lnk = document.createElement('a');
		lnk.href = href;
		if (trgt) lnk.target = trgt;
		if (onclk) lnk.onclick = onclk;
		imgs[0].parentNode.appendChild(lnk);
		lnk.appendChild(imgs[0]);
	}
	
}



/* =======================
   Instance methods ...
======================= */




/* ==========================
   Class properties ...
========================== */

Teaser.teasers = new Array();


/* Presets ... */

Teaser.linkImage = true;
Teaser.linkHeadline = true;
Teaser.headline = 'h5';

if ((typeof presets != 'undefined') && presets.Teaser) {
	if (typeof presets.Teaser.linkImage != 'undefined') Teaser.linkImage = presets.Teaser.linkImage;
	if (typeof presets.Teaser.linkHeadline != 'undefined') Teaser.linkHeadline = presets.Teaser.linkHeadline;
	if (typeof presets.Teaser.headline != 'undefined') Teaser.headline = presets.Teaser.headline;
}



/* ====================
   Class methods ...
==================== */

Teaser.initElements = function(obj) {
	if (!document.getElementsByTagName) return;
	var divs = (obj||document).getElementsByTagName('div');
	var t = new Array();
	if (divs) {
		for (var i=0; i<divs.length; i++) {
			var d = divs[i];
			if (d.className && d.className.match(/(^|\s)teaser(\s|$)/))
				t[t.length] = d;
		}
	};
	if (t.length) {
		for (var j=0; j<t.length; j++) new Teaser(t[j]);
	};

}

Teaser.findTeasers = Teaser.initElements;


/* =================
   Initialize ...
================= */

if (document.getElementsByTagName 
	&& document.createElement
	&& (!window.opera || document.createDocumentFragment)) {
	
	Teaser.initComplete = false;
	
	Teaser.init = function() {
		if (Teaser.initComplete) return true;
		
		Teaser.initElements();
		
		Teaser.initComplete = true;
		return true;
	}
	
	if (window.onDomReady) {
		window.onDomReady(Teaser.init);
	} else if (typeof pageComplete == 'function') {
		Teaser.oldPageComplete = pageComplete || function(){};
		pageComplete = function() {
			Teaser.oldPageComplete();
			Teaser.init();
		};
	} else {
		Teaser.oldOnload = window.onload || function(){};
		window.onload = function() {
			Teaser.oldOnload();
			Teaser.init();
		};
	};

}

/* End of teaser.js */
