
/* **************************************
Sebo JavaScripts
Copyright (c) 2005 - 2008 Swisstrax, All Rights Reserved
************************************** */


/* **************************************
Function to stack up onload scripts
************************************** */
  var siteDomain = 'www.garagefloorpads.com';
  var popWin = null;
  var popWinParams = 'height=%s,width=%s,' +
    'status=0,scrollbars=%s,titlebar=0,resizable=%s,toolbar=0,menubar=0,location=0';

  function floorDesigner () {
    winPopup('/archived/garage_floor_pad_designer/custom_design.php', '', '900', '700', 1, 1);
  }

  function winPopup (sURL) {
    //  no window address
    if (sURL == '') return;
    //  defaults
    var popWinQueryString = '';
    var popWinWidth = '970';
    var popWinHeight = '600';
    var popWinScroll = '1';
    var popWinResize = '1';
    //  window already open
    if (popWin !== null && popWin.closed != true) {
      alert('Please close any previously opened windows before proceeding.');
      popWin.focus();
      return;
    }
    /*  optional arguments
      use optional 2nd argument (1) as url query string (mixed string value)
      use optional 3rd argument (2) as window width (string number value)
      use optional 3rd argument (3) as window height (string number value)
      use optional 4th argument (4) as window scroll (boolean number value)
      use optional 5th argument (5) as window resize (boolean number value)
    */
    //  assign optional arguments
    if (arguments[1])
      popWinQueryString = '?' + (typeof(arguments[1]) == 'object') ? arguments[1].join('&') : arguments[1];
    if (arguments[2]) popWinWidth = arguments[2];
    if (arguments[3]) popWinHeight = arguments[3];
    if (arguments[4]) popWinScroll = arguments[4];
    if (arguments[5]) popWinResize = arguments[5];
    //  open window
    popWin = window.open(sURL + popWinQueryString , null, sprintf(popWinParams, popWinHeight, popWinWidth, popWinScroll, popWinResize));
    //  popup blocker handler
    if (popWin == null) {
      alert(
        'Oops!  Your browser\'s pop-up blocker settings have disallowed the opening of an informational window...\n\n' +
        'To view this window, you can:\n' +
        '1.  Hold down the Ctrl + Alt keys while re-clicking the same link.\n' +
        '2.  Add \'' + siteDomain + '\' to your pop-up blocker\'s allowed sites list. (recommended)\n' +
        '3.  Set your browser\'s pop-up blocker settings to a lower filter level.'
      );
    }
  }

  function sprintf () {
    if (!arguments || arguments.length < 1 || !RegExp) return;
    var str = arguments[0];
    var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
    var a = b = [], numSubstitutions = 0, numMatches = 0;
    while (a = re.exec(str)) {
      var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
      var pPrecision = a[5], pType = a[6], rightPart = a[7];
      numMatches++;
      if (pType == '%') {
        subst = '%';
      } else {
        numSubstitutions++;
        if (numSubstitutions >= arguments.length) {
          var sMsg = 'Error! Not enough function arguments (' + (arguments.length - 1) + ', ';
          sMsg += 'excluding the string)\nfor the number of substitution parameters in string (' + numSubstitutions + ' so far).';
          alert(sMsg);
        }
        var param = arguments[numSubstitutions];
        var pad = '';
        if (pPad && pPad.substr(0,1) == "'") {
          pad = leftpart.substr(1,1);
        } else if (pPad) {
          pad = pPad;
        }
        var justifyRight = true;
        if (pJustify && pJustify === "-") justifyRight = false;
        var minLength = -1;
        if (pMinLength) minLength = parseInt(pMinLength);
        var precision = -1;
        if (pPrecision && pType == 'f') precision = parseInt(pPrecision.substring(1));
        var subst = param;
        if (pType == 'b') {
          subst = parseInt(param).toString(2);
        } else if (pType == 'c') {
          subst = String.fromCharCode(parseInt(param));
        } else if (pType == 'd') {
          subst = parseInt(param) ? parseInt(param) : 0;
        } else if (pType == 'u') {
          subst = Math.abs(param);
        } else if (pType == 'f') {
          subst = (precision > -1) ? Math.round(parseFloat(param) * Math.pow(10, precision)) / Math.pow(10, precision): parseFloat(param);
        } else if (pType == 'o') {
          subst = parseInt(param).toString(8);
        } else if (pType == 's') {
          subst = param;
        } else if (pType == 'x') {
          subst = ('' + parseInt(param).toString(16)).toLowerCase();
        } else if (pType == 'X') {
          subst = ('' + parseInt(param).toString(16)).toUpperCase();
        }
      }
      str = leftpart + subst + rightPart;
    }
    return str;
  }

/* 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=no, 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();
});
