
/* **************************************
Sebo JavaScripts
Copyright (c) 2005 - 2010 Swisstrax, All Rights Reserved
************************************** */


/* **************************************
Function to stack up onload scripts
************************************** */

/* This handy addLoadEvent function from Simon Willison allows you to stack up 'window.onload' events 
without them stepping on each other's toes. It's explained here - http://www.sitepoint.com/blog-post-view.php?id=171578 */

function addLoadEvent(func)
{
  var oldonload = window.onload;
  if (typeof window.onload != 'function')
  {
    window.onload = func;
  }
  else
  {
    window.onload = function()
	{
      oldonload();
      func();
    }
  }
}


/* **************************************
Encode Email
	All of the email addresses on the site are obfuscated using spans and [at] instead of @ to protect them from spam spiders.
		<span class="email"><span class="user">john.doe</span> [at] <span class="domain">anonymous.com</span></span>
	This function takes the obfuscated email addresses and rebuilds them as real mailto links
	The mailto links replace the spans for browsers with javascript
	The obfuscation is still useful for those who don't have javascript
************************************** */
function emailEncode()
{
	// Build a list of spans and walk through them
	var spans = document.getElementsByTagName("span");
	for (var i=0; i < spans.length; i++)
	{
		span = spans[i];
		// If you find an email span
		if (span.className == "email")
		{
			var user = "";
			var domain = "";
			var emailText = "";
			var emailLink = "";
			
			// Walk through children nodes to find the user and domain
			for (var t=0; t < span.childNodes.length; t++)
			{
				var token = span.childNodes[t];
				if (token.className == "user")
				{
					user = token.firstChild.nodeValue;
				}
				if (token.className == "domain")
				{
					domain = token.firstChild.nodeValue;
				}
			}
			
			// If we have good values for the user and domain, build the new anchor
			if ((user != "") && (domain != ""))
			{
				emailText = document.createTextNode(user + "@" + domain);
				emailLink = "mailto:" + user + "@" + domain;
			}
			var anchor = document.createElement('a');
			anchor.href = emailLink;
			anchor.appendChild(emailText);
			
			// Replace the original email span with the new anchor
			span.parentNode.replaceChild(anchor, span);
			
			// Step the counter back because we removed some nodes.
			if ((i-3) < -1) i = -1; 	// Go to -1 because the loop is going to add one - we need to end up at zero, not 1, if we remove the first span.
			else i = i - 3;				// This function, unfortunately, assumes that the number of spans in the email is 3. Need a general solution
		}
	}
}


/* **************************************
Handle external links and popups
************************************** */
function windowLinks()
{
	if(!document.getElementsByTagName)
	{
		return;
	}

	var anchors = document.getElementsByTagName("a");
	for (var i = 0; i < anchors.length; i++)
	{
		var anchor = anchors[i];
		var relIndex = anchor.rel;
		if (relIndex)
		{
			// Split our REL value into parts 
			var relSplit = relIndex.split("|");
			
			// XHTML compliant target attribute 
			if (relSplit[0] == "external")
			{
				// Set the 'target' attribute to '_blank'
				anchor.target = "_blank";
				
				// Add a CSS class to it to allow us to style it
				if (anchor.className)
				{
					anchor.className += " external"; 
				}
				else
				{
					anchor.className = "external";
				}
				
				// Add a new title attribute to warn the users of a new window
				anchor.title = "Load in new window: "+ anchor.href;
			}
			
			// XHTML compliant popup attribute
			else if (relSplit[0] == "popup")
			{
				var strOptions="";
				
				// Attach a CSS class to it to allow us to style it
				anchor.className = "popup";
				
				// Add a new title attribute to warn the users of a new window
				anchor.title = "Loads in a Popup Window";
				
				// Modify the link to act as a popup
				anchor.popupWidth = relSplit[1]; 
				anchor.popupHeight = relSplit[2];
				anchor.onclick = function() {
					strOptions="resizable=yes, height="+this.popupHeight+", width="+this.popupWidth+", scrollbars=yes";
					window.open(this.href, '', strOptions); return false;
				};
			}
		}
	}
}


/* **************************************
Clear default inputs in a form field (usually using onfocus)
************************************** */
function clearFormField(formField, initialValue)
{
	if (formField.value == initialValue)
	{
		formField.value = "";
	}
}

/* **************************************
Validate a turing test question to protect forms from spam
************************************** */
function antiSpam(thisForm, result)
{
    if (thisForm.captcha.value == result)
    {
        return true;
    }
    else
    {
		submission_counter = 0;
        alert("Please answer the question at the bottom correctly.");
        thisForm.captcha.focus();
        return false;
    }
}


/* **************************************
Monitor the submit button to make sure it's only clicked once. Prevents multiple submissions of important forms.
************************************** */
submission_counter = 0;

function monitor() {
	submission_counter ++;
	
	if (submission_counter > 1)
	{
		return false;
	}
	return true;
}


/* **************************************
SWFObject v1.4.2: Flash Player detection and embed - http://blog.deconcept.com/swfobject/

SWFObject is (c) 2006 Geoff Stearns and is released under the MIT License:
http://www.opensource.org/licenses/mit-license.php

SWFObject is the SWF embed script formerly known as FlashObject. The name was changed for legal reasons.
************************************** */
 
// Want a singleton or else we get super recursion in deconcept.SWFObjectUtil.cleanupSWFs
if (typeof SWFObject == "undefined")
{
	if (typeof deconcept == "undefined")
	{
		var deconcept = new Object();
	}
	if (typeof deconcept.util == "undefined")
	{
		deconcept.util = new Object();
	}
	if (typeof deconcept.SWFObjectUtil == "undefined")
	{
		deconcept.SWFObjectUtil = new Object();
	}
	
	deconcept.SWFObject = function(_1,id,w,h,_5,c,_7,_8,_9,_a,_b)
	{
		if (!document.getElementById)
		{
			return;
		}
		
		this.DETECT_KEY = _b?_b:"detectflash";
		this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);
		this.params = new Object();
		this.variables = new Object();
		this.attributes = new Array();
		
		if(_1)
		{
			this.setAttribute("swf",_1);
		}
		if(id)
		{
			this.setAttribute("id",id);
		}
		if(w)
		{
			this.setAttribute("width",w);
		}
		if(h)
		{
			this.setAttribute("height",h);
		}
		if(_5)
		{
			this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));
		}
	
		this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
		
		if(c)
		{
			this.addParam("bgcolor",c);
		}
	
		var q = _8?_8:"high";
		this.addParam("quality",q);
		this.setAttribute("useExpressInstall",_7);
		this.setAttribute("doExpressInstall",false);
		var _d = (_9)?_9:window.location;
		this.setAttribute("xiRedirectUrl",_d);
		this.setAttribute("redirectUrl","");
	
		if(_a)
		{
			this.setAttribute("redirectUrl",_a);
		}
	};
	
	deconcept.SWFObject.prototype = {
		setAttribute:function(_e,_f) { this.attributes[_e]=_f; },
		getAttribute:function(_10) { return this.attributes[_10]; },
		addParam:function(_11,_12) { this.params[_11]=_12; },
		getParams:function(){ return this.params; },
		addVariable:function(_13,_14){ this.variables[_13]=_14; },
		getVariable:function(_15){ return this.variables[_15]; },
		getVariables:function(){ return this.variables;	},
		getVariablePairs:function(){
			var _16 = new Array();
			var key;
			var _18 = this.getVariables();
			for (key in _18)
			{
				_16.push(key+"="+_18[key]);
			}
			return _16;
		},
		getSWFHTML:function(){
			var _19 = "";
			if (navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length)
			{
				if (this.getAttribute("doExpressInstall"))
				{
					this.addVariable("MMplayerType","PlugIn");
				}
				_19 = "<embed type=\"application/x-shockwave-flash\" src=\""
					+ this.getAttribute("swf")
					+ "\" width=\""
					+ this.getAttribute("width")
					+ "\" height=\""
					+ this.getAttribute("height")
					+ "\"";
				_19 += " id=\""
					+ this.getAttribute("id")
					+ "\" name=\""
					+ this.getAttribute("id")
					+ "\" ";
				var _1a=this.getParams();
				for (var key in _1a)
				{
					_19 += [key] + "=\"" + _1a[key] + "\" ";
				}
				var _1c = this.getVariablePairs().join("&");
				if (_1c.length>0)
				{
					_19 += "flashvars=\""+_1c+"\"";
				}
				_19 += "/>";
			}
			else
			{
				if (this.getAttribute("doExpressInstall"))
				{
					this.addVariable("MMplayerType","ActiveX");
				}
				_19 = "<object id=\""
					+ this.getAttribute("id")
					+ "\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""
					+ this.getAttribute("width")
					+ "\" height=\""
					+ this.getAttribute("height")
					+ "\">";
				_19 += "<param name=\"movie\" value=\""
					+ this.getAttribute("swf")
					+ "\" />";
				var _1d=this.getParams();
				for (var key in _1d)
				{
					_19 += "<param name=\""
						+ key
						+ "\" value=\""
						+ _1d[key]
						+ "\" />";
				}
				var _1f = this.getVariablePairs().join("&");
				if (_1f.length > 0)
				{
					_19 += "<param name=\"flashvars\" value=\""
						+ _1f
						+ "\" />";
				}
				_19 += "</object>";
			}
			return _19;
		},
		write:function(_20)
		{
			if (this.getAttribute("useExpressInstall"))
			{
				var _21 = new deconcept.PlayerVersion([6,0,65]);
				if (this.installedVer.versionIsValid(_21) && !this.installedVer.versionIsValid(this.getAttribute("version")))
				{
					this.setAttribute("doExpressInstall",true);
					this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));
					document.title=document.title.slice(0,47)+" - Flash Player Installation";
					this.addVariable("MMdoctitle",document.title);
				}
			}
			if (this.skipDetect || this.getAttribute("doExpressInstall") || this.installedVer.versionIsValid(this.getAttribute("version")))
			{
				var n=(typeof _20=="string") ? document.getElementById(_20) : _20;
				n.innerHTML = this.getSWFHTML();
				return true;
			}
			else
			{
				if (this.getAttribute("redirectUrl")!="")
				{
					document.location.replace(this.getAttribute("redirectUrl"));
				}
			}
			return false;
		}
	};
	
	deconcept.SWFObjectUtil.getPlayerVersion = function() {
		var _23=new deconcept.PlayerVersion([0,0,0]);
		if (navigator.plugins&&navigator.mimeTypes.length)
		{
			var x=navigator.plugins["Shockwave Flash"];
			if (x&&x.description)
			{
				_23 = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));
			}
		}
		else
		{
			try
			{
				var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
			}
			catch(e)
			{
				try
				{
					var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
					_23=new deconcept.PlayerVersion([6,0,21]);
					axo.AllowScriptAccess="always";
				}
				catch(e)
				{
					if (_23.major==6)
					{
						return _23;
					}
				}
			
				try
				{
					axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
				}
				catch(e) {} 
			}
			
			if (axo!=null)
			{
				_23 = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
			}
		}
		return _23;
	};
	
	deconcept.PlayerVersion=function(_27)
	{
		this.major=_27[0]!=null?parseInt(_27[0]):0;
		this.minor=_27[1]!=null?parseInt(_27[1]):0;
		this.rev=_27[2]!=null?parseInt(_27[2]):0;
	};
	
	deconcept.PlayerVersion.prototype.versionIsValid=function(fv)
	{
		if (this.major<fv.major) { return false; }
		if (this.major>fv.major) { return true; }
		if (this.minor<fv.minor) { return false; }
		if (this.minor>fv.minor) { return true; }
		if (this.rev<fv.rev) { return false; }
		return true;
	};
	
	deconcept.util = {
		getRequestParameter:function(_29)
		{
			var q=document.location.search||document.location.hash;
			if (q)
			{
				var _2b=q.substring(1).split("&");
				for (var i=0;i<_2b.length;i++)
				{
					if (_2b[i].substring(0,_2b[i].indexOf("="))==_29)
					{
						return _2b[i].substring((_2b[i].indexOf("=")+1));
					}
				}
			}
			return "";
		}
	};

	deconcept.SWFObjectUtil.cleanupSWFs = function()
	{
		var _2d=document.getElementsByTagName("OBJECT");
		for(var i=0;i<_2d.length;i++)
		{
			_2d[i].style.display="none";
			for(var x in _2d[i])
			{
				if(typeof _2d[i][x]=="function")
				{
					_2d[i][x]=null;
				}
			}
		}
	};

	// Bugfix by kurt.griffiths@sebomarketing.com
	//
	// Since this variable is global, the third time this script is included in a document, we have
	// an infinite recusion bug. The second time, we set old_unload to cleanup the SWFs and then
	// create an anonymous method that calls it. The third time we change old_unload to point to 
	// window.onunload, but window.onunload is pointing to a function which calls old_unload! So
	// when you call it, it just keeps calling itself.
	//
	// We could  put this thing into a function, so that old_unload is no longer global. However, 
	// we really only need to call cleanupSWFs once, so we just will skip this whole script if it
	// has already been included once.
	var old_unload = window.onunload;
	if (typeof old_unload == "function")
	{
		window.onunload = function()
		{ 
			deconcept.SWFObjectUtil.cleanupSWFs();
			old_unload();
		};
	}
	else
	{
		window.onunload = function() 
		{
			deconcept.SWFObjectUtil.cleanupSWFs
		};
	}

	if (Array.prototype.push == null)
	{
		Array.prototype.push=function(_30)
		{
			this[this.length]=_30;
			return this.length;
		};
	}

	var getQueryParamValue=deconcept.util.getRequestParameter;
	var FlashObject=deconcept.SWFObject; // for legacy support
	var SWFObject=deconcept.SWFObject;
}

/* **************************************
Stack up the onload events
************************************** */
addLoadEvent(function() {
	windowLinks();
	emailEncode();
});
