$.litd = {};
(function( $ ){
 $.litd.get = function(element){
  var ret = {};
  switch(element){
   case "mask":{
    ret = $("#litd_mask");
    break;
   }
   case "overlay":{
    ret = $("#litdOverlayWrapper");
    break;
   }
   case "overlayContent":{
    ret = $("#litdOverlayContent");
    break;
   }
   case "loading":{
    ret = $("#litdLoading");
    break;
   }
   case "overlayTitle": {
     ret = $(".litd_ovmenuTitle");
   }
   default:
    break;
  }
  return ret;
 }
 $.litd.set = function(element, type, url_inhalt, callback){
  switch(element){
   case "overlay":{
    if(type == "ajax"){
     $.litd.get("overlayContent").html("").append("<p id='litdLoading'>LOADING<p>");
     $.litd.get("overlayContent").load(url_inhalt, callback);
    }else if(type == "html"){
     $.litd.get("overlayContent").html(url_inhalt);
    }else
     return;

    break;
   }
   default:
    break;
  }
 }

 var methods = {
  init : function( options ) {
   return this.each(function(){

    });
  },
  mask : function( options ) {
   /*
    * Typen: element:default - Maskiert das Element
    *        fullscreen - Maskiert den Bildschirm
    *        loading - Maskiert das gewählte Element mit einer Loading animation
    */
   var defaultParams = {
    type:"element",
    color:"#ccc",
    loadingAnimation:"/images/loading.gif",
    opacity:0.8,
    escClose:true,
    delay:2000,
    callback:function(data){
     return true;
    }
   }
   var opt = options || defaultParams;
   var $this = this;
   var type = opt.type || defaultParams.type;
   var maskColor = opt.color || defaultParams.color;
   var callback = opt.callback || defaultParams.callback;
   var loadingAnimation = opt.loadingAnimation || defaultParams.loadingAnimation;
   var opacity = opt.opacity || defaultParams.opacity;
   var escClose = opt.escClose || defaultParams.escClose;
   var maskWidth = 0;
   var maskHeight = 0;
   var pos = {};
   var onBeforeLoad = function(){

    if($.litd.get("mask").size()){
     $.litd.get("mask").litd("close");
     $.litd.get("overlay").litd("close");
    }

    if(escClose){
     $(document).bind("keyup", function(e){
      if(e.keyCode == "27"){
       $.litd.get("mask").litd("close");
       $.litd.get("overlay").litd("close");
      }
     });
    }
    switch(type){
     case "element":{
      maskWidth = $this.width();
      maskHeight = $this.height();
      pos = $this.position();

      break;
     }
     case "loading":{
      maskWidth = $this.width();
      maskHeight = $this.height();
      pos = $this.position();
      $.litd.get("mask").html("").append("<p id='litdLoading'>LOADING<p>");
     }
     default:
      break;
    }

   };

   onBeforeLoad();

   if(opt.onBeforeLoad != undefined){
    opt.onBeforeLoad.apply(this);
   }

   var onLoad = function(){
    var maskElement = $('<div id="litd_mask" class="hidden" />');

    maskElement.css({
     position:"absolute",
     top:pos.top,
     left:pos.left,
     //"z-index":$this.css("z-index")+999,
     "z-index":1000,
     width:maskWidth,
     height:maskHeight,
     "background-color":maskColor,
     opacity:opacity
    });
    if(!$("#litd_mask").size()){
     $this.append(maskElement);
    }
   return maskElement;
   }
   return onLoad();

  },
  overlay : function( options ) {
   var defaultParams = {
    close:false,
    template:'<div id="litdOverlayWrapper"><div class="litd_ovstyle" style="display:block;"><div id="litdOverlayContent"></div><div id="litd_ovmenu" style="display:block;position:relative; height:30px; background-color:#fff;"><p class="litd_ovmenuTitle"></p><a id="litdOverlayClose" class="close"></a></div></div></div>',
    type:"html",
    content:"<p></p>",
    url:"",
    top:0,
    left:0,
    callback:function(data){
     $.litd.get("loading").litd("close");
    }
   }
   var opt = options || defaultParams;
   var $this = this;   // mask oder das angegebene Element

   $.extend(defaultParams, {
    width:$.litd.get("mask").width()-10,
    height:$.litd.get("mask").height()-10
   });



   var template = opt.template || defaultParams.template;
   var ovContent = opt.content || defaultParams.content;
   var ovWidth = opt.width || defaultParams.width;
   var ovHeight = opt.height || defaultParams.height;
   var ovTop = opt.top || defaultParams.top;
   var ovLeft = opt.left || defaultParams.left;
   var ajaxURL = opt.url || defaultParams.url;
   var ajaxCallback = opt.callback || defaultParams.callback;
   var outerContainerWidth = 0;
   var outerContainerHeight = 0;
   var contentType = opt.type || defaultParams.type;

   var onBeforeLoad = function(){
    outerContainerWidth = $.litd.get("mask").width();
    outerContainerHeight =  $.litd.get("mask").height();

    $("body").append(template);

    $.litd.get("overlay").find(".litd_ovstyle").css({ width:ovWidth});

    $.litd.get("overlay").css({
     position:"absolute",
     top:ovTop,
     left:ovLeft,
     "z-index":$.litd.get("mask").css("z-index")+9999,
     width:ovWidth,
     height:ovHeight,
     display:"block",
     "margin-left":(outerContainerWidth-ovWidth)/2,
     "margin-top":(outerContainerHeight-ovHeight)/2
    });

    if(contentType == "html"){
     $.litd.set("overlay","html",ovContent);
    }else if(contentType == "ajax"){
     $.litd.set("overlay", "ajax", ajaxURL, ajaxCallback);
    }else if(contentType == "object"){

     if($("#"+ovContent).size()){
      var objHtml = document.getElementById(ovContent).cloneNode(true).innerHTML
       $.litd.set("overlay","html",objHtml);
     }
    }

    $("#litdOverlayClose").bind("click", function(e){
     $.litd.get("overlay").litd("close");
     $.litd.get("mask").litd("close");
    });


   };

   onBeforeLoad();

   if(opt.onBeforeLoad != undefined){
    opt.onBeforeLoad.apply(this);
   }

   var onLoad = function(){
    if(contentType == "html"){
     $.litd.get("mask").css("visibility", "visible");
     $.litd.get("overlay").css("visibility", "visible");
    }
    return $.litd.get("overlay");
   }
   return onLoad();
  },
  get:function(options){
   return $.litd.get(options);
  },
  close:function(){
   this.remove();
  }
 };

 $.fn.litd = function( method) {
  if ( methods[method] && method != "get") {
   return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
  }else if(method == "get") {
   return methods.get.apply(this,Array.prototype.slice.call( arguments, 1 ));
  }else{
   console.log("Methode gibts nicht");
  }
 };
})( jQuery );

function Cuepoint(name){
 this.name = name;
 this.time = 0;
 this.event = "fadein";
 this.obj = ".event";
 this.setTime = function(time){
  this.time = time;
 };
 this.setEvent = function(event){
  this.event = event;
 };
 this.setObj = function(obj){
  this.obj = obj;
 };
}

function Folie(nr, zimmer){
 this.index = nr;
 this.title = "";
 this.zimmer = "";
 this.maxFolien = 0;
 this.footerText = "";
 this.hasMP3 = false;
 this.mp3 = "";
 this.mp3Duration = 0;
 this.isIndex = function(){
  if(this.index == 0)
   return true;

  return false;
 };
 this.data = "";
 this.init = function(data){
  this.data = $(data);
  var _self = this;
  var folien = -1;
  $($(this.data).find("zimmer folie")).each(function(ind, ele ){
   folien++ ;
   var aktFolie = parseInt($(ele).find("> index").text());
   if(aktFolie == _self.index){
    if($(ele).find("> mp3").text()){
     _self.hasMP3 = true;
     _self.mp3 = $(ele).find("> mp3").text();
     _self.mp3Duration = $(ele).find("> duration").text();
    }
    _self.zimmer = $(ele).find("> zimmer").text();
    _self.title = $(ele).find("> name").text();
    _self.footerText = $(ele).find("footerText").text();
   }
  });
  _self.maxFolien = folien;
  
  return this;
 };
 this.next = function(){
  if((this.index+1)<= this.maxFolien){
   return true;
  }
  return false;
 };
 this.prev = function(){
  if((this.index-1) > 0){
   return true;
  }
  return false;
 };
}

function Haus(name, xmlPfad) {
 this.folie = new Object();
 this.name = name;
 this.xmlPfad = xmlPfad;
 this.xml = "";
 this.isInit = false;
 this.zimmer = "";
 this.player = {};
 this.isApple = Info.isApple;
 this.updateEndContent = function(){
  $(".event").show();
 },
 this.updateContent = function(time){
  var eventObj = $(".hausContent").find(".event");
  $(eventObj).each(function(index, element){
   var _self = $(this);
   var cssClasses = _self.attr("class").split(" ");  
   $(cssClasses).each(function(idx, ele){
    if(ele.indexOf("time-") != -1){
     var cueTime = parseInt(ele.substr(ele.indexOf("-")+1, ele.length));  
     if(time>=cueTime){
      _self.fadeIn("fast");
     }else{
      _self.fadeOut("fast");
     }
    }
   });
  });
 };
 this.cuepoints = [];
 this.init = function (){
  var _this = this;
  DEBUG.addDebug("Inizialisiere Haus: " + name);
  DEBUG.addDebug("Player init");
  this.player = $f("player","/swf/flowplayer.swf",{
   onError:function(a,b){
    return true;
   },
   debug: false,
   key: '#$c4b65579c664bc104c8',
   clip:{
    autoPlay: true,
    autoBuffering:true,
    baseUrl: '/litd/apps/rls/data/sound/',
    onFinish:function(clip){
     _this.updateEndContent();
     this.pause();
    },
    onMetaData :function(clip){
     clip.duration = clip.laenge;
     clip.fullDuration = clip.laenge;
     clip.onCuepoint(_this.cuepoints, function(clip, p){
      var time = p.time;
      if(time  == undefined)
       time = this.getTime()*1000;
      _this.updateContent(time);
     });
    },
    onSeek:function(clip){
     _this.updateContent(this.getTime()*1000);
    }
   },
   playlist: [
   {
    url: '/images/shim.gif'+sidaddq
   }
   ],
   plugins: {
    controls: null
   }
  }).controls("controls",{
   template:'<a class="home handler" rel="0">home</a><a class="prev">prev</a><a class="next">next</a><div class="steuer"><a class="play">play</a>'+'<div class="track">'+'<div class="buffer"></div>'+'<div class="progress"></div>'+'<div class="playhead"></div>'+'<div class="step">Folie: <span id="aktFolie"></span>&nbsp;von <span id="maxFolie"></span></div><div class="time"></div>'+'</div></div>'+'<a class="mute">mute</a>'
  }).ipad();

 };
 this.unload = function(){
  this.player.unload();
 };
 this.getRandomString = function(length) {
    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('');

    if (! length) {
        length = Math.floor(Math.random() * chars.length);
    }

    var str = '';
    for (var i = 0; i < length; i++) {
        str += chars[Math.floor(Math.random() * chars.length)];
    }
    return str;
};
 this.loadXml = function(){
  DEBUG.addDebug("Lade XML");
  var _self = this;
  $.holdReady(true);
  $.get(this.xmlPfad+this.name+".xml"+sidaddq, function(xml){
   _self.isInit = true;
   _self.xml = xml;

   if($.holdReady()){    
    $.holdReady(false);
   }
  });
 };
 this.setZimmer = function(zimmer){
  DEBUG.addDebug("Setzte Zimmer auf "+zimmer);
  this.zimmer = zimmer;
 };
 this.printBread = function(){
  var bread = "<span>"+this.folie.title+"</span><img src='/litd/apps/rls/data/img/bread-sep.gif' width='15' height='15'><span style='font-weight:bold; padding-left:5px;'>"+this.zimmer+"  </span>";
  $("#hausBreadcrumb").html(bread);
 };
 this.loadFolie = function(folieNr){
  var folie = new Folie(parseInt(folieNr), this.zimmer);
  this.folie = folie.init(this.xml);
  this.setZimmer(folie.zimmer);
  var rand = this.getRandomString(5);
  
  var _this = this;
  $("#hausContent").load(this.xmlPfad+"folien/folie"+folie.index+".html"+sidaddq+"&rand="+rand, function(data){
   _this.update();
   $(this).hide().fadeIn("slow");
   var eventObj = $($(data).get(0)).find(".event");
   var points = [];
   var effekt = "fadein";
   
   $(eventObj).each(function(idx, ele){
    var _this = this;
    var point = new Cuepoint(idx);
    var cssClasses = $(ele).attr("class").split(" ");
    $(cssClasses).each(function(index, element){
     if(element.indexOf("time-") != -1){ 
      point.setTime(parseInt(element.substr(element.indexOf("-")+1, element.length)));
     }
     if(element.indexOf("effekt-") != -1){
      point.setEvent(element.substr(element.indexOf("-")+1, element.length));
      point.setObj("#"+$(_this).attr("id"));
     }
    });
    points.push(point);
   });

   _this.cuepoints = points;
  });
 };
 this.toIndex = function(){
  DEBUG.addDebug("Animation des Layouts (Haus)");
  this.zimmer = "haus";
  $("#hausNavi").css("visibility","hidden");
  $("#controlNavi.ipad").css("visibility","hidden");
  $("#hausName").animate({
   left:"150px"
  });
  $("#hausImg img").css("display", "none").animate({
   opacity:0,
   width:"0px",
   height:"0px"
  });
 };
 this.toFolie = function(){
  DEBUG.addDebug("Animation des Layouts (Folie)");
  /*if(Info.isApple){
   $("#hausNavi").css("visibility", "hidden");
  }else*/
   $("#hausNavi").css("visibility","visible");
  
  if(!this.folie.hasMP3){
   $("div.steuer").hide();
   //$(".controls").width(64).css("left", "170px");
   $(".controls").width(64);
  }else{
   $("div.steuer").show();
   //$(".controls").width(239).css("left", "0px");
   $(".controls").width(239);
  }

  $("#hausName").animate({
   left:"300px"
  });
  $("#hausImg img").css("display", "block").animate({
   opacity:1,
   width:"148px",
   height:"90px"
  });
 };
 this.getMaxFolien = function(){
  DEBUG.addDebug("Max Folien: "+this.folie.maxFolien);
  return this.folie.maxFolien;
 };
 this.update = function(){
  DEBUG.addDebug("Update Folie nach dem Laden der Folie");
  $("#hausFooterText p.white").html(this.folie.footerText);
  $("#aktFolie").html(this.folie.index);
  $("#maxFolie").html(this.getMaxFolien());
  
  //Cufon.refresh();
  if(!this.folie.isIndex()){
   this.toFolie();
   var next = "";
   var prev = "";

   if(this.folie.next()){
    next = this.folie.index+1;
    $(".next").removeClass("disable").addClass("handler").attr("rel",next);
   }else
    $(".next").addClass("disable");

   if(this.folie.prev()){
    prev = this.folie.index-1;
    $(".prev").removeClass("disable").addClass("handler").attr("rel",prev);
   }else
    $(".prev").addClass("disable");
  
  }
  else{
   this.toIndex();
  }

 }
}
