// ##### pro aurum specific javascript handler  ######
var gMgnlRootNode = "";

function changeBaseprice(elemId, newBgX, newBgY) {
    var elem = document.getElementById(elemId);
    if (elem!=null) {
        elem.style.backgroundPosition = newBgX + "px " + newBgY + "px";
    }
}


// ################## show JFreeChart  - begin #########################
    //########  showTimerange #########
   
    function showTimerange(n) {
    	if(n == null){n = 1;}
       
       	// #### highlite chartSelector btns ####
        var chartSelector = document.getElementById('chartSelector');
    	if (chartSelector!=null) {
    		var newBgY = -1 * (n - 1) * 20;
    		var newBgX = 0;
        	chartSelector.style.backgroundPosition = newBgX + "px " + newBgY + "px";
    	}
    	 
    	//##### display 1 Month charts #######
    	if(n == 1){
            var chart1SrcUrl = gContextPath +  gMgnlRootNode +  "/chartServlet/?days=30&metalArt=Gold" + "&amp;rdm=" + getRandomNumberString();	// ## add random query string to avoid caching
    		var chart2SrcUrl = gContextPath +  gMgnlRootNode +  "/chartServlet/?days=30&metalArt=Silber" + "&amp;rdm=" + getRandomNumberString();	// ## add random query string to avoid caching
    		var chart3SrcUrl = gContextPath +  gMgnlRootNode +  "/chartServlet/?days=30&metalArt=Platin" + "&amp;rdm=" + getRandomNumberString();	// ## add random query string to avoid caching
    		var chart4SrcUrl = gContextPath +  gMgnlRootNode +  "/chartServlet/?days=30&metalArt=Palladium" + "&amp;rdm=" + getRandomNumberString();	// ## add random query string to avoid caching
               
    	}
    	
    	//##### display 3 Month charts #######
    	if(n == 2){
    		var chart1SrcUrl = gContextPath +  gMgnlRootNode +  "/chartServlet/?days=90&metalArt=Gold" + "&amp;rdm=" + getRandomNumberString();	// ## add random query string to avoid caching
    		var chart2SrcUrl = gContextPath +  gMgnlRootNode +  "/chartServlet/?days=90&metalArt=Silber" + "&amp;rdm=" + getRandomNumberString();	// ## add random query string to avoid caching
    		var chart3SrcUrl = gContextPath +  gMgnlRootNode +  "/chartServlet/?days=90&metalArt=Platin" + "&amp;rdm=" + getRandomNumberString();	// ## add random query string to avoid caching
    		var chart4SrcUrl = gContextPath +  gMgnlRootNode +  "/chartServlet/?days=90&metalArt=Palladium" + "&amp;rdm=" + getRandomNumberString();	// ## add random query string to avoid caching
    	}
    	
    	//##### display 12 Month charts #######
    	if(n == 3){
    		var chart1SrcUrl = gContextPath +  gMgnlRootNode +  "/chartServlet/?days=365&metalArt=Gold" + "&amp;rdm=" + getRandomNumberString();	// ## add random query string to avoid caching
    		var chart2SrcUrl = gContextPath +  gMgnlRootNode +  "/chartServlet/?days=365&metalArt=Silber" + "&amp;rdm=" + getRandomNumberString();	// ## add random query string to avoid caching
    		var chart3SrcUrl = gContextPath +  gMgnlRootNode +  "/chartServlet/?days=365&metalArt=Platin" + "&amp;rdm=" + getRandomNumberString();	// ## add random query string to avoid caching
    		var chart4SrcUrl = gContextPath +  gMgnlRootNode +  "/chartServlet/?days=365&metalArt=Palladium" + "&amp;rdm=" + getRandomNumberString();	// ## add random query string to avoid caching
    	}
    	
    	
	//alert("gContextPath " + gContextPath + " chart1SrcUrl " + chart1SrcUrl );

    	// ##### Update chart images ######
    	updateChartImage('chart1', chart1SrcUrl);
    	updateChartImage('chart2', chart2SrcUrl);
    	updateChartImage('chart3', chart3SrcUrl);
    	updateChartImage('chart4', chart4SrcUrl);
    
    }
    
    
    
    //########  updateChartImage #########
    function updateChartImage(elementID, srcURL) {
    	if(srcURL == null){srcURL = "../images/chart/defaultImage.jpg";} // ### show default image just in case
        var element = document.getElementById(elementID);
        if(element != null){
        	element.src = srcURL;
        }
    }

    //########  getRandomNumberString #########
    function getRandomNumberString(stringLength) {
    	if(stringLength == null){var stringLength = 10;}		
        var randomString = "" + (Math.random()* stringLength);
       	var randomString = randomString.replace(/\./g , "");
        return randomString;
    }
// ################## show JFreeChart  - end #########################




// ################## callCMSPage  #########################
function callCMSPage(contextPath, mTargetValue)
{

	if(mTargetValue != "") {
		var mLoactionCMSPath =  contextPath + mTargetValue + '.html';
		//alert("callCMSPage " + mLoactionCMSPath);
		document.location.href= mLoactionCMSPath;
	}
}


// ################# open hours countdown ##################

var gShopIsClosedMessage = 'Unser Shop ist geschlossen.';
var gOpenhours_timePart1 = 'Heute noch ';
var gOpenhours_timePart2 = ' Stunden geöffnet';
var gReopenhours_timePart1='Wir öffnen wieder in ';
var gCountdownHours   = 'Stunden';
var gCountdownMinutes = 'Minuten';
var gCountdownSeconds = 'Sekunden';
var gReopenhours_timePart2='.';

function cdtime(container, pCurrentDate, pClosingDate, pReopenDate){
  if (!document.getElementById || !document.getElementById(container))
      return;
      
  this.container=document.getElementById(container);
  this.scriptStartTime=new Date(pCurrentDate);
  this.currentTime=pCurrentDate;
  this.closingTime=pClosingDate;
  this.reopenTime=pReopenDate;
  this.shopClosed=false;
  this.reopening=false;
  this.updateTime();
}

cdtime.prototype.updateTime=function(){
  var thisobj=this;
  this.currentTime.setSeconds(this.currentTime.getSeconds()+1);
  
  if(this.scriptStartTime!=null && this.currentTime!=null) {
     var scriptRuntime = (this.currentTime-this.scriptStartTime)/1000; // runtime in seconds
     var reloadTimer = 3*60*60; // reload page after three hours (should resync with server time too)
     if (scriptRuntime>reloadTimer) {
         location.reload(true);
     }
  }
  
  setTimeout(function(){thisobj.updateTime()}, 1000); //update time every second
}

cdtime.prototype.displaycountdown=function(baseunit, functionref){
  this.baseunit=baseunit;
  this.formatresults=functionref;
  this.showresults();
}

cdtime.prototype.showresults=function(){
  var thisobj=this;
  
  this.reopening=false;
  this.shopClosed=false;
  
  var timediff=-1;
  // check if all times required for calculations exist - else display no countdown
  if (this.currentTime==null || this.closingTime==null || this.reopenTime==null) {
      this.container.innerHTML='<span class="openhours_countdown_time">&#160;</span>';
      return;
  }
  
  // calculate timediffs (assuming they are in future)
  var timeDiffClosing = -1;
  timeDiffClosing = (this.closingTime-this.currentTime)/1000;
  
  var timeDiffReopening = -1;
  timeDiffReopening = (this.reopenTime-this.currentTime)/1000;
  
  // if both timediffs are up - display no countdown
  if (timeDiffClosing<=0 && timeDiffReopening<=0) {
      this.container.innerHTML='<span class="openhours_countdown_time">&#160;</span>';
      return;
  }
  
  // both in future - take next (smaller timediff)
  if (timeDiffClosing>0 && timeDiffReopening>0) {
      if (timeDiffClosing<timeDiffReopening) {   // closing is next event
          timediff = timeDiffClosing;
          this.shopClosed = false;
          this.reopening = false;
      } else {                                   // reopening is next event 
          timediff = timeDiffReopening;
          this.shopClosed = true;
          this.reopening = true;
      }
  }
  
  // closing in future only
  if (timeDiffClosing>0 && timeDiffReopening<=0) {
      // closing is next event
      timediff = timeDiffClosing;
      this.shopClosed = false;
      this.reopening = false;
  }  
  
  // reopening in future only
  if (timeDiffClosing<=0 && timeDiffReopening>0) {
      // reopening is next event 
      timediff = timeDiffReopening;
      this.shopClosed = true;
      this.reopening = true;
  }  
  
  
  // make sure we have a timediff set - if not display no countdown
  if (timediff<0) {
      this.container.innerHTML='<span class="openhours_countdown_time">&#160;</span>';
      return;
  }

  var oneMinute=60;    //minute unit in seconds
  var oneHour=60*60;   //hour unit in seconds
  var oneDay=60*60*24; //day unit in seconds 
  var dayfield=Math.floor(timediff/oneDay);
  var hourfield=Math.floor((timediff-dayfield*oneDay)/oneHour);
  var minutefield=Math.floor((timediff-dayfield*oneDay-hourfield*oneHour)/oneMinute);
  var secondfield=Math.floor((timediff-dayfield*oneDay-hourfield*oneHour-minutefield*oneMinute));
  if (this.baseunit=="hours"){ //if base unit is hours, set "hourfield" to be topmost level
      hourfield=dayfield*24+hourfield;
      dayfield="";
  } else if (this.baseunit=="minutes") { //if base unit is minutes, set "minutefield" to be topmost level
      minutefield=dayfield*24*60+hourfield*60+minutefield;
      dayfield=hourfield="";
  } else if (this.baseunit=="seconds"){ //if base unit is seconds, set "secondfield" to be topmost level
      var secondfield=timediff;
      dayfield=hourfield=minutefield="";
  }


  var fmtResult = null;
  if (this.shopClosed==false) {
      this.formatresults = formatresults;
      fmtResult = this.formatresults(dayfield, hourfield, minutefield, secondfield);
      if (fmtResult!=null)
         fmtResult = gOpenhours_timePart1 + '<span class="openhours_countdown_time">' + fmtResult + '</span>' + gOpenhours_timePart2;
  } else {
      if (this.reopening==true) {
          this.formatresults = formatresultsReopen;
          fmtResult = this.formatresults(dayfield, hourfield, minutefield, secondfield);
          if (fmtResult!=null)
             fmtResult = gReopenhours_timePart1 + '<span class="openhours_countdown_time">' + fmtResult + '</span>' + gReopenhours_timePart2;
      }
  }
  
  if (fmtResult!=null) {
     this.container.innerHTML=fmtResult;
  }
  
  //this.container.innerHTML=this.formatresults(dayfield, hourfield, minutefield, secondfield);
  setTimeout(function(){thisobj.showresults()}, 1000); //update results every second
}

/////CUSTOM FORMAT OUTPUT FUNCTIONS BELOW//////////////////////////////

//Create your own custom format function to pass into cdtime.displaycountdown()
//Use arguments[0] to access "Days" left
//Use arguments[1] to access "Hours" left
//Use arguments[2] to access "Minutes" left
//Use arguments[3] to access "Seconds" left

//The values of these arguments may change depending on the "baseunit" parameter of cdtime.displaycountdown()
//For example, if "baseunit" is set to "hours", arguments[0] becomes meaningless and contains "n/a"
//For example, if "baseunit" is set to "minutes", arguments[0] and arguments[1] become meaningless etc


function formatresults(){
  if (this.shopClosed==false || (this.shopClosed==true && this.reopening==true) ){ //if target date/time not yet met
    // var displaystring=arguments[0]+" days "+arguments[1]+" hours "+arguments[2]+" minutes "+arguments[3]+" seconds left until March 23, 2009 18:25:00";
    var displaystring = "";
    if (arguments[0]!='') {
       displaystring = arguments[0] + " days ;"
    }
    
    var hoursStr = arguments[1];
    if (arguments[1]+''!='') {
       if (arguments[1] < 10)
         hoursStr = "0" + arguments[1];
    }
    
    var minutesStr = arguments[2];
    if (arguments[2]+''!='') {
       if (arguments[2] < 10)
         minutesStr = "0" + arguments[2];
    }
    
    var secondsStr = arguments[3];
    if (arguments[3]+''!='') {
       if (arguments[3] < 10)
         secondsStr = "0" + arguments[3];
    }
    
    displaystring +=arguments[0]+" "+hoursStr+":"+minutesStr+":"+secondsStr;
  } else { //else if target date/time met
      var displaystring=null;
  }
  return displaystring;
}

function formatresultsReopen(){
  if (this.shopClosed==false || (this.shopClosed==true && this.reopening==true) ){ //if target date/time not yet met
    // var displaystring=arguments[0]+" days "+arguments[1]+" hours "+arguments[2]+" minutes "+arguments[3]+" seconds left until March 23, 2009 18:25:00";
    var displaystring = "";
    if (arguments[0]!='') {
       displaystring = arguments[0] + " days ;"
    }
    
    var hoursStr = arguments[1];
    if (arguments[1]+''!='') {
       if (arguments[1] < 10)
         hoursStr = "0" + arguments[1];
    }
    
    var minutesStr = arguments[2];
    if (arguments[2]+''!='') {
       if (arguments[2] < 10)
         minutesStr = "0" + arguments[2];
    }
    
    var secondsStr = arguments[3];
    if (arguments[3]+''!='') {
       if (arguments[3] < 10)
         secondsStr = "0" + arguments[3];
    }
    
    displaystring +=arguments[0]+" "+hoursStr + " " + gCountdownHours + ", "+minutesStr+ " " + gCountdownMinutes + ", "+secondsStr + " " + gCountdownSeconds;
  } else { //else if target date/time met
      var displaystring=null; 
  }
  return displaystring;
}


//############ pricelist specific group filter items ###################
var gPricelistFilterItemList = new Array();
var gFilterOptionAll = "[Alle]";

function createPricelistFilterItem(pId, pLabel, pMetalId, pList) {
   var pricelistFilterItem = new Array(pId, pLabel, pMetalId);
  
   if (pList!=null)
      pList.push(pricelistFilterItem);
}

function updatePricelistFilterGroups(pMetalContainer, pGroupContainerName) {
    var pList = gPricelistFilterItemList;

    if (pMetalContainer==null)
       return;
       
	var selectedMetal = pMetalContainer.options[pMetalContainer.selectedIndex].value;
	if (selectedMetal==null)
	    selectedMetal='';
	
	var pGroupContainers = document.getElementsByName(pGroupContainerName);
	if (pGroupContainers==null || pGroupContainers.length<1)
	    return;
	
	var pGroupContainer = pGroupContainers[0];
	if (pGroupContainer==null)
	    return;
	
	// clear options
	pGroupContainer.length=0;
	
	// add all option
	var allFilterOption = new Option(gFilterOptionAll, '', false, false);
	pGroupContainer.options[pGroupContainer.length] = allFilterOption;
	
	// add list items with matching metal id
	for (i=0; i<pList.length; i++){
	   var listItem = pList[i];
	   if (listItem!=null && listItem.length==3 && listItem[2]!=null && (selectedMetal=='' || listItem[2]==selectedMetal) ) {
   	      var newFilterOption = new Option(listItem[1], listItem[0], false, false);
	      pGroupContainer.options[pGroupContainer.length] = newFilterOption;
	   }
	}
	   
}


function initPricelistFilterGroups () {
     var metalSelectElements = document.getElementsByName('pattern.metal.eq');
     if (metalSelectElements==null) 
         return;
     
     var metalSelectElem = metalSelectElements[0];
     if (metalSelectElem==null)
        return; 
     
     var groupSelectionElementName = 'pattern.productGroupOrProductType.eq';
     var groupSelectionElements = document.getElementsByName(groupSelectionElementName);
     if (groupSelectionElements==null)
        return;
     
     
     var beforeSelectedGroupId = null;
     var groupSelectionElement = groupSelectionElements[0];
     if (groupSelectionElement!=null) {
         // get selected (before update) to keep pattern setting
         if (groupSelectionElement.selectedIndex > -1) {
             beforeSelectedGroupId = groupSelectionElement.options[groupSelectionElement.selectedIndex].value;
         }
     }
     
     updatePricelistFilterGroups(metalSelectElem, groupSelectionElementName);
     
     // re-set previous value
     if (beforeSelectedGroupId!=null) {
        for (i=0; i<groupSelectionElement.length; i++){
           var curCategory = groupSelectionElement.options[i];
           if (curCategory!=null && curCategory.value!=null && curCategory.value!='') {
               if (curCategory.value==beforeSelectedGroupId) {
                  curCategory.selected=true;
               }
           }
        }
     }
     
}

function submitPriceFilterForm() {
    var priceFilterFormElem = document.getElementById('form.priceFilter.id');
    priceFilterFormElem.submit();
}

//############ do not allow copy and paste from clipboard on specific input fields ###################
var gError_noPasting='Copy and Paste is not allowed. Sorry.';

function rejectClipboardPaste(elem) {
   if (elem) {
      elem.blur();
      var hiddenOverlayDiv = document.getElementById('hiddenOverlayDiv');
      if (hiddenOverlayDiv) {
         hiddenOverlayDiv.style.display='block';
         alert(gError_noPasting);
         hiddenOverlayDiv.focus();
         hiddenOverlayDiv.style.display='none';
      } else {
         alert(gError_noPasting);
      }
   }

   window.focus(); // set focus away from current input to avoid pasting text there
   return false;
}


function pasteChkKeyDown(elem, e) {
  if (!e)
    e = window.event;

  var keyCode = e.keyCode;
  // contextmenu key or ctrl+v
  if (e.keyCode==93) {
     return rejectClipboardPaste(elem); // context menu key
  } else if ((e.ctrlKey || e.metaKey) && e.charCode == 118) {
     return rejectClipboardPaste(elem); // Gecko
  } else if (!e.altKey && e.ctrlKey && e.keyCode == 86) {
     return rejectClipboardPaste(elem); // Opera
  } else if (e.ctrlKey && e.keyCode == 22) {
     return rejectClipboardPaste(elem); // Konqueror
  } else if (e.metaKey && e.keyCode == 118) {
     return rejectClipboardPaste(elem); // Safari
  }  

  return true;
}


function pasteChkRgtClick(elem, e) {
  if (!e)
    e = window.event;

  if (e.type && e.type=="contextmenu")
    return rejectClipboardPaste(elem);

  if (e.button && e.button==2)
    return rejectClipboardPaste(elem);  

  if (e.which && e.which==3)
    return rejectClipboardPaste(elem);

  return true;
}

function hideProductGroupMenu(cmsUrl){
	//alert(cmsUrl);
	var classElements = document.getElementsByClassName('item_level3_shopnav');
	//alert('arguments.length : '+classElements.length);
	
	for (var i=0; i < classElements.length; i++) {
   		var element = classElements[i];
   		var hrefValue = element.getAttribute('href');
   		if (element.getAttribute('href')) {
   			if(hrefValue.indexOf(cmsUrl)>=0){
   				var elementParent = element.parentNode;
   				var elementParentSibling = elementParent.nextSibling;
										
   				var elementGrandParent = elementParent.parentNode;
   				elementGrandParent.removeChild(elementParent);
   				
   				if (elementParentSibling){
					if (elementParentSibling.getAttribute('class') == 'itemspacer_level3_shopnav'){
						//alert("sibling class is : "+elementParentSibling.getAttribute('class'));
		   				elementGrandParent.removeChild(elementParentSibling);
					}
				}
   			}
   		}
   	}
}