
 function carousel(c,o){
    var defaults = {items:"li",scrollCnt:1,scrollTweak:0}, opts = $.extend({},defaults,o),
        nextBtn = $("<span class='carousel-next' style='z-index:1' onselectionstart='return false' />"),
        prevBtn = $("<span class='carousel-prev' style='z-index:1' onselectionstart='return false' />"),
        items = $(opts.items,c),
        scrollWidth=opts.scrollCnt * items.eq(0).outerWidth(true) + opts.scrollTweak,
        animating=false, maxScroll=-1 * scrollWidth * (items.length / opts.scrollCnt - 1);
       
    c.css({overflow:"hidden"}).after(nextBtn).after(prevBtn);
    items.css({display: "block", width: c.innerWidth()});

    var wrap = $("<div class='carousel-wrap' />");
    c.wrap(wrap);

    nextBtn.click(next);
    prevBtn.click(prev);
    updateButtons(0);

    function next(){slide(1);}
    carousel.prototype.next = next;

    function prev(){slide(-1);}
    carousel.prototype.prev = prev;

    function slide(delta){
        if(!animating){
            animating = true;
            var amt = parseInt(c.css("margin-left"),10) + -1 * delta * scrollWidth;
            if(amt>0) amt=0;
            if(amt<maxScroll) amt=maxScroll;
            c.animate({"margin-left":amt+"px"},
                    function(){animating = false});
            updateButtons(amt);
        }
    }

    function updateButtons(amt){
            (amt==0)?prevBtn.addClass('disabled'):prevBtn.removeClass('disabled');
            (amt==maxScroll)?nextBtn.addClass('disabled'):nextBtn.removeClass('disabled');
    }
}
$.fn.carousel = function(o){
    return $(this).each(function(){
        new carousel($(this),o||{});
    })
}

function init_char_counter(input,max)
{
    var counter = input.siblings('.counter').eq(0);
    input.bind('keyup',function(){
        var rem = max - input.val().length;
        counter.html( (""+rem).replace(/(\d)(\d{3})$/,"$1,$2") + " characters remaining" );
        ( rem < 0 )
            ? counter.addClass('error')
            : counter.removeClass('error');
    });
}
function init_form_switcher(fieldsets,cb)
{
    function setActive(){
        fieldsets.removeClass('active');
        var fieldset = $('.tab:has(input:checked)',fieldsets).parents('fieldset').addClass('active');
        if(cb) cb(fieldset);
    }
    $('.tab input',fieldsets).bind('change focus', setActive);
    setActive();
}

var Validator = {
    funcs : {
        required : function(e,o,f){ return ( o[0] && $(o[0],f).size() == 0) || $(e).val().length > 0; },
        match: function(e,o)  { return $(e).val() == $('*[name='+o[0]+']:visible').val(); },
        maxlength: function(e,o) { return $(e).val().length <= parseInt(o[0],10); },
        email: function(e,o) { return $(e).val().match(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i); }
    },

    validate: function (e,form){
        form = $(form || this);
        var hasErrors = false;
        $('p.error',form).hide();
        $('.validate-error',form).removeClass('validate-error');
        $('*[data-validate]:visible',form).each(function(){
            var funcs = $(this).attr('data-validate').split(" ");
            for(var i=0,j=funcs.length;i<j;i++){
                var func = funcs[i].replace(')','').split('(');

                if (!Validator.funcs[func[0]]( $(this), (func[1] || "").split(','), form) ){
                    hasErrors = true;
                    $(this).parent().addClass('validate-error');
                }
            }
        })
        if(hasErrors) $('p.error',form).show();
        return !hasErrors;
    },

    bind: function(){
        return $(this).each(function(){ $(this).submit(Validator.validate); });
    }
};
$.fn.validate = Validator.bind;

var SaveRecall = {
    save : function(e,form){
        form = $(form || this);
        $('input[type=text]', form).each(function(){
            if($(this).val() != "")
                Cookies.write("Saved-"+$(this).attr('name'), $(this).val());
        });
    },
    recall: function(form){
        $('input[type=text]',form).each(function(){
           $(this).val(Cookies.read("Saved-"+$(this).attr('name')));
        });
    },
    bind: function(cb){
        return $(this).each(function(){
            $(this).submit(SaveRecall.save);
            SaveRecall.recall(this);
            if(cb) { cb.apply(this); }
        });
    }
};
$.fn.saverecall = SaveRecall.bind;
var Cookies = {
    write : function(name,value,days) {
        var expires = "";
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		expires = "; expires="+date.toGMTString();
	}
	document.cookie = name+"="+value+expires+"; path=/";
    },

    read: function(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
    },

    remove: function(name) {
	createCookie(name,"",-1);
    }
};


$(function(){
    $('.productSlider ul, .section.testimonials ul').carousel();
});

$(document).ready(function() {

    if ($('body').is('.coupon')) {
        $('#coupon_area').hide();
        $('#coupon_drop').hide();
    }

    if ($('body').is('.index')) {
        $('#coupon_area').slideToggle('slow');
        $('#coupon_drop').toggleClass('open');    
    }
});

$('#coupon_drop').click(function() {
    $('#coupon_area').stop(true, true).slideToggle('slow');
    $('#coupon_drop').stop(true, true).toggleClass('open');    
});
