// DOM ready
$(function(){
  //initSel();
  initCustomForms();
  initClear();
  initTabs();
  initGallery();
  initNav();
  // find all the input elements with title attributes
  $('input[title!=""]').hint();
});

function initSel(){
  $('.shop-widget select').each(function(i){
    //if(i != 0) $(this).addClass('disabled');
    if ($(this).get(0).length < 2)
      $(this).removeClass('alt-sel').addClass('disabled');
    else
      $(this).removeClass('disabled').addClass('alt-sel');

    //$(this).change(function(){
      //var nextSel = $(this).parents('.row').eq(0).next().find('select');
      //var nextReplaceSel = nextSel.prev();

      //nextReplaceSel.removeClass('disabled').addClass('alt-sel');
    //});
  });
}

// init nav
function initNav(){
  var _dur = 20;
  $('#nav > ul > li').each(function(){
    var _this = $(this);
    var drop = _this.find('> ul');

    drop.show();
    _this.addClass('active');
    var h = drop.height();
    _this.removeClass('active');
    drop.css({'display':'none', height:0});


    _this.mouseenter(function(){
      _this.addClass('hover');
      drop.show().animate({height:h}, {queue:false, duration:_dur});
    }).mouseleave(function(){
      drop.show().animate({height:0}, {queue:false, duration:_dur, complete:function(){
        drop.css({'display':'none', height:0});
        _this.removeClass('hover');
      }});
    });
  });
}

// init gallery
function initGallery(){
  $('.g1').each(function(){
    $(this).gallery({
      listOfSlides: '.gallery div.frame > ul > li',
      switcher: '.switcher ul > li',
      nextBtn: '.next > a',
      prevBtn: '.prev > a',
      disableBtn:'hidden',
      slideElement: 3
    });
  });
}

// main gallery module
(function($) {
  $.fn.gallery = function(options) { return new Gallery(this.get(0), options); };
  function Gallery(context, options) { this.init(context, options); };
  Gallery.prototype = {
    options:{},
    init: function (context, options){
      this.options = $.extend({
        infinite: false,                //true = infinite gallery
        duration: 700,                  //duration of effect it 1000 = 1sec
        slideElement: 1,                //number of elements for a slide
        autoRotation: false,              //false = option is disabled; 1000 = 1sec
        effect: false,                  //false = slide; true = fade
        listOfSlides: 'ul > li',            //elements galleries
        switcher: false,                //false = option is disabled; 'ul > li' = elements switcher
        disableBtn: false,                //false = option is disabled; 'hidden' = class adds an buttons "prev" and "next"
        nextBtn: 'a.link-next, a.btn-next, a.next',   //button "next"
        prevBtn: 'a.link-prev, a.btn-prev, a.prev',   //button "prev"
        circle: true,                 //true = cyclic gallery; false = not cyclic gallery
        direction: false,               //false = horizontal; true = vertical
        event: 'click',                 //event for the buttons and switcher
        IE: false,                    //forced off effect it "fade" in IE
        autoHeight: false,                //auto height on fade
        easing: 'swing',
        onStart: function(){},
        onChange: function(){}
      }, options || {});
      var _el = $(context).find(this.options.listOfSlides);
      this.holder = $(context);
      if (this.options.effect) this.list = _el;
      else this.list = _el.parent();
      this.switcher = $(context).find(this.options.switcher);
      this.nextBtn = $(context).find(this.options.nextBtn);
      this.prevBtn = $(context).find(this.options.prevBtn);
      this.count = _el.index(_el.filter(':last'));

      if (this.options.switcher) this.active = this.switcher.index(this.switcher.filter('.active:eq(0)'));
      else this.active = _el.index(_el.filter('.active:eq(0)'));
      if (this.active < 0) this.active = 0;
      this.last = this.active;

      this.woh = _el.outerWidth(true);
      this.options.onStart(this);
      if (!this.options.direction) this.installDirections(this.list.parent().width());
      else {
        this.woh = _el.outerHeight(true);
        this.installDirections(this.list.parent().height());
      }

      if (!this.options.effect) {
        this.rew = this.count - this.wrapHolderW + 1;
        this.list.css({position: 'relative'}).css(this.dirAnimate());
      }
      else {
        this.rew = this.count;
        this.list.css({opacity: 0}).removeClass('active').eq(this.active).addClass('active').css({opacity: 1}).css('opacity', 'auto');
        this.switcher.removeClass('active').eq(this.active).addClass('active');
        if(this.options.autoHeight) this.list.parent().css({height: this.list.eq(this.active).outerHeight()});
      }
      this.flag = true;
      if (this.options.infinite){
        this.count++;
        this.active += this.count;
        this.list.append(_el.clone());
        this.list.append(_el.clone());
        this.list.css(this.dirAnimate());
      }

      this.initEvent(this, this.nextBtn, true);
      this.initEvent(this, this.prevBtn, false);
      if (this.options.disableBtn) this.initDisableBtn();
      if (this.options.autoRotation) this.runTimer(this);
      if (this.options.switcher) this.initEventSwitcher(this, this.switcher);
    },
    dirAnimate: function(){
      if (!this.options.direction) return {left: -(this.woh * this.active)};
      else return {top: -(this.woh * this.active)};
    },
    initDisableBtn: function(){
      this.prevBtn.removeClass('prev-'+this.options.disableBtn);
      this.nextBtn.removeClass('next-'+this.options.disableBtn);
      if (this.active == 0 || this.count+1 == this.wrapHolderW) this.prevBtn.addClass('prev-'+this.options.disableBtn);
      if (this.active == 0 && this.count+1 == 1 || this.count+1 <= this.wrapHolderW) this.nextBtn.addClass('next-'+this.options.disableBtn);
      if (this.active == this.rew) this.nextBtn.addClass('next-'+this.options.disableBtn);
    },
    installDirections: function(temp){
      this.wrapHolderW = Math.ceil(temp / this.woh);
      if (((this.wrapHolderW - 1) * this.woh + this.woh / 2) > temp) this.wrapHolderW--;
    },
    fadeElement: function(){
      if ($.browser.msie && this.options.IE){
        this.list.eq(this.last).css({opacity:0});
        this.list.removeClass('active').eq(this.active).addClass('active').css({opacity:'auto'});
      }
      else{
        this.list.eq(this.last).animate({opacity:0}, {queue:false, easing: this.options.easing, duration: this.options.duration});
        this.list.removeClass('active').eq(this.active).addClass('active').animate({
          opacity:1
        }, {queue:false, duration: this.options.duration, complete: function(){
          $(this).css('opacity','auto');
        }});
      }
      if(this.options.autoHeight) this.list.parent().animate({height: this.list.eq(this.active).outerHeight()}, {queue:false, duration: this.options.duration});
      if (this.options.switcher) this.switcher.removeClass('active').eq(this.active).addClass('active');
      this.last = this.active;
    },
    scrollElement: function($this){
      if (!$this.options.infinite) $this.list.stop().animate($this.dirAnimate(), {queue:false, easing: $this.options.easing, duration: $this.options.duration, complete:function(){ $this.options.onChange($this) }});
      else $this.list.stop().animate($this.dirAnimate(), $this.options.duration, $this.options.easing, function(){ $this.flag = true;$this.options.onChange($this); });
      if ($this.options.switcher) $this.switcher.removeClass('active').eq(Math.ceil($this.active / $this.options.slideElement)).addClass('active');
    },
    runTimer: function($this){
      if($this._t) clearTimeout($this._t);
      $this._t = setInterval(function(){
        if ($this.options.infinite) $this.flag = false;
        $this.toPrepare($this, true);
      }, this.options.autoRotation);
    },
    initEventSwitcher: function($this, el){
      el.bind($this.options.event, function(){
        $this.active = $this.switcher.index($(this)) * $this.options.slideElement;
        if($this._t) clearTimeout($this._t);
        if ($this.options.disableBtn) $this.initDisableBtn();
        if (!$this.options.effect) $this.scrollElement($this);
        else $this.fadeElement();
        if ($this.options.autoRotation) $this.runTimer($this);
        return false;
      });
    },
    initEvent: function($this, addEventEl, dir){
      addEventEl.bind($this.options.event, function(){
        if ($this.flag){
          if ($this.options.infinite) $this.flag = false;
          if($this._t) clearTimeout($this._t);
          $this.toPrepare($this, dir);
          if ($this.options.autoRotation) $this.runTimer($this);
        }
        return false;
      });
    },
    toPrepare: function($this, side){
      if (!$this.options.infinite){
        if (($this.active == $this.rew) && $this.options.circle && side) $this.active = -$this.options.slideElement;
        if (($this.active == 0) && $this.options.circle && !side) $this.active = $this.rew + $this.options.slideElement;
        for (var i = 0; i < $this.options.slideElement; i++){
          if (side) { if ($this.active + 1 <= $this.rew) $this.active++; }
          else { if ($this.active - 1 >= 0) $this.active--; }
        };
      }
      else{
        if ($this.active >= $this.count + $this.count && side) $this.active -= $this.count;
        if ($this.active <= $this.count-1 && !side) $this.active += $this.count;
        $this.list.css($this.dirAnimate());
        if (side) $this.active += $this.options.slideElement;
        else $this.active -= $this.options.slideElement;
      }
      if (this.options.disableBtn) this.initDisableBtn();
      if (!$this.options.effect) $this.scrollElement($this);
      else $this.fadeElement();
    },
    stop: function(){
      if (this._t) clearTimeout(this._t);
    },
    play: function(){
      if (this._t) clearTimeout(this._t);
      if (this.options.autoRotation) this.runTimer(this);
    }
  }
}(jQuery));

// init Clear Fields
function initClear(){
  clearFormFields({
    clearInputs: true,
    clearTextareas: true,
    passwordFieldText: true,
    addClassFocus: "focus",
    filterClass: "default"
  });
}

// 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.filter) o.filter = "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)) {
        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)) {
        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 tabs when page ready
function initTabs() {
  if(typeof ContentTabs !== 'undefined') {
    ContentTabs.init();
  }
}

// content tabs module
ContentTabs = {
  options: {
    classOnParent: false,
    hiddenClass: 'tab-hidden',
    visibleClass: 'tab-active',
    activeClass: 'active',
    tabsets: 'ul.tabset',
    tablinks: 'a.tab',
    event: 'click'
  },
  init: function(){
    this.createStyleSheet();
    this.getTabsets();
    return this;
  },
  createStyleSheet: function() {
    this.tabStyleSheet = document.createElement('style');
    this.tabStyleSheet.setAttribute('type', 'text/css');
    this.tabStyleRule = '.'+this.options.hiddenClass;
    this.tabStyleRule += '{position:absolute !important;left:-9999px !important;top:-9999px !important;display:block !important}';
    document.getElementsByTagName('head')[0].appendChild(this.tabStyleSheet);
    if (this.tabStyleSheet.styleSheet) {
      this.tabStyleSheet.styleSheet.cssText = this.tabStyleRule;
    } else {
      this.tabStyleSheet.appendChild(document.createTextNode(this.tabStyleRule));
    }
  },
  getTabsets: function() {
    this.tabsets = this.queryElements(this.options.tabsets);
    for(var i = 0; i < this.tabsets.length; i++) {
      this.initTabset(this.tabsets[i]);
    }
  },
  initTabset: function(tabset) {
    var tabLinks = this.queryElements(this.options.tablinks, tabset), instance = this;
    for(var i = 0; i < tabLinks.length; i++) {
      tabLinks[i]['on'+this.options.event] = function(){
        instance.switchTab(this, tabLinks);
        return false;
      }
      if(this.hasClass(this.options.classOnParent ? tabLinks[i].parentNode : tabLinks[i], this.options.activeClass)) {
        this.switchTab(tabLinks[i], tabLinks);
      }
    }
  },
  switchTab: function(link, set) {
    for(var i = 0; i < set.length; i++) {
      var curLink = set[i];
      var curTab = document.getElementById(curLink.href.substr(curLink.href.indexOf('#')+1));
      if(curLink === link) {
        this.addClass(this.options.classOnParent ? curLink.parentNode : curLink, this.options.activeClass);
        this.addClass(curTab,this.options.visibleClass);
        this.removeClass(curTab,this.options.hiddenClass);
      } else {
        this.removeClass(this.options.classOnParent ? curLink.parentNode : curLink, this.options.activeClass);
        this.removeClass(curTab,this.options.visibleClass);
        this.addClass(curTab,this.options.hiddenClass);
      }
    }
  },
  queryElements: function(selector, holder) {
    var box = holder || document;
    if(box.querySelectorAll) {
      return box.querySelectorAll(selector);
    } else {
      var res = [], selectorData = selector.split('.');
      var tagName = selectorData[0];
      var set = box.getElementsByTagName(tagName);
      if(selectorData.length > 1) {
        for(var i = 0; i < set.length; i++) {
          if(this.hasClass(set[i], selectorData[1])) res.push(set[i]);
        }
        return res;
      } else {
        return set;
      }
    }
  },
  hasClass: function (obj,cname) {
    return (obj.className ? obj.className.match(new RegExp('(\\s|^)'+cname+'(\\s|$)')) : false);
  },
  addClass: function (obj,cname) {
    if (!this.hasClass(obj,cname)) obj.className += " "+cname;
  },
  removeClass: function (obj,cname) {
    if (this.hasClass(obj,cname)) obj.className=obj.className.replace(new RegExp('(\\s|^)'+cname+'(\\s|$)'),' ');
  }
};

// custom forms script
var maxVisibleOptions = 18;
var all_selects = false;
var active_select = null;
var selectText = "please select";

function initCustomForms() {
  getElements();
  separateElements();
  //replaceRadios();
  //replaceCheckboxes();
  //replaceSelects();

  // hide drop when scrolling or resizing window
  if (window.addEventListener) {
    window.addEventListener("scroll", hideActiveSelectDrop, false);
    window.addEventListener("resize", hideActiveSelectDrop, false);
  }
  else if (window.attachEvent) {
    window.attachEvent("onscroll", hideActiveSelectDrop);
    window.attachEvent("onresize", hideActiveSelectDrop);
  }
}

function refreshCustomForms() {
  // remove prevously created elements
  if(window.inputs) {
    for(var i = 0; i < checkboxes.length; i++) {
      if(checkboxes[i].checked) {checkboxes[i]._ca.className = "checkboxAreaChecked";}
      else {checkboxes[i]._ca.className = "checkboxArea";}
    }
    for(var i = 0; i < radios.length; i++) {
      if(radios[i].checked) {radios[i]._ra.className = "radioAreaChecked";}
      else {radios[i]._ra.className = "radioArea";}
    }
    for(var i = 0; i < selects.length; i++) {
      var newText = document.createElement('div');
      if (selects[i].options[selects[i].selectedIndex].title.indexOf('image') != -1) {
        newText.innerHTML = '<img src="'+selects[i].options[selects[i].selectedIndex].title+'" alt="" />';
        newText.innerHTML += '<span>'+selects[i].options[selects[i].selectedIndex].text+'</span>';
      } else {
        newText.innerHTML = selects[i].options[selects[i].selectedIndex].text;
      }
      document.getElementById("mySelectText"+i).innerHTML = newText.innerHTML;
    }
  }
}

// getting all the required elements
function getElements() {
  // remove prevously created elements
  if(window.inputs) {
    for(var i = 0; i < inputs.length; i++) {
      inputs[i].className = inputs[i].className.replace('outtaHere','');
      if(inputs[i]._ca) inputs[i]._ca.parentNode.removeChild(inputs[i]._ca);
      else if(inputs[i]._ra) inputs[i]._ra.parentNode.removeChild(inputs[i]._ra);
    }
    for(i = 0; i < selects.length; i++) {
      selects[i].replaced = null;
      selects[i].className = selects[i].className.replace('outtaHere','');
      selects[i]._optionsDiv._parent.parentNode.removeChild(selects[i]._optionsDiv._parent);
      selects[i]._optionsDiv.parentNode.removeChild(selects[i]._optionsDiv);
    }
  }

  // reset state
  inputs = new Array();
  selects = new Array();
  labels = new Array();
  radios = new Array();
  radioLabels = new Array();
  checkboxes = new Array();
  checkboxLabels = new Array();
  for (var nf = 0; nf < document.getElementsByTagName("form").length; nf++) {
    if(document.forms[nf].className.indexOf("default") < 0) {
      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;
        }
      }
    }
  }
}

//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]) {
      if(radios[q].checked) {
        radioLabels[q].className += "radioAreaCheckedLabel";
      }
      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;
        if(radioLabels[q]) radioLabels[q].className = radioLabels[q].className.replace("radioAreaCheckedLabel","");
      }
    }
    radios[who].checked = true;
    if(radioLabels[who] && radioLabels[who].className.indexOf("radioAreaCheckedLabel") < 0) {
      radioLabels[who].className += " radioAreaCheckedLabel";
    }
    checkRadios(who);

    if(window.$ && window.$.fn) {
      $(radios[who]).trigger('change');
    }
  }
}

//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";
      if(checkboxLabels[q]) {
        checkboxLabels[q].className += " checkboxAreaCheckedLabel"
      }
    }
    else {
      checkboxArea.className = "checkboxArea";
    }
    checkboxArea.id = "myCheckbox" + q;
    checkboxes[q].parentNode.insertBefore(checkboxArea, checkboxes[q]);
    checkboxes[q]._ca = checkboxArea;
    checkboxArea.onclick = 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;
  }
  if(checkboxLabels[who]) {
    if(checkboxes[who].checked) {
      if(checkboxLabels[who].className.indexOf("checkboxAreaCheckedLabel") < 0) {
        checkboxLabels[who].className += " checkboxAreaCheckedLabel";
      }
    } else {
      checkboxLabels[who].className = checkboxLabels[who].className.replace("checkboxAreaCheckedLabel", "");
    }
  }

}

//changing checkboxes
function changeCheckboxes(who) {
  setTimeout(function(){
    if(checkboxes[who].checked) {
      checkCheckboxes(who, true);
    } else {
      checkCheckboxes(who, false);
    }
  },10);
}

// 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);
  if(window.$ && window.$.fn) {
    $(checkboxes[who]).trigger('change');
  }
}

// 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
}

// replace selects
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);

      //insert select div
      selects[q].parentNode.insertBefore(selectArea, selects[q]);
      //build & place options div

      var optionsDiv = document.createElement("div");
      var optionsList = document.createElement("ul");
      var optionsListHolder = document.createElement("div");

      optionsListHolder.className = "select-center";
      optionsListHolder.innerHTML =  "<div class='select-center-right'></div>";
      optionsDiv.innerHTML += "<div class='select-top'><div class='select-top-left'></div><div class='select-top-right'></div></div>";

      optionsListHolder.appendChild(optionsList);
      optionsDiv.appendChild(optionsListHolder);

      selects[q]._optionsDiv = optionsDiv;
      selects[q]._options = optionsList;

      optionsDiv.style.width = stWidth + "px";
      optionsDiv._parent = selectArea;

      optionsDiv.className = "optionsDivInvisible";
      optionsDiv.id = "optionsDiv"+q;

      if(selects[q].className.length) {
        optionsDiv.className += ' drop-'+selects[q].className;
      }

      populateSelectOptions(selects[q]);
      optionsDiv.innerHTML += "<div class='select-bottom'><div class='select-bottom-left'></div><div class='select-bottom-right'></div></div>";
      document.body.appendChild(optionsDiv);
      selects[q].replaced = true;

      // too many options
      if(selects[q].options.length > maxVisibleOptions) {
        optionsDiv.className += ' optionsDivScroll';
      }

      //hide the select field
      if(selects[q].className.indexOf('default') != -1) {
        selectArea.style.display = 'none';
      } else {
        selects[q].className += " outtaHere";
      }
    }
  }
  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);
    }

    // hidden default option
    if(me.options[w].className.indexOf('default') != -1) {
      optionHolder.style.display = 'none'
    }

    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,true);
    }
  }
  if (me.disabled) {
    me._disabled.style.display = "block";
  } else {
    me._disabled.style.display = "none";
  }
}

//selecting me
function selectMe(selectFieldId,linkNo,selectNo,quiet) {
  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 (!quiet && all_selects) {
    if(typeof selectField.onchange === 'function') {
      selectField.onchange();
    }
    if(window.$ && window.$.fn) {
      $(selectField).trigger('change');
    }
  }
}

//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.width = divArea.offsetWidth + 'px';
    _elem.style.top = findPosY(divArea) + divArea.offsetHeight + '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(_elem._parent.className.indexOf('selectAreaActive') < 0) {
      _elem._parent.className += ' selectAreaActive';
    }

    if(document.documentElement) {
      document.documentElement.onclick = hideSelectOptions;
    } else {
      window.onclick = hideSelectOptions;
    }
  }
  else if(_elem.className.indexOf("optionsDivVisible") != -1) {
    hideActiveSelectDrop();
  }

  // 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 hideActiveSelectDrop() {
  if(active_select) {
    active_select.style.height = "auto";
    active_select.className = active_select.className.replace('optionsDivVisible', '');
    active_select.className = active_select.className.replace('optionsDivInvisible', '');
    active_select._parent.className = active_select._parent.className.replace('selectAreaActive','')
    active_select.className += " optionsDivInvisible";
    active_select = false;
  }
}

function hideSelectOptions(e) {
  if(active_select) {
    if(!e) e = window.event;
    var _target = (e.target || e.srcElement);
    if(!isElementBefore(_target,'selectArea') && !isElementBefore(_target,'optionsDiv')) {
      hideActiveSelectDrop();
      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)
  return _parent.className && _parent.className.indexOf(_class) != -1;
}

function findPosY(obj) {
  if (obj.getBoundingClientRect) {
    var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
    var clientTop = document.documentElement.clientTop || document.body.clientTop || 0;
    return Math.round(obj.getBoundingClientRect().top + scrollTop - clientTop);
  } else {
    var posTop = 0;
    while (obj.offsetParent) {posTop += obj.offsetTop; obj = obj.offsetParent;}
    return posTop;
  }
}

function findPosX(obj) {
  if (obj.getBoundingClientRect) {
    var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft;
    var clientLeft = document.documentElement.clientLeft || document.body.clientLeft || 0;
    return Math.round(obj.getBoundingClientRect().left + scrollLeft - clientLeft);
  } else {
    var posLeft = 0;
    while (obj.offsetParent) {posLeft += obj.offsetLeft; obj = obj.offsetParent;}
    return posLeft;
  }
}

