/*******************************************************************************
 * Commonly used JS functions *
 ******************************************************************************/

function getObjectData(obj) {
 	coords = findPosXY( obj );
	h = obj.offsetHeight;
	w = obj.offsetWidth;
	return {x:coords.x, y:coords.y, w:w, h:h};
}

function findPosXY(obj) {
	var pos = $(obj).offset();
	return {
		x: pos.left,
		y: pos.top
	};
	var curleft = 0;
	var curtop = 0;
	if(obj.offsetParent) {
		while(true) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
			if(!obj.offsetParent) break;
			obj = obj.offsetParent;
		}
	} else {
		if(obj.x) curleft += obj.x;
		if(obj.y) curtop += obj.y;
	}
	return {x:curleft, y:curtop};
}

function mouseCoords(ev){
	if(ev.pageX || ev.pageY){
		return {x:ev.pageX, y:ev.pageY};
	}
	return {
		x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}

function min(a, b) { return (a < b) ? a : b; }
function max(a, b) { return (a > b) ? a : b; }
function absMin(a, b) { return min( Math.abs(a), Math.abs(b) ); }
function absMax(a, b) { return max( Math.abs(a), Math.abs(b) ); }
function signedAbsMin(a, b) { return (Math.abs(a) < Math.abs(b)) ? a : b; }
function signedAbsMax(a, b) { return (Math.abs(a) > Math.abs(b)) ? a : b; }
function avg(a, b, c, d, e) {
	sum = 0;
	count = 0;
	if(e != undefined) { sum += e; count++; }
	if(d != undefined) { sum += d; count++; }
	if(c != undefined) { sum += c; count++; }
	if(b != undefined) { sum += b; count++; }
	if(a != undefined) { sum += a; count++; }
	if(count > 0) return sum/(1.0*count);
	else return NaN;
}

function round(num, precision) {
	fac = Math.pow(10, precision);
	return Math.round(num*fac)/fac;
}

function toString(obj) {
	if(!obj) {
		return '';
	}
	if(obj.x != undefined && obj.y != undefined) {
		return '(x='+obj.x+':y='+obj.y+') ';
	} else if(obj.toString != undefined) {
		return obj.toString();
	} else {
		return '[No toString method]';
	}
};

function g(id) { return document.getElementById(id); }

function str_replace(what, withWhat, where) { return where.split(what).join(withWhat); }
function isset(what) { return typeof(what) != 'undefined'; }

function baseURL() { 
	var list = document.getElementsByTagName('base');
	if(list.length == 0) return document.location;
	else return list[list.length-1].href;
}

function isIE() {
	// return /msie/i.test(navigator.userAgent) &&
	// !/opera/i.test(navigator.userAgent);
	return $.browser.msie;
}

var delayedImageTimer;

function uncheckDelayedImage() {
	window.clearTimeout(delayedImageTimer);
	delayedImageTimer = null;

	// redundant since it's supposed to be called after the images are deleted,
	// but still
	$('img[delayed_source]').removeAttr('delayed_source');
}

function CheckDelayedImage() {
	var notLoaded = $('img[delayed_source]:first');
	if(notLoaded.length) {
		var img = notLoaded[0];
		if(img.complete) {
			notLoaded.trigger('load');
		}
		delayedImageTimer = window.setTimeout(CheckDelayedImage, 100);
	}
}

function delayLoadImages() {
	var delayed = $('img[delayed_source]');
	if(delayed.length) {
		delayedImageTimer = window.setTimeout(CheckDelayedImage, 100);
		delayed.load(function(e) {
			var $this = $(this);
			$this.removeAttr('delayed_source').removeAttr('height').removeAttr('width').css('visibility', 'visible').fadeIn('slow');
			var nextLoaded = $('img[delayed_source]:first');
			if(nextLoaded.length) {
				var src = nextLoaded.attr('delayed_source');
				window.setTimeout(function() {
					nextLoaded.attr('src', src);
				}, 100);
			}
		});
		delayed.each(function(ix, el) {
			var $el = $(el);
			$el.attr('width', 185).attr('height', 130).css('visibility', 'hidden');
			if($el.attr('src').length && el.complete) {
				$el.trigger('load');
			}
		});
	}
}

/**
 * overlay covers up a target element and displays the loading animation over it -
 * should not pass any events through
 */
function overlayShow(elem) {
	var loader = $('#loader-anim');
	if(!loader.length) {
		loader = overlayCreate();
	}
	overlayRestoreEffect(loader);
	loader.data('attachedTo', {
		node: elem,
		pos: elem.css('position')
	}).appendTo(elem.css('position', 'relative')).fadeIn('slow');
}

function overlayHide() {
	var loader = $('#loader-anim');
	if(loader.length) {
		loader.fadeOut('fast');
		overlayRestoreEffect(loader);
	}
}

function overlayCreate() {
	return $('<div id="loader-anim" class="overlay-box" />');
}

function overlayRestoreEffect(obj) {
	var oldElem = obj.data('attachedTo');
	if(oldElem) {
		oldElem.node.css('position', oldElem.pos);
		obj.data('attachedTo', null);
	}
}


function updateQuantity() {
	var $el = $(this);
	var $box = $el.parents('div.wallpaperBox');
	var $price = $box.find('.price');
	var quantity = $box.find('select.quantity').val();
	var unitPrices = $price.data('possiblePrices');
	
	var size = 0;
	var $size = $box.find('select.size');
	if($size.length) {
		size = $size.val();
	}  
	var unitPrice = unitPrices[size];
	$price.text(unitPrice * quantity + afterPriceCurrency);
}

function bindQuantityUpdate() {
	$('#ccol .wallpaperBox select').unbind('change').change(updateQuantity);
}

function setQuantityData() {
	$('div.wallpaperBox').each(function(ix, el) {
    var $el = $(el);
		var possible_prices = [];
		if($el.hasClass('fixed-multi-size')) {
			var prices = $el.find('.size option');
			prices.each(function(ix, el) {
				var price = $(el).text().match(/kr. ([\d.]+),/);
				if(price && price[1]) {
					price = price[1].replace(/\./, '');
					possible_prices.push(price);
				}
			});
		} else { 
			var price = $el.find('.price').text().replace(/,? .+/, '');
			possible_prices.push(price);
		}  
		$el.find('.price').data('possiblePrices', possible_prices);
	});
}

function selectFixedImage(obj) {
	var $el = $(obj);
	var $box = $el.parents('div.wallpaperBox');
	var ID = $el.attr('id').substr(12);
	var sizer = $box.find('select.size');
	var size = (sizer.length) ? sizer.val() : 0;
	var quantity = $box.find('select.quantity').val();
	var f = g('nav_form');
	f.imgID.value = ID;
	f.imgSize.value = size;
	f.imgQuantity.value = quantity;
	f.button.value = $el.text();
	f.submit();
}

function dk_money(val) {
	if (val > 999) {
		var mod = val % 1000;
		var div = val - mod;
		return div / 1000 + '.' + pad0(val % 1000, 3);
	}
	return '' + val;
}

function pad0(val, len) {
	val = String(val);
	while(val.length < len) {
		val = '0' + val;
	}
	return val;
}

$(function() {
	$.fn.extend({
		xmval : function(t) {
			return this.find(t).text();
		}
		, brtext: function(t) {
			return this.html(t.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\n/g, '<br />'));
		}
	});

	$("#nl-subscribe-form").submit(function() {
		$.ajax({
			type: "POST",
			url: $(this).attr('action'),
			data: $(this).serialize(),
			success: function(response) {
			if (jQuery(response).find('#form-msg').html() == null) {
				$("#submit-responce").html('').append('<p>Du er nu tilmeldt Illux.dk&#39;s nyhedsmail</p>');
				$(".tx-sremailsubscribe-pi1 p").html('Du er nu tilmeldt Illux.dk&#39;s nyhedsmail');
				$("#nl-subscribe-form").html('');
			} else {
				$("#submit-responce").html('').append(jQuery(response).find('#form-msg').html());
				$("#nl-subscribe-form #form-hidden-fields").html(jQuery(response).find('#form-hidden-fields').html());
			}
			tb_show('Nyhedsbrev','#TB_inline?height=150&width=250&inlineId=submit-responce&modal=1');
			}
		});
		return false;
	});
});

