var oldIdCat;
var oldIdArt;
var oldNavItem;

var currentBBCode;

function saveState(e, $ele) {
  var article = $ele.attr("idart");
  var cat     = $ele.attr("idcat");
  var navItem = $ele.attr("navItem")
  var $href   = $ele.attr("href");
           
  var map     = {idcat: cat, idart: article};
           
  var $param  = jQuery.deparam.querystring();
           
  $.bbq.pushState( {idcat:cat, idart:article, navItem:navItem} );
}

function baseATrans(e, $ele) {
           var article = $ele.attr("idart");
           var cat     = $ele.attr("idcat");
           $.get("front_content.php", {idcat: cat, idart: article}, function(data) {
             $("#centercontent").html($("#centercontent", data).html());
             $("#i302").html($("#i302", data).html());
             $("#i303").html($("#i303", data).html());
             $("#i304").html($("#i304", data).html());
             $("a[idcat="+oldIdCat+"][idart="+oldIdArt+"]").addClass("navActiv");
             rebind();
           });
           

           jQuery.each($("a[class=navActiv]"), function() {
             var thisText = $(this).text();
             $(this).text(thisText.replace("> ", ""));
           });
           $("div > ul[navItem=true] ul[navItem=true]").css("display", "none");
           
           $("a[class=navActiv]").removeClass();
           $ele.addClass("navActiv");
}

function menuATrans(e, $ele) {
           

           $ele.addClass("navActiv");
           $ele.text("> " + $ele.text());                 
           $ele.next("ul").css("display", "block");

           var $ulPars = $ele.parents("ul");
           jQuery.each($ulPars, function() {
             $(this).css("display", "block");
             var $aChild = $(this).parent("li").children("a");
             jQuery.each($aChild, function() {
               $(this).text("> " + $(this).text());
               $(this).addClass("navActiv");
               return false;
             });
           });
}

function unbindA() {
  $("a[navItem=navi]").unbind("click");
  $("a[navItem]").not("[navItem=navi]").unbind("click");
  $("nextCalPage").unbind("click");
  $("prevCalPage").unbind("click");
}

function behaviorA() {
         $("a[navItem=navi]").click(function(e) {
           e.preventDefault();
           saveState(e, $(this));
         });
         
         $("a[navItem=other]").click(function(e) {
           e.preventDefault();
           saveState(e, $(this));
         });
         
         $("a[navItem=teaser]").click(function(e) {
           e.preventDefault();
           saveState(e, $(this));
         });
                 
         $("a.changeCalPage").click(function(e) {
           e.preventDefault();
           var calIdArt = $("#eventCalendar").attr("idart");
           var calMonth = $(this).attr("month");
           var calYear  = $(this).attr("year");
           requestCalendarPage(calIdArt, calMonth, calYear);
         });
         
         $("a[class=bbcode]").click(function(e) {
           e.preventDefault();
           currentBBCode = $(this).attr("code");
           var messages = $(this).attr("messages");
           $("#entry").createBBCodeInputForm(currentBBCode, messages);
         });
         
         $("a[class=smilie]").click(function(e) {
           e.preventDefault();
           $("#entry").setSmilieAtSelection($(this).attr("smilie"));
         });
}

function behaviorButtons() {
  $("#shoutboxSubmit").click(function(e) {
    e.preventDefault();
    if($("#shoutboxForm").checkFormFields()) {
      var nameVal = $("#shoutboxName").val();
      var msg  = $("#shoutboxMessage").val();
       var thisMap = $("#shoutboxForm").getFormValues();
      $.post('/melodic-chaos/includes/setdata.php', thisMap);
//       {name: nameVal, message: msg});
      $("#shoutboxMessage").val("");
    }
  });
  
  $("#commentButton").click(function(e) {
    e.preventDefault();
    if($("#commentForm").checkFormFields()) {
      $("#commentForm").css("display","none");
      $("#commentTransfer").css("display","block");
      var thisMap = $("#commentForm").getFormValues();
      $.get("front_content.php", thisMap, function(data){
        $("#commentBlock").html($("#commentBlock", data).html());
        var $ok = true;
        var $inner = $("#commentForm", data).html();
        $.each($(":input[box=missing]", data), function() {
         $ok = false;
         return;
        });
        if($ok) {
          $("#commentTransfer").css("display","none");
          $("#commentThanks").css("display","block");
        } else {
          $("#commentForm").html($inner);
          $("#commentForm").css("display","block");
          $("#commentTransfer").css("display","none");
          rebind();
        }
      });
  }
  });
  
  $("#vpgb_submit").click(function(e) {
    e.preventDefault();  
    if($("#vpgb_eintrag").checkFormFields()) {
      var thisMap = $("#vpgb_eintrag").getFormValues();
      $.get("front_content.php", thisMap, function(data){
        $("div[box=centre content level2]").html($("div[box=centre content level2]", data).html());
        $("div[box=centre content level3]").html($("div[box=centre content level3]", data).html());        
      });
    }  
  });
  
  $("#bbCodeReset").click(function(e) {
    e.preventDefault();
    $('#bbCodeFrame div[class=lockingFrame]').css("display", "none");
    $('#bbCodeEntry').css("display", "none");
  });

  $("#bbCodeSubmit").click(function(e) {
    e.preventDefault();
    $('#bbCodeFrame div[class=lockingFrame]').css("display", "none");
    $('#bbCodeEntry').css("display", "none");
    $('#bbCodeFrame').createBBCodeAtSelection($("#entry"));
  });

}

function rebind() {
  unbindA();
  behaviorA();
  unbindButtons();
  behaviorButtons();
}

function unbindButtons() {
  $("#commentButton").unbind("click");
  $("#shoutboxSubmit").unbind("click");
  $("#bbCodeSubmit").unbind("click");
  $("#bbCodeReset").unbind("click");
}


jQuery.fn.getFormValues = function(){
    var formvals = {};
    jQuery.each(jQuery(':input',this).serializeArray(),function(i,obj){
        if (formvals[obj.name] == undefined)
            formvals[obj.name] = obj.value;
        else if (typeof formvals[obj.name] == Array)
            formvals[obj.name].push(obj.value);
        else formvals[obj.name] = [formvals[obj.name],obj.value];
    });
    return formvals;
}

jQuery.fn.checkFormFields = function() {
  var $allOk = true;
  $.each(jQuery(':input', this), function() {
   var $thisOk = true;
   var fCheck = $(this).attr("formcheck");
   if(fCheck != null && fCheck.length > 0) {
     if(fCheck.indexOf("notEmpty") >= 0) {
       $thisOk = ($(this).val().length > 0);
     }
     if(fCheck.indexOf("text") >= 0 && $thisOk) {
       // Egal
     }
     if(fCheck.indexOf("mail") >= 0 && $thisOk) {
       $thisOk = $(this).val().indexOf("@") > 0;
     }
     if(fCheck.indexOf("number") >= 0 && $thisOk) {
       var t = Number($(this).val());
       $thisOk = !isNaN(t);
     }
   }
   if($thisOk) {
     $(this).attr("box", "");
   } else {
     $(this).attr("box", "missing");   
     $allOk = false;   
   }
  });
  return $allOk;
}

function behaviorTimers() {
  $("#shoutboxContent").everyTime(5000, function() {
    requestShoutbox();
  });
}

function primaryInit() {
  requestShoutbox();
  var calIdArt = $("#eventCalendar").attr("idart");
  var calMonth = "";
  var calYear  = "";  
  requestCalendarPage(calIdArt, calMonth, calYear);
}

function requestCalendarPage(calIdArt, pageMonth, pageYear) {
  $.get("front_content.php", {idart: calIdArt,month: pageMonth,year:pageYear}, function(data) {
    $("#eventCalendar").html(data);
    unbindA();
    behaviorA();
  });
}

function requestShoutbox() {
  $("#shoutboxContent").load("/melodic-chaos/includes/getdata.php");
}

$(document).ready(function() {
  
  $("#shoutBoxContent").html("<p>Loading ...</p>");
  rebind();
  behaviorTimers();
  primaryInit();
  $(function(){
    // In jQuery 1.4, use e.getState( "url" );
    $(window).bind( "hashchange", function(e) {
      //$("a").not("[navItem=external]")
      var url   = $.bbq.getState();
      var idcat = $.bbq.getState( "idcat" );
      var idart = $.bbq.getState( "idart" );
      var navItem = $.bbq.getState( "navItem" );
      
      

      if(oldIdCat != idcat || oldIdArt != idart) {
        $histEle = $("a[idcat="+idcat+"][idart="+idart+"][navItem="+navItem+"]");
        baseATrans(e, $histEle);
        if(navItem == "navi") {
          if(oldIdCat != idcat) {
            $histEle.next("ul").css("display", "block");
            menuATrans(e,$histEle);
          }
        } else {
          var $ele = $("li > a[idcat="+idcat+"]");           
          menuATrans(e,$ele);
        }
        oldIdCat = idcat;
        oldIdArt = idart;
      }
    });
 
    // Since the event is only triggered when the hash changes, we need
    // to trigger the event now, to handle the hash the page may have
    // loaded with.
    $(window).trigger( "hashchange" );
  });
});


function showSelectedSubBox(select) {
  var wert = select.options[select.options.selectedIndex].value;
  hideContactElements();
  showContactElement(wert);
}

function showContactElement(elementID) {
  elementToChange = document.getElementById(elementID);
  if (elementToChange.style.display=='none') {
    elementToChange.style.display='block';
  } else {
    elementToChange.style.display='none';
  }
}

function hideElement(elementID) {
  elementToChange = document.getElementById(elementID);
  if(elementToChange != null) {
    elementToChange.style.display='none';
  }
}

function hideContactElements() {
  hideElement("defaultDetails");
  hideElement("bookingDetails");
  hideElement("proposalDetails");
}

jQuery.fn.createBBCodeInputForm= function(code, messages) {
 var msgArray = messages.split('#+#');
 var skeleton = $("#bbCodeAttributeSkeleton");
 var markedText = $("#bbCodeMarkedText");
 var textForm = skeleton.parent();
 
 textForm.empty();
 textForm.append(skeleton);
 
 var singleMessage  = (msgArray.length == 1);
 var hasVisibleText = false;
 
 var selectedText = this.getSelectedText();
 var firstElement = null;
 while(msgArray.length > 0) {
   var copy = skeleton.clone();
   var current = msgArray.shift();
   current = current.split('+#+');

   if(singleMessage) {
     $("#bbCodeMarkedText > div[type=msg]").html(current[0]);
     $("#bbCodeMarkedText > div[type=input] input").val(selectedText);   
     firstElement = $("#bbCodeMarkedText > div[type=input] input");
   } else {
     if(current[0] == 'visibleText') {
       hasVisibleText  = true;
       $("#bbCodeMarkedText > div[type=msg]").html(current[1]);
       $("#bbCodeMarkedText > div[type=input] input").val(selectedText);
       firstElement = $("#bbCodeMarkedText > div[type=input] input");
     } else {
       if (current.length == 1) {
         $("div[type=msg]", copy ).html(current[0]);
         $("div[type=input] input", copy ).attr('name', code);
       } else {
         $("div[type=input] input", copy ).attr('name', current[0]);
         $("div[type=msg]", copy ).html(current[1]);
       }
       if(firstElement == null) {
         firstElement = $("div[type=input] input", copy );
       }
       copy.css('display', 'block'); 
       copy.removeAttr("id");
       textForm.append(copy);
     }
   }

 }
 
 if(singleMessage && $.trim(selectedText) != '') {
    $('#bbCodeFrame').createBBCodeAtSelection(this);
 } else {
   
   if(singleMessage || hasVisibleText) {
     $("#bbCodeMarkedText").css("display", "block");
   } else {
     $("#bbCodeMarkedText").css("display", "none"); 
   }
   skeleton.css('display', 'none'); 
   $('#bbCodeFrame div[class=lockingFrame]').css("display", "block");
   $('#bbCodeEntry').css("display", "block");
   if(firstElement != null) {
     firstElement.focus();
   }
 }
}

jQuery.fn.createBBCodeAtSelection = function(targetObject) {
  var replacement = '[' + currentBBCode;
  var addAttrs = '';
  var visibleText = '';
  $.each(jQuery(':input', this), function() {
    if($(this).css('display').trim() == 'none' || $(this).attr('type') == 'reset' || $(this).attr('type') == 'submit' || $(this).attr('name') == '') {
     // DO Nothing
    } else if($(this).attr('name') == 'visibleText') {
      visibleText = $(this).val();
    } else if($(this).attr('name') == currentBBCode) {
      replacement = replacement + '=' + $(this).val();
    } else {
      addAttrs = addAttrs + ' ' + $(this).attr('name') + '=' + $(this).val();
    }
  });
  
  if(visibleText == '')  {
    replacement = replacement + '/]';
  } else {
    replacement = replacement + addAttrs + ']' + visibleText + '[/' + currentBBCode + ']';
  }
  targetObject.replaceSelectedText(replacement);

}

jQuery.fn.setSmilieAtSelection = function(smilie) {
 $(this).focus();
  return this.each(function() {
       //MSIE
       if (document.selection) {
         this.focus();
         sel = document.selection.createRange();
         sel.text = sel.text + " " + smilie + " ";
         this.focus();
       }
       //Firefox etc.
       else if (this.selectionStart || this.selectionStart == '0') {
         var startPos = this.selectionStart;
         var endPos = this.selectionEnd;
         var len    = this.value.length;
         this.value = this.value.substring(0, startPos)
           + " " + smilie + " "
           + this.value.substring(startPos, len);
         this.focus();
       }
       else {
         this.value += " " + smilie + " ";
         this.focus();
       }
     });
}

jQuery.fn.getSelectedText = function() {
  var selection =""
  this.each(function() {
    if (document.selection) {
      this.focus();
      selection = document.selection.createRange();
    } else if (this.selectionStart || this.selectionStart == '0') {
    this.focus();
         var startPos = this.selectionStart;
         var endPos = this.selectionEnd;
         var len    = this.value.length;
         selection = this.value.substring(startPos, endPos);
    }
  });
  return selection;
}

jQuery.fn.replaceSelectedText = function(replacement) {
  $(this).focus();
  return this.each(function() {
       //MSIE
       if (document.selection) {
         this.focus();
         sel = document.selection.createRange();
         sel.text = replacement
         this.focus();
       }
       //Firefox etc.
       else if (this.selectionStart || this.selectionStart == '0') {
         var startPos = this.selectionStart;
         var endPos = this.selectionEnd;
         var len    = this.value.length;
         this.value = this.value.substring(0, startPos)
           + replacement
           + this.value.substring(startPos + len, endPos);
         this.focus();
       }
       else {
         this.value += replacement + " ";
         this.focus();
       }
     });
}
