function ajaxWithEmptyCheck(url, ajaxDivTag, onSuccess, divTag, trackingImage) {
   if (isEmpty(ajaxDivTag)) {
      ajax(url, ajaxDivTag, onSuccess, divTag, trackingImage);
   }
   else {
      onSuccess(null, ajaxDivTag, divTag, trackingImage);
   }
}

function ajax(url, ajaxDivTag, onSuccess, divTag, trackingImage) {
   
   var myAjax = jQuery.ajax({
     type: "GET",
     url: url,
     error: onFailure,
     success: function() {
         onSuccess(myAjax, ajaxDivTag, divTag, trackingImage);
    }
    
   });
}

function isEmpty(domElement) {
  if ( typeof domElement == "string" ) {
    return jQuery('#' + domElement).is(':empty');
  }
  else{
    return jQuery(domElement).is(':empty');
  }  
}

/**
 * Methods for zooming and unzooming images
 */
function zoom(url, divTag, trackingImage) {

   var i = 0;
   while ((divTag.nodeName == "#text" ||
           !(jQuery(divTag).hasClass("bildbox-links") || jQuery(divTag).hasClass("bildbox-rechts")))
           && i < 10) {
      divTag = divTag.parentNode;
      i++;
   }

   i = 0;
   var firstNode = divTag;
   while ((divTag.nodeName == "#text" ||
           !(jQuery(divTag).hasClass("bildbox-minuszoom-links") || jQuery(divTag).hasClass("bildbox-minuszoom-rechts")))
           && i < 10) {
      divTag = divTag.nextSibling;
      i++;
   }

   // we first have to check the ajax support.
   if (!isAjaxSupported()) {
      return true;
   }
   ajaxWithEmptyCheck(url, divTag, onSuccessZoom, firstNode, trackingImage);
   return false;
}


/**
 * Methods for voting
 */
function voting(url, divTag, trackingImage) {
   // we first have to check the ajax support.
   if (!isAjaxSupported()) {
      return true;
   }
   // if we don't have an url, do nothing
   if (url == "") {
      jQuery('#' + divTag + "error").show();
      return false;
   }
   ajaxWithEmptyCheck(url, divTag + "result", onSuccessVoting, divTag, trackingImage);
   return false;
}

function onFailure(request) {
   // do nothing
}

function onSuccessZoom(originalRequest, ajaxDivTag, divTag, trackingImage) {
   if (originalRequest) {
      jQuery(ajaxDivTag).html(originalRequest.responseText);
   }
   // clearing div
   var i = 0;
   var clearingDivTag = divTag;
   while ((clearingDivTag.nodeName == "#text" ||
           !(jQuery(clearingDivTag).hasClass("clearing")))
           && i < 3) {
      clearingDivTag = clearingDivTag.nextSibling;
   }
   
   jQuery(ajaxDivTag).toggle();
   jQuery(divTag).toggle();   
   jQuery(clearingDivTag).toggle();

   // The IVW Pixel
   i = 0;
   while ((divTag.nodeName == "#text" || !jQuery(divTag).hasClass("tracking"))
           && i < 10) {
      divTag = divTag.nextSibling;
      i++;
   }

   jQuery(divTag).html(trackingImage);
}

function onSuccessVoting(originalRequest, ajaxDivTag, divTag, trackingImage) {
   jQuery('#' + ajaxDivTag).html(originalRequest.responseText);
   toggleVoting(divTag);
   // The IVW Pixel
   jQuery('#' + divTag + "track").html(trackingImage);
}

function onSuccessMonthCalendar(originalRequest, ajaxDivTag, divTag, trackingImage) {
   if (originalRequest) {
      jQuery('#' + ajaxDivTag).html(originalRequest.responseText);
   }
   // The IVW Pixel
   jQuery('#' + divTag + "track").html(trackingImage);
}

function onSuccessCustomerServices(originalRequest, ajaxDivTag, divTag, trackingImage) {
   if (originalRequest) {
      jQuery('#' + ajaxDivTag).html(originalRequest.responseText);
   }
   hide('print_menu_footer');
   hide('bookmark_menu_footer');
   show('customerServicesForm');

   showByClass("cslmarker");
   showByClass("cslclose");
   //Anker anspringen
   //self.location.href="#recommend_form";
   // The IVW Pixel
   jQuery('#' + divTag + "track").html(trackingImage);
} 

function isAjaxSupported() {
   return true;
}

function votingUrlRS(url, formName) {
  
   var vote = jQuery('#' + formName + ':ckecked').val();
   var form = jQuery('#' + formName);
   //var vote = radioValue(form.vote);
   if (!vote) {
      return "";
   }
   var id = form.id.value;
   return url + "?rsId=" + id + "&vote=" + vote;
}

function votingUrl(url, formName) {
   /*var check = jQuery('.check:checked').val();
   console.log("check: " + check);
   
   var vote = jQuery('#' + formName + ':checked').val();
   console.log("vote: " + vote);*/
   var form = jQuery('#' + formName)[0];
   var vote = radioValue(form.vote);
   if (!vote) {
      return "";
   }
   var id = form.id.value;
   return url + "?id=" + id + "&vote=" + vote;
}


function radioValue(radioObj) {
   for (var i = 0; i < radioObj.length; i++) {
      if (radioObj[i].checked) {
         return radioObj[i].value;
      }
   }
   return false;
}

function monthCalendar(url, divTag, trackingImage) {
   // we first have to check the ajax support.
   if (!isAjaxSupported()) {
      return true;
   }
   ajax(url, divTag, onSuccessMonthCalendar, divTag, trackingImage);
   return false;
}

function customerServices(url, divTag, trackingImage) {
   // we first have to check the ajax support.
   if (!isAjaxSupported()) {
      return true;
   }
   ajax(url, divTag, onSuccessCustomerServices, divTag, trackingImage);
   return false;
}

function unzoom(divTag) {

   var i = 0;
   while ((divTag.nodeName == "#text" ||
           !(jQuery(divTag).hasClass("bildbox-minuszoom-links") || jQuery(divTag).hasClass("bildbox-minuszoom-rechts")))
           && i < 10) {
      divTag = divTag.parentNode;
   }
   var firstNode = divTag;

   // clearing div
   i = 0;
   var clearingDivTag = divTag;
   while ((clearingDivTag.nodeName == "#text" ||
           !(jQuery(clearingDivTag).hasClass("clearing")))
           && i < 3) {
      clearingDivTag = clearingDivTag.nextSibling;
   }
   
   i = 0;
   while ((divTag.nodeName == "#text" ||
           !(jQuery(divTag).hasClass("bildbox-links") || jQuery(divTag).hasClass("bildbox-rechts")))
           && i < 10) {
      divTag = divTag.previousSibling;
   }

   jQuery(divTag).toggle();
   jQuery(firstNode).toggle();   
   jQuery(clearingDivTag).toggle();   
   return false;
}


function toggleVoting(divTag) {
   jQuery('#' + divTag + "result").toggle();
   jQuery('#' + divTag + "track").toggle();
   jQuery('#' + divTag).toggle();
}

function toggleProk(tagId) {
   var tag = jQuery('#' + tagId);
   // if its hidden open it and close all others
   if (!tag.is(":visible")) {
      closeAllProk();
   }
   jQuery('#' + tagId).toggle();
   jQuery('#' + tagId + "open").toggle();   
   jQuery('#' + tagId + "close").toggle();   
}

function openAllProk() {
   var currentTagId;
   for (var i = 0; ; i++) {
      currentTagId = "bereich" + i;
      if (jQuery('#' + currentTagId).length == 0) {
         break;
      }
      jQuery('#' + currentTagId).show();
      jQuery('#' + currentTagId + "close").show();
      jQuery('#' + currentTagId + "open").hide();
   }
}

function closeAllProk() {
   for (var i = 0; ; i++) {
      var currentTagId = "bereich" + i;
      if (jQuery('#' + currentTagId).length == 0) {
         break;
      }
      jQuery('#' + currentTagId).hide();
      jQuery('#' + currentTagId + "close").hide();
      jQuery('#' + currentTagId + "open").show();
   }
}
