﻿var $c = jQuery.noConflict();

$c(document).ready(function () {
    coop.PreloadImages(["/design/img/coop/ajax-loader.gif"]);
    coop.PleaseWait.Hide();
    $c(".checkout_action_click").bind("click", function () { coop.PleaseWait.Show("maincontainer"); });
    $c(".checkout_action_change").bind("change", function () { coop.PleaseWait.Show("maincontainer"); });

    $c("#searchresults li").bind("click", function () {
        $c(this).addClass('selected').siblings().removeClass('selected');

        if ($c("#varersoegning_li").hasClass("selected")) {
            $c("#varesoegningresultat").show();
            $c("#ccmssoeningresultat").hide();
        }
        else if ($c("#ccmssoegning_li").hasClass("selected")) {
            $c("#varesoegningresultat").hide();
            $c("#ccmssoeningresultat").show();
        }
    });


    if ($c.browser.webkit) { $c('html').addClass('webkit'); }
    else if ($c.browser.msie && $c.browser.version.substr(0, 1) == 7) { $c('html').addClass('msie7'); }
    else if ($c.browser.msie && $c.browser.version.substr(0, 1) == 8) { $c('html').addClass('msie8'); }
    if ($c.browser.msie && $c.browser.version.substr(0, 1) < 7) {
        coop.ie6();
    }
    coop.menu.setwidths();
    coop.menu.markMostRightItems();
    coop.menu.activemenu = $c('#mainnav li.selected');
    $c('#mainnav ul.l2>li').hover(coop.menu.hoverin, coop.menu.hoverout);
    coop.inputhelpers();
    $c('.article table.special_tabel tbody tr:even').addClass('even');
    $c('.article table.special_tabel tbody tr td:last-child, .article table.special_tabel th:last-child').addClass('last');
    $c('#content a.wishlist').bind('click', function () {
        $c(this).toggleClass('checked');
        if ($c(this).hasClass('checked')) {
            $c(this).html('Fjern fra huskeseddel');
        } else {
            $c(this).html('Tilf&oslash;j huskeseddel');
        }
        return false;
    });
    $c('a[rel="gallery"]').colorbox(coop.product.overlayoptions);

    coop.basketCountValidator();

    $c('a.notify').bind('click', function () {
        coop.instockservice();
    });

    //set variant popform
    $c(".popupForm").ajaxForm({ success: showResponse });

    // Click event for toggle.
    $c('a.toggleBasket').click(function () {
        $c("#basketIndicator").slideToggle(600).preventDefault;
    });


    //add alt tag to images that does not have it
    $c("img:not([alt])").attr("alt", "");
    //add title tag to images and copy alt text into the title (This is to compensate for the fact that Firefox does now show alt texts)
    $c("img:not([title])").each(function () {
        if ($c(this).attr("alt") !== '') {
            $c(this).attr("title", $c(this).attr("alt"));
        } else {
            $c(this).attr("title", "");
        }
    });

    $c('input[type="image"]').live("mouseover", function (event) { ButtonHover(event.target); });
    $c('input[type="image"]').live("mouseout", function (event) { ButtonHover(event.target); });
    $c('input[type="image"]').live("focus", function (event) { ButtonHover(event.target); });
    $c('input[type="image"]').live("blur", function (event) { ButtonHover(event.target); });

    $c('a img[src$=.png]').live("mouseover", function (event) { ButtonHover(event.target); });
    $c('a img[src$=.png]').live("mouseout", function (event) { ButtonHover(event.target); });
    
//    $c('input[type="image"]').each(function (index, element) {
//        $c(this).mouseover(function () { ButtonHover(this); });
//        $c(this).mouseout(function () { ButtonHover(this); });
//        $c(this).focus(function () { ButtonHover(this); });
//        $c(this).blur(function () { ButtonHover(this); });
//    });

//    $c('a img[src$=.png]').each(function (index, element) {
//        $c(this).mouseover(function () { ButtonHover(this); });
//        $c(this).mouseout(function () { ButtonHover(this); });
//    });
});

var imgItemSelected = 0;
var imgAllowZoom = true;

function setBtnVenteliste(productId) {
    $c(".notify").show();
    $c(".jqVarianBtn .basketform").hide();
}

function setBtnForm(productId) {
    $c(".notify").hide();
    $c(".jqVarianBtn .basketform").show();

    $c("input[name='ProductId']").val(productId);
}

function updateProductImage(product) {
    if (product !== null) {
        var ulList = $c("#prodImgThumbs");
        var largeList = $c("#prodImgLarge");
        if (ulList !== null && largeList !== null) {
            ulList.empty();
            largeList.empty();
            var i = 0;

            //var largeTemplate = $c("#ImgLargeTemplate").val();
            //alert(tumbTemplate);
            var firstRev;
            $c.each(product.pictures, function() {
                var thumb = parseTemplate($c("#ImageTumbTemplate").html(), { ElementNo: i, ImageId: this });
                var large = parseTemplate($c("#ImageLargeTemplate").html(), { ElementNo: i, ImageId: this });

                ulList.append(thumb);
                largeList.append(large);

                i++;
            });
            $c('a[rel="gallery"]').colorbox(coop.product.overlayoptions);
            $c("#prodImgThumbs a:first").click();
        }
    }
}

function setProductInfo(productId) {
    $c("#produktInfo").load(urlCallbackInfo, { ProductId: productId });  
}

function setProduct(product) {
    var html = '';
    if (product != null) {
        updateProductImage(product);
        if ($c("#produktInfo").length !== 0) {
            setProductInfo(product.id);
        }
        
        if (product.status == 2) {
            setBtnVenteliste(product.id);
        }
        else {
            setBtnForm(product.id);
        }
    }
    else {
        setBtnForm("variant");
    }
}

var coop = function () {

    return {
        inputhelpers: function () {
            $c('input[type="text"]').not('.nowatermark').each(function (i, item) { $c(this).data("org", $c(this).val()); }).bind('focus', function () { if ($c(this).val() == $c(this).data('org')) { $c(this).val(''); } }).bind('blur', function () { if ($c(this).val() === '') { $c(this).val($c(this).data('org')); } });

        },

        ie6: function () {
            $c('#footer, #content, .box .collection, .box .newsletter, .productbox p, .content .boxcontent').css('zoom', '1');
            $c('#mainnav ul.l2>li, #mainnav ul.l2>li>a').addClass('ie6');
            $c('#mainnav ul.l2>li:first-child').addClass('firstchild');
            $c('#mainnav ul.l2>li').hover(function () { $c(this).addClass('ie6hover'); },
											function () { $c(this).removeClass('ie6hover'); }
										);
            $c('#mainnav ul.l2>li:first-child>a').css('padding-left', '14px');
            $c('.w4 .content .boxcontent .image:first-child').css('margin-left', 0);
            $c('#slidercontrols a.thumb').hover(function () { $c(this).addClass('active'); },
											function () { $c(this).removeClass('active'); }
										);
        },

        regionalwarning: function () {
            var options = { transition: 'none', opacity: 0.7, initialWidth: 792, innerWidth: 792, photo: false, current: '', onOpen: function () { $c('body').css('overflow', 'hidden'); }, onClosed: function () { $c('body').css('overflow', 'auto'); }, html: $c('#regionalwarning').html() };
            $c.fn.colorbox(options);
        },

        webshopwarning: function () {
            var options = { transition: 'none', opacity: 0.7, initialWidth: 881, innerWidth: 881, photo: false, current: '', onOpen: function () { $c('body').css('overflow', 'hidden'); }, onClosed: function () { $c('body').css('overflow', 'auto'); }, html: $c('#websitewarning').html() };
            $c.fn.colorbox(options);
        },

        pagenotfound: function () {
            var options = { transition: 'none', opacity: 0.7, initialWidth: 792, innerWidth: 792, photo: false, current: '', onOpen: function () { $c('body').css('overflow', 'hidden'); }, onClosed: function () { $c('body').css('overflow', 'auto'); }, html: $c('#pagenotfound').html() };
            $c.fn.colorbox(options);
        },

        instockservice: function () {
            var options = { transition: 'none', opacity: 0.7, initialWidth: 792, innerWidth: 792, photo: false, current: '', onOpen: function () { $c('body').css('overflow', 'hidden'); }, onClosed: function () { $c('body').css('overflow', 'auto'); }, html: $c('#instockservice').html() };
            $c.fn.colorbox(options);
        },

        confirmorder: function () {
            var options = { transition: 'none', opacity: 0.7, initialWidth: 792, innerWidth: 792, photo: false, current: '', onOpen: function () { $c('body').css('overflow', 'hidden'); }, onClosed: function () { $c('body').css('overflow', 'auto'); }, html: $c('#confirmorder').html() };
            $c.fn.colorbox(options);
        },

        emailtilmeldt: function () {
            var options = { transition: 'none', opacity: 0.7, initialWidth: 792, innerWidth: 792, photo: false, current: '', onOpen: function () { $c('body').css('overflow', 'hidden'); }, onClosed: function () { $c('body').css('overflow', 'auto'); }, html: $c('#emailtilmeldt').html() };
            $c.fn.colorbox(options);

        },

        basketCountValidator: function () {
            $c('.text-micro.nowatermark').blur(function () {
                if (checkNumeric(this, 0, 99)) { this.form.submit(); }
            });
        },
        infobesked_LeveringHjemme: function () {
            var options = { transition: 'none', opacity: 0.7, initialWidth: 500, innerWidth: 500, photo: false, current: '', onOpen: function () { $c('body').css('overflow', 'hidden'); }, onClosed: function () { $c('body').css('overflow', 'auto'); }, html: $c('#levering_hjemme').html() };
            $c.fn.colorbox(options);
        },
        infobesked_LeveringKantsten: function () {
            var options = { transition: 'none', opacity: 0.7, initialWidth: 500, innerWidth: 500, photo: false, current: '', onOpen: function () { $c('body').css('overflow', 'hidden'); }, onClosed: function () { $c('body').css('overflow', 'auto'); }, html: $c('#levering_kantsten').html() };
            $c.fn.colorbox(options);
        },
        infobesked_LeveringOverdragelse: function () {
            var options = { transition: 'none', opacity: 0.7, initialWidth: 500, innerWidth: 500, photo: false, current: '', onOpen: function () { $c('body').css('overflow', 'hidden'); }, onClosed: function () { $c('body').css('overflow', 'auto'); }, html: $c('#levering_overdragelse').html() };
            $c.fn.colorbox(options);
        },
        infobesked_AfhentningIButik: function () {
            var options = { transition: 'none', opacity: 0.7, initialWidth: 500, innerWidth: 500, photo: false, current: '', onOpen: function () { $c('body').css('overflow', 'hidden'); }, onClosed: function () { $c('body').css('overflow', 'auto'); }, html: $c('#levering_afhentningibutik').html() };
            $c.fn.colorbox(options);
        },
        SammenlignPopup: function () {
            var options = { transition: 'none', opacity: 0.7, initialWidth: 800, innerWidth: 800, initialHeight: 380, innerHeight: 380, photo: false, current: '', onOpen: function () { $c('body').css('overflow', 'hidden'); }, onClosed: function () { $c('body').css('overflow', 'auto'); }, html: $c('#comparePopupContainer').html() };
            $c.fn.colorbox(options);
        },
        PreloadImages: function (sources) {
            var imageList = new Array();
            $c(sources).each(function (index, element) {
                var image = new Image();
                image.src = element;
                imageList.push(image);
            });
        }
    };
} ();


coop.PleaseWait = function () {
    return {
        Setup: function (overlayTargetId) {
            //Ensure at rendering kun sker 1 gang på samme side.
            if ($c("#loading").get(0) == null) {
                $c("body").append(
                    "<div id=\"loading\"></div>" +
                        "<div id=\"pleasewaitsign\" class=\"pleasewaitsign\">" +
                            "<div class=\"spinner\"></div>" +
                            "<span>Vent venligst...</span>" +
                            "<div class=\"clear\"></div>" +
                        "</div>");
            }

            //var overlayTarget = $c("#" + overlayTargetId);
            var overlay = $c("#loading");
            var pleasewaitsign = $c("#pleasewaitsign");

            // overlay.css("height", overlayTarget.height());
            //overlay.css("width", overlayTarget.width());
            //overlay.css(overlayTarget.offset());

            pleasewaitsign.css("top", (($c(window).height() / 2) - $c("#pleasewaitsign").height()));
            pleasewaitsign.css("left", (($c(window).width() / 2) - ($c("#pleasewaitsign").width() / 2)));
        },
        Show: function (overlayTargetId) {
            this.Setup(overlayTargetId);
            $c("#pleasewaitsign").show();
            $c("#loading").show();
        },
        Hide: function () {
            if ($c("#pleasewaitsign").get(0) != null) {
                $c("#pleasewaitsign").hide();
                $c("#loading").hide();
            }
        }
    };
} ();

coop.tabs = function() {
	return {
		//		show: function(tab, no) {
		//			$c('div.tab').hide();
		//			$c('#tab' + no).show();
		//			$c('ul.tabs li').removeClass('selected');
		//			$c(tab).parent('li').addClass('selected');
		//			return false;
		//		},

		/* Denne funtion er ikke længere afhænging af en valgt tab
		Det gør at man kan skifte tabs med eksterne links, knapper osv.
		*/

		show: function(no, source) {
			$c('div.tab').hide();
			$c('#tab' + no).show();
			$c('ul.tabs li').removeClass('selected');
			$c('ul.tabs #tabItem' + no).addClass('selected');
			if (source !== undefined) { location.href = '#tabItem' + no; }
			return false;
		}
	};
} ();


coop.menu = function() {
	return {
		activemenu: false,
		markMostRightItems: function() {
			$c('ul.l2>li:gt(5)').addClass('foldright');
		},
		setwidths: function() {
			var rows;
			$c('ul.l2>li>div').each(function(i, item) {
				rows = $c(item).children('ul, dl').length;
				
				$c(item).next('span').css('top', $c(item).height() + 30 + 'px');

				if (rows == 1) {
					$c(item).next('span').addClass('tiny');
					$c(item).addClass('tiny');
				}

				if (rows == 2) {
					$c(item).next('span').addClass('narrow');
					$c(item).addClass('narrow');
				}
			});
		},
		hoverin: function() { $c('#mainnav li').removeClass('selected'); },
		hoverout: function() { $c(coop.menu.activemenu).addClass('selected'); }
	};
} ();

coop.sammenlign = function () {
    return {
        Init: function () {
            coop.sammenlign.RenderCompareBox();
        },
        Set: function (product, isAdd) {
            if (isAdd) { this.Add(product); }
            else { this.Remove(product.Id, false); }

            this.TriggerChangedEvent();
        },
        Add: function (product) {
            var compareCookie = this.GetCookieObject();
            compareCookie.AddedFromUrl = product.AddedFromUrl;
            compareCookie.Products.push(product);

            //Hvis der er flere end 3 produkter, skal den første slettes.
            if (compareCookie.Products.length > 3) {
                this.Remove(compareCookie.Products[0].Id, false);
                compareCookie.Products = jQuery.grep(compareCookie.Products, function (value, index) { return index != 0; });
            }

            this.SaveCookieObject(compareCookie);
            this.RenderCompareBox();
            this.Popup();
            this.TriggerChangedEvent();
        },
        AddAnother: function () {
            $c.fn.colorbox.close();
            this.TriggerChangedEvent();
            return false;
        },
        SilentRemove: function (productId) {
            var compareCookie = this.GetCookieObject();
            compareCookie.Products = jQuery.grep(compareCookie.Products, function (value) {
                return value.Id != productId;
            });
            this.SaveCookieObject(compareCookie);
            this.TriggerChangedEvent();
        },
        Remove: function (productId) {
            var compareCookie = this.GetCookieObject();
            compareCookie.Products = jQuery.grep(compareCookie.Products, function (value) {
                return value.Id != productId;
            });

            $c('input:checkbox[value="' + productId + '"]').attr('checked', false); //Fjerner checkbox
            $c.uniform.update('input:checkbox[value="' + productId + '"]');

            this.SaveCookieObject(compareCookie);
            this.RenderCompareBox();
            this.Popup();
            this.TriggerChangedEvent();
        },
        RemoveAll: function () {
            $c.each(this.GetCookieObject().Products, function (index, element) {
                coop.sammenlign.Remove(element.Id, false);
            });
            $c.fn.colorbox.close();
            $c('html, body').animate({ scrollTop: 0 }, 'slow');
            return false;
        },
        GetCookieObject: function () {
            var scookie = jQuery.cookie('varesammenligning');

            //Ensure cookie
            if (!scookie) {
                var result = new Object();
                result.AddedFromUrl = "";
                result.Products = new Array();
                this.SaveCookieObject(result);
            }

            return jQuery.parseJSON(scookie);
        },
        SaveCookieObject: function (object) {
            if (object) {
                jQuery.cookie('varesammenligning', JSON.stringify(object), { expires: 7, path: '/' });
            }
        },
        EnsureCheckboxSync: function () {
            $c.each(this.GetCookieObject().Products, function (index, element) {
                $c('input:checkbox[value="' + element.Id + '"]').attr('checked', true); //Fjerner checkbox    
                $c.uniform.update('input:checkbox[value="' + element.Id + '"]');
            });
        },
        RenderCompareBox: function () {
            var compareCookie = this.GetCookieObject();

            for (var i = 0; i < 3; i++) {
                var productElement = compareCookie.Products[i];
                $c("#compareproduct" + i).html(coop.sammenlign.GenerateSingleProduct(productElement));
            }

            this.EnsureCheckboxSync();
        },
        Popup: function () {
            if (this.GetCookieObject().Products.length == 0) {
                $c.fn.colorbox.close();
            }
            else if ($c("#colorbox").length == 0 || $c("#colorbox").css("display") == "none") {
                coop.SammenlignPopup();
            }
        },
        GenerateSingleProduct: function (product) {
            if (product != null) {
                return parseTemplate($c("#CompareProductBoxTemplate").html(), { Id: product.Id, Link: product.Link, Image: product.Image,
                    Header: product.Header, SubHeader: product.SubHeader, PriceText: product.PriceText, Price: product.Price
                });
            }
            else {
                return parseTemplate($c("#CompareProductBoxEmptyTemplate").html(), {});
            }
        },
        TriggerChangedEvent: function () {
            $c(this).trigger(jQuery.Event("compareChanged"));
        }
    };
} ();

coop.product = function () {
	return {
		overlayoptions: { transition: 'none',
			opacity: 0.7,
			initialWidth: 543,
			innerWidth: 543,
			innerHeight: 559,
			initialHeight: 559,
			photo: true,
			current: 'Billede {current} af {total}',
			maxHeight: '100%',
			maxWidth: '100%',
			rel: 'gallery',
			onComplete: function () {
				if ($c('#cboxCoopClose').length == 0) {
					if ($c('#cboxPrevious').is(':hidden')) {
						$c('#cboxContent').append('<div id="cboxCoopClose" style="right:10px;"><a href="javascript:;" onclick="$c.fn.colorbox.close();">X</a></div>');
					}
					else {
						$c('#cboxContent').append('<div id="cboxCoopClose"><a href="javascript:;" onclick="$c.fn.colorbox.close();">X</a></div>');
					}
				}
			},
			onOpen: function () { $c('body').css('overflow', 'hidden'); },
			//$("#leftNav ul").prepend("<li>before the first &lt;li&gt;</li>"); 
			onClosed: function () { $c('body').css('overflow', 'auto'); $c('#cboxCoopClose').remove(); }
		},
		overlayoptions_variants: {
			transition: 'none',
			opacity: 0.7,
			initialWidth: 800,
			innerWidth: 800,
			innerHeight: 525,
			photo: false,
			current: '',
			onOpen: function () { $c('body').css('overflow', 'hidden'); },
			onClosed: function () { $c('body').css('overflow', 'auto'); }
		},

		imagezoom: function (preventDefault) {

			if (imgAllowZoom) {
				if (preventDefault) { $c('a[rel=\'gallery\']:eq(' + imgItemSelected + ')').click().preventDefault; }
				else { $c('a[rel=\'gallery\']:eq(' + imgItemSelected + ')').click(); }
			}
		}

	};
} ();

coop.variantselect = function () {
    return {
        initform: function () { //TODO: dennne bør splittes ud i mindre funktioner

            $c(".notify").hide();
            // grab the html template for each item
            var template = $c("#variantOptionsTemplate").html();
            //$c("#variantOptionsTemplate").remove();
            var statuses = { InStock: 0, PreOrderable: 1, BackOrderable: 2, OutOfStock: 3, EksistererIkke: 4 };

            // create variant dropboxes
            $c.each(product.variantSpecs, function (current) {
                var item = $c(template);

                // configure the i temes
                item.appendTo($c("#variantsContainer"));
                item.find(".variantname").html(this.name + ":");
                var selectBox = item.find(".selectbox").append('<span style="color:gray;">Vælg</span><select disabled="disabled"><option value="">Vælg...</option></select>').find("select");

                // catch on change events from dropdown
                selectBox.change(function () {
                    //
                    // cascade down setOptions
                    $c.each($c("#variantsContainer select"), function (x) {
                        if ($c(this).val() !== '') {
                            $c(this).parent().removeClass("variant-validation-error");
                            $c(this).parent().next().hide(); //Hide the pink error box
                        }
                        setOptions($c(this), x, $c(this).val());
                    });

                    // disable selects far down the array
                    $c.each($c("#variantsContainer select"), function (x) {
                        var isDisabled = x > 0 && $c($c("#variantsContainer select")[x - 1]).val() === "";
                        $c(this).attr('disabled', isDisabled ? "disabled='disabled'" : "");
                        $c(this).prev().css("color", isDisabled ? "gray" : "black");
                    });

                    // find current selection
                    var selected = [];
                    $c.each($c("#variantsContainer select"), function (x) {
                        selected.push($c(this).val());
                    });

                    $c.each($c("#variantsContainer select option:selected"), function () {
                        $c(this).parent().prev().text($c(this).text());
                    });

                    // locate product matching selection
                    setProduct(null);
                    $c.each(product.variants, function () {
                        var found = true;
                        $c.each(this.attributes, function (a) {
                            if (this != selected[a]) {
                                found = false;
                            }
                        });

                        if (found) {
                            setProduct(this);
                        }
                    });
                });
            });

            // udfyld fÃ¸rste dropdown
            var first = $c("#variantsContainer select:first");
            setOptions(first, 0, "");
            first.attr("disabled", "");
            first.prev().css("color", "black");

            // set initial select
            $c.each(initalSelection, function (x) {
                var sel = $c("#variantsContainer select")[x];
                $c(sel).val(initalSelection[x]).change();
            });

            function setOptions(selectbox, variantIndex, selectedValue) {
                // find current prefix
                var prefix = [];
                for (var i = 0; i != variantIndex; i++) {
                    prefix.push($c($c("#variantsContainer select")[i]).val());
                }

                // find the possible values for the slect box
                var values = [];
                var instock = {};
                var added = {};
                var status = {};
                $c.each(product.variants, function () {
                    // does this variant have the same prefix?
                    var sameprefix = true;
                    for (var p = 0; p != prefix.length; p++) {
                        if (this.attributes[p] != prefix[p]) {
                            sameprefix = false;
                            break;
                        }
                    }

                    // if this variant has the same prefix, add to our <options>
                    if (sameprefix) {
                        var v = this.attributes[variantIndex];
                        if (!added[v]) {
                            values.push(v);
                            added[v] = true;
                        }
                        if (!instock[v] && this.status == statuses.InStock || !instock[v] && this.status == statuses.PreOrderable) {
                            instock[v] = true;
                        }

                        if (status[v] && this.status == statuses.InStock) {
                            status[v] = false;
                        } else if (this.status == statuses.BackOrderable) {
                            status[v] = false;
                        }
                    }
                });

                // convert options to html and put into select 
                var options = '<option value="">Vælg...</option>';
                $c.each(values, function () {
                    var selected = this == selectedValue ? 'selected="selected"' : '';
                    options += '<option value="' + (instock[this] ? this : "") + '" ' + selected + (instock[this] ? "" : " disabled='disabled'") + '>' + this;
                    if (!instock[this]) {
                        options += ' (udsolgt)';
                    }
                    else if (status[this]) {
                        options += ' (midlertidig udsolgt)';
                    }
                    options += '</option>';
                });

                selectbox.html(options);
            }
        }
    };
} ();

coop.selectbox = function () {
    return {
        initform: function (dropdownContaierId) { //TODO: dennne bør splittes ud i mindre funktioner
            var dropdownContainer = $c("#" + dropdownContaierId);
            var valueContainer = dropdownContainer.find("span:first");
            var selectElement = dropdownContainer.find("select:first");

            //Set initial value
            if ($c("select option:selected:first").length > 0) {
                valueContainer.html($c("select option:selected:first").text());
            }

            selectElement.change(function () {
                $c("select option:selected").each(function () {
                    valueContainer.html($c(this).text());
                });
            });
        }
    };
} ();

coop.checkout = function () {
    return {
        overlayoptions: { transition: 'none',
            opacity: 0.7,
            initialWidth: 792,
            innerWidth: 792,
            photo: false,
            current: '',
            onOpen: function () { $c('body').css('overflow', 'hidden'); },
            onClosed: function () { $c('body').css('overflow', 'auto'); }
        },

        selectstoreoverlayoptions: { transition: 'none',
            opacity: 0.7,
            initialWidth: 990,
            innerWidth: 990,
            photo: false,
            current: '',
            onOpen: function () { $c('body').css('overflow', 'hidden'); },
            onClosed: function () { $c('body').css('overflow', 'auto'); }
        },

        setShipping: function (data) {
            $c('.shippingprice').text(data.Fragtpris);
            $c('.memberprice').text(data.MedlemsTotalpris);
            $c('.price').text(data.Totalpris);
        },

        showform: function () {
            if ($c('input[name="IsMember"]:checked').val() == 'true') {
                $c('#memberno').show();
            } else {
                $c('#memberno').hide();
            }

            $c('#personal_info').show();
            $c('div.step2_actions input').css('visibility', 'visible');
        },

        toggledelivery: function (elm) {
            if ($c(elm).is(':checked')) {
                $c('#personal_info_delivery').show();
            } else {
                $c('#personal_info_delivery').hide();
            }
        },

        selectstorefromlist: function () {
            var options = coop.checkout.selectstoreoverlayoptions;
            options.html = $c('#selectstore').html();
            options.onComplete = function () {
                coop.inputhelpers();
            };
            $c.fn.colorbox(options);
        },

        selectstorefrommap: function (serviceButikListe, serviceButikInfoWindow) {
            var options = coop.checkout.selectstoreoverlayoptions;
            options.html = $c('#selectstore').html();
            options.onComplete = function () {
                coop.inputhelpers();

                $c.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    url: serviceButikListe,
                    dataType: "json",
                    success: function (data) {
                        coop.googlemap(data, serviceButikInfoWindow);

                        $c('#map').bind('onComplete', function (e) {
                            $c('#map').cGoogleMap('setAdresseSilent', window.GetSearchAdressString());
                        });
                    }
                });
            };
            $c.fn.colorbox(options);
        },

        closeselectstorefrommap: function () {
            $c.fn.colorbox.close();
        },
        selectStoreFromGoogleMaps: function (sourceContainerId, targetContainerId, kardexNummer) {
            $c("#LeveringKardex").val(kardexNummer);
            $c("#LeveringKardexHtml").val($c("#" + targetContainerId).html());

            $c("#" + sourceContainerId).html($c("#" + targetContainerId).html());

            if ($c("#selectstoreContainer").hasClass("butik_ikke_valgt")) {
                $c("#selectstoreContainer").removeClass("butik_ikke_valgt");
                $c("#selectstoreContainer").addClass("butik_valgt");
            }

            //Turn off the validation error
            if ($c("#validationContainer").hasClass("label-validation-error")) {
                $c("#validationContainer").removeClass("label-validation-error");
            }

            if ($c("#kardexNrValidationSummary").length > 0) {
                $c("#kardexNrValidationSummary").hide();
            }

            $c.fn.colorbox.close();
        },
        selectprivateaddress: function () {
            var options = coop.checkout.overlayoptions;
            options.html = $c('#selectprivateaddress').html();
            options.onComplete = function () {
                coop.inputhelpers();
            };
            $c.fn.colorbox(options);
        },

        selectdeliveryaddress: function () {
            var options = coop.checkout.overlayoptions;
            options.html = $c('#selectdeliveryaddress').html();
            options.onComplete = function () {
                coop.inputhelpers();
            };
            $c.fn.colorbox(options);
        },

        addinsuranceoverlayoptions: { transition: 'none',
            opacity: 0.7,
            initialWidth: 405,
            innerWidth: 405,
            //innerHeight: 215,
            initialHeight: 215,
            photo: false,
            //title: 'Varen er blevet tilføjet til din kurv',
            onOpen: function () { $c('body').css('overflow', 'hidden'); },
            onClosed: function () { $c('body').css('overflow', 'auto'); }
        },

        addinsurance: function () {
            var options = coop.checkout.addinsuranceoverlayoptions;
            options.html = $c('#addinsurance').html();
            $c.fn.colorbox(options);
        },

        showPopDialog: function (dialogType, antalNumber, form) {
            var options = coop.checkout.addinsuranceoverlayoptions;

            options.html = parseTemplate($c("#" + dialogType).html(), { Antal: antalNumber }); //$c('#addinsurance').html();
            $c.fn.colorbox(options);
        },

        addtobasketclick: function () {

            var produktId = $c("input[name='ProductId']").val();
            if (produktId == "variant") {
                var missing = [];
                $c.each($c("#variantsContainer select"), function () {
                    var selBox = $c(this);
                    if (selBox.val() === '') {
                        selBox.parent().addClass("variant-validation-error");

                        var errorBox = selBox.parent().next();
                        var errorText = selBox.parent().prev().text();
                        errorBox.text("Vælg \"" + errorText + "\"");
                        errorBox.show();
                        //missing.push(selBox.parent().prev().text());
                    }
                });
                return false;
            }
            else {
                coop.PleaseWait.Show("maincontainer");
            }

            var valgt = $c("input[name='insurance']:checked").val();
            if (valgt !== undefined) {
                $c("input[name='ForsikringValgt']:hidden").val(valgt);
            }

            return true;
        }

    };
} ();


coop.subscriptions = function () {
    return {
        overlayoptions: { transition: 'none',
            opacity: 0.7,
            initialWidth: 792,
            innerWidth: 792,
            photo: false,
            current: '',
            onOpen: function () { $c('body').css('overflow', 'hidden'); },
            onClosed: function () { $c('body').css('overflow', 'auto'); }
        },

        editpersonalinfo: function () {
            var options = coop.subscriptions.overlayoptions;
            options.html = $c('#editpersonalinfo').html();
            options.onComplete = function () {
                coop.inputhelpers();
            };
            $c.fn.colorbox(options);
        },

        editsubscription: function () {
            var options = coop.subscriptions.overlayoptions;
            options.html = $c('#editsubscription').html();
            options.onComplete = function () {
                coop.inputhelpers();
                $c('#cboxContent .editsubscription table.round_darkgrey td.col2').css('width', ($c('#cboxContent table.round_darkgrey td.col2 :checkbox').length * 26));
                $c('#cboxContent .editsubscription table select.mini').uniform({ selectClass: 'selector mini' });
                $c('#cboxContent .editsubscription table select.narrow').uniform({ selectClass: 'selector narrow' });
                $c('#cboxContent table :checkbox').uniform();
            };
            $c.fn.colorbox(options);
        },

        deletesubscription: function () {
            var options = coop.subscriptions.overlayoptions;
            options.html = $c('#deletesubscription').html();
            options.onComplete = function () {
                coop.inputhelpers();
            };
            $c.fn.colorbox(options);
        },

        selectstore: function () {
            var options = coop.subscriptions.overlayoptions;
            options.html = $c('#selectstore').html();
            options.onComplete = function () {
                coop.inputhelpers();
                //var map = new google.maps.Map2(document.getElementById("map"));
                //map.setCenter(new google.maps.LatLng(55.6613, 12.3649), 13);
            };
            $c.fn.colorbox(options);
        }
    };
} ();

coop.customerservice = function () {
    return {
        showdefinition: function (elm) {
            var dfnelm = $c(elm).next('br').next('.dfn');
            if (dfnelm.is(':visible')) {
                dfnelm.hide();
                $c(elm).removeClass("down");
            } else {
                $c(".dfn").hide();
                $c(".faqList .links a").removeClass("down");
                dfnelm.toggle();
                $c(elm).toggleClass("down");
            }
        }
    };
} ();

coop.shoppinglist = function() {
    return {
        addrecipients: function() {
            //for (i = 1; i <= 5; i++) {
            coop.shoppinglist.addrecipient();
            //}
        },

        addrecipient: function() {
            var clone = $c('#sendshoppinglist .col1 input[type="text"]:eq(0)').clone(true);
            clone.val('modtagers e-mail:');
            clone.insertAfter($c('#sendshoppinglist .col1 input[type="text"]:last'));
        },

        showsendshoppinglist: function() {
            $c('.shoppinglist .boxheader span').css('visibility', 'hidden');
            $c('#sendshoppinglist').show();
        },

        closesendshoppinglist: function() {
            $c('.shoppinglist .boxheader span').css('visibility', 'visible');
            $c('#sendshoppinglist').hide();
        }

    };
} ();

coop.newsletter = function() {
    return {
        overlayoptions: { transition: 'none',
            opacity: 0.7,
            initialWidth: 792,
            innerWidth: 792,
            photo: false,
            current: '',
            onOpen: function() { $c('body').css('overflow', 'hidden'); },
            onClosed: function() { $c('body').css('overflow', 'auto'); }
        },
        setchildren: function(elm) {
            var noofchildren = $c(elm).children('option:selected').val();

            var noofelm = $c('.children .child').length - 1;

            if (noofchildren == noofelm) {
                return;
            }
            else if (noofchildren > noofelm) {
                for (i = noofelm; i < noofchildren; i++) {
                    coop.newsletter.addchild(i);
                }
            }
            else if (noofelm > noofchildren) {
                for (i = noofelm; i > noofchildren; i--) {
                    $c('.children .child:last').remove();
                }
            }
            $c('.child select.mini:not("div.template select.mini, div.selector select.mini")').uniform({ selectClass: 'selector mini' });
        },

        addchild: function(no) {
            var clone = $c('.children .child:eq(0)').clone(true);
            clone.html(clone.html().replace(/\#/g, no));
            clone.css('display', 'block');
            clone.removeClass('template');
            clone.find('select.mini').uniform({ selectClass: 'selector mini' });
            clone.find('select.micro').uniform({ selectClass: 'selector micro' });
            clone.insertAfter($c('.children .child:last'));
        },

        deleteall: function() {
            var options = coop.newsletter.overlayoptions;
            options.html = $c('#deleteall').html();
            $c.fn.colorbox(options);
        },

        shownewsletterselector: function() {
            $c('div.personalinfo').hide();
            $c('div.newsletter').show();
            $c('.newslettertabs li:eq(1)').removeClass('selected');
            $c('.newslettertabs li:eq(0)').addClass('selected');
        },

        showpersonalinfo: function() {
            $c('div.newsletter').hide();
            $c('div.personalinfo').show();
            $c('.newslettertabs li:eq(0)').removeClass('selected');
            $c('.newslettertabs li:eq(1)').addClass('selected');
        }

    };
} ();

coop.ems = function() {

    return {
        quicktilmeld: function(emailadresse, mailgruppeid) {
            coop.ems.toggleButtons();
            var targetUrl = "Ems/QuickTilmeld";
            jQuery.ajax({
                type: "POST",
                //contentType: "application/json; charset=utf-8", //contentType udkommenteret da data ellers tilsyneladende ikke bliver sendt?? //TODO: tag stilling til om linien bare skal slettes
                url: targetUrl,
                data: "emailAdresse=" + emailadresse + "&mailgruppeId=" + mailgruppeid,
                dataType: "json",
                success: function(data, resp) {
                    if (data !== null) {
                        $c('.w4.emailtilmeldt .text').html(data.Besked);
                        $c('.w4.emailtilmeldt .modalpopup').addClass(data.Type);
                        coop.emailtilmeldt();
                        coop.ems.toggleButtons();
                        //alert(data.Type);
                        //alert(data.Besked);
                    }
                },
                error: function(xhr, ajaxOptions, thrownError) {
                    //alert(xhr.responseText);
                    coop.ems.toggleButtons();
                }
            });
        },
        quickretafmeld: function(emailadresse) {
            coop.ems.toggleButtons();
            var targetUrl = "Ems/QuickRetAfmeld";
            jQuery.ajax({
                type: "POST",
                //contentType: "application/json; charset=utf-8", //contentType udkommenteret da data ellers tilsyneladende ikke bliver sendt?? //TODO: tag stilling til om linien bare skal slettes
                url: targetUrl,
                data: "emailAdresse=" + emailadresse,
                dataType: "json",
                success: function(data, resp) {
                    if (data !== null) {
                        $c('.w4.emailtilmeldt .text').html(data.Besked);
                        $c('.w4.emailtilmeldt .modalpopup').addClass(data.Type);
                        coop.emailtilmeldt();
                        coop.ems.toggleButtons();
                    }
                },
                error: function(xhr, ajaxOptions, thrownError) {
                    //alert(xhr.responseText);
                    coop.ems.toggleButtons();
                }
            });
        },
        toggleButtons: function() {
            $c('#emsEmailAdresse').parent().find(':image').toggle();
            if (!$c('#emsEmailAdresse').parent().find('#ajaxloading').length) {
                $c('#emsEmailAdresse').parent().append('<div id="ajaxloading" style="float:left;height:27px;line-height:27px;margin-left:8px;"><img src="/design/img/coop/ajax-loader.gif" width="26" height="26" />&nbsp;</div>');
            } else {
                $c('#emsEmailAdresse').parent().find('#ajaxloading').toggle();
            }
        }
    };
} ();

function showResponse(responseText, statusText, xhr, $form) {
    var options = coop.product.overlayoptions_variants;
    options.html = responseText;
    options.onComplete = function() {
        coop.inputhelpers();
        $c('#cboxContent select.narrow').uniform({ selectClass: 'selector narrow' });
        $c('#cboxContent select.large').uniform({ selectClass: 'selector large' });
        coop.variantselect.initform();
        imgAllowZoom = false;
        $c('.zoom').hide();
        $c('.product_actions a.notify').bind('click', function() {
            coop.instockservice();
        });
    };
    $c.fn.colorbox(options);
} 




function chkNumeric(objName, minval, maxval) {
    // only allow 0-9 be entered, plus any values passed
    // (can be in any order, and don't have to be comma, period, or hyphen)
    // if all numbers allow commas, periods, hyphens or whatever,
    // just hard code it here and take out the passed parameters
    var checkOK = "0123456789";
    var checkStr = objName;
    var allValid = true;
    var decPoints = 0;
    var allNum = "";

    if (checkStr.value.length === 0) {
        alert("Skriv et tal");
        return (false);
    }

    for (i = 0; i < checkStr.value.length; i++) {
        ch = checkStr.value.charAt(i);
        for (j = 0; j < checkOK.length; j++) {
            if (ch == checkOK.charAt(j)) { break; }
        }
        if (j == checkOK.length) {
            allValid = false;
            break;
        }
        if (ch != ",") { allNum += ch; }
    }
    if (!allValid) {
        alertsay = "Der kan kun anvendes følgende tegn \"";
        alertsay = alertsay + checkOK + "\" i feltet";
        alert(alertsay);
        return (false);
    }
    // set the minimum and maximum
    var chkVal = allNum;
    var prsVal = parseInt(allNum);
    if (chkVal !== "" && !(prsVal >= minval && prsVal <= maxval)) {
        alertsay = "Brug en værdi større end eller ";
        alertsay = alertsay + "lig med \"" + minval + "\" og mindre end eller ";
        alertsay = alertsay + "lig med \"" + maxval + "\" i feltet.";
        alert(alertsay);
        return (false);
    }
}

function checkNumeric(objName, minval, maxval) {
    var numberfield = objName;

    if (numberfield.value === "0") {
        return confirm("Ønsker du at slette denne vare?");
    }

    if (chkNumeric(objName, minval, maxval) === false) {
        numberfield.select();
        numberfield.focus();
        return false;
    }

    return true;
}

function setImage(newSrc, index) {
    imgItemSelected = index;
    $c('#galleryIm img').attr('src', newSrc);
}


//////////////////////////////////////////////////////////////////////////////////////////////////////
// product.js
//////////////////////////////////////////////////////////////////////////////////////////////////////

var _tmplCache = {};
this.parseTemplate = function(str, data) {
    /// <summary>
    /// Client side template parser that uses &lt;#= #&gt; and &lt;# code #&gt; expressions.
    /// and # # code blocks for template expansion.
    /// NOTE: chokes on single quotes in the document in some situations
    ///       use &amp;rsquo; for literals in text and avoid any single quote
    ///       attribute delimiters.
    /// </summary>    
    /// <param name="str" type="string">The text of the template to expand</param>    
    /// <param name="data" type="var">
    /// Any data that is to be merged. Pass an object and
    /// that object's properties are visible as variables.
    /// </param>    
    /// <returns type="string" />  
    /// http://www.west-wind.com/weblog/posts/509108.aspx
    var err = "";
    try {
        var func = _tmplCache[str];
        if (!func) {
            var strFunc =
    "var p=[],print=function(){p.push.apply(p,arguments);};" +
                "with(obj){p.push('" +

    str.replace(/[\r\t\n]/g, " ")
       .replace(/'(?=[^#]*#>)/g, "\t")
       .split("'").join("\\'")
       .split("\t").join("'")
       .replace(/<#=(.+?)#>/g, "',$1,'")
       .split("<#").join("');")
       .split("#>").join("p.push('")
       + "');}return p.join('');";

            //alert(strFunc);
            func = new Function("obj", strFunc);
            _tmplCache[str] = func;
        }
        return func(data);
    } catch (e) { err = e.message; }
    return "< # ERROR: " + err + " # >";
};










function ButtonHover(el) {
    var s = el.src;

    //if the image in question is not a button, do nothing
    if (s.indexOf("button") == -1) { return; }

    if (s.indexOf("_MO") == -1) {
        s = s.replace(".png", "");
        s = s + "_MO.png";
        el.src = s;
    } else {
        s = s.replace("_MO.png", "");
        s = s + ".png";
        el.src = s;
    }
}


//Bruger denne metode til at formatere tal værdier.
//http://stackoverflow.com/questions/149055/how-can-i-format-numbers-as-money-in-javascript
Number.prototype.formatMoney = function (c, d, t) {
    var n = this, c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "," : d, t = t == undefined ? "." : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};

