/******************************************
Name:			base.js
Date:			29/05/2008
Author:			Andrei Vais
Description:	Base Javascript file
******************************************/

/****
Used for executing multiple functions on page load.
****/
function addLoadEvent(func)
{
	var oldonload = window.onload;

	if (typeof window.onload != 'function')
		window.onload = func;
	else
	{
		window.onload = function()
		{
			oldonload();
			func();
		}
	}
}

/*
	Written by Jonathan Snook, http://www.snook.ca/jonathan
	Add-ons by Robert Nyman, http://www.robertnyman.com
*/

function getElementsByClassName(oElm, strTagName, oClassNames){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var arrRegExpClassNames = new Array();
	if(typeof oClassNames == "object"){
		for(var i=0; i<oClassNames.length; i++){
			arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
		}
	}
	else{
		arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
	}
	var oElement;
	var bMatchesAll;
	for(var j=0; j<arrElements.length; j++){
		oElement = arrElements[j];
		bMatchesAll = true;
		for(var k=0; k<arrRegExpClassNames.length; k++){
			if(!arrRegExpClassNames[k].test(oElement.className)){
				bMatchesAll = false;
				break;
			}
		}
		if(bMatchesAll){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}


/******
Makes all external links open in a new window decides if a link is external by comparing it to the current hostname
******/
function setupExternalLinks()
{
	// Grab our current base hostname
	var baseHref;
	var regexp = /(https?:\/\/)([^\/]+)/i;
	matches = regexp.exec(window.location);	
	baseHref = matches[2];

	// Grab the links	
	var docLinks = document.getElementsByTagName("a");

	// Loop through the links
	for (var i=0; i<docLinks.length; i++)
	{
		var anchor = docLinks[i];

		if (anchor.getAttribute("href")) // if it's a link
		{
			var href = anchor.getAttribute("href");
					
			if ((href.indexOf(baseHref) < 0 && href.indexOf("http://") > -1) || anchor.getAttribute("rel") == "external")										// it's an external link
			{
				anchor.onclick = function(){window.open(this.getAttribute('href')); return false;};				
				// Update the title attribute to include new window information
				anchor.setAttribute("title", anchor.getAttribute("title") + " (opens in new window)");
			}
			else if (href.indexOf(".pdf") > 0)				// it's a PDF or DOC document
			{
				anchor.onclick = function(){window.open(this.getAttribute('href')); return false;};				
				// Update the title attribute to include new window information
				anchor.setAttribute("title", anchor.getAttribute("title") + " (opens in new window)");
			}
		}
	}
}


function showPic(whichpic, placeholder)
{
	if (!document.getElementById(placeholder)) return true;
	
	var source = whichpic.getAttribute("href");
	var placeholder = document.getElementById(placeholder);
	placeholder.setAttribute("src",source);
	
	if (whichpic.getAttribute("title"))
	{
		var text = whichpic.getAttribute("title");
	}
	else
	{
		var text = "";
	}

	return false;
}


function swapProdPic(placeholder, whichpic)
{
	if (!document.getElementById(placeholder)) return true;
	
	var placeholder = document.getElementById(placeholder);
	placeholder.setAttribute("src",whichpic.replace(/productnavigationpics/, "bigproductpics"));
	
	return false;
}

function prepareProductGallery()
{
	if (!document.getElementsByTagName) return false;
	if (!document.getElementById) return false;
	if (!document.getElementById("productPage_AdditionalPics")) return false;

	var gallery = document.getElementById("productPage_AdditionalPics");
	var gallerylinks = gallery.getElementsByTagName("a");

	for (var i=0; i < gallerylinks.length; i++)
	{
		gallerylinks[i].onclick = function()
		{
		  return showPic(this, "productPage_MainPic");
		}
	}
}

function prepareHomepageProductNavAnimation()
{
	if (!document.getElementsByTagName) return false;
	if (!document.getElementById) return false;
	if (!document.getElementById("secondaryProductGroupsNav")) return false;

	var gallery = document.getElementById("secondaryProductGroupsNav");
	var gallerylinks = gallery.getElementsByTagName("a");
	var galleryimages = gallery.getElementsByTagName("img");

	for (var i=0; i < gallerylinks.length; i++)
	{
		var  galleryimagesSRC = galleryimages[i].getAttribute("src");

		gallerylinks[i].onmouseover = function()
		{
			return swapProdPic("homePagePic", galleryimagesSRC);
		}
	}
}

function prepareSamples()
{
    if (!document.getElementsByTagName) return false;
	if (!document.getElementById) return false;
	
	var samples = getElementsByClassName(document, "a", "Sample");	
	
	for (var i=0; i < samples.length; i++)
	{
		samples[i].onclick = function()
		{
		   return showFullTileSample(this, this.getAttribute("title"));
		}
	}
}

function showFullTileSample(pSampleImg, pSampleName)
{
    if (!document.getElementsByTagName) return false;
    if (!document.getElementById) return false;
	if (!document.getElementById("SampleFullTile")) return false;
	if (!document.getElementById("SampleName")) return false;
	
	var samplePreview= document.getElementById("SampleFullTile");
	var sampleName = document.getElementById("SampleName");
	
	samplePreview.setAttribute("src", pSampleImg);
	sampleName.firstChild.nodeValue = pSampleName;
	
	// Scroll the page
	scrollpage(500,25,50);

    return false;
}

function prepareSamplesGallery()
{
	if (!document.getElementsByTagName) return false;
	if (!document.getElementById) return false;
	if (!document.getElementById("SampleFullTile")) return false;
	if (!document.getElementById("SampleFullCarpet")) return false;
	if (!document.getElementById("SamplesCloseUp")) return false;

	var gallery = document.getElementById("SamplesCloseUp");
	var galleryElements = gallery.getElementsByTagName("a");
	
	document.getElementById("SampleFullCarpet").onclick = function() 
	{
		return swapImage("SampleFullTile", document.getElementById("SampleFullCarpet").getAttribute("href"));
	}
	document.getElementById("SampleCloseUp").onclick = function() 
	{
		return swapImage("SampleFullTile", document.getElementById("SampleCloseUp").getAttribute("href"));
	}

	for (var i=0; i < galleryElements.length; i++)
	{
		galleryElements[i].onclick = function()
		{
		  return showPic(this, "SampleFullTile");
		}
	}
}

function showPic(whichpic, placeholder)
{
    if (!document.getElementById) return false;
    if (!document.getElementsByTagName) return false;
	if (!document.getElementById(placeholder)) return true;
	if (!document.getElementById("SamplePreview")) return false;
	if (!document.getElementById("SampleName")) return false;
	if (!document.getElementById("SampleFullTile")) return false;
    if (!document.getElementsByTagName("a")) return false;
	
	var NewSampleIMG = whichpic.firstChild.getAttribute("src");
	NewSampleIMG = NewSampleIMG.substring(NewSampleIMG.lastIndexOf("/") + 1, NewSampleIMG.length);
	var NewSampleALT = whichpic.firstChild.getAttribute("alt");
	
	var OldSampleIMG = document.getElementById("SampleFullTile").getAttribute("src");
	OldSampleIMG = OldSampleIMG.substring(OldSampleIMG.lastIndexOf("/") + 1, OldSampleIMG.length);
	
	//check that the new sample is a valid JPG or JPEG file
	if(NewSampleIMG.indexOf(".jpg") != -1 || NewSampleIMG.indexOf(".jpeg") != -1)
	{
	    document.getElementById("SampleFullTile").setAttribute("src", document.getElementById("SampleFullTile").getAttribute("src").replace(OldSampleIMG, NewSampleIMG));
	}
	else
	{
	    document.getElementById("SampleFullTile").setAttribute("src", document.getElementById("SampleFullTile").getAttribute("src").replace(OldSampleIMG, "nosampleimagefound.gif"));	
	}
	
    document.getElementById("SampleFullTile").setAttribute("alt", NewSampleALT);
    document.getElementById("SampleName").firstChild.nodeValue = NewSampleALT;
    
    var SamplePreviewLinks = document.getElementById("SamplePreview").getElementsByTagName("a");
    
    for (var i=0; i < SamplePreviewLinks.length; i++)
    {
        //check that the new sample is a valid JPG or JPEG file
	    if(NewSampleIMG.indexOf(".jpg") != -1 || NewSampleIMG.indexOf(".jpeg") != -1)
	    {
	        SamplePreviewLinks[i].setAttribute("href", SamplePreviewLinks[i].getAttribute("href").replace(OldSampleIMG, NewSampleIMG));
	    }
	    else
	    {
	        SamplePreviewLinks[i].setAttribute("href", SamplePreviewLinks[i].getAttribute("href").replace(OldSampleIMG, "nosampleimagefound.gif"));
	    }
	    SamplePreviewLinks[i].setAttribute("href", SamplePreviewLinks[i].getAttribute("href").replace(OldSampleIMG, NewSampleIMG));        
    }
	// Scroll the page
	scrollpage(500,25,50);

	return false;
}

function swapImage(whichpic, newimagepath)
{
    if (!document.getElementById) return false;
    if (!document.getElementsByTagName) return false;
	if (!document.getElementById("SampleFullTile")) return false;
	if (!document.getElementById("SamplePreview")) return false;
    if (!document.getElementsByTagName("a")) return false;
	
	document.getElementById("SampleFullTile").setAttribute("src", newimagepath);
	
	for (var i=0; i < document.getElementById("SamplePreview").getElementsByTagName("a").length; i++)
	{
	    if (document.getElementById("SamplePreview").getElementsByTagName("a")[i].className == "Selected")
		{
			document.getElementById("SamplePreview").getElementsByTagName("a")[i].className = "Unselected";
		}
		else
		{
			document.getElementById("SamplePreview").getElementsByTagName("a")[i].className = "Selected";
		}
	}
		
	return false;
}

/*******************************************************
Function scrolls the page upward to a specified position.
Parameters: ultimate position, decrement, time interval (ms)
********************************************************/
function scrollpage(y,decr,interval)
{
	var newpos;
	var x=0;
	
	/* Calculate the position to move to - the current position minus the decrement */
	newpos = document.documentElement.scrollTop-decr;	

	/* If movement is needed to get to our new position */
	if (newpos!=y)
	{
		/* Get the exact position on the last run */
		if ((newpos-y)<decr)
		{
			window.scroll(x,y);
		}
		else
		{
			window.scroll(x,newpos);
			scrolldelay = setTimeout("scrollpage("+y+","+decr+")",interval); // scrolls every 100 milliseconds
		}
	}
	
}



//list all calls to action
addLoadEvent(setupExternalLinks);
addLoadEvent(prepareProductGallery);
//addLoadEvent(prepareSamples);
//addLoadEvent(prepareHomepageProductNavAnimation);
addLoadEvent(prepareSamplesGallery);