/*
############################################################################
#
# Part of the Fluevog site programming
# Copyright (C) 2001-2009 Damon Harper <usrbin@usrbin.ca>
# usrbin design + programming
#
# This program is governed by the agreed upon license between Damon Harper
# d.b.a. usrbin design + programming, and John Fluevog Boots & Shoes Ltd.
# This program may be modified for internal use but may not be sold or
# otherwise distributed without express written permission from the
# copyright holder.
#
############################################################################
*/

function isDef(o) {
  return typeof(o)!='undefined';
}
function isStr(o) {
  return typeof(o)=='string';
}
function isBool(o) {
  return typeof(o)=='boolean';
}

function getById(id) {
  if(!isStr(id))
    return id;
  if(document.getElementById)
    return document.getElementById(id);
  if(document.all)
    return document.all[id];
  return null;
}

function getByClass(classname, node, tag) {
  if(node==null)
    node=document;
  if(tag==null)
    tag='*';
  var elements=new Array();
  var idx=0;
  var e=node.getElementsByTagName(tag);
  var re=new RegExp("(^|\\s)"+classname+"(\\s|$)");
  for(var i=0; i<e.length; i++) {
    if(re.test(e[i].className)) {
      elements[idx]=e[i];
      idx++;
    }
  }
  return elements;
}

function getByTagName(tag, node) {
  if(node==null)
    node=document;
  return node.getElementsByTagName(tag);
}

function hasClass(node, classname) {
  var re=new RegExp("(^|\\s)"+classname+"(\\s|$)");
  return re.test(node.className);
}

function addClass(node, classname) {
  var re=new RegExp("(^|\\s)"+classname+"(\\s|$)");
  if(!re.test(node.className))
    node.className+=(node.className ? ' ' : '')+classname;
}

function delClass(node, classname) {
  var re=new RegExp("(^|\\s)"+classname+"(\\s|$)", 'g');
  if(node.className)
    node.className=node.className.replace(re, ' ').replace(/^\s+/, '').replace(/\s+$/, '').replace(/\s{2,}/, ' ');
}

function set_cookie(name, value) {
  document.cookie=escape(name)+'='+escape(value);
}

function get_cookie(name) {
  var cookies=document.cookie.split(/\s*;\s*/);
  for(var i=0; i<cookies.length; i++) {
    var idx=cookies[i].indexOf('=');
    if(unescape(cookies[i].substr(0, idx))==name)
      return unescape(cookies[i].substr(idx+1));
  }
  return null;
}

function toggle_blocks() {
  var message='';
  var matchclass=new RegExp("^(show|hide)if(not)?-([^=\\s]+)=(\\S*)$");
  var blocks=getByClass("(show|hide)if(not)?-\\S+");
  for(var i=0; i<blocks.length; i++) {
    var show='undef';
    var classes=blocks[i].className.split(/\s+/);
    for(var j=0; j<classes.length; j++) {
      var matches=matchclass.exec(classes[j]);
      if(matches) {
        var type=matches[1];
        var want=matches[2] ? false : true;
        var control=matches[3];
        var value=matches[4];
        message+=control+' '+type+' '+value+'\n';
        if(show=='undef')
          show=type=='hide';
        var obj=getById(control);
        var button;
        if(obj && obj.tagName=='SELECT') { // workaround for IE
          if((obj.options[obj.selectedIndex].value==value)==want)
            show=type!='hide';
        } else if(button=getById(control+'='+value)) {
          if((button && button.checked)==want)
            show=type!='hide';
        } else if(obj) {
          if((trim(obj.value)==value)==want)
            show=type!='hide';
        }
      }
    }
    if(show && show!='undef') {
      var tag=blocks[i].tagName;
      var display;
      if(tag=='SPAN')
        display='inline';
      else if(tag=='TR')
        display='table-row';
      else if(tag=='TD' || tag=='TH')
        display='table-cell';
      if(!display)
        display='block';
      try {
        blocks[i].style.display=display;
      } catch(e) {
        blocks[i].style.display='block'; // IE doesn't understand table-*
      }
    } else
      blocks[i].style.display='none';
  }
}

// zoom images
(function($) {
  $.fn.extend({
    zoom_image: function(zoom_src, zoom_width, zoom_height, o) {
      o=$.extend({
      }, o);
      return this.each(function() {
        if(zoom_src && zoom_width && zoom_height) {
          $(this).css({
              'cursor' : 'pointer'
          });
          $(this).bind('click', function() {
            var added=false;
            if(typeof document.body.style.maxHeight==="undefined") { //IE6
              $('body','html').css({height: '100%', width: '100%'});
              $('html').css('overflow', 'hidden');
              if(getById('zoom-iefix')===null) { // hide selects
                $('body').append('<iframe id="zoom-iefix"></iframe>');
                added=true;
              }
            } else {
              if(getById('zoom-blackout')===null) {
                added=true;
              }
            }
            if(added) {
              $('body').append('<div id="zoom-blackout"></div><div id="zoom-box"><img id="zoom-image" /></div>');
              $('#zoom-blackout,#zoom-box,#zoom-image').click(kill_zoom);
              $(document).bind('keydown', zoom_key);
            }
            $('#zoom-box').css({marginLeft: '-'+parseInt((zoom_width/2),10)+'px', width: zoom_width+'px'});
            if(!($.browser.msie && $.browser.version<7)) //non-IE6
              $('#zoom-box').css({marginTop: '-'+parseInt((zoom_height/2),10) + 'px', height: zoom_height+'px'});
            $('#zoom-image').attr('src', zoom_src).css({
              width: zoom_width,
              height: zoom_height
            });
            $('#zoom-box').css({display: 'block'});
            function kill_zoom() {
              $('#zoom-box').fadeOut('fast', function(){
                $('#zoom-box,#zoom-blackout,#zoom-iefix').trigger('unload').unbind().remove();
              });
              if(typeof document.body.style.maxHeight=="undefined") { //IE6
		$('body','html').css({height: 'auto', width: 'auto'});
		$('html').css({overflow: ''});
              }
              $(document).unbind('keydown', zoom_key);
              return false;
            }
            function zoom_key(e) {
              kill_zoom();
              return false;
            }
          });
        } else {
          $(this).css({
              'cursor' : 'default'
          });
          $(this).unbind('click');
        }
      });
    }
  });
})(jQuery);

// gender/size inputs
function size_input_setup(sizes, inventory, current_gender, current_size, input_gender, input_size, size_inventory) {
  $(document).ready(function() {
    if(!input_gender)
      input_gender='input_gender';
    if(!input_size)
      input_size='input_size';
    if(!size_inventory)
      size_inventory='size_inventory';
    input_gender=getById(input_gender);
    input_size=getById(input_size);
    size_inventory=getById(size_inventory);
    if(input_gender && input_size) {
      if(size_inventory) {
        var size_changefunc=function(e) {
          var genderval=input_gender.options[input_gender.selectedIndex].value;
          var sizeval=input_size.options[input_size.selectedIndex].value;
          if(sizeval)
            set_cookie('current_size', sizeval);
          var qty=null;
          if(sizes[genderval] && sizes[genderval][1][sizeval] && inventory[sizes[genderval][1][sizeval][1]])
            qty=sizes[genderval][1][sizeval][1];
          if(qty)
            size_inventory.innerHTML='<img src="'+inventory[qty]+'" />';
          else
            size_inventory.innerHTML='';
        };
      }
      var gender_changefunc=function(e, sizeval) {
        var genderval=input_gender.options[input_gender.selectedIndex].value;
        if(genderval)
          set_cookie('current_gender', genderval);
        if(!sizeval)
          sizeval=input_size.options[input_size.selectedIndex].value;
        if(!sizeval)
          sizeval=get_cookie('current_size');
        input_size.options.length=1;
        if(sizes[genderval])
          for(var i in sizes[genderval][1]) {
            input_size.options[input_size.options.length]=new Option(sizes[genderval][1][i][0], i);
            if(i==sizeval)
              input_size.selectedIndex=input_size.options.length-1;
          }
        size_changefunc();
      };
      if(!current_gender)
        current_gender=get_cookie('current_gender');
      input_gender.options.length=0;
      for(var i in sizes) {
        input_gender.options[input_gender.options.length]=new Option(sizes[i][0], i);
        if(i==current_gender)
          input_gender.selectedIndex=input_gender.options.length-1;
      }
      if(size_inventory)
        $(input_size).change(size_changefunc);
      $(input_gender).change(gender_changefunc);
      gender_changefunc(null, current_size);
    }
  });
}

//checkout
function checkout_step(step) {
  document.forms['checkout'].elements['checkout_target'].value=step;
  document.forms['checkout'].submit();
  return false;
}

//checkout delete item
function checkout_delete(cartID) {
  document.forms['checkout'].elements['delete'].value=cartID;
  document.forms['checkout'].submit();
  return false;
}

function please_wait() {
  if($('#please-wait').length) {
    window.setTimeout(function() {
      if(typeof document.body.style.maxHeight==="undefined") { //IE6
        $('body','html').css({height: '100%', width: '100%'});
        $('html').css('overflow', 'hidden');
        $('body').append('<iframe id="blackout-iefix"></iframe>');
      }
      $('body').append('<div id="blackout-mask"></div>');
      $('#please-wait').css({display: 'block'});
    }, 1500);
  }
  return true;
}

// floaters
function create_floater(object, floaterid, o) {
  o=$.extend({
    type: 'GET',
    loading_html: 'Please wait...'
  }, o);
  var loaded=false;
  // Note: the iframe is a fix for IE, which otherwise renders select
  // boxes overtop of the modal window.
  var iframeid=floaterid+'-iframe';
  var iframeobj=$('#'+iframeid);
  if(iframeobj.length==0) {
    $(document.body).append('<iframe id="'+iframeid+'"/>');
    iframeobj=$('#'+iframeid);
    iframeobj.css({
        'background-color': '#ffffff',
        border: 'none',
        position: 'absolute',
        display: 'inline',
        'z-index': 10
      })
      .addClass('floater-iframe')
      .hide();
  }
  var floaterobj=$('#'+floaterid);
  if(floaterobj.length==0) {
    floaterobj=$('<div id="'+floaterid+'"/>')
      .appendTo('body')
      .css({
        'background-color': '#ffffff',
        position: 'absolute',
        display: 'inline',
        'z-index': 20
      })
      .addClass('floater')
      .hide()
      .html(o.loading_html);
  }
  function showatmouse(e) {
    var top=e.pageY+o.off_vert;
    var left=e.pageX+o.off_horiz;
    if(top+floaterobj.height()-$(window).scrollTop()>$(window).height()) {
      top=e.pageY-o.off_vert-floaterobj.height();
      if(top-$(window).scrollTop()<0)
        top=$(window).scrollTop();
    }
    if(left+floaterobj.width()-$(window).scrollLeft()>$(window).width()) {
      left=e.pageX-o.off_vert-floaterobj.width();
      if(left-$(window).scrollLeft()<0)
        left=$(window).scrollLeft();
    }
    $(iframeobj).css({
      top: top+'px',
      left: left+'px',
      width: $(floaterobj).width(),
      height: $(floaterobj).height()
    }).show();
    $(floaterobj).css({
      top: top+'px',
      left: left+'px'
    }).show();
    return false;
  }

  $(object).bind('mouseover', function(e) {
    e.preventDefault();
    $('.floater').hide();
    $('.floater-iframe').hide();
    showatmouse(e);
    $(object).bind('mousemove', showatmouse);
    if(!loaded) {
      loaded=true;
      if(o.html) {
        $(floaterobj).html(o.html);
        showatmouse(e);
      } else
        $.ajax({
          type: o.type,
          url: o.url,
          data: o.data,
          success: function(msg) {
            $(floaterobj).html(msg);
            showatmouse(e);
          }
        });
    }
    return false;
  });

  $(object).bind('mouseout', function(e) {
    $(object).unbind('mousemove', showatmouse);
    $(floaterobj).hide();
    $(iframeobj).hide();
    return false;
  });
}

// FC gallery popups
(function($) {
  $.fn.extend({
    fc_gallery_popup: function(submissionID, img, o) {
      o=$.extend({
        off_horiz: 10,
        off_vert: 10,
        html: img
      }, o);
      if(submissionID && img)
        return this.each(function() {
          create_floater(this, 'fc-submission-floater-'+submissionID, o);
        });
      return false;
    }
  });
})(jQuery);

// FC voting
function fc_vote(submissionID, html) {
  $.ajax({
    type: 'GET',
    url: 'fc_vote.php',
    data: 'submissionID='+escape(submissionID)
  });
  $('#fc-vote-'+submissionID).html(html);
  return false;
}

function colour_preview(id, images) {
  $(document).ready(function() {
    var timer=false;
    var size=47*images;
    $('#colour-preview-'+id).css({height: size, width: '47px', opacity: 0});
    $('#colour-preview-'+id+' a').each(function() {
      $(this).mouseover(function() {
        $(this).addClass('hover');
      });
      $(this).mouseout(function() {
        $(this).removeClass('hover');
      });
    });
    function hide() {
      $('#colour-preview-'+id).css({'z-index': 10}).animate({height: 0, opacity: 0}, 'fast', function() {$(this).hide();});
    }
    $('#itembox-'+id).each(function() {
      $(this).mouseover(function() {
        if(timer)
          clearTimeout(timer);
        $('#colour-preview-'+id).css({'z-index': 100}).show().animate({height: size, opacity: 1}, 'fast');
      });
      $(this).mouseout(function() {
        $('#colour-preview-'+id).css({'z-index': 50});
        timer=setTimeout(function(){hide();}, 200);
      });
    });
  });
}

// Standard page setup
$(document).ready(function() {
  toggle_blocks();
});

