// comLib.js

// copyright  bpm consult ag, CH-Birsfelden
// contact    webdev@bpm.ch
// license    restricted

/* version history:
  Revision 1.00  25.10.2010  sb  initial version
  Revision 1.01  07.01.2011  sb  checkout address private company switch added
  Revision 2.00  20.01.2011  sb  wikipedia integration improved
*/

function bpminit(El){

  if (!Ext.isObject(El)) return;
  
  // accordion menu
  beeline.web.initAccordionGroup(El,'.groupContent');
  beeline.web.initAccordionNavigation(El,'.nav');

  // animate boxes  
  beeline.web.animateBox(El,'.box');
  
  // add reflection to images
  beeline.web.addReflection(El);

  // show advanced search after ajaxload
  var AdvancedSearch = El.select('.headerSearchAdvanced').item(0);
  if (Ext.isObject(AdvancedSearch)) {
    AdvancedSearch.fadeIn();
    AdvancedSearch.select('.closeSearch').each(function(CloseSearch){
      CloseSearch.on('click', function(){
        AdvancedSearch.hide();
      });
    });
  }
  
  // show advanced search if already exist
  var ExpandSearch = El.select('.headerSearchExpand').item(0);
  if (Ext.isObject(ExpandSearch)) {
    ExpandSearch.on('click', function(){
      var AdvancedSearch = El.select('.headerSearchAdvanced').item(0);
      if (Ext.isObject(AdvancedSearch)) {
        AdvancedSearch.fadeIn();
      }
    });
  }
  
  // limit textarea to 450 chars
  El.select('.max450').each(function(e){
    var limitNum = 449;
    e.on('keypress', function(k, t){
      var key = k.getKey();
      if ((key == null) || (key == 0) || (key == 8) || (key == 9) || (key == 13) || (key == 27) || (key == 116)) {
        return;
      }
      if (Ext.get(t).dom.value.length > limitNum) {
        k.stopEvent();
      }
      else {
        Ext.get(t).next('input.counter').dom.value = limitNum - Ext.get(t).dom.value.length;
      }
    });
  });
  
  // wikipedia integration: get author request
  var WikiAuthor = El.select('.wikiAuthor').item(0);
  if (Ext.isObject(WikiAuthor)) {
    var author = WikiAuthor.dom.innerHTML;
    author = author.split(';')[0];
    author = author.split(' (')[0];
    if (author.search(/, /) != -1) {
      author = (author.split(', ')[1] + '_' + author.split(', ')[0]).replace(/ /g, '_');
    }
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'http://de.wikipedia.org/w/api.php?action=parse&redirects=1&prop=text|categories&format=json&page=' + author + '&callback=getWikiJSON&meta=siteinfo';
    Ext.select('head').item(0).appendChild(script);
  }
  
    // show alert message
  var AlertMsg = Ext.get('alert');
  if ((Ext.isObject(AlertMsg))&&(AlertMsg.dom.innerHTML.replace(/^\s+|\s+$/g, '') != '')) {
    new beeline.web.alert({
      content: AlertMsg.dom.innerHTML + '<p class="alertboxButton"><span class="button"><input class="alertboxClose" type="reset" name="close" value="OK"/></span></p>',
      shadeBg: true 
    });
    AlertMsg.dom.innerHTML = '';
  }
  

  // quick tool tips
  El.select('.quicktip').each(function(e){
    beeline.web.createToolTip(e, 'quicktip', e.getAttribute('alt'), e.getAttribute('title'), new Array(10, -20));
  });
  
  // set focus
  if (El.select('.focus').item(0)) {
    var lastFocusElement = Ext.select('.focus').getCount() - 1;
    Ext.select('.focus').item(lastFocusElement).focus();
  }
 
  // detail: create window
  function createWindow(EventObj, content, src){
      EventObj.stopEvent();
      var Overlay = Ext.select('.overlay',true).item(0);  
      if (Ext.isObject(Overlay)) {
      var OverlayContent = Overlay.select('.overlayContent').item(0);
        var id = Ext.id(OverlayContent);
    OverlayContent.dom.innerHTML = '';
    beeline.web.loadsrc(content, id, src);
        new beeline.web.alert({
          title: Overlay.select('.overlayTitle').item(0).dom.innerHTML,
          content: '<div class="ajaxContent">' + OverlayContent.dom.innerHTML + '</div><p class="alertboxButton"><span class="button"><input class="alertboxClose" type="reset" name="close" value="OK"/></span></p>'
        });
      }
      return false;
  }

  // detail: show picture in window
  El.select('.showPicture').each(function(ShowPicture){
    var src = ShowPicture.dom.href;
    ShowPicture.on('click', function(EventObj){
    return createWindow(EventObj,'img',src);
    });
  });
  
  // detail: show widget in window
  El.select('.showWidget').each(function(ShowWidget){
    var src = ShowWidget.dom.href;
    ShowWidget.on('click', function(EventObj){
    return createWindow(EventObj,'iframe',src);
    });
  });
 
  // detail: expand info box
  El.select('.detailInfoBoxExpand').each(function(El){
    var ExpandButton = El.first();
    var ExpandElements = El.parent().select('.detailInfoBoxMore');
    ExpandButton.on('click', function(){
      ExpandButton.hide();
      ExpandElements.show();
    });
  });

  // close or open main slider
  El.select('.mainSlider').each(function(Slider){
    Slider.first('span').on('click', function(event, target){
      El = Ext.get(target);
      if (El.hasClass('boxClose')) {
        El.parent().next().slideOut('t', { useDisplay: true });
        El.removeClass('boxClose');
        El.addClass('boxOpen');
      } else {
        El.parent().next().slideIn();
        El.removeClass('boxOpen');
        El.addClass('boxClose');
      }
    });
  });

  // result: add news alert
  El.select('.newsalertItem').each(function(Add){
    Add.on('click', function(event, target){
      Ext.get(target).parent('.newsalert').first('.newsalertAdd').show();
    });
  });
  
   
  // basket: add free text item
  var AddForm = El.select('.addForm').item(0);
  if (Ext.isObject(AddForm)) {	 
    var ShowAddForm = El.select('.showAddForm').item(0); 
    if (!Ext.isObject(ShowAddForm)) return; 
    ShowAddForm.on('click', function(){
      AddForm.slideIn();
      ShowAddForm.setStyle('visibility', 'hidden');
    });
    var HideAddForm = El.select('.hideAddForm').item(0);
    if (!Ext.isObject(HideAddForm)) return;
    HideAddForm.on('click', function(){
      AddForm.slideOut('t', { useDisplay: true });
      ShowAddForm.setStyle('visibility', 'visible');
    });
	var Warning = AddForm.select('.warning').item(0);
	if (Ext.isObject(Warning)) {
	  AddForm.slideIn();
	  ShowAddForm.setStyle('visibility', 'hidden');
	}
  }
  
  // checkout2: invoice address private company switch
  var InvoicePrivate = El.select('.invoicePrivate').item(0);
  var InvoiceCompany = El.select('.invoiceCompany').item(0);
  if (Ext.isObject(InvoicePrivate)) {
    function setPrivate(){
      InvoicePrivate.addClass('active');
      InvoiceCompany.removeClass('active');
      Ext.get('Addition2').dom.value = '';
      Ext.select('.private').each(function(e){
        e.setStyle('display', 'inline-block');
        if (e.parent().is('td')) e.parent().setStyle('paddingTop', '10px');
      });
      Ext.select('.company').each(function(e){
        e.setStyle('display', 'none');
        if (e.parent().is('td')) e.parent().setStyle('paddingTop', '0');
      });
    }
    function setCompany(){
      InvoiceCompany.addClass('active');
      InvoicePrivate.removeClass('active');
      if (Ext.get('Addition2').getValue() == '') {
        Ext.get('Addition2').dom.value = ' ';
      }
      Ext.select('.company').each(function(e){
        e.setStyle('display', 'inline-block');
        if (e.parent().is('td')) e.parent().setStyle('paddingTop', '10px');
      });
      Ext.select('.private').each(function(e){
        e.setStyle('display', 'none');
        if (e.parent().is('td')) e.parent().setStyle('paddingTop', '0');
      });
    }
    if (Ext.get('Addition2').getValue() == '') {
      setPrivate();
    }
    else {
      setCompany();
      if (Ext.get('Addition2').getValue() == ' ') {
        Ext.get('Addition2').on('focus', function(){
          Ext.get('Addition2').dom.value = ''
        });
      }
    }
    InvoiceCompany.on('click', setCompany);
    InvoicePrivate.on('click', setPrivate);
  }

  // checkout2: delivery address private company switch
  var DeliveryPrivate = El.select('.deliveryPrivate').item(0);
  var DeliveryCompany = El.select('.deliveryCompany').item(0);
  if (Ext.isObject(DeliveryPrivate)) {
    function setPrivate2(){
      DeliveryPrivate.addClass('active');
      DeliveryCompany.removeClass('active');
      Ext.get('Addition2-2').dom.value = '';
      Ext.select('.private2').each(function(e){
        e.setStyle('display', 'inline-block');
        if (e.parent().is('td')) e.parent().setStyle('paddingTop', '10px');
      });
      Ext.select('.company2').each(function(e){
        e.setStyle('display', 'none');
        if (e.parent().is('td')) e.parent().setStyle('paddingTop', '0');
      });
    }
    function setCompany2(){
      DeliveryCompany.addClass('active');
      DeliveryPrivate.removeClass('active');
      if (Ext.get('Addition2-2').getValue() == '') {
        Ext.get('Addition2-2').dom.value = ' ';
      }
      Ext.select('.company2').each(function(e){
        e.setStyle('display', 'inline-block');
        if (e.parent().is('td')) e.parent().setStyle('paddingTop', '10px');
      });
      Ext.select('.private2').each(function(e){
        e.setStyle('display', 'none');
        if (e.parent().is('td')) e.parent().setStyle('paddingTop', '0');
      });
    }
    if (Ext.get('Addition2-2').getValue() == '') {
      setPrivate2();
    }
    else {
      setCompany2();
      if (Ext.get('Addition2-2').getValue() == ' ') {
        Ext.get('Addition2-2').on('focus', function(){
          Ext.get('Addition2-2').dom.value = ''
        });
      }
    }
    DeliveryCompany.on('click', setCompany2);
    DeliveryPrivate.on('click', setPrivate2);
  }

  // facebook integration: like it
  El.select('.detailLike').each(function(Like){
    var child = '<iframe src="http://www.facebook.com/widgets/like.php?href=' + document.URL + '" scrolling="no" frameborder="0"></iframe>';
    Ext.DomHelper.append(Like, child);
  });

  // facebook integration: activities
  var FacebookActivity = El.select('.facebookActivity').item(0);
  if (Ext.isObject(FacebookActivity)) {
    FacebookActivity.on('click', function(){
      var site = document.URL.split('/')[2];
      new beeline.web.alert({
        title: 'Facebook',
        content: '<iframe class="facebookActivites" src="http://www.facebook.com/widgets/activity.php?site=' + site + '"></iframe><p class="alertboxButton"><span class="button"><input class="alertboxClose" type="reset" name="close" value="OK"/></span></p>'
      });
    });
  }

  // help: switch to wiki documentation
  var ShowHelp = El.select('.showHelp').item(0);
  if(Ext.isObject(ShowHelp)){
    var focused = false;
    ShowHelp.on('click', function(){
      ShowHelp.setStyle('display', 'none');
    });
    El.select('.help').each(function(Help){
      var Element = Help.parent();
      Element.on('mouseover', function(){
        if(ShowHelp.getStyle('display') == 'none' && focused == false){
          focused = true;
          var CurrentHelp = this.first('.help');
          CurrentHelp.setStyle('display', 'block');
          CurrentHelp.setHeight(this.getHeight());
          CurrentHelp.setWidth(this.getWidth());
          var lineHeight = this.getHeight() - 3;
          CurrentHelp.setStyle('line-height', lineHeight + 'px');
        }
      });
      Element.on('mouseleave', function(){
        if(ShowHelp.getStyle('display') == 'none'){
          this.first('.help').setStyle('display', 'none');
          focused = false;
        }
      });
      Element.on('click', function(){
        if(ShowHelp.getStyle('display') == 'none'){
          var CurrentHelp = this.first('.help');
          CurrentHelp.setStyle('display', 'none');
          Ext.get('showHelp').setStyle('display', 'block');
          var url = Ext.getDom('helpurl').innerHTML.unescapeHTML() + 'wikihelp=Web:' + CurrentHelp.dom.innerHTML;
          window.open(url, 'help');
        }
      });
    });
  }

}


// wikipedia integration: get author callback
function getWikiJSON(JSONData) {
  if (Ext.isObject(JSONData.error) || JSONData.parse.categories.length == 0) return;
  var content = JSONData['parse']['text']['*'];
  content = content.replace(/\/wiki\//g, 'http://de.wikipedia.org/wiki/');  // wikipedia links
  content = content.replace(/\/w\//g, 'http://de.wikipedia.org/w/');  // wikipedia links without article
  content = content.replace(/wikimedia.orghttp:\/\/de.wikipedia.org/g, 'wikimedia.org'); // wikimedia links
  var WikiInfo = Ext.select('.wikiAuthor').item(0);
  WikiInfo.update(content);
  Ext.select('.wikiEmpty').item(0).setStyle('display', 'none');
  WikiInfo.select('a').each(function(Link){
    // isbn search
    if(Link.hasClass('mw-magiclink-isbn')) {
      var separator = '?';
      if(document.URL.search(/\?/) != -1) separator = '&';
      var parm = 'bpmkey=%2Fbusiness/result&bpmparm=%2Fbusiness/result%2C%2Fbusiness/detail&bpmquery=';
      Link.dom.href = document.URL + separator + parm + Link.getAttribute('href').split('/')[5];
    }
    else {
      // disable all external links
      //if(Link.hasClass('external') && Link.dom.href.search(/wikimedia.org/) == -1) Link.dom.href = '#';
      // open external links in a new tab
      if(Link.dom.href.search(/http/) != -1) Link.dom.target = '_blank';
    }
  });
  var Weblinks = Ext.get('Weblinks');
  if(Ext.isObject(Weblinks)) {
    Weblinks.parent().setStyle('display', 'none');
    Weblinks.parent().next('ul').setStyle('display', 'none');
  }
}

// check all articles
function checkall(val){
  list = Ext.get('bpmlist').dom.elements;
  for (var i = 0; i < list.length; i++) {
    var el = list[i];
    var name = el.name.split('_');
    if (name[1] == 'CHECK' && el.checked != val) {
      el.checked = val;
      el.onchange();
    }
  }
}





/*  
 * COM-Funktion für die Darstellung von klein/gross im Result, falls nicht gebraucht entfernen.
 * 
   function dspbig(id) {
    var maxi = document.getElementById("searchresult").getElementsByTagName("p").length / 2;
    for(var i = 1; i <= maxi; ++i) {
      document.getElementById("big" + i).style.display = "none";
      document.getElementById("small" + i).style.display = "block";
    }
    document.getElementById("small" + id).style.display = "none";
    document.getElementById("big" + id).style.display = "block";
  }
  dspbig("1");
 
 
  function dsptab(id) {
        document.getElementById(id).style.display = "block";
        var maxelements = document.getElementById(id).getElementsByTagName("p").length;
        if(maxelements > 5) {
          maxelements = 5;
          document.getElementById(id).getElementsByTagName("div")[0].style.height = "210px";
          document.getElementById(id).getElementsByTagName("div")[0].style.width = "100%";
          document.getElementById(id).getElementsByTagName("div")[0].style.overflow = "auto";
          document.getElementById(id).getElementsByTagName("div")[0].style.margin = "0 0 8px 0";
        }
        var top = 260;
        var maxt = 305 - (maxelements * 55);
        document.getElementById(id).getElementsByTagName("p")[0].style.padding = maxt + "px 0 0 0";
        var msecs = 20;
        while(top > maxt) {
          top = top - 10;
          msecs = msecs + 10;
          settop = "document.getElementById('" + id + "').style.top = '-" + top + "px'";
          window.setTimeout(settop, msecs);
        }
      }
 
 
 
  // hide all article tabs 
  function hideAllArticleTabs() {
    var tabs = document.getElementById("tabLink").getElementsByTagName("p").length;
    document.getElementById("tabLink").getElementsByTagName("img")[0].src = "#(##class(bpm.html.web.uBroker).PrefixURL("css/default/images/tabStart.png"))#";
    document.getElementById("tabLink").getElementsByTagName("p")[0].className = "inactive";
    for(var i=1; i < tabs; i++) {
      document.getElementById("tabLink").getElementsByTagName("img")[i].src = "#(##class(bpm.html.web.uBroker).PrefixURL("css/default/images/tabInactive.png"))#";
      document.getElementById("tabLink").getElementsByTagName("p")[i].className = "inactive";
      document.getElementById("tabContent" + i).style.display = "none";
    }
    document.getElementById("tabLink").getElementsByTagName("img")[tabs].src = "#(##class(bpm.html.web.uBroker).PrefixURL("css/default/images/tabEnd.png"))#";
    document.getElementById("tabContent" + tabs).style.display = "none";
  }
  
  // display a specified tab 
  function dspArticleTab(tabNr) {
    hideAllArticleTabs();
    document.getElementById("tabLink").getElementsByTagName("p")[(tabNr -1)].className = "current";
    document.getElementById("tabContent" + tabNr).style.display = "block";
    var tabs = document.getElementById("tabLink").getElementsByTagName("p").length;
    if(tabNr == 1) {
      document.getElementById("tabLink").getElementsByTagName("img")[0].src = "#(##class(bpm.html.web.uBroker).PrefixURL("css/default/images/tabStartActive.png"))#";
      document.getElementById("tabLink").getElementsByTagName("img")[1].src = "#(##class(bpm.html.web.uBroker).PrefixURL("css/default/images/tabLeftActive.png"))#";
    } else if(tabNr == (tabs)) {
      document.getElementById("tabLink").getElementsByTagName("img")[(tabNr - 1)].src = "#(##class(bpm.html.web.uBroker).PrefixURL("css/default/images/tabRightActive.png"))#";
      document.getElementById("tabLink").getElementsByTagName("img")[tabs].src = "#(##class(bpm.html.web.uBroker).PrefixURL("css/default/images/tabEndActive.png"))#";
    } else {
      document.getElementById("tabLink").getElementsByTagName("img")[(tabNr - 1)].src = "#(##class(bpm.html.web.uBroker).PrefixURL("css/default/images/tabRightActive.png"))#";
      document.getElementById("tabLink").getElementsByTagName("img")[tabNr].src = "#(##class(bpm.html.web.uBroker).PrefixURL("css/default/images/tabLeftActive.png"))#";
    }
  }
 
 */


