$(document).ready(

  function() 
  {
    /**
     extending jQuery: helper function to check if a variable is empty
     call: $.isEmpty(value)
    */
      $.extend({isEmpty: function(val)
                   {
                     return (val == null || val === undefined || val == "");
                   }
                });
    
     
    /*look for glossar entries and wrap the span with a link
    for every: <span lang="de" xml:lang="de">Bioanbau</span><em>biologische Anbau</em>
    result: <a href="/glossar.php?q=Bioanbau"> <span lang="de" xml:lang="de">biologische Anbau</span></a>
    */
    /*$('span[lang|=<?php echo $lang; ?>]').each(function()
    {
      var lang = $(this).attr('lang');
      var text = $(this).text();
      var a = $('<a/>').attr('href', '/glossar.php?q='+text);
      a.addClass('glossar');
        
      var gesText = $(this).parent().html();
      var lookFor = text+"</span>";
       
      var reg = new RegExp(text+"<\/span>","ig");
      reg.test(gesText);
      var startIndex = reg.lastIndex;
      if(startIndex > 0)
      {
        var textAfterSpan = gesText.substring(startIndex , gesText.length); 
       
        if(textAfterSpan.indexOf("<em>") == 0)
        {
          var em = $(this).next('em');
          $(this).text(em.text());
          em.remove();
        }
      }
        
      $(this).wrap(a);
      
    });*/
    
    
    /*random headings (scratch-image)*/
    $('#content h1').each(function()
    {
      var r = getRandom(0,2);
      $(this).css('background', 'url(../img/main/scratch/h1_'+r+'.png) no-repeat');
    });
    
    $('#sidebar h2').each(function()
    {
      var r = getRandom(0,2);
      $(this).css('background', 'url(../img/sidebar/scratch/h2_'+r+'.png) no-repeat');
    });
    
    /* Sprachumschalter */
    $('select', '.meta').change(
    function() 
    {
       window.location.href = '?lang=' + $(this).val();
    });
    
    
    /* Loginseite */
    $('form', '.login').show();
    
    /*click on home button (logo)*/
    $('#head a.logo').live('click',
      function(e)
      {
        var params = makeParams();
        params['topnavi'] = 'deselect';
        params['navi'] = 'deselect';
        params['subnavi'] = 'deselect';
        saveVars(params);
      
      }
    );

    
    
    /* Sprachumschalter */
    $('.langselect').change(
      function()
      {
        var f = $(this).closest('form');
        f.find('[name=enterPressed]').val("0");
        f.submit();
      });
    
    /* Selectboxen 
    on combobox select, set the chosen text to the previous p-element
    */
    $('select.select', 'form').change(
      function()
      {
        var p = $(this).prev('p');
        p.html($(this).find(':selected').text());
      }
     );
    
    
    /* Checkboxes */
    $('label.checkbox', 'form').live('click',
      function(e) 
      {
        
        var label = $(this),
            input = $('#' + label.attr('for'));
       
       /* Browser Opera 10.x Exception: checked is true before javascript is excecuted */  
        if ($.browser.opera &&  $.browser.version.slice(0,3) == "10.") {
          if (input.is(':checked')) {
              label.removeClass('act');
          } else {
              label.addClass('act');
          }
          
        } else {
           if (input.is(':checked')) {
              label.removeClass('act');
              input.prop('checked', false);
           } else {
             label.addClass('act');
             input.prop('checked', true);
           }
        } 
        
      }
    );
    
    /* Radiobuttons */
    $('label.radio', 'form').click(
      function(e)
      {
        var label = $(this);
        var input = $('#'+label.attr('for'));
        
        /* remove selection of every radio on this level. */
        label.parent().children('label').removeClass('act');
        input.attr('checked', 'checked');
        
        label.addClass('act');
      }
    );
        
    
    /* Farbwähler */
    $('#colors li').live('click',
      function(e) {
        /* Init */
        var li = $(this),
          ul = li.parent(),
          css = li.attr('class'),
          obj = $('.' + css, '#cdc'),
          html = obj.html(),
          body = $('body');
        

        /*Post current color to session var via ajax, select element before*/
        var params = makeParams();
        params['colour'] = css;
        
        selectColor(css); //select now
        
        /**
        * call e.g. /contentRight/colors/blue.php
        * to keep track of color clicks
        */
        try
        {
          var myTracker=_gat._getTrackerByName();
          myTracker._trackPageview('/contentRight/colors/'+css+'.php');
        }catch(err){} 
         
        
        saveVars(params);
  
      
        /* Raus */
        e.preventDefault();
      }
    );
    
        
    
    /* Subtabs below the colors */
    $('#cdc li ul li > a').live(
      'click',
      function(e) {
        /* Init */
        var a = $(this),
          li = a.parent(),
          ul = li.parent(),
          parent = ul.parent(),
          css = li.attr('class'),
          obj = parent.children('.' + css),
          html = obj.html();
        
        /* Aktive Tabs */
        $('.act', ul).removeClass('act');
        li.addClass('act');
        
        /* Alle unsichtbar */
        parent.children('span.desc:visible').hide();
        
        /* Show */
        obj.html(
          make_more(html)
        ).show();
        
        /* Raus */
        e.preventDefault();
      }
    );
    
    /*topmenu*/
    $('.topnavi li a').click(
      function(e) {
        /* Init */
        var a = $(this),
        li = a.parent(),
        ul = li.parent(),
        css = li.attr('class'),
        obj = ul.children('.' + css),
        html = obj.html();
        
        
        /*Post current color to session var via ajax, select element before*/
        var params = {};//makeParams();
        params['topnavi'] = css;
        params['navi'] = 'deselect';
        params['subnavi'] = 'deselect';
        selectTopnavi(css); //select now
        selectNavi("deselect"); //select now
        selectSubnavi("deselect"); //select now
        
        saveVars(params);
       
      }
    );
    
    
    
    /*mainmenu*/
    $('.navi li a').live('click',
      function(e) {
        /* Init */
        var a = $(this),
        li = a.parent(),
        ul = li.parent(),
        css = li.attr('class'),
        obj = ul.children('.' + css),
        html = obj.html();
        
        /*Post current color to session var via ajax, select element before*/
        var params = makeParams();
        params['navi'] = css;
        params['subnavi'] = "a";
        params['topnavi'] = "deselect";
        selectNavi(css); //select now
        //selectSubnavi("a"); //select now
        clearTopnavi();
        
        
        saveVars(params);
       
      }
    );
    
    /*submenus in content*/
    $('.subnavi li a').click(
      function(e) {
        /* Init */
        var a = $(this),
        li = a.parent(),
        ul = li.parent(),
        css = li.attr('class'),
        obj = ul.children('.' + css),
        html = obj.html();
        
        
        /*Post current color to session var via ajax, select element before*/
        var params = {};//makeParams();
        params['subnavi'] = css;
        selectSubnavi(css); //select now
        
        saveVars(params);
       
      }
    );
    
    
    
    
    /* Weiterlesen auf */
    $('.open > a', '#cdc').live(
      'click',
      function(e) {
        var open = $(this).parent();
        
        open.hide();
        open.parent().children('.more').show();
        
        e.preventDefault();
      }
    );
    
    
    /* Weiterlesen zu */
    $('.close > a', '#cdc').live(
      'click',
      function(e) {
        var more = $(this).parent().parent();
        
        more.hide();
        more.parent().children('.open').show();
        
        e.preventDefault();
      }
    );
    
    $('li:not(.open) > div > a.close', '.expand').live(
      'click',
      function(e) {
        $('.open', $(this).parents('ul')).removeClass('open');
        $(this).parents('li').addClass('open');
        
        //$(this).parents('li').animate( { scrollTop: 0 }, 'slow' );
        $.scrollTo($(this).parents('li'), 800 );
        
        e.preventDefault();
      }
    );
    
    
    $('li.open a.close', '.expand').live(
      'click',
      function(e) {
        $(this).parents('li').removeClass('open');
        
        e.preventDefault();
      }
    );
    
    
    
    
    /**add PHPSESSID to post variables. fallback in case we cant use cookies*/
    function makeParams()
    {
      var params = {};
      var sname = $('#phpsessionname').data('val');
      var sid   = $('#phpsessionid').data('val');
      params[''+sname] = sid;
      return params;
    }
    
    /*returns a random integer between min and max (including)*/
    function getRandom(min, max)
    {
      if(min > max) return(-1);
      
      if( min == max ) return(min);
      
      return( min + parseInt( Math.random() * ( max-min+1 ) ) );
    }
    
    /* Next */
  }
);
    function saveVars(vars)
    {
       $.ajax({
          url: '/sessionStore.php',
          data: vars,
          async: false,
          success: function(data) {
           
          }
        });
    }

    /* Weiterlesen parsen */
    function make_more(html) {
      if($.isEmpty(html))
        return;
      
      if (html.indexOf('<!--') == -1) {
        return html;
      }
       
       return html.replace(
        '<!--',
        '<span class="more">'
      ).replace(
        '%% -->',
        '</a></span></span>'
      ).replace(
        ' %%',
        '<span class="red close">&raquo; <a href="#">'
      );
    }


    /* re selection (programmatically) */
    function selectColor(val)
    {
       if($.isEmpty(val))
         return;
      
       var li = $('#colors li.'+val); //<li class="val" />
       var ul = li.parent();
       var css = li.attr('class');
       var obj = $('.'+css, '#cdc');
       var html = obj.html();
       var body = $('body');
      
       ul.attr('class', css);
       body.attr('class', css);
          
       $('#cdc > li:visible').hide();
      
       obj.html(
         make_more(html)
       ).show();
    }

    function selectTopnavi(val)
    {
        if($.isEmpty(val))
          return;
      
        var li =  $('.topnavi li.'+val); //<a class="val" />
      
        clearTopnavi();
        
        /*switch active*/
        topnaviSelect(val);
    }

    function topnaviSelect(val)
    {
      var li =  $('.topnavi li.'+val);
      li.addClass("act");
      li.children('a:first').hide();
      li.children('span:first').show();
    }

    function clearTopnavi()
    {
      var actLi = $("ul.topnavi").children('[class*=act]');
      actLi.children('a:first').show();
      actLi.children('span:first').hide();
      actLi.removeClass("act");
    }

    function selectNavi(val)
    {
        if($.isEmpty(val))
          return;
        
        var li =  $('.navi li.'+val); //<a class="val" />
        var ul = li.parent();
       
        /* Bei Click alle anderen auf Ausgangsstatus setzen */
        ul.children().removeClass("act");
        ul.children().children().show();
        
        /*switch active*/
        li.toggleClass("act");
       
        if(li.hasClass("act"))
          li.children('a:first').hide();
        
    }

    function selectSubnavi(val)
    {
       if($.isEmpty(val))
         return;
      
       var li =  $('.subnavi li.'+val);
       var ul = li.parent();
       
       /* alle anderen auf Ausgangsstatus setzen */
       ul.children().removeClass("act");
       ul.children().children().show();
       
       li.toggleClass("act");
       
       if(li.hasClass("act"))
         li.children('a:first').hide();
     }

function isValidDate(txtDate) {
    var objDate,  // date object initialized from the txtDate string
        mSeconds, // txtDate in milliseconds
        day,      // day
        month,    // month
        year;     // year
    // date length should be 10 characters (no more no less)
    if (txtDate.length !== 10) {
        return false;
    }
    // third and sixth character should be '/'
    if (txtDate.substring(2, 3) !== '/' || txtDate.substring(5, 6) !== '/') {
        return false;
    }
    // extract month, day and year from the txtDate (expected format is mm/dd/yyyy)
    // subtraction will cast variables to integer implicitly (needed
    // for !== comparing)
    month = txtDate.substring(0, 2) - 1; // because months in JS start from 0
    day = txtDate.substring(3, 5) - 0;
    year = txtDate.substring(6, 10) - 0;
    // test year range
    if (year < 1000 || year > 3000) {
        return false;
    }
    // convert txtDate to milliseconds
    mSeconds = (new Date(year, month, day)).getTime();
    // initialize Date() object from calculated milliseconds
    objDate = new Date();
    objDate.setTime(mSeconds);
    // compare input date and parts from Date() object
    // if difference exists then date isn't valid
    if (objDate.getFullYear() !== year ||
        objDate.getMonth() !== month ||
        objDate.getDate() !== day) {
        return false;
    }
    // otherwise return true
    return true;
}
 

