var dragObject;
var dummyDiv;
var originalPositions = [];
var imagePos;
var magnifyEnabled = false;
var moreInfoEnabled = false;
var infoCount = 0;
var preventDelDatesDrag = false;
var audioPlaying = false;

function getDelDates(textInputId, siteKey, suiteKey, prodcatKey, subcatKey, matnr, qty, noOfDates)
{
	var loader = document.createElement('div');
	loader.id = 'deliveryDatesLoad';
	
	removeChildren($('matDatesAJAX'));
	$('matDatesAJAX').appendChild(loader);
	$('deliveryDatesLoad').style.display = '';
	textInput = $(textInputId);
	var pstlz = textInput.value;
	var myAJAXUrl = "/delivery_dates.xml?zpstlz=" + pstlz +  
                        "&zsuite=" + suiteKey + 
                        "&zprodcat=" + prodcatKey + 
			"&zsubcat=" + subcatKey +
			"&zmatnr=" + matnr + 
			"&zquantity=" + qty + 
			"&zdates_count=" + noOfDates;

        doAJAXRequest(myAJAXUrl);
}

function cancelDraggable()
{
	preventDelDatesDrag = true;
	undoPreventTextSelect();
}

function restoreDraggable()
{
	preventDelDatesDrag = false;
}

function clearDates()
{
	removeChildren($('matDatesAJAX'));
	
}

function removeChildren(elem)
{
	myChildNodes = elem.childNodes;
	childNodesCount = myChildNodes.length;
	for(var i = 0; i < childNodesCount; i++)
	{
		elem.removeChild(myChildNodes[0]);
	}
}

function autoSubmitForms()
{
	if($('autosubmit'))
	{
		$('autosubmit').submit();
	}
}

/*function $(id) { return document.getElementById(id); }*/

function addUnloadEvent(func) {
  var oldonunload = window.onunload;
  if (typeof window.onunload != 'function') {
    window.onunload = func;
  } else {
    window.onunload = function() {
      if (oldunonload) {
        oldunonload();
      }
      func();
    }
  }
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

addLoadEvent(function()
{
  //initialiseWhosOn();
  autoSubmitForms();
  if (document.getElementsByTagName('body'))
  {
    if (document.getElementsByTagName('body')[0])
    {
      var myBody = document.getElementsByTagName('body')[0];
      var myNewScriptDiv = document.createElement('div');
      myNewScriptDiv.setAttribute('id', 'scriptInfo');
      var myNewStepDiv = document.createElement('div');
      myNewStepDiv.setAttribute('id', 'stepNumber');
      var myNewStepNumber = document.createTextNode('1');
      myNewStepDiv.appendChild(myNewStepNumber);
      myNewScriptDiv.appendChild(myNewStepDiv);
      myBody.appendChild(myNewScriptDiv);
    }
  }


	if($('delDatesOpenLink'))
	{
		$('delDatesOpenLink').style.display = '';
	}
		
  if (document.getElementById('directions'))
  {
    myDirections = $('directions');
    myDirections.onkeyup = function()
    {
      checkLength(this, '80');
    }
    myDirections.onchange = function()
    {
      checkLength(this, '80');
    }
    myDirections.onblur = function()
    {
      checkLength(this, '80');
    }
  }
  if ($('print'))
  {
    myPrint = $('print');
    myPrint.onclick = function()
    {
      window.print();
    }
  }
  if ($('startTime'))
  {
    if ($('arrivalTime'))
    {
      moveStartFinish();
    }
  }
  if ($('googleAnalyticsData'))
  {
    __utmSetTrans();
  }

  if (document.getElementById('collectionForm'))
  {
	 	initialiseConfigurator(); 
  }
  
  /*var addToBagItem = $('addToBagItem');
  if (addToBagItem)
  {
		addToBagItem.onclick = function ()
		{
			addToBasketItem('1');
			return false;	
		} 
  }  
  var addToBagSuite1 = $('addToBagSuite1');
  if (addToBagSuite1)
  {
		addToBagSuite1.onclick = function ()
		{
			addToBasketSuite('1');
			return false;	
		} 
  }  
  var addToBagSuite2 = $('addToBagSuite2');
  if (addToBagSuite2)
  {
		addToBagSuite2.onclick = function ()
		{
			addToBasketSuite('1');
			return false;	
		} 		
  }*/ 
  
  var audioButton = $('play-sound');
  if (audioButton) {
	var audioSource = audioButton.down('input');
	if (audioSource) {
		audioButton.observe('click', function() {
			if (audioPlaying == false)
			{
				$('play-sound').update('STOP PLAYING');
				audioPlaying = true;
				Sound.enable();
				Sound.play('/audio/' + audioSource.value, {replace:true});
			}
			else
			{
				$('play-sound').update('PRODUCT AUDIO');
				audioPlaying = false;
				Sound.play('', {replace:true});
				Sound.disable();
			}
		});	
	}	
  } 
  correctPNG();
});

document.onmousemove = mouseMove;
document.onmouseup   = mouseUp;

function submitForm(formId)
{
	$(formId).submit();
}

function toggleDisplay(elemRef)
{
	if (!magnifyEnabled)
	{	
		if ($(elemRef))
		{	  
			// Toggle the display style
			$(elemRef).style.display = $(elemRef).style.display == 'none' ? '':'none';		
			
			var productImage = $('productImage');
			
			// If the element has been hidden, set the position back to the original
			if($(elemRef).style.display == 'none')
			{
				for (var i = 0; i < originalPositions.length; i++)
				{
				  if (originalPositions[i].id == elemRef)
				  {
					  $(elemRef).style.left = originalPositions[i].x + "px";    
				    $(elemRef).style.top  = originalPositions[i].y + "px";	 
				    break;
				  }					
				} 
				
				infoCount--;
				
				if (infoCount == 0)
				{
				  moreInfoEnabled = false;
				  $('headerNavigation').style.position = 'relative';
				  if (productImage)
			    {
			      productImage.className = 'magnifyOn';		
			    }
		    }
			}
			else
			{
				infoCount++;
				moreInfoEnabled = true;
				$('headerNavigation').style.position = 'static';
				if (productImage)
			  {
			    productImage.className = 'magnifyOff';		
			  }	
			}
		}	
	}
}

function toggleDisplayDelDates(elemRef)
{
	if (!magnifyEnabled)
	{	
		var productImage = $('productImage');
		if ($(elemRef))
		{	  
			// Toggle the display style
			$(elemRef).style.display = $(elemRef).style.display == 'none' ? '':'none';		
			
			if($(elemRef).style.display == 'none')
			{				
				moreInfoEnabled = false;
				if (productImage)
				{
			    		productImage.className = 'magnifyOn';		
				}	
			}
			else
			{
				moreInfoEnabled = true;
		
				if (productImage)
				{
			    		productImage.className = 'magnifyOff';		
				}	
			}	

		}
			
	}
}

function navigateToUrl(url)
{
  if (url)
  {
    if (document.getElementsByTagName('body'))
    {
      if (document.getElementsByTagName('body')[0])
      {
        myBody    = document.getElementsByTagName('body')[0];
        myNewForm = document.createElement('form');
        myNewForm.setAttribute('method', 'post');
        myNewForm.setAttribute('action', url);
        myBody.appendChild(myNewForm);
        myNewForm.submit();
      }
    }
  }
  return false;
}
function selectDate(itemRef, newDate)
{
  if ($('amd'))
  {
    if ($('selectedDate'))
    {
      mySelectedDate = $('selectedDate');
      setValue(mySelectedDate, newDate);
      changeDateText(newDate);
      if ($('calendar'))
      {
        myCalendar = $('calendar');
        mySelectedDates = getElementsByClassName('calCellSelected', 'td', myCalendar);
        for (i=0; i<mySelectedDates.length; i++)
        {
          mySelectedDates[i].className = 'calCellLink';
        }
        itemRef.className = 'calCellSelected';
      }
    }
  }
  else
  {
    if (itemRef)
    {
      var flag      = false;
      var myCounter = 0;
      var x         = 0;
      var myDate;
      
      $('selectedDate').value = newDate;
      
      if ($('myDate'))
      {
        myDate = $('myDate');
        myText = document.createTextNode('You have selected ' + newDate.substring(6,8) + '.' + newDate.substring(4,6) + '.' + newDate.substring(0,4) + ' as your delivery date.');
        
        while(myDate.lastChild)
           myDate.removeChild(myDate.lastChild);
  
        myDate.appendChild(myText);
      }
      
      var eltArray = document.getElementsByTagName('td');
      
      if (eltArray)
      {
        for (x = 0; x < eltArray.length; x++)
        {
          if (eltArray[x].className == 'calCellSelected' && eltArray[x].getAttribute('id') != 'legendItem1')
          {
            myCounter++;
          }
        }
      }
      
      if (myCounter > 0)
      {
        for (x = 0; x < eltArray.length; x++)
        {
          if (eltArray[x].className == 'calCellSelected' && eltArray[x].getAttribute('id') != 'legendItem1')
          {
            eltArray[x].className = 'calCellLink';
          }
        }
      }
      
      itemRef.className = 'calCellSelected';
      myCounter         = 0;
    }
  }
}

function calNextMonth(hideID, showID)
{
 /* if (document.getElementById('amd'))
  {
    if (document.getElementById(oldMonth))
    {
      if (document.getElementById(newMonth))
      {
        myOldMonth = document.getElementById(oldMonth);
        myNewMonth = document.getElementById(newMonth);
        myOldMonth.style.display = 'none';
        myNewMonth.style.display = 'block';
      }
    }
  }
  else
  {*/
    if ($(hideID))
    {
      if ($(showID))
      {
        myHideElement = $(hideID);
        myShowElement = $(showID);
        myHideElement.style.display = 'none';
        myShowElement.style.display = 'block';
      }
    }
  /*}*/
}

function getMouseOffset(target, ev)
{
	ev = ev || window.event;

	var docPos    = getElementPosition(target);
	var mousePos  = getMousePosition(ev);
	return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}

function getMousePosition(e)
{
  var bodyLeft = 0;
  var bodyTop = 0;

  e = e || window.event;
  if(e.pageX || e.pageY)
  {
    return {x:e.pageX, y:e.pageY};
  }

  if(document.body && document.body.scrollTop)
  {
  	bodyTop = document.body.scrollTop;
  }

  if(document.body && document.body.scrollLeft)
  {
  	 bodyLeft = document.body.scrollLeft;
  }

  return {
    x:e.clientX + bodyLeft + document.documentElement.scrollLeft,
    y:e.clientY + bodyTop + document.documentElement.scrollTop 
  };
}

function getElementPosition(element)
{
	var left = 0;
	var top  = 0;

	while (element.offsetParent)
	{		
		left    += element.offsetLeft;
		top     += element.offsetTop;
		element  = element.offsetParent;
	}

	left += element.offsetLeft;
	top  += element.offsetTop;

	return {x:left, y:top};
}

function mouseMove(e)
{
	if (magnifyEnabled)
	{
		doMagnify(e)
	}	
	else if (moreInfoEnabled)
	{	
	  var overTarget;
	  
		e  = e || window.event;
		
		var mousePos = getMousePosition(e);
	
		if(dragObject)
		{
			
			dragObject.style.position  = 'absolute';
	
			var marginTop = 0;
			var marginLeft = 0;
	
			if(dragObject.style.marginTop){
				marginTop = dragObject.style.marginTop.replace("px", "");
			}
	
			if(dragObject.style.marginLeft){
				marginLeft = dragObject.style.marginLeft.replace("px", "");
			} 
				
			 
			if (dragObject.id != 'techMarketing' && dragObject.id != 'matDatesContainer')
			{
				dragObject.style.top  = ( mousePos.y - mouseOffset.y - marginTop ) + "px";
		                dragObject.style.left = ( mousePos.x - mouseOffset.x - marginLeft ) + "px";					
			}
			else
			{
				var xoffset = {x:mousePos.x - imagePos.x, y:mousePos.y - imagePos.y};	
	
			  dragObject.style.top       = ( xoffset.y - mouseOffset.y - marginTop  + 1) + "px";
			  dragObject.style.left      = ( xoffset.x - mouseOffset.x - marginLeft + 1) + "px";			
			}
			
			
			document.body.style.cursor = 'move';
			return false;
		}
	}
}

function makeDraggable(item)
{
	if(!item) return;
	
	item.onmousedown = function(e)
	{	

		if(item.id == "matDatesContainer" && preventDelDatesDrag)
		{
			return true;
		}
		else
		{	
			dragObject = item;   
		   
			mouseOffset = getMouseOffset(dragObject, e);		
		
			var productImage = $('productImage');
		
			if (productImage)
			{
				imagePos = getElementPosition(productImage);			
			}
		
			doPosition(item);		
		
			preventTextSelect();
		
			//return false;
		}
	}
}

function doPosition(item)
{
	var found = false;	
	
	for (var i = 0; i < originalPositions.length; i++)
	{
	  if (originalPositions[i].id == item.id)
	  {
	    found = true;	
	    break;   
    }
	}
	
	if (!found)
	{
		var position = getElementPosition(item);
		
		if (item.id == "techMarketing" || item.id == "matDatesContainer")
		{
			position.x -= imagePos.x;
		  position.y -= imagePos.y + 10;
	  }
		  
		originalPositions.push({id:item.id,x:position.x,y:position.y});	
  }	
}

function mouseUp(ev)
{
  if(dragObject)
  {        
    dropDragObject();   
  }
}

function dropDragObject()
{
  if(dragObject)
  {
	  lastDragObjectId = dragObject.id;
    dragObject = null;
    document.body.style.cursor = '';
  } 
}

function preventTextSelect()
{
  // prevent IE text selection while dragging!!!
  document.body.ondrag = function () { return false; };
  document.body.onselectstart = function () { return false; };
}

function undoPreventTextSelect()
{
  document.body.ondrag = function () { };
  document.body.onselectstart = function () { };
}

// Arrange My Delivery

function moveStartFinish()
{
  if ($('order_number'))
  {
    var myOrder = $('order_number');
    var myOrderNumber = getValue(myOrder);
    getTimes(myOrderNumber);
    movement = setTimeout('moveStartFinish()', 10000);
  }
}

function getTimes(myOrderNumber)
{
  var myAJAXUrl = 'delivery_progress.xml?order_number=' + myOrderNumber;
  doAJAXRequest(myAJAXUrl);
}

function newCalendar()
{
  if ($('calendar'))
  {
    if ($('postcode'))
    {
      if ($('order_number'))
      {
        var myCalendar = $('calendar');
        var myPostcode = $('postcode');
        var myPostcodeValue = getValue(myPostcode);
        var myOrderNumber = $('order_number');
        var myOrderNumberValue = getValue(myOrderNumber);
        var myAJAXUrl = '/calendar.xml?order_number=' + myOrderNumberValue + '&postcode=' + myPostcodeValue;
        doAJAXRequest(myAJAXUrl);
      }
    }
  }
}

function doAJAXRequest(AJAXUrl)
{
  if (window.XMLHttpRequest)
  {
    req = new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
  {
    req = new ActiveXObject("Microsoft.XMLHTTP");
  }
  if (req)
  {
    req.onreadystatechange = processAJAXRequest;
    req.open("GET", AJAXUrl, true);
    req.send(null);
  }
}

function addToBasketSuite(zquantity) 
{
	var myAJAXUrl = "/add_to_basket.xml?zaction=suite" + 
			            "&zquantity=" + zquantity + 
			            "&zrand="     + Math.random();
  scroll(0,0);    
	doAJAXRequest(myAJAXUrl);
}
function addToBasketItem(zquantity)
{
	var myAJAXUrl = "/add_to_basket.xml?zaction=item" + 
			            "&zquantity=" + zquantity + 
			            "&zrand="     + Math.random();
  scroll(0,0);  
	doAJAXRequest(myAJAXUrl);   
}
function closeAddedToBasket()
{
	$('addedToBasketWrapper').style.display = 'none';	
}

function processAJAXRequest()
{
  if (req.readyState == 4)
  {
    if (req.status == 200)
    {
      var response;
      response = req.responseXML;
      if (response)
      {
        if (response.getElementsByTagName('addtobasket')[0])
        {
	        var root = response.getElementsByTagName('addtobasket')[0];
	        
	        $('headerBagItems').innerHTML  = root.getElementsByTagName('items')[0].lastChild.nodeValue + " Items - " + root.getElementsByTagName('total')[0].lastChild.nodeValue;

	        if (root.getElementsByTagName('name')[0].lastChild)
	        {
		       	temp_name = root.getElementsByTagName('name')[0].lastChild.nodeValue; 
	        }
	        $('addedToBasketContent').innerHTML = '<p>You have added this item.</p><p>You have ' + root.getElementsByTagName('items')[0].lastChild.nodeValue + ' items in your basket.</p>';
	        
	        $('addedToBasketWrapper').style.display = '';
          $('addedToBasketBackground').style.height= document.body.clientHeight + 500 + "px";        
        }
        else if (response.getElementsByTagName('calendar')[0])
        {
          if ($('calendar'))
          {
            var myCalendar = $('calendar');
            var myCalendarNodes = myCalendar.childNodes;
            for (i=myCalendarNodes.length - 1; i>=0; i--)
            {
              myCalendar.removeChild(myCalendarNodes[i]);
            }
            var myCalendarXML = response.getElementsByTagName('calendar')[0];
            myCalendar.innerHTML = getXMLNodeSerialisation(myCalendarXML);
          }
        }
        else if (response.getElementsByTagName('delivery')[0])
        {
          if ($('delivery'))
          {
            var myDelivery = $('delivery');
            var myDeliveryNodes = myDelivery.childNodes;
            for (i=myDeliveryNodes.length - 1; i>=0; i--)
            {
              myDelivery.removeChild(myDeliveryNodes[i]);
            }
            var myDeliveryXML = response.getElementsByTagName('delivery')[0];
            myDelivery.innerHTML = getXMLNodeSerialisation(myDeliveryXML);
          }
        }
	else if (response.getElementsByTagName('materialDates')[0])
        {
          if ($('matDatesAJAX'))
          {
            var myDatesPanel = $('matDatesAJAX');
            var myDatesPanelNodes = myDatesPanel.childNodes;
	    $('deliveryDatesLoad').style.display = 'none';
            for (i=myDatesPanelNodes.length - 1; i>=0; i--)
            {
              myDatesPanel.removeChild(myDatesPanelNodes[i]);
            }
            var myDatesXML = response.getElementsByTagName('materialDates')[0];
            myDatesPanel.innerHTML = getXMLNodeSerialisation(myDatesXML);
          }
        }
      }
    }
  }
}

function getXMLNodeSerialisation(xmlNode) {
  var text = false;
  try
  {
    var serializer = new XMLSerializer();
    text = serializer.serializeToString(xmlNode);
  }
  catch (e)
  {
    try
    {
      text = xmlNode.xml;
    }
    catch (e) {}
  }
  return text;
}

function changeDateText(date)
{
  if ($('calendarInstruction'))
  {
    myInstruction = $('calendarInstruction');
    myInstructionNodes = myInstruction.childNodes;
    for (i=myInstructionNodes.length - 1; i>=0; i--)
    {
      myInstruction.removeChild(myInstructionNodes[i]);
    }
    myInstructionText = document.createTextNode('You have selected ' + date.substring(6, 8) + '/' + date.substring(4, 6) + '/' + date.substring(0, 4) + ' as your delivery date.');
    myInstruction.appendChild(myInstructionText);
  }
}

function checkLength(element, length)
{
  if (element)
  {
    if (length > 0)
    {
      myValue = getValue(element);
      if (myValue.length > length)
      {
        myNewValue = myValue.substring(0, length);
        setValue(element, myNewValue);
      }
    }
  }
}

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;
}

function getValue(element)
{
  if (element)
  {
    if (element.value || element.value == '')
    {
      return element.value;
    }
    else if (element.lastChild)
    {
      return element.lastChild.nodeValue;
    }
    else
    {
      return element.nodeValue;
    }
  }
}

function setValue(element, value)
{
  if (element)
  {
    if (element.value || element.value == '')
    {
      element.value = value;
    }
    else if (element.lastChild)
    {
      element.lastChild.nodeValue = value;
    }
    else
    {
      element.nodeValue = value;
    }
  }
}

function changeStep(newStepNumber)
{
  if ($('stepNumber'))
  {
    myStepCounter = $('stepNumber');
    myOldStepNumber = getValue(myStepCounter);
    if (myOldStepNumber == 1)
    {
      newCalendar();
    }
    myOldStepName = 'step' + myOldStepNumber;
    myNewStepName = 'step' + newStepNumber;
    if ($(myOldStepName))
    {
      if ($(myNewStepName))
      {
        myOldStep = $(myOldStepName);
        myNewStep = $(myNewStepName); 
        myOldStep.style.display = 'none';
        myNewStep.style.display = 'block';
        setValue(myStepCounter, newStepNumber);
      }
    }
  }
}

function showVideo()
{
	$('videoWrapper').style.display = '';
}
function closeVideo()
{
	$('videoWrapper').style.display = 'none';
}
function correctPNG() // correctly handle PNG transparency in Win IE 5.5 & 6.
{
  var arVersion = navigator.appVersion.split("MSIE");
  var version = parseFloat(arVersion[1]);
  if ((version >= 5.5) && (document.body.filters)) 
  {
    for(var i=0; i<document.images.length; i++)
    {
      var img = document.images[i];
      var imgName = img.src.toUpperCase();
      
      if ((imgName.match(".png") || imgName.match(".PNG")) && img.src.indexOf('google') == -1 && img.className == 'overlay')
      {
        var imgID = (img.id) ? "id='" + img.id + "' " : "";
        var imgClass = (img.className) ? "class='" + img.className + "' " : "";
        var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
        var imgStyle = "display:inline-block;" + img.style.cssText ;
        var cssClass = img.className;
        if (img.align == "left") imgStyle = "float:left;" + imgStyle;
        if (img.align == "right") imgStyle = "float:right;" + imgStyle;
        if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle;
        var strNewHTML = "<span " + imgID + imgClass + imgTitle
        + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
        + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
        + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>" ;
        img.outerHTML = strNewHTML;
        i = i-1;
      }
    }
  }    
}