/*
############################################################################
#
# Part of the Jones Soda site code
# Copyright (C) 2006 Damon Harper
# usrbin design + programming - http://usrbin.ca/
#
# This program is governed by the agreed upon license between Damon Harper
# d.b.a. usrbin design + programming, and AMG Media Inc.  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 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((obj.value==value)==want)
            show=type!='hide';
        }
      }
    }
    if(show && show!='undef')
      blocks[i].style.display=blocks[i].tagName=='SPAN' ? 'inline' : 'block';
    else
      blocks[i].style.display='none';
  }
}

$(document).ready(function() {
  toggle_blocks();
});

function spinner(id, adjustment, min, max) {
  var node;
  if(node=getById(id)) {
    var val=parseInt(node.value);
    if(!val) val=0;
    val+=adjustment;
    if(val<min)
      val=min;
    else if(val>max)
      val=max;
    node.value=val;
  }
}

function form_submit() {
  var before;
  var after;
  if((before=getById('submit-before')) && (after=getById('submit-after'))) {
    before.style.display='none';
    after.style.display='block';
  }
  return true;
}

function focus_first_input() {
  document.forms['default'].elements[0].focus();
}

var _timeout_mycountlines=false;

function timeout_mycountlines() {
  if(!_timeout_mycountlines) {
    _timeout_mycountlines=setTimeout(timeout_mycountlines_function, 500);
  }
}

function timeout_mycountlines_function() {
  if(_timeout_mycountlines) {
    mycountlines();
    _timeout_mycountlines=false;
  }
}

function mycountlines() {
  return countlines(labeltext_lines, labeltext_chars, 'labeltext', 'lines', 'chars');
}

function countlines(max_lines, max_chars, input, output_lines, output_chars) {
  if(document.getElementById) {
    var lines=0;
    var chars=0;
    var total_chars=0;
    if(input=document.getElementById(input)) {
      if(output_lines)
        output_lines=document.getElementById(output_lines);
      if(output_chars)
        output_chars=document.getElementById(output_chars);
      for(var c=0; c<input.value.length; c++) {
        var ch=input.value.charCodeAt(c);
        if(ch==0x0a) {
          lines++;
          chars=0;
        } else if(ch!=0x0d) {
          chars++;
          total_chars++;
          if(chars>max_chars) {
            lines++;
            chars=0;
          }
        }
      }
      if(chars>0)
        lines++;
      var prefix=lines>max_lines ? '<span style="color: #ff0000;">' : '';
      var suffix=lines>max_lines ? '</span>' : '';
      if(output_lines)
        output_lines.innerHTML=prefix+lines+suffix;
      if(output_chars)
        output_chars.innerHTML=prefix+total_chars+suffix;
      return lines<=max_lines;
    }
  }
  return false;
}

function add_flavour_input() {
  var n;
  for(n=0; n<num_flavours; n++) {
    var node=getById('flavour'+n);
    if(node && node.style.display=='none') {
      node.style.display='block';
      break;
    }
  }
  if(n>=num_flavours-1)
    getById('flavour-more').style.display='none';
}

function recalculate_cases() {
  var total=0;
  for(var n=0; n<num_flavours; n++) {
    var add=parseInt(getById('cases'+n).value);
    if(add) total+=add;
  }
  getById('cases-total').innerHTML=total;
}

function preview_enlarge(id, zoom_src, zoom_width, zoom_height) {
  $(document).ready(function() {
    $('#'+id).bind('click', function() {
      var blackout=$('<div/>');
      $(blackout).attr('id', 'blackout').css({ 'opacity' : '0' }).animate({
        'opacity' : '.8'
      }, 500).css({
        'width' : $(document).width(),
        'height' : $(document).height()
      });
                   
      $('body').append(blackout);

      var zoom=$('<img/>');
      var width = $('body').width();
      $(zoom).attr('src', zoom_src).attr('id', 'zoom').css({
        'left' : Math.floor(width/2-zoom_width/2)
      });

      $('body').append(zoom).children('#zoom').hide();
      $(zoom).fadeIn(500, function() {
        var killit=function() {
          $('#zoom').fadeOut(500, function() {
            $(this).remove();
          });
          $('#blackout').fadeOut(500, function() {
            $(this).remove();
          });
        };
        $('#zoom').bind('click', killit);
        $('#blackout').bind('click', killit);
      });
    });
  });
}
