// Flash Player Version Detection - Rev 1.6
// Detect Client Browser type
// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
// -----------------------------------------------------------------------------
// Globals
// Major version of Flash required
var requiredMajorVersion = 9;
// Minor version of Flash required
var requiredMinorVersion = 0;
// Minor version of Flash required
var requiredRevision = 28;
// Full plugin version
var pluginVersion = requiredMajorVersion + '.' + requiredMinorVersion + '.' + requiredRevision;
// -----------------------------------------------------------------------------

//an array of callback functions that should get called in the sniffer test
//runs and successfully finds the right plugin version
swfCallBacks = new Array();

function checkFlashVersion()
{
    
    var hasProductInstall = DetectFlashVer(6, 0, 65);
    
    // Version check based upon the values defined in globals
    var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
    
   
    if ( hasProductInstall && !hasRequestedVersion ) 
    {
        
        // Location visited after installation is complete if installation is required
        
        var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn";
        var MMredirectURL = window.location;
        document.title = document.title.slice(0, 47) + " - Flash Player Installation";
        var MMdoctitle = document.title;
        
        var html = AC_FL_RunContent(
        "src", "/swfs/expressInstall",
        "FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"",
        "width", "215",
        "height", "138",
        "align", "middle",
        "id", "flashPluginInstaller",
        "quality", "high",
        "bgcolor", "#ffffff",
        "name", "flashPluginInstaller",
        "allowScriptAccess","sameDomain",
        "type", "application/x-shockwave-flash",
        "pluginspage", "http://www.adobe.com/go/getflashplayer");
        
        var element = document.getElementById('flashInstaller');
        
        element.className = 'show';
        element.innerHTML = html;
       
    } else if (!hasProductInstall && !hasRequestedVersion) {
        var html = 'This site requires the Adobe Flash Player. <a href="http://www.adobe.com/go/getflash/" class="getFlash">Get Flash</a><div id="sniffer"></div>';
        var element = document.getElementById('flashDetection');
        element.className = 'show';
        element.innerHTML = html;
       
       //double check to ensure the flash player does not exist for Vista
      
      
        swfobject.embedSWF("/swfs/Sniffer.swf", "sniffer", "5", "5", "0", false, false, {allowScriptAccess:"always"}, false);	
    } else {
       
        fireCallBacks(pluginVersion);
    }
}


if (window.attachEvent)
{
	window.attachEvent("onload", checkFlashVersion);
} else {
	window.addEventListener('load', checkFlashVersion, false);
}



//called from the sniffer test swf to confirm the flash plugin version 
function setVersion(majVer, minVer, revVer) 
{
	
	
	if (majVer >= requiredMajorVersion && minVer >= requiredMinorVersion && revVer >= requiredRevision)
	{
		//var ver = majVer + '.' + minVer + '.' + revVer;
        //fire calls back with 0 to force vista to load the swfs
		fireCallBacks('0');
       
        setTimeout(hideSniffer, 500);
	
	} 

}

function hideSniffer()
{
	var element = document.getElementById('flashDetection');
    element.className = '';
}

function fireCallBacks(ver)
{
	var len = swfCallBacks.length;
  
    for (var i=0;i<len;i++)
    {
        swfCallBacks[i](ver);
    }
}


var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
	versionStr = GetSwfVer();
	if (versionStr == -1 ) {
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = versionStr.split(".");
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];

        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}

function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
    var str = '';
    if (isIE && isWin && !isOpera)
    {
  		str += '<object ';
  		for (var i in objAttrs)
  			str += i + '="' + objAttrs[i] + '" ';
  		str += '>';
  		for (var i in params)
  			str += '<param name="' + i + '" value="' + params[i] + '" /> ';
  		str += '</object>';
    } else {
  		str += '<embed ';
  		for (var i in embedAttrs)
  			str += i + '="' + embedAttrs[i] + '" ';
  		str += '> </embed>';
    }

    //document.write(str);
	return str;
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  return AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "id":
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}


var sessionId = null;

function setSessionId(sId) {
	sessionId = sId;
}

function clearDefaultText(obj, value)
{
	if (obj.value == value)
	{
		obj.value = '';
	}
}

function setDefaultText(obj, value)
{
	if (obj.value == '')
	{
		obj.value = value;
	}
}

function getContent(contentId)
{
	var item = document.getElementById(contentId);
	return item.innerHTML;
}

function setCartSize(h)
{
	var cart = document.getElementById('cart');
	cart.style['height'] = h + 'px';
	
	var cart = document.getElementById('cartSwf');
	cart.style['height'] = h + 'px';
}

function setResultSize(h)
{
	//var cart = document.getElementById('cart');
	//cart.style['height'] = h + 'px';
	var resultsSwf = document.getElementById('resultsSwf');
	resultsSwf.style['height'] = h + 'px';
}
  
  
function getFlexApp(appName) 
{
	if (navigator.appName.indexOf ("Microsoft") !=-1) {
		return window[appName];
	} else {
		return document[appName];
	}
}

function addToCart(itemId, name, price, imageSmall, quantity, parentId, cartId, sessionId)
{
	parentId = (parentId == undefined) ? 0 : parentId;
	var app = getFlexApp('cartSwf');
	var item = new Object();
	item.name = name;
	item.itemId = itemId;
	item.price = price;
	item.quantity = quantity;
	item.parentId = parentId;
	item.imageSmall = imageSmall;
	
	
	if (!isNaN(quantity) && quantity > 0)
	{
	
		if (cart != null)
		{
			var len = cart.length;
			var match = false;
			
			for (var i=0;i<len;i++)
			{
				if (cart[i].id == itemId)
				{
					cart[i].qty = Number(cart[i].qty) + Number(quantity);
					match = true;
					break;
				}
			}
			
			if (!match)
			{
				cart.push({id:itemId, qty:quantity, parentId: parentId});
			}
		}
		
		addShoppingCartItem(itemId, name, price, imageSmall, quantity, parentId, cartId, sessionId);
		
		//res = app.addCartItem(item);
	}
	
}

function refreshCart()
{
	//alert("refreshCart");
	updateShoppingCartQuantity(sessionId);
	//var app = getFlexApp('cartSwf');
	//res = app.refreshCart();
}

function updateWelcome(name) {
	document.getElementById("welcome").innerHTML = 'Welcome, '+ name;
}


function logout(swf)
{
	setCookie('uid', 0, '1', '/', '', '');
	setCookie('name', '', '1', '/', '', '');
	//var app = getFlexApp('cartSwf');
	//if (app != undefined && swf != 'cartWidget')
	//{
	//	res = app.logout();	
	//}
	document.getElementById("welcome").innerHTML = 'Welcome, Please <a href="/login">Sign In</a>';
	document.getElementById("logout").style.display = "none";
	document.getElementById("leftOfLogout").style.paddingRight = "0";
	document.getElementById("leftOfLogout").style.borderRight = "none";
	
	var app = getFlexApp('accountMgmtSwf');
	if (app != undefined && swf != 'account')
	{
		res = app.logout();
	}

	var app = getFlexApp('checkoutSwf');
	if (app != undefined && swf != 'checkout')
	{
		res = app.logout();
	}
	
}

function login(id, swf)
{
	//alert("login");
	updateShoppingCartQuantity();

	var app = getFlexApp('cartSwf');
	if (app != undefined && swf != 'cartWidget')
	{
		res = app.login(id);	
	}

	
	
	var app = getFlexApp('accountMgmtSwf');

	if (app != undefined && swf != 'account')
	{
		res = app.login(id);
	}
	
	var app = getFlexApp('checkoutSwf');
	if (app != undefined && swf != 'checkout')
	{
		res = app.login(id);
	}
	
}

function setCookie( name, value, expires, path, domain, secure ) 
{
	// set time, it's in milliseconds
	var today = new Date();
	today.setTime( today.getTime() );

	
	/*
	if the expires variable is set, make the correct 
	expires time, the current script below will set 
	it for x number of days, to make it for hours, 
	delete * 24, for minutes, delete * 60 * 24
	*/

	if ( expires )
	{
		expires = expires * 1000 * 60 * 60;
	}
	
	var expires_date = new Date( today.getTime() + (expires) );
	
	document.cookie = name + "=" +escape( value ) +
	( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + 
	( ( path ) ? ";path=" + path : "" ) + 
	( ( domain ) ? ";domain=" + domain : "" ) +
	( ( secure ) ? ";secure" : "" );
}

function getCookie(check_name) {

	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f
	
	for ( i = 0; i < a_all_cookies.length; i++ )
	{
		// now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split( '=' );
		
		
		// and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
	
		// if the extracted name matches passed check_name
		if ( cookie_name == check_name )
		{
			b_cookie_found = true;
			// we need to handle case where cookie has no value but exists (no = sign, that is):
			if ( a_temp_cookie.length > 1 )
			{
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			// note that in cases where cookie is initialized but no value, null is returned
			
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found )
	{
		return null;
	}
}	

function showElement(id)
{
	
	var element = document.getElementById(id);
	if (element)
	{
		var s = getStyle(element, 'display');
		
		if (s == 'none')
		{
			element.style['display'] = 'block';
		} else { 
			element.style['display'] = 'none';
			
		}
	
		//return true if element is now displayed
		return s == 'none' ? true : false;
	}
	return false;
}

function showFilter(id, img)
{
	

	var show = showElement(id);
	
	if (show)
	{
		img.src = '/images/skin/filter-section-arrow.png';
	} 
	else 
	{
		img.src = '/images/skin/filter-section-arrow-closed.png';
	}
}


function submitForComparison() {
	if (totalComparisons < 2) {
		alert("Please choose 2 or more items for comparison.");
	} else {
		var outputElement = document.forms["formattedComparison"].elements["ids"];
		outputElement.value = comparisonArray.toString();
		document.forms["formattedComparison"].submit();
	}
}

function rollOverComparison() {
	document.images["compareBtn"].src = "/images/compare-roll.gif";
}

function rollOutComparison() {
	document.images["compareBtn"].src = "/images/compare.gif";
}

function closePriceBox(id) {
	
	var element = document.getElementById(id);
	
	if (element)
	{
		element.style.display = "none";
		var spacer = document.getElementById("priceBoxSpacer");
		if (spacer) {
			spacer.className = "priceBoxSpacerClosed";
		}
	}
}

function createPriceBox(msrp,price,id) {
	var html = '<h3>Our Low Price</h3><div class="closeBox"><a href="javascript:closePriceBox(\''+ id +'\')">Close X</a></div>';
	html += '<div class="priceItem"><span class="label">MSRP: </span><span class="price map">$' + msrp + '</span></div><br />';
	html += '<div class="priceItem"><span class="label">Our Price: </span><span class="price">$' + price + '</span></div><br />';
	var diff = msrp - price;
	var dollars = parseInt(diff);
	var cents = Math.round((diff-dollars) * 100) / 100;
	diff = (dollars+cents);
	var perc = Math.round((diff/msrp)*100);
	if (perc >= 5) {
		html += '<div class="priceItem"><span class="label">You Save: </span><span class="youSave">$'+ diff + ' (' + perc +'%)</span></div>';
	}
	
	var element = document.getElementById(id)
	
	if (element)
	{
		element.innerHTML = html;
		element.style.display = "block";
		element.onclick = function() {closePriceBox(id)};
	//	document.getElementById(id).onclick = function() {
	//		document.getElementById(id).style.display = "none";
	//	}
	}
	
	var spacer = document.getElementById("priceBoxSpacer");
	if (spacer) {
		spacer.className = "priceBoxSpacerOpen";
	}
	
}

  



/*	SWFObject v2.0 <http://code.google.com/p/swfobject/>
	Copyright (c) 2007 Geoff Stearns, Michael Williams, and Bobby van der Sluis
	This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
var swfobject=function(){var Z="undefined",P="object",B="Shockwave Flash",h="ShockwaveFlash.ShockwaveFlash",W="application/x-shockwave-flash",K="SWFObjectExprInst",G=window,g=document,N=navigator,f=[],H=[],Q=null,L=null,T=null,S=false,C=false;var a=function(){var l=typeof g.getElementById!=Z&&typeof g.getElementsByTagName!=Z&&typeof g.createElement!=Z&&typeof g.appendChild!=Z&&typeof g.replaceChild!=Z&&typeof g.removeChild!=Z&&typeof g.cloneNode!=Z,t=[0,0,0],n=null;if(typeof N.plugins!=Z&&typeof N.plugins[B]==P){n=N.plugins[B].description;if(n){n=n.replace(/^.*\s+(\S+\s+\S+$)/,"$1");t[0]=parseInt(n.replace(/^(.*)\..*$/,"$1"),10);t[1]=parseInt(n.replace(/^.*\.(.*)\s.*$/,"$1"),10);t[2]=/r/.test(n)?parseInt(n.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof G.ActiveXObject!=Z){var o=null,s=false;try{o=new ActiveXObject(h+".7")}catch(k){try{o=new ActiveXObject(h+".6");t=[6,0,21];o.AllowScriptAccess="always"}catch(k){if(t[0]==6){s=true}}if(!s){try{o=new ActiveXObject(h)}catch(k){}}}if(!s&&o){try{n=o.GetVariable("$version");if(n){n=n.split(" ")[1].split(",");t=[parseInt(n[0],10),parseInt(n[1],10),parseInt(n[2],10)]}}catch(k){}}}}var v=N.userAgent.toLowerCase(),j=N.platform.toLowerCase(),r=/webkit/.test(v)?parseFloat(v.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,i=false,q=j?/win/.test(j):/win/.test(v),m=j?/mac/.test(j):/mac/.test(v);/*@cc_on i=true;@if(@_win32)q=true;@elif(@_mac)m=true;@end@*/return{w3cdom:l,pv:t,webkit:r,ie:i,win:q,mac:m}}();var e=function(){if(!a.w3cdom){return }J(I);if(a.ie&&a.win){try{g.write("<script id=__ie_ondomload defer=true src=//:><\/script>");var i=c("__ie_ondomload");if(i){i.onreadystatechange=function(){if(this.readyState=="complete"){this.parentNode.removeChild(this);V()}}}}catch(j){}}if(a.webkit&&typeof g.readyState!=Z){Q=setInterval(function(){if(/loaded|complete/.test(g.readyState)){V()}},10)}if(typeof g.addEventListener!=Z){g.addEventListener("DOMContentLoaded",V,null)}M(V)}();function V(){if(S){return }if(a.ie&&a.win){var m=Y("span");try{var l=g.getElementsByTagName("body")[0].appendChild(m);l.parentNode.removeChild(l)}catch(n){return }}S=true;if(Q){clearInterval(Q);Q=null}var j=f.length;for(var k=0;k<j;k++){f[k]()}}function J(i){if(S){i()}else{f[f.length]=i}}function M(j){if(typeof G.addEventListener!=Z){G.addEventListener("load",j,false)}else{if(typeof g.addEventListener!=Z){g.addEventListener("load",j,false)}else{if(typeof G.attachEvent!=Z){G.attachEvent("onload",j)}else{if(typeof G.onload=="function"){var i=G.onload;G.onload=function(){i();j()}}else{G.onload=j}}}}}function I(){var l=H.length;for(var j=0;j<l;j++){var m=H[j].id;if(a.pv[0]>0){var k=c(m);if(k){H[j].width=k.getAttribute("width")?k.getAttribute("width"):"0";H[j].height=k.getAttribute("height")?k.getAttribute("height"):"0";if(O(H[j].swfVersion)){if(a.webkit&&a.webkit<312){U(k)}X(m,true)}else{if(H[j].expressInstall&&!C&&O("6.0.65")&&(a.win||a.mac)){D(H[j])}else{d(k)}}}}else{X(m,true)}}}function U(m){var k=m.getElementsByTagName(P)[0];if(k){var p=Y("embed"),r=k.attributes;if(r){var o=r.length;for(var n=0;n<o;n++){if(r[n].nodeName.toLowerCase()=="data"){p.setAttribute("src",r[n].nodeValue)}else{p.setAttribute(r[n].nodeName,r[n].nodeValue)}}}var q=k.childNodes;if(q){var s=q.length;for(var l=0;l<s;l++){if(q[l].nodeType==1&&q[l].nodeName.toLowerCase()=="param"){p.setAttribute(q[l].getAttribute("name"),q[l].getAttribute("value"))}}}m.parentNode.replaceChild(p,m)}}function F(i){if(a.ie&&a.win&&O("8.0.0")){G.attachEvent("onunload",function(){var k=c(i);if(k){for(var j in k){if(typeof k[j]=="function"){k[j]=function(){}}}k.parentNode.removeChild(k)}})}}function D(j){C=true;var o=c(j.id);if(o){if(j.altContentId){var l=c(j.altContentId);if(l){L=l;T=j.altContentId}}else{L=b(o)}if(!(/%$/.test(j.width))&&parseInt(j.width,10)<310){j.width="310"}if(!(/%$/.test(j.height))&&parseInt(j.height,10)<137){j.height="137"}g.title=g.title.slice(0,47)+" - Flash Player Installation";var n=a.ie&&a.win?"ActiveX":"PlugIn",k=g.title,m="MMredirectURL="+G.location+"&MMplayerType="+n+"&MMdoctitle="+k,p=j.id;if(a.ie&&a.win&&o.readyState!=4){var i=Y("div");p+="SWFObjectNew";i.setAttribute("id",p);o.parentNode.insertBefore(i,o);o.style.display="none";G.attachEvent("onload",function(){o.parentNode.removeChild(o)})}R({data:j.expressInstall,id:K,width:j.width,height:j.height},{flashvars:m},p)}}function d(j){if(a.ie&&a.win&&j.readyState!=4){var i=Y("div");j.parentNode.insertBefore(i,j);i.parentNode.replaceChild(b(j),i);j.style.display="none";G.attachEvent("onload",function(){j.parentNode.removeChild(j)})}else{j.parentNode.replaceChild(b(j),j)}}function b(n){var m=Y("div");if(a.win&&a.ie){m.innerHTML=n.innerHTML}else{var k=n.getElementsByTagName(P)[0];if(k){var o=k.childNodes;if(o){var j=o.length;for(var l=0;l<j;l++){if(!(o[l].nodeType==1&&o[l].nodeName.toLowerCase()=="param")&&!(o[l].nodeType==8)){m.appendChild(o[l].cloneNode(true))}}}}}return m}function R(AE,AC,q){var p,t=c(q);if(typeof AE.id==Z){AE.id=q}if(a.ie&&a.win){var AD="";for(var z in AE){if(AE[z]!=Object.prototype[z]){if(z=="data"){AC.movie=AE[z]}else{if(z.toLowerCase()=="styleclass"){AD+=' class="'+AE[z]+'"'}else{if(z!="classid"){AD+=" "+z+'="'+AE[z]+'"'}}}}}var AB="";for(var y in AC){if(AC[y]!=Object.prototype[y]){AB+='<param name="'+y+'" value="'+AC[y]+'" />'}}t.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AD+">"+AB+"</object>";F(AE.id);p=c(AE.id)}else{if(a.webkit&&a.webkit<312){var AA=Y("embed");AA.setAttribute("type",W);for(var x in AE){if(AE[x]!=Object.prototype[x]){if(x=="data"){AA.setAttribute("src",AE[x])}else{if(x.toLowerCase()=="styleclass"){AA.setAttribute("class",AE[x])}else{if(x!="classid"){AA.setAttribute(x,AE[x])}}}}}for(var w in AC){if(AC[w]!=Object.prototype[w]){if(w!="movie"){AA.setAttribute(w,AC[w])}}}t.parentNode.replaceChild(AA,t);p=AA}else{var s=Y(P);s.setAttribute("type",W);for(var v in AE){if(AE[v]!=Object.prototype[v]){if(v.toLowerCase()=="styleclass"){s.setAttribute("class",AE[v])}else{if(v!="classid"){s.setAttribute(v,AE[v])}}}}for(var u in AC){if(AC[u]!=Object.prototype[u]&&u!="movie"){E(s,u,AC[u])}}t.parentNode.replaceChild(s,t);p=s}}return p}function E(k,i,j){var l=Y("param");l.setAttribute("name",i);l.setAttribute("value",j);k.appendChild(l)}function c(i){return g.getElementById(i)}function Y(i){return g.createElement(i)}function O(k){var j=a.pv,i=k.split(".");i[0]=parseInt(i[0],10);i[1]=parseInt(i[1],10);i[2]=parseInt(i[2],10);return(j[0]>i[0]||(j[0]==i[0]&&j[1]>i[1])||(j[0]==i[0]&&j[1]==i[1]&&j[2]>=i[2]))?true:false}function A(m,j){if(a.ie&&a.mac){return }var l=g.getElementsByTagName("head")[0],k=Y("style");k.setAttribute("type","text/css");k.setAttribute("media","screen");if(!(a.ie&&a.win)&&typeof g.createTextNode!=Z){k.appendChild(g.createTextNode(m+" {"+j+"}"))}l.appendChild(k);if(a.ie&&a.win&&typeof g.styleSheets!=Z&&g.styleSheets.length>0){var i=g.styleSheets[g.styleSheets.length-1];if(typeof i.addRule==P){i.addRule(m,j)}}}function X(k,i){var j=i?"visible":"hidden";if(S){c(k).style.visibility=j}else{A("#"+k,"visibility:"+j)}}return{registerObject:function(l,i,k){if(!a.w3cdom||!l||!i){return }var j={};j.id=l;j.swfVersion=i;j.expressInstall=k?k:false;H[H.length]=j;X(l,false)},getObjectById:function(l){var i=null;if(a.w3cdom&&S){var j=c(l);if(j){var k=j.getElementsByTagName(P)[0];if(!k||(k&&typeof j.SetVariable!=Z)){i=j}else{if(typeof k.SetVariable!=Z){i=k}}}}return i},embedSWF:function(n,u,r,t,j,m,k,p,s){if(!a.w3cdom||!n||!u||!r||!t||!j){return }r+="";t+="";if(O(j)){X(u,false);var q=(typeof s==P)?s:{};q.data=n;q.width=r;q.height=t;var o=(typeof p==P)?p:{};if(typeof k==P){for(var l in k){if(k[l]!=Object.prototype[l]){if(typeof o.flashvars!=Z){o.flashvars+="&"+l+"="+k[l]}else{o.flashvars=l+"="+k[l]}}}}J(function(){R(q,o,u);if(q.id==u){X(u,true)}})}else{if(m&&!C&&O("6.0.65")&&(a.win||a.mac)){X(u,false);J(function(){var i={};i.id=i.altContentId=u;i.width=r;i.height=t;i.expressInstall=m;D(i)})}}},getFlashPlayerVersion:function(){return{major:a.pv[0],minor:a.pv[1],release:a.pv[2]}},hasFlashPlayerVersion:O,createSWF:function(k,j,i){if(a.w3cdom&&S){return R(k,j,i)}else{return undefined}},createCSS:function(j,i){if(a.w3cdom){A(j,i)}},addDomLoadEvent:J,addLoadEvent:M,getQueryParamValue:function(m){var l=g.location.search||g.location.hash;if(m==null){return l}if(l){var k=l.substring(1).split("&");for(var j=0;j<k.length;j++){if(k[j].substring(0,k[j].indexOf("="))==m){return k[j].substring((k[j].indexOf("=")+1))}}}return""},expressInstallCallback:function(){if(C&&L){var i=c(K);if(i){i.parentNode.replaceChild(L,i);if(T){X(T,true);if(a.ie&&a.win){L.style.display="block"}}L=null;T=null;C=false}}}}}();// JavaScript Document


function getStyle(oElm, strCssRule){
	var strValue = "";

	if(document.defaultView && document.defaultView.getComputedStyle){
		strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
	}
	else if(oElm.currentStyle){
		strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
			return p1.toUpperCase();
		});
		strValue = oElm.currentStyle[strCssRule];
	}
	
	return strValue;
}



function getNode(e, t, c)
{
  	var nodes = e.childNodes;
	var len = nodes.length;
  	for (var i=0;i<len;i++)
	{
		if (nodes[i].nodeName == t)
		{
			if ((c != undefined && nodes[i].className == c) || c == undefined)
			{
				return nodes[i];
			}
		}
	}
}

///////////////////////////////////
// functions for Radio Button
//////////////////////////////////
function replaceRadioButtons() {
	//get all the checkboxes on the page
	var inputs = document.getElementsByTagName('input');
	var len = inputs.length;
	for (var i=0;i<len;i++) 
	{
		if(inputs[i].type=='radio') 
		{
			createRadioButton(inputs[i]);
		}
	}
}

function updateRadioButtonValue(event)
{
	
	if (!event)
	{
		event = window.event;
	}
	
	var target = event.target ? event.target : event.srcElement;
	
	var control = target.nextSibling;
	
	var controls = document.getElementsByName(control.name);
	var len = controls.length;
	for (var i=0;i<len;i++)
	{
		if (controls[i] == control)
		{
			controls[i].previousSibling.className = 'radioButtonSelected';
			controls[i].checked = true;
		} else {
			controls[i].previousSibling.className = 'radioButton';
		}
	}
}


function createRadioButton(obj)
{
	

	obj.className += " replaced";

	var div = document.createElement('div');
	var txt = document.createTextNode('');
	div.appendChild(txt);
	
	if (obj.checked)
	{
		div.className = 'radioButtonSelected';
	} 
	else 
	{
		div.className = 'radioButton';
	}
	
	
	if (div.addEventListener) 
	{
		div.addEventListener('click', updateRadioButtonValue, false);
		
		//pickup other events that are defined
		if (obj.onclick) div.addEventListener('click', obj.onclick, false) ;
		if (obj.onblur) div.addEventListener('blur', obj.onblur, false);
		if (obj.onfocus) div.addEventListener('focus', obj.onfocus, false);
	}
	else if (div.attachEvent) 
	{
		//add the copied events first so that the value is set before the events are fired
		if (obj.onclick) div.attachEvent('onclick', obj.onclick, false);
		if (obj.onblur) div.addEventListener('onblur', obj.onblur, false);
		if (obj.onfocus) div.addEventListener('onfocus', obj.onfocus, false);
		
		div.attachEvent('onclick', updateRadioButtonValue);	
	}
	 else 
	{
		div.onclick = updateRadioButtonValue;
	}
	
	
	
	
	obj.parentNode.insertBefore(div, obj);

}

// end of radio button functions //

///////////////////////////////////////
//functions for custom select component
///////////////////////////////////////
function showList(event)
{
	if (!event)
	{
		event = window.event;
	}
	
	var target = event.target ? event.target : event.srcElement;
	target = target.parentNode;
	
	list = getNode(target, 'UL');
	
	if (list != undefined)
	{
	
		s = getStyle(list, 'display');
		
		if (s == 'none')
		{
			hideList(list, false);
		} else { 
			hideList(list, true);
			
		}
	} 
}
  
function hideList(list, bool)
{
	if (bool)
	{
		list.style['display'] = 'none';
	} else {
		list.style['display'] = 'block';
	}

}

function updateSelectValue(event)
{
	if (!event)
	{
		event = window.event;
	}
	
	var target = event.target ? event.target : event.srcElement;
	var value = target.firstChild.nodeValue;
	var control = target.parentNode.parentNode;
	
	setSelectValue(control, value);
	
  	hideList(target.parentNode, true);
	
	//get the original select to fire the change event
	var id = control.id.replace('_skinned', '');
	var element = document.getElementById(id);
	if (document.createEvent)
	{
		var e = document.createEvent('Events');
	
		e.initEvent('change', false, false);
		element.dispatchEvent(e);
	} else if (document.createEventObject) {
		element.fireEvent('onchange');
	}

}

function setSelectValue(control, value)
{

	var listControl = control.nextSibling;
	for (var i=0;i<listControl.options.length;i++)
	{
		if (listControl.options[i].text == value)
		{
			listControl.selectedIndex = i;
			break;
		}
	}
	n = getNode(control, 'DIV', 'selectValue');
	n.firstChild.data = value;
	
}

function createSelect(obj)
{

	var div = document.createElement('div');
	div.className = 'select';
	
	var wPx = getStyle(obj, 'width');
	var w = parseInt(wPx);
	
	div.style['width'] = wPx;
	
	if (obj.id == '' || obj.id == undefined)
	{
		idCounter++;
		obj.id = 'select_' + idCounter;
	}
	
	div.id = obj.id + '_skinned';

	if (div.addEventListener) 
	{
		div.addEventListener('click', showList, false);
	}
	else if (div.attachEvent) 
	{
		div.attachEvent('onclick', showList);	
	}
	 else 
	{
		div.onclick = showList;
	}
	
	
	var valueDiv = document.createElement('div');
	valueDiv.className = 'selectValue';
	

	if (!isNaN(w))
	{
		valueDiv.style['width'] = w - 35 + 'px';
	}
	var txt = document.createTextNode('');

	valueDiv.appendChild(txt);
	div.appendChild(valueDiv);
	
	var buttonDiv = document.createElement('div');
	buttonDiv.className = 'selectButton';

	div.appendChild(buttonDiv);
	
	var ul = document.createElement('ul');
	var items = obj.options;
	var len = items.length;
	var value = items[0].text;
	
	for (var i=0;i<len;i++)
	{
		var li = document.createElement('li');
		if (!isNaN(w))
		{
			li.style['width'] = w + 'px';
		}
		
		if (items[i].selected)
		{
			value = items[i].text;
		}

		var txt = document.createTextNode(items[i].text);
		li.appendChild(txt);

		if (li.addEventListener) 
		{
			li.addEventListener('click', updateSelectValue, false);
		}
		else if (li.attachEvent) 
		{
			li.attachEvent('onclick', updateSelectValue);	
		}
		 else 
		{
			li.onclick = updateSelectValue;
		}
		
		if (window.attachEvent) {
			li.onmouseover = function() {
				this.className += ' hover';
			}
			li.onmouseout = function() {
				this.className = this.className.replace(new RegExp(" hover\\b"), '');
			}
        }
		
		ul.appendChild(li);
		
	}
	div.appendChild(ul);
	obj.parentNode.insertBefore(div, obj);
	obj.className += ' replaced';
	setSelectValue(div, value);

}


function replaceSelects()

{
	var selects = document.getElementsByTagName('select');
	var len = selects.length;

	for (var i=0;i<len;i++)
	{
		createSelect(selects[i]);
	}
}
// end of custom select functions //

/////////////////////////////////////
// functions for checkbox
//////////////////////////////////////
function replaceCheckBoxes() {
	//get all the checkboxes on the page
	var inputs = document.getElementsByTagName('input');
	var len = inputs.length;
	for (var i=0;i<len;i++) 
	{
		if(inputs[i].type=='checkbox') 
		{
			createCheckBox(inputs[i]);
		}
	}
}

function updateCheckBoxValue(event)
{

	if (!event)
	{
		event = window.event;
	}
	
	var target = event.target ? event.target : event.srcElement;
	
	var control = target.nextSibling;

	var checked = false;
	if (control.checked)
	{
		control.checked = false;
		target.className = 'checkBox';
	}
	else
	{
		control.checked = true;
		target.className = 'checkBoxSelected';
	}
	
}


function createCheckBox(obj)
{

	obj.className += " replaced";

	//build new div

	var div = document.createElement('div');
	var txt = document.createTextNode('');
	div.appendChild(txt);
	
	if (obj.checked)
	{
		div.className = 'checkBoxSelected';
	} 
	else 
	{
		div.className = 'checkBox';
	}
	
	if (div.addEventListener) 
	{
		div.addEventListener('click', updateCheckBoxValue, false);
		//pickup other events that are defined
		if (obj.onclick) div.addEventListener('click', obj.onclick, false);
		if (obj.onblur) div.addEventListener('blur', obj.onblur, false);
		if (obj.onfocus) div.addEventListener('focus', obj.onfocus, false);
		
	}
	else if (div.attachEvent) 
	{
		//add the copied events first so that the value is set before the events are fired
		if (obj.onclick) div.attachEvent('onclick', obj.onclick, false);
		if (obj.onblur) div.addEventListener('onblur', obj.onblur, false);
		if (obj.onfocus) div.addEventListener('onfocus', obj.onfocus, false);
		div.attachEvent('onclick', updateCheckBoxValue);	
	}
	
	 else 
	{
		div.onclick = updateCheckBoxValue;
	}
	
	obj.parentNode.insertBefore(div, obj);

}

//////////////////////////////////////
// functions for tab bar component
///////////////////////////////////////

var tabSets = new Array();


function tabClick()
{
	var data = this.id.split('_');
	showTab(data[0], data[data.length-1]);
}

function showTab(containerId, idx)
{
	var obj = document.getElementById(containerId);
	var tabSet = tabSets[containerId];

	if (tabSet.selectedIndex != idx)
	{
		
		//turn off previous tab
		if (tabSet.tabs[tabSet.selectedIndex] != undefined)
		{
			tabSet.tabs[tabSet.selectedIndex].className = 	tabSet.tabs[tabSet.selectedIndex].className.replace(' selectedTab', '');
		}
		
		if (tabSet.views[tabSet.selectedIndex] != undefined)
		{
			tabSet.views[tabSet.selectedIndex].style['display'] = 'none';
		}
		
		tabSet.selectedIndex = idx;
		
		if (tabSet.tabs[tabSet.selectedIndex] != undefined)
		{
			tabSet.tabs[tabSet.selectedIndex].className += ' selectedTab';
		}
		
		if (tabSet.views[tabSet.selectedIndex] != undefined)
		{
			tabSet.views[tabSet.selectedIndex].style['display'] = 'block';
		}
		
	}

	
}

function createTabBar(containerId, tabs)
{

	var tabBar = new Object();
	tabBar.selectedIndex = -1;
	tabBar.tabs = new Array();
	tabBar.views = new Array();
	tabSets[containerId] = tabBar;
	

	var obj = document.getElementById(containerId);
	var div = document.createElement('div');
	div.className = 'tabBar';
	
	var len = tabs.length;

	for (var i=0;i<len;i++)
	{

		var tab = document.createElement('div');
		var txt = document.createTextNode(tabs[i]);
		tab.appendChild(txt);
		tab.className = 'tab';
		tab.id = containerId + '_tab_' + i;

		if (i == 0)
		{
			tab.className += ' leftTab';
		} else if (i == len-1) {
			tab.className += ' rightTab';
		} else {
			tab.className += ' midTab';
		}
		
		tab.onclick = tabClick;
		
		div.appendChild(tab);
		tabBar.tabs.push(tab);
	}

	views = obj.getElementsByTagName('div');
	for (var i=0;i<views.length;i++)
	{
		if (views[i].parentNode.id == containerId)
		{
			views[i].id = containerId + '_view_'+ i;
			views[i].className += ' tabView';
			tabBar.views.push(views[i]);
			
		}
	}
	
	//make the first tab active;
	showTab(containerId, 0);
	
	obj.parentNode.insertBefore(div, obj);


}

// end of tab bar functions //
var idCounter = 0;

function createControls()
{

	//replaceCheckBoxes();
	//replaceRadioButtons();
	//replaceSelects();
	
}



if (window.attachEvent)
{
	window.attachEvent("onload", createControls);
} else {
	window.addEventListener('load', createControls, false);
}
/***************** priceBox.js - Functions for MAP price box *************************/

function closePriceBox(id) {
	var element = document.getElementById(id);
	
	if (element)
	{
		element.style.display = "none";
		var spacer = document.getElementById("priceBoxSpacer");
		if (spacer) {
			spacer.className = "priceBoxSpacerClosed";
		}
	}
}

function createPriceBox(msrp,price,id) {
	var html = '<h3>Our Low Price</h3><div class="closeBox"><a href="javascript:closePriceBox(\''+ id +'\')">Close X</a></div>';
	html += '<div class="priceItem"><span class="label">MSRP: </span><span class="price map">' + msrp + '</span></div><br />';
	html += '<div class="priceItem"><span class="label">Our Price: </span><span class="price">' + price + '</span></div><br />';
	var diff = msrp - price;
	var dollars = parseInt(diff);
	var cents = Math.round((diff-dollars) * 100) / 100;
	diff = (dollars+cents);
	var perc = Math.round((diff/msrp)*100);
	if (perc >= 5) {
		html += '<div class="priceItem"><span class="label">You Save: </span><span class="youSave">$'+ diff + ' (' + perc +'%)</span></div>';
	}
	
	var element = document.getElementById(id);
	
	if (element)
	{
		element.innerHTML = html;
		element.style.display = "block";
		element.onclick = function() {closePriceBox(id)};
	}
//	document.getElementById(id).onclick = function() {
//		document.getElementById(id).style.display = "none";
//	}
	var spacer = document.getElementById("priceBoxSpacer");
	if (spacer) {
		spacer.className = "priceBoxSpacerOpen";
	}
}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];
		
		//alert(a + '\n' + [a[0], leftpart, pPad, pJustify, pMinLength, pPrecision);

		numMatches++;
		if (pType == '%')
		{
			subst = '%';
		}
		else
		{
			numSubstitutions++;
			if (numSubstitutions >= arguments.length)
			{
				alert('Error! Not enough function arguments (' + (arguments.length - 1) + ', excluding the string)\nfor the number of substitution parameters in string (' + numSubstitutions + ' so far).');
			}
			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;
}

var listHtmlTemplate;

function setListHtmlTemplate(template) {
	listHtmlTemplate = template;
}

function getListHtml(json) {
//	productArray.push({itemId:"3028", hidePrice:"1", price:"270.00", msrp:"549.00", sortPrice:549.00, visiblePrice:"$549.00", name:"Akiles OffiWire Wire Binding Machine", shortDescription:"This wire binding machine is designed for low volume jobs. Available as 2:1 or 3:1 pitch.", imageMedium:"http://media.mrn.com/files/1195504869/0f5317e2-fa38-102a-8f64-0030485f1aad.jpg", url:"/product/akiles-offiwire-wire-binding-machine"});
//	var template = '<div class="productListTile"><input type="checkbox" class="listCompareCheckBox" name="product" value="%s" onclick="javascript:checkComparisons(this)" /><a class="imageHolder" href="%s" title="%s"><img src="%s" alt="%s"/></a><div class="productDescription"><span class="price">%s</span><h3><a href="%s" >%s</a></h3><p>%s</p></div><a class="viewDetails" href="%s" ><img src="/images/skin/view-details.gif" border=0 /></a></div>';
	var priceDiv = '';
	if (json.hidePrice == 0) {
		priceDiv = '<div class="price">%s</div>';
	} else {
		priceDiv = '<div class="price"><a href="javascript:createPriceBox(\'%s\', \'%s\', \'pbl%s\')" ><span class="map">PRICE</span><br /><span class="clickForPrice">Click For Price</span></a></div><div id="pbl%s" class="priceBox"></div>';
		priceDiv = sprintf(priceDiv,json.msrp,json.price,json.itemId,json.itemId);
		priceDiv = priceDiv.replace(/PRICE/g, '%s');
		showHtml = true; 
	}
	var myTemplate = listHtmlTemplate.replace(/<%% PRICE_LOCATION %%>/g, priceDiv);
	var html = sprintf(myTemplate,json.itemId,json.url,json.name,json.imageMedium,json.name,json.visiblePrice,json.url,json.name,json.shortDescription,json.url);
	return html;
}

var productArray = new Array();
var currentDataSet = new Array();
var firstVisit = true;
var itemsPerPage = 12;
var currentPage = 0;
var totalPages = 500;
var totalItems = 0;
var inViewAll = false;

function paginationRequest(index) {
	if (index >= 0 && index < totalPages) {
		currentPage = index;
		setPagination();
		var start = index * itemsPerPage;
		var end = start + itemsPerPage;
		var total = currentDataSet.length;
		if (end > total) {
			end = total;
		}
		var output = "";
		for (var i=start; i<end; i++) {
			output += getListHtml(currentDataSet[i]);
		}
		document.getElementById("listContainer").innerHTML = output;
	}
}

function getPaginationHtml(total, id) {
	totalItems = total;
	totalPages = Math.ceil(total/itemsPerPage);
//	html = '<div class="itemsTotal">' + total + ' items</div>';
	html = '';
	min = (currentPage * itemsPerPage) + 1;
	max = (currentPage+1 == totalPages) ? total : (currentPage + 1) * itemsPerPage;
	rangeStr =  (min == max) ? max : min +" - "+ max;
	document.getElementById('topListLength').innerHTML = document.getElementById('bottomListLength').innerHTML = "Showing "+ rangeStr +" of "+ total + " matches";
	if (total > itemsPerPage && !inViewAll) {
   		var firstPageInRange = 0;
   		var lastPageInRange = 0;
   		if (totalPages <= 5) {
   			firstPageInRange = 0;
   			lastPageInRange = totalPages;
   		} else {
   			firstPageInRange = (currentPage > 2) ? ((totalPages - currentPage) < 4) ? totalPages-5 : currentPage-2 : 0;
   			lastPageInRange = ((totalPages - currentPage) >= 4) ? firstPageInRange+5 : totalPages;
   		}
   		if (currentPage != 0) html += '<a href="javascript:stepPagination(-1)">&lt; previous | </a>';
   		if (firstPageInRange > 0) {
   			html += '<a class="bookEnd" href="javascript:paginationRequest(0)"> 1... </a>'; 
   		} else {
   			html += '<span class="bookEnd">&nbsp;</span>';
   		}
   		for (var i=firstPageInRange; i<lastPageInRange; i++) {
   			if (i == currentPage) {
   				html += '<span class="currentPage">'+ (i+1) +'</span>';
   			} else {
   				html += '<a class="otherPages" href="javascript:paginationRequest('+ i +')">'+ (i+1) +'</a>';
   			}
   		}
   		if (lastPageInRange != totalPages) {
   			html += '<a class="bookEnd" href="javascript:paginationRequest('+ (totalPages-1) +')"> ...'+ totalPages +' </a>'; 
   		} else {
   			html += '<span class="bookEnd">&nbsp;</span>';
   		}
   		if (currentPage != totalPages-1) {
   			html += '<a class="next" href="javascript:stepPagination(1)"> | next &gt;</a>';
   		} else {
   			html += '<span class="next">&nbsp;</span>'
   		}
   	}
   	if (totalItems > 12) {
	   	if (inViewAll == false) {
			html += '<a href="javascript:viewAll()" class="viewAll">view all</a>';
	 	} else {
	 		html += '<a href="javascript:viewAll()" class="viewAll">view by page</a>';
	 	}
	 }
   	return html;
}

function setPagination() {
	document.getElementById("topPaginationContainer").innerHTML = getPaginationHtml(currentDataSet.length, "topPagination");
	document.getElementById("bottomPaginationContainer").innerHTML = getPaginationHtml(currentDataSet.length, "bottomPagination");
}

function initializeDataSet() {
	currentDataSet = productArray;
}

function stepPagination(direction) {
	paginationRequest(currentPage + direction);
}

function viewAll() {
	inViewAll = !inViewAll;
	itemsPerPage = (inViewAll) ? totalItems : 12;
	paginationRequest(0);
}

/********** List Filtering Functions **************/

function setView() {
	setPagination();
	paginationRequest(0);
}

function filterPriceRange(low, high) {
	var filteredArray = new Array();
	for (var i=0; i<productArray.length; i++) {
		if (productArray[i].sortPrice >= low && productArray[i].sortPrice <= high) {
			filteredArray.push(productArray[i]);
		}
	}
	currentDataSet = filteredArray;
	changeFilter(currentFilter);
}

Array.prototype.sortOn=function(inSortAttribute,inReverseSort,inCaseInsensitive)
{
	var A_LT_B=inReverseSort?1:-1;
	var A_GT_B=inReverseSort?-1:1;
	if(typeof inCaseInsensitive=="undefined"){inCaseInsensitive=true;}
	this.sort(function(inA,inB)
	{
		var attributeA=inA[inSortAttribute];
		var attributeB=inB[inSortAttribute];
		var typeA=typeof attributeA;
		var typeB=typeof attributeB;
		if(inCaseInsensitive){
			attributeA=(typeA=="string")?attributeA.toLowerCase():attributeA;
			attributeB=(typeB=="string")?attributeB.toLowerCase():attributeB;
		}
		if(typeA!="number"&&!attributeA){return A_GT_B;}
		else if(typeB!="number"&&!attributeB){return A_LT_B;}
		if(attributeA==attributeB){return 0;}
		else if(attributeA<attributeB){return A_LT_B;}
		else{return A_GT_B;}
	});
	return this;
};

var currentFilter = 0;
var initialLanding = true;

function changeFilter(index) {
	currentFilter = index;
	document.getElementById("topFilter").selectedIndex = index;
	document.getElementById("bottomFilter").selectedIndex = index;
	switch (index) {
		case 0: filterPriceAscending(); break;
		case 1: filterPriceDescending(); break;
		case 2: filterAlphaAscending(); break;
		case 3: filterAlphaDescending(); break;
	}
	initialLanding = false;
}

function filterAlphaAscending() {
	currentDataSet.sortOn("name");
	if (!initialLanding) {s=s_gi('mrncomdev'); s.linkTrackVars='prop4,prop5'; s.prop4='Sort Drop Down'; s.prop5='Sort Drop Down: Product Name A-Z'; s.tl(this,'o','List Page: Sort Drop Down');}
	setView();
}

function filterAlphaDescending() {
	currentDataSet.sortOn("name", true);
	if (!initialLanding) {s=s_gi('mrncomdev'); s.linkTrackVars='prop4,prop5'; s.prop4='Sort Drop Down'; s.prop5='Sort Drop Down: Product Name Z-A'; s.tl(this,'o','List Page: Sort Drop Down');}
	setView();
}

function filterPriceAscending() {
	currentDataSet.sortOn("sortPrice", true);
	if (!initialLanding) {s=s_gi('mrncomdev'); s.linkTrackVars='prop4,prop5'; s.prop4='Sort Drop Down'; s.prop5='Sort Drop Down: Price High to Low'; s.tl(this,'o','List Page: Sort Drop Down');}
	setView();
}

function filterPriceDescending() {
	currentDataSet.sortOn("sortPrice");
	if (!initialLanding) {s=s_gi('mrncomdev'); s.linkTrackVars='prop4,prop5'; s.prop4='Sort Drop Down'; s.prop5='Sort Drop Down: Price Low to High'; s.tl(this,'o','List Page: Sort Drop Down');}
	setView();
}

/********** List Comparison Functions *************/

var totalComparisons = 0;

function checkForChecks() {
	var productArr = document.forms["productComparisonList"].elements["product"];
	for (var i=0; i<productArr.length; i++) {
		if (productArr[i].checked) {
			totalComparisons++;
		}
	}
}

var comparisonArray = new Array();

function checkComparisons(checkboxObj) {
	if (!checkboxObj.checked) {
		totalComparisons--;
		var removeIndex;
		for (var i=0; i<comparisonArray.length; i++) {
			if (comparisonArray[i] == checkboxObj.value) {
				removeIndex = i;
				break;
			}
		}
		comparisonArray.splice(removeIndex,1);
		//alert('removed item '+ removeIndex + " " + checkboxObj.value + '\n' + comparisonArray.toString());
	} else {
		totalComparisons++;
		if (totalComparisons > 4) {
			totalComparisons = 4;
			checkboxObj.checked = false;
			alert("Only four items are allowed.\nPlease deselect one before choosing another.");
		} else {
			comparisonArray.push(checkboxObj.value);
			//alert('added item '+ checkboxObj.value + '\n' + comparisonArray.toString());
		}
	}
	
}

function submitForComparison() {
	if (totalComparisons < 2) {
		alert("Please choose 2 or more items for comparison.");
	} else {
		var outputElement = document.forms["formattedComparison"].elements["ids"];
		outputElement.value = comparisonArray.toString();
		document.forms["formattedComparison"].submit();
	}
}

function rollOverComparison() {
	document.images["compareBtn"].src = "/images/compare-roll.gif";
}

function rollOutComparison() {
	document.images["compareBtn"].src = "/images/compare.gif";
}function GetXmlHttpObject() {
	var xmlHttp = null;
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp = new XMLHttpRequest();
	}
	catch (e) {
	//Internet Explorer
		try {
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}

var ajaxHandler;

function addShoppingCartItem(itemId, name, price, imageSmall, quantity, parentId, cartId, sessionId) {
	var serviceUrl = "/services/AddShoppingCartItem?itemId="+ itemId +"&name="+ name +"&price="+ price +"&imageSmall="+ imageSmall +"&quantity="+ quantity +"&parentId="+ parentId +"&cartId="+ cartId +"&sessionId="+ sessionId;
	ajaxHandler = GetXmlHttpObject();
	ajaxHandler.onreadystatechange = response_addShoppingCartItem;
	ajaxHandler.open("GET",serviceUrl,true);
	ajaxHandler.send(null);
	document.getElementById("cartProductList").innerHTML += '<div class="cartProduct"><div class="imageHolder"><img src="'+ imageSmall +'" /></div><div class="cartDescription"><h4>'+ name +'</h4><div class="quantity">Qty: '+ quantity +'</div><div class="price">$'+ price +'</div></div></div>';
}

var cartFeedbackInterval = null;
var dropdowns;

function response_addShoppingCartItem() {
	var cartDiv = document.getElementById("cart");
	if (ajaxHandler.readyState==4 || ajaxHandler.readyState=="complete") {
		var cartUpdate = eval('(' + ajaxHandler.responseText + ')');
		updateCartDisplay(cartUpdate.cartQuantity, cartUpdate.name);
		document.getElementById("cartTotal").innerHTML = '<div class="label">Subtotal:</div> <div class="price">$'+ cartUpdate.cartTotal +'</div>';
		document.getElementById("cartFeedback").style.display = "block";
		if (navigator.userAgent.indexOf("MSIE 6") > -1) {
			var rightCol = document.getElementById("rightCol");
			dropdowns = rightCol.getElementsByTagName("select");
			for (var i=0; i<dropdowns.length; i++) {
				dropdowns[i].style.visibility = "hidden";
			}
		}
		setCloseInterval();
	} 
}

function setCloseInterval() {
	var callback = this;
	clearInterval(cartFeedbackInterval);
	cartFeedbackInterval = setInterval(function () {closeCartFeedback();}, 5000, this);
}

function closeCartFeedback() {
	document.getElementById("cartFeedback").style.display = "none";
	document.getElementById("cartProductList").innerHTML = "";
	document.getElementById("cartTotal").innerHTML = "";
	if (navigator.userAgent.indexOf("MSIE 6") > -1) {
		for (var i=0; i<dropdowns.length; i++) {
			dropdowns[i].style.visibility = "visible";
		}
	}
	updateShoppingCartQuantity(sessionId);
}

function updateShoppingCartQuantity() {
//	var serviceUrl = "/services/UpdateShoppingCartQuantity?sessionId="+ sessionId;
//	ajaxHandler = GetXmlHttpObject();
//	ajaxHandler.onreadystatechange = response_updateShoppingCartQuantity;
//	ajaxHandler.open("GET",serviceUrl,true);
//	ajaxHandler.send(null);
}

function response_updateShoppingCartQuantity() {
	if (ajaxHandler.readyState==4 || ajaxHandler.readyState=="complete") {
		var cartUpdate = eval('(' + ajaxHandler.responseText + ')');
		updateCartDisplay(cartUpdate.cartQuantity, cartUpdate.name);
	}
}

function updateCartDisplay(quantity, name) {
	document.getElementById("items").innerHTML = quantity + " item(s) in cart";
	if (name != null && name != "") {
		document.getElementById("welcome").innerHTML = 'Welcome, '+ name;
	}
}

function postContactUs(dataString, responder) {
//	var serviceUrl = "/services/PostContactus?"+dataString;
	var serviceUrl = "/services/PostContactus";
	ajaxHandler = GetXmlHttpObject();
	ajaxHandler.onreadystatechange = responder;
//	ajaxHandler.open("GET",serviceUrl,true);
//	ajaxHandler.send(null);
	ajaxHandler.open("POST",serviceUrl,true);
	ajaxHandler.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajaxHandler.setRequestHeader("Content-length", dataString.length);
	ajaxHandler.setRequestHeader("Connection", "close");
	ajaxHandler.send(dataString);
}

function getOfflineTrackingID() {
	var serviceUrl = "/services/getOfflineTrackingID";
	ajaxHandler = GetXmlHttpObject();
	ajaxHandler.onreadystatechange = response_getOfflineTrackingID;
	ajaxHandler.open("GET",serviceUrl,true);
	ajaxHandler.send(null);
}

function response_getOfflineTrackingID() {
	if (ajaxHandler.readyState==4 || ajaxHandler.readyState=="complete") {
		var obj = eval('(' + ajaxHandler.responseText + ')');
//		alert(obj.offlineTrackingID);
		document.getElementById("offlineTracking").innerHTML = "<p>"+obj.offlineTrackingID+"</p>";
		//Omniture Code...
		var ishop_suite = location.href.substr(location.href.indexOf("ishop"),location.href.indexOf(".com") - location.href.indexOf("ishop"));
		var s = "";
		if ((location.href.indexOf("dev.") == -1) && (location.href.indexOf("numeric.") == -1))
		{
			s=s_gi('mrncomprod,' + ishop_suite);
		} else {
			s=s_gi('mrncomdev');
		}
		s.linkTrackVars='events,transactionID'; 
		s.linkTrackEvents='event4'; 
		s.events='event4'; 
		s.transactionID=(obj.offlineTrackingID.replace(/-/g, ""));
		s.tl(this,'o','Get Unique ID for Offline');
	}
}


