var Onload = {
	stack: new Array(),
	add: function(callback){
		Onload.stack.push(callback);
	},
	init: function(){
		for (i = 0; i < Onload.stack.length; i++) {
			Onload.stack[i]();
		}
	}
};
window.onload = Onload.init;


//******************************//
var FetchCusto = {
		lookupPhoneNumber: function(phone){
		new Ajax.Request(Toolbox.makeURL('fetchcusto/'), {
				method: 'get',
				parameters: 'phone='+phone,
				onSuccess: function(transport) {
					if (FetchCusto.elementValue(transport.responseXML, 'firstname')) {
						if ($('firstname')) {
							$('firstname').value = FetchCusto.elementValue(transport.responseXML, 'firstname');
						}
						if ($('customer_id_send')) {
							$('customer_id_send').value = FetchCusto.elementValue(transport.responseXML, 'id');
						}
						if ($('lastname')) {
							$('lastname').value = FetchCusto.elementValue(transport.responseXML, 'lastname');
						}
						if ($('phone')) {
							$('phone').value = FetchCusto.elementValue(transport.responseXML, 'phone');
						}
						if ($('cellphone')) {
							$('cellphone').value = FetchCusto.elementValue(transport.responseXML, 'cellphone');
						}
						if ($('adress')) {
							$('adress').value = FetchCusto.elementValue(transport.responseXML, 'adress');
						}
						if ($('areacode')) {
							$('areacode').value = FetchCusto.elementValue(transport.responseXML, 'areacode');
						}
						
						if ($('city')) {
							$('city').value = FetchCusto.elementValue(transport.responseXML, 'city');
						}
						
						if ($('phone')) {
							if ($('phone').value == '') {
								$('phone').value = $('cellphone').value;
								$('cellphone').value = '';
							}
						}
						
						if ($('birthdate')) {
							$('birthdate').value = FetchCusto.elementValue(transport.responseXML, 'birthdate');
						}

						if ($('email')) {
							$('email').value = FetchCusto.elementValue(transport.responseXML, 'email');
						}
						if ($('newsletter')) {
							if(FetchCusto.elementValue(transport.responseXML, 'contact') == 'true'){
								$('newsletter').checked = true;
							} else {
								$('newsletter').checked = false;
							}
						}
					} else {
						alert('Der blev ikke fundet nogen informationer. Check om det indtastede telefon nummer er korrekt. Du kan også indtaste dine informationer manuelt, ved at udfylde alle felter.');
					}
				}
			});
		},
		elementValue: function(document, elm){
			elm = document.getElementsByTagName(elm);
			if(elm.length > 0 && elm[0].firstChild){
				value = elm[0].firstChild.nodeValue.replace(/^\s+|\s+$/g,"");
				if(value != ''){
					return value;
				} else {
					return '';
				}
			} else {
				return '';
			}
		}
	};
// ******************************//


var Toolbox = {
	setLocation: function(url){
		window.location.href = Toolbox.makeURL(url);
		window.location = Toolbox.makeURL(url);
		location.href = Toolbox.makeURL(url);
		
	},
	makeURL: function(url){
		base = document.getElementsByTagName('base');
		has_http = /^http:/;
		if (!has_http.test(url)) {
			if(url.substr(0,1) != '/'){
				if (base.length > 0) {
					base = document.getElementsByTagName('base')[0].href;
				} else if(redirect_url != undefined){
					base = redirect_url;
				} else {
					base = '';
				}
				if(base.substr(base.length-1) != '/'){
					base = base+'/';
				}
				url = base+url;
			}
		}
		return url;	
	},
	openPopup: function(url, width, height, name){
		var win = window.open(Toolbox.makeURL(url),name,'resizable=yes,location=no,menubar=no,scrollbars=yes,status=no,toolbar=no,fullscreen=no,width='+width+',height='+height);
	},
	toggleElement: function(element){
		if(element.style.display == 'none'){
			new Effect.Parallel([
				new Effect.BlindDown(element, { sync: true }), 
				new Effect.Appear(element, { sync: true }) 
				], { duration: 0.5 });
		} else {
			new Effect.Parallel([
				new Effect.BlindUp(element, { sync: true }), 
				new Effect.Fade(element, { sync: true }) 
				], { duration: 0.5 });
		}		
	},
	
    substr: function(string, length, smart, cutsymbol){
		if(!cutsymbol){
	        cutsymbol = '...';
	    }
	    len = string.length;
	    if(len > length){
	        if(smart){
	            cutlen = len - length;
	 
	            cutleft = Math.floor(cutlen / 2);
	            cutright = Math.ceil(cutlen / 2);
	 
	            leftsplit = Math.floor(len / 2);
	            rightsplit = Math.floor(len / 2);
	 
	 
	            left = string.substring(0, leftsplit);
	            left = left.substring(0, (left.length - cutleft));
	 
	            right = string.substring(rightsplit);
	            right = right.substring(cutright);
	 
	            return left+cutsymbol+right;
	        } else {
	        	if(string.length > length){
	        		return string.substring(0, length)+cutsymbol;
	        	} else {
	        		return string.substring(0, length);
	        	}
	            
	        }
	    } else {
	        return string;
	    }
	},
	
	substrWrite: function(string, length, smart, cutsymbol){
		document.write('<span class="substr" title="'+string+'">'+Toolbox.substr(string, length, smart, cutsymbol)+'</span>');
	}, 
	
	convertXMLToXHTML: function(elm){
		if(elm.nodeName){
			switch(elm.nodeName){
				case '#text':
					return document.createTextNode(elm.nodeValue);
					break;
				default:
					var iElement = document.createElement(elm.nodeName);
					for (var i = 0; i < elm.attributes.length; i++) {
						iElement.setAttribute(elm.attributes[i].nodeName, elm.attributes[i].nodeValue);
					}
					for (var i = 0; i < elm.childNodes.length; i++) {
						iElement.appendChild(Toolbox.convertXMLToXHTML(elm.childNodes[i]));
					}
					return iElement;
					break;
			}
		}
							
	},
	
	scrollToElement: function(element, relative){
		if(!relative){
			var target = 0;
			var relative = document.body;
			window.scrollTo(0, element.cumulativeOffset().top);
		} else {
			var target = element.cumulativeOffset().top - relative.cumulativeOffset().top;
			this._scroll(relative, target);
		}
	},
	
	_scroll: function(element, target){
		new Effect.Tween(null, element.scrollTop, target, {
			duration: .2
		}, this._scrollTo.bind(this, element));	
	},
	_scrollTo: function(element, p){
		element.scrollTop = p;
	},
	
	
	event: {
		events: new Array(),
		handlers: new Array(),
			
		register: function(event, handler){
			this.handlers[this._getEventID(event)].push(handler);
		},
		trigger: function(event, param){
			var eventID = this._getEventID(event);
			for(var i = 0; i <= (this.handlers[eventID].length - 1); i++){
				this.handlers[eventID][i](param);
			}
		},
		_getEventID: function(event){
			for(var i = 0; i <= (this.events.length - 1); i++){
				if(this.events[i] == event){
					return i;
				}
			}
			this.events.push(event);
			var eventID = (this.events.length - 1);
			this.handlers[eventID] = new Array();
			return eventID;
		}		
	}
};

function List(){
	this.items = new Array();
	this.keys = new Array();
	
	this.position = 0;
	this.counter = 0;
	this.length = 0;
	
	this.add = function(value, key){
		if(!key){
			key = this.counter++;
		}
		this.items.push(value);
		this.keys.push(key);
		this.length++;
	}
	
	this.remove = function(key){
		var items = new Array();
		var keys = new Array();
		
		for(var i = 0; i <= this.keys.length; i++){
			if(this.keys[i] && this.keys[i] != key){
				items.push(this.items[i]);
				keys.push(this.keys[i]);
			} else {
				this.length--;
			}
		}
		this.items = items;
		this.keys = keys;
	}
	
	this.get = function(key){
		var key = this._getItemId(key);
		if(key !== false){
			return this.items[key];
		}
		return false;
	}
	
	this.each = function(){
		var position = this.position++;
		if(this.items[position]){
			return new Array(this.keys[position], this.items[position]);
		} else {
			return false;
		}
	}
	
	this.reset = function(){
		this.position = 0;
	}
	
	this.search = function(value){
		for(var i = 0; i <= this.items.length; i++){
			if(this.items[i] == value){
				return this.keys[i];
			}
		}
		return false;
	}
			
	this._getItemId = function(key){
		for(var i = 0; i <= this.keys.length; i++){
			if(this.keys[i] == key){
				return i;
			}
		}
		return false;
	}
}

/**********************/
/**********************/
function inlineFormValidate(formnamefieldname, validateType, minLength, helpMsg, errorMsg, okMsg, displayMsgTime, leftMargin)
{
	//reg x	
	var stringnumberRegex = /^.+$/;
	var emailRegex = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
	var numberRegex = /^\s*\d+\s*$/;
	var phonenumberRegex = /^\s*\d+\s*$/;
	var cprRegex = /^[0-9]{6}-?[0-9]{4}$/;
	var bankregRegex = /^[0-9]{4}$/;
	var bankAccountRegex = /^[0-9]{5,12}$/;
	
	
	//validate ordinary string (name, surname....)
	if(validateType == "vali_string_numbers")
	{
		if((formnamefieldname.value).length <= minLength)
		{
			//display initial help msg
			//inlineMsg(formnamefieldname.id, helpMsg, displayMsgTime, leftMargin, 1);
			return false;
		}
		else if(!formnamefieldname.value.match(stringnumberRegex))
		{
			//display error msg
			inlineMsg(formnamefieldname.id, errorMsg, displayMsgTime, leftMargin, 0);
			return false;
		}
		else
		{
			//display ok msg
			//inlineMsg(formnamefieldname.id, okMsg, displayMsgTime, leftMargin, 1);
			inlineMsg(formnamefieldname.id, okMsg, 1, -10000, 1);
		}
		
	}

	//validate bank reg
	if(validateType == "vali_bank_reg")
	{
		if((formnamefieldname.value).length < minLength)
		{
			//display initial help msg
			//inlineMsg(formnamefieldname.id, helpMsg, displayMsgTime, leftMargin, 1);
			return false;
		}
		else if(!formnamefieldname.value.match(bankregRegex))
		{
			//display error msg
			inlineMsg(formnamefieldname.id, errorMsg, displayMsgTime, leftMargin, 0);
			return false;
		}
		else
		{
			//display ok msg
			//inlineMsg(formnamefieldname.id, okMsg, 2, leftMargin, 1);
			inlineMsg(formnamefieldname.id, okMsg, 1, -10000, 1);
		}
		
	}

	//validate bank reg
	if(validateType == "vali_account")
	{
		if((formnamefieldname.value).length < minLength)
		{
			//display initial help msg
			//inlineMsg(formnamefieldname.id, helpMsg, displayMsgTime, leftMargin, 1);
			return false;
		}
		else if(!formnamefieldname.value.match(bankAccountRegex))
		{
			//display error msg
			inlineMsg(formnamefieldname.id, errorMsg, displayMsgTime, leftMargin, 0);
			return false;
		}
		else
		{
			//display ok msg
			//inlineMsg(formnamefieldname.id, okMsg, 2, leftMargin, 1);
			inlineMsg(formnamefieldname.id, okMsg, 1, -10000, 1);
		}
		
	}

	//validate only numbers
	if(validateType == "vali_numbers")
	{
		if((formnamefieldname.value).length < minLength)
		{
			//display initial help msg
			//inlineMsg(formnamefieldname.id, helpMsg, displayMsgTime, leftMargin, 1);
			return false;
		}
		else if(!formnamefieldname.value.match(numberRegex))
		{
			//display error msg
			inlineMsg(formnamefieldname.id, errorMsg, displayMsgTime, leftMargin, 0);
			return false;
		}
		else
		{
			//display ok msg
			//inlineMsg(formnamefieldname.id, okMsg, 2, leftMargin, 1);
			inlineMsg(formnamefieldname.id, okMsg, 1, -10000, 1);
		}
		
	}

	//validate phone number
	if(validateType == "vali_phone_number")
	{
		if((formnamefieldname.value).length < minLength)
		{
			//display initial help msg
			//inlineMsg(formnamefieldname.id, helpMsg, displayMsgTime, leftMargin, 1);
			return false;
		}
		else if(!formnamefieldname.value.match(phonenumberRegex))
		{
			//display error msg
			inlineMsg(formnamefieldname.id, errorMsg, displayMsgTime, leftMargin, 0);
			return false;
		}
		else
		{
			//display ok msg
			//inlineMsg(formnamefieldname.id, okMsg, 2, leftMargin, 1);
			inlineMsg(formnamefieldname.id, okMsg, 1, -10000, 1);
		}
		
	}

	//validate cpr
	if(validateType == "vali_cpr")
	{
		if((formnamefieldname.value).length <= minLength)
		{
			//display initial help msg
			//inlineMsg(formnamefieldname.id, helpMsg, displayMsgTime, leftMargin, 1);
			return false;
		}
		else if(!formnamefieldname.value.match(cprRegex))
		{
			//display error msg
			inlineMsg(formnamefieldname.id, errorMsg, displayMsgTime, leftMargin, 0);
			return false;
		}
		else
		{
			//display ok msg
			//inlineMsg(formnamefieldname.id, okMsg, 2, leftMargin, 1);
			inlineMsg(formnamefieldname.id, okMsg, 1, -10000, 1);
		}
		
	}

	//validate e-mail
	if(validateType == "vali_email")
	{
		if((formnamefieldname.value).length <= minLength)
		{
			//display initial help msg
			//inlineMsg(formnamefieldname.id, helpMsg, displayMsgTime, leftMargin, 1);
			return false;
		}
		else if(!formnamefieldname.value.match(emailRegex))
		{
			//display error msg
			inlineMsg(formnamefieldname.id, errorMsg, displayMsgTime, leftMargin, 0);
			return false;
		}
		else
		{
			//display ok msg
			//inlineMsg(formnamefieldname.id, okMsg, 2, leftMargin, 1);
			inlineMsg(formnamefieldname.id, okMsg, 1, -10000, 1);
		}
		
	}

	//all ok
	return true;
}



// INLINE FORM ERROR MESSAGE SCRIPT //
var MSGTIMER = 2;
var MSGSPEED = 5;
var MSGOFFSET = 3;
var MSGHIDE = 3;

// build out the divs, set attributes and call the fade function //
function inlineMsg(target,string,autohide,leftMargin,status)
{
	var msg;
	var msgcontent;
	if(!document.getElementById('form_error_msg'))
	{
		msg = document.createElement('div');
		msg.id = 'form_error_msg';
		msgcontent = document.createElement('div');
		msgcontent.id = 'form_error_msg_content';
		document.body.appendChild(msg);
		msg.appendChild(msgcontent);
		msg.style.filter = 'alpha(opacity=0)';
		msg.style.opacity = 0;
		msg.alpha = 0;
	}
	else
	{
		msg = document.getElementById('form_error_msg');
		msgcontent = document.getElementById('form_error_msg_content');
	}
		
	//error msg or ok msg
	if(status == 1){msgcontent.style.color = 'green';}else{msgcontent.style.color = '#090909';}

	msgcontent.innerHTML = string;
	msg.style.display = 'block';
	var msgheight = msg.offsetHeight;
	var targetdiv = document.getElementById(target);
	targetdiv.focus();
	var targetheight = targetdiv.offsetHeight;
	var targetwidth = targetdiv.offsetWidth;
	var topposition = topPosition(targetdiv) - ((msgheight - targetheight) / 2);
	var leftposition = leftPosition(targetdiv) + targetwidth + MSGOFFSET;
	msg.style.top = topposition + 'px';
	
	msg.style.left = leftMargin + leftposition + 'px';

	clearInterval(msg.timer);
	msg.timer = setInterval("fadeMsg(1)", MSGTIMER);
	if(!autohide)
	{
		autohide = MSGHIDE;  
	}
	
	window.setTimeout("hideMsg()", (autohide * 1000));
}

// hide the form alert //
function hideMsg(msg)
{
	var msg = document.getElementById('form_error_msg');
	if(!msg.timer)
	{
		msg.timer = setInterval("fadeMsg(0)", MSGTIMER);
	}
}

// face the message box //
function fadeMsg(flag)
{
	if(flag == null)
	{
		flag = 1;
	}
	
	var msg = document.getElementById('form_error_msg');
	var value;
	if(flag == 1)
	{
		value = msg.alpha + MSGSPEED;
	}
	else
	{
		value = msg.alpha - MSGSPEED;
	}
	msg.alpha = value;
	msg.style.opacity = (value / 100);
	msg.style.filter = 'alpha(opacity=' + value + ')';
	if(value >= 99)
	{
		clearInterval(msg.timer);
		msg.timer = null;
	}
	else if(value <= 1)
	{
		msg.style.display = "none";
		clearInterval(msg.timer);
	}
}

// calculate the position of the element in relation to the left of the browser //
function leftPosition(target)
{
	var left = 0;
	if(target.offsetParent)
	{
		while(1)
		{
			left += target.offsetLeft;
			if(!target.offsetParent)
			{
				break;
			}
			target = target.offsetParent;
		}
	}
	else if(target.x)
	{
		left += target.x;
	}
	return left;
}

// calculate the position of the element in relation to the top of the browser window //
function topPosition(target)
{
	var top = 0;
	if(target.offsetParent)
	{
		while(1)
		{
			top += target.offsetTop;
			if(!target.offsetParent)
			{
				break;
			}
			target = target.offsetParent;
		}
	}
	else if(target.y)
	{
		top += target.y;
	}
	return top;
}

// preload the arrow //
if(document.images)
{
  arrow = new Image(7,80); 
  arrow.src = "../../images/forms/error_msg_arrow.gif"; 
}
/**********************/
/**********************/