//=== jQuery ===
//override the $ symbol with 'jQuery' to avoid conflict with mootools library
jQuery.noConflict();

jQuery(document).ready(function() {
	jQuery('ul.sv-tabs').each(function() {
		var panels = []; // the content elements for each tab
		var tabs = [];
		jQuery('li a', this).each(function() {
			var targetPanel = jQuery( jQuery(this).attr('href') ); // href matches the id of the content element
			panels.push(targetPanel.get(0));
			tabs.push( jQuery(this).parent().get(0) );
			jQuery(this).click(function() { // change panels
				jQuery(panels).hide();
				jQuery(targetPanel).show();
				jQuery(tabs).removeClass('selected');
				jQuery(this).parent().addClass('selected');
				return false;
			});
		});
		jQuery(panels).hide().eq(0).show();
		jQuery(tabs).eq(0).addClass('selected');
	});
	
	var reviewOpen = false;
	jQuery('#reviews input.reveal').click(function() {// slide out Add Review form
		jQuery(this).hide();
		jQuery('#reviews fieldset').slideDown();
		reviewOpen = true;
		return false;
	});
	

	jQuery('#reveal-mono').click(function() {// slide out monogramming options	
		jQuery('.mono-controls').parent().slideToggle();
		jQuery(this).toggleClass("close");	
		return false;
	});

	Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initializeRequestHandler);
    Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoadedHandler);

    var isShown = "false";      
	var postBackElementID = null;
    function initializeRequestHandler(sender, args) {
        postBackElement = args.get_postBackElement();
		postBackElementID = postBackElement.id;
        addLoader();
        if((postBackElement.className == "button") || (postBackElement.className == "submit")) {
            isShown = "true";
        }
    }

    function pageLoadedHandler(sender, args) {
      if(isShown == "true") {
        if((document.getElementById(postBackElementID)) && (document.getElementById(postBackElementID).parentNode.className == "add-to-basket")) {
            basketPopup();
            updateBasketTotal();
        }
        styleCheckboxesAndRadiobuttons();

        if (reviewOpen == false) {
			jQuery('#reviews input.reveal').click(function() {// slide out Add Review form
				jQuery(this).hide();
				jQuery('#reviews fieldset').slideDown();
				reviewOpen = true;
				return false;
			});
		}
		else {
			jQuery('#reviews input.reveal').hide();
			jQuery('#reviews fieldset').show();
		}

      };
    }

	
});

function addLoader(){
	jQuery('p.add-to-basket').hide();
	jQuery('p.adding').show();
};

function updateBasketTotal() {
	if (jQuery(".added-to-basket").data("displayed")) {
	  var newNumber = jQuery("#newNumber").val();
	  var newPriceWithCurrency = jQuery("#newPriceWithCurrency").val();
	  var items = "item" + ((newNumber != 1) ? "s" : "");
	  var newBasketSummaryString = "(" + newNumber + " " + items + ") " + newPriceWithCurrency;
	  jQuery('#BasketSummaryText').html(newBasketSummaryString); 
	}
}

function basketPopup(){
  var messageDismissDelay = 5000;	// milliseconds until message is automatically dismissed
	var messageElement = jQuery(".added-to-basket");
	var dismiss;
	function dismissMessageAfterDelay() {
		dismiss = setTimeout(function () { 
			if (messageElement.data("displayed"))  {
				//updateBasketTotal();
				messageElement.fadeOut("slow");
				messageElement.queue(function() {
					messageElement.data("displayed",false);
					jQuery(this).dequeue();
				});
			}
		}, messageDismissDelay);
	}
	if (jQuery().bgIframe){
		messageElement.data("displayed",false).bgiframe().hide().fadeIn(1000);
	}
	else{
		messageElement.data("displayed",false).hide().fadeIn(1000);
	}
	messageElement.data("displayed",true);
	messageElement.queue(function() {
		clearTimeout(dismiss);
		dismissMessageAfterDelay();
		jQuery(this).dequeue();
	});

    messageElement.hover(function() {
			messageElement.data("displayed",false);
			clearTimeout(dismiss);
		}, function() {
			messageElement.data("displayed",true);
			dismissMessageAfterDelay();
		});
		
	jQuery(".close").click(function() {
			messageElement.fadeOut("normal");
			messageElement.queue(function() {
				messageElement.data("displayed",false);
				clearTimeout(dismiss);
				jQuery(this).dequeue();
			});
			return false;
	});
};






//=== Mootools ===
window.addEvent('domready', function(){

	// set input field behaviours
	function setTextFields(elementToSet, fieldText, changeElement) {
		if ($(elementToSet)) {
			$(elementToSet).addEvent('focus', function(){ 
				if ($(elementToSet).value==fieldText) $(elementToSet).value='';
				if ($(changeElement)) { $(changeElement).className='over'; }
			});
			$(elementToSet).addEvent('blur', function(){
				if (!$(elementToSet).value) $(elementToSet).value=fieldText;
				if ($(changeElement)) { $(changeElement).className=''; }
			});
		}
	}

	setTextFields($E('.textfield', 'newsletter-signup'), 'Your email address', 'newsletter-signup');
	setTextFields($E('.textfield', 'search'), 'Keyword or product ID');
	
	// nav menus
	
	Element.extend(
	{
		hide: function() 
		{
			return this.setStyle('visibility', 'hidden');
		},
		
		show: function() 
		{
			return this.setStyle('visibility', 'visible');
		}
	});
	
	var DropdownMenu = new Class({	
		initialize: function(element)
		{
			$A($(element).childNodes).each(function(el)
			{
				if(el.nodeName.toLowerCase() == 'li')
				{
					
					$A($(el).childNodes).each(function(el2)
					{						
						if(el2.nodeName.toLowerCase() == 'div')
						{
							$(el2).hide();
							
							el.addEvent('mouseenter', function(e)
							{
								e = new Event(e);
								el.toggleClass('over');
								el2.show();
								return false;
								e.stop();
							});
	
							el.addEvent('mouseleave', function(e)
							{
								e = new Event(e);
								el.toggleClass('over');
								el2.hide();
								e.stop();
							});
							new DropdownMenu(el2);
						}
					});
				}
			});
			return this;
		}
	});
	
	new DropdownMenu($('toplevelnav'))
	
	// set option panel behaviour
	function setPanel(showLink, hideLink, panel) {
		if ((showLink) && (hideLink) && (panel)) {
			showLink.show();
			showLink.addEvent('click', function(e){ 
				e = new Event(e);
				panel.show();
				e.stop();
			});
			hideLink.addEvent('click', function(e){ 
				e = new Event(e);
				panel.hide();
				e.stop();
			});
		} 
	}
	
	setPanel($E('a.view-options', 'paging-top'), $E('p.hide-options a', 'paging-top'),$E('div.paging-options', 'paging-top'));
	setPanel($E('a.view-options', 'paging-bottom'), $E('p.hide-options a', 'paging-bottom'),$E('div.paging-options', 'paging-bottom'));
	
	// set product viewer behaviour -- INCOMPLETE
	function thumbnailSwitch(thumbnail, imageToSwitch) {
		if ((thumbnail) && (imageToSwitch)) {
			thumbnail.addEvent('click', function(e){ 
				e = new Event(e);
				// imageToSwitch.src = ;
				e.stop();
			});
		}
	}
});




function styleCheckboxesAndRadiobuttons() {
	var elements = document.getElementsByTagName('input');
	for (i = 0; i < elements.length; i++) {
		if (elements[i].type == 'checkbox' || elements[i].type == 'radio') {	
			switch (elements[i].className) {
				// Add other cases here for other symbols. Just remember 
				// to change in your css too.
				// The case is the same as the class you use when calling on the
				// input.
				case 'instock':
					createAlternateCheckboxOrRadiobutton(elements[i], i);
				break;
				case 'lowstock':
					createAlternateCheckboxOrRadiobutton(elements[i], i);
				break;
				case 'nostock':
					createAlternateCheckboxOrRadiobutton(elements[i], i);
				break;
			}
		}
	}
}

function createAlternateCheckboxOrRadiobutton(element, num) {
	var defaultClass = element.className + '-default';
	// Hide the original checkbox.
	element.style.display='none';
	// creates the new alternate checkbox
	var altElement = document.createElement('div');
	if (element.checked == true) {
		altElement.className = element.className;
	} else {
		altElement.className = defaultClass;
	}
	altElement.id = 'alt-' + element.id;
	element.parentNode.appendChild(altElement);

	// Handles onclick event.
	altElement.onclick = function(){
		if (element.checked != true) {
			if (element.type == 'radio') {
			  handleOnClickForRadiobuttons(element.name);
			}
			altElement.className = element.className;
			element.checked = true
		} else {
			if (element.type == 'radio') {
				handleOnClickForRadiobuttons(element.name);
			}
			altElement.className = defaultClass;
			element.checked = false;
		}
	}
}

function handleOnClickForRadiobuttons(name) {
	var radiobuttons = document.getElementsByName(name);
	for (i = 0; i < radiobuttons.length; i++) {
			if (radiobuttons[i].type == 'radio') {
			var altRadiobutton = document.getElementById('alt-' + radiobuttons[i].id);
			altRadiobutton.className = radiobuttons[i].className + '-default';
		}
	}
}

window.addEvent('domready',setDefaultButtons);
window.addEvent('domready',styleCheckboxesAndRadiobuttons);
window.addEvent('domready',initQtyBoxes);

//Set default butttons
function setDefaultButtons() {
	
	  var textBoxes = document.getElementsByTagName("input");
	  var selectBoxes = document.getElementsByTagName("select");
	  
      for (var i = 0; i < textBoxes.length; i++)
      {
		if (textBoxes[i].type != "image" && textBoxes[i].type != "button" && textBoxes[i].type != "submit" && textBoxes[i].type != "reset") {
			attachEventListener(textBoxes[i], "keydown", clickDefault, false);
		}
      }
	  
	  for (var i = 0; i < selectBoxes.length; i++)
      {
			attachEventListener(selectBoxes[i], "keydown", clickDefault, false);
      }
	  
}

function clickDefault(event) {

   if (event.keyCode == 13)  {
	
	if (typeof event == "undefined") {
        event = window.event;
    }
	
	stopDefaultAction(event);

    var target = getEventTarget(event);
	
    var defaultButton = target.nextSibling;
	
    while (defaultButton.className != "button")
      {
        defaultButton = defaultButton.nextSibling;
      }
	  
   	defaultButton.click();  
	
   }
}


//hide checkout qty buttons and perfom click on change
function initQtyBoxes() {
	if (!document.getElementById("trolley")) return;
	var qtyBoxes = document.getElementById("trolley").getElementsByTagName("input");

	for(i=0;i<qtyBoxes.length;i++) {
		if(qtyBoxes[i].className == "quantity-box") {
		attachEventListener(qtyBoxes[i], "keyup", clickButton, false);
	    }
	    if(qtyBoxes[i].className == "linkbutton" && qtyBoxes[i].value != "Remove" ) {
	        qtyBoxes[i].className += " hidden";
	    }
	}
}

function clickButton(event) {

	if (typeof event == "undefined") {
        event = window.event;
    }
	stopDefaultAction(event);

    var target = getEventTarget(event);
    
    var defaultButton = target.nextSibling;
    
   	window.setTimeout(function() {defaultButton.click()}, 500);;  
}


//library functions
// JScript File

function getEventTarget(event)
{
  var targetElement = null;

  if (typeof event.target != "undefined")
  {
    targetElement = event.target;
  }
  else
  {
    targetElement = event.srcElement;
  }

  while (targetElement.nodeType == 3 && targetElement.parentNode != null)
  {
    targetElement = targetElement.parentNode;
  }

  return targetElement;
}

function attachEventListener(target, eventType, functionRef, capture)
{
  if (typeof target.addEventListener != "undefined")
  {
    target.addEventListener(eventType, functionRef, capture);
  }
  else if (typeof target.attachEvent != "undefined")
  {
    target.attachEvent("on" + eventType, functionRef);
  }
  else
  {
    eventType = "on" + eventType;

    if (typeof target[eventType] == "function")
    {
      var oldListener = target[eventType];

      target[eventType] = function()
      {
        oldListener();

        return functionRef();
      }
    }
    else
    {
      target[eventType] = functionRef;
    }
  }

  return true;
}

function addLoadListener(fn)
{
  if (typeof window.addEventListener != 'undefined')
  {
    window.addEventListener('load', fn, false);
  }
  else if (typeof document.addEventListener != 'undefined')
  {
    document.addEventListener('load', fn, false);
  }
  else if (typeof window.attachEvent != 'undefined')
  {
    window.attachEvent('onload', fn);
  }
  else
  {
    var oldfn = window.onload;
    if (typeof window.onload != 'function')
    {
      window.onload = fn;
    }
    else
    {
      window.onload = function()
      {
        oldfn();
        fn();
      };
    }
  }
}

function getElementsByAttribute(attribute, attributeValue)
{
  var elementArray = new Array();
  var matchedArray = new Array();

  if (document.all)
  {
    elementArray = document.all;
  }
  else
  {
    elementArray = document.getElementsByTagName("*");
  }

  for (var i = 0; i < elementArray.length; i++)
  {
    if (attribute == "class")
    {
      var pattern = new RegExp("(^| )" + attributeValue + "( |$)");

      if (elementArray[i].className.match(pattern))
      {
        matchedArray[matchedArray.length] = elementArray[i];
      }
    }
    else if (attribute == "for")
    {
      if (elementArray[i].getAttribute("htmlFor") || elementArray[i].getAttribute("for"))
      {
        if (elementArray[i].htmlFor == attributeValue)
        {
          matchedArray[matchedArray.length] = elementArray[i];
        }
      }
    }
    else if (elementArray[i].getAttribute(attribute) == attributeValue)
    {
      matchedArray[matchedArray.length] = elementArray[i];
    }
  }

  return matchedArray;
}


function stopDefaultAction(event) {
    if(typeof event == "undefined")
    {
        event.returnValue = false;
    }
    if (typeof event.preventDefault != "undefined")
    {
        event.preventDefault();
    }

}
