function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}

// store details of first product image/info
var first_pi = $("product-images").getElementsByClassName("current")[0];
var first_pi_id = first_pi.identify().replace("pi-", "");
var first_piv = $("product-info").getElementsByClassName("current")[0];
var first_pic = $("product-info").getElementsByClassName("active")[0];

// current product image/info
var current_pi = $("product-images").getElementsByClassName("current")[0];
var current_piv = $("product-info").getElementsByClassName("current")[0];
var current_pic = $("product-info").getElementsByClassName("active")[0];
var current_click = document.getElementById('click-0');

var scroll_top = 100;
function getScrollY() {
	var scrOfY = 0;
	if( typeof( window.pageYOffset ) == 'number' ) {
		scrOfY = window.pageYOffset;
	} else if( document.body && document.body.scrollTop ) {
		scrOfY = document.body.scrollTop;
	} else if( document.documentElement && document.documentElement.scrollTop ) {
		scrOfY = document.documentElement.scrollTop;
	}
	return scrOfY;
}

var original_colour_el = $('product-info').select('div.product-info-chunk');
if (original_colour_el.length > 0) {
    var span_element;
    for (var i=0;i<original_colour_el.length;i++) {
	var colour_elem_id = $(original_colour_el[i]).up().identify().replace('piv-', '').replace('-','');
	if (original_colour_el[i].select("em")) {
		var span_colour = original_colour_el[i].select("em");
		if (span_colour.length > 0) {
			eval("var original_colour_" + colour_elem_id + " = '"+ span_colour[0].innerHTML +"';");

		} else {
			eval("var original_colour_" + colour_elem_id + " = '';");
		}
	} else {
		eval("var original_colour_" + colour_elem_id + " = '';");
	}
    }

    original_colour_el = original_colour_el[0].select('em');
    if (original_colour_el.length > 0) {
		var original_colour = original_colour_el[0].innerHTML;
	}
}

/**
 * Function that replaces the colour name in the product info bullet list with the colour chosen
 * @param element the colour option element that is clicked on
 */
function update_colour(element) {
    var old_colour_el, new_colour;
    element = $(element);
    
    var _current = $("product-info").getElementsByClassName("current")[0];
    old_colour_el = $(_current).select('div.product-info-chunk');
    if (old_colour_el.length > 0) {
        old_colour_el = old_colour_el[0].select('em');
        if (old_colour_el.length > 0) {
            old_colour_el = old_colour_el[0];
            if (element.getElementsByClassName('colour', 'span')[0]) {  
		new_colour = element.getElementsByClassName('colour', 'span')[0].innerHTML;
            } else {
                var _span = element.select('span.cover-magnify');
                if (_span.length > 0) {
                    new_colour = _span[0].innerHTML;
                }
            }

            if (new_colour) {
                new_colour = new_colour.strip();
                old_colour_el.innerHTML = new_colour;
            }
        }
    }
}

function update_product_colour(variation_id) {
    if (eval("original_colour_"+variation_id)) {
	var colour = eval("original_colour_"+variation_id);
	var _current = $("product-info").getElementsByClassName("current")[0];
    	old_colour_el = $(_current).select('div.product-info-chunk');
    	if (old_colour_el.length > 0) {
        	old_colour_el = old_colour_el[0].select('em');
        	if (old_colour_el.length > 0) {
            	old_colour_el = old_colour_el[0];
            
            	colour = colour.strip();
            	old_colour_el.innerHTML = colour;
        	}
    	}
    }
}

function switch_cover(cover_id, img_src, product_id) {
	// if first is current
	current_pi.removeClassName("current");
	$(current_pic).removeClassName("active");
	$(current_piv).removeClassName("current");
	
	if (product_id) {
		$("piv-"+product_id).addClassName("current");
		$("pic-"+product_id).addClassName("active");
	} else {
		first_piv.addClassName("current");
		first_pic.addClassName("active");
	}	
	
	var product_images = $("product-images").childElements();
	product_images.each(function(s){
		if (s.hasClassName("current")) {
			s.removeClassName("current");
		}
	});
	
	// current extra image
	var divs = getElementsByClassName("extra-images-thumbnails", "div")[0].getElementsByTagName("div");
	for (i = 0, m = divs.length; i < m; i++) {
		divs[i].style.display = "none";
	}
	
	// hide all covers
	hideAllCovers();	
	hideAllMovies();
	
	// now display the relevant cover
	$("pi-r-"+cover_id).style.display = "block";
	
	// sort out print buttons
	var divs = getElementsByClassName("print-link", "a");
	for (i = 0, m = divs.length; i < m; i++) {
		divs[i].parentNode.style.display = "none";	
	}
	
	// sort out enlarge buttons
	//var enlarge_link = document.getElementById("enlarge-link");
	//enlarge_link.style.display = "none";
	
	// scroll
	if (getScrollY() > scroll_top) {
		window.scrollTo(0, scroll_top);
	}
	
	return false;	
}

function switch_product(variation_id, img_src, main_thumbnail , extra_thumbnail, noscroll) {
	// hide all info chunks
	var info_chunks = $("product-info").getElementsByClassName("product-info-view");
	for (i = 0, m = info_chunks.length; i < m; i++) {
		if (info_chunks[i].hasClassName("current")) {
			info_chunks[i].removeClassName("current");
		}
	}
	
	//cover title
	if (original_colour_el.length > 0) {
		original_colour_el[0].innerHTML = original_colour;
	}
	
	current_pi.removeClassName("current");
	current_piv.removeClassName("current");
	
	// hiding
	hideAllCovers();
	hideAllMovies();
	//hideAllMovieLinks();
	
	var current_variation_id = current_pi.identify().replace("pi-", "");	
	
	// bestsellers in the range - remove hover state and re-issue on new prod
	var variation_clicks = $("additional-products").getElementsByClassName("additional-product", "div");
	for (i = 0, m = variation_clicks.length; i < m; i++) {
		variation_clicks[i].removeClassName("current");	
	}
	$("click-"+variation_id).addClassName("current");

	// deal with images	
	current_pi.removeClassName("current");
	current_pi = document.getElementById("pi-" + variation_id);
	$(current_pi).addClassName("current");
	
	// deal with product info
	current_piv.removeClassName("current");
	current_piv = document.getElementById("piv-" + variation_id);
	$(current_piv).addClassName("current");
	
	// deal with product pricing info
	if (current_pic) {
        var _current_pic = $("product-info").getElementsByClassName("active");
        for (i = 0, m = _current_pic.length; i < m; i++) {
            _current_pic[i].removeClassName("active");
        }
		current_pic = document.getElementById("pic-" + variation_id);
		$(current_pic).addClassName("active");
	}
	
	// current extra image
	var divs = getElementsByClassName("extra-images-thumbnails", "div")[0].getElementsByTagName("div");
	for (i = 0, m = divs.length; i < m; i++) {
		divs[i].style.display = "none";
	}

	var extra_img = $("click-"+variation_id+"-extra");
	if (extra_img) {
		extra_img.style.display = "block";
	}
	
	var	current_main_thumbnail_click = document.getElementById("click-" + variation_id + "-main-thumbnail");
	if(current_main_thumbnail_click && main_thumbnail == 1){
		current_main_thumbnail_click.style.display = "block";
	}
	
	current_pi_img = current_pi.getElementsByTagName("img")[0];
	if (current_pi_img.src != img_src) {
		current_pi_img.src = img_src;
	}
	
	// sort out print buttons
	var divs = getElementsByClassName("print-link", "a");
	for (i = 0, m = divs.length; i < m; i++) {
		divs[i].parentNode.style.display = "none";	
	}
	var print_link = document.getElementById("print-link-" + variation_id);
	print_link.parentNode.style.display = "block";

	var movie_link = $("view-movie-link-"+variation_id);
	if (movie_link) {
		movie_link.style.display = "block";
	}
	if ($("view-image-link-"+current_variation_id)) {
		//$("view-image-link-"+current_variation_id).style.display = "none";
	}
	
	// update variation_id value for in send to friend form
	var sendToFriendInput = document.getElementById("send-to-friend-variation-id");
	sendToFriendInput.value = variation_id;
	
	// scroll
	if (!noscroll && getScrollY() > scroll_top) {
		window.scrollTo(0, scroll_top);
	}

	update_product_colour(variation_id);
	
	return false;
}

var divs = document.getElementById("additional-products").getElementsByTagName("div");
var auto_height_links = new Array();
var auto_height_max = 0;
for (i = 0, m = divs.length; i < m; i++) {
	if (divs[i].className.indexOf("additional-product") == 0) {
		var links = divs[i].getElementsByTagName("a");
		for (j = 0, mj = links.length; j < mj; j++) {
			if (links[j].className == "name") {
				auto_height_links[auto_height_links.length] = links[j];
				break;
			}
		}
	}
}
for (i = 0, m = auto_height_links.length; i < m; i++) {
	var height = auto_height_links[i].offsetHeight - 4;
	if (height > auto_height_max) {
		auto_height_max = height;
	}
}
for (i = 0, m = auto_height_links.length; i < m; i++) {
 	if(auto_height_max < 26){
		auto_height_max = 26;
	}
	
	auto_height_links[i].style.height = auto_height_max + "px";
}

var corner_group_image = $("corner-group-cube");
if(corner_group_image){
	var desired_height = $$(".additional-product")[0].getDimensions().height-1;
	if (desired_height < 140) {
		corner_group_image.setStyle({
			height: "140px"
		});
	} else {
		corner_group_image.setStyle({
			height: desired_height+"px"
		});
	}
}

var corner_group_image_container = $("corner-group-cube-container");
if(corner_group_image_container){
	var desired_height = $$(".additional-product")[0].getDimensions().height-1;
	if (desired_height < 135) {
		corner_group_image_container.setStyle({
			height: "135px"
		});
	} else {
		corner_group_image_container.setStyle({
			height: desired_height+"px"
		});
	}
}

var designers_recommend_pod = $("designers-recommend");
if (designers_recommend_pod) {
	var desired_height = $$(".additional-product")[0].getDimensions().height;
	if (desired_height < 135) {
		designers_recommend_pod.setStyle({
			height: "135px"
		});
	} else {
		designers_recommend_pod.setStyle({
			height: desired_height+"px"
		});
	}
}

var filler_image = $("filler-image");
if (filler_image) {
	var desired_height = $$(".additional-product")[0].getDimensions().height-1;
	if (desired_height < 135) {
		filler_image.setStyle({
			height: "135px"
		});
	} else {
		filler_image.setStyle({
			height: desired_height+"px"
		});
	}
}

/*
* Functions for Product Videos
*/

if($$('div.video-link').size() > 0){
	$$('div.video-link').each(function(s){
		var link = s.select("a")[0];
		var view_movie_button_id = link.getAttribute("id");
		var variation_id = view_movie_button_id.replace("view-movie-link-", "");
		
		$(view_movie_button_id).observe("click", function(){
			showMovieClick(variation_id);
			return false;
		});
	});
	
	$$('div.image-link').each(function(s){
		var link = s.select("a")[0];
		var view_image_button_id = link.getAttribute("id");
		if (view_image_button_id) {		
			var variation_id = view_image_button_id.replace("view-image-link-", "");	
		
			$(view_image_button_id).observe("click", function(){
				showImageClick(variation_id);
			});
		}
	});	
}

function showMovieClick(variation_id){
	hideAllImages();
	showMovie(variation_id);
	//hideMovieLink(variation_id);
	//showImageLink(variation_id);
	return false;
}

function showImageClick(variation_id){
	hideAllMovies();
	showImage(variation_id);
	//hideImageLink(variation_id);
	//showMovieLink(variation_id);
}

function hideAllCovers() {
	$$('div.removable-covers .product-image').each(function(s){
		s.style.display = "none";	
	});
}

function showMovie(id){

	// hiding
	hideAllCovers();
	
	//cover title
	if (original_colour_el.length > 0) {
		original_colour_el[0].innerHTML = original_colour;
	}

	var movie_id = "movie-" + id;

	var thumbnail_id = "view-movie-link-" + id;	
	if($(thumbnail_id)){
		//$(thumbnail_id).style.display = "none"
	}	
	
	var thumbnail_id = "click-" + id + "-main-thumbnail";	
	if($(thumbnail_id)){
		$(thumbnail_id).style.display = "none"
	}		
	
	if($(movie_id)){	
		$(movie_id).show();
	}
}

function hideAllImages(){
	$$('div.product-image').each(function(s){
		if (s.hasClassName("current")) {
			s.removeClassName("current");
		}
	});

	// current extra image
	var divs = getElementsByClassName("extra-images-thumbnails", "div")[0].getElementsByTagName("div");
	for (i = 0, m = divs.length; i < m; i++) {
		divs[i].style.display = "none";
	}
	
}

function hideAllMovieLinks(){
	$$('div.video-link').each(function(s){
		//s.hide();
	});
}

function hideAllMovies(){
	$$('div.product-video').each(function(s){
		s.hide();
	});
}

function hideMovie(id){
	var movie_id = "movie-" + id;
	
	if($(movie_id)){	
		$(movie_id).hide();
	}
}

function showImage(id){

	var image_id = "pi-" + id;
	if($(image_id)){	
		$(image_id).addClassName("current");
	}
	
	var thumbnail_id = "click-" + id + "-main-thumbnail";
	if($(thumbnail_id)){
		$(thumbnail_id).style.display = "block"
	}	
}

function hideImage(id){
	var image_id = "pi-" + id;
	if($(image_id)){
		$(image_id).style.display = "none";	
	}
	
	var thumbnail_id = "click-" + id + "-main-thumbnail";	
	if($(thumbnail_id)){
		$(thumbnail_id).style.display = "none"
	}	
}

function hideMovieLink(id){
	var movie_id = "view-movie-link-" + id;
	
	if($(movie_id)){
		$(movie_id).hide();
	}
}

function hideAllImageLinks(){
	$$('div.image-link').each(function(s){
		s.hide();
	});
}

function showMovieLink(id){

	//hideAllMovieLinks();
	

	var movie_id = "view-movie-link-" + id;
	if($(movie_id)){	
		$(movie_id).show();
	}
}

function hideImageLink(id){
	var image_id = "view-image-link-" + id;
	if($(image_id)){	
		$(image_id).hide();
	}
}

function showImageLink(id){
	var image_id = "view-image-link-" + id;
	if($(image_id)){		
		$(image_id).show();
	}
}

function addToFavourites(id) {
	var id = id;
	$("add-"+id).checked = true;
	return formSubmit('addFavouritesForm');
}


