function JumpTo(selObj) {
  if (selObj.selectedIndex > 0) {
    if (selObj.options[selObj.selectedIndex].value != "") {
      self.location=selObj.options[selObj.selectedIndex].value;
    }
  }
}

function imageSwap(id, newSrc) {
  var object = dojo.byId(id);
  if (object) {
    if (! object.savesrc) {
      object.savesrc = object.src;
    }
    object.src = newSrc;
  }
}
function imageRestore(id) {
  var object = dojo.byId(id);
  if (object) {
    if (object.savesrc) {
      object.src = object.savesrc;
    }
  }
}

function doHighlightNode(node, color, duration) {
  if (node) {
    var effect = dojo.lfx.html.highlight([node], color, duration);
    effect.play();
  }
}
function doHighlighNodeByName(nodeName, color, duration) {
  doHighlightNode(dojo.byId(nodeName), color, duration);
}

function trim(input) {
  if (! input) {
    return '';
  }
	var i;
	var j;
	if (input.length == 0) {
		return "";
	}
	for (i = 0; i < input.length;i++) {
		if (input.charAt(i) != " ") {
			break;
		}
	}
	if (i >= input.length) {
		return "";
	}
	if (i > 0) {
		input = input.substring(i);
	}
	for (i = input.length - 1; i >=0; i--) {
		if (input.charAt(i) != " ") {
			break;
		}
	}
	if (i == input.length - 1) {
	} else {
		input = input.substring(0,i + 1);
	}
	return input;
}

function validFunction(fn) {
  return (typeof fn == 'function');
}

function addCommas(nStr) {
  nStr += '';
  x = nStr.split('.');
  x1 = x[0];
  x2 = x.length > 1 ? '.' + x[1] : '';
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1)) {
    x1 = x1.replace(rgx, '$1' + ',' + '$2');
  }
  return x1 + x2;
}
function formatNumberInteger(num) {
  if (! num) {
    num = 0;
  } 
  return addCommas(num);
}
function formatNumberDeicmal(num) {
  return formatNumberDecimal(num);
}
function formatNumberDecimal(num) {
  num = toNumber(num);
  return num.toFixed(2);
}
function toNumber(num) {
  if (! num) {
    num = 0;
  }
  num = new Number(num);
  return num;
}
function updateCartCount(count) {
  count = '' + count;
  count = count.replace(/,/g, '');
  count = formatNumberInteger(toNumber(count));
  $('#headerCartCount').html(count);
}


String.prototype.escapeHTML = function () {                                       
  return(                                                                 
    this.replace(/&/g,'&amp;').                                         
    replace(/>/g,'&gt;').                                           
    replace(/</g,'&lt;').                                           
    replace(/"/g,'&quot;')                                         
  );
};

function hashSize(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};


function toBoolean(value) {
  if (value) {
    return true;
  } else {
    return false;
  }
}

function booleanPerl(value) {
  if (value && value == '1') {
    return true;
  } else {
    return false;
  }
}
    
function showActivity() {
  if ($.fancybox) {
    $.fancybox.showActivity();
  } else {
    $('#showActivityDiv').show();
  }
} 

function hideActivity() {
  if ($.fancybox) {
    $.fancybox.hideActivity();
  } else {
    $('#showActivityDiv').hide();
  }
}

function resizePopup() {
  if ($.fancybox) {
    $.fancybox.resize();
  }
}

var mmUtilEmailPattern = /^[\w-+]+(?:\.[\w-+]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$/;

function validEmailAddress(string) {
  return mmUtilEmailPattern.test(string);
}

function validateFormInputFieldsLocal(form) {
  var ok = true;
  var focus;
  var myid = form.attr('id');
  $('#' + myid + ' .textFieldError').removeClass('textFieldError');
  
  
  
  // required fields
  $('#' + myid + ' .inputRequired').each(function(){
    var value=trim($(this).val());
    if (! value) {
      $(this).addClass('textFieldError');
      ok = false;
      if (! focus) {
        focus = $(this);
      }
    }
  });
  
  // valid email addresses
  $('#' + myid + ' .inputValidEmail').each(function(){
    var value=trim($(this).val());
    var emailGood = false;
    if (value && validEmailAddress(value)) {
      emailGood = true;
    }
    
    if (! emailGood) {
      $(this).addClass('textFieldError');
      ok = false;
      if (! focus) {
        focus = $(this);
      }
    }
  });
  
  // validate minimum lengths
  $('#' + myid + ' :input[validateMinLength]').each(function(){
    var value=trim($(this).val());
    var lengthGood = false;
    if (value && value.length && value.length >= $(this).attr('validateMinLength')) {
      lengthGood = true;
    }
    
    if (! lengthGood) {
      $(this).addClass('textFieldError');
      ok = false;
      if (! focus) {
        focus = $(this);
      }
    }
  });
  
  // validate must match
  $('#' + myid + ' :input[validateMustMatch]').each(function(){
    var value=trim($(this).val());
    var otherValue = $($(this).attr('validateMustMatch')).val();
    var matchGood = false;
    if (value == otherValue) {
      matchGood = true;
    }
    
    if (! matchGood) {
      $(this).addClass('textFieldError');
      ok = false;
      if (! focus) {
        focus = $(this);
      }
    }
  });
  
  if (focus) {
    focus.focus();
  }
  return ok;
}

function setupImageHovers() {
  // set up image hovers
  $('input[on][off]').add('img[on][off]').hover(function(){
    this.src = $(this).attr('on');
  }, function(){
    this.src = $(this).attr('off');
  })

  // preload image hovers
  $('input[on][off]').add('img[on][off]').each(function(){
    var on = $(this).attr('on');
    var img = new Image(100,100);
    img.src = on;
  });
}

function utilParseJSON(data) {
  if (data) {
    data = trim(data);
    if (data && data.length > 4) {
      var start = data.substring(0,2);
      if (start == '/*') {
        var end = data.substring(data.length - 2, data.length);
        if (end == '*/') {
          data = data.substring(2, data.length - 2);
        }
      }
    }
  }
  var js = jQuery.parseJSON(data);
  return js;
}

(function($) {

	// jQuery plugin definition
	$.fn.validateFormFields = function() {
    this.each(function(){
      var me = $(this);
      me.bind('submit', function(){
        var ok = validateFormInputFieldsLocal(me);
        if (ok) {
          showActivity();
        }
        return ok;
      });
    });
    
    return this;
	};
  
})(jQuery);







(function($) {

	// jQuery plugin definition
	$.fn.formAjaxValidate = function(parms) {
    
    var defaults = {
      autoSubmitIfGood:      true,
      ajaxValidate:          true,
      validateOnly:          true,
      showActivityIndicator: false,
      doubleClickThreshold:  750,
      preSubmit:             function(formObject){},
      success:               function(result){}
    };
    
    var previousSubmit = 0;
    
    parms = $.extend({}, defaults, parms);
    
    this.each(function(){
      $(this).bind('submit', function(){
        // detect double click and skip the second one
        var thisSubmit = new Date().getTime();
        var diffSubmit = thisSubmit - previousSubmit;
        if (parms.doubleClickThreshold > 0 && diffSubmit < parms.doubleClickThreshold) {
          return false;
        }
        previousSubmit = thisSubmit;
        
        parms.preSubmit(this);
        var me = $(this);
        var action = $(this).attr('action');
        var sep = '?';
        if (action.indexOf("?") >= 0) {
          sep = '&';
        }
        var url = action + sep + 'struts.enableJSONValidation=true&struts.validateOnly=' + parms.validateOnly;
        var myid = $(this).attr('id');
        if (! myid) {
          alert("form has no ID, can't continue");
          return false;
        }
        var data = me.serializeArray();

        $('#' + myid + ' .errorMessage').remove();

        // check locally based on css class
        if (!validateFormInputFieldsLocal(me)) {
          return false;
        }

        if (! parms.ajaxValidate) {
          // some forms need to skip the ajax validation
          return true;
        }

        if (parms.showActivityIndicator) {
          showActivity();
        }

        $.ajax({
          url      : url,
          data     : data,
          type     : 'POST',
          cache    : false,
          dataType : 'text',
          success  : function(result, status, context){
            if (parms.showActivityIndicator) {
              hideActivity();
            }
            var ok = true;
            var data = utilParseJSON(result);
            if (data) {
              // check for field errors
              if (data.fieldErrors) {
                ok = false;
                for (var n in data.fieldErrors) {
                  var errorList = data.fieldErrors[n];
                  for (var e in errorList) {
                    var msg = errorList[e];
                    if (msg) {
                      // find the parent
                      var inputParent = $('#' + myid + ' [name=' + n + ']').parent();
                      if (inputParent && inputParent.is('div')) {
                        inputParent.before('<div class="errorMessage">' + msg.escapeHTML() + '</div>');
                      }
                    }
                  }
                }
              }

              // check for action error
              if (data.errors) {
                for (var n in data.errors) {
                  var errorMsg = data.errors[n];
                  if (errorMsg) {
                    alert(errorMsg);
                    ok = false;
                  }
                }
              }

              // if all OK, call the success callback functdion
              if (ok) {
                parms.success(data);
              }

              if (ok && parms && parms.autoSubmitIfGood) {
                me.unbind('submit').trigger('submit');
              }
            }
          },
          error    : function(context, status, error){
            if (parms.showActivityIndicator) {
              hideActivity();
            }
            alert("ajax error:\n" + status + "\n" + error);
          }
        });


        return false;
      });

    });
    
    return this;
	};
  

})(jQuery);

// setup email newsletter signup ajax stuff
function setupEmailSignupForm(suffix) {
  if (! suffix) {
    suffix = '';
  }
  var formSel = '#newsletterSignupForm' + suffix;
  var emailSel = '#newsletterSignupEmail' + suffix;
  var msgSel = '#newsletterSignupGoodMessage' + suffix;
  var okSel = '#newsletterSignupGoodOK' + suffix;
  
  $(formSel).bind('submit', function(){
      // detect double click and skip the second one
      var thisSubmit = new Date().getTime();
      if (this.previousSubmit) {
        var diffSubmit = thisSubmit - this.previousSubmit;
        if (diffSubmit < 750) {
          return false;
        }
      }
      this.previousSubmit = thisSubmit;
    
      var email = trim($(emailSel).removeClass('textFieldError').val());
      if (email) {
        if (email == $(emailSel).attr('title')) {
          // it is the title text, don't submit
          return false;
        }
        if (validEmailAddress(email)) {
          $.getJSON('/email_signup_ajax.html', {emailaddress: email}, function(data){
              if (booleanPerl(data.ok)) {
                $(emailSel).removeClass('textFieldError').val('')
                $(msgSel).show();
                $(formSel).hide();
              } else {
                var msg = data.error;
                if (! msg) {
                  msg = "Error signing up for the newsletter";
                }
                alert(msg);
              }
          });
        } else {
          $(emailSel).addClass('textFieldError').select().focus();
        }
      }
      return false;
  });

  // OK button to close the email signup message
  $(okSel).click(function(){
    $(msgSel).hide();
    $(formSel).show();
    $(emailSel).val($(emailSel).attr('title'));  // restore the title/hint
    return false;
  });
}

/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 5/25/2009
 * @author Ariel Flesler
 * @version 1.4.2
 *
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 */
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
      
