  /**
   * AJAX PublicShopMenu (axPSM)
   * @author	Matthias Sojka (z0ika)
   * @version 0.10
   * @date	2008-12-16
   */

  var spinner = '<img id="PSMLoad" alt="Bitte warten..." src="http://www.aircom.net/templates/images/adminTool/spinner.gif" title="Bitte warten..." />';
  var bSpinner = 0;
  var aLoadedSubMenus = new Array();
  var bInMenu         = 0;
  var sActiveMenu     = '';
  var aOpenedIds = new Array();

  function activePSM(sMenu) {
    if(sActiveMenu != sMenu && sActiveMenu != '') {
      closeSubMenus(aOpenedIds);
    }
    sActiveMenu = sMenu;
  }

  function isLoadedSubMenu(id) {
    var iLength = aLoadedSubMenus.length;
    var i       = 0;
    for( i ; i < iLength ; i++ ) {
      if(aLoadedSubMenus[i] == id) {
        return 1;
        break;
      }
    }
    return 0;
  }

  function addOpenedId(id,iParentId) {
    var iOpenedIdsLength = aOpenedIds.length;
    var i                = 0;
    var iParentPosition  = 0;           //stores the current position of parent
    var bParentExisting  = 0;
    var aCloseThatOnes   = new Array(); //menus which have to be closed


    if(iParentId == 0) {
      for( i ; i < iOpenedIdsLength ; i++ ) {
        if(aOpenedIds[i] != id) {
          aCloseThatOnes.push(aOpenedIds[i]);
        }
      }
      closeSubMenus(aCloseThatOnes);
      aOpenedIds.length = 0;
    } else {
      for( i ; i < iOpenedIdsLength ; i++ ) {
        if(bParentExisting) {
          if(aOpenedIds[i] != id) {
            aCloseThatOnes.push(aOpenedIds[i]);
          }
        }
        if(aOpenedIds[i] == iParentId) {
          iParentPosition = i;
          bParentExisting = 1;
        }
      }
      if(bParentExisting) {
        closeSubMenus(aCloseThatOnes);
        aOpenedIds.length = iParentPosition+1;
      }
    }
    aOpenedIds.push(id);
    //$('PSM_DEBUG').innerHTML = aOpenedIds;
  }

  function closeSubMenus(aSubMenus) {
    var iLength = aSubMenus.length;
    var i       = 0;

    for( i ; i < iLength ; i++ ) {
      if(aSubMenus[i] != '' && aSubMenus[i] != 0) {
        $('PSMC_' + aSubMenus[i]).hide();
        //alert($(sActiveMenu+'li' + aSubMenus[i]).innerHTML);
        if($(sActiveMenu+'li' + aSubMenus[i])) {
          disableHover($(sActiveMenu+'li' + aSubMenus[i]));
        }
        if($('psmli' + aSubMenus[i])) {
          disableHover($('psmli' + aSubMenus[i]));
        }
      }
    }
  }

  var oMouseOverTimeout = 0;
  function opnPSM(sParent,id,iGrandParentId) {
    bInMenu = 1;
    //enableHover($(sParent));
    $(sParent).style.backgroundColor = '#FFFFFF';
	  $(sParent).style.backgroundImage = "url(http://www.aircom.net/templates/images/naviLoader.gif)";
    oMouseOverTimeout = setTimeout("axOpnPSM($('"+sParent+"'),"+id+","+iGrandParentId+")",500);
  }

  function opnPSMH(sParent,id,iGrandParentId) {0
    closeSubMenus(aOpenedIds);
    bInMenu = 1;
    //enableHover($(sParent));
    $(sParent).style.backgroundColor = '#FFFFFF';
	  $(sParent).style.backgroundImage = "url(http://www.aircom.net/templates/images/naviLoader.gif)";
    oMouseOverTimeout = setTimeout("axOpnPSM($('"+sParent+"'),"+id+","+iGrandParentId+")",500);
  }

  function clsPSM(sParent) {
    bInMenu = 0;
    clearTimeout(oMouseOverTimeout);

    var iOpenedIdsLength = aOpenedIds.length;
    var i                = 0;
    var bIdIsOpen        = 0;
    for( i ; i < iOpenedIdsLength ; i++ ) {
      if(sActiveMenu+'li'+aOpenedIds[i] == sParent || 'psmli'+aOpenedIds[i] == sParent) {
        bIdIsOpen = 1;
      }
    }
    if(!bIdIsOpen) {
      disableHover($(sParent));
    } else {
      enableHover($(sParent));
    }
  }

  /**
   * Opens an additional <div> element, containing all sub productgroups
   *
   * oParent        - this->pointer to previous listing element
   * id             - id of previous listing element
   * iGrandParentId - id of previous element's parent
   */
	function axOpnPSM(oParent,id,iGrandParentId) {
	  var iParentWidth     = oParent.getWidth();
    var aParentOffset    = oParent.cumulativeOffset();

	  var iNegativeOffset  = 1;
	  verifyOrCreateSubMenu(id);
	  var bExistingSubMenu = isLoadedSubMenu(id);

	  addOpenedId(id,iGrandParentId);

	  if(bExistingSubMenu) {
  	  if($('liScrollable'+id).value == '1') {
  	    iNegativeOffset  = 20;
  	  }
      $('PSMC_' + id).style.left = iParentWidth + aParentOffset[0] + 'px';
  	  $('PSMC_' + id).style.top  = aParentOffset[1] - iNegativeOffset + 'px';
      $('PSMC_' + id).show();
      oParent.style.backgroundImage = "url(http://www.aircom.net/templates/images/naviArrow.png)";
	  } else {
	    /*
	    if(bSpinner) {
  	    $('PSMLoad').remove();
  	  }*/
  	  $('PSMC_' + id).style.left = iParentWidth + aParentOffset[0] + 'px';
  	  $('PSMC_' + id).style.top  = aParentOffset[1] - iNegativeOffset + 'px';
  	  //$('PSMC_' + id).innerHTML = spinner;
  	  $('PSMC_' + id).show();
  	  //bSpinner  = 1;
  	  new Ajax.Request(
        'http://www.aircom.net/de/psmsub,'+id+'.htm',
  			{
  				method: 'get',
  				onFailure: function(transport) {
  					alert('ERROR');
  				  $('PSMLoad').hide();
  				},
  				onSuccess: function(transport) {
  				  $('PSMC_' + id).innerHTML = transport.responseText;
  				  oParent.style.backgroundImage = "url(http://www.aircom.net/templates/images/naviArrow.png)";
  				  var iDivWidth = $('PSMC_' + id).getWidth();
  				  aLiElements   = $$('.li'+id);
  				  iLiLength     = aLiElements.length;
  				  var i         = 0;
  				  for( i ; i < iLiLength ; i++ ) {
  				    if(aLiElements[i].getWidth() > iDivWidth) {
  				      iDivWidth = aLiElements[i].getWidth();
  				    }
  				  }
  				  i = 0;
  				  for( i ; i < iLiLength ; i++ ) {
  				    aLiElements[i].style.width = iDivWidth+'px';
  				  }
  				  if($('liScrollable'+id).value == '1') {
      		    iNegativeOffset = 20;
      		  }
  				  $('PSMC_' + id).style.top  = aParentOffset[1] - iNegativeOffset + 'px';
  				  aLoadedSubMenus.push(id);
  				}
  			}
  		);
	  }
	}

	var aOpenedBefore    = new Array();
	var iMenuMoveBefore  = 0;
	var iMenuMove        = 0;
	var bClosureProgress = 0;

	/**
   * Array used to verify if a submenu was already opened. This is needed, because a div container has to be generated if it was not opened before.
   */

  var aExistingSubMenus       = new Array();
  var iExistingSubMenusLength = 0;

	/**
	 * This function verifies the existence of a submenu-container. if not existing, it will be created at the end of $$('body')[0].
	 */
	function verifyOrCreateSubMenu(id) {
	  var bSubMenuExisting = 0;
	  if(iExistingSubMenusLength != 0) {
  	  var i = 0;
  	  for( i ; i < iExistingSubMenusLength ; i++ ) {
  	    if(aExistingSubMenus[i] == id) {
  	      bSubMenuExisting = 1;
  	      break;
  	    }
  	  }
	  }
	  if(bSubMenuExisting == 0) {
	    $$('body')[0].insert({bottom:'<div class="PSMcontainer" id="PSMC_' + id + '"></div>'});
	    aExistingSubMenus.push(id);
	    iExistingSubMenusLength++;
	  }
	}

	var activeHovers = new Array();

	function enableHover(oParent) {
  	if(oParent) {
  	  oParent.style.backgroundColor = '#FFFFFF';
  	  oParent.style.backgroundImage = "url(http://www.aircom.net/templates/images/naviArrow.png)";
  	}
  }

	function disableHover(oParent) {
	  if(oParent) {
  	  oParent.style.backgroundColor = '';
  	  oParent.style.backgroundImage = "url(http://www.aircom.net/templates/images/naviArrowDisabled.png)";
	  }
	}

	function PSMscrollDown(id) {
	  aLiElements   = $$('.li'+id);
	  iLiLength     = aLiElements.length;
	  var i         = 0;
	  var iFirstDisabledLi = -1;
	  var iFirstEnabledLi  = -1;
	  var bVisibleLiPassed = 0;
	  for( i ; i < iLiLength ; i++ ) {
	    if(!bVisibleLiPassed && aLiElements[i].style.display == '') {
	      bVisibleLiPassed = 1;
	      iFirstEnabledLi  = i;
	    }
	    if(aLiElements[i].style.display == 'none') {
	      iFirstDisabledLi = i;
	      if(bVisibleLiPassed) {
	        break;
	      }
	    }
	  }
	  if(bVisibleLiPassed && iFirstDisabledLi < iLiLength && iFirstDisabledLi > iFirstEnabledLi) {
      aLiElements[iFirstEnabledLi].style.display = 'none';
      aLiElements[iFirstDisabledLi].style.display = '';
      $('scrollUp'+id).src = 'http://www.aircom.net/templates/images/upEnabled.png';
	  } else {
	    $('scrollDown'+id).src = 'http://www.aircom.net/templates/images/downDisabled.png';
	    $('scrollUp'+id).src = 'http://www.aircom.net/templates/images/upEnabled.png';
	  }
	}

	function PSMscrollUp(id) {
	  aLiElements   = $$('.li'+id);
	  iLiLength     = aLiElements.length;
	  var i         = 0;

	  if(aLiElements[0].style.display == '') {
	    $('scrollUp'+id).src = 'http://www.aircom.net/templates/images/upDisabled.png';
	    $('scrollDown'+id).src = 'http://www.aircom.net/templates/images/downEnabled.png';
	    return false;
	  }

	  var iLastDisabled = -1;
	  var iLastEnabled  = -1;

	  for( i ; i < iLiLength ; i++ ) {
	    if(aLiElements[i].style.display == 'none' && aLiElements[(i+1)].style.display == '') {
	      iLastDisabled = i;
	    }
	    if(aLiElements[i].style.display == '' && ((i+1) == iLiLength || aLiElements[(i+1)].style.display == 'none')) {
	      iLastEnabled = i;
	      break;
	    }
	  }
	  if(iLastDisabled != -1 && iLastEnabled != -1) {
	    aLiElements[iLastDisabled].style.display = '';
      aLiElements[iLastEnabled].style.display = 'none';
      $('scrollDown'+id).src = 'http://www.aircom.net/templates/images/downEnabled.png';
	  } else {
	    $('scrollUp'+id).src = 'http://www.aircom.net/templates/images/upDisabled.png';
	    $('scrollDown'+id).src = 'http://www.aircom.net/templates/images/downEnabled.png';
	  }
	}

	var oScrollInterval = 0;
	function PSMscroll(sAction,id) {
	  if(sAction == 'up') {
	    bInMenu = 1;
	    oScrollInterval = setInterval('PSMscrollUp('+id+')',80);
	  }
	  if(sAction == 'down') {
	    bInMenu = 1;
	    oScrollInterval = setInterval('PSMscrollDown('+id+')',80);
	  }
	  if(sAction == 'stop') {
	    bInMenu = 0;
	    clearInterval(oScrollInterval);
	  }
	}

	function fLiOn(sParent) {
	  bInMenu = 1;
	  $(sParent).style.backgroundColor = '#FFFFFF';
	}
	function fLiOff(sParent) {
	  bInMenu = 0;
	  $(sParent).style.backgroundColor = '';
	}
	function PSMPage(id, sProductGroup) {
    if(sProductGroup == undefined) {
      sProductGroup = 'productgroup';
    }
	 location.href = "http://www.aircom.net/de/"+sProductGroup+","+id+".html";
	}