/*
INCLUDES
**********************************************/
// specify which javascripts to include on the webpage
//js('/files/javascript/SCRIPTNAME.js');
js('/files/javascript/jquery.cycle.all.min.js');

/*
ON LOAD
*********************************************/
// jQuery 'onReady' script - runs when the document have been loaded, but before images
$(function(){
	formValidation();
	toggleMainMenu();
	//toggleAreaMenu();
	activateAjaxShopping();
	autocompletePostalCode();
	productlistImage();
	postPolls();
	quizWizzard();
	tracktrace();
	feedReader();
	changeProductImage();
	flashLoad();
	openPopups();
	showInlineHelp();
	fixMenuFill('.topgroupsmenu>ul',12,10);
	//fixMenuFill('#siteMenu>ul:first',4,0);
	//variantSelection();
	
	
	// Update BasketHead if customer chooses to create an account
	$('#ccsend').submit(function() {
		$.get('dynamic.aspx?data=updatebh&key=wantmembership&value=1');
	});
	
	// replace content if there is a flashmovie available 
	$('.shopfront').find('li[class*="jsFlash"]').flash(null,{version: 8},function(htmlOptions){
		var $this = $(this);
		var flashRegExp = new RegExp('jsFlash.+]','i');
		htmlOptions.src = $this.attr('class').match(flashRegExp)[0].replace('jsFlash[','').replace(']','');
		htmlOptions.width = 180;
		htmlOptions.height = 151;
		htmlOptions.wmode = 'transparent';
		
		if ($this.hasClass('wide')){
			htmlOptions.width = 570;
		}
		
		this.innerHTML = '<div class="flashAlt">'+this.innerHTML+'</div>';
		$this.addClass('flash-replaced').prepend($.fn.flash.transform(htmlOptions));
	});
	
	// replace text in input fields
	$('.jsInput').toggleInputText();
	
	
	
	$('#productImages a').click(function(){
		$.modal('<img id="jsModalproductimage" src="' + $(this).attr('href') + '" alt=""/>',{
			minHeight: 440,
			minWidth: 620,
			overlayClose: true
		});
		return false;
	});
	
	
	// if there are variants on any shown products, then get the variants through an Ajax call
	$('.jsVariantselection').each(function(){
		var objBox = $(this);
		var strOriginalProductId = objBox.closest('form').find('input[name=originalproductid]').val();
		
		objBox.attr('disabled','disabled');
		
		// change product image on productinfo on change of the select-box, if the image exists
		if ($('#tProductinfo').size() > 0) {
			objBox.change(function(){
				var strPrevHref = $('#jsMainproductimage').attr('href'),
						intLastHrefSlash = strPrevHref.lastIndexOf('/')+1;
				
				var strNewHref = strPrevHref.substring(0, intLastHrefSlash) + $(this).val() + '.jpg';
				
				var strPrevImage = $('#jsMainproductimage img').attr('src'),
						intLastImageSlash = strPrevImage.lastIndexOf('/')+1;
				
				var strNewImage = strPrevImage.substring(0, intLastImageSlash) + $(this).val() + '.jpg';
				
				$.ajax({
					url: strNewHref,
					success: function(data){
						$('#jsMainproductimage').attr('href', strNewHref).find('img').attr('src', strNewImage);
					},
					error: function(data){
						strNewHref = strPrevHref.substring(0, intLastHrefSlash) + 'noimage.gif';
						strNewImage = strPrevImage.substring(0, intLastImageSlash) + 'noimage.gif';
						$('#jsMainproductimage').attr('href', strNewHref).find('img').attr('src', strNewImage);
					}
				});
			
				var _originalProductId = objBox.closest('form').find('input[name=originalproductid]').val();
				$.get('/dynamic.aspx?load=main&data=GetVariants&ajaxmode=1',{
					key: _originalProductId
				},function(data){
					data = eval("(" + data + ")"); 
					var objVars = data.variants.variant;
					
					for (var i = 0; i < objVars.length; i++){
						if (objVars[i].productid == $('.jsVariantselection option:selected').val())
						{
							if (objVars[i].header != '' && objVars[i].netprice != '')
							{
								$('#jsProducttobasket h1').text(objVars[i].header);
								$('#jsProductnetprice').text(objVars[i].netprice);
							}
						}
					}
				},'text');
			});
		}
		
		// change product image on productlistpaging on change of the select-box, if the image exists
		if ($('.tProductlistpaging').size() > 0) {
			objBox.change(function(){
				var objImage = $(this).closest('.productdetails').find('.image img');
				
				var strPrevImage = objImage.attr('src'),
						intLastImageSlash = strPrevImage.lastIndexOf('/')+1;
				
				var strNewImage = strPrevImage.substring(0, intLastImageSlash) + $(this).val() + '.jpg';
				
				$.ajax({
					url: strNewImage,
					success: function(data){
						objImage.attr('src', strNewImage);
					},
					error: function(data){
						strNewImage = strPrevImage.substring(0, intLastImageSlash) + 'noimage.gif';
						objImage.attr('src', strNewImage);
					}
				});
				
				var _originalProductId = $(this).closest('form').find('input[name=originalproductid]').val();
				
				$.get('/dynamic.aspx?load=main&data=GetVariants&ajaxmode=1',{
					key: _originalProductId
				},function(data){
					data = eval("(" + data + ")"); 
					var objVars = data.variants.variant;
					
					for (var i = 0; i < objVars.length; i++){
						if (objVars[i].productid == objBox.val())
						{
							if (objVars[i].header != '' && objVars[i].netprice != '')
							{
								objBox.closest('li').find('.productheader').text(objVars[i].header);
								objBox.closest('form').find('.jsProductnetprice').text(objVars[i].netprice);
							}
						}
					}
				},'text');
			});
		}
		
		
		
		$.get('/dynamic.aspx?load=main&data=GetVariants&ajaxmode=1',{
			key: strOriginalProductId
		},function(data){
			data = eval("(" + data + ")"); 
			var objVars = data.variants.variant,
					strHtml = '<option value="">' + objBox.find('option').eq(0).text() + '</option>';
			
			for (var i = 0; i < objVars.length; i++){
				strHtml += '<option value="' + objVars[i].productid + '">' + objVars[i].header + '</option>';
	  	}
			
			objBox.html(strHtml).removeAttr('disabled');
			
		},'text');
	});
	
	
	// show tip a friend overlaybox 
	$('.lnkTipafriend').click(function(){
		var strTipfriendbox = '#tipAFriendBox' + $(this).attr('id').replace('tipAFriendlink','');
		var strHtml = $(strTipfriendbox).html();
		$.modal(strHtml);
		$('.tipAFriend .jsInput').toggleInputText();
		return false;
	});


	$('#showdeliveryaddress').click(function(){
		if (this.checked){
			$('#deliveryaddressbox').show();
		} else {
			$('#deliveryaddressbox').hide();
		}
	});
	
	// frontpage carousel cycle
	$('.frontpageRotation').cycle({
		timeout: 5000
	});
	
	// create carousel on shopfront promotionarticles
	if ($('.promotioncycle img').size() > 1){
		$('.promotioncycle').cycle({
			fx: 'fade',
			speed: 'fast',
			timeout: 5000,
			pager: '.promotioncyclenav',
			pagerAnchorBuilder: function(idx, slide){
				// return selector string for existing anchor
				return '.promotioncyclenav a:eq(' + idx + ')';
			},
			pagerEvent: 'mouseover',
			pauseOnPagerHover: true
		});
	
		// force a click event on the carousel navigation links, to counteract the cycle plugin event unbinder.
		$('.promotioncyclenav a').click(function(){
			location.href = this;
		});
	} 
	
	
	
	$('.pageImagegroup ul.imagegallery a').click(function(){
		$(this).blur();
		$(this).parent().addClass('active').siblings().removeClass('active').closest('.pageImagegroup').find('img:first').attr('src',$(this).attr('href'));
		return false; 
	});
	
	// move related articles to the bannerarticles area
	moveBannerArticles();
	
	// activate warning to IE6 users
	ie6Warning();
	
	$('#loginboxcreatecustomer, #basketcreatecustomer').click(createCustomerBox);
	
	
	// bestem hvilken type kunde der skal bruges
	$('#shopAs').find('input').click(function(){
		if (this.value == '1'){
			// firma
			
			$('#taxcodeBox, #companybankBox').show().find('input').removeAttr('disabled');
			$('#eannumberBox').hide().find('input').attr('disabled','disabled');
			$('.paymentoptions input[value="Credit"]').parent().show();
		}
		else if (this.value == '2'){
			// offentlig
			
			$('#taxcodeBox, #companybankBox').hide().find('input').attr('disabled','disabled');
			$('#eannumberBox').show().find('input').removeAttr('disabled');
			$('.paymentoptions input[value="Credit"]').parent().show();
			
		}
		else {
			// privat
			
			$('#taxcodeBox, #companybankBox, #eannumberBox').hide().find('input').attr('disabled','disabled');
			$('.paymentoptions input[value="Credit"]').parent().hide();
			$('.paymentoptions input[value="CreditCard"]').attr('checked','checked');
			
		}
	}).filter('input[checked]').click();
	
	// IE7 hack to make the frontpage show correctly on every refresh
	$('.areaboxes > li').css('position','relative');
});

// jQuery plugin to replace the text in input fields on focus/blur
(function($){
	$.fn.toggleInputText = function(){
		var elements = this;
		return (elements.each(function(){
			var el = $(this), title = el.attr('title');
			if (el.val() == "") {el.val(title)};
			el.focus(function(){
				if(el.val() == title) {el.val("")};
			}).blur(function(){
				if(el.val() == "") {el.val(title)};
			});
		}));
	};
})(jQuery);


// validate forms on submit and on input typing and blur
function formValidation(){

	// single field validation
	function validateField(evt){
		var $this = $(this), objForm = $this.closest('form'), strActivateKeyup = 'jsTextfieldactivatekeyup', bitOk = true, re;
		
		if (evt.type != "keyup" || $this.hasClass(strActivateKeyup)) {
			// if the input doesn't allow keyup events, activate it (this happens at first blur event)
			if (!$this.hasClass(strActivateKeyup)) {
				$this.addClass(strActivateKeyup);
			}
			
			// validate field
			
			/*
			 * Valideringen skal understoette foelgende data, krav og afgraensninger:
			 *
			 * Fornavn og efternavn skal indeholde tekst.
			 * Gade skal indeholde et ord efterfulgt af et mellemum og et tal.
			 * postnummer skal vaere 4 tegn i Danmark.
			 * By bliver automatisk indsat efter postnummer.
			 * Telefon skal indeholde 8 tegn for dansk tlf.nummer.
			 * E-mail skal indeholde min. 1 tegn efterfulgt af et @ (snabel a) efterfulgt af min. 1 tegn efterfulgt af et . (punktum) efterfulgt af 2-4 karakterer.
			 *
			 *
			 * For at identificere de forskellige felttyper, skal hvert felt have en css klasse der fort�ller hvordan feltet skal valideres.
			 * Forslag til css klasser, der kan benyttes til validering samt beskrivelse af hvad de skal validere:
			 *
			 * jsValidate: bruges kun til at identificere hvilke felter der skal valideres.
			 * jsValidatetext: validerer om feltet ikke er tomt - dette skal vaere basis form for validering, alle andre valideringstyper goer automatisk dette
			 * jsValidatefullname: kontrollerer om der er minimum 2 ord i feltet
			 * jsValidatepostalcode: tester om postnummeret er korrekt i forhold til det enkelte lands krav
			 * jsValidatephone: Ser om telefonnummeret er indtastet korrekt i forhold til landets krav
			 * jsValidatemail: E-mail skal indeholde de paakraevede dele specificeret ovenfor
			 * jsValidateaddress: Korrekt indtastet adresse - efter ovenstaaende specifikation
			 * jsValidaterepeat: Tester om teksten i feltet er det samme som i feltet med det tilknyttede ID (i css klassen "jsValidaterepeatfromIDPAAFELT"
			 *
			 *
			 */
			// test if there is a required field for this input field
			var strCurrentName = $this.attr('name');
			var objRequiredField = $('input[name=_' + strCurrentName + '_required],input[name=_' + strCurrentName + '_Required]', objForm);
			var bitRequired = (objRequiredField.size() > 0);
			
			if ($this.hasClass('jsValidatetext')) {
				re = /.+/;
			}
			else 
				if ($this.hasClass('jsValidatefullname')) {
					re = /\w+\s\w+/;
				}
				else 
					if ($this.hasClass('jsValidatepostalcode')) {
						// her boer man have forskellige landevalg, saa valideringen ved hvordan den skal validere? ligenu gaar den kun efter 4 cifre
						re = /^\d{4}$/;
					}
					else 
						if ($this.hasClass('jsValidatephone')) {
							// her boer man have forskellige landevalg, saa valideringen ved hvordan den skal validere? ligenu gaar den kun efter 8 cifre
							re = /^\d{8}$/;
						}
						else 
							if ($this.hasClass('jsValidatemail')) {
								re = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]+$/i;
							}
							else 
								if ($this.hasClass('jsValidateaddress')) {
									re = /^(.)+\s[1-9]/;
								}
								else {
									// hvis der ikke er nogen specifik validering, skal der alligevel valideres paa om der er indhold i feltet.
									re = /.+/;
								}
			
			bitOk = re.test($this.val());
			
			// hvis feltet er et repeat felt, f.eks. gentag password eller e-mail,
			// skal valideringen i stedet gaa paa om feltets indhold er det samme som det tilknyttede
			if ($this.hasClass('jsValidaterepeat')) {
				var strAllclasses = $this.attr('class').split(' '), strOriginalInputId;
				
				$.each(strAllclasses, function(i, val){
					if (val.indexOf('jsValidaterepeatfrom') > -1) {
						strOriginalInputId = val.replace('jsValidaterepeatfrom', '');
						
						return false;
					}
				});
				
				bitOk = ($this.val() == $('#' + strOriginalInputId).val() && $this.val != '');
			}
			
			// hvis et postalcode felt ikke indeholder tal mellem 1000 og 9999, skal der vises en fejl
			/*
			if ($this.hasClass('jsValidatepostalcode') && bitOk) {
				var intPostal = parseInt($this.val());
				if (intPostal < 1000 || intPostal > 9999){
					bitOk = false;
				}
			}
			*/
			
			if ((bitRequired && bitOk) || (!bitRequired && $this.val() != '' && bitOk)) {
				// hvis feltet er korrekt udfyldt
				$this.removeClass('textfield_error');
				$this.addClass('textfield_valid');
				
				$this.data('validatedOk', true);
			}
			else 
				if ((bitRequired && !bitOk) || (!bitRequired && $this.val() != '' && !bitOk) || (bitRequired && $this.val() == '')) {
					// hvis feltet ikke er udfyldt korrekt.
					$this.removeClass('textfield_valid');
					$this.addClass('textfield_error');
					
					$this.data('validatedOk', false);
				}
				else 
					if ($this.val() == '' && !bitRequired) {
						// hvis feltet ikke er udfyldt og det ikke er paakraevet
						$this.removeClass('textfield_error');
						$this.removeClass('textfield_valid');
						
						$this.data('validatedOk', true);
					}
					else {
					}
			
		}
	}
	
	
	$('form').each(function(){
		var objForm = this;
		$(objForm).data('allOk', '1');
		
		// select all fields that require a certain mask validation
		$('.jsValidate', objForm).bind('keyup blur', validateField);
		
		$(objForm).submit(function(){
			var bitSendform = true;
			
			// Run a validation on all required fields
			$(':input[name*=_Required], :input[name*=_required]', this).each(function(){
				var relatedInput = $(':input[name=' + $(this).attr('name').replace(/_Required$/i, '').replace(/^_/, '') + ']', objForm);
				relatedInput.each(validateField)
			});
			
			// test if any active fields are not valid
			$(':input', this).not('[disabled]').each(function(){
				var $input = $(this);
				
				if ($input.data('validatedOk') == false) {
					bitSendform = false;
				}
			});
			
			if (!bitSendform) {
				$(objForm).data('allOk', '0');
				
				var strAlert = 'Du skal udfylde alle felter med * med korrekt data';
				alert(strAlert);
				return false;
			}
		});
		
	});
}

// makes the main menu take up the entire menuline
function fixMenuFill(strSelector,intMinusPixels,intPaddingLeft){
	// strSelector must point to the <ul> element of the list
	
	if (typeof strSelector == 'undefined'){
		return false; // stop the function, if no selector is defined
	}
	if ($(strSelector).size() == 0){
		return false; // stop the function, if the selector is not on the page
	}
	
	if (typeof intMinusPixels == 'undefined'){ intMinusPixels = 0 }
	if (typeof intPaddingLeft == 'undefined'){ intPaddingLeft = 0 }
	
	var intMenupunkter;
	var intSamletbredde;
	var intSpildplads;
	var intPadding;
	var intMaxPadding;
	
	// Fix mainmenu
	intMenupunkter = $(strSelector + '>li').size();
	intSamletbredde = 0;
	intMaxPadding = 170;
	
	$(strSelector + '>li>a').css({paddingLeft:'0', paddingRight:'0'})
		.each(function(){
			intSamletbredde += $(this).width()
		});
	
	intSpildplads = $(strSelector).width() - intSamletbredde;

	intPadding = Math.floor(intSpildplads / intMenupunkter);
	
	if (intPadding < 0) {intPadding = 0};

	if (intPadding > intMaxPadding) {intPadding = intMaxPadding};
	
	$(strSelector + '>li>a').each(function(index,test){
		if ($(strSelector + '>li>a').size()-1 == index){
			intPadding += (intSpildplads % intMenupunkter); 
		}
		$(this).css({
			width: ($(this).width() + (intPadding-intMinusPixels)) + "px", // minus 10 pixels for left padding and 2 pixels for the left border
			paddingLeft: intPaddingLeft + 'px'
		});
	});
	
	
	// Fix menu
	
}


// move the related bannerarticles from the page to the bannerarticles area
function moveBannerArticles(){
	if ($('.relatedarticles').size() > 0){
		$('.tBannerarticles').append($('.relatedarticles').html());
	}
}

// if Internet Explorer 6 is used, throw a warning to the user
function ie6Warning(){
	var ie6Cookie = readCookie('ie6warning');
	
	if ($.browser.msie && $.browser.version.substr(0,1) == '6' && ie6Cookie != '1'){
		var strHtml = '<div id="ie6warning"><img src="/images/ie_logo.gif" alt=""/><h2>Advarsel</h2><p>Vi kan se at du benytter Internet Explorer 6. Denne browser er meget gammel og det anbefales at <a target="_blank" href="http://www.microsoft.com/danmark/windows/internet-explorer/">opdatere den til en nyere version</a>.</p><p>Vi må advare om at der kan fremkomme fejl på dette website, så længe du benytter Internet Explorer 6</p><p><a id="closeie6warning" href="#closeie6warning">Luk dette vindue</a></p></div>';
		
		$(strHtml).appendTo('body').animate({
			top: 0
		});
		
		$('#closeie6warning').click(function(){
			$('#ie6warning').fadeOut();
			createCookie('ie6warning','1',1);
			return false;
		});
		
	}
}

function createCustomerBox(){
	var src = "/dynamic.aspx?data=page&template=createcustomer&key=createuser";
	$.modal('<iframe src="' + src + '" height="500" width="600" style="border:0;">', {
		containerCss:{
			height: 500,
			padding: 0,
			width: 600
		},
		dataCss: {
			backgroundColor: "#fff"
		},
		overlayClose:true,
		onClose: function(){
			$.modal.close();
			location.href = location.href; // refresh the page, so the user is logged in
		}
	});
	
	return false;
}
