var jXML = {
   getAttribute: function (xml, nodes) {
      var response = {};
      for (var node in nodes) {
         if (nodes[node][2] === null) {
            response[node] = $(xml).find(nodes[node][0] + "[@" + nodes[node][1] + "]");
         } else {
            response[node] = $(xml).find(nodes[node][0] + "[@" + nodes[node][1] + " = " + nodes[node][2] + "]");
         }
      }
      return response;
   }
};

var Engine = {
   pages: ["welcome", "leistungen", "referenzen", "agentur", "news", "jobs", "kontakt", "glossar", "impressumdisclaimer"],
   loadedModules: [],
	modules: [],
   module: "",
   uriParams: [],
   uri: "",
   timeoutvar1: null,
   timeoutvar2: null,
   pageCash: {},
   instance: false,

   updateTitle: function() {
      var titleline = ""; 
      if (this.uriParams && this.uriParams.pagename)  {
         titleline = this.uriParams.pagename.substr(0,1).toUpperCase() + this.uriParams.pagename.substr(1,this.uriParams.pagename.length) + ' - ';
      }
      else if (this.module == "Reference")  {
         titleline = "Referenz - ";
      }
      else if (this.module == "Benefits")  {
         titleline = "Leistungen - ";
      }
      titleline += "ahhh kah! Agentur für Digitale Kommunikation";
      document.title =  titleline;
   },
   
   loadTemplate: function (page) {
      try{
         var pageajax = $.ajax({
            url: page + ".php",
            cache: false,
            success: function (data){
               Engine.pageCash[page] = data;
            }
         });
      }catch(e){
         alert(e);
      }
   },
   
   fillPageCash: function () {
      var i;
      for (i = 0; i<Engine.pages.length; i++) { 
         if (Engine.pageCash[Engine.pages[i]] === undefined) {
            this.loadTemplate(Engine.pages[i]);
         }
      }
   },
     
   init: function () {
      this.instance = true;
      Page.init();
      Reference.init();
      Benefits.init();
      Search.init();
      Contact.init();
      this.module = "Page";
      this.uri = "welcome";
      
      if ((""+window.location).indexOf('#') === -1) { 
         window.location.hash = "#Page/pagename=welcome";
      }
      
      // Falls Historymodul nicht aktiv ist
      if (!$.historyLoad) {
         this.updateURI();
         this.showLoader("loading ...");
         this.timeoutvar1 = setTimeout(Engine.hideLoader,1000);
         
         if ((""+window.location).indexOf('#') === -1) { 
            this.loadPage("#Page/pagename=welcome");
         }
         else { this.loadPage(""+window.location); }
      }
   },
   
   showLoader: function (message) {
      $('#loader').remove();
      var body = document.getElementsByTagName("body")[0];
		var div = document.createElement("div");

      div.setAttribute("id","loader");
      $(div).hide();
		body.appendChild(div);

      if (message === "loading ...") {
         //Falls Nachricht mit ausgegeben werden soll: <br/>"+message;
         div.innerHTML = "<img src=\"images/ajax_loader.gif\" />";
      }
      else { div.innerHTML = message; }
      //$(div).fadeIn('fast');
      $(div).show();
   },
   
   hideLoader: function() {
      //$('#loader').fadeOut('slow', function() { $(this).remove(); });
      $('#loader').hide();
   },
   
   updateURI: function(url) {
      if (!url) {
         url = "" + window.location;
      }
      else {
         window.location.hash = url;
      }
      
		var hashIndex = url.indexOf('#');
      if (hashIndex != -1 && url.length > 5) {
   		var uri_h = url.substring(hashIndex + 1);
   		var moduleLength;
   		if(uri_h.indexOf('/') > 0) {
   			moduleLength = uri_h.indexOf('/');
         }
   		else {
   			moduleLength = uri_h.length;
         }
   		this.module = uri_h.substring(0,moduleLength);
         
         var params = uri_h.substring(uri_h.indexOf('/')+1);
        
         if (params.length < 3 || params.indexOf('=') ==  -1) { return false; }
         var hash_temp = params.split('&');
         this.uriParams = [];
         for (var i=0; i<hash_temp.length; i++) {
            var pair = hash_temp[i];
            if (pair.indexOf('=') == -1) { return false; }
            var help = pair.split('=');
            if (help.length != 2) { return false; }
            this.uriParams[''+ help[0]] = help[1];
         }
         
         if (this.uriParams.pagename !== undefined) {
            this.uri = this.uriParams.pagename;
         }
         else {
            this.uri = "";
         }
      }
      else {
         var pageSearch = /\/(\w*).php/;
         var searchResult = pageSearch.exec(window.location.href);
         if (searchResult && searchResult.length && searchResult[0] != '/index.php') {
            var pagename = searchResult[0].substring(1,searchResult[0].length-4);
            this.uriParams.pagename = pagename;
            this.uriParams.id = 1;
            this.uri = pagename;
            if (this.uri == "referenzen") { this.module = "Reference"; }
         }
      }
   },
   
   loadPage: function(url){
      clearTimeout(this.timeoutvar2);      
		Engine.showLoader("loading ...");
      Engine.updateURI(url);
     
      if (this.uriParams !== "" && Engine.modules[this.module]) {
         Engine.modules[this.module].execute();
      }
      else {
         window.location.hash = "";
      }

      //this.updateTitle();
      return false;
	},
 
   setContent: function(content){
      if (this.uri) { this.highlightNavi(this.uri);}
      else if (this.module == "Reference") { this.highlightNavi("referenzen"); }
      else if (this.module == "Benefits") { this.highlightNavi("leistungen"); }
      $('#main').html(content);
      tb_start();
      $(document).SearchHighlight({exact:"whole",style_name_suffix:false});
      if (Engine.uriParams.highlight) { jQuery(document).SearchHighlight({exact:"partial",style_name_suffix:false,keys:Engine.uriParams.highlight, highlight: "#main"}); }
      Engine.updateTitle();
	},
   showError: function(message) {
      Engine.showLoader(message);
	},
   
   highlightNavi: function(activeLink) {
      $("#meta a").removeClass();
      $("#navi li a").removeClass();
      var linkname = "#link_" + activeLink;
      $(linkname).addClass("active");
   }
};

var Page = {
	init: function(){
		Engine.modules.Page = Page;
		Engine.loadedModules.Page = true;
	},
	
	execute: function(){
      if (!Engine.uri && (!Engine.uriParams || (Engine.uriParams && !Engine.uriParams.pagename))) {
         clearTimeout(Engine.timeoutvar1);
         Engine.showError("Es wurde keine Seite ausgewählt.");
         return;
      }
     
      var pagename = Engine.uri || Engine.uriParams.pagename;
      if (pagename === "") { 
         Engine.showLoader('Keine Seite angegeben');
         return; 
      }
      
		if (Engine.pageCash[pagename] === undefined) {
         Engine.pageCash[pagename] = "1";
         try{
            $.ajax({
               url: pagename + ".php",
               cache: false,
               success: function(data){
                  Engine.setContent(data);
                  Engine.pageCash[pagename] = data;
                  Engine.hideLoader();
               },
               error: function(e) {
                  Engine.showError("Die Seite konnte nicht geladen werden.");
               }
            });
   		}catch(e){
   			alert('Page.execute: '+e);
   		}
      }
      else if (Engine.pageCash[pagename] != "1") {
         Engine.setContent(Engine.pageCash[pagename]);
         Engine.hideLoader();
      }
	}
   
};

var Reference = {
   references: "",
   archive: "",
   branches: "",
   imagePath:"",
   showScroller: "",
   sliderContent: "",
   sliderAmount: "",
   changeLink:true, // Bugfix für Firefox: Flackern/Neuladen der Flashreferenzen verhindern
   
	init: function(){
		Engine.modules.Reference = Reference;
		Engine.loadedModules.Reference = true;
	},
	
   setReferenceContent: function(content){
      if ($(content).attr("name") !== undefined) { $('#company_output #reference_title').html($(content).attr("name")); }
      else { $('#company_output #reference_title').html(""); }
      
      if ($(content).attr("industry") !== undefined && Reference.branches !== "") {
         var industry = $(content).attr("industry");
         var attribute = jXML.getAttribute(Reference.branches,{"MP":["mP","ref",industry]});
         if (attribute.MP && attribute.MP.attr("bez")) {
            $('#company_output #branche_projekttyp').html(attribute.MP.attr("bez"));
         }
      }
      else { $('#company_output #branche_projekttyp').html(""); }
      
      $('#company_output #description').html("");
      if ($(content).text() !== undefined) { 
         if ($(content).attr("samplePic") !== undefined ) {
            $('#company_output #description').append("<img src=" + Reference.imagePath + $(content).attr("samplePic") + " id=\"company_screenshot\" class=\"customer_img\" alt=\"\"/>");
         }
         $('#company_output #description').append($(content).text());
      }
      
      if ($(content).attr("projectLink") !== undefined) {
         $('#company_output #url').attr("href",$(content).attr("projectLink"));
         $('#company_output #url').html($(content).attr("projectLink"));
         $('#company_output #url').show();
      }
      else { $('#company_output #url').hide(); }
     
      $('#company_output').css("display","block");
      jQuery(document).SearchHighlight({exact:"partial",style_name_suffix:false,keys:Engine.uriParams.highlight, highlight: "#main"});
	},
   
	execute: function(){
      if (!Reference.branches) {
         try{
            $.ajax({
               url: "resources/ddMenu1.xml",
               cache: false,
               dataType : 'xml',
               success: function(data){
                  Reference.branches = data;
               },
               error: function(e) {
                  clearTimeout(Engine.timeoutvar1);
                  Engine.showError("Die Branchen konnten nicht geladen werden.");
               }
            });
   		}catch(e){
   			alert('Reference.execute: '+e);
   		}
      }
      if (!Engine.pageCash.referenzen) {
         try{
            $.ajax({
               url: "referenzen.php",
               cache: false,
               success: function(data){
                  Engine.setContent(data);
                  Engine.pageCash.referenzen = data;
                  Engine.hideLoader();
               },
               error: function(e) {
                  Engine.showError("Die Seite konnte nicht geladen werden.");
               }
            });
   		}catch(e1){
   			alert('Reference.execute: '+e1);
   		}
      }
      else {
         Engine.setContent(Engine.pageCash.referenzen);
         Engine.hideLoader();
      }
      
      if (!Reference.archive) {
         try{
            $.ajax({
               url: "resources/ref_archive.xml",
               cache: false,
               dataType : 'xml',
               success: function(data){
                  Reference.archive = data;
               },
               error: function(e) {
                  clearTimeout(Engine.timeoutvar1);
                  Engine.showError("Das Archiv konnte nicht geladen werden.");
               }
            });
         } catch(e2){
            alert('Reference.execute 2: '+e2);
         }
      }
      

      
      var id = 1;
      if (Engine.uriParams !== undefined && Engine.uriParams.id) { id = Engine.uriParams.id; }
     
      if (!Reference.references) {
         try{
            $.ajax({
               url: "resources/project_data.xml",
               cache: false,
               dataType : 'xml',
               success: function(data){
                  Reference.references = data;
                  Reference.imagePath = $(data).find("photos").attr("path");
                  Reference.process(false,id);
               },
               error: function(e) {
                  clearTimeout(Engine.timeoutvar1);
                  Engine.showError("Die Seite konnte nicht geladen werden.");
               }
            });
         } catch(e3){
            alert('Reference.execute 3: '+e3);
         }
      }
      else {
         Reference.process(false,id);
      }
      return false;

   },
  
   createScroller: function(sliderName,id, archive) {
      $(sliderName).css("display","block");
      
      if (!Reference.references) { return false; }
      if (!Reference.branches) { return false; }
      var amount = 0;

      $("#flashbox").css("backgroundImage", "url(images/flashbox_references_js.gif)");
      
      $(sliderName).html("");
      $(sliderName).append("<div id=\"sliderbuttons\"></div>");
      $("#sliderbuttons").append("<img src=\"images/button_kunden.gif\" id=\"sliderButtonAll\" onclick=\"changeURL('#Reference/id=1'); return false;\" />");
      
      var branchList = $(Reference.branches).find("mP");
      var branchendropdown = "<ul id=\"branchenDD\">";
      branchendropdown += "   <li><a style=\"display:block;\">BRANCHEN</a>";
      branchendropdown += "      <ul id=\"subbranches\">";
      for (var j = 0; j<branchList.length; j++) {
         branchendropdown += "         <li><a ";
         if (j === 0) { branchendropdown += "class=\"firstsub\" "; }
         branchendropdown += "href=\"\" onclick=\"changeURL('#Reference/branche=";
         branchendropdown += $(branchList[j]).attr("ref");
         branchendropdown += "'); return false;\">";
         branchendropdown += $(branchList[j]).attr("bez");
         branchendropdown += "</a></li>";
      }
      branchendropdown += "      </ul>";
      branchendropdown += "   </li>";
      branchendropdown += "</ul>";
      
      $("#sliderbuttons").append(branchendropdown);
      
       //Aufbau des Menüs 
      var bdd = document.getElementById("branchenDD");
      if (bdd && jQuery.browser.msie) {
         bdd.onmouseover=function() {
            if (bdd.style.backgroundImage !== "url(images/buttondown.gif)") {
               bdd.style.backgroundImage = "url(images/buttondown.gif)";
               document.getElementById("subbranches").style.display = "block";
            }
         };
         bdd.onmouseout=function() {
            if (bdd.style.backgroundImage !== "url(images/button.gif)") {
               bdd.style.backgroundImage = "url(images/button.gif)";
               document.getElementById("subbranches").style.display = "none";
            }
         };
      }
      
      $("#sliderbuttons").append("<img src=\"images/button_archive.gif\" id=\"sliderButtonArchive\" onclick=\"Reference.showArchive();\" />");
      $("#sliderbuttons").append("<br class=\"clear\"/>");
      
      $('#sliderButtonAll').hover(function () { this.src = 'images/button_kunden_o.gif'; }, function () { this.src = 'images/button_kunden.gif'; });
      $('#sliderButtonArchive').hover(function () { this.src = 'images/button_archive_o.gif'; }, function () { this.src = 'images/button_archive.gif'; });

      if (archive === true) {
         $(sliderName).append("<img src=\"images/archive.jpg\" style=\"margin-top:10px;\" /><br/>");
      }
      else {
         $(sliderName).append("<ul class=\"items\"></ul>");

         var branche = null;
         if (Engine.uriParams.branche) { branche = Engine.uriParams.branche; }

         var companies = $(Reference.references).find("photo");
         for (var k=0; k<companies.length; k++) {
            if ((branche !== null && $(companies[k]).attr("industry") === branche) || branche === null) {
               var urlString = "";
               if (branche !== null) { urlString+= "branche=" + $(companies[k]).attr("industry") + "&"; }
               urlString += "id=" + $(companies[k]).attr('custID');
               
               var companyname = $(companies[k]).attr("name");

               var liString = "<li>";
               liString +=    "<a href=\"referenzen.php?" + urlString + "\"";
               liString +=    "onclick=\"return Reference.loadReference('#Reference/" + urlString + "');\">";
               liString +=    "<img src=" + Reference.imagePath + $(companies[k]).attr("url") + " alt=\"\" width=\"200\" height=\"150\" style=\"margin-bottom:5px;\" ></a>";
               liString +=    "<a style=\"white-space:normal;\" href=\"referenzen.php?" + urlString + "\"";
               liString +=    "onclick=\"return Reference.loadReference('#Reference/" + urlString + "');\">";
               liString +=    companyname;
               liString +=    "</a></li>";
            
               $(sliderName + " ul.items").append(liString);
               amount++;
            }
         }
         Reference.sliderContent = $(sliderName + " ul.items").html();
         Reference.sliderAmount = amount;
      
         var itemswidth = ($('.items li').outerWidth()+10)*amount;
         $('ul.items').css("width", itemswidth);
         if (itemswidth>696) {
            $(sliderName).append("<div class=\"slider\"> <div class=\"handle\"> </div> </div>");
            
            $('div.imageSlider').each(function () {
               var ul = $('ul.items', this);
               var productWidth = ul.innerWidth() - $(this).outerWidth();

               var slider = $('.slider', this).slider({ 
               handle: '.handle',
               minValue: 0, 
               maxValue: productWidth, 
               slide: function (ev, ui) {
                 ul.css('left', (ui.value * -1) + 'px');
               }, 
               stop: function (ev, ui) {
                  ul.animate({'left' : ui.value * -1}, 500);
               }
               });
            });
         }
      }
      return true;
   }, 
      
   process: function(keepscrollbar,setId) {
   
      var id = 1;
      // Bug-Fix für IE6 - Reload verhindern 
      if (jQuery.browser.msie && jQuery.browser.version < 7) {
         if (!setId) { id = 1; }
         else { id = setId; }
      } else {
         id = 1;
         if (Engine.uriParams !== undefined && Engine.uriParams.id) {
            id = Engine.uriParams.id;
         }
      }

      if (Reference.showScroller === true && !keepscrollbar) { Reference.createScroller(".imageSlider",id, false); }
      
      if (Reference.references !== "") {
         var photos = $(Reference.references).find("photo");
         var selectedPhoto = photos[id];
         var i = 0;
         var firstPhoto = false;
         
         while (i<=photos.length && ($(selectedPhoto).attr("custID") === undefined || $(selectedPhoto).attr("custID") !== id)) {
            selectedPhoto = photos[i];
            i++;
            if (Engine.uriParams.branche !== undefined && $(selectedPhoto).attr("industry") == Engine.uriParams.branche && firstPhoto === false) { 
               firstPhoto = selectedPhoto;
            }
         }
         
         if (selectedPhoto == undefined) { firstPhoto = photos[0]; }
         
         if ($(selectedPhoto).attr("custID") === id) {
            Reference.setReferenceContent(selectedPhoto);
            Engine.hideLoader();
         }
         else if (firstPhoto !== false) {
            Reference.setReferenceContent(firstPhoto);
            Engine.hideLoader();
         }
         else {
            clearTimeout(Engine.timeoutvar1);
            //Engine.showError("Die Referenz wurde nicht gefunden.");
         }
      }
      else {
         clearTimeout(Engine.timeoutvar1);
         //Engine.showError("Die Referenzen wurden nicht geladen.");
      }
      Engine.updateTitle();
   },
   
   
   processArchive: function(keepscrollbar) {
      if (Reference.showScroller === true && !keepscrollbar) { Reference.createScroller(".imageSlider",1, true); }
      if (Reference.archive !== "") {
         var photos = $(Reference.archive).find("photo");
         var selectedPhoto = photos[0];
         Reference.setReferenceContent(selectedPhoto);
         Engine.hideLoader();
      }
      else {
         clearTimeout(Engine.timeoutvar1);
         Engine.showError("Das Archiv wurden nicht geladen.");
      }
      Engine.updateTitle();
   },
   
   loadReference: function(url,reloadBar) {
      Engine.showLoader("loading ...");
      Reference.changeLink = false;
      
      // Bug-Fix für IE6 - Reload verhindern 
      if (jQuery.browser.msie && jQuery.browser.version < 7) {
         var id = 1;
         var start = url.indexOf('id=');
         var ende = -1;
         var laenge = 0;
         
         if (start !== -1) { start += 3; ende = url.indexOf('&',start); }
         if (ende !== -1) { laenge = ende-start; }
         
         if (laenge > 0 ) { id = url.substr(start,laenge); }
         else { id = url.substr(start); }
         
         Reference.process(!reloadBar,id);
      }
      else { 
         Engine.updateURI(url);
         // Bug-Fix für Firefox um reload zu verhindern 
         Reference.changeLink = false;
         Reference.process(!reloadBar);
      }
      Engine.hideLoader();
      return false;
   },
   
   
   
   loadArchive: function(url) {
		Engine.showLoader("loading ...");
      Engine.updateURI(url);
      // Bug-Fix für Firefox um reload zu verhindern 
      Reference.changeLink = false;
      
      if (Reference.archive !== "") {
         Reference.processArchive(true);
      }
      return false;
   },
   
   showArchive: function() {
      Reference.createScroller(".imageSlider",1, true);
      Reference.loadArchive("#Reference/id=1");
   }
};

var Benefits = {
   benefits: "",
   template: "",
   
	init: function(){
		Engine.modules.Benefits = Benefits;
		Engine.loadedModules.Benefits = true;
	},
	
   setBenefitsContent: function(content){
      var output = Benefits.template;
      if ($(content).find('title').text() != "") {
         output = output.replace("{title}",$(content).find('title').text());
      }
      else {
         output = output.replace("<h2>{title}</h2>","");
      }
      output = output.replace("{body}",$(content).find('body').text());
      output = output.replace("{facts}",$(content).find('facts').text());

      $('#benefits').html(output);
	},
   
	execute: function(){
      if (!Engine.pageCash.leistungen) {
         try{
            $.ajax({
               url: "leistungen.php",
               cache: false,
               success: function(data){
                  Engine.setContent(data);
                  Engine.pageCash.leistungen = data;
                  Engine.hideLoader();
               },
               error: function(e) {
                  Engine.showError("Die Seite konnte nicht geladen werden.");
               }
            });
   		}catch(e1){
   			alert('Benefits.execute: '+e1);
   		}
      }
      else {
         Engine.setContent(Engine.pageCash.leistungen);
         Engine.hideLoader();
      }
      
      if (!Benefits.template) {
         try{
            $.ajax({
               url: "resources/benefits_template.tpl",
               cache: false,
               success: function(data){
                  Benefits.template = data;
               }
            });
   		}catch(e1){
   			//alert('Benefits.execute: '+e1);
   		}
      }
      
      var id = 0;
      //if (Engine.uriParams !== undefined && Engine.uriParams.id) { id = Engine.uriParams.id; }
     
     
      if (!Benefits.benefits) {
         try{
            $.ajax({
               url: "resources/benefits_data.xml",
               cache: false,
               dataType : 'xml',
               success: function(data){
                  Benefits.benefits = data;
                  Benefits.process(id);
               },
               error: function(e) {
                  clearTimeout(Engine.timeoutvar1);
                  Engine.showError("Die Seite konnte nicht geladen werden.");
               }
            });
         } catch(e3){
            alert('Benefits.execute 3: '+e3);
         }
      }
      else {
         Benefits.process(id);
      }
      return false;

   },
      
   process: function(setId) {
      var id = 0;
      // Bug-Fix für IE6 - Reload verhindern 
      if (jQuery.browser.msie && jQuery.browser.version < 7) {
         if (!setId) { id = 0; }
         else { id = setId; }
      } else {
         id = 0;
         if (Engine.uriParams !== undefined && Engine.uriParams.id) {
            id = Engine.uriParams.id;
         }
      }

      if (Benefits.benefits !== "" && id != 0) {
         var elements = $(Benefits.benefits).find("element");
         var selectedElement = elements[id];
         var i = 0;
         var firstElement = false;
         
         while (i<=elements.length && ($(selectedElement).attr("id") === undefined || $(selectedElement).attr("id") !== id)) {
            selectedElement = elements[i];
            i++;
         }
         
         if (selectedElement == undefined) { firstElement = elements[0]; }
         
         if ($(selectedElement).attr("id") === id) {
            Benefits.setBenefitsContent(selectedElement);
            Engine.hideLoader();
         }
         else if (firstElement !== false) {
            Benefits.setBenefitsContent(firstElement);
            Engine.hideLoader();
         }
         else {
            clearTimeout(Engine.timeoutvar1);
            //Engine.showError("Die Referenz wurde nicht gefunden.");
         }
      }
      else {
         clearTimeout(Engine.timeoutvar1);
         //Engine.showError("Die Leistungen wurden nicht geladen.");
      }
      Engine.updateTitle();
   },
   
   
   loadBenefits: function(url) {
      Engine.showLoader("loading ...");
      Reference.changeLink = false;
      
      // Bug-Fix für IE6 - Reload verhindern 
      if (jQuery.browser.msie && jQuery.browser.version < 7) {
         var id = 0;
         var start = url.indexOf('id=');
         var ende = -1;
         var laenge = 0;
         
         if (start !== -1) { start += 3; ende = url.indexOf('&',start); }
         if (ende !== -1) { laenge = ende-start; }
         
         if (laenge > 0 ) { id = url.substr(start,laenge); }
         else { id = url.substr(start); }

         Benefits.process(id);
      }
      else { 
         Engine.updateURI(url);
         // Bug-Fix für Firefox um reload zu verhindern 
         Reference.changeLink = false;
         
         var id = 1;
         var start = url.indexOf('id=');
         var ende = -1;
         var laenge = 0;
         
         if (start !== -1) { start += 3; ende = url.indexOf('&',start); }
         if (ende !== -1) { laenge = ende-start; }
         
         if (laenge > 0 ) { id = url.substr(start,laenge); }
         else { id = url.substr(start); }
         
         Benefits.process(id);
      }
      Engine.hideLoader();
      return false;
   }
};

var Search = {
	init: function(){
		Engine.modules.Search = Search;
		Engine.loadedModules.Search = true;
      $('#searchform').submit(function() {return Search.check();});      
	},
	
	send: function(){
      $("#searchresult").remove();
      $("body").append("<div id=\"searchresult\" style=\"display:none;\"><a href=\"#\" onclick=\"Search.closeBox(); return false;\" style=\"float:right; margin-right:18px; margin-top:3px;\"><img src=\"images/button_x.gif\" alt=\"schließen\" /></a><div id=\"thickbox_content\"></div></div>");
      try{
         $.ajax({
            url: "suche.php?search="+$('#search').attr("value"),
            cache: false,
            success: function(data){
               $('#thickbox_content').html(data);
               $('#flashbox').hide();
               tb_start();
               tb_show('a','#TB_inline?height=385&width=520&inlineId=searchresult&modal=false','thickbox');
               $(".list_searchresults").css("height","287px").css("overflow","auto");
               jQuery(document).SearchHighlight({exact:"whole",style_name_suffix:false,keys:$('#search').attr("value"),highlight: "#TB_window"});
               Engine.hideLoader();
            },
            error: function(e) {
               Engine.showError("Die Suche konnte nicht durchgeführt werden");
            }
         });
      }catch(e){
         alert('Search.send : '+e);
      }
	},
   
   closeBox: function(path) {
      tb_remove();
      $("#searchresult").remove();
      $('#flashbox').show();
      
      if (path) { Engine.loadPage(path); }
      
      return false;
   },
   
   check: function() {
      var searchterm = $('#search');
      $(".searchhint").fadeOut('slow', function() { $(this).remove(); });
      
      if (searchterm) {
         searchterm = searchterm.attr("value");
         var error = false;
         
         if (searchterm === undefined || (searchterm !== undefined && (searchterm == "Website durchsuchen ...") || searchterm.length < 3)) {
            error = true;
            
            $("#searchform").after("<div class=\"searchhint\" style=\"\">Bitte einen Suchbegriff mit 3 oder mehr Zeichen eingeben</div>");
            $(".searchhint").hide().fadeIn('slow').mouseover(function() { window.setTimeout(function() {$(".searchhint").fadeOut('slow');  }); });

            return false;
         }
         
         if (!error) {
            Search.send();
            $("#lastsearch").remove();
            $("#searchform").after("<p id=\"lastsearch\"><a href=\"suche.php?search="+escape(searchterm)+"\" onclick=\"Search.lastSearch('"+escape(searchterm)+"'); return false;\">Zur letzten Suche</a></p>");
         }
         return false;
      }
      return false;
   },
   
   lastSearch: function(searchTerm) {
      $('#search').attr("value", escape(searchTerm));
      Search.check();
   }
};

var Contact = {
   contactData: "",
   
	init: function(){
		Engine.modules.Contact = Contact;
		Engine.loadedModules.Contact = true;
	},
  
	send: function(inputs) {
      try{
			$.ajax({
				data: inputs.join('&'),
				url: "kontaktsend.php",
				type: "POST",
				timeout: 2000,
            cache: false,
				error: function(){ Engine.showError("Das Formular konnte nicht gesendet werden."); },
				success: function(response){ 
               $("#contactform").before("<p class=\"error\">"+response+"</p>");
               $('#inputVorname').attr("value","Vorname *");
               $('#inputName').attr("value","Name *");
               $('#inputFirma').attr("value","Firma");
               $('#inputEmail').attr("value","Email *");
               $('#inputTel').attr("value","Tel");
               $('#inputNachricht').attr("value","Nachricht *");
               Engine.hideLoader();
            }
			});	
      }catch(e){
         alert('Contact.send :'+e);
      }
	},
   
   check: function() {
      $(".error").fadeOut('slow', function() { $(this).remove(); });
   
      var inputVorname = $('#inputVorname');
      var inputName = $('#inputName');
      var inputFirma = $('#inputFirma');
      var inputEmail = $('#inputEmail');
      var inputTel = $('#inputTel');
      var inputNachricht = $('#inputNachricht');
      
      var inputStr = $('#inputStr');
      var inputEmpfaenger = $('#inputContact');
      
      var error = false;
      
      if (!inputVorname || !inputName || !inputFirma || !inputEmail || !inputTel || !inputNachricht || !inputStr  || !inputEmpfaenger) { return true; }
      
      var inputVornameValue = inputVorname.attr("value");
      var inputNameValue = inputName.attr("value");
      var inputFirmaValue = inputFirma.attr("value");
      var inputEmailValue = inputEmail.attr("value");
      var inputTelValue = inputTel.attr("value");
      var inputNachrichtValue = inputNachricht.attr("value");
      var inputStrValue = inputStr.attr("value");
      
      var inputEmpfaengerValue = inputEmpfaenger.attr("value");
      
      if (inputVornameValue === "" || inputVornameValue  === "Vorname *") { error = true; inputVorname.css("color","red"); }
      if (inputNameValue === "" || inputNameValue === "Name *") { error = true; inputName.css("color","red"); }
      if (inputEmailValue === "" || inputEmailValue === "Email *") { error = true; inputEmail.css("color","red"); }
      else {
         var validEmail = false;
         var reg = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)'+
                      '(\\@)([a-zA-Z0-9\\-\\.]+)'+
                      '(\\.)([a-zA-Z]{2,4})$');
         validEmail = reg.test(inputEmailValue);
         if (!validEmail) { error = true; inputEmail.css("color","red"); }
      }
      
      if (inputNachrichtValue === "" || inputNachrichtValue === "Nachricht *") { error = true; inputNachricht.css("color","red"); }
      if (!inputStrValue) { inputStrValue = "";}
      else { error = true; }
      
      if (inputFirmaValue === "Firma") { inputFirmaValue = ""; }
      if (inputTelValue === "Tel") { inputTelValue = ""; }
      
      
      
      if (!error) {
         var inputs = [];
         inputs.push('vorname=' + escape(inputVornameValue));
         inputs.push('nachname=' + escape(inputNameValue));
         inputs.push('firma=' + escape(inputFirmaValue));
         inputs.push('email=' + escape(inputEmailValue));
         inputs.push('tel=' + escape(inputTelValue));
         inputs.push('nachricht=' + escape(inputNachrichtValue));
         inputs.push('strasse=' + escape(inputStrValue));
         inputs.push('contactperson=' + escape(inputEmpfaengerValue));
         Contact.send(inputs);
      }
      else if ($(".error_contact").length < 1) { 
         $("#contactform").before("<p class=\"error_contact\">In dem rot marktierten Feld wurde eine unvollst&auml;ndige Angabe gemacht.</p>");
         $("#main .error").hide().fadeIn('slow');
      }

      return false;
   }
};

var akbsTools = {
   showEA: function(box, post, tld, pre, show){  
     if (! $(box)) { return false; }
     if ((show.length === 0) || (show.indexOf('@')+1)) {  
     $(box).html('<a href=' + '"mai' + 'lto:' + pre + '@' + post + '.'+ tld + '">' + pre + '@' + post + '.'+ tld + '<\/a>'); }  
     else  {  
     $(box).html('<a href=' + '"mai' + 'lto:' + pre + '@' + post + '.'+ tld + '">' + show + '<\/a>'); }  
     return true;
   },
   
   initSearchBox: function(searchBox, searchButton) {
      $(searchBox).focus(function(){
         $(this).removeClass();
         $(this).addClass("search_box_focus");
         if ($(this).attr("value") === "Website durchsuchen ...") { $(this).attr("value",""); }
         $(searchButton).attr("src","images/search_button_focus.gif");
      });
      $(searchBox).blur(function(){
         $(this).removeClass();
         $(this).addClass("search_box");
         if (jQuery.trim($(this).attr("value")) === "") { $(this).attr("value","Website durchsuchen ..."); }
         $(searchButton).attr("src","images/search_button.gif");
      });
   },
   
   addInputFunction: function(elementId, classNormal, classFocus, inputValue) {
      $(elementId).focus(function(){
         $(this).removeClass();
         $(this).addClass(classFocus);
         if ($(this).attr("value") === inputValue) { $(this).attr("value",""); }
      });
      $(elementId).blur(function(){
         $(this).removeClass();
         $(this).addClass(classNormal);
         if (jQuery.trim($(this).attr("value")) === "") { $(this).attr("value",inputValue); }
         $(this).css("color","");
      });
   },
   
   createCookie: function(name,value,days) {
      var expires;
      if (days) {
   		var date = new Date();
   		date.setTime(date.getTime()+(days*24*60*60*1000));
   		expires = "; expires="+date.toGMTString();
   	}
   	else { expires = ""; }
      
      if (navigator.cookieEnabled) {
         
         document.cookie = name+"="+value+expires+"; path=/";
      }
   },
   readCookie: function(name) {
   	var nameEQ = name + "=";
   	var ca = document.cookie.split(';');
   	for(var i=0;i < ca.length;i++) {
   		var c = ca[i];
   		while (c.charAt(0)==' ') { c = c.substring(1,c.length); }
   		if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length,c.length); }
   	}
   	return null;
   },
   eraseCookie: function(name) {
   	akbsTools.createCookie(name,"",-1);
   }
};