// page init
$(function(){
  initCustomForms();
  initAccordion();
  initGallery();
  initTabs();
});

// tabs function
function initTabs() {
  $('ul.tabset').each(function(){
    var _list = $(this);
    var _links = _list.find('a.tab');
    _links.each(function() {
      var _link = $(this);
      var _href = _link.attr('href');
      var _tab = $(_href);
      if(_link.hasClass('active')) _tab.show();
      else _tab.hide();
      _link.click(function(){
        _links.filter('.active').each(function(){
          $($(this).removeClass('active').attr('href')).hide();
        });
        _link.addClass('active');
        _tab.show();
        return false;
      });
    });
  });
}

// scroll gallery init
function initGallery() {
  $('#carusel').scrollGallery({
    sliderHolder: '>div',
    slider:'>ul',
    slides: '>li',
    btnPrev:'a.link-prev',
    btnNext:'a.link-next',
    activeClass:'active',
    pauseOnHover:false,
    autoRotation:true,
    switchTime:3000,
    duration:1000
  });
}

// accordion init
function initAccordion() {
  var _activeClass = 'active';
  var _slideSpeed = 500;

  $('ul.accordion').each(function(){
    var _accordion = $(this);
    var _items = _accordion.find('li:has(div)');
    _items.each(function(){
      var _holder = $(this);
      var _opener = _holder.find('>a.opener');
      var _slider = _holder.find('>div.slide');
      _opener.click(function(){
        var _levelItems = _holder.parent().children(':has(div)').not(_holder);
        if(_holder.hasClass(_activeClass)) {
          _slider.slideUp(_slideSpeed);
          _holder.removeClass(_activeClass);
        } else {
          _holder.addClass(_activeClass);
          _slider.slideDown(_slideSpeed);
          // collapse others
          _levelItems.removeClass(_activeClass).find('>div.slide:visible').slideUp(_slideSpeed);
        }
        return false;
      });

      if(_holder.hasClass(_activeClass)) _slider.show();
      else _slider.hide();
    });
  });
}

// scrolling gallery plugin
jQuery.fn.scrollGallery = function(_options){
  var _options = jQuery.extend({
    sliderHolder: '>div',
    slider:'>ul',
    slides: '>li',
    pagerLinks:'div.pager a',
    btnPrev:'a.link-prev',
    btnNext:'a.link-next',
    activeClass:'active',
    pauseOnHover:true,
    autoRotation:false,
    switchTime:5000,
    duration:650,
    easing:'swing',
    event:'click',
    vertical:false,
    step:false
  },_options);

  return this.each(function(){
    // gallery options
    var _this = jQuery(this);
    var _sliderHolder = jQuery(_options.sliderHolder, _this);
    var _slider = jQuery(_options.slider, _sliderHolder);
    var _slides = jQuery(_options.slides, _slider);
    var _btnPrev = jQuery(_options.btnPrev, _this);
    var _btnNext = jQuery(_options.btnNext, _this);
    var _pagerLinks = jQuery(_options.pagerLinks, _this);
    var _pauseOnHover = _options.pauseOnHover;
    var _autoRotation = _options.autoRotation;
    var _activeClass = _options.activeClass;
    var _easing = _options.easing;
    var _duration = _options.duration;
    var _switchTime = _options.switchTime;
    var _controlEvent = _options.event;
    var _step = _options.step;
    var _vertical = _options.vertical;

    // gallery init
    if(!_slides.length) return;
    var _currentStep = 0;
    var _sumWidth = 0;
    var _sumHeight = 0;
    var _hover = false;
    var _stepWidth;
    var _stepHeight;
    var _stepCount;
    var _offset;
    var _timer;
    var _animateProperty = (_vertical ? 'marginTop' : 'marginLeft');

    _slides.each(function(){
      _sumWidth+=$(this).outerWidth(true);
      _sumHeight+=$(this).outerHeight(true);
    });

    // calculate gallery offset
    function recalcOffsets() {
      if(_vertical) {
        if(_step) {
          _stepHeight = _slides.eq(_currentStep).outerHeight(true);
          _stepCount = Math.ceil((_sumHeight-_sliderHolder.height())/_stepHeight)+1;
          _offset = -_stepHeight*_currentStep;
        } else {
          _stepHeight = _sliderHolder.height();
          _stepCount = Math.ceil(_sumHeight/_stepHeight);
          _offset = -_stepHeight*_currentStep;
          if(_offset < _stepHeight-_sumHeight) _offset = _stepHeight-_sumHeight;
        }
      } else {
        if(_step) {
          _stepWidth = _slides.eq(_currentStep).outerWidth(true);
          _stepCount = Math.ceil((_sumWidth-_sliderHolder.width())/_stepWidth)+1;
          _offset = -_stepWidth*_currentStep;
        } else {
          _stepWidth = _sliderHolder.width();
          _stepCount = Math.ceil(_sumWidth/_stepWidth);
          _offset = -_stepWidth*_currentStep;
          if(_offset < _stepWidth-_sumWidth) _offset = _stepWidth-_sumWidth;
        }
      }
    }

    // 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(_currentStep != _ind) {
            _currentStep = _ind;
            switchSlide();
          }
          return false;
        });
      });
    }

    // gallery animation
    function prevSlide() {
      recalcOffsets();
      if(_currentStep > 0) _currentStep--;
      else _currentStep = _stepCount-1;
      switchSlide();
    }
    function nextSlide() {
      recalcOffsets();
      if(_currentStep < _stepCount-1) _currentStep++;
      else _currentStep = 0;
      switchSlide();
    }
    function refreshStatus() {
      if(_pagerLinks.length) _pagerLinks.removeClass(_activeClass).eq(_currentStep).addClass(_activeClass);
    }
    function switchSlide() {
      recalcOffsets();
      if(_vertical) _slider.animate({marginTop:_offset},{duration:_duration,queue:false,easing:_easing});
      else _slider.animate({marginLeft:_offset},{duration:_duration,queue:false,easing:_easing});
      refreshStatus();
      autoSlide();
    }

    // autoslide function
    function autoSlide() {
      if(!_autoRotation || _hover) return;
      if(_timer) clearTimeout(_timer);
      _timer = setTimeout(nextSlide,_switchTime+_duration);
    }
    if(_pauseOnHover) {
      _this.hover(function(){
        _hover = true;
        if(_timer) clearTimeout(_timer);
      },function(){
        _hover = false;
        autoSlide();
      });
    }
    refreshStatus();
    autoSlide();
  });
}

// custom forms script
var _selectHeight = 26;
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 initCustomForms() {
  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() {
//    var detailsForm = $('form, .details-form')[0];
  //  for(var nfi = 0; nfi < detailsForm.getElementsByTagName("input").length; nfi++) {inputs.push(detailsForm.getElementsByTagName("input")[nfi]);}
  //  for(var nfl = 0; nfl < detailsForm.getElementsByTagName("label").length; nfl++) {labels.push(detailsForm.getElementsByTagName("label")[nfl]);}
  //  for(var nfs = 0; nfs < detailsForm.getElementsByTagName("select").length; nfs++) {selects.push(detailsForm.getElementsByTagName("select")[nfs]);}
  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 == "select") {
      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 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;
}

