// JScript File

/// <summary>
/// Functions used by the shopping cart.
/// </summary>
var ShoppingCart = {
    
    onAddToCartButtonClick : function(productId, sizeSelectorId, quantityTextBoxId, colorSelectId) {
        var size = $(sizeSelectorId).value;
        var quantity = $(quantityTextBoxId).value;
        var color = $(colorSelectId).value;
        
        var url = "/AddToShoppingCart.aspx?productId="+productId+"&size="+size+"&quantity="+quantity+"&color="+color;
        window.location.href = url;
    }
}


/// <summary>
/// Class used to resize the different column in the layout to maintain same heights.
/// </summary>
var SameHeights = {
    init : function() {
        var mainContainer = $("main-container");
        var leftBar = $("left-bar"); 
        var rightBar = $("content-sidebar"); 
        var collectionBar = $("product-collections-bar");

        var height = mainContainer.offsetHeight;
        if (height > 558) {
            if (document.all) {
                if (leftBar) leftBar.style.height = (height-39) + "px";
                if (rightBar) rightBar.style.height = (height-30) + "px";
                if (collectionBar) collectionBar.style.height = (height-30) + "px";
            }
        }
    }
}

window.addEvent("domready", SameHeights.init);



/// <summary>
/// NiceForms automatically finds all <select> elements to find
/// whether each has the attribute "enableStyling" set to "true".
/// In that case the <select> element is styled.
/// </summary>
var NiceForms = {
    init : function() {
        NiceForms.replaceSelects();
    },
    
    replaceSelects : function() {
	    // get all the select fields on the page
        var selects = document.getElementsByTagName('select');
    	
	    // cycle trough the select fields
        for (var i = 0; i < selects.length; i++) {
    		var select = selects[i];
    		
    		if (select.getAttribute("enableStyling") != "true") {
    		    continue;
    		}
    		
    		
    		var id = "";
    		if (select.id.length > 0) {
                id = select.id;
    		} else if (select.name.length > 0) {
    		    id = select.name;
    		} else {
    		    id = "nice-select-" + i;
    		}
    		
    		select.id = id;
    		
		    //create and build div structure
		    var selectBox = document.createElement("div");
		    selectBox.className = "select-container";
		    selectBox.id = "select-for-" + id;
		    
		    var selectedBox = document.createElement("div");
		    selectedBox.className = "selected";
		    
		    var optionsBox = document.createElement("div");
		    optionsBox.className = "options";
		    optionsBox.style.display = "none";
		    
		    
		    var clearBox = document.createElement("div");
		    clearBox.style.clear = "both";
		    
		    var optionsList = document.createElement("ul");
		    
		    selectBox.appendChild(selectedBox);
		    selectBox.appendChild(optionsBox);
		    selectBox.appendChild(clearBox);
		    
		    optionsBox.style.position = "absolute";
		    optionsBox.selectObj = select;
            optionsBox.style.left = NiceForms._findPosX(select) + 'px';
		    optionsBox.style.top = NiceForms._findPosY(select) + 17 + 'px';

		    optionsBox.appendChild(optionsList);
		    
		    var selectedText = document.createElement("a");
		    selectedText.className = "selected-text";
		    selectedText.href = "#l";
		    NiceForms._addEvent(selectedText, "click", NiceForms._onSelectedTextClick);
		    
		    selectedText.appendChild(document.createTextNode(NiceForms._getSelectedText(select)));
		    selectedBox.appendChild(selectedText);
		    
		    //hide the select field
            select.style.display = "none"; 
    		
		    //insert select div
		    select.parentNode.insertBefore(selectBox, select);
		        		
		    //get select's options and add to options div
		    for (var j = 0; j < select.options.length; j++) {
		        var option = select.options[j];
		        
		        var optionLinkId = id + "-option-" + j;
		        
		        var optionLink = document.createElement("a");
		        optionLink.href = "#";
		        //optionLink.addEvent("click", NiceForms._onListItemClick);
		        NiceForms._addEvent(optionLink, "click", NiceForms._onListItemClick);
		        optionLink.appendChild(document.createTextNode(option.text));
		        optionLink.optionObj = option;
		        optionLink.id = optionLinkId;
		        
		        var optionListItem = document.createElement("li");
		        optionListItem.appendChild(optionLink);
		        
		        if (option.selected) {
		            optionListItem.className = "selected";
		        }
		        
			    optionsList.appendChild(optionListItem);
		    }
	    }
    },
    
    _addEvent : function(obj, type, callbackFunction) {
        if (obj.addEvent) {
            obj.addEvent(type, callbackFunction);
        } else if (obj.attachEvent) {
            obj.attachEvent("on" + type, callbackFunction);
        } else {
            alert("NiceForms._addEvent failed.");
        }
    },

    _getSelectedText : function(select) {
        
        return select.options[select.selectedIndex].text;
    },
    
    _findPosY : function(obj) {
	    var posTop = 0;
	    while (obj.offsetParent) {
		    posTop += obj.offsetTop;
		    obj = obj.offsetParent;
	    }
	    return posTop;
    },
    
    _findPosX : function(obj) {
	    var posLeft = 0;
	    while (obj.offsetParent) {
		    posLeft += obj.offsetLeft;
		    obj = obj.offsetParent;
	    }
	    return posLeft;
    },
    
    _onSelectedTextClick : function(e) {
        var link = e.target || e.srcElement;
        var selectBox = link.parentNode.parentNode;
        
        NiceForms._toggleOptions(selectBox);
        
        if (e.preventDefault) e.preventDefault();
        e.returnValue = false;
    },
    
    _onShowOptionsButtonClick : function(e) {
        NiceForms._onSelectedTextClick(e);
    },
    
    _onListItemClick : function(e) {
        var link = e.target || e.srcElement;
        var option = link.optionObj;
        var li = link.parentNode;
        var ul = li.parentNode;
        var optionsBox = ul.parentNode;
        var select = option.parentNode;
        var selectContainer = optionsBox.parentNode;
        var selectedTextLink = selectContainer.childNodes[0].childNodes[0];
        
        for (var i = 0; i < ul.childNodes.length; i++) {
            ul.childNodes[i].className = "";
        }
        
        li.className = "selected";
        optionsBox.style.display = "none";
        select.selectedIndex = option.index;
        if (select.onchange) {
            select.onchange(e);
        }
        selectedTextLink.innerHTML = option.text;
        
        if (e.preventDefault) e.preventDefault();
        e.returnValue = false;
    },
    
    _toggleOptions : function(selectBox) {
        var optionsBox = selectBox.childNodes[1];
        if (optionsBox.style.display == "none") {
            optionsBox.style.display = "block";
            optionsBox.style.left = NiceForms._findPosX(optionsBox.parentNode) + 'px';
		    optionsBox.style.top = NiceForms._findPosY(optionsBox.parentNode) + 17 + 'px';
        } else {
            optionsBox.style.display = "none";
        }
    },
    
    clickEventHandler : function(e) {
        var evt = new Event(e);
        var target = evt.target;
        var selectContainer = NiceForms._findSelectContainer(target);
        
        var selects = document.getElementsByTagName('select');
        for (var i = 0; i < selects.length; i++) {
            var div = $("select-for-" + selects[i].id);
            if (div != null && selectContainer != div) {
                div.childNodes[1].style.display = "none";
            }
        }
    },
    
    _findSelectContainer : function(child) {
        if (child != null) {
            if (child.className == "select-container") {
                return child;
            } else {
                return NiceForms._findSelectContainer(child.parentNode);
            }
        }
        
        return null;
    }
}



window.addEvent("domready", NiceForms.init);
document.addEvent("click", NiceForms.clickEventHandler);




var DropDownMenu = {
    init : function() {
	    if (document.all&&document.getElementById) {
		    var navRoot = document.getElementById("top-left-navigation");
		    var ul = navRoot.childNodes[0];
		    for (i=0; i<ul.childNodes.length; i++) {
			    var node = ul.childNodes[i];
			    if (node.nodeName=="LI") {
				    node.onmouseover=function() {
					    this.className+=" hover";
				    }
				    node.onmouseout=function() {
					    this.className=this.className.replace(" hover", "");
				    }
			    }
		    }
	    }
    }
}

window.addEvent("domready", DropDownMenu.init);

/// <summary>
/// 
/// </summary>
var ProductFilter = {
    run : function() {
        var type = $("filter-type").value;
        var size = $("filter-size").value;
        var gender = $("filter-gender").value;
        var collection = $("filter-collection").value;
        
        var url = "/ProductList.aspx?typeId="+type+"&size="+size+"&gender="+gender+"&collectionId="+collection;
        window.location.href = url;
    }
}


/// <summary>
/// Widget to limit the input length on <textarea> elements.
/// </summary>
var TextBoxMaxLengthLimiter = {
    init : function() {
        var textareas = $$("textarea");

        for (var i = 0; i < textareas.length; i++) {
            var textarea = textareas[i];
            var limitLengthAttr = textarea.getAttribute("limitlength");
            var maxLen = parseInt(limitLengthAttr);
            var spanAttr = textarea.getAttribute("span");
            
            var span = $(spanAttr);
            if (span != null && isNaN(maxLen) == false && maxLen > 0) {
                
                textarea.addEvent("keyup", TextBoxMaxLengthLimiter._onTextAreaKeyUp)
                textarea.addEvent("change", TextBoxMaxLengthLimiter._onTextAreaChanged)
                
                textarea.span = span;
                textarea.maxLenAsInt = maxLen;
                
                span.innerHTML = maxLen - textarea.value.length;
            }
        }
    },
    
    _onTextAreaKeyUp : function(e) {
        var evt = new Event(e);
        var textarea = evt.target;
        
        TextBoxMaxLengthLimiter._removeExtraCharacters(textarea);
        TextBoxMaxLengthLimiter._updateSpan(textarea);
    },
    
    _onTextAreaChanged : function(e) {
        var evt = new Event(e);
        var textarea = evt.target;
        
        TextBoxMaxLengthLimiter._removeExtraCharacters(textarea);
        TextBoxMaxLengthLimiter._updateSpan(textarea);
    },
    
    _updateSpan : function(textarea) {
        var span = textarea.span;
        var currentLen = textarea.innerHTML.length;
        var maxLen = textarea.maxLenAsInt;
        var charLeft = maxLen - currentLen;
        span.innerHTML = charLeft;
    },
    
    _removeExtraCharacters : function(textarea) {
        var currentLen = textarea.value.length;
        var maxLen = textarea.maxLenAsInt;
        
        if (currentLen > maxLen) {
            textarea.value = textarea.value.substring(0, maxLen);
        }
    }
}

window.addEvent("domready", TextBoxMaxLengthLimiter.init);



/// <summary>
/// Class used to popup various windows.
/// </summary>
var Popup = {
    
    openTermsOfUse : function() {
        Popup.open("/TermsOfBusiness.aspx", 800, 500, "no", "no");
    },
    
    openCreditCardControlNumber : function() {
        Popup.open("/StaticPages/CreditCardControlNumber.htm", 800, 500, "no", "no");
    },
    
    openHelpCheckout : function() {
        Popup.open("/StaticPages/HelpCheckout.htm", 800, 500, "no", "no");
    },
    
    openSizeGuide : function() {
        Popup.open("/StaticPages/SizeGuide.htm", 800, 500, "no", "no");
    },
    
    openLargeProductDetails : function(id) {
        var url = "/ProductDetailsLarge.aspx?id="+id;
        Popup.open(url, 800, 640, "no", "no");
    },
    
    openLargeGiftCardPicture : function(type) {
        var url = "/StaticPages/GiftGardLargePicture.htm?type="+type;
        Popup.open(url, 800, 500, "no", "no");
    },
    
    open : function(url, width, height, scrollbars, resizable) {
        var options = "";
        
        options += "resizable="+resizable+",";
        options += "scrollbars="+scrollbars+","
        options += "toolbar=no,"
        options += "width=" + width + ",";
        options += "height=" + height;
        
        window.open(url, "d", options);
    }
}

/// <summary>
/// Class that encapsulates newsletter functionality.
/// </summary>
var Newsletter = {
    _buttonClicked : false,
    
    subscribe : function() {
        var field = Newsletter._getField();
        if (Newsletter._validate(field)) {
            var email = field.value;
            var url = "/Newsletter.aspx?do=subscribe&email="+email;
            window.location.href = url;
        }
    },
    
    unsubscribe : function() {
        var field = Newsletter._getField();
        if (Newsletter._validate(field)) {
            var email = field.value;
            var url = "/Newsletter.aspx?do=unsubscribe&email="+email;
            window.location.href = url;
        }
    },
    

    pageSubscribe : function() {
        var field = Newsletter._getPageField();
        if (Newsletter._validate(field)) {
            var email = field.value;
            var url = "/Newsletter.aspx?do=subscribe&email="+email;
            window.location.href = url;
        }
    },
    
    pageUnsubscribe : function() {
        var field = Newsletter._getPageField();
        if (Newsletter._validate(field)) {
            var email = field.value;
            var url = "/Newsletter.aspx?do=unsubscribe&email="+email;
            window.location.href = url;
        }
    },
    
    _validate : function(field) {
        if (Newsletter._buttonClicked) {
            alert("Vent venligst mens vi behandler din forespørgsel...");
            return false;
        }
        
        Newsletter._buttonClicked = true;
    
        var email = field.value;
        var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
        
        if (filter.test(email)) {
            return true;
        } else {
            alert("Den indtastede email adresse er ikke valid. \nIndtast venligt en valid email adresse.");
            field.select();
            field.focus();
            
            Newsletter._buttonClicked = false;
            return false;
        }
    },
    
    _getField : function() {
        return $("newsletter-email-field");
    },
    
    _getPageField : function() {
        return $("newsletter-page-email-field");
    }
}


/// <summary>
/// Functions used in the delivery and shipping page.
/// </summary>
var DeliveryAddress = {
    disableShippingInputs : function(form, disable) {
        var len = form.elements.length;
        for (var i = 0; i < len; i++) {
            var el = form.elements[i];
            if (el.id.indexOf("txtShipping") != -1) {
                el.disabled = disable;
                if (disable) el.className = "textbox disabled";
                else el.className = "textbox";
            }
        }
    },
    
    toggleDisableShippingCompanyName : function(form, disable) {
        DeliveryAddress.disableShippingInputs(form,false);
        
        var len = form.elements.length;
        for (var i = 0; i < len; i++) {
            var el = form.elements[i];
            if (el.id.indexOf("txtShippingCompanyName") != -1) {
                el.disabled = disable;
                if (disable) el.className = "textbox disabled";
                else el.className = "textbox";
                break;
            }
        }
    }
    
    
}


/// <summary>
/// Widget that rotates the bargain products XX seconds interval.
/// </summary>
var BargainProductsRotator = {
    _bargainProductDivsArray : new Array(),
    _currentIndex : 0,
    _timerId : null,
    _rotateIntervalInMilliSeconds : 10000,
    
    init : function() {
        var frontpageBargainProductsBox = $("frontpage-bargain-products");
        if (frontpageBargainProductsBox) {
            var elements = frontpageBargainProductsBox.childNodes;
            
            var divs = BargainProductsRotator._bargainProductDivsArray;
            
            for (var i = 0; i < elements.length; i++) {
                var el = elements[i];
                if (el.tagName == "DIV") {
                    divs.push(el);
                }
            }
            
            if (divs.length > 1) {
                BargainProductsRotator.startTimer();
            }
        }
    },
    
    showNextProduct : function() {
        var index = BargainProductsRotator._currentIndex;
        var currentDiv = BargainProductsRotator._bargainProductDivsArray[index];
        currentDiv.style.display = "none";
        
        if (index >= BargainProductsRotator._bargainProductDivsArray.length-1) {
            index = 0;
        } else {
            index += 1;
        }
        
        var nextDiv  = BargainProductsRotator._bargainProductDivsArray[index];
        nextDiv.style.display = "block";
        
        BargainProductsRotator._currentIndex = index;
    },
    
    startTimer : function() {
        BargainProductsRotator._timerId = window.setInterval(
                BargainProductsRotator.showNextProduct, 
                BargainProductsRotator._rotateIntervalInMilliSeconds);
    }
}

window.addEvent("domready", BargainProductsRotator.init);


var Payment = {
    isValid : function() {
        
        alert("Input is being validated...");
        
        var cardNum1 = $("card-number1").value;
        var cardNum2 = $("card-number2").value;
        var cardNum3 = $("card-number3").value;
        var cardNum4 = $("card-number4").value;
        
        $("card-number").value = cardNum1 + cardNum2 + cardNum3 + cardNum4;
        
        
        return true;
    },
    
    submit : function() {
        $("pay-button-container").style.display = "none";
        var form = $("payment-form");
        
        var cardNum1 = $("card-number1").value;
        var cardNum2 = $("card-number2").value;
        var cardNum3 = $("card-number3").value;
        var cardNum4 = $("card-number4").value;
        
        var txtCardNumber = $("card-number");
        var txtCardOwner = $("card-owner-name");
        var txtCVCNumber = $("cvc-number");
        
        txtCardNumber.value = cardNum1 + cardNum2 + cardNum3 + cardNum4;
        
        var hasErrors = false;
        if (txtCardOwner.value.length < 5) {
            alert("Indtast navnet på kortets ejer.");
            txtCardOwner.focus();
            hasErrors = true;
        } else if (txtCardNumber.value.length != 16) {
            alert("Kort nummer er ugyldig.");
            $("card-number1").focus();
            hasErrors = true;
        } else if (txtCVCNumber.value.length != 3) {
            alert("Indtast kontrol nummer.");
            txtCVCNumber.focus();
            hasErrors = true;
        }
        
        
        if (!hasErrors) {
            form.submit();
        } else {
            $("pay-button-container").style.display = "";
        }
    }
}

var GiftCard = {
    submitForm : function() {
        var message = $("Content_txtMessage").value;
        var selected = $("Content_rdoCard1").checked || $("Content_rdoCard2").checked || $("Content_rdoCard3").checked || $("Content_rdoCard4").checked;
        
        if (message.length > 0 && selected == false) {
            alert("Du har ikke valgt noget kort.");
            return;
        }
        
        if (message.length == 0 && selected == true) {
            alert("Du har ikke skrevet tekst til dit kort.");
            return;
        }

        $("Form1").submit();
    },
    
    toggleCardSelection : function(radio) {
        
        if (radio.oldChecked == null || typeof(radio.oldChecked) == "undefined") {
            radio.oldChecked = radio.checked;
        } else {
            if (radio.oldChecked == true) {
                radio.checked = false;
                radio.oldChecked = null;
            }
        }
        
        
    }
}


var ProductCollectionAnimations = {
    init : function() {
        
        var div = $("product-collections-bar");
        var linkElements = div.getChildren("a");
        
        for (var i = 0; i < linkElements.length; i++) {
            var elem = linkElements[i];
            
            var elemImg = elem.getChildren()[0];
            
            elem.addEvent("mouseover", function() {
                var img = this.getChildren()[0];
                img.src = img.src.replace(".jpg", ".gif");
            });
            
            elem.addEvent("mouseout", function() {
                var img = this.getChildren()[0];
                img.src = img.src.replace(".gif", ".jpg");
            });
        }
        
    }
}

window.addEvent("domready", ProductCollectionAnimations.init);


// JScript File

function placeFlash(fil, width, height)
{
	    document.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="' + width + '" height="' + height + '" >\n');
	    document.write('<param name="movie" value="' + fil + '">\n');
	    document.write('<param name="quality" value="high">\n');	
	    document.write('<param name="wmode" value="transparent">\n');	
	    document.write('<embed src="'+ fil + '" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" wmode="transparent" width="' + width + '" height="' + height + '">\n');
	    document.write('</embed>\n');	
	    document.write('</object>\n');
}



