//
// fade.js
//


//Beta

var m_cookiesEnabled		= window.navigator.cookieEnabled;
var m_staticBetaSplit;
var m_staticBetaSplitFactor;
var m_staticBetaCookieName	= "staticbeta=";
var m_staticBetaExpiry;
var m_staticBetaName;
var m_staticBaseUrl;

//-- Assign the base properties that control how the beta works
function AssignStaticBetaProperties( localeInfo, staticBetaExpiry, staticBetaSplitPercentage )
{	
	m_staticBetaExpiry = staticBetaExpiry;
	m_staticBetaSplit = staticBetaSplitPercentage;	
	m_staticBaseUrl = localeInfo;
	
	SplitBeta();
}

//-- Split the beta across required boundaries
function SplitBeta()
{
	var content;
	var metrics;
	
	if( CheckExpiry() )
	{
		AssignContents( "control" );
		ExpireStaticBeta();
	}
	else
	{
		var betaState = ReadStaticBetaCookie();
		
		if( betaState != null )
		{
			//-- Visitor already cookied and in beta, show beta contents
			if( betaState == "true" ) {	AssignContents( "beta" ); }
			//-- Vistor already cookied and in control, show control contents
			else if( betaState == "false" || betaState == "expired" ) { AssignContents( "control" ); }			
		}
		else
		{
			//-- Not cookied yet, work out where to split them
			m_staticBetaSplitFactor = Math.random() * 100;

			if( m_staticBetaSplitFactor > m_staticBetaSplit  )
			{				
				WriteStaticBetaCookie( "control" );
				AssignContents( "control" );							
			}
			else
			{
				WriteStaticBetaCookie( "beta" );
				AssignContents( "beta" );
			}
		}
	}
}

//-- Assign the contents of the content area
function AssignContents( version )
{
	var content = document.getElementById( "staticbeta_" + version );		
	var metrics = document.getElementById( "staticbeta_" + version + "metrics" );	
	var baseUrl	= "<img src=\"http://www.dell.com/metrics/DellHomePage.htm?" + m_staticBaseUrl + "&eiwatch=http://www.dell.com/metrics/DellHomePage.htm&env=statichomepage_" + version + "\" width=\"1\" height=\"1\" alt=\"\" />";
	
	if( content != null && metrics != null )
	{
		metrics.innerHTML	  = baseUrl;				
		content.style.display = "block";
	}
}

//-- Read the cookie
function ReadStaticBetaCookie()
{
	if( m_cookiesEnabled )
	{
		var cookie = document.cookie.split(';');
		var nameEQ = m_staticBetaCookieName;
		var cookieVal;

		for( var i = 0; i < cookie.length; i++ )
		{
			var c = cookie[i];

			while( c.charAt(0) == " " )
			{
				c = c.substring( 1, c.length ); //delete spaces

				if( c.indexOf( nameEQ ) == 0 )
				{
					cookieVal = c.substring( nameEQ.length, c.length );
				}
			}
		}

		if( cookieVal != null && cookieVal.length > 0 )
		{
			return cookieVal;
		}
	}
	
	return null;
}

//-- Write the cookie
function WriteStaticBetaCookie( version )
{	
	if( m_cookiesEnabled )
	{
		var expiry = "; expires=" + FormatExpiry( m_staticBetaExpiry );
		if( version == "beta" ) { document.cookie = m_staticBetaCookieName + "true" + expiry + "; path=/; domain=dell.com"; }
		else { document.cookie = m_staticBetaCookieName + "false" + expiry + "; path=/; domain=dell.com"; }
	}
}

//-- Format the expiry date
function FormatExpiry( dateString )
{	
	var date = new Date( dateString );
	return date.toString();
}

//-- Run a simple check to see if the beta has expired
function CheckExpiry()
{	
	var expiryDate = new Date( m_staticBetaExpiry );
	var currentDate = new Date();
	return ( currentDate.valueOf() > expiryDate.valueOf() );
}

//-- Zap the cookie		
function ExpireStaticBeta()
{
	if( m_cookiesEnabled )
	{
		document.cookie = m_staticBetaCookieName + "expired; expires=-1; path=/; domain=dell.com";
	}
}

//-- Construct base querystring params for metrics tracking	if not supplied	
function QueryLocaleInfo()
{	
	var meta = document.getElementsByTagName( "META" );		
	var item;
	var attrib;
	var country;
	var language;
	var segment;

	for( var x = 0; x < meta.length; x++ )
	{
		item = meta[x];
		attrib = item.getAttribute( "NAME" );

		if( attrib.toLowerCase() == "documentcountrycode" ) { country = item.getAttribute( "CONTENT" );	}

		else if( attrib.toLowerCase() == "language" ) { language = item.getAttribute( "CONTENT" ); }
		else if( attrib.toLowerCase() == "segment" ) { segment = item.getAttribute( "CONTENT" ); }
	}

	return "c=" + country + "&l=" + language + "s=" + segment;
}

//Fade
var fadeBlock	= null;
var fadeImg		= null;
var fadeIdx		= 0;
var fadeContainer= null;
var fadeTimeout	= 7000;
var fadeEffect	= 2;
var fadeHref;
var fadeSrc;
var fadeCaption;

function imgFade( href, src, caption, width, height, animate )
{
	if( fadeBlock )
	{
		return;
	}

	fadeHref	= href;
	fadeSrc		= src;
	fadeCaption	= caption;

	// this is the case for browsers that don't support filters...
	var cycle	= Math.floor( Math.random() * href.length );
	
	// go build all of the nested DIVs out
	//fadeIdx		= cycle;
	fadeIdx = src.length - 1; //force fade to start with the first image
	
	// get next image index
	var nextImage	= (fadeIdx + 1) % src.length;

	// switch off animation if we're not on broadband
	var m_imgFade	= ( typeof(animate) != "undefined" ? animate : hasBroadband() );
	
	//if animation is turned off or the browser is incompatible
	if( m_imgFade == false || src.length <= 1 || !( isIE4 || isW3C ) )
	{
		//document.writeln( imgFadePicker( cycle ) );
		imgRotate(nextImage, width, height, src);
		return;
	}
	
	
	document.writeln( "<div id=\"container\" style=\"width:" + width +"px;height:" + height +"px\">" );

	for( i = 0; i < src.length; i++ )
	{
		// set up a placeholder
		document.write( "<div id=\"imgFade" + i + "\" style=\"display:none\">" );
		
		if( i == nextImage )
		{
			// only prefetch the first image we will display
			document.write( imgFadePicker( i ) );
		}
		
		document.write( "</div>" );
	}

	document.writeln( "</div>" );

	// pull the images out
	fadeBlock	= new Array( src.length );
	fadeImg		= new Array( src.length );

	for( i = 0; i < src.length; i++ )
	{
		fadeBlock[i]	= document.getElementById( "imgFade" + i );
		
		if( i == nextImage )
		{
			fadeImg[i] = document.getElementById( "fadeimg" + i );
		}
		else
		{
			fadeImg[i] = null;
		}
	}

	fadeContainer = document.getElementById("container");
	
	imgFadeEffects();
}

//use this function if the browser is not IE
function imgRotate(nextImg, width, height, src){
	
	if (document.all || document.getElementById){ //if IE4 or NS6+
		document.write('<style type="text/css">\n')
		document.write('.imgrotate{display: none; width: ' + width + 'px; height: ' + height + 'px;}\n')
		document.write('</style>')
		for(var i = 0; i < src.length; i++){
			document.writeln( "<div class=\"imgrotate\"" );
			if(i == 0){ //display first image
				document.writeln( "style=\"display: block\"" );
			}
			document.writeln( ">" );
			document.writeln( imgFadePicker( i ) );
			document.writeln( "</div>" );
		}
		
		getElementByClass("imgrotate");
		setInterval("rotatecontent()", fadeTimeout - 1500);
		
	}
	else{ //browser not compatible with rotater
		document.writeln( imgFadePicker( nextImg ) );
	}

}

var curcontentindex=0;
var messages=new Array();

function getElementByClass(classname){
	var inc=0;
	var alltags=document.all? document.all : document.getElementsByTagName("*")
	for (i=0; i<alltags.length; i++){
		if (alltags[i].className==classname)
			messages[inc++]=alltags[i]
	}
}

function rotatecontent(){
	//get current message index (to show it):
	curcontentindex=(curcontentindex<messages.length-1)? curcontentindex+1 : 0
	//get previous message index (to hide it):
	prevcontentindex=(curcontentindex==0)? messages.length-1 : curcontentindex-1
	messages[prevcontentindex].style.display="none" //hide previous message
	messages[curcontentindex].style.display="block" //show current message
}


window.onload=function(){
	
}

function imgFadeEffects()
{
	var nextImage	= (fadeIdx + 1) % fadeImg.length;
	
	// run the transition
	if( readIEVer() >= 4.0 && fadeEffect > 0 )
	{
		if( fadeEffect == 1 )
		{
			fadeContainer.style.filter = "blendTrans(duration=0.6)";
			fadeContainer.filters(0).apply();
 			imgFadeSelect( nextImage );
			fadeContainer.filters(0).play();
		}
		else
		{
			fadeContainer.style.filter = "blendTrans(duration=1.5) revealTrans(duration=1.0,transition=7)";
			fadeContainer.filters(0).apply();
			fadeContainer.filters(1).apply();
 			imgFadeSelect( nextImage );
			fadeContainer.filters(0).play();
			fadeContainer.filters(1).play();
		}
	}
	else
	{
		imgFadeSelect( nextImage );
	}

	// asked to be called again a little later
	setTimeout( "imgFadePrep()", fadeTimeout - 1500 );
	setTimeout( "imgFadeSwap()", fadeTimeout );
}

function imgFadeSelect( nextImage )
{
	fadeBlock[fadeIdx].style.display = "none";
	fadeIdx = nextImage;
	fadeBlock[fadeIdx].style.display = "block";
}		

function imgFadePrep()
{
	// prefetch the next image if we don't already have it
	var nextImage	= (fadeIdx + 1) % fadeImg.length;

	if( !fadeImg[nextImage] )
	{
		fadeBlock[nextImage].innerHTML = imgFadePicker( nextImage );
		fadeImg[nextImage] = document.getElementById( "fadeimg" + nextImage );
	}
}

function imgFadeSwap()
{
	if( fadeImg[fadeIdx].complete )
	{
		// move the image index along
		imgFadeEffects();
	}
	else
	{
		// check again 3 seconds later
		setTimeout( "imgFadeSwap()", 3000 );
	}
}

function imgFadePicker( cycle )
{
	var divHtml;

	if( fadeHref[cycle] != null ) 
	{
		divHtml = "<A href=\"" + fadeHref[cycle] + "\"><IMG src=\"" + fadeSrc[cycle] + "\" alt=\"" + fadeCaption[cycle] + "\" BORDER=\"0\" ID=\"fadeimg" + cycle + "\"></a>";
	}
	else
	{
		divHtml = "<IMG src=\"" + fadeSrc[cycle] + "\" ID=\"fadeimg" + cycle + "\">";
	}
	
	return divHtml;
}

function hasBroadband()
{
	if( readIEVer() < 5.0 )
	{
		return false;
	}
	
	try
	{
		document.body.addBehavior ("#default#clientCaps");
	
		return ( typeof(document.body.connectionType) != "undefined" && document.body.connectionType == "lan" );
	}
	catch( e )
	{
		return false;
	}
}


// -------------------------------------------------------------
// cross-browser helper functions
// -------------------------------------------------------------

// Global variables
var isCSS 			= false;
var isW3C 			= false;
var isIE4 			= false;
var isNN4 			= false;
var isIE6 			= false;
var isGecko 		= false;
var isOpera 		= false;
var isDHTML 		= false;
var suppressMenus	= false;
var legacyMode		= false;
var timerID			= null;
var subtimerID		= null;

// Add a BookMark
function addBookMark()
{
	if ( window.external ) 
		{
			window.external.AddFavorite( document.location.href,document.title );
		} 
		else 
		{
			alert( "Sorry, your browser doesn't support bookmarking this page...\n\nPlease try pressing Control + D instead" );
		}
}

// initialize upon load to let all browsers establish content objects
function autoconfig()
{
    if( document && document.images )
    {
        isCSS		= (document.body && document.body.style) ? true : false;
        isW3C		= (isCSS && document.getElementById) ? true : false;
        isIE4		= (isCSS && document.all && readIEVer() >= 4.0) ? true : false;
        isNN4		= (document.layers) ? true : false;
        isGecko		= (isCSS && navigator && navigator.product && navigator.product == "Gecko");
        isOpera		= (isCSS && navigator.userAgent.indexOf( "Opera") != -1 );
		isIE6CSS	= (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? true : false;
		isIE6		= ( isIE6CSS && readIEVer() >= 6.0 );
        isDHTML		= isCSS && ( isIE4 || isGecko || isOpera );
        
        if( suppressMenus || ( isOpera && readOperaVer() < 7 ) || ( isGecko && navigator.productSub <= 20011022 ) || ( isGecko && navigator.productSub == 20030107 ) )
        {
			// Opera 6.x doesn't seem to like the DHTML...
			// Netscape 6.2 puts the menus in the wrong place...
			// Safari, the menus don't go away... problem in ResetMenu
			isDHTML	= false;
        }  
	//fix up search params
		if( typeof(m_search) != "undefined" && m_search != null )
		{
			var r1			= /name=\"cat\"/g;
			var r2			= /value=\"all\"/g;
			m_search		= m_search.replace ( r1, "name=\"subcat\"" ).replace ( r2, "value=\"\"");;
		}      
    } 
    
}


function readIEVer()
{
	var agent	= navigator.userAgent;
	var offset	= agent.indexOf( "MSIE" );
	if( offset < 0 )
	{
		return 0;
	}
	return parseFloat( agent.substring( offset + 5, agent.indexOf( ";", offset ) ) );
}

function readOperaVer()
{
	var agent	= navigator.userAgent;
	var offset	= agent.indexOf( "Opera" );
	if( offset < 0 )
	{
		return 0;
	}
	return parseFloat( agent.substring( offset + 6 ) );
}

// -------------------------------------------------------------
// end of fade.js
// -------------------------------------------------------------

