var fadeTime = 5000;
var fadeLength = 1000;
var fadeEventTime = 5000;
var fadeEventLength = 1000;
var magnify = 2;

var productOver = null;

$(function() {
    $.ifixpng('img/spacer.gif');
    $.ui.dialog.defaults.bgiframe = true;
    if ($('.slideShow img').length > 1) { 
        setInterval("fadeImage();", fadeTime);
    }

    if ($('.event', '#eventContainer').length > 1) { 
        setInterval("fadeEvent();", fadeEventTime);
    }

    $('textarea').each(function() {
        if (jQuery.trim($(this).text()) == "") {
            $(this).html("");
        }
    });

    $('.chocolateBar', '#shop #rightCol').bind("mouseover", function() {
        var tmp = this;
        if (productOver != null) {
            if (jQuery.data( productOver, "busy") != 1) {
                var original = jQuery.data( productOver, "original");
                $(productOver).animate({
                                    "left": original.left,
                                    "top": original.top,
                                    "width": original.width,
                                    "height": original.height
                                    }, 100, function() {
                    $(productOver).remove();
                    productOver = null;
                    showProduct(tmp);
                });
            }
        } else {
            showProduct(tmp);
        }
    });

    $('input[name="ret"]').val("./ajax/basket.php");
    $('input[name="ret"]','.wholesale').val("./basket.php?forceWholesale=1");
    $("#writeAReview").dialog({ modal: true, position: 'center', width: 460, autoOpen: false });   
    $("#tellAFriend").dialog({ modal: true, position: 'center', width: 460, autoOpen: false }); 

    
    $('#addToBasket', '#product').submit(function() { 
        $(this).ajaxSubmit({success:productAddProductToBasketResponse});
        return false; 
    });
    $('#review').submit(function() { 
        $(this).ajaxSubmit({beforeSubmit:reviewSubmit,success:reviewResponse});
        return false; 
    });
    $('#recommend').submit(function() { 
        $(this).ajaxSubmit({beforeSubmit:recommendSubmit,success:recommendResponse});
        return false; 
    });
    
    if ($('#sameAsCardHolderCheck').attr("checked")) {
        $('#deliveryContainer input').attr("disabled", "disabled");
        $('#deliveryContainer select').attr("disabled", "disabled");
    }
    $('#sameAsCardHolderCheck').bind("change", function() {
        if($(this).attr("checked")) {
            $('#deliveryContainer input').attr("disabled", "disabled");
            $('#deliveryContainer select').attr("disabled", "disabled");
        } else {
            $('#deliveryContainer input').attr("disabled", "");
            $('#deliveryContainer select').attr("disabled", "");
        }
    });
    $('textarea').each(function() {
        if (jQuery.trim($(this).text()) == "") {
            $(this).html("");
        }
    });

});

function fadeImage() {
    var next;
    if ($('.slideShow img:visible ~ img:hidden').length > 0) {
        next = $('.slideShow img:visible ~ img:hidden').eq(0);
    } else {
        next = $('.slideShow img').eq(0);
    }
    $('.slideShow img:visible').fadeOut(fadeLength);
    $(next).fadeIn(fadeLength);
}

function fadeEvent() {
    var next;
    if ($('#eventContainer .event:visible ~ .event.hidden').length > 0) {
        next = $('#eventContainer .event:visible ~ .event.hidden').eq(0);
    } else {
        next = $('#eventContainer .event').eq(0);
    }
    $('#eventContainer .event:visible').fadeOut(fadeEventLength);
    $(next).fadeIn(fadeEventLength);
}

function recommendSubmit() {
    $('button[type="submit"]', '#recommend').attr("disabled", "disabled");
}
function recommendResponse(data) {
    $('.error', '#recommend').removeClass("error");
    $('button[type="submit"]', '#recommend').attr("disabled", "");

    json = eval("("+data+")");
    // {"error":[{"field":"name"},{"field":"email"},{"field":"review"}]}
    if (json.error) {
        var i = 0;
        for (i in json.error) {
            $('[name="'+json.error[i].field+'"]', '#recommend').addClass("error");
            i++;
        }
    } else {
        $('#recommend').replaceWith('<p>'+json.success+'</p>');
    }
}
function reviewSubmit() {
    $('button[type="submit"]', '#review').attr("disabled", "disabled");
}
function reviewResponse(data) {
    $('.error', '#review').removeClass("error");
    $('button[type="submit"]', '#review').attr("disabled", "");

    json = eval("("+data+")");
    // {"error":[{"field":"name"},{"field":"email"},{"field":"review"}]}
    if (json.error) {
        var i = 0;
        for (i in json.error) {
            $('[name="'+json.error[i].field+'"]', '#review').addClass("error");
            i++;
        }
    } else {
        $('#review').replaceWith('<p>'+json.success+'</p>');
    }
}

function writeAReview() {
    $("#writeAReview").dialog('open');
}

function tellAFriend() {
    $("#tellAFriend").dialog('open');
}

function productAddProductToBasketResponse(data) {
    if ($('#basket').length == 0) {
        location.reload(true);
    } else {
        var productOver = $('.productImage', '#addToBasket').clone();
        $(productOver).css({"position": "absolute",
                            "margin": 0,
                            "left": $('.productImage', '#addToBasket').position().left,
                            "top": $('.productImage', '#addToBasket').position().top});
        $(productOver).prependTo('#addToBasket');
        $(productOver).animate({
                                "left": $('#basket').position().left,
                                "top": $('#basket').position().top,
                                "width": $('#basket').width(),
                                "height": $('#basket').height()
                                }, 500, function() {
            $(productOver).remove();
            productOver = null;

            $('#basket').fadeTo("fast", 0, function() {
                $('#basket').html(data);
                $('#basket').fadeTo("fast", 1);
            });
        });
    }
}

function shopAddProductToBasketValidate() {
    jQuery.data( productOver, "busy", 1);
}
function shopAddProductToBasketResponse(data) {
    // animate the bar to the basket
    if ($('#basket').length == 0) {
        location.reload(true);
    } else {
        $('div',$(productOver)).eq(0).addClass("hidden");
        $(productOver).animate({
                                "left": $('#basket').position().left,
                                "top": $('#basket').position().top,
                                "width": $('#basket').width(),
                                "height": $('#basket').height()
                                }, 500, function() {
            $(productOver).remove();
            productOver = null;

            $('#basket').fadeTo("fast", 0, function() {
                $('#basket').html(data);
                $('#basket').fadeTo("fast", 1);
            });
        });
    }
}

function intOnly(evt, el) {
    evt = (evt) ? evt : window.event;    
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    if (charCode == 37 || charCode == 39 || charCode == 8 || charCode == 46 || (charCode >= 48 && charCode <= 57)) {
        return true;
    }
    return false;
}

function quantityUpdate(el) {    
    //update the .price span
    if ($('#shop').length == 1) {
        if ($(el).parent('div').parent('fieldset').children('input[name="wholesalePrice"]').length && (parseInt($('#basketQty').text()) + parseInt($(el).val())) >= 30) {
            var normalPrice = $(el).parent('div').parent('fieldset').children('input[name="wholesalePrice"]').eq(0).val();
        } else {
            var normalPrice = $(el).parent('div').parent('fieldset').children('input[name="price"]').eq(0).val();
        }
        $(el).next('.price').text((normalPrice * $(el).val()).toFixed(2));
    } else {
        if ($('input[name="wholesalePrice"]').length && ((parseInt($('#basketQty').text()) + parseInt($(el).val())) >= 30)) {
            alert("fill me in");
            $('#price').text(($('#normalPrice').val() * $(el).val()).toFixed(2));
        } else {
            $('#price').text(($('#normalPrice').val() * $(el).val()).toFixed(2));
        }
    }
}

function showProduct(tmp) {    
    
    productOver = $(tmp).clone();
    var width = $(tmp).width();
    var height = $(tmp).height();
    var left = $(tmp).position().left;
    var top = $(tmp).position().top;

    var original = {"left": left,
                               "top": top,
                               "width": width,
                               "height": height
    };
    jQuery.data( productOver, "original", original );

    var targetWidth = width * magnify;
    var targetHeight = height * magnify;
    var targetTop = top - (((height * magnify) - height) / 2);
    var targetLeft = left - (((width * magnify) - width) / 2);
    $(productOver).css({
                       "position": "absolute",
                       "left": left,
                       "top": top
                       });
    $(productOver).appendTo("body");
    $(productOver).animate({
                            "left": targetLeft,
                            "top": targetTop,
                            "width": targetWidth,
                            "height": targetHeight
                            }, 500, function() {
        $('div',$(productOver)).removeClass("hidden");
        

        // we want to do a nice animation when adding items to basket
        $('form', $(productOver)).submit(function() { 
            $(this).ajaxSubmit({beforeSubmit:shopAddProductToBasketValidate,success:shopAddProductToBasketResponse});
            return false; 
        });
    });
}

function emailCheck(str) {

	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)

	if (str.indexOf(at)==-1){
	  return false;
	}
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	  return false;
	}
	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
	  return false;
	}
	if (str.indexOf(at,(lat+1))!=-1){
	  return false;
	}
	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
	  return false;
	}
	if (str.indexOf(dot,(lat+2))==-1){
	  return false;
	}
	if (str.indexOf(" ")!=-1){
	  return false;
	}
	return true;
}


/*
 * jQuery ifixpng plugin
 * (previously known as pngfix)
 * Version 2.1  (23/04/2008)
 * @requires jQuery v1.1.3 or above
 *
 * Examples at: http://jquery.khurshid.com
 * Copyright (c) 2007 Kush M.
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 */
 
 /**
  *
  * @example
  *
  * optional if location of pixel.gif if different to default which is images/pixel.gif
  * $.ifixpng('media/pixel.gif');
  *
  * $('img[@src$=.png], #panel').ifixpng();
  *
  * @apply hack to all png images and #panel which icluded png img in its css
  *
  * @name ifixpng
  * @type jQuery
  * @cat Plugins/Image
  * @return jQuery
  * @author jQuery Community
  */
 
(function($) {

	/**
	 * helper variables and function
	 */
	$.ifixpng = function(customPixel) {
		$.ifixpng.pixel = customPixel;
	};
	
	$.ifixpng.getPixel = function() {
		return $.ifixpng.pixel || 'images/pixel.gif';
	};
	
	var hack = {
		ltie7  : $.browser.msie && $.browser.version < 7,
		filter : function(src) {
			return "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=crop,src='"+src+"')";
		}
	};
	
	/**
	 * Applies ie png hack to selected dom elements
	 *
	 * $('img[@src$=.png]').ifixpng();
	 * @desc apply hack to all images with png extensions
	 *
	 * $('#panel, img[@src$=.png]').ifixpng();
	 * @desc apply hack to element #panel and all images with png extensions
	 *
	 * @name ifixpng
	 */
	 
	$.fn.ifixpng = hack.ltie7 ? function() {
    	return this.each(function() {
			var $$ = $(this);
			// in case rewriting urls
			var base = $('base').attr('href');
			if (base) {
				// remove anything after the last '/'
				base = base.replace(/\/[^\/]+$/,'/');
			}
			if ($$.is('img') || $$.is('input')) { // hack image tags present in dom
				if ($$.attr('src')) {
					if ($$.attr('src').match(/.*\.png([?].*)?$/i)) { // make sure it is png image
						// use source tag value if set 
						var source = (base && $$.attr('src').search(/^(\/|http:)/i)) ? base + $$.attr('src') : $$.attr('src');
						// apply filter
						$$.css({filter:hack.filter(source), width:$$.width(), height:$$.height()})
						  .attr({src:$.ifixpng.getPixel()})
						  .positionFix();
					}
				}
			} else { // hack png css properties present inside css
				var image = $$.css('backgroundImage');
				if (image.match(/^url\(["']?(.*\.png([?].*)?)["']?\)$/i)) {
					image = RegExp.$1;
					image = (base && image.substring(0,1)!='/') ? base + image : image;
					$$.css({backgroundImage:'none', filter:hack.filter(image)})
					  .children().children().positionFix();
				}
			}
		});
	} : function() { return this; };
	
	/**
	 * Removes any png hack that may have been applied previously
	 *
	 * $('img[@src$=.png]').iunfixpng();
	 * @desc revert hack on all images with png extensions
	 *
	 * $('#panel, img[@src$=.png]').iunfixpng();
	 * @desc revert hack on element #panel and all images with png extensions
	 *
	 * @name iunfixpng
	 */
	 
	$.fn.iunfixpng = hack.ltie7 ? function() {
    	return this.each(function() {
			var $$ = $(this);
			var src = $$.css('filter');
			if (src.match(/src=["']?(.*\.png([?].*)?)["']?/i)) { // get img source from filter
				src = RegExp.$1;
				if ($$.is('img') || $$.is('input')) {
					$$.attr({src:src}).css({filter:''});
				} else {
					$$.css({filter:'', background:'url('+src+')'});
				}
			}
		});
	} : function() { return this; };
	
	/**
	 * positions selected item relatively
	 */
	 
	$.fn.positionFix = function() {
		return this.each(function() {
			var $$ = $(this);
			var position = $$.css('position');
			if (position != 'absolute' && position != 'relative') {
				$$.css({position:'relative'});
			}
		});
	};

})(jQuery);