var recalibrateDimensions = null;
$(document)
    .ready(
        function() {
          /*
          $('.timeTableContainer .hour')
              .click(
                  function() {
                    var identifier = $(this).find('.description .identifier')
                        .text();
                    var clickObjectIsSelected = $(
                        '.timeTableContainer .hourSelected').eq(0).find(
                        '.description .identifier').text() == identifier;

                    if ($('.timeTableContainer .hour').hasClass('hourSelected')) {
                      $('.timeTableContainer .hour')
                          .removeClass('hourSelected');
                    }

                    if (!clickObjectIsSelected) {
                      $('.timeTableContainer .hour')
                          .each(
                              function() {
                                $(this).removeClass('hourSelected');
                                if ($(this).find('.description .identifier')
                                    .text() == identifier) {
                                  $(this).addClass('hourSelected');
                                }
                              });
                    }

                    return false;
                  });
          */
          $('.timeTableContainer .hour .description').click(function() {
            var identifier = $(this).find('.identifier').text();
            var thisUnitIsSelected = false;
            $('.timeTableContainer .hour .descriptionSelected .identifier').each(function(){
              if ($(this).text() == identifier) {
                thisUnitIsSelected = true;
              }
            });

            if (thisUnitIsSelected) {
              $('.timeTableContainer .hour .description').each(function() {
                if ($(this).find('.identifier').text() == identifier) {
                  $(this).removeClass('descriptionSelected');
                }
              });
            } else {
              $('.timeTableContainer .hour .description').each(function() {
                //$(this).removeClass('descriptionSelected');
                if ($(this).find('.identifier').text() == identifier) {
                  $(this).addClass('descriptionSelected');
                }
              });
            }

            return false;
          });

          $('.settingsHeader li, .settingsFooter li')
              .click(
                  function() {
                    if ($(this).hasClass('settingsEnabled')
                        || $(this).hasClass('settingsDisabled')) {
                      if ($('.settings').is(':visible')) {
                        $(
                            '.settingsHeader .settingsEnabled, .settingsFooter .settingsEnabled')
                            .hide();
                        $('.settingsHeader .settingsDisabled').show();
                        $('.settings').slideUp('slow');
                      } else {
                        $('.settingsHeader .settingsDisabled').hide();
                        $(
                            '.settingsHeader .settingsEnabled, .settingsFooter .settingsEnabled')
                            .css('display', 'block').show();
                        $('.settings').slideDown('slow');
                      }
                    }
                    if ($(this).hasClass('detailsCollapsed')
                        || $(this).hasClass('detailsHidden')) {
                      if ($('.timeTableContainer .hour .title').is(':visible')) {
                        $(
                            '.timeTableContainer .hour .title, .timeTableContainer .hour .owner')
                            .hide();
                        $('.settingsHeader .detailsCollapsed').hide();
                        $('.settingsHeader .detailsHidden').css('display',
                            'block').show();
                        $('.timeTableContainer .hour .description').each(
                            function() {
                              $(this).attr('title',
                                  $(this).find('.title').text());
                            });
                      } else {
                        $(
                            '.timeTableContainer .hour .title, .timeTableContainer .hour .owner')
                            .show();
                        $('.settingsHeader .detailsCollapsed').show();
                        $('.settingsHeader .detailsHidden').hide();
                        $('.timeTableContainer .hour .description').each(
                            function() {
                              $(this).attr('title', '');
                            });
                      }
                    }
                  }).css( {
                cursor :"pointer"
              });

          $('.settings form fieldset input:checkbox').not(
              '*[@name = "allChanger"]').change( function() {
            showWaitDialog(false);
            var fach = $(this).val();
            var show = $(this).is(':checked');
            $('.timeTableContainer .identifier').each( function() {
              if ($(this).text() == fach) {
                if (!show) {
                  $(this).parents('.description').hide();
                } else {
                  $(this).parents('.description').show();
                }
              }
            });
            recalibrateDimensions();
            hideWaitDialog(false);
          });
          $('.timeTableContainer td .description').each( function() {
            this.originalHeight = $(this).height();
          });

          $('.settings input[@name = "allChanger"]').click(
              function() {
                var e = this;
                showWaitDialog(true);
                $(this).parents('fieldset')
                    .find('input[@name != "allChanger"]').each( function() {
                      if (!$(e).is(':checked')) {
                        $(this).removeAttr('checked');
                      } else {
                        $(this).attr('checked', true);
                      }
                      $(this).change();
                    });
                hideWaitDialog(true);
              });

          recalibrateDimensions = function() {
            if ($('.description .owner:visible').length == 0) {
              var innerRows = 0;
              var thisInnerRows = 0;
              $('.timeTableContainer tr').each(
                  function() {
                    thisInnerRows = $(this).children('td').find(
                        '.description:visible').length;
                    if (thisInnerRows > innerRows) {
                      innerRows = thisInnerRows;
                    }

                    $(this).children('td').css( {
                      height :innerRows * 15
                    });
                    $(this).find('.description').css( {
                      height :'auto'
                    });
                  });
            }
          };

          var showWaitDialog = function(force) {
            if (typeof $('#overlay').get(0).outerSight == 'undefined') {
              $('#overlay').get(0).outerSight = false;
            }
            force = typeof force != 'undefined' && force;
            if (force) {
              $('#overlay').get(0).outerSight = true;
            }
            $('#overlay .background').css( {
              zIndex :3000,
              backgroundColor :'#000000',
              opacity :0.8,
              height :'100%',
              width :'100%',
              position :'absolute',
              top :0,
              left :0,
              overflow :'hidden'
            });
            $('#overlay .elements').css( {
              position :'absolute',
              left :($('body').width() / 2) - 200,
              width :"400px",
              top :"300px",
              zIndex :3001,
              backgroundColor :"#dddddd",
              padding :"20px"
            });
            if (force || !$('#overlay').get(0).outerSight) {
              $('#overlay').fadeIn();
            }
          };
          var hideWaitDialog = function(force) {
            if (typeof $('#overlay').get(0).outerSight == 'undefined') {
              $('#overlay').get(0).outerSight = false;
            }
            force = typeof force != 'undefined' && force;
            if (force) {
              $('#overlay').get(0).outerSight = true;
            }
            if (force || !$('#overlay').get(0).outerSight) {
              $('#overlay').get(0).outerSight = false;
              $('#overlay').fadeOut();
            }
          };

          function getParams() {
            var result = {};
            var params = [];
            var temp = [];
            if (location.search.indexOf('?params=') == 0) {
              var urlpart = location.search.substring(8);
              params = unescape(location.search.substring(8)).split(',');
              for (i in params) {
                temp = params[i].split('=');
                if (temp && temp.length == 2) {
                  result[temp[0]] = temp[1];
                }
              }
            }
            return result;
          }

          function getCurrentUrl() {
            var e = /((http|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+\.[^#?\s]+)(#[\w\-]+)?/;
            var result = location.href.match(e);
            var url = null;
            if (result != null && result[0]) {
              url = result[0];
            } else {
              url = location.href;
            }

            var params = [];
            var keys = {};
            var key = null;
            $('.timeTableContainer .description .identifier').each( function() {
              key = $(this).text();
              if (typeof keys[key] == 'undefined') {
                keys[key] = $(this).parent().is(':visible');
              }
            });

            for (key in keys) {
              params.push(key + '=' + (keys[key] ? 'yes' : 'no'));
            }

            // additional params
            params.push('cache=yes');
            params.push('version=' + pageParams.currentVersionHash);

            url = url + '?params=' + escape(params.join(','));

            return url;
          }

          function setSettings(params) {
            if (typeof params == 'object') {
              var key, val, elemChecked;
              showWaitDialog(true);
              for (key in params) {
                if (key == 'version') {
                  pageParams.linkedVersionHash = params[key];
                } else {
                  val = (params[key] == 'yes');
                  $('.settings input:checkbox').each( function() {
                    if ($(this).val() == key) {
                      elemChecked = $(this).is(':checked');
                      if ((elemChecked && !val) || (!elemChecked && val)) {
                        // checked cant be changed, so remove it
                      if (elemChecked) {
                        $(this).removeAttr('checked');
                      } else {
                        $(this).attr('checked', true);
                      }
                      $(this).change();
                    }
                  }
                } );
                }
              }
              hideWaitDialog(true);
            }
          }

          $('.actionLoadParams').click( function() {
            setSettings(getParams());
            return false;
          });

          $('.linkurl').focus( function() {
            $('#linkurl').val(getCurrentUrl());
          });

          function updateLink() {
            var newLink = getCurrentUrl();

            var data = {};
            var key = pageParams.tinyurl.paramname + "["
                + pageParams.tinyurl.param + "]";
            data[key] = newLink;

            $.getJSON(pageParams.tinyurl.url, data, function(data) {
              if (data.response && data.response.success
                  && data.response.success == 'yes' && data.response.value) {
                newLink = data.response.value;
              }
              $('#linkurl').val(newLink);
            });
          }

          $('.actionGetUrl').click( function() {
            updateLink();
            return false;
          });

          $('.actionSaveCookie').click(function(){
            $.cookie('my_own_settings', getCurrentUrl(), {domain: 'knallisworld.de'});
            return false;
          });

          $('.actionLoadCookie').click(function(){
            if ($.cookie('my_own_settings') != null) {
              location.href = $.cookie('my_own_settings');
            } else {
              alert('Invalid cookie - destroyed.');
              $.cookie('my_own_settings', null, {domain: 'knallisworld.de'});
              $('.actionLoadCookie').attr('disabled', 'disabled');
            }
            return false;
          });

          if ($.cookie('my_own_settings') != null) {
            $('.actionLoadCookie').removeAttr('disabled');
          }

          // INIT PROCRESS - on load
          $('.actionLoadParams').click();
          recalibrateDimensions();

          if (pageParams.linkedVersionHash && pageParams.currentVersionHash != pageParams.linkedVersionHash) {
            $('h1.title .noticeNewVersion').show();
          }
        });
