//init page

$(function() {

  initCufon();
  initBackground();
  initSlideshow();
  initClearInput();
  initCastomForms();



});

$(window).ready(function() {


 /* if($('#is_start_page').length != 0)
  {

    $('body').css('background-image','none');
    return;
  }*/

//

/*
* The ugliest workaround in the history of typo3
*
*/
if($('#c299').length != 0)
{
	$('#c299').remove();	
}
if($('#c277').length != 0)
{
	$('#c277').remove();	
}
if($('#c250').length != 0)
{
	$('#c250').remove();	
}

if($('#c252').length != 0)
{
	$('#c252').remove();	
}

if($('#c255').length != 0)
{
	$('#c255').remove();	
}

if($('#c297').length != 0)
{
	$('#c297').remove();	
}

if($('#c261').length != 0)
{
	$('#c261').remove();	
}

if($('#c239').length != 0)
{
	$('#c239').remove();	
}


if($('#c241').length != 0)
{
	$('#c241').remove();	
}



if($('#c206').length != 0)
{
	$('#c206').remove();	
}



if($('#c193').length != 0)
{
	$('#c193').remove();	
}
if($('#c220').length != 0)
{
	$('#c220').remove();	
}

if($('#c246').length != 0)
{
	$('#c246').remove();	
}

if($('#c199').length != 0)
{
	$('#c199').remove();	
}


$('body').css('visibility','visible');
});

//init clear input
function initClearInput() {
  clearFormFields({
    clearInputs: true,
    clearTextareas: true,
    passwordFieldText: false,
    addClassFocus: "focus",
    filterClass: "default"
  });
}

function initBackground() {

    //var imageURL = extractUrl($('body').css('background-image'));
   var options = new Object();

     options.centeredX = true;

  //Dont create new background on start page
  if($('#is_start_page').length != 0)
  {
    return;
  }
    $.backstretch(imageURL, options);



}



// gallery page carousel
function initSlideshow() {
  var slideshow = $('.slideshow');
  var _oddOrEven = 'even';

  slideshow.fadeGallery({
    slideElements:'ul.slides > li',
    pagerLinks:'.bullets a',
    autoRotation:true,
    onBeforeFade : function(_this, _slides, _prevIndex, _currentIndex) {

      var currentSelection = $(slideshow.find('.slides .single-slide').get(_currentIndex));

      var backgroundImage = currentSelection.find('.background-image');



      if (backgroundImage.length != 0) {


        var bgPosition = '0px';
        var currentIndex = currentSelection.index();
        if (currentIndex == 0) {
          bgPosition = 0;
        } else {
          bgPosition = 1390 * currentIndex;
        }

        var bgImageEven = $('#bg-image-fader-even');
        var bgImageOdd = $('#bg-image-fader-odd');


        var bgImageOddContainer = bgImageOdd.parent();


        /*if(bgImageOdd.attr('src') == '/uploads/tx_weitclickstewocollections/' + backgroundImage.html())
        {
          _oddOrEven = 'odd';
        } else if(bgImageEven.attr('src') == '/uploads/tx_weitclickstewocollections/' + backgroundImage.html()) {
             _oddOrEven = 'even';
        }*/

        if(_oddOrEven == 'even')
        {

          bgImageOdd.attr('src', '/uploads/tx_weitclickstewocollections/' + backgroundImage.html());

       //   bgImageOdd.load(function() {

          //bgImageOddContainer.fadeIn();
          bgImageOddContainer.show();
           bgImageOddContainer.animate({opacity: 1}, {queue:false, duration:650, complete: function(){

 }});

          _oddOrEven = 'odd';
      //    });



        } else {

          bgImageEven.attr('src', '/uploads/tx_weitclickstewocollections/' + backgroundImage.html());

             // bgImageEven.load(function() {

             //bgImageOddContainer.fadeOut();

 bgImageOddContainer.animate({opacity: 0}, {queue:false, duration:650, complete: function(){
bgImageOddContainer.hide();
 }});

           _oddOrEven = 'even';


        }

      }


    },
    duration:$.browser.msie && $.browser.version < 9 ? 0 : 650
  });


  slideshow.find('.tooltip_trigger').mouseover(function() {
    var _this = $(this);

    var tooltipNumber = findTooltipNumberByTrigger(_this);

    _this.parent().find('.tooltip-' + tooltipNumber).show();

  });

  slideshow.find('.tooltip_trigger').mouseout(function() {
    var _this = $(this);

    var tooltipNumber = findTooltipNumberByTrigger(_this);

    _this.parent().find('.tooltip-' + tooltipNumber).hide();

  });


}

function findTooltipNumberByTrigger(trigger) {
  var splitID = trigger.attr('id').split('_');
  var tooltipNumber = splitID[1];

  return tooltipNumber;
}

function initCufon() {
  Cufon.replace('#nav > li > a', { fontFamily: 'SYNTB', hover: true });
  Cufon.replace('ul.lang a, ul.add-nav a,#footer .add-nav li', { fontFamily: 'SYNLT', hover: true });




  Cufon.replace('.bodytext, .colums-holder p, .tooltip .text,.conract-form label, .offers ul li, .timing ul li, .address-block address, #nav > li ul a, ul.slides h2, .news-list-item p', { fontFamily: 'SYNLT' });
  Cufon.replace('#content strong.category{, #content h2,.tooltip .title, .paragraph strong.year, a.read-more, ul.lang a, .map-holder a,.news-list-item .single-collection .download, .colums-holder h4, .catalog-info,h1.headlineDefault, h1.headline1, h1.headline2, h1.headline3, h1.headline4, .timing h5, .address-block a,.collection-overview h2,.collection-overview strong,.collection-overview h3,.collection-overview a, .about h5,.column a, ul.slides h3, ul.slides a.collection, .map-holder a.maplink, a.mapext, .bodytext a, .news-list-item h1, .more a, .back a', { fontFamily: 'SYNTB', hover: true   });

  _refresh('#nav li', '#nav > li > a');
  Cufon.replace('ul.lang a, ul.add-nav a', { fontFamily: 'SYNLT', hover: true });
}

//clear form fields
function clearFormFields(o) {
  if (o.clearInputs == null) o.clearInputs = true;
  if (o.clearTextareas == null) o.clearTextareas = true;
  if (o.passwordFieldText == null) o.passwordFieldText = false;
  if (o.addClassFocus == null) o.addClassFocus = false;
  if (!o.filterClass) o.filterClass = "default";
  if (o.clearInputs) {
    var inputs = document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {
      if ((inputs[i].type == "text" || inputs[i].type == "password") && inputs[i].className.indexOf(o.filterClass) == -1) {
        inputs[i].valueHtml = inputs[i].value;
        inputs[i].onfocus = function () {
          if (this.valueHtml == this.value) this.value = "";
          if (this.fake) {
            inputsSwap(this, this.previousSibling);
            this.previousSibling.focus();
          }
          if (o.addClassFocus && !this.fake) {
            this.className += " " + o.addClassFocus;
            this.parentNode.className += " parent-" + o.addClassFocus;
          }
        }
        inputs[i].onblur = function () {
          if (this.value == "") {
            this.value = this.valueHtml;
            if (o.passwordFieldText && this.type == "password") inputsSwap(this, this.nextSibling);
          }
          if (o.addClassFocus) {
            this.className = this.className.replace(o.addClassFocus, "");
            this.parentNode.className = this.parentNode.className.replace("parent-" + o.addClassFocus, "");
          }
        }
        if (o.passwordFieldText && inputs[i].type == "password") {
          var fakeInput = document.createElement("input");
          fakeInput.type = "text";
          fakeInput.value = inputs[i].value;
          fakeInput.className = inputs[i].className;
          fakeInput.fake = true;
          inputs[i].parentNode.insertBefore(fakeInput, inputs[i].nextSibling);
          inputsSwap(inputs[i], null);
        }
      }
    }
  }
  if (o.clearTextareas) {
    var textareas = document.getElementsByTagName("textarea");
    for (var i = 0; i < textareas.length; i++) {
      if (textareas[i].className.indexOf(o.filterClass) == -1) {
        textareas[i].valueHtml = textareas[i].value;
        textareas[i].onfocus = function() {
          if (this.value == this.valueHtml) this.value = "";
          if (o.addClassFocus) {
            this.className += " " + o.addClassFocus;
            this.parentNode.className += " parent-" + o.addClassFocus;
          }
        }
        textareas[i].onblur = function() {
          if (this.value == "") this.value = this.valueHtml;
          if (o.addClassFocus) {
            this.className = this.className.replace(o.addClassFocus, "");
            this.parentNode.className = this.parentNode.className.replace("parent-" + o.addClassFocus, "");
          }
        }
      }
    }
  }
  function inputsSwap(el, el2) {
    if (el) el.style.display = "none";
    if (el2) el2.style.display = "inline";
  }
}


//init custom form
var _selectHeight = 25;

var _forms = document.getElementsByTagName('form');
var inputs = new Array();
var selects = new Array();
var labels = new Array();
var radios = new Array();
var radioLabels = new Array();
var checkboxes = new Array();
var checkboxLabels = new Array();
var buttons = new Array();
var selects = new Array();
var all_selects = false;
var active_select = null;
var agt = navigator.userAgent.toLowerCase();
var isMac = is_mac();
var selectText = "please select";
var IN_CFORMS = true;

function is_mac() {
  if (navigator.appVersion.indexOf("Safari") != -1) {
    if (!window.getComputedStyle) {
      return true;
    }
  }

  return false;
}

function initCastomForms() {
  if (!document.getElementById) {
    return false;
  }
  getElements();
  separateElements();
  replaceRadios();
  replaceCheckboxes();
  replaceSelects();

  var _selects = document.getElementsByTagName('select');
  var _SelctClassName = [];
  if (_selects) {
    for (var i = 0; i < _selects.length; i++) {
      if (_selects[i].className != '' && _selects[i].className != 'outtaHere')
        _SelctClassName[i] = ' drop-' + _selects[i].className;
    }
    for (var i = 0; i < _SelctClassName.length; i++) {
      var _selectDrop = document.getElementById('optionsDiv' + i);
      if (_selectDrop) {
        if (_SelctClassName[i])
          _selectDrop.className += _SelctClassName[i];
      }
    }
  }
}


// getting all the required elements
function getElements() {
  for (var nf = 0; nf < document.getElementsByTagName("form").length; nf++) {
    for (var nfi = 0; nfi < document.forms[nf].getElementsByTagName("input").length; nfi++) {
      inputs.push(document.forms[nf].getElementsByTagName("input")[nfi]);
    }
    for (var nfl = 0; nfl < document.forms[nf].getElementsByTagName("label").length; nfl++) {
      labels.push(document.forms[nf].getElementsByTagName("label")[nfl]);
    }
    for (var nfs = 0; nfs < document.forms[nf].getElementsByTagName("select").length; nfs++) {
      selects.push(document.forms[nf].getElementsByTagName("select")[nfs]);
    }
  }
}

// separating all the elements in their respective arrays
function separateElements() {
  var r = 0;
  var c = 0;
  var t = 0;
  var rl = 0;
  var cl = 0;
  var tl = 0;
  var b = 0;
  for (var q = 0; q < inputs.length; q++) {
    if (inputs[q].type == "radio") {
      radios[r] = inputs[q];
      ++r;
      for (var w = 0; w < labels.length; w++) {
        if ((inputs[q].id) && labels[w].htmlFor == inputs[q].id) {
          radioLabels[rl] = labels[w];
          ++rl;
        }
      }
    }
    if (inputs[q].type == "checkbox") {
      checkboxes[c] = inputs[q];
      ++c;
      for (var w = 0; w < labels.length; w++) {
        if ((inputs[q].id) && (labels[w].htmlFor == inputs[q].id)) {
          checkboxLabels[cl] = labels[w];
          ++cl;
        }
      }
    }
    if ((inputs[q].type == "submit") || (inputs[q].type == "button")) {
      buttons[b] = inputs[q];
      ++b;
    }
  }
}

//replacing radio buttons
function replaceRadios() {
  for (var q = 0; q < radios.length; q++) {
    radios[q].className += " outtaHere";
    var radioArea = document.createElement("div");
    if (radios[q].checked) {
      radioArea.className = "radioAreaChecked";
    }
    else {
      radioArea.className = "radioArea";
    }
    radioArea.id = "myRadio" + q;
    radios[q].parentNode.insertBefore(radioArea, radios[q]);
    radios[q]._ra = radioArea;

    radioArea.onclick = new Function('rechangeRadios(' + q + ')');
    if (radioLabels[q]) {
      radioLabels[q].onclick = new Function('rechangeRadios(' + q + ')');
    }
  }
  return true;
}

//checking radios
function checkRadios(who) {
  var what = radios[who]._ra;
  for (var q = 0; q < radios.length; q++) {
    if ((radios[q]._ra.className == "radioAreaChecked") && (radios[q]._ra.nextSibling.name == radios[who].name)) {
      radios[q]._ra.className = "radioArea";
    }
  }
  what.className = "radioAreaChecked";
}

//changing radios
function changeRadios(who) {
  if (radios[who].checked) {
    for (var q = 0; q < radios.length; q++) {
      if (radios[q].name == radios[who].name) {
        radios[q].checked = false;
      }
      radios[who].checked = true;
      checkRadios(who);
    }
  }
}

//rechanging radios
function rechangeRadios(who) {
  if (!radios[who].checked) {
    for (var q = 0; q < radios.length; q++) {
      if (radios[q].name == radios[who].name) {
        radios[q].checked = false;
      }
      radios[who].checked = true;
      checkRadios(who);
    }
  }
}

//replacing checkboxes
function replaceCheckboxes() {
  for (var q = 0; q < checkboxes.length; q++) {
    checkboxes[q].className += " outtaHere";
    var checkboxArea = document.createElement("div");
    if (checkboxes[q].checked) {
      checkboxArea.className = "checkboxAreaChecked";
    }
    else {
      checkboxArea.className = "checkboxArea";
    }
    checkboxArea.id = "myCheckbox" + q;
    checkboxes[q].parentNode.insertBefore(checkboxArea, checkboxes[q]);
    checkboxes[q]._ca = checkboxArea;
    checkboxArea.onclick = checkboxArea.onclick2 = new Function('rechangeCheckboxes(' + q + ')');
    if (checkboxLabels[q]) {
      checkboxLabels[q].onclick = new Function('changeCheckboxes(' + q + ')');
    }

    checkboxes[q].onkeydown = checkEvent;
  }
  return true;
}

//checking checkboxes
function checkCheckboxes(who, action) {
  var what = checkboxes[who]._ca;
  if (action == true) {
    what.className = "checkboxAreaChecked";
    what.checked = true;
  }
  if (action == false) {
    what.className = "checkboxArea";
    what.checked = false;
  }
}

//changing checkboxes
function changeCheckboxes(who) {
  if (checkboxes[who].checked) {
    checkCheckboxes(who, false);
  }
  else {
    checkCheckboxes(who, true);
  }
}

//rechanging checkboxes
function rechangeCheckboxes(who) {
  var tester = false;
  if (checkboxes[who].checked == true) {
    tester = false;
  }
  else {
    tester = true;
  }
  checkboxes[who].checked = tester;
  checkCheckboxes(who, tester);
}

//check event
function checkEvent(e) {
  if (!e) var e = window.event;
  if (e.keyCode == 32) {
    for (var q = 0; q < checkboxes.length; q++) {
      if (this == checkboxes[q]) {
        changeCheckboxes(q);
      }
    }
  } //check if space is pressed
}


function replaceSelects() {
  for (var q = 0; q < selects.length; q++) {
    if (!selects[q].replaced && selects[q].offsetWidth) {
      selects[q]._number = q;
      //create and build div structure
      var selectArea = document.createElement("div");
      var left = document.createElement("span");
      left.className = "left";
      selectArea.appendChild(left);

      var disabled = document.createElement("span");
      disabled.className = "disabled";
      selectArea.appendChild(disabled);

      selects[q]._disabled = disabled;
      var center = document.createElement("span");
      var button = document.createElement("a");
      var text = document.createTextNode(selectText);
      center.id = "mySelectText" + q;

      var stWidth = selects[q].offsetWidth;
      selectArea.style.width = stWidth + "px";
      if (selects[q].parentNode.className.indexOf("type2") != -1) {
        button.href = "javascript:showOptions(" + q + ",true)";
      } else {
        button.href = "javascript:showOptions(" + q + ",false)";
      }
      button.className = "selectButton";
      selectArea.className = "selectArea";

      selectArea.className += " " + selects[q].className;
      selectArea.id = "sarea" + q;
      center.className = "center";
      center.appendChild(text);
      selectArea.appendChild(center);
      selectArea.appendChild(button);

      //hide the select field
      selects[q].className += " outtaHere";
      //insert select div
      selects[q].parentNode.insertBefore(selectArea, selects[q]);
      //build & place options div

      var optionsDiv = document.createElement("div");

      var optionsList = document.createElement("ul");
      optionsDiv.innerHTML += "<div class='select-top'><div></div></div>";
      optionsDiv.appendChild(optionsList);

      selects[q]._options = optionsList;

      optionsDiv.style.width = stWidth + "px";
      optionsDiv._parent = selectArea;

      optionsDiv.className = "optionsDivInvisible";
      optionsDiv.id = "optionsDiv" + q;


      populateSelectOptions(selects[q]);
      optionsDiv.innerHTML += "<div class='select-bottom'><div class='select-bottom-left'></div><div class='select-bottom-right'></div></div>";
      document.getElementsByTagName("body")[0].appendChild(optionsDiv);
      selects[q].replaced = true;
    }
    all_selects = true;
  }
}

//collecting select options
function populateSelectOptions(me) {
  me._options.innerHTML = "";

  for (var w = 0; w < me.options.length; w++) {

    var optionHolder = document.createElement('li');
    var optionLink = document.createElement('a');
    var optionTxt;
    if (me.options[w].title.indexOf('image') != -1) {
      optionTxt = document.createElement('img');
      optionSpan = document.createElement('span');
      optionTxt.src = me.options[w].title;
      optionSpan = document.createTextNode(me.options[w].text);
    } else {
      optionTxt = document.createTextNode(me.options[w].text);
    }

    optionLink.href = "javascript:showOptions(" + me._number + "); selectMe('" + me.id + "'," + w + "," + me._number + ");";
    if (me.options[w].title.indexOf('image') != -1) {
      optionLink.appendChild(optionTxt);
      optionLink.appendChild(optionSpan);
    } else {
      optionLink.appendChild(optionTxt);
    }
    optionHolder.appendChild(optionLink);
    me._options.appendChild(optionHolder);
    //check for pre-selected items
    if (me.options[w].selected) {
      selectMe(me.id, w, me._number);
    }
  }
  if (me.disabled) {
    me._disabled.style.display = "block";
  }
  else {
    me._disabled.style.display = "none";
  }
}

//selecting me
function selectMe(selectFieldId, linkNo, selectNo) {
  selectField = selects[selectNo];
  for (var k = 0; k < selectField.options.length; k++) {
    if (k == linkNo) {
      selectField.options[k].selected = true;
    }
    else {
      selectField.options[k].selected = false;
    }
  }

  //show selected option
  textVar = document.getElementById("mySelectText" + selectNo);
  var newText;
  var optionSpan;
  if (selectField.options[linkNo].title.indexOf('image') != -1) {
    newText = document.createElement('img');
    newText.src = selectField.options[linkNo].title;
    optionSpan = document.createElement('span');
    optionSpan = document.createTextNode(selectField.options[linkNo].text);
  } else {
    newText = document.createTextNode(selectField.options[linkNo].text);
  }
  if (selectField.options[linkNo].title.indexOf('image') != -1) {
    if (textVar.childNodes.length > 1) textVar.removeChild(textVar.childNodes[0]);
    textVar.replaceChild(newText, textVar.childNodes[0]);
    textVar.appendChild(optionSpan);
  } else {
    if (textVar.childNodes.length > 1) textVar.removeChild(textVar.childNodes[0]);
    textVar.replaceChild(newText, textVar.childNodes[0]);
  }
  if (selectField.onchange && all_selects) {
    eval(selectField.onchange());
  }
}
//showing options
function showOptions(g) {
  _elem = document.getElementById("optionsDiv" + g);
  var divArea = document.getElementById("sarea" + g);
  if (active_select && active_select != _elem) {
    active_select.className = active_select.className.replace('optionsDivVisible', 'optionsDivInvisible');
    active_select.style.height = "auto";
  }
  if (_elem.className.indexOf("optionsDivInvisible") != -1) {
    _elem.style.left = "-9999px";
    _elem.style.top = findPosY(divArea) + _selectHeight + 'px';
    _elem.className = _elem.className.replace('optionsDivInvisible', '');
    _elem.className += " optionsDivVisible";
    /*if (_elem.offsetHeight > 200)
     {
     _elem.style.height = "200px";
     }*/
    _elem.style.left = findPosX(divArea) + 'px';

    active_select = _elem;
    if (document.documentElement) {
      document.documentElement.onclick = hideSelectOptions;
    }
    else {
      window.onclick = hideSelectOptions;
    }
  }
  else if (_elem.className.indexOf("optionsDivVisible") != -1) {
    _elem.style.height = "auto";
    _elem.className = _elem.className.replace('optionsDivVisible', '');
    _elem.className += " optionsDivInvisible";
  }

  // for mouseout
  /*_elem.timer = false;
   _elem.onmouseover = function() {
   if (this.timer) clearTimeout(this.timer);
   }
   _elem.onmouseout = function() {
   var _this = this;
   this.timer = setTimeout(function(){
   _this.style.height = "auto";
   _this.className = _this.className.replace('optionsDivVisible','');
   if (_elem.className.indexOf('optionsDivInvisible') == -1)
   _this.className += " optionsDivInvisible";
   },200);
   }*/
}

function extractUrl(input)
{
 return input.replace(/"/g,"").replace(/url\(|\)$/ig, "");
}

function hideSelectOptions(e) {
  if (active_select) {
    if (!e) e = window.event;
    var _target = (e.target || e.srcElement);
    if (isElementBefore(_target, 'selectArea') == 0 && isElementBefore(_target, 'optionsDiv') == 0) {
      active_select.className = active_select.className.replace('optionsDivVisible', '');
      active_select.className = active_select.className.replace('optionsDivInvisible', '');
      active_select.className += " optionsDivInvisible";
      active_select = false;

      if (document.documentElement) {
        document.documentElement.onclick = function() {
        };
      }
      else {
        window.onclick = null;
      }
    }
  }
}

function isElementBefore(_el, _class) {
  var _parent = _el;
  do
  {
    _parent = _parent.parentNode;
  }
  while (_parent && _parent.className != null && _parent.className.indexOf(_class) == -1)

  if (_parent.className && _parent.className.indexOf(_class) != -1) {
    return 1;
  }
  else {
    return 0;
  }

}

function findPosY(obj) {
  var posTop = 0;
  while (obj.offsetParent) {
    posTop += obj.offsetTop;
    obj = obj.offsetParent;
  }
  return posTop;
}
function findPosX(obj) {
  var posLeft = 0;
  while (obj.offsetParent) {
    posLeft += obj.offsetLeft;
    obj = obj.offsetParent;
  }
  return posLeft;
}

$(document).ready(function() {

  $($('#footer .add-nav li').get(1)).html("Stewo International AG");
});
/*
 * jQuery Backstretch
 * Version 1.1.2
 * http://srobbin.com/jquery-plugins/jquery-backstretch/
 *
 * Add a dynamically-resized background image to the page
 *
 * Copyright (c) 2010 Scott Robbin (srobbin.com)
 * Dual licensed under the MIT and GPL licenses.
*/

(function($) {

    $.backstretch = function(src, options, callback) {
        var settings = {
            centeredX: true,         // Should we center the image on the X axis?
            centeredY: true,         // Should we center the image on the Y axis?
            speed: 0,                // fadeIn speed for background after image loads (e.g. "fast" or 500)
            containerID : 'backstretch',
            imageID : 'backstretch-img',
          zindex : '-9999',
          opacity : '1'
        },
        rootElement = ("onorientationchange" in window) ? $(document) : $(window), // hack to acccount for iOS position:fixed shortcomings
        imgRatio, bgImg, bgWidth, bgHeight, bgOffset, bgCSS;

        // Extend the settings with those the user has provided
        if(options && typeof options == "object") $.extend(settings, options);




        // Initialize
        $(document).ready(_init);

        // For chaining
        return this;

        function _init() {
            // Prepend image, wrapped in a DIV, with some positioning and zIndex voodoo
            if(src) {
                var container = $("<div />").attr("id", settings.containerID)
                                            .css({left: 0, top: 0, position: "fixed", overflow: "hidden", zIndex: settings.zindex, opacity : settings.opacity}),
                    img = $("<img />").css({position: "relative", display: "none"})
                                      .bind("load", function(e) {
                                          var self = $(this);
                                          imgRatio = $(e.target).width() / $(e.target).height();

                                          _adjustBG(function() {
                                              self.fadeIn(settings.speed, function(){
                                                //  initSlide();

                                                  if(typeof callback == "function") callback();

                                              });
                                          });
                                      })
                                      .appendTo(container);

                $("body").prepend(container);
              img.attr('id',settings.imageID);
                img.attr("src", src); // Hack for IE img onload event

                // Adjust the background size when the window is resized or orientation has changed (iOS)
                $(window).resize(_adjustBG);
            }
        }

        function _adjustBG(fn) {
            try {
                bgCSS = {left: 0, top: 0}
                bgWidth = rootElement.width();
                bgHeight = bgWidth / imgRatio;

                // Make adjustments based on image ratio
                // Note: Offset code provided by Peter Baker (http://ptrbkr.com/). Thanks, Peter!
                if(bgHeight >= rootElement.height()) {
                    bgOffset = (bgHeight - rootElement.height()) /2;
                    if(settings.centeredY) $.extend(bgCSS, {top: "-" + bgOffset + "px"});
                } else {
                    bgHeight = rootElement.height();
                    bgWidth = bgHeight * imgRatio;
                    bgOffset = (bgWidth - rootElement.width()) / 2;
                    if(settings.centeredX) $.extend(bgCSS, {left: "-" + bgOffset + "px"});
                }

                $("#"+settings.containerID+" img").width( bgWidth ).height( bgHeight ).css(bgCSS);
            } catch(err) {
                // IE7 seems to trigger _adjustBG before the image is loaded.
                // This try/catch block is a hack to let it fail gracefully.
            }

            // Executed the passed in function, if necessary
            if (typeof fn == "function") fn();
        }
    };

})(jQuery);

// slideshow plugin
jQuery.fn.fadeGallery = function(_options) {


  var _options = jQuery.extend({
    slideElements:'div.slideset > div',
    pagerLinks:'div.pager a',
    btnNext:'a.next',
    btnPrev:'a.prev',
    btnPlayPause:'a.play-pause',
    btnPlay:'a.play',
    btnPause:'a.pause',
    pausedClass:'paused',
    disabledClass: 'disabled',
    playClass:'playing',
    activeClass:'active',
    loadingClass:'ajax-loading',
    loadedClass:'slide-loaded',
    dynamicImageLoad:false,
    dynamicImageLoadAttr:'alt',
    currentNum:false,
    allNum:false,
    startSlide:null,
    noCircle:false,
    pauseOnHover:true,
    autoRotation:false,
    autoHeight:false,
    onBeforeFade:false,
    onAfterFade:false,
    onChange:false,
    disableWhileAnimating:false,
    switchTime:3000,
    duration:650,
    event:'click'
  }, _options);


  return this.each(function() {

    // gallery options
    if (this.slideshowInit) return; else this.slideshowInit;


    var _this = jQuery(this);
    var _slides = jQuery(_options.slideElements, _this);
    var _pagerLinks = jQuery(_options.pagerLinks, _this);
    var _btnPrev = jQuery(_options.btnPrev, _this);
    var _btnNext = jQuery(_options.btnNext, _this);
    var _btnPlayPause = jQuery(_options.btnPlayPause, _this);
    var _btnPause = jQuery(_options.btnPause, _this);
    var _btnPlay = jQuery(_options.btnPlay, _this);
    var _pauseOnHover = _options.pauseOnHover;
    var _dynamicImageLoad = _options.dynamicImageLoad;
    var _dynamicImageLoadAttr = _options.dynamicImageLoadAttr;
    var _autoRotation = _options.autoRotation;
    var _activeClass = _options.activeClass;
    var _loadingClass = _options.loadingClass;
    var _loadedClass = _options.loadedClass;
    var _disabledClass = _options.disabledClass;
    var _pausedClass = _options.pausedClass;
    var _playClass = _options.playClass;
    var _autoHeight = _options.autoHeight;
    var _duration = _options.duration;
    var _switchTime = _options.switchTime;
    var _controlEvent = _options.event;
    var _currentNum = (_options.currentNum ? jQuery(_options.currentNum, _this) : false);
    var _allNum = (_options.allNum ? jQuery(_options.allNum, _this) : false);
    var _startSlide = _options.startSlide;
    var _noCycle = _options.noCircle;
    var _onChange = _options.onChange;
    var _onBeforeFade = _options.onBeforeFade;
    var _onAfterFade = _options.onAfterFade;
    var _disableWhileAnimating = _options.disableWhileAnimating;

    // gallery init
    var _anim = false;
    var _hover = false;
    var _prevIndex = 0;
    var _currentIndex = 0;
    var _slideCount = _slides.length;
    var _timer;
    if (_slideCount < 2) return;

    _prevIndex = _slides.index(_slides.filter('.' + _activeClass));
    if (_prevIndex < 0) _prevIndex = _currentIndex = 0;
    else _currentIndex = _prevIndex;
    if (_startSlide != null) {
      if (_startSlide == 'random') _prevIndex = _currentIndex = Math.floor(Math.random() * _slideCount);
      else _prevIndex = _currentIndex = parseInt(_startSlide);
    }
    _slides.hide().eq(_currentIndex).show();
    if (_autoRotation) _this.removeClass(_pausedClass).addClass(_playClass);
    else _this.removeClass(_playClass).addClass(_pausedClass);

    // gallery control
    if (_btnPrev.length) {
      _btnPrev.bind(_controlEvent, function() {
        prevSlide();
        return false;
      });
    }
    if (_btnNext.length) {
      _btnNext.bind(_controlEvent, function() {
        nextSlide();

        return false;
      });
    }
    if (_pagerLinks.length) {
      _pagerLinks.each(function(_ind) {
        jQuery(this).bind(_controlEvent, function() {
          if (_currentIndex != _ind) {
            if (_disableWhileAnimating && _anim) return;
            _prevIndex = _currentIndex;
            _currentIndex = _ind;
            switchSlide();
          }
          return false;
        });
      });
    }

    // play pause section
    if (_btnPlayPause.length) {
      _btnPlayPause.bind(_controlEvent, function() {
        if (_this.hasClass(_pausedClass)) {
          _this.removeClass(_pausedClass).addClass(_playClass);
          _autoRotation = true;
          autoSlide();
        } else {
          _autoRotation = false;
          if (_timer) clearTimeout(_timer);
          _this.removeClass(_playClass).addClass(_pausedClass);
        }
        return false;
      });
    }
    if (_btnPlay.length) {
      _btnPlay.bind(_controlEvent, function() {
        _this.removeClass(_pausedClass).addClass(_playClass);
        _autoRotation = true;
        autoSlide();
        return false;
      });
    }
    if (_btnPause.length) {
      _btnPause.bind(_controlEvent, function() {
        _autoRotation = false;
        if (_timer) clearTimeout(_timer);
        _this.removeClass(_playClass).addClass(_pausedClass);
        return false;
      });
    }

    // dynamic image loading (swap from ATTRIBUTE)
    function loadSlide(slide) {
      if (!slide.hasClass(_loadingClass) && !slide.hasClass(_loadedClass)) {
        var images = slide.find(_dynamicImageLoad) // pass selector here
        var imagesCount = images.length;
        if (imagesCount) {
          slide.addClass(_loadingClass);
          images.each(
              function() {
                var img = this;
                img.onload = function() {
                  img.loaded = true;
                  img.onload = null;
                  setTimeout(reCalc, _duration);
                }
                img.setAttribute('src', img.getAttribute(_dynamicImageLoadAttr));
                img.setAttribute(_dynamicImageLoadAttr, '');
              }).css({opacity:0});

          function reCalc() {
            var cnt = 0;
            images.each(function() {
              if (this.loaded) cnt++;
            });
            if (cnt == imagesCount) {
              slide.removeClass(_loadingClass);
              images.animate({opacity:1}, {duration:_duration,complete:function() {
                if (jQuery.browser.msie && jQuery.browser.version < 9) jQuery(this).css({opacity:'auto'})
              }});
              slide.addClass(_loadedClass)
            }
          }
        }
      }
    }

    // gallery animation
    function prevSlide() {
      if (_disableWhileAnimating && _anim) return;
      _prevIndex = _currentIndex;
      if (_currentIndex > 0) _currentIndex--;
      else {
        if (_noCycle) return;
        else _currentIndex = _slideCount - 1;
      }
      switchSlide();
    }

    function nextSlide() {
      if (_disableWhileAnimating && _anim) return;
      _prevIndex = _currentIndex;
      if (_currentIndex < _slideCount - 1) _currentIndex++;
      else {
        if (_noCycle) return;
        else _currentIndex = 0;
      }
      switchSlide();
    }

    function refreshStatus() {
      if (_dynamicImageLoad) loadSlide(_slides.eq(_currentIndex));
      if (_pagerLinks.length) _pagerLinks.removeClass(_activeClass).eq(_currentIndex).addClass(_activeClass);
      if (_currentNum) _currentNum.text(_currentIndex + 1);
      if (_allNum) _allNum.text(_slideCount);
      _slides.eq(_prevIndex).removeClass(_activeClass);
      _slides.eq(_currentIndex).addClass(_activeClass);
      if (_noCycle) {
        if (_btnPrev.length) {
          if (_currentIndex == 0) _btnPrev.addClass(_disabledClass);
          else _btnPrev.removeClass(_disabledClass);
        }
        if (_btnNext.length) {
          if (_currentIndex == _slideCount - 1) _btnNext.addClass(_disabledClass);
          else _btnNext.removeClass(_disabledClass);
        }
      }
      if (typeof _onChange === 'function') {
        _onChange(_this, _slides, _prevIndex, _currentIndex);
      }


    }

    function switchSlide() {

      _anim = true;
      if (typeof _onBeforeFade === 'function') _onBeforeFade(_this, _slides, _prevIndex, _currentIndex);
      _slides.eq(_prevIndex).fadeOut(_duration, function() {
        _anim = false;
      });

      _slides.eq(_currentIndex).fadeIn(_duration, function() {
         if (typeof _onAfterFade === 'function') _onAfterFade(_this, _slides, _prevIndex, _currentIndex);
      });
      if (_autoHeight) _slides.eq(_currentIndex).parent().animate({height:_slides.eq(_currentIndex).outerHeight(true)}, {duration:_duration,queue:false});
      refreshStatus();
      autoSlide();
    }

    // autoslide function
    function autoSlide() {
      if (!_autoRotation || _hover) return;
      if (_timer) clearTimeout(_timer);
      _timer = setTimeout(nextSlide, _switchTime + _duration);
    }

    jQuery(window).focus(
        function() {
          autoSlide();
        }).blur(function() {
          clearTimeout(_timer);
        });

    if (_pauseOnHover) {
      _this.hover(function() {
        _hover = true;
        if (_timer) clearTimeout(_timer);
      }, function() {
        _hover = false;
        autoSlide();
      });
    }
    refreshStatus();
    autoSlide();
  });
}
