// vim:ts=4:sw=4:noet
// Walter Doekes 2006

if(typeof Snet == 'undefined')
	Snet = new Object();

/**
 * addEvent function from http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
 */
Snet.addEvent = function(obj, type, fn) {
	if(obj.addEventListener) {
		obj.addEventListener(type, fn, false);
	} else if(obj.attachEvent) {
		obj["e" + type + fn] = fn;
		obj[type + fn] = function() {
			obj["e" + type + fn](window.event);
		}
		obj.attachEvent("on" + type, obj[type + fn]);
	}
}

/**
 * createElement function from http://simon.incutio.com/archive/2003/06/15/javascriptWithXML
 */
Snet.createElement = function(element) {
	if(document.createElementNS) {
		return document.createElementNS('http://www.w3.org/1999/xhtml', element);
	} else if(document.createElement) {
		return document.createElement(element);
	}
	return false;
}

/**
 * addJavaScriptFile. Add an external javascript file to the header. Walter Doekes 2006.
 */
Snet.addJavaScriptFile = function(href) {
      var script = Snet.createElement('script');
      script.type = 'text/javascript';
      script.src = href;
      document.getElementsByTagName("head")[0].appendChild(script);
}

/**
 * phpAdsAddBanner. Load a banner from banner.studenten.net. The zone specifies
 * the banner size and source (campaign or how you call it),
 * the source does not do very much.
 */
 /*
Snet.phpAdsAddBanner = function(elemId, zone, source) {
	// Some banner configurations use this..
	if(!document.phpAds_used)
		document.phpAds_used = ',';
	
	var phpAds_random = (new String(Math.random())).substring(2, 11);
	var href = 'http://banner.studenten.net/phpads/adjs.php?n=' + phpAds_random
		+ '&what=zone:' + zone + '&source=' + source + '&target=_blank'
		+ '&' + phpAds_random + '&exclude=' + document.phpAds_used;
	if(document.referrer)
		href += '&referer=' + escape(document.referrer);

	// This is shitty, but it works..
	var elem = document.getElementById(elemId);
	var tmpstyle = ' style="display: none;"';
	//tmpstyle = ''
	document.write('<div id="' + elemId + '-tmp" class="' + elem.className.replace(' automatic', '') + '"' + tmpstyle + '>' 
		+ '<script type="text/javascript" src="' + href + '"><\/script>'
		+ '<\/div>\n');
	document.write('<div id="' + elemId + '-tmp" class="' + elem.className.replace(' automatic', '') + '"' + tmpstyle + '>' 
		+ '<script type="text/javascript" src="' + href + '"><\/script>'
		+ '<\/div>\n');
	
	var tmp = document.getElementById(elemId + '-tmp');
	if(!document.par)
		document.par = tmp.parentNode;
//	alert('parent:' + document.par.innerHTML);
//	tmp.style.display = 'block';
//f(tmp) {
//		alert('' + elemId + ':' + tmp.innerHTML);
	tmp.parentNode.removeChild(tmp);
	for(var i = elem.childNodes.length - 1; i >= 0; --i)
		elem.removeChild(elem.childNodes[i]);
	elem.appendChild(tmp);
	alert(elem.parentNode.innerHTML);
	tmp.style.display = 'block';
//	}
*/
/*
	var div = Snet.createElement('div');
//	div.style.display = 'none';
	var script = Snet.createElement('script');
	script.type = 'text/javascript';
	script.src = href;
	div.appendChild(script);
	*/
	/*
	// The particular script loads something that's appropriate for the banner position.
	// adjs.php has been modified to use document.getElementById(elemId).innerHTML instead
	// of document write, so this can be safely done last.
	Snet.addJavaScriptFile(href);
	*/
	//alert(div.innerHTML);
//}

/**
 * getElementsByClassName from http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
 *   by Jonathan Snook <http://www.snook.ca/jonathan> and Robert Nyman <http://www.robertnyman.com>
 */
Snet.getElementsByClassName = function(element, tagName, className) {
	var elements = (tagName == "*" && element.all)? element.all : element.getElementsByTagName(tagName);
	var retElements = new Array();
	className = className.replace(/\-/g, "\\-");
	var regExp = new RegExp("(^|\\s)" + className + "(\\s|$)");
	for(var i = 0; i < elements.length; ++i) {
		var tmpElement = elements[i];
		if(regExp.test(tmpElement.className))
			retElements.push(tmpElement);
	}
	return retElements;
}


/**
 * sprintf from http://www.vladdy.net/Demos/printf.html
 *   by K&L productions
 *
 * Function printf(format_string,arguments...)
 * Javascript emulation of the C printf function (modifiers and argument types 
 *    "p" and "n" are not supported due to language restrictions)
 *
 * Copyright 2003 K&L Productions. All rights reserved
 * http://www.klproductions.com 
 *
 * Terms of use: This function can be used free of charge IF this header is not
 *               modified and remains with the function code.
 * 
 * Legal: Use this code at your own risk. K&L Productions assumes NO resposibility
 *        for anything.
 ********************************************************************************/
Snet.sprintf = function(fstring)
  { var pad = function(str,ch,len)
      { var ps='';
        for(var i=0; i<Math.abs(len); i++) ps+=ch;
        return len>0?str+ps:ps+str;
      }
    var processFlags = function(flags,width,rs,arg)
      { var pn = function(flags,arg,rs)
          { if(arg>=0)
              { if(flags.indexOf(' ')>=0) rs = ' ' + rs;
                else if(flags.indexOf('+')>=0) rs = '+' + rs;
              }
            else
                rs = '-' + rs;
            return rs;
          }
        var iWidth = parseInt(width,10);
        if(width.charAt(0) == '0')
          { var ec=0;
            if(flags.indexOf(' ')>=0 || flags.indexOf('+')>=0) ec++;
            if(rs.length<(iWidth-ec)) rs = pad(rs,'0',rs.length-(iWidth-ec));
            return pn(flags,arg,rs);
          }
        rs = pn(flags,arg,rs);
        if(rs.length<iWidth)
          { if(flags.indexOf('-')<0) rs = pad(rs,' ',rs.length-iWidth);
            else rs = pad(rs,' ',iWidth - rs.length);
          }    
        return rs;
      }
    var converters = new Array();
    converters['c'] = function(flags,width,precision,arg)
      { if(typeof(arg) == 'number') return String.fromCharCode(arg);
        if(typeof(arg) == 'string') return arg.charAt(0);
        return '';
      }
    converters['d'] = function(flags,width,precision,arg)
      { return converters['i'](flags,width,precision,arg); 
      }
    converters['u'] = function(flags,width,precision,arg)
      { return converters['i'](flags,width,precision,Math.abs(arg)); 
      }
    converters['i'] =  function(flags,width,precision,arg)
      { var iPrecision=parseInt(precision);
        var rs = ((Math.abs(arg)).toString().split('.'))[0];
        if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
        return processFlags(flags,width,rs,arg); 
      }
    converters['E'] = function(flags,width,precision,arg) 
      { return (converters['e'](flags,width,precision,arg)).toUpperCase();
      }
    converters['e'] =  function(flags,width,precision,arg)
      { iPrecision = parseInt(precision);
        if(isNaN(iPrecision)) iPrecision = 6;
        rs = (Math.abs(arg)).toExponential(iPrecision);
        if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) rs = rs.replace(/^(.*)(e.*)$/,'$1.$2');
        return processFlags(flags,width,rs,arg);        
      }
    converters['f'] = function(flags,width,precision,arg)
      { iPrecision = parseInt(precision);
        if(isNaN(iPrecision)) iPrecision = 6;
        rs = (Math.abs(arg)).toFixed(iPrecision);
        if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) rs = rs + '.';
        return processFlags(flags,width,rs,arg);
      }
    converters['G'] = function(flags,width,precision,arg)
      { return (converters['g'](flags,width,precision,arg)).toUpperCase();
      }
    converters['g'] = function(flags,width,precision,arg)
      { iPrecision = parseInt(precision);
        absArg = Math.abs(arg);
        rse = absArg.toExponential();
        rsf = absArg.toFixed(6);
        if(!isNaN(iPrecision))
          { rsep = absArg.toExponential(iPrecision);
            rse = rsep.length < rse.length ? rsep : rse;
            rsfp = absArg.toFixed(iPrecision);
            rsf = rsfp.length < rsf.length ? rsfp : rsf;
          }
        if(rse.indexOf('.')<0 && flags.indexOf('#')>=0) rse = rse.replace(/^(.*)(e.*)$/,'$1.$2');
        if(rsf.indexOf('.')<0 && flags.indexOf('#')>=0) rsf = rsf + '.';
        rs = rse.length<rsf.length ? rse : rsf;
        return processFlags(flags,width,rs,arg);        
      }  
    converters['o'] = function(flags,width,precision,arg)
      { var iPrecision=parseInt(precision);
        var rs = Math.round(Math.abs(arg)).toString(8);
        if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
        if(flags.indexOf('#')>=0) rs='0'+rs;
        return processFlags(flags,width,rs,arg); 
      }
    converters['X'] = function(flags,width,precision,arg)
      { return (converters['x'](flags,width,precision,arg)).toUpperCase();
      }
    converters['x'] = function(flags,width,precision,arg)
      { var iPrecision=parseInt(precision);
        arg = Math.abs(arg);
        var rs = Math.round(arg).toString(16);
        if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
        if(flags.indexOf('#')>=0) rs='0x'+rs;
        return processFlags(flags,width,rs,arg); 
      }
    converters['s'] = function(flags,width,precision,arg)
      { var iPrecision=parseInt(precision);
        var rs = arg;
        if(rs.length > iPrecision) rs = rs.substring(0,iPrecision);
        return processFlags(flags,width,rs,0);
      }
    farr = fstring.split('%');
    retstr = farr[0];
    fpRE = /^([-+ #]*)(\d*)\.?(\d*)([cdieEfFgGosuxX])(.*)$/;
    for(var i=1; i<farr.length; i++)
      { fps=fpRE.exec(farr[i]);
        if(!fps) continue;
        if(arguments[i]!=null) retstr+=converters[fps[4]](fps[1],fps[2],fps[3],arguments[i]);
        retstr += fps[5];
      }
    return retstr;
  }
// vim:ts=4:sw=4:noet
// Walter Doekes 2006

if(typeof Snet == 'undefined')
	Snet = new Object();

Snet.date = new Object();

Snet.date.printHuman = function(lang, id) {
	var d = new Date();
	var elem = document.getElementById(id);

	if(typeof textWeekDays == 'undefined' || typeof textMonths == 'undefined') {
		if(lang == 'nl') {
			textWeekDays = ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'];
			textMonths = ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus',
					'september', 'oktober', 'november', 'december'];
		} else {
			textWeekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
			textMonths = ['Januari', 'Februari', 'March', 'April', 'May', 'June', 'July', 'August',
					'September', 'October', 'November', 'December'];
		}
	}
	
	elem.innerHTML = textWeekDays[d.getDay()] + ' ' + d.getDate();
	if(lang != 'nl') {
		elem.innerHTML += 'th of';
	}
	elem.innerHTML += ' ' + textMonths[d.getMonth()] + ' ' + d.getFullYear(); // + '<br/>'
	//	+ Snet.sprintf('%i:%02i:%02i', d.getHours(), d.getMinutes(), d.getSeconds());
	setTimeout('Snet.date.printHuman("' + lang + '", "' + id + '")', 60000);
}
