/****************************

 Global JavaScript functions and conditions for IFWORLD CADDIE web site projects
 Version:
 	1.4, 2008 January 11
 	
 	1.4: Added IFs.caddie.getContent() functions

 Usage:
	<script type="text/javascript" src="IFscript.caddie_1.3.js"></script>

 Requires:
  May optionally set global values:
	
		var IFs = new Array();  // "IFs" is for IFWORLD Script

		IFs.global = new Array();
		IFs.global.documentRoot = '/';
		IFs.global.graphicsRoot = IFs.global.graphicsRoot + '_graphics/';
		IFs.global.flashRoot = IFs.global.graphicsRoot + '_flash/';
		IFs.global.cssRoot = IFs.global.graphicsRoot + '_stylesheets/';
		IFs.global.jsRoot = IFs.global.graphicsRoot + '_javascripts/';

		IFs.caddie = new Array();
		IFs.caddie.calendarRoot = IFs.global.documentRoot + '_calendar/';
		IFs.caddie.mailing_listsRoot = IFs.global.documentRoot + '_mailing_lists/';

****************************/




/****************************
 Global variables for IFWORLD CADDIE projects.
****************************/
if (!IFs) IFs = new Array();
if (!IFs.global) IFs.global = new Array();
if (!IFs.global.documentRoot) IFs.global.documentRoot = '/';
if (!IFs.global.graphicsRoot) IFs.global.graphicsRoot = IFs.global.documentRoot + '_graphics/';
if (!IFs.global.flashRoot) IFs.global.flashRoot = IFs.global.documentRoot + '_flash/';
if (!IFs.global.cssRoot) IFs.global.cssRoot = IFs.global.documentRoot + '_stylesheets/';
if (!IFs.global.jsRoot) IFs.global.jsRoot = IFs.global.documentRoot + '_javascripts/';

if (!IFs.caddie) IFs.caddie = new Array();
if (!IFs.caddie.calendarRoot) IFs.caddie.calendarRoot = IFs.global.documentRoot + '_calendar/';
if (!IFs.caddie.mailing_listsRoot) IFs.caddie.mailing_listsRoot = IFs.global.documentRoot + '_mailing_lists/';

// Optional DeBugging Output, set to 1 or true for output window
if (!IFs.global.dbo) IFs.global.dbo = 0;




/****************************
 Browzer H4X
****************************/
IFs.global.solveForE = function (e)
{
	// ...make var targ out of different browser event handling models
	if (!e) var e = window.event;                  // for IE's event model
	if (e.target) targ = e.target;                 // for W3C/Moz Event model
	else if (e.srcElement) targ = e.srcElement;    // also for IE's event model
	if (targ.nodeType == 3)                        // defeat Safari bug (thanks, quirksmode.org)
	targ = targ.parentNode;                        // realize the target node, itself
	
	return targ;
}


function addEvent(obj, evt, func, capture) {
	if(obj.addEventListener) {
		obj.addEventListener(evt, func, capture);
	}
	else if(obj.attachEvent) {
		obj.attachEvent('on' + evt, func);
	}
	else {
		alert("Your web browser doesn't support modern websites.\n\nGet ready for a new view of the world.\n\nGet Firefox....");
		window.location = 'http://www.getfirefox.com/';
	}
}


// Browser detect for IE6 fixer code all over
IFs.global.ver = navigator.appVersion.split('MSIE');     // This ridiculous bit of code must be...
IFs.global.agentVerNo = parseFloat( IFs.global.ver[1] );  // ...on 2 lines.
if ( (IFs.global.agentVerNo >= 5.5) && (IFs.global.agentVerNo < 7) ) var isIe6 = true; // OK, so it's actually IE 5.5-6, but no one uses 5.5. We may as well give it a chance. Maybe we'll crash it and they'll upgrade.





/****************************
 IFs.caddie.popup()
 
 How it works:
  Opens a javascript-controled window
 
 Use:
 	<a href="#" onevent="return IFs.caddie.popup('whichType', [arguments0], [arguments1], ... )">

 Returns:
  false

****************************/
IFs.caddie.popup = function (whichType, postArgs)
{
	var openerURI;
	var openerArgs = 'toolbar=1,status=1,resizable=1,scrollbars=1'; // Set default openerArgs. May be chagned in switch-cases below
	switch (whichType)
	{
		case 'calendar' :
			openerURI = IFs.caddie.calendarRoot + 'calendar.phtml';
			if (postArgs) openerURI += '?' + postArgs;
			openerArgs += ',height=460,width=600';
			break;

		case 'mailinglist' :
			openerURI = IFs.caddie.mailing_listsRoot;
			if (postArgs) openerURI += '?mailing_list_id=' + postArgs;
			openerArgs += ',height=410,width=600';
			break;

		case 'image' :
			openerURI = IFs.global.documentRoot + '_popup.phtml?whatType=image&imageURL=' + arguments[1] + '&&';
			openerArgs = 'toolbar=1,status=0,scrollbars=1,resizable=1,height=320,width=400';
			break;

		default : // Default is to treat first argument (whichType) as a url.
			openerURI = whichType;
			openerArgs = 'toolbar=1,status=1,scrollbars=1,resizable=1';
			break;
	}
	window.open(openerURI, whichType, openerArgs);
  return false;
}




/****************************
 IFs.caddie.openInOpeneer()
 
 How it works:
 Opens a URL in opener window, and brings window to foreground
 HTML-specified content
 
 Use:
 	<a href="#" onclick="return IFs.caddie.openInOpeneer(this, 'http://www.URL.com');">

 Returns:
  false (disables properly-formed <a href> link)

****************************/
IFs.caddie.openInOpeneer = function (whereFrom, openerURI)
{
	whereFrom.opener.location = openerURI;
	whereFrom.opener.focus();

  return false;
}




/****************************
IFs.caddie.resize2img()
 
 How it works:
 Resizes window to fit #theImage width and height properties
 
 Use:
 	<body onload="IFs.caddie.resize2img()"> <img id="theImage">
		<img id="theImage">
	</body>

****************************/
IFs.caddie.resize2img = function ()
{
	if(document.getElementById)
	{
		imgH = parseInt( document.getElementById('theImage').width );
		imgV = parseInt( document.getElementById('theImage').height );
		
		// buffer for looks/usability?
		buffer = 60; // total buffer in pixels, shared by both sides

		maxH = screen.availWidth - buffer;
		maxV = screen.availHeight - buffer;
		
		startH = parseInt( screen.availTop );
		startV = parseInt( screen.availLeft );
		if (isNaN(startH)) startH = 0;
		if (isNaN(startV)) startV = 0;

		centerH = screen.availWidth / 2;
		centerV = screen.availHeight / 2;
		
		chromeH = window.outerWidth - window.innerWidth;
		chromeV = window.outerHeight - window.innerHeight;
		if (isNaN(chromeH)) chromeH = 20;
		if (isNaN(chromeV)) chromeV = 90;

		if ((imgH+chromeH) > maxH){
			var newH = maxH;
		} else {
			var newH = imgH+chromeH;
		}
		if ((imgV+chromeV) > maxV){
			var newV = maxV;
		} else {
			var newV = imgV+chromeV;
		}

		window.moveTo( (centerH - (newH/2) ), (centerV - (newV/2)) );
		window.resizeTo(newH,newV);
		
	}
}




/****************************
IFs.caddie.getContent()
 
 How it works:
 Creates an XML Object to retrieve an external HTML file.
 
 Use:
 	<div id="foo"></div>
	<script type="text/javascript">
		IFs.caddie.getContent('/url/bar.html', 'foo');
	</script>

****************************/
IFs.caddie.XMLHttpRequests = new Array();

IFs.caddie.createXMLHttpRequest = function( requestId ) {
	if (window.ActiveXObject) {
		IFs.caddie.XMLHttpRequests[ requestId ] = new ActiveXObject("Microsoft.XMLHTTP");
	} else if (window.XMLHttpRequest) {
		IFs.caddie.XMLHttpRequests[ requestId ] = new XMLHttpRequest();
	}
}
IFs.caddie.getContent = function( linken, objecten ) {
	document.getElementById(objecten).style.display = "none";
	document.getElementById(objecten).innerHTML = "";
	IFs.caddie.createXMLHttpRequest( objecten ) ;
	IFs.caddie.XMLHttpRequests[ objecten ].onreadystatechange = function(){
		IFs.caddie.handleXMLHRStateChange(linken, objecten);
	}
	IFs.caddie.XMLHttpRequests[ objecten ].open("GET", linken, true);
	IFs.caddie.XMLHttpRequests[ objecten ].send(null);
}
IFs.caddie.handleXMLHRStateChange = function(linken, objecten) {
	if( IFs.caddie.XMLHttpRequests[ objecten ].readyState == 4 ) {
	//alert(xmlHttp.status);
		if( IFs.caddie.XMLHttpRequests[ objecten ].status == 200 ) {
			//alert('handleStateChange(), readyState == 200');
			IFs.caddie.placeContent (linken, objecten);
		}
	}
}
IFs.caddie.placeContent = function (linken, objecten) {
	// place new special content
	//alert('placeContent()');
	document.getElementById(objecten).style.display = "block";
	document.getElementById(objecten).innerHTML = IFs.caddie.XMLHttpRequests[ objecten ].responseText.slice( (IFs.caddie.XMLHttpRequests[ objecten ].responseText.indexOf('id="content">') + 13), (IFs.caddie.XMLHttpRequests[ objecten ].responseText.indexOf('<!-- /content data -->')) );
}





/****************************
 Create Debug Output Window
 
 How it works:
 Creates textarea#debugoutput, appended to as last child of <body>, if (dbo == 1).
 
 Use:
 	IFs.global.dbo = 1;
 	IFs.global.dbo.value += 'This will append a line to the dbo box for all to see\n';

 Returns: n/a
****************************/
if (IFs && IFs.global && IFs.global.dbo)
{
	if (IFs.global.dbo == 1)
	{
		// create textarea.dbo node for placement
		IFs.global.dbo = document.createElement('textarea');
		IFs.global.dbo.id = 'debugoutput';
		IFs.global.dbo.wrap = 'off';
		IFs.global.dbo.style.position = 'fixed';
		IFs.global.dbo.style.left = '10px';
		IFs.global.dbo.style.bottom = '10px';
		IFs.global.dbo.style.height = '250px';
		IFs.global.dbo.style.width = '98%';
		IFs.global.dbo.style.zIndex = '50000';
		IFs.global.dbo.style.backgroundColor = '#eeeeee';
		IFs.global.dbo.style.borderWidth = '1px';
		IFs.global.dbo.style.borderStyle = 'solid';
		IFs.global.dbo.style.borderColor = '#999999';
		IFs.global.dbo.style.padding = '2px';
		IFs.global.dbo.style.overflow = 'auto';
		/*
		document.getElementsByTagName('body').item(0).appendChild(IFs.global.dbo);
		document.getElementsByTagName('body').item(0).style.paddingBottom = IFs.global.dbo.style.height;
		IFs.global.dbo = document.getElementById('debugoutput');
		IFs.global.dbo.value += ("IFs.global.dbo created successfully!\n");
		*/
		// window.addEventListener("onload", alert('ping'), false );
		IFs.global.appendDbo = function () {
			document.getElementsByTagName('body').item(0).appendChild(IFs.global.dbo);
			document.getElementsByTagName('body').item(0).style.paddingBottom = IFs.global.dbo.style.height;
			IFs.global.dbo = document.getElementById('debugoutput');
			IFs.global.dbo.value += ("IFs.global.dbo created successfully!\n");
		}
		addEvent( window, "load", IFs.global.appendDbo, false );
	}
	else
	{
		IFs.global.dbo = new Array();
	}
}




/****************************
 Loaded Announce
****************************/
IFs.global.dbo.value += ("IFsscript.caddie.js loaded!\n");