(function($){

    var conf = {
        useClass : false,
        urlBase : [],
        urlTarget : 'external.html',
        wrapperSelector : '#head_wrapper',
        iFrameSelector : '#externalLink'
    };

    var elements = {
        backlink : $(),
        links : []
    }

    /**
     * Zurück Link um zu der Seite zurück zu kehren von der man kahm.
     */
    function bindBackLink() {
      elements.backlink.click(function() {
        history.back();
        return false;
      });
    }

    /**
     * iFrame Manipulieren
     */
    function manipulateIFrame(c){
      //höhe des iFrames festlegen
      var kkWrapperHeight;
      var windowHeight;
      kkWrapperHeight = $(c.wrapperSelector).outerHeight(true);
      windowHeight = $(window).height();
      var frameHeight = parseInt(windowHeight-kkWrapperHeight);

      //aufgerufene externe Url in iFrame src laden
      var actualUrl;
      var error;
      var externalUrl;
      var urlPos;
      actualUrl = window.location.href;
      if (actualUrl.indexOf('url=') != -1) {
        //externe Url aus Url holen
        urlPos = actualUrl.indexOf('url=')+4;
        externalUrl = actualUrl.substr(urlPos);
        if (externalUrl != '') {
          if (externalUrl.indexOf('http://') == -1) {
            externalUrl = 'http://'+externalUrl;
          }
          //Url in iFrame packen
          $(c.iFrameSelector).attr('src', externalUrl).css('height', frameHeight);
        }
        else {
          error = 'keine Url mitgegeben';
        }
      }
      else {
        error = 'kein Url Parameter mitgegeben';
      }
    }

    $.fn.externalLink = function(opts)
    {
        $.extend(true, conf, opts);

        this.each(function(){
            var link = $(this);
            elements.links.push(link);
            link.click(function(e){
                e.preventDefault();
                window.location.href = conf.urlTarget + '&url='+ link.attr('href');
            });
        });
    }

    $.fn.externlBackLink = function()
    {
        elements.backlink = this;
        bindBackLink();
    }

    $.iFramePluginTargetPage = function(opts)
    {
        $.extend(true, conf, opts);
        manipulateIFrame(conf);
    }

    $.iFramePlugin = function(opts)
    {
        var config;
        if(!conf)
        {
            $.extend(true, conf, opts);
            config = conf;
        }
        else
        {
            $.extend(true, config, conf, opts);
        }

        /**
         * Catch all externals
         */
        $('a:not(#backLink)').click(function() {
            var calledUrl;
            calledUrl = $(this).attr('href'); //aufgerufene Url merken
            for (var index in config.urlBase) {
              if (calledUrl.indexOf(config.urlBase[index]) == -1) {
                window.location.href = 'external.html?url='+calledUrl; //iFrame-Seite aufrufen
                return false;
              };
            };
          });
    }
})(jQuery);
