var Panduro = {} // Set up Panduro namespace

// Find document inner size
// Original code from quirksmode.org
// Edited by Johan Sahlén (Starring)
Panduro.getWindowSize = function() {
	var windowHeight, windowWidth;

	var test1 = document.body.scrollHeight;
	var test2 = document.body.offsetHeight;
	var test3 = document.documentElement.offsetHeight;

	if (test1 > test2) {// all but Explorer Mac
		windowWidth = document.body.scrollWidth;
		windowHeight = document.body.scrollHeight;
	} else if (test3 > test1) {
		windowWidth = document.documentElement.offsetWidth;
		windowHeight = document.documentElement.offsetHeight;
	} else {// Explorer Mac;
		//would also work in Explorer 6 Strict, Mozilla and Safari
		windowWidth = document.body.offsetWidth;
		windowHeight = document.body.offsetHeight;
	}

	return [windowWidth, windowHeight];
}

// Find scroll position
// Original code from quirksmode.org
Panduro.getWindowScroll = function() {
	var scrollX, scrollY;

	if (self.pageYOffset) {// all except Explorer
		scrollX = self.pageXOffset;
		scrollY = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop) {// Explorer 6 Strict
		scrollX = document.documentElement.scrollLeft;
		scrollY = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		scrollX = document.body.scrollLeft;
		scrollY = document.body.scrollTop;
	}

	return [scrollX, scrollY];
}

// Hide all dropdowns (workaround for IE bug)
Panduro.hideDropdowns = function() {
	if (jQuery.browser.msie) $('select').addClass('iehide');
}
Panduro.showDropdowns = function() {
	$('select').removeClass('iehide');
}


// sIFR Text Replacement
Panduro.sIFR_init = function() {
	if (typeof(sIFR) == 'function') {
		sIFR.replaceElement('#content h1.line', named({ sFlashSrc: '/pan/themes/pan/images/vag_rounded_black.swf', sWmode: 'transparent', nPaddingTop: '14' }));
		sIFR.replaceElement('#content h1, #productinfo .price', named({ sFlashSrc: '/pan/themes/pan/images/vag_rounded_black.swf', sWmode: 'transparent' }));
		sIFR.replaceElement('#content>h2, #start>h2, #content .article_column h2, #content .store-events h2 span, #content form.full h2, #content .checkout-set h2, #content .yourpage-panel h2, #content .with-content h2 span, #content #blog_content h2', named({ sFlashSrc: '/pan/themes/pan/images/vag_rounded_black.swf', sWmode: 'transparent' }));
		sIFR.replaceElement('#content .catalogue-intro, .blogstart_topinfo h3', named({ sFlashSrc: '/pan/themes/pan/images/vag_rounded_black.swf', sWmode: 'transparent' }));
		sIFR.replaceElement('#categoryview .category h3', named({ sHoverColor: '#404040', sFlashSrc: '/pan/themes/pan/images/vag_rounded_black.swf', sWmode: 'transparent' }));
		sIFR.replaceElement('.morecontent h3 span', named({ sColor: '#ffffff', sFlashSrc: '/pan/themes/pan/images/vag_rounded_black.swf', sWmode: 'transparent' }));
		sIFR.replaceElement('#blog-nav h3', named({ sColor: '#000000', sFlashSrc: '/pan/themes/pan/images/vag_rounded_black.swf', sWmode: 'transparent' }));
	}
}


// Product listing filter
Panduro.productListingFilter = {
	init: function() {
		$('#filter label').hide();
		$('#filter button').hide();
		$('#filter select').bind('change', function() {
			if (!$(this).val().match(/^\s*$/)) this.form.submit();
		});
	}
}


// Shop navigation
Panduro.shopNav = {
	init: function() {
		$('#shopnav').addClass('js');
		$('#shopnav div').hover(function() { Panduro.shopNav.isOver = true; }, function() { Panduro.shopNav.isOver = false; }).bind('click', function() { Panduro.shopNav.popout(this); });
		$('#shopnav div a').bind('click', Panduro.shopNav.goOrNot);
		$('#shopnav ul').each(Panduro.shopNav.layout);
		$(document).bind('click', Panduro.shopNav.hideNav);
	},

	setZIndex: function() {
		if (jQuery.browser.msie) {
			var collection = $('#shopnav div');
			var length = collection.length;
			collection.each(function(i) {
				$(this).css('z-index', length-i);
			})
		}
	},

	layout: function(i) {
		$('li', this).eq(0).addClass('first');
		if ($('li.active', this).length > 0) {
			$('h3', this.parentNode).hide();
			var temp;
			$('li', this).each(function(i) { if (this.className.match(/active/)) temp = i; });
			offset = (22*temp);
			$(this).css('top', '-'+offset+'px');
		}
	},

	popout: function(div) {
		if (div.className.match(/selected/)) {
			$(div).css('z-index', '0').removeClass('selected');
		} else if (!div.className.match(/disabled/)) {
			$('#shopnav div').css('z-index', '0').removeClass('selected');
			$('ul', div).hide().fadeIn("fast");
			$(div).css('z-index', '1').addClass('selected');
		}
	},

	hideNav: function(override) {
		if (!Panduro.shopNav.isOver) {
			$('#shopnav div').css('z-index', '0').removeClass('selected');
		}
	},

	goOrNot: function() {
		if (!this.parentNode.parentNode.parentNode.className.match(/selected/)) {
			Panduro.shopNav.popout(this.parentNode.parentNode.parentNode);
			return false;
		}
	}
}

// Dropdown navigation
Panduro.selectNav = {
	init: function() {
		$('#productextra form#product_blogs button, #productextra form#product_ideas button, #categoryextra form#category_ideas button').hide();
		$('#productextra form#product_blogs select, #productextra form#product_ideas select, #categoryextra form#category_ideas select').bind('change', function() {
			this.form.submit();
		});
	}
}

// Product page order form
Panduro.productPageOrder = {
	init: function() {
		$('#productinfo form#product_order label[@for=product_quantity]').hide();
		$('#productinfo form#product_order fieldset.colors li a').bind('click', Panduro.productPageOrder.selectColor);
		var select = $('#productinfo form#product_order fieldset.colors select');
		select.bind('change', Panduro.productPageOrder.selectColor);

		var color = select.val();
		Panduro.productPageOrder.activateColor($('#productinfo form#product_order fieldset.colors li#product_color_'+color+' a').get(0));
	},

	selectColor: function() {
		if (this.nodeName == "A") {
			Panduro.productPageOrder.deselectColors();
			Panduro.productPageOrder.activateColor(this);
			return false;
		} else if (this.nodeName == "SELECT") {
			Panduro.productPageOrder.deselectColors();
			var color = $(this).val();
			Panduro.productPageOrder.activateColor($('#productinfo form#product_order fieldset.colors li#product_color_'+color+' a').get(0));
		}
	},

	activateColor: function(link) {
		if (!link) return false;
		$(link.parentNode).addClass('selected');
		var color = link.parentNode.id.match(/_(\d{1,})$/)[1];
		var small_url = $('span', link).eq(0).text();
		var large_url = $(link).attr("href");
		Panduro.productPageOrder.changePicture(small_url, large_url);
		$('#productinfo form#product_order fieldset.colors select').val(color);
	},

	deselectColors: function() {
		$('#productinfo form#product_order fieldset.colors li.selected').removeClass('selected');
	},

	changePicture: function(small_url, large_url) {
		$('#productextra #product_picture').attr('href', large_url);
		$('#productextra #product_picture img').attr('src', small_url);
	}
}

// City filtering on Stores page
Panduro.storesFilter = {
	init: function() {
		$('#stores_filter label').hide();
		$('#stores_filter button').hide();
		$('#stores_filter select').bind('change', function() {
			if ($(this).val() == 0) return false;
			this.form.submit();
		});
	}
}

// Category filtering on Ideas page
Panduro.ideasFilter = {
	init: function() {
		$('#ideas_filter button').hide();
		$('#ideas_filter select').bind('change', function() {
			this.form.submit();
		});
		$('#ideas_filter :checkbox').bind('click', function() {
			this.form.submit();
		});
	}
}

// Google Map on Store page
// Todo: Finish Google Maps functionality
Panduro.storeMap = {
	init: function() {
		var storeInfo = $('.store-info');
		if ((storeInfo.length > 0) && (typeof(GMap) != "undefined")) {
			Panduro.storeMap.geocoder = new GClientGeocoder();
			Panduro.storeMap.getAddress();
		}
	},

	getAddress: function(retry) {
		var storeInfo = $('.store-info');
		var streetAddress = $('.adr .street-address', storeInfo).text();
		if (retry) streetAddress = streetAddress.replace(/[\s]?\d+$/, '');
		var postalCode = $('.adr .postal-code', storeInfo).text();
		var locality = $('.adr .locality', storeInfo).text();
		var searchStr = (streetAddress+', '+postalCode+' '+locality);
		//console.log(postalCode, locality);

		Panduro.storeMap.geocoder.getLatLng(
			searchStr,
			function(point) {
					if (point) {
						var mapContainer = $('<div class="store-map_container"></div>');
						var mapArea = $('<div class="store-map"></div>');
						mapContainer.append(mapArea);
						storeInfo.after(mapContainer);
						Panduro.storeMap.map = new GMap2(mapArea.get(0));
						Panduro.storeMap.map.setCenter(point, 13);
						var marker = new GMarker(point);
						Panduro.storeMap.map.addControl(new GSmallZoomControl());
						Panduro.storeMap.map.addOverlay(marker);
					} else if (!retry) {
						Panduro.storeMap.getAddress(true);
					}
				}
		);
	}
}

// Product image zoom
Panduro.productZoom = {
	options: {
		topMargin: 37,
		bottomMargin: 80,
		leftMargin: 10,
		rightMargin: 10,
		navHeight: 22
	},

	init: function() {
		$('#productextra .morepictures').hide();
		Panduro.productZoom.imgArray = new Array();
		$('#productextra a[@rel=zoom]').bind('click', Panduro.productZoom.show).each(function() {
			var ok = true;
			var url = $(this).attr("href");
			for (var i = 0; i < Panduro.productZoom.imgArray.length; i++) {
				if (Panduro.productZoom.imgArray[i] == url) ok = false;
			}
			if (ok) Panduro.productZoom.imgArray.push(url);
		});
	},

	show: function() {
		url = $(this).attr("href");
		if ($('#zoom_background').length == 0) {
			Panduro.productZoom.create(url);
		} else {
			Panduro.productZoom.showImage(url);
		}
		return false;
	},

	create: function(url) {
		imgArray = Panduro.productZoom.imgArray;
		$(document).keydown(function(event) { if(event.keyCode == 27) Panduro.productZoom.destroy(); });
		if ($('#zoom_background').length > 0) return false;
		$('body').append('<div id="zoom_background"></div><div id="zoom_container" class="loading" style="display: none;"><h1 style="display: none;">Placeholder</h1><a href="#" class="close" style="display: none;">Stäng</a><img id="zoom_image" src="" alt="" style="display:none;" /></div>');
		$('#zoom_container .close').bind('click', Panduro.productZoom.destroy);
		$('#zoom_image').bind('click', Panduro.productZoom.destroy);
		background = $('#zoom_background');
		container = $('#zoom_container');
		if (imgArray.length > 1) {
			//container.append('<ul id="zoom_thumbnails" style="display: none;"></ul><p class="nav" style="display: none;"><a class="prev" href="">Föregående</a> | <a class="next" href="">Nästa</a></p>');
			container.append('<ul id="zoom_thumbnails" style="display: none;"></ul><p class="nav" style="display: none;"><a class="prev" href="#">&nbsp;</a> | <a class="next" href="#">&nbsp;</a></p>');
			$('a.prev', container).bind('click', Panduro.productZoom.previousImage);
			$('a.next', container).bind('click', Panduro.productZoom.nextImage);
			$('#productextra .morepictures a[@rel=zoom]').each(function() {
				var image = $('img', this).eq(0);
				var url = $(this).attr('href');
				var listItem = $('<li></li>');
				var newImage = $('<img src="'+image.attr('src')+'" alt="" />');
				newImage.bind('click', function() { Panduro.productZoom.showImage(url); })
				listItem.append(newImage);
				$('#zoom_thumbnails').append(listItem);
			});
		}
		Panduro.productZoom.position();
		Panduro.hideDropdowns();
		background.bind('click', Panduro.productZoom.destroy);

		var header = $('#productinfo h1');
		var headerText;
		if (header.length > 0) {
			var sifrspan = $('.sIFR-alternate', header);
			if (sifrspan.length > 0) {
				headerText = sifrspan.eq(0).text();
			} else {
				headerText = header.eq(0).text();
			}
			$('h1', container).text(headerText);
		}

		background.css('opacity', 0).fadeTo("medium", 0.6, function() {
			container.show();
			Panduro.productZoom.position();
			Panduro.productZoom.showImage(url);
		});
		$(window).resize(Panduro.productZoom.position);
		$(window).scroll(Panduro.productZoom.position);
	},

	showImage: function(url) {
		var urlRegexp = new RegExp(url, "i");
		if (urlRegexp.exec($('#zoom_image').attr('src'))) return false;
		var imgArray = Panduro.productZoom.imgArray;
		if (imgArray.length > 1) {
			for (var i = 0; i < Panduro.productZoom.imgArray.length; i++) {
				if (Panduro.productZoom.imgArray[i] == url) Panduro.productZoom.currentImage = i;
			}
		}
		$('#zoom_container').addClass('loading');
		$('#zoom_image').hide();
		$('#zoom_container h1').hide();
		$('#zoom_container .close').hide();
		$('#zoom_thumbnails').hide();
		$('#zoom_container .nav').hide();
		preloadImg = new Image();
		preloadImg.onload = function() {
			$('#zoom_image').attr('src', preloadImg.src);
			Panduro.productZoom.resize(preloadImg.width, preloadImg.height);
		}
		preloadImg.src = url;
	},

	nextImage: function() {
		var imgArray = Panduro.productZoom.imgArray;
		var currentImage = Panduro.productZoom.currentImage;
		if (currentImage+1 == imgArray.length) {
			Panduro.productZoom.showImage(imgArray[0]);
		} else {
			Panduro.productZoom.showImage(imgArray[currentImage+1]);
		}
		return false;
	},

	previousImage: function() {
		var imgArray = Panduro.productZoom.imgArray;
		var currentImage = Panduro.productZoom.currentImage;
		if (currentImage == 0) {
			Panduro.productZoom.showImage(imgArray[imgArray.length-1])
		} else {
			Panduro.productZoom.showImage(imgArray[currentImage-1]);
		}
		return false;
	},

	position: function() {
		background = $('#zoom_background');
		container = $('#zoom_container');

		var windowSize = Panduro.getWindowSize();
		var windowScroll = Panduro.getWindowScroll();
		var windowHeight = windowSize[1];
		var windowWidth = windowSize[0];
		var containerWidth = container.get(0).offsetWidth;

		background.css('height', windowHeight+'px');
		container.css('top', (windowScroll[1]+20)+'px');
		if (containerWidth > 0) container.css('left', ((windowWidth-(containerWidth))/2)+'px')
	},

	resize: function(width, height) {
		var windowSize = Panduro.getWindowSize();
		var windowHeight = windowSize[1];
		var windowWidth = windowSize[0];
		newWidth = width + Panduro.productZoom.options.leftMargin + Panduro.productZoom.options.rightMargin;
		newHeight = height + Panduro.productZoom.options.topMargin + Panduro.productZoom.options.bottomMargin;
		if (Panduro.productZoom.imgArray.length > 1) newHeight += Panduro.productZoom.options.navHeight;
		container = $('#zoom_container');
		container.removeClass('loading').animate({ width: newWidth, left: ((windowWidth-newWidth)/2) }, "slow", null, function() {
			$(this).animate({ height: newHeight }, "slow", null, function() {
				$('#zoom_container h1').show();
				$('#zoom_container .close').show();
				$('#zoom_thumbnails').show();
				$('#zoom_container .nav').css('width', newWidth+'px').show();
				$('#zoom_image').show();
			})
		})
	},

	destroy: function() {
		$(document).unbind('keydown');
		$('#zoom_container').remove();
		$('#zoom_background').fadeOut("fast", function() {
			$(this).remove();
			Panduro.showDropdowns();
		});
		$(window).unbind("resize");
		$(window).unbind("scroll");
		return false;
	}
}


/* Product facts */
Panduro.productFacts = {
	init: function() {
		var facts = $('#productfacts');
		if (facts.length > 0) {
			facts.addClass('js');
			facts.append('<a href="#" class="close">Stäng</a>');
			$('#productfacts .close').bind('click', Panduro.productFacts.hide);
			$('#productfacts_link a').bind('click', Panduro.productFacts.show);
			$(document).bind('click', Panduro.productFacts.hide);
			facts.bind('mouseover', function() { Panduro.productFacts.over = true; });
			facts.bind('mouseout', function() { Panduro.productFacts.over = false; });
		}
	},

	show: function() {
		Panduro.hideDropdowns();
		var facts = $('#productfacts');
		facts.css('top', (this.offsetTop)+'px');
		facts.addClass('active');
		sIFR.replaceElement("#productfacts h3", named({ sFlashSrc: "/pan/themes/pan/images/vag_rounded_black.swf", sWmode: "transparent" }));
		return false;
	},

	hide: function() {
		if (!Panduro.productFacts.over || (this.className && this.className.match(/close/))) {
			Panduro.showDropdowns();
			$('#productfacts').removeClass('active');
			if (this.className && this.className.match(/close/)) return false;
		}
	}
}


/* Send product to a friend */
Panduro.sendToFriend = {
	init: function() {
		var stf = $('#sendtofriend');
		if (stf.length > 0) {
			stf.addClass('js');
			stf.append('<a href="#" class="close">Stäng</a>');
			$('#sendtofriend .close').bind('click', Panduro.sendToFriend.hide);
			$('#sendtofriend .cancel button').bind('click', Panduro.sendToFriend.hide);
			$('a#sendtofriend_link').bind('click', Panduro.sendToFriend.show);
			stf.bind('mouseover', function() { Panduro.sendToFriend.over = true; });
			stf.bind('mouseout', function() { Panduro.sendToFriend.over = false; });
		}
	},

	show: function() {
		Panduro.hideDropdowns();
		$(document).keydown(function(event) { if(event.keyCode == 27) Panduro.sendToFriend.hide(true); });
		$(document).bind('click', Panduro.sendToFriend.hide);
		var stf = $('#sendtofriend');
		stf.css('top', (this.parentNode.parentNode.offsetHeight-50)+'px');
		stf.addClass('active');
		//sIFR.replaceElement("#sendtofriend h3", named({ sFlashSrc: "/pan/themes/pan/images/vag_rounded_black.swf", sWmode: "transparent" }));
		return false;
	},

	hide: function(override) {
		if ((override == true) || !Panduro.sendToFriend.over || (this.className && this.className.match(/close/)) || (this.parentNode && this.parentNode.className && this.parentNode.className.match(/cancel/))) {
			Panduro.showDropdowns();
			$('#sendtofriend .fieldgroup input').val('');
			$('#sendtofriend .fieldgroup textarea').val('');
			$('#sendtofriend').removeClass('active');
			$(document).unbind('keydown');
			$(document).unbind('click');
			if(!$(this).is('.close') && !$(this).is('.cancel button')) {
				return;
			}
			return false;
		}
	}
}


/* Add more fields in blog post form */
Panduro.blogMoreFields = {
	init: function() {
		Panduro.blogMoreFields.container = $('#product-fields_list');
		$('p.more-fields a').bind('click', Panduro.blogMoreFields.addFields);
	},

	addFields: function() {
		var ok = true;
		var container = Panduro.blogMoreFields.container;
		$('input', container).each(function() {
			if ($(this).val() == "") ok = false;
		});

		if ((container.length > 0) && ok) {
			var groups = $('.fieldgroup.list', container);
			var lastGroup = groups.eq(groups.length-1);
			var label = $('label', lastGroup);
			var currentNum = parseInt(label.text().replace(/^\s*#([0-9]+)\s*$/, '$1'));
			var nextNum = currentNum+5
			for (var i = 0; i < 5; i++) {
				lastGroup.after('<div class="fieldgroup list"><label for="post_product_'+nextNum+'">#'+nextNum+'</label><input type="text" name="AID" id="post_product_'+nextNum+'" /><input type="hidden" name="OPT" value="UPD" /></div>');
				nextNum--;
			}
		}

		if (!ok) alert('Du har inte använt alla befintliga fält');

		return false;
	}
}

/* Localization of the logo, for browsers that do not support CSS attribute selectors */
Panduro.setLogo = function() {
	var logo	= $('#logo a'),
		lang	= $('html').attr('lang') || 'sv',
		image = 'url("/pan/themes/pan/images/skel/logo_' + lang + '.gif")';

	logo.css('background-image', image);
}

/* TinyMCE for blog posts */

if (typeof(tinyMCE) != "undefined") {
	tinyMCE.addToLang('',{
		theme_h3 : 'Underrubrik'
	});

	tinyMCE.init({
		mode: "exact",
		elements: "post_body",
		language: "sv",

		forced_root_block: "p",

		theme_advanced_toolbar_location : "top",
		theme_advanced_buttons1: "bold, italic, bullist, numlist, formatselect",
		theme_advanced_buttons2 : "",
		theme_advanced_buttons3 : "",

		theme_advanced_blockformats : "p,h3",

		content_css : "css/tiny_mce.css"
	});
}


/* Inject JavaScript when DOM is ready =====================================*/
$(document).ready(function() {
	$.browser.msie && $.browser.version < 7.0 && Panduro.setLogo();

	Panduro.sIFR_init();
	Panduro.productListingFilter.init();
	Panduro.shopNav.init();
	Panduro.selectNav.init();
	Panduro.productPageOrder.init();
	Panduro.productZoom.init();
	Panduro.productFacts.init();
	Panduro.sendToFriend.init();
	Panduro.storesFilter.init();
	Panduro.ideasFilter.init();
	Panduro.storeMap.init();
	Panduro.blogMoreFields.init();
});