var ie7 = false;

var sliderOptions = {};

var sliderCallbacks = {};

var currentSliderOptions = {};
var currentSliderValues = {};
var productPrice;
var configurationPrice;
var productCheck = {};
var productCheckMore = {};

String.prototype.format = function() {
    var formatted = this;
    for (var i = 0; i < arguments.length; i++) {
        var regexp = new RegExp('\\{'+i+'\\}', 'gi');
        formatted = formatted.replace(regexp, arguments[i]);
    }
    return formatted;
};

var elementMonitoring = [
    {
        elements: ['div.input.select select'],
        callback: function(obj) {
            updateSelectValue(obj);
        }
    },
    {
        elements: ['.barslider'],
        callback: function(obj) {
            initSingleSliders();
            return false;
        }
    }
];

var contentBlocksCallbacks = {
    twitterTab: function(tab, selectedDiv) {

        if (!$('div.loading', selectedDiv).length) {
            return;
        }

        $.get(
            'http://api.twitter.com/1/statuses/user_timeline.json?screen_name=hostednl&count=3&exclude_replies=1&include_entities=0&include_rts=1&trim_user=1',
            function(data) {

                $(data).each(function(i, obj) {

                    var date = new Date(obj.created_at.replace(/^\w+ (\w+) (\d+) ([\d:]+) \+0000 (\d+)$/, '$1 $2 $4 $3 UTC'));

                    var day = date.getDate();
                    if (day < 10) {
                        day = '0' + day.toString();
                    }

                    var month = date.getMonth() + 1;
                    if (month < 10) {
                        month = '0' + month.toString();
                    }

                    var tweetDate = day + '-' + month + '-' + date.getFullYear();

                    var li = $('<li>' +
                                '<a href="http://twitter.com/hostednl/status/' + obj.id_str + '" target="_blank">' +
                                    '<span>' + tweetDate + '</span>' +
                                    '<span>' + obj.text + '</span>' +
                                '</a>' +
                            '</li>');

                    $('ul', selectedDiv).append(li);
                });

                $('div.loading', selectedDiv).fadeOut(200, function() {
                    $(this).remove();
                });
            },
            'jsonp'
        );
    }
};

var dialogLinkOptions = {
    loginRegister: {
        className: 'login',
        callback: function(data, dialog) {
            $('select#UserFound').change();
        }
    },
    invoiceEmails: {
        ajaxSubmit: true,
    	ajaxFormCallback : function(data, setContent) {
    		setContent(data);
    	}
    },
    signDialog: {
        width: 701,
    	ajaxSubmit: function(dialogContent) {
            return $('form', dialogContent).attr('id') != 'CreditSignForm';
        },
    	ajaxFormCallback : function(data, setContent) {
    		setContent("<h2>Offerte ondertekenen</h2>"+data.msg);
    		
    		setTimeout("document.location='" + data.url+"'", 3000);
    	
    	}
    },
    deleteAddress: {
    	ajaxSubmit:true,
    	ajaxFormCallback: function() {
    		document.location.reload();
    	}
    },
    viewOrder: {
    	width: 900
    },
    viewProductnumbers: {
    	width: 600
    },
    editAddress: {
    	ajaxSubmit:true,
    	ajaxFormCallback: function() {
    		document.location.reload();
    	}
    },
    replyTicket: {
    	ajaxSubmit:true,
    	ajaxFormCallback: function(data, setContent) {
    		if(data.error == false) {
    			setContent("Het antwoord is verzonden. De pagina zal automatisch herladen.");
    			
    			setTimeout("document.location.reload()", 3000);
    		} else {
    			setContent(data.html);
    		}
    	}
    },
    callme: {
    	ajaxSubmit:true,
    	ajaxFormCallback: function(data, setContent) {
    		if(data.error == false) {
    			setContent("<h2>Bel mij terug</h2>Het bericht is verzonden. Dit venster sluit automatisch.");
    			setTimeout("$('.dialog .close').click();", 3000);
    		} else {
    			setContent(data.html);
    		}
    		
    	}
    },
    abuseLink: {
    	ajaxSubmit:true,
    	ajaxFormCallback: function(data, setContent) {
    		if(data.error == false) {
    			setContent("<h2>Klachtenformulier</h2>De melding is verzonden en zal door Hosted.nl worden behandeld. Dit venster sluit automatisch.");
    			setTimeout("$('.dialog .close').click();", 3000);
    		} else {
    			setContent(data.html);
    		}
    	}
    },
    extendContract: {
    	ajaxSubmit:true,
    	ajaxFormCallback: function(data, setContent) {
    		if(data.error == false) {
    			setContent("De aanpassingen aan uw contract worden doorgevoerd. De pagina zal automatisch herladen.");
    			
    			setTimeout("document.location.reload()", 3000);
    		} else {
    			setContent(data.html);
    		}
    	}
    },
    changeDns: {
    	ajaxSubmit:true,
    	ajaxFormCallback: function(data, setContent) {
    		if(data.error == false) {
    			setContent("<h2>DNS-Servers wijzigen</h2>De wijzigingen zijn doorgevoerd.");
    			setTimeout("$('.dialog .close').click();", 3000);
    		} else {
    			setContent("<h2>DNS-Servers wijzigen</h2>De wijzigingen kunnen op dit moment niet worden doorgevoerd. Neem contact op d.m.v. een ticket met Hosted.nl B.V.");
    			setTimeout("$('.dialog .close').click();", 5000);
    		}
    	},
    	urlFunction: function(obj) {
    		
    		if($(".domainControl:checked").length < 1) {
    			return false;
    		}
    		
    		var ids = Array();
    		var name = "";
    		var counter = 0;
    		$(".domainControl").each(function(data) {

    			if($(this).attr("checked")) {
    				name = $(this).attr("name");
    				var matches = name.match(/(\d+)/);
    				ids[counter] = matches[0];
    				counter++;
    			}
    		});
    		
    		return $(obj).attr("href") + ids.join(",");

    	}
    },
    changeOwnerRequest: {
    	ajaxSubmit:true,
    	ajaxFormCallback: function(data, setContent) {
    		if(data.error == false) {
    			setContent("<h2>Houderwijziging aanvragen</h2>De houderwijziging is aangevraagd.");
    			setTimeout("document.location.reload()", 3000);
    		} else {
    			setContent("<h2>Houderwijziging aanvragen</h2>De aanvraag kan momenteel niet worden verwerkt. Neem contact op met Hosted.nl d.m.v. een ticket");
    			setTimeout("$('.dialog .close').click();", 5000);
    		}
    	},
    	urlFunction: function(obj) {
    		
    		if($(".domainControl:checked").length < 1) {
    			return false;
    		}
    		
    		var ids = Array();
    		var name = "";
    		var counter = 0;
    		$(".domainControl").each(function(data) {

    			if($(this).attr("checked")) {
    				name = $(this).attr("name");
    				var matches = name.match(/(\d+)/);
    				ids[counter] = matches[0];
    				counter++;
    			}
    		});
    		
    		return $(obj).attr("href") + ids.join(",");

    	}
    },
    finishOwnerRequest: {
    	ajaxSubmit:true,
    	ajaxFormCallback: function(data, setContent) {
    		if(data.error == false) {
    			setContent("<h2>Houderwijziging aanvragen</h2>De houderwijziging is aangevraagd.");
    			setTimeout("document.location.reload()", 3000);
    		} else {
    			if(data.defaultHtml) {
    				setContent("<h2>Houderwijziging aanvragen</h2>De aanvraag kan momenteel niet worden verwerkt. Neem contact op met Hosted.nl d.m.v. een ticket");
    				setTimeout("$('.dialog .close').click();", 5000);
    			} else {
    				setContent(data.html);	
    			}
    			
    			//
    		}
    	},
    	urlFunction: function(obj) {
    		
    		if($(".domainControl:checked").length < 1) {
    			return false;
    		}
    		
    		var ids = Array();
    		var name = "";
    		var counter = 0;
    		$(".domainControl").each(function(data) {

    			if($(this).attr("checked")) {
    				name = $(this).attr("name");
    				var matches = name.match(/(\d+)/);
    				ids[counter] = matches[0];
    				counter++;
    			}
    		});
    		
    		return $(obj).attr("href") + ids.join(",");

    	}
    },
    domainAuthcode: {
    	urlFunction: function(obj) {
    		
    		if($(".domainControl:checked").length < 1) {
    			return false;
    		}
    		
    		var ids = Array();
    		var name = "";
    		var counter = 0;
    		$(".domainControl").each(function(data) {

    			if($(this).attr("checked")) {
    				name = $(this).attr("name");
    				var matches = name.match(/(\d+)/);
    				ids[counter] = matches[0];
    				counter++;
    			}
    		});
    		
    		return $(obj).attr("href") + ids.join(",");

    	}
    },
    terminateDomain: {
        className: 'terminateDomain',
    	urlFunction: function(obj) {

    		if($(".domainControl:checked").length < 1) {
    			return false;
    		}

    		var ids = Array();
    		var name = "";
    		var counter = 0;
    		$(".domainControl").each(function(data) {

    			if($(this).attr("checked")) {
    				name = $(this).attr("name");
    				var matches = name.match(/(\d+)/);
    				ids[counter] = matches[0];
    				counter++;
    			}
    		});

    		return $(obj).attr("href") + ids.join(",");

    	},
        width: 800,
        ajaxSubmit: true,
        canPost: function(dialogContent) {

            var inputDiv = $('#DomainAgreeDirectTermination:visible:not(:checked)').parents('div.input');

            if (inputDiv.length == 1) {
                inputDiv.addClass('error');
                inputDiv.append('<div class="error-message-checkbox">U dient akkoord te gaan met per directe opzegging.</div>');
                
                if (typeof(ie7DialogFix) == 'function') {
                    ie7DialogFix($('.content', dialogContent));
                }

                return false;
            }
            
            inputDiv.removeClass('error');
            $('error-message-checkbox', inputDiv).remove();

            if (typeof(ie7DialogFix) == 'function') {
                ie7DialogFix($('.content', dialogContent));
            }
            
            return true;
        },
    	ajaxFormCallback: function(data, setContent) {
            setContent(data);
        },
        callback: function(data, dialog, setContent) {

            function updateAgreeDirectTermination() {

                var show = false;

                $.each($('#DomainTerminateForm select'), function(i, obj) {
                    if ($(obj).val() == 2) {
                        show = true;
                        return false;
                    }
                });

                if (show) {
                    $('#directTermination').show();
                } else {
                    $('#directTermination').hide();
                    $('#directTermination div.input').removeClass('error');
                    $('#directTermination div.input div.error-message-checkbox').remove();
                }

                if (typeof(ie7DialogFix) == 'function') {
                    ie7DialogFix($('.content', dialog));
                }

                $('#directTermination input[type="checkbox"]').attr('checked', false);
            }

            $('#DomainTerminateForm select').change(function() {
                updateAgreeDirectTermination();
            });

            updateAgreeDirectTermination();
        }
    },
    groupAdd: {
    	ajaxSubmit: true,
    	ajaxFormCallback: function(data, setContent) {
    		
    		if(data.error) {
    			setContent(data.html);
    		} else {
    			setContent("<h2>Groep toevoegen</h2>" + data.html + "<br/><br/>Dit venster zal automatisch sluiten.");
    			setTimeout("$('.dialog .close').click();",3000);
    			
    			$("ul.left.menu").append(
    				"<li>" +
    				"<span class='filterDomains group_"+data.id+" empty'>"+data.name+" (0)</span>" +
    				"</li>"
    			);
    		}
    		
    		
    	}
    },
    addCustomDomain: {
    	width: 700,
    	ajaxSubmit: true,
    	canPost: function(dialog){
    		
			var url = "http://"+$("#CustomDomainDomainName", $(dialog)).val(); 
			
			if(!url.match(/^(ht|f)tps?:\/\/[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/)) {
				
				$("#CustomDomainDomainName", $(dialog)).parent().addClass("error");
				
				return false;
			}
    		
    		return true;
    	},
    	ajaxFormCallback: function(data, setContent) {
    		
    		if(data.error) {
    			setContent(data.msg);
    		} else {
    			setContent("<h2>Externe domeinnaam</h2>" + data.msg + "<br/><br/>Deze pagina zal automatisch herladen.");
    			setTimeout("document.location.reload()", 3000);
    		}
    	}
    },
    deleteCustomDomain: {
    	width: 700,
    	ajaxSubmit: true,
    	ajaxFormCallback: function(data, setContent) {
    		if(data.error) {
    			setContent(data.msg);
    		} else {
    			setContent("<h2>Externe domeinnaam verwijderen</h2>" + data.msg + "<br/><br/>Deze pagina zal automatisch herladen.");
    			setTimeout("document.location.reload()", 3000);
    		}
    	}
    },
    addCustomDns: {
    	width: 700,
    	ajaxSubmit: true,
    	canPost: function(dialog){
    		
			var url = "http://"+$("#CustomerDnsDomainName", $(dialog)).val(); 
			
			if(!url.match(/^(ht|f)tps?:\/\/[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/)) {
				
				$("#CustomerDnsDomainName", $(dialog)).parent().addClass("error");
				
				return false;
			}
    		
    		return true;
    	},
    	ajaxFormCallback: function(data, setContent) {
    		
    		if(data.error) {
    			setContent(data.msg);
    		} else {
    			setContent("<h2>Eigen DNS Server</h2>" + data.msg + "<br/><br/>Deze pagina zal automatisch herladen.");
    			setTimeout("document.location.reload()", 3000);
    		}
    	}
    },
    groupcontrol: {
    	urlFunction: function(current,options){
    		if($(".domainControl:checked").length < 1) {
    			return false;
    		}
    		return options.url;
    	},
    	data: function() {
    		
    		var ids = Array();
    		var name = "";
    		var counter = 0;
    		
    		$(".domainControl").each(function(data) {

    			if($(this).attr("checked")) {
    				name = $(this).attr("name");
    				var matches = name.match(/(\d+)/);
    				ids[counter] = matches[0];
    				counter++;
    			}
    		});
    		
    		return {'data':{'domainIds': ids}};
    	
    	},
    	post: true,
    	ajaxSubmit: true,
    	ajaxFormCallback: function(data, setContent) {
    		if(!data.error){
    			setContent("<h2>Domeingroepen</h2>De domeingroepen zijn gekoppeld. De pagina zal automatisch vernieuwen.");
    			setTimeout("document.location.reload()", 3000);
    		}
    	}
    },
    vpsControl: {
    	ajaxSubmit:true,
    	ajaxFormCallback: function(data, setContent) {
    		data.title = data.title.replace("VPS server", "Server");
    		data.msg = data.msg.replace("VPS server", "Server");
    		setContent("<h2>"+data.title+"</h2><p>"+data.msg+"</p>");
    		
    		setTimeout("$('.dialog .close').click();",3000);
    		setTimeout("dialogRefresh();",3000);
    		
    	}
    },
    addDns: {
    	ajaxSubmit:true,
    	ajaxFormCallback: function(data, setContent) {
    		
    		if(data.error) {
    			
    		} else {
    			var url = window.location.href;
        		
        		var urlParts = url.split("/");
        		
        		var lastPart = urlParts.pop();
        		urlParts[urlParts.length] = lastPart;
        		if(lastPart != data.orderProductId) {
        			urlParts[urlParts.length] = data.orderProductId;
        		}
        		
        		setContent("<h2>DNS-Record toevoegen</h2>Het toevoegen is gelukt, de pagina zal automatisch herladen.");
        		url = urlParts.join("/");
        		setTimeout("window.location = '" + url + "'", 3000);
    		}
    		
    		
    	}
    },
    deleteDnsRecord: {
    	ajaxSubmit:true,
    	ajaxFormCallback: function(data, setContent) {
    		
    		if(data.error) {
    			
    		} else {
    			var url = window.location.href;
        		
        		var urlParts = url.split("/");
        		
        		var lastPart = urlParts.pop();
        		urlParts[urlParts.length] = lastPart;
        		if(lastPart != data.orderProductId) {
        			urlParts[urlParts.length] = data.orderProductId;
        		}
        		
        		setContent("<h2>DNS-Record verwijderen</h2>Het verwijderen is gelukt, de pagina zal automatisch herladen.");
        		url = urlParts.join("/");
        		setTimeout("window.location = '" + url + "'", 3000);
    		}
    		
    		
    	}	
    },
    editDnsRecord: {
    	ajaxSubmit:true,
    	ajaxFormCallback: function(data, setContent) {
    		
    		if(data.error) {
    			
    		} else {
    			var url = window.location.href;
        		
        		var urlParts = url.split("/");
        		
        		var lastPart = urlParts.pop();
        		urlParts[urlParts.length] = lastPart;
        		if(lastPart != data.orderProductId) {
        			urlParts[urlParts.length] = data.orderProductId;
        		}
        		
        		setContent("<h2>DNS-Record wijzigen</h2>Het wijzigen is gelukt, de pagina zal automatisch herladen.");
        		url = urlParts.join("/");
        		setTimeout("window.location = '" + url + "'", 3000);
    		}
    		
    		
    	}
    },
    addAddress: {
    	ajaxSubmit:true,
    	ajaxFormCallback: function(data, setContent) {
    		//window.location = window.location.href;
    		
    		var elementName, elementId;
    		
    		$("#newAddress").remove();
    		
    		if(data.error) {
    			if(data.html) {
    				setContent(data.html);
    			} else {
    				setContent("<h2>Adres toevoegen</h2>Er is een fout opgetreden, neem contact op met Hosted.nl B.V. middels een ticket.");
    				setTimeout("$('.dialog .close').click();", 5000);
    			}
    			
    		} else {
    			$.each($(".domainAddress"), function(index, value) {
    				
    				var html = '';
    				
	    			switch(index) {
	    				case 0:
	    					html += "<a id='newAddress' href='#newAddress'></a>";
	    					elementId = 'AddressDomainOwner' + data.id;
	    					elementName = 'data[Address][domainOwner]';
	    					break;
	    			
	    				case 1:
	    					elementId = 'AddressDomainAdmin' + data.id;
	    					elementName = 'data[Address][domainAdmin]';
	    					break;
	    				
	    				case 2:
	    					elementId = 'AddressDomainTech' + data.id;
	    					elementName = 'data[Address][domainTech]';
	    					break;
	    			}
	    			
	    			
	    			html += '<div class="option"><input type="radio" value="'+data.id+'" id="'+elementId+'" name="'+elementName+'" />';
	    			html += '<label for="'+elementId+'">' +data.row1 + '<br/>';
	    			html += data.row2 + '<br/>';
	    			html += data.row3;
	    			html += '</label></div>';
	    			$(this).append(html);
	    			
	    			$("#" + elementId).click();
	    			
	    		});
    			
    			$('.dialog .close').click();
    			window.location.hash='newAddress';
    		}
    		
	    		

    	}
    	//
    },
    deleteDomainGroup: {
        ajaxSubmit: true,
        ajaxFormCallback: function(data, setContent) {
            location.reload();
        }
    }
};

function setURL(key, value) {
    var separator = {
        'key': '/',
        'value': ':'
    }
    var url = window.location.href;
    var exists = url.indexOf(separator.key + key + separator.value);
    
    if (exists > -1) {
        var last = url.indexOf(separator.key, exists + 1);

        if (last > -1) {
            url = url.substr(0, exists) + separator.key + key + separator.value + escape(value) + url.substr(last);
        } else {
            url = url.substr(0, exists) + separator.key + key + separator.value + escape(value);
        }
    } else {
        if (url.substr(-1) != separator.key) {
            url += separator.key;
        }

        url += key + separator.value + escape(value);
    }
    
    window.location.href = url;
}

function checkOrderBulk() {
	var showButton = true;

    var correctFields = 0;
    
    $.each($("div.optionalDomain input.domainName"),function(index,value) {
    	if($(this).val() == "") {
            $("div.domainStatus", $(this).parents('div.optionalDomain')).removeClass("taken").removeClass("free").hide();
            $("button.domainCheck", $(this).parents('div.optionalDomain')).show();
    		return;
    	}
    	var url = $(this).val();
		
		if(!url.match(/^([a-z0-9]([-a-z0-9]*[a-z0-9])?)$/i)) {
			$(this).parent().addClass("error");
			showButton = false;
		} else {
			$(this).parent().removeClass("error");
		}
    	if($("div.domainStatus", $(this).parent().parent()).hasClass("taken")) {
    		if($("span.taken input", $(this).parent().parent()).val().length < 5) {
    			showButton = false;
    		} else {
                correctFields++;
            }
    	} else if ($("div.domainStatus", $(this).parent().parent()).hasClass("free")) {
    		//its okay
            correctFields++;
    	} else {
    		showButton = false;
    	}
    });
    
    if(correctFields > 0 && showButton) {
    	$(".saveBulk").show();
    	$(".saveBulk").removeClass("hide");
    	$(".checkAll").hide();
    } else {
    	$(".saveBulk").hide();
    	$(".checkAll").show();
    }
}

$(function() {
	
	$("div.optionalDomain.bulk input.domainName").live("keyup", function() {
        
        $("div.domainStatus", $(this).parents('div.optionalDomain')).removeClass("taken").removeClass("free").hide();
        $("button.domainCheck", $(this).parents('div.optionalDomain')).show();

		if($(this).val().length > 1 && $(this).val().match(/^([a-z0-9]([-a-z0-9]*[a-z0-9])?)$/i)) {
			$("button.defaultButton.domainCheck", $(this).parent().parent()).removeClass("disabled");
			$("button.defaultButton.domainCheck.checkAll").removeClass("disabled");
		} else {
			$("button.defaultButton.domainCheck", $(this).parent().parent()).addClass("disabled")
		}

        if ($(this).val() == '' || $(this).val().match(/^([a-z0-9]([-a-z0-9]*[a-z0-9])?)$/i)) {
            $(this).parent().removeClass('error');
        } else {
            $(this).parent().addClass('error');
        }

		checkOrderBulk();
	});
    $("div.optionalDomain.bulk input.domainName").live("paste", function() {

        var obj = $(this);

        setTimeout(function() {
            obj.trigger('keyup');
        }, 100);
    });

	$("form#DomainRegisterBulkForm").submit(function() {
		
		var stopThePost = false;
		
		var domainCount = 0;

		$.each($("div.optionalDomain.bulk"), function(index,value) {
			
			if($(".domainName", $(this)).val() == "") {
				return;
			}
			
			if($("button", $(this)).css("display") != "none") {
				$("button", $(this)).click();			
				stopThePost = true;
			}
		});
		
		if(stopThePost) {
			return false;
		}
		
		var post = false;

        var postData = {
            data: {
                Products: []
            }
        };
        $.each($("div.optionalDomain.bulk"), function(index,value) {
            postData.data.Products[postData.data.Products.length] = {
                CartItem: {
                    domainName: $('.domainName', this).val(),
                    productId: $('.productId', this).val()
                }
            };
        });

        $.post('/cart/addMultipleArticles', postData, function(data) {

            var orderedDomainHtml = '<h2>Toegevoegd aan winkelwagen</h2>' +
            '<p>';

            if (data.success.length > 0 && data.fail.length == 0) {
                // Only sucess
                orderedDomainHtml += 'Alle ingegeven domeinnamen zijn succesvol toegevoegd aan uw winkelwagen.';

                $.each(data.success, function(i, item) {
                    addItemToCart(item);
                });
            } else if (data.success.length > 0) {
                // Success & fail
                orderedDomainHtml += 'Er zijn ' + data.success.length + ' van de ' + (data.success.length + data.fail.length) + ' ingegeven domeinnamen succesvol toegevoegd aan uw winkelwagen. ' +
                        'De volgende domeinnamen konden niet worden toegevoegd:</p><ul>';

                $.each(data.fail, function(i, item) {
                    orderedDomainHtml += '<li>' + domain.item.CartItem.domainName + domain.item.DomainProduct.domainExtension + '</li>';
                });

                orderedDomainHtml += '</ul><p>';
            } else {
                // Only fail
                orderedDomainHtml += 'Geen van de ingegeven domeinnamen zijn succesvol toegevoegd aan uw winkelwagen.';
            }

            orderedDomainHtml += '<p class="buttons">' +
                '<button class="defaultButton closeDialog" type="button"><span class="l"></span><span>Verder winkelen</span><span class="r"></span></button> ' +
                '<a href="/bestelling-afronden/" class="defaultButton"><span class="l"></span><span>Naar winkelwagen</span><span class="r"></span></a>' +
            '</p>';

            var options = {
                content: orderedDomainHtml
            };
            showDialog(options);
        }, 'json');

        $("div.optionalDomain.bulk").remove();
		$(".addRow").click();
		
		return false;
	});
	
	$("div.content button.defaultButton.domainCheck.checkAll").live("click", function() {
		
		$(this).after($("<div class='stopAddRow'></div>"));
		
		$.each($("div.optionalDomain.bulk"), function(index,value) {
			if($("button", $(this)).css("display") != "none") {
				$("button", $(this)).click();
			}
		});
		
		$.each($("div.input.text input.moveCode"), function(index,value) {
			if($(this).val() == '') {
				$(this).parent().addClass("error");
			}
		})
		
		$("div.stopAddRow").remove();
		
	});
	
	$('body').delegate('select.productId', 'change', function(e) {
		$("div.domainStatus", $(this).parent().parent().parent()).hide();
		$("div.domainStatus", $(this).parent().parent().parent()).removeClass("taken").removeClass("free");
		$("button.domainCheck", $(this).parent().parent().parent()).show();
	});
	
	$("div.optionalDomain.bulk div.domainStatus input.moveCode").live("keyup", function() {
		checkOrderBulk();
	});
	
	$("div.optionalDomain.bulk div.domainStatus input.moveCode").live("change", function() {
		checkOrderBulk();
	});
	
	$('div.optionalDomain.bulk button.defaultButton.domainCheck').live("click",function() {
		
		if ($(this).hasClass('disabled')) {
            return;
        }
		
		if($("div.optionalDomain.bulk").index($(this).parent().parent()) == $("div.optionalDomain.bulk").length - 1) {
			if($("div.stopAddRow").length == 0) {
				$(".addRow").click();
                $('div.optionalDomain:last input:first').focus();
			}
        }
		
		var url = $("input.domainName",$(this).parent()).val();
		
		if(!url.match(/^([a-z0-9]([-a-z0-9]*[a-z0-9])?)$/i)) {
			$("input.domainName",$(this).parent()).parent().addClass("error");
			return false;
		}

        var button = $(this);

        $(this).hide();
        $('div.domainStatus', $(this).parent()).show().addClass('loading');

        var tld = tldInfo[$("select.productId",$(this).parent()).val()];

        checkDomains([{
            name: $("input.domainName",$(this).parent()).val(),
            tld: tld.tld,
            checkable: 1
        }], {
            free: function() {
                $('div.domainStatus', button.parent()).removeClass('loading').removeClass('free').removeClass('taken');
                $('div.domainStatus', button.parent()).addClass('free');
                
                checkOrderBulk();
            },
            taken: function() {
                $('div.domainStatus', button.parent()).removeClass('loading').removeClass('free').removeClass('taken');
                $('div.domainStatus', button.parent()).addClass('taken');

            }
        })
        
        
    });

    $('.confirmClick').live('click', function(e) {

        var url = $(this).attr('href');
        var obj = $(this);

        showDialog({
            width: 400,
            content: '<h2>Bevestig uw keuze</h2>' +
                '<p class="text">Weet u het zeker?</p>' +
                '<p>' +
                    '<button class="defaultButton confirm closeDialog" type="button"><span class="l"></span><span>Ja</span><span class="r"></span></button>' +
                    '<button class="defaultButton closeDialog" type="button"><span class="l"></span><span>Nee</span><span class="r"></span></button>' +
                '</p>',
            className: 'confirm',
            callback: function(data, dialog) {
                $('button.confirm').click(function(e) {

                    if (obj.data('events') != null && typeof(obj.data('events')['clickConfirmed']) != 'undefined') {
                        obj.trigger('clickConfirmed');
                    } else if (typeof(url) != 'undefined') {
                        document.location = url;
                    }

                    e.preventDefault();
                });
            }
        });
        e.preventDefault();
    });
	
	$(".toggleComponentOs").live("click",function() {
		if($(this).hasClass("more")) {
			$("img", $(this)).attr("src", "/img/icons/pixel/PaleBlue/minus.gif");
			$(this).attr("content", "Verberg alle mogelijkheden");
			$("div.content", $(this)).html("Verberg alle mogelijkheden");
			$(this).removeClass("more");
		} else {
			$("img", $(this)).attr("src", "/img/icons/pixel/PaleBlue/plus.gif");
			$(this).attr("content", "Bekijk alle mogelijkheden");
			$("div.content", $(this)).html("Bekijk alle mogelijkheden");
			$(this).addClass("more");	
		}
		
		$(this).hover();
		
		if($(this).parent().parent().parent().next().hasClass("hide")) {
			$(this).parent().parent().parent().next().removeClass("hide");	
		} else {
			$(this).parent().parent().parent().next().addClass("hide");
		}
		
	});
	
	$(".toggleSharepointCompare").live("click",function() {
		if($(this).parent().parent().parent().next().hasClass("hide")) {
			$(this).parent().parent().parent().next().removeClass("hide");
			$(this).attr("src", "/img/hosted/toggle-collapse.png");
		} else {
			$(this).parent().parent().parent().next().addClass("hide");
			$(this).attr("src", "/img/hosted/toggle-expand.png");
		}
		
		
	});
	
	$(".toggleComponent").live("click", function() {
		
		if($(this).hasClass("more")) {
			$("img", $(this)).attr("src", "/img/icons/pixel/PaleBlue/minus.gif");
			$(this).attr("content", "Verberg alle mogelijkheden");
			$("div.content", $(this)).html("Verberg alle mogelijkheden");
			$(this).removeClass("more");
		} else {
			$("img", $(this)).attr("src", "/img/icons/pixel/PaleBlue/plus.gif");
			$(this).attr("content", "Bekijk alle mogelijkheden");
			$("div.content", $(this)).html("Bekijk alle mogelijkheden");
			$(this).addClass("more");	
		}
		
		$(this).hover();
		
		var hide = $("tbody.hide", $(this).parents("table"));
		var show = $("tbody.show", $(this).parents("table"))
		
		hide.addClass("show");
		hide.removeClass("hide");
		
		show.addClass("hide");
		show.removeClass("show");
		
	});
	
	$('.orderLicenses .actions button').live("click",function() {
		var id = parseInt($(this).parent().parent().attr('id').substr(2));
	    var button = $(this);
	    var table = $(this).parents('.orderLicenses');
		
	    var amountInput = $('input.amount', $(this).parent().parent());
        var amount = 1;
        if (table.hasClass('withAmount')) {
            var tmpAmount = parseInt(amountInput.val())
            if (tmpAmount != NaN) {
                amount = tmpAmount;
            }
        }
	     
		if($(this).hasClass("orderButton")) {
			//show dialog
			showOrderDialog(this,amount);
		}
/*
        if (button.hasClass('loading')) {
            return false;
        }

        var cell = button.parent();
        
        cell.html("<img src='/img/layout/loading_small.gif' />");

        var form = $('form', table.parent());
        //var postData = {data: {CartItem: {productId: id, flash: 0}}, amount: amount};
        var postData = form.serialize() + '&data[CartItem][productId]=' + id + '&data[CartItem][flash]=0&amount=' + amount;

        $('<div />').cart();
        $.cart.url = '/cart/addArticle';
        $.cart.add(false, postData, function(data) {
            if (typeof(data.newKey) != 'undefined') {
            	cell.html('<span class="ordered">Besteld</span>');

            	addItemToCart(data);
            	
                amountInput.attr('disabled', true);

            } else if (data.error) {
                if (typeof(data.redirect) != 'undefined' && data.redirect != false) {
                    document.location = data.redirect;
                } else {
                    button.replaceWith('<span class="error">Fout <img src="/img/icons/moreinfo.png" alt="" /></span>');
                }
            }
        });*/
    });	
	
	$('.pagination select').change(function() {
		setURL('page', $(this).val());
	});
	
	$('div.faq > ul > li > span').click(function() {
        var li = $(this).parent();

        if (li.hasClass('opened')) {
            li.removeClass('opened');
            $('ul li', li).removeClass('opened');
        } else {
            li.addClass('opened');
        }
    });

    $('div.faq > ul > li ul li span.question').click(function() {

        var li = $(this).parent();

        if (li.hasClass('opened')) {
            li.removeClass('opened');
        } else {
            li.addClass('opened');
        }
    });
	
    $('div.input.select select').each(function(i, obj) {
        updateSelectValue(obj);
    });
    $('div.input.select select').live('change', function() {
        updateSelectValue(this);
    });
    $('div.input.select select').live('keyup', function() {
        updateSelectValue(this);
    });
    $('div.input.select select').live('focus', function() {
        $(this).parent().addClass('focus');
    });
    $('div.input.select select').live('blur', function() {
        $(this).parent().removeClass('focus');
    });

    $('a.dialogLink').live("click",function(e) {

        e.preventDefault();

        var options = {
            url: $(this).attr('href')
        };
        
        var current = $(this);
        
        $.each(dialogLinkOptions, function(key,value) {
        	if(current.hasClass(key)) {
        		options = $.extend(options, value);
        	}
        });
        
        if(typeof(options.urlFunction) == "function") {
        	options.url = options.urlFunction(this,options);
        }
        
        if(options.url != false) {
        	showDialog(options);	
        }
        
    });
    
    $('div.container > div.contentContainer > div.content div.finishOrder div.content table.cart tbody.items img.toggleDetails').live('click', function() {
        var tr = $(this).parents('tr');
        var items = $('tr', $(this).parents('tbody'));
        var index = $('> tbody > tr:not(.extension)', $(this).parents('table')).index($(this).parents('tr'));

        var cartI = cartItemInfo[index].cartI;

        if (tr.hasClass('opened')) {
            tr.removeClass('opened');
            $(this).attr('src', $(this).attr('src').replace('collapse', 'expand'));

            $(items).filter('.extension.relatedTo' + cartI).addClass('hide');
        } else {
            tr.addClass('opened');
            $(this).attr('src', $(this).attr('src').replace('expand', 'collapse'));

            $(items).filter('.extension.relatedTo' + cartI).removeClass('hide');
        }
    });

    $('div.container > div.contentContainer div.breadcrumbBar > div.barMenu').hoverIntent(function() {
        $(this).addClass('open');

        if (typeof(beforeOpenCart) == 'function') {
            beforeOpenCart($(this));
        }

        var container = $('div.container', this);

        $('div.container', this).slideDown(200, function() {
            if (typeof(afterOpenCart) == 'function') {
                afterOpenCart(container);
            }
        });

        /*setTimeout(function() {
            container.stop();
        }, 220)*/
    }, function() {
        var div = $(this);

        if (typeof(beforeCloseCart) == 'function') {
            beforeCloseCart($(this));
        }

        $('div.container', this).slideUp(200, function() {
            div.removeClass('open');
        });
    });

    $('div.container > div.contentContainer > ul.menu > li').hoverIntent(function() {

        if (!$('> span', this).length) {
            return;
        }

        var menuitem = this;

        if ($('> span', this).length) {

            $(menuitem).addClass('opened');
            $('> span', this).hide().slideDown(250);
        }
    }, function() {

        if (!$('> span', this).length) {
            return;
        }

        var menuitem = this;

        $('> span', this).slideUp(200, function() {
            $(menuitem).removeClass('hover');
            $(menuitem).removeClass('opened');
        });
    });

    $('div.container > div.contentContainer > ul.menu > li').hover(function() {

        $(this).addClass('hover');

    }, function() {

        if ($(this).hasClass('opened') && $('> span', this).length) {
            return;
        }

        $(this).removeClass('hover');
    });

    $('div.container > div.contentContainer div.sideBar ul.contact li.login_register').trigger('click');

    $('div.container > div.contentContainer > div.content div.contentBlocks > div div.header ul.tabs:not(.noclick) li').click(function(e, triggered) {

        if (!triggered && $(this).hasClass('active')) {
            return;
        }

        $('li', $(this).parent()).removeClass('active');
        $(this).addClass('active');

        var divs = $('div.content > div', $(this).parents('div.contentBlocks > div'));
        divs.hide();

        var selectedDiv = $(divs[$(this).index()]);
        selectedDiv.show();

        var readMoreLinks = $('ul.readMore li', $(this).parent().parent());
        readMoreLinks.hide();
        $(readMoreLinks[$(this).index()]).show();

        if (typeof(contentBlocksCallbacks) != 'undefined' && typeof(contentBlocksCallbacks[$(this).attr('id')]) == 'function') {
            contentBlocksCallbacks[$(this).attr('id')](this, selectedDiv);
        }
    });

    $('div.container > div.contentContainer > div.content div.contentBlocks > div div.header ul.tabs:not(.noclick) li.active').trigger('click', [true])

    $('div.container > div.contentContainer > div.content div.contentBlock div.header ul li').click(function(e) {

        if ($(this).hasClass('active')) {
            return;
        }

        $('li', $(this).parent()).removeClass('active');
        $(this).addClass('active');

        var divs = $('div.content > div', $(this).parents('div.contentBlock'));

        divs.hide();
        $(divs[$(this).index()]).show();
    });


    slider(
        $('div#headerSlide'),
        function(obj) {
            return $('> div', $(obj))
        },
        function(obj) {
            return $(obj).parent();
        },
        1000, 10000, false, false
    );


    $('.homepageSlider').each(function (i, obj) {
        var container = $('div.container', obj);
        var ul = $('ul', container);
        var li = $('li', ul);
        var liWidth = $(li[0]).outerWidth() + 5;

        var slideSteps = 3;

        var currentI = 0;

        ul.width(li.length * liWidth + 'px');

        $('.next', container.parent()).click(function() {
            ul.stop(true, true).animate({marginLeft: '-' + (liWidth * slideSteps) + 'px'}, 1000, function() {

                for (var liI = 0; liI < slideSteps; liI++) {
                    $(li[liI]).appendTo(ul);
                }

                li = $('li', ul);

                ul.css('marginLeft', 0)
            });
        });
        $('.prev', container.parent()).click(function() {
            ul.stop(true, true);

            ul.css('marginLeft', '-' + (liWidth * slideSteps) + 'px')

            for (var liI = 0; liI < slideSteps; liI++) {
                $(li[li.length-2-liI]).prependTo(ul);
            }

            li = $('li', ul);

            ul.animate({marginLeft: 0}, 1000);
        });
    });

    function switchLi(obj, ulElement, fadeSpeed, callback) {

        if (typeof(fadeSpeed) == 'undefined') {
            fadeSpeed = 400;
        }

        var ul = ulElement(obj);
        var li = $('li', ul);

        li.not(':first').hide();

        var oldLi = $(li[0]);

        if ($(obj).hasClass('prev')) {

            //$(li[1]).stop(true, true);

            ul.prepend(li[li.length - 1]);

            $('> li', ul).removeClass('visible');
            $('> li:first', ul).addClass('visible');

            $('li:first', ul).fadeIn(fadeSpeed, function() {
                $(oldLi).hide();

                if (typeof(callback) == 'function') {
                    callback();
                }
            });
        } else {
            $(li[1]).show();

            $(li[0]).fadeOut(fadeSpeed, function() {
                ul.append(this);
                $(li[0]).show();

                $('> li', ul).removeClass('visible');
                $('> li:first', ul).addClass('visible');

                if (typeof(callback) == 'function') {
                    callback();
                }
            });
        }
    }

    $('div.container > div.contentContainer div.actions span.switch').click(function() {

        var switchSpan = $(this);

        if (switchSpan.hasClass('sliding')) {
            return;
        }

        switchSpan.addClass('sliding');

        switchLi(this, function(obj) {
            return $('> div.container > ul', $(obj).parent());
        }, 250, function(obj) {
            switchSpan.removeClass('sliding');

            var counter = $('span.switchCounter > span', switchSpan.parent());
            var maxCount = $('> div.container > ul > li', switchSpan.parent()).length;

            var newCount = parseInt(counter.html()) + (switchSpan.hasClass('prev') ? -1 : 1);
            if (newCount > maxCount) {
                newCount = 1;
            } else if (newCount < 1) {
                newCount = maxCount;
            }

            counter.html(newCount);
        });
    });
    $('div.container > div.contentContainer div.sideBar > div.block.switchable > div.content span.switch').click(function() {

        var switchSpan = $(this);

        if (switchSpan.hasClass('sliding')) {
            return;
        }
        
        switchSpan.addClass('sliding');

        switchLi(this, function(obj) {
            return $('> ul', $(obj).parent());
        }, 250, function(obj) {
            switchSpan.removeClass('sliding');

            var counter = $('span.switchCounter > span', switchSpan.parent());
            var maxCount = $('> ul > li', switchSpan.parent()).length;

            var newCount = parseInt(counter.html()) + (switchSpan.hasClass('prev') ? -1 : 1);
            if (newCount > maxCount) {
                newCount = 1;
            } else if (newCount < 1) {
                newCount = maxCount;
            }

            counter.html(newCount);
        });
    });
    $('div.container > div.contentContainer div.sideBar > div.block.switchable > div.content > ul > li:first').addClass('visible');


    $('#UserFound').live('change', function() {
        if ($(this).val() > 1) {
            $('#UserFoundText', $(this).parents('form')).parent().show().focus();
        } else {
            $('#UserFoundText', $(this).parents('form')).parent().hide();
        }

        if (typeof(ie7DialogFix) == 'function') {
            ie7DialogFix($(this).parents('.dialog .content'));
        }

    }).change();

    bindTooltips();

    $('div.container > div.contentContainer > div.content div.tableContainer > table tbody tr td .showMore,' +
      'div.container > div.contentContainer > div.content div.tableContainer > table tbody tr td .showLess').click(function() {

        var more = $('tbody.more', $(this).parents('table'));

        if (ie7) {
            if (more.is(':visible')) {
                more.hide();
            } else {
                more.show();
            }
            return;
        }


        var link = $(this);

        var widths = [];

        $('tbody:first > tr:first > td', more.parents('table')).each(function(i, obj) {
            widths[i] = $(obj).width();
        });

        var wrapper = $('<tr><td colspan="' + widths.length + '"><div class="wrapper"><table cellpadding="0" cellspacing="0"><tbody></tbody></table></div></td></tr>');
        $('table > tbody', wrapper).html(more.html());
        more.html(wrapper);

        $('table > tbody > tr:first > td', wrapper).each(function(i, obj) {

            if (i == 0) {
                return;
            }

            $(obj).width(widths[i]);
        });

        var moreDiv = $('tbody.more > tr > td > div.wrapper', $(this).parents('table'));
        more.addClass('sliding');

        if (!more.is(':visible')) {
            more.show();

            moreDiv.slideDown(300, function() {
                more.removeClass('sliding');
                $('tr > td > div.wrapper > table tr td', more).css('width', 'auto');
                more.html($('tr > td > div.wrapper > table > tbody', more).first().html());

                link.hide();
                $('.showLess', link.parent()).css('display', 'inline-block');

                /*if ($(more).parents('table').attr('id') == 'domainCheck') {
                    var tr = $('tr', $('#domainCheck tbody.more')[0]);

                    checkDomains(domainsCheckMore, {
                        before: function(i, obj) {
                            $('> td.status', tr[obj.trI]).html('<img src="/img/layout/loading_small.gif" />');
                        },
                        free: function(i, obj) {
                           $('> td.status', tr[obj.trI]).addClass('free').html('Beschikbaar');
                           $('> td.actions', tr[obj.trI]).addClass('free').html('<span class="link">Bestellen</span>');
                        },
                        taken: function(i, obj) {
                           $('> td.status', tr[obj.trI]).addClass('taken').html('Bezet');
                           $('> td.actions', tr[obj.trI]).addClass('taken').html('<span class="link">Verhuizen</span>');
                        }
                    }, 1);
                }*/

                bindTooltips();
            });

            /*setTimeout(function() {
                moreDiv.stop();
            }, 150);*/

        } else {
            moreDiv.show();

            moreDiv.slideUp(300, function() {
                more.removeClass('sliding');

                $('tr > td > div.wrapper > table tr td', more).css('width', 'auto');
                
                more.hide();
                more.html($('tr > td > div.wrapper > table > tbody', more).first().html());

                link.hide();
                $('.showMore', link.parent()).css('display', 'inline-block');
            });
        }
    });

    $('ul.slidable li.switchSlidable span').click(function() {
        var moreLi = $('li.more', $(this).parents('ul'));
        var span = $(this);

        if (!moreLi.hasClass('open')) {
            // slide open
            moreLi.addClass('open');
            $('> ul', moreLi).hide();
            $('> ul', moreLi).slideDown(300, function() {
                $('span', $(span).parent()).not(span).css('display', 'block');
                span.hide();
            });
        } else {
            // slide close
            $('> ul', moreLi).show();
            $('> ul', moreLi).slideUp(300, function() {
                $('span', $(span).parent()).not(span).css('display', 'block');
                span.hide();
                moreLi.removeClass('open');
            });
        }
    });

    if (typeof(domainsCheck) != 'undefined') {

        var tr = $('tr', $('#domainCheck tbody')[0]);
        checkDomains(domainsCheck, {
            before: function(i, obj) {
                $('> td.status', tr[obj.trI]).html('<img src="/img/layout/loading_small.gif" />');
            },
            free: function(i, obj) {
               $('> td.status', tr[obj.trI]).addClass('free').html('Beschikbaar');
               $('> td.actions', tr[obj.trI]).addClass('free').html('<span class="link">Bestellen</span>');
            },
            taken: function(i, obj) {
               $('> td.status', tr[obj.trI]).addClass('taken').html('Bezet');
               $('> td.actions', tr[obj.trI]).addClass('taken').html('<span class="link">Verhuizen</span>');
            }
        });

    }

    $('div.container > div.contentContainer > div.content div.tableContainer > table tbody tr td span.checkDomain').live('click', function() {
        var trI = $(this).parents('tr').index();
        var domain = domainsCheckMore[trI];
        var tr = $('tr', $(this).parents('tbody'));

        checkDomains([domain], {
            before: function(i, obj) {
                $('> td.status', tr[trI]).html('<img src="/img/layout/loading_small.gif" />');
            },
            free: function(i, obj) {
               $('> td.status', tr[trI]).addClass('free').html('Beschikbaar');
               $('> td.actions', tr[trI]).addClass('free').html('<span class="link">Bestellen</span>');
            },
            taken: function(i, obj) {
               $('> td.status', tr[trI]).addClass('taken').html('Bezet');
               $('> td.actions', tr[trI]).addClass('taken').html('<span class="link">Verhuizen</span>');
            }
        });
    });
    
    $("table.orderTable:not(.extraOptions) tbody tr td.actions .orderButton").live("click", function() {
    	return showOrderDialog(this,1);
    });

    $('table#domainCheck tbody tr td.actions span.link').live('click', function() {

        var link = $(this);

        var status = $('td.status', link.parents('tr'));
        var trI = link.parents('tr').index();

        var domain;
        if (link.parents('tbody').hasClass('more')) {
            domain = domainsCheckMore[trI]
        } else {
            domain = domainsCheck[trI]
        }

        var options = {
            url: '/pages/orderDomain/' + domain.productId + '/' + domain.name,
            ajaxSubmit: true,
            callback: function(data, dialog) {
                if ($('div.contentContainer div.content form input:not([type="hidden"])', dialog).length == 0) {
                    $('div.contentContainer div.content form', dialog).submit();
                }
            },
            ajaxFormCallback: function(data, setContent) {
                if (typeof(data) == 'object' && typeof(data.newKey) != 'undefined' && data.newKey >= 0) {

                	addItemToCart(data);

                    var orderedDomainHtml = '<h2>Toegevoegd aan winkelwagen</h2>' +
                                            '<p>De domeinnaam is toegevoegd aan uw winkelwagen.</p>' +
                                            '<p class="buttons">' +
                                                '<button class="defaultButton closeDialog" type="button"><span class="l"></span><span>Verder winkelen</span><span class="r"></span></button> ' +
                                                '<a href="/bestelling-afronden/" class="defaultButton"><span class="l"></span><span>Naar winkelwagen</span><span class="r"></span></a>' +
                                            '</p>';

                    link.replaceWith('<span class="ordered">Besteld</span>');

                    setContent(orderedDomainHtml);
                }
            }
        };
        showDialog(options);
    });

    runElementMonitoring();

    if (typeof(cartItemInfo) != 'undefined') {
        $('div.container > div.contentContainer > div.content div.finishOrder div.content table.cart tbody.items tr td.delete > div').bind('clickConfirmed', function() {
            var table = $(this).parents('table');
            var row = $(this).parents('tr');

            var index = $('> tbody > tr:not(.extension)', $(this).parents('table')).index($(this).parents('tr'));

            var cartI = cartItemInfo[index].cartI;

            $.get('/removeFromCart/' + cartI, {}, function(data) {
                if (!data.error) {
                    row.remove();

                    cartItemInfo.splice(index, $('.related.relatedTo' + cartI, table).length + 1);

                    $('.relatedTo' + cartI, table).remove();

                    if ($('tbody.items tr', table).length == 0) {
                        table.replaceWith('<p>U heeft momenteel geen producten in uw winkelwagen</p>');
                        $('div.container > div.contentContainer > div.content div.finishOrder p.orderNote').remove();
                        $('div.container > div.contentContainer > div.content div.finishOrder p.orderNavigation').remove();
                    } else {
                        $('tbody.items tr', table).removeClass('odd');

                        var rowI = 0;
                        $('tbody.items tr:not(.extension):not(.related)', table).each(function(i, obj) {
                            var rowCartI = cartItemInfo[$('tbody.items tr:not(.extension)', table).index($(this))].cartI;

                            if (rowI++ % 2 == 0) {
                                $(this).addClass('odd')
                                $('.relatedTo' + rowCartI, $(this).parents('tbody')).addClass('odd');
                            }
                        });
                    }
                }
            }, 'json');
        });
    }


    /**
     * sliders
     */

    // Enkele slider
    initSingleSliders();

    updateConfiguratorSliders();


    $('form#configuratorForm').submit(function() {

        $('div.error-message', $('#OrderProductHostname').parents('div.input')).remove();
        $('#OrderProductHostname').parents('div.input').removeClass('error');

        if ($('#OrderProductHostname').is(':visible') && ($('#OrderProductHostname').val() == '' || ($('#OrderProductHostname').hasClass('requiresFQDN') && $('#OrderProductHostname').val().match(/^[a-z0-9\-]+\.[a-z0-9\-]+\.[a-z]{2,5}(\.[a-z]{2})?$/im) == null))) {
            $('#OrderProductHostname').parents('div.input').addClass('error');
            $('#OrderProductHostname').focus();

            $('#OrderProductHostname').parents('div.input').append('<div class="error-message">De opgegeven hostname is niet geldig.</div>')

            return false;
        }
    	
        if ($('button[type="submit"]:not(.disabled)', this).length + $('input[type="submit"]:not(.disabled)', this).length > 0) {
        	
        	if(!$(this).hasClass("configuratePage")) {
        		return true;
        	}
        	
        	var options = {
				url: $("#configuratorForm").attr("action"),
				data: $("#configuratorForm").serialize(),
				post: true,
				callback: function(data, dialog,setContent) {
					if(data.item) {
						addItemToCart(data.item);
						
						var orderedDomainHtml = '<h2>Toegevoegd aan winkelwagen</h2>' +
	                        '<p>'+data.item.item.CartItem.productName+' is toegevoegd aan uw winkelwagen.</p>' +
	                        '<p class="buttons">' +
	                            '<button class="defaultButton closeDialog" type="button"><span class="l"></span><span>Verder winkelen</span><span class="r"></span></button> ' +
	                            '<a href="/bestelling-afronden/" class="defaultButton"><span class="l"></span><span>Naar winkelwagen</span><span class="r"></span></a>' +
	                        '</p>';
	
							//lets add the HTML to the card
							//setContent(orderedDomainHtml);
						setContent(orderedDomainHtml);
						
						
					}
				}
        	};
        	showDialog(options);
        	return false;
        }
        return false;
    });

    var submitAfterLoading = false;
    var cartTimeout;

    if (typeof(cartItemInfo) != 'undefined') {

        $('div.container > div.contentContainer > div.content div.finishOrder div.content table.cart tbody tr td.amount div.input input').keyup(function() {
            if (typeof(cartTimeout) != 'undefined') {
                clearTimeout(cartTimeout);
                delete cartTimeout;
            }

            var input = $(this);
            if (input.val() == '') {
                return;
            }

            cartTimeout = setTimeout(function() {
                input.change().blur();
            }, 1000);
        });

        $('div.container > div.contentContainer > div.content div.finishOrder div.content table.cart tbody tr td.amount div.input input').change(function() {

            var input = $(this);

            clearTimeout(cartTimeout);

            var cartI = cartItemInfo[$('> tbody > tr:not(.extension)', $(this).parents('table')).index($(this).parents('tr'))].cartI;

            input.parents('td').addClass('loading');

            $.get('/cart/modifyAmount/' + cartI + '/' + $(this).val(), function(data) {
                if (!data.error) {
                    input.val(data.amount);
                    input.parents('td').removeClass('loading');
                    updateCartOverview();

                    if (submitAfterLoading) {
                        submitAfterLoading = false;
                        input.parents('form').submit();
                    }
                } else if (typeof(data.redirect) != 'undefined') {
                    document.location = data.redirect;
                }
            }, 'json');
        });

        $('form#OrderFinishOrderForm').submit(function() {
            if (submitAfterLoading) {
                return false;
            }

            if ($('.overview.cart tr.main td.amount.loading').length > 0) {
                submitAfterLoading = true;
                return false;
            }
        });
    }

    if (typeof(periods) != "undefined") {
        var options = [];
        $('select.contractPeriod').change(function() {
            var productClass = $(this).attr('class').split(' ')[1];
            var selectedPeriod = periods[$(this).val()];

            $('.invoicePeriod.' + productClass + ', .relatedInvoicePeriod.' + productClass).each(function(i, select) {
                var selectedValue = $(select).val();

                if (typeof(options[$(select).attr('id')]) == 'undefined') {
                    options[$(select).attr('id')] = $(select).html();
                } else {
                    $(select).html(options[$(select).attr('id')]);
                }

                $('option', select).each(function(m, obj) {
                    if (parseInt(periods[$(obj).attr('value')]) > selectedPeriod) {
                        $(obj).remove();
                    } else if (selectedValue == $(obj).val()) {
                        $(obj).attr('selected', true);
                    }
                });
            });
        });
        $('select.contractPeriod').each(function() {
            $(this).trigger('change');
        });
    }

    $("div.container > div.contentContainer > div.content div.finishOrder form#finishOrder_domainDetails fieldset.addresses div.input select").change(function() {
    	
    	if($(this).val() == 0) {
    		$(".editAddress", $(this).parent().parent()).css("cssText", "display:none!important");
    	} else {
    		$(".editAddress", $(this).parent().parent()).css("cssText", "display:inline-block!important");
    	}
    });
    
    $("div.container > div.contentContainer > div.content div.finishOrder form#finishOrder_domainDetails fieldset.addresses div.input select").change();

    $('div.container > div.contentContainer > div.content div.finishOrder form#finishOrder_domainDetails fieldset.addresses div.input .editAddress').click(function() {
        var addressId = $('select', $(this).parents('div.input')).val();
        var addressOptions = $('select > option[value="' + addressId + '"]', $(this).parents('fieldset.addresses'));

        showDialog({
            url: '/users/editaddress/' + addressId,
            ajaxSubmit: true,
            ajaxFormCallback: function(data, setContent, closeDialog) {

                var addressText = '';

                if (data.address.companyName != '') {
                    addressText += data.address.companyName + ' - ';
                }

                addressText += data.address.initials + ' ';
                if (data.address.insertion != '') {
                    addressText += data.address.insertion + ' ';
                }
                addressText += data.address.lastname;

                addressOptions.html(addressText);

                $.each(addressOptions, function(i, obj) {
                    updateSelectValue($(obj).parent());
                });

                closeDialog();
            }
        });
    });
    $('div.container > div.contentContainer > div.content div.finishOrder form#finishOrder_domainDetails fieldset.addresses div.input .orderAddAdress').click(function() {
        var selects = $('select', $(this).parents('fieldset.addresses'));

        showDialog({
            url: '/users/addaddress/',
            ajaxSubmit: true,
            ajaxFormCallback: function(data, setContent, closeDialog) {

                if (data.error) {
                    setContent(data.html);
                    return;
                }


                var addressText = '';

                if (data.address.companyName != '') {
                    addressText += data.address.companyName + ' - ';
                }

                addressText += data.address.initials + ' ';
                if (data.address.insertion != '') {
                    addressText += data.address.insertion + ' ';
                }
                addressText += data.address.lastname;

                selects.append('<option value="' + data.id + '">' + addressText + '</option>');

                /*$.each(addressOptions, function(i, obj) {
                    updateSelectValue($(obj).parent());
                });*/

                closeDialog();
            }
        });
    });

    $('div.container > div.contentContainer > div.content div.finishOrder form#finishOrder_domainDetails fieldset.customerDns div.select select.domainDns').change(function() {
        var externalDnsFields = $('.externalDns input', $(this).parent().parent().parent());
        if ($(this).val() == -1) {
            externalDnsFields.attr('disabled', false);
            externalDnsFields.parent().removeClass('hide');
        } else {
            externalDnsFields.attr('disabled', true);
            externalDnsFields.val('');
            externalDnsFields.parent().addClass('hide');
        }

        if ($('div.container > div.contentContainer > div.content div.finishOrder form#finishOrder_domainDetails fieldset.customerDns .externalDns:visible').length > 0) {
            $('p.externalDnsMessage').show();
        } else {
            $('p.externalDnsMessage').hide();
        }
    }).change();

    

    $('#AddressLegalForm').live('change', function() {
        if ($(this).val() != 1) {
            $('.companyInfo').removeClass('hide');
        } else {
            $('.companyInfo').addClass('hide');
            $('.companyInfo input').val('');
        }
    });

    $('form#finishOrder_domainDetails').submit(function(e) {
        var form = $(this);

        var valid = true;

        $('div.container > div.contentContainer > div.content div.finishOrder form#finishOrder_domainDetails fieldset.customerDns > div').each(function(i, obj) {

            var dnsFields = $('.externalDns:visible input', obj);

            if (!dnsFields.length) {
                return;
            }

            var validCount = 0;
            dnsFields.each(function(fI, fObj) {
                if ($(fObj).val().match(/^[a-z0-9\-]+\.[a-z0-9\-]+\.[a-z]{2,5}(\.[a-z]{2})?$/im)) {
                    validCount++;
                    $(fObj).parents('div.input').removeClass('error');
                } else if ($(fObj).val() != '') {
                    valid = false;
                    $(fObj).parents('div.input').addClass('error');
                }
            });

            if (dnsFields.filter('.required').filter('[value=""]').length || validCount < 2) {

                dnsFields.filter('.required').filter('[value=""]').parents('div.input').addClass('error');

                valid = false;
                return false;
            } else {
                dnsFields.parents('div.input').removeClass('error');
            }
        });

        if (!valid) {
            e.preventDefault();
        }
    })

    $('#credit').live('keyup', function() {

        if ($(this).val() != '' && !$(this).val().match(/^[0-9]+$/)) {
            $(this).val(sliderOptions['buyCredit'][$('#creditSlider').slider('value')]);
            return;
        }

        if ($(this).val() > 10000) {
            $(this).val(10000);
        }

        updateCreditSlider($(this).val());
    });

    $('#credit').live('blur', function() {

        var minVal = 10;
        if ($('#minCreditAmount').length == 1) {
            minVal = parseInt($('#minCreditAmount').val());
        }

        var val = parseInt($(this).val())

        if (val == NaN) {
            $(this).val(minVal);
        } else if (val < minVal) {
            $(this).val(minVal);
        }

        updateCreditSlider($('#credit').val());
    });

});


function updateCreditSlider(value) {

    for (var i = 0; i < sliderOptions['buyCredit'].length; i++) {
        if (value >= sliderOptions['buyCredit'][i] && value <= sliderOptions['buyCredit'][i + 1]) {
            if (Math.abs(sliderOptions['buyCredit'][i] - value) <= Math.abs(sliderOptions['buyCredit'][i + 1] - value)) {
                $('#buyCredit').slider('value', i);
                $('#buyCredit').slider('option', 'change')(null, {value: i});
            } else {
                $('#buyCredit').slider('value', i + 1);
                $('#buyCredit').slider('option', 'change')(null, {value: i});
            }
            return;
        }
    }
}

function updateCartOverview() {
    var pricePerPeriod = {};
    var items = $('div.container > div.contentContainer > div.content div.finishOrder div.content table.cart tbody.items tr:not(.extension)');

    for (var i = 0; i < items.length; i++) {

        var amount = $('td.amount input', items[i]).val();
        amount = typeof(amount) == 'undefined' ? 1 : parseInt(amount);

        var itemPrice = cartItemInfo[i].unitPrice * amount;

        $('td.price strong', items[i]).html(currency(itemPrice));

        if (typeof(pricePerPeriod[cartItemInfo[i].pricePeriod]) == 'undefined') {
            pricePerPeriod[cartItemInfo[i].pricePeriod] = 0;
        }

        pricePerPeriod[cartItemInfo[i].pricePeriod] += itemPrice;
    }

    $.each(pricePerPeriod, function(periodId, price) {
        $('#priceForPeriod' + periodId).html(currency(price));
    });
}

/**
 * Slider functions
 */

function addOptionToSlider(option, sliderHolder, groupId, newI, setActive) {
    var options = currentSliderOptions[groupId].slice();
    currentSliderOptions[groupId][newI] = option;

    for (var i = newI; i < options.length; i++) {
        currentSliderOptions[groupId][i + 1] = options[i];
    }

    updateConfiguratorSliders(groupId);
    $('.groupConfiguratorSlider', '#group_' + groupId).slider('value', newI);
}

var configuratorDiscount = 0;

function updateConfiguratorPrices() {

    configurationPrice = 0;
    $('.groupConfiguratorSlider:visible').each(function(i, obj) {
        var groupId = $(obj).parent().parent().attr('id').substr(6);
        configurationPrice += parseFloat(currentSliderOptions[groupId][$(obj).slider('value')].price);
    });
    
    $("ul.selectableExtensions li input:checked").each(function(i,obj) {
    	
    	var groupId = $(obj).parent().parent().attr('id').substr(6);
        configurationPrice += parseFloat(currentSliderOptions[groupId][$(this).parent().index()].price);
    });

    var discountRatio = 1;

    if (configuratorDiscount > 0) {
        discountRatio = (100 - configuratorDiscount) / 100;
    }

    var discount = ((configurationPrice + parseFloat(productPrice))) * (1 - discountRatio);
    discount = Math.round(discount * 100) / 100;

    $('#configurationPrice').html(currency(configurationPrice - discount));
    $('#totalPrice').html(currency((configurationPrice + parseFloat(productPrice)) - discount));
    $('#hourPrice').html(currency((((configurationPrice + parseFloat(productPrice))) - discount) / 720));
    $('#discountPrice').html(currency(discount * -1, false));

    if (typeof(configuratorUpdateCallback) == 'function') {
        configuratorUpdateCallback();
    }
}

var selectedConfiguratorOptions = {};
var sliderInitialized = false;
var startValue = null;

function updateConfiguratorSliders(selectedGroupId) {

    var groupSelector = '';
    if (typeof(selectedGroupId) != 'undefined') {
        groupSelector = '#group_' + selectedGroupId;
    }

    if (currentSliderOptions != null) {

        $('#basePrice').html(currency(productPrice));

        //$('.productSliders > div.container > div' + groupSelector).hide();
        //$('.productSliders > div.container > div' + groupSelector + ' .groupConfiguratorSlider').slider('destroy');

        //$(groupSelector + ' .groupSelectedI').attr('disabled', true);
        //$(groupSelector + ' .groupSelectedId').attr('disabled', true);

        $.each(currentSliderOptions, function(groupId, options) {

            if (typeof(selectedGroupId) != 'undefined' && groupId != selectedGroupId) {
                return true;
            }

            var groupSlider = $('#group_' + groupId);
            groupSlider.show();

            $('.groupSelectedI').attr('disabled', false);
            $('.groupSelectedId').attr('disabled', false);

            var configuratorBaseprice = 0;
            for (var i = 0; i < options.length; i++) {
                if (parseFloat(options[i].price) > 0) {
                    configuratorBaseprice = parseFloat(options[i].price) / parseInt(options[i].intValue);
                    break;
                }
            }


            var changeTimer;
            $('.groupConfiguratorSlider', groupSlider).slider({
                min: 0,
                max: options.length - 1,
                step: 1,
                change: function(event, ui) {

                    var minOpacity = 1;
                    var maxOpacity = 1;

                    var sliderPosition = ui.value / options.length;

                    if (sliderPosition < .08) {
                        minOpacity = 0;
                    } else if (sliderPosition < .16) {
                        minOpacity = .4;
                    } else if (sliderPosition < .24) {
                        minOpacity = .8;
                    } else {
                        minOpacity = 1;
                    }

                    if (sliderPosition > .86) {
                        maxOpacity = 0;
                    } else if (sliderPosition > .80) {
                        maxOpacity = .4;
                    } else if (sliderPosition > .74) {
                        maxOpacity = .8;
                    } else {
                        maxOpacity = 1;
                    }

                    $('.minValue', groupSlider).css('opacity', minOpacity);
                    $('.minValue', groupSlider).css('display', 'block');

                    $('.maxValue', groupSlider).css('opacity', maxOpacity);
                    $('.maxValue', groupSlider).css('display', 'block');
                    

                    $('.sliderValue', groupSlider).html(options[ui.value].shortName);

                    $('.price span', groupSlider).html(currency(options[ui.value].price));

                    $('.groupSelectedI', groupSlider).val(ui.value);
                    $('.groupSelectedId', groupSlider).val(options[ui.value].extensionId);

                    selectedConfiguratorOptions[groupId] = options[ui.value];

                    if (sliderInitialized) {
                        clearTimeout(changeTimer);
                        changeTimer = setTimeout(function() {
                            updateConfiguratorPrices();
                        }, 50);
                    }
                },
                slide: function(event, ui) {

                    if (typeof(slideCallback) == 'function') {
                        slideCallback(options, ui.value, currentSliderValues[groupId], groupSlider);
                    }

                    var minOpacity = 1;
                    var maxOpacity = 1;

                    var sliderPosition = ui.value / options.length;

                    if (sliderPosition < .08) {
                        minOpacity = 0;
                    } else if (sliderPosition < .16) {
                        minOpacity = .4;
                    } else if (sliderPosition < .24) {
                        minOpacity = .8;
                    } else {
                        minOpacity = 1;
                    }

                    if (sliderPosition > .86) {
                        maxOpacity = 0;
                    } else if (sliderPosition > .80) {
                        maxOpacity = .4;
                    } else if (sliderPosition > .74) {
                        maxOpacity = .8;
                    } else {
                        maxOpacity = 1;
                    }

                    $('.minValue', groupSlider).css('opacity', minOpacity);
                    $('.minValue', groupSlider).css('display', 'block');

                    $('.maxValue', groupSlider).css('opacity', maxOpacity);
                    $('.maxValue', groupSlider).css('display', 'block');
                    
                    $('.sliderValue', groupSlider).html(options[ui.value].shortName);
                    $('.price span', groupSlider).html(currency(options[ui.value].price));

                    $('.groupSelectedI', groupSlider).val(ui.value);
                    $('.groupSelectedId', groupSlider).val(options[ui.value].extensionId);

                    selectedConfiguratorOptions[groupId] = options[ui.value];

                    updateConfiguratorPrices();

                    clearTimeout(changeTimer);
                    changeTimer = setTimeout(function() {
                        updateConfiguratorPrices();
                    }, 50);
                },
                start: function(event, ui) {
                    startValue = ui.value
                    $('body').addClass('sliding');
                },
                stop: function(event, ui) {
                    startValue = null;
                    $('body').removeClass('sliding');
                }
            });
            
            var sliderValue = 0;
            if (typeof(currentSliderValues[groupId]) != 'undefined') {
                sliderValue = currentSliderValues[groupId];
            }

            $('.groupConfiguratorSlider', groupSlider).slider('value', sliderValue);
        });

        $('.minValue').click(function() {
            $('.groupConfiguratorSlider', $(this).parent()).slider('value', 0);
        });
        $('.maxValue').click(function() {
            $('.groupConfiguratorSlider', $(this).parent()).slider('value', $('.groupConfiguratorSlider', $(this).parent()).slider('option', 'max'));
        });


        updateConfiguratorPrices();
        sliderInitialized = true;
    }
}


function checkDomains(domains, callbacks) {

    $.each(domains, function(i, obj) {

        if (!obj.checkable) {
            return;
        }

        if (typeof(callbacks.before) == 'function') {
            callbacks.before(i, obj);
        }

        $.get('/whois/' + obj.name + '/' + obj.tld + '/', function(data) {
            if (data.result == 1 && typeof(callbacks.free) == 'function') {
                callbacks.free(i, obj);
            } else if (typeof(callbacks.taken) == 'function') {
                callbacks.taken(i, obj);
            } 
        }, 'json');
    });
}

function updateSelectValue(obj) {
    var selectedOption = $('option:selected', obj);

    $('span', $(obj).parent()).remove();

    var span = $('<span>' + selectedOption.text() + '<span></span></span>');
    $(obj).before(span);
}

function slider(navigationHolder, holder, pause, duration, autoSlide, refreshCufon, counter) {
    var sliding = false;

    var width = $('> *', holder(navigationHolder)).first().width();
    holder(navigation).width(width + 'px');

    var currentIndex = 0;
    var items = $('> *', holder(navigationHolder)).clone();
    $('> *:not(:first-child)', holder(navigationHolder)).remove();

    var navigationUl = $('<ul />');
    for (i = items.length; i >= 1; i--) {
        navigationUl.append('<li>' + (counter ? i : '') + '</li>')
    }

    navigationHolder.prepend(navigationUl);

    var navigation = $('> ul li', navigationHolder);
    $(navigation[navigation.length - 1]).addClass('active');

    navigation.click(function() {
        if (!sliding && !$(this).hasClass('active')) {
            slide(navigation.index($(this)));

            navigation.removeClass('active');
            $(this).addClass('active');
        }
    });


    function slide(index, direction, callback, flipped) {

        if (typeof(flipped) == 'undefined' || !flipped) {
            index = navigation.length - index - 1;
        }

        if (index == currentIndex || sliding) {
            return false;
        }

        if (typeof(direction) == 'undefined') {
            direction = index > currentIndex;
        }

        var oldItem = $('> *', holder(navigation));
        var newItem = $(items[index]).clone();

        var offset = 0;
        if (direction) {
            holder(navigationHolder).css({width: width * 2 + 'px', marginLeft: 0}).append(newItem);
            offset = width;
        } else {
            holder(navigationHolder).css({width: width * 2 + 'px', marginLeft: '-' + width + 'px'}).prepend(newItem);
        }

        if (refreshCufon) {
            Cufon.refresh();
        }

        sliding = true;
        holder(navigationHolder).stop(true, true).animate({marginLeft: '-' + offset + 'px'}, {
            duration: duration,
            complete: function() {
                sliding = false;

                if (sliderTimer != null) {
                    sliderTimer.restart();
                }

                holder(navigationHolder).css({width: width + 'px', marginLeft: 0}).html(newItem);

                currentIndex = index;

                if (typeof(callback) == 'function') {
                    callback();
                }
            }
        });

        return true;
    }

    var sliderTimer = null;

    if (autoSlide > 0 && navigation.parent().length > 0) {
        sliderTimer = new Timer(function() {
            var newIndex = currentIndex + 1;
            if (newIndex > navigation.length - 1) {
                newIndex = 0;
            }

            navigation.removeClass('active');
            $(navigation[navigation.length - newIndex - 1]).addClass('active');

            slide(newIndex, true, null, true);

        }, autoSlide);
        pause(holder(navigation)).mouseover(function() {
            sliderTimer.pause();
        });
        pause(holder(navigation)).mouseout(function() {
            sliderTimer.resume();
        });
    }
}

function Timer(callback, delay) {
    var timerId, start, remaining = delay;

    this.pause = function() {
        window.clearTimeout(timerId);
        remaining -= new Date() - start;
    };

    this.resume = function() {
        start = new Date();
        timerId = window.setTimeout(callback, remaining);
    };

    this.restart = function() {
        this.pause();
        remaining = delay;
        this.resume();
    }

    this.resume();
}

function runElementMonitoring(parent) {
    for (var i = 0; i < elementMonitoring.length; i++) {
        for (var n = 0; n < elementMonitoring[i].elements.length; n++) {

            var elements;
            if (typeof(parent) != 'undefined') {
                elements = $(elementMonitoring[i].elements[n], parent);
            } else {
                elements = $(elementMonitoring[i].elements[n]);
            }

            elements.each(function(elementI, obj) {
                elementMonitoring[i].callback(obj);
            });
        }
    }
}

var tooltipHtml = function(content) {
    var html = '<div>' +
        '<div class="left"></div>' +
        '<div class="content">' +
            content +
        '</div>' +
        '<div class="right"></div>' +
        '<div class="arrow"></div>' +
    '</div>';

    return html;
};
var multilineTooltipHtml = function(content) {
    var html = '<div>' +
        '<div class="top"></div>' +
        '<div class="arrow"></div>' +
        '<div class="content">' +
            content +
        '</div>' +
        '<div class="bottom"></div>' +
    '</div>';

    return html;
};

function bindTooltips() {
    
    $('div.tooltip, a.tooltip').hover(
        function() {
            var div;

            if ($('> div', this).length > 0) {
                div = $('> div', this);
                div.stop(true, false);
            } else {
                div = $(tooltipHtml($(this).attr('content')));
                $(this).append(div);
                div.css('opacity', 0);
            }

            div.css('margin-left', (Math.round(-1 * div.outerWidth() / 2) + 11) + 'px');
            div.css('display', 'block');

            div.parent().addClass('open');

            div.animate({opacity: 1}, 300);
        },
        function() {
            var div = $('> div', this);
            div.stop(true, false).fadeOut(300, function() {
                div.parent().removeClass('open');
                div.remove();
            });
        }
    );

    $('div.multilineTooltip').hover(
        function() {
            var div;

            if ($('> div', this).length > 0) {
                div = $('> div', this);
                div.stop(true, false);
            } else {
                div = $(multilineTooltipHtml($(this).attr('content')));
                $(this).append(div);
                div.css('opacity', 0);
            }

            div.css('margin-top', (Math.round(-1 * div.outerHeight() / 2) + 9) + 'px');
            div.css('display', 'block');

            div.parent().addClass('open');

            div.animate({opacity: 1}, 300);
        },
        function() {
            var div = $('> div', this);
            div.stop(true, false).fadeOut(300, function() {

                div.parent().removeClass('open');
                div.remove();
            });
        }
    );

    $('div.multilineTooltip > div, div.tooltip > div').live('hover', function() {
        $(this).parent().mouseout();
    });
}

function dialogSwf(file, size) {

    var width = 600;
    var height = 400;

    if (typeof(size) != 'undefined') {
        width = size[0];
        height = size[1];
    }

    var flashHtml = $.flash.create({
		swf: file,
		height: height,
		width: width
	});

    var options = {
        content: flashHtml,
		height: height,
		width: width + 40,
        className: 'swf'
    };
    showDialog(options);
}

function youtubeDialog(code, size) {
    var width = 480;
    var height = 360;

    if (typeof(size) != 'undefined') {
        width = size[0];
        height = size[1];
    }

    var html = '<iframe width="' + width + '" height="' + height + '" src="http://www.youtube.com/embed/' + code + '?rel=0" frameborder="0" allowfullscreen></iframe>';

    var options = {
        content: html,
		height: height,
		width: width + 40,
        className: 'swf'
    };
    showDialog(options);
}

(function ($) {
    $.isJSON = function (json) {
        json = json.replace(/\\["\\\/bfnrtu]/g, '@');
        json = json.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']');
        json = json.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
        return (/^[\],:{}\s]*$/.test(json))
    }

    $.fn.isJSON = function () {
        var json = this;
        if (jQuery(json).is(":input")) {
            json = jQuery(json).val();
            json = new String(json);
            return jQuery.isJSON(json)
        } else {
            throw new SyntaxError("$(object).isJSON only accepts fields!");
        }
    }
    String.prototype.isJSON = function () {
        var y = this;
        return jQuery.isJSON(y);
    }


})(jQuery);

function currency(amount, negative) {

    if (typeof(negative) == 'undefined') {
        negative = true;
    }

    amount = Number(amount);

    amount = amount.toFixed(2);

    amount = amount.toString();
    amount = amount.replace(' ', '');

    if (amount.substr(0, 1) == '-' && negative) {
        amount = amount.substr(1, amount.length);
    }

    amount = amount.replace(/\./, ',');


    var addMin = false;
    if (amount.substr(0, 1) == '-') {
        addMin = true;
        amount = amount.substr(1);
    }

    var splitted = amount.split(',');
    if (splitted[0].length > 3) {
        var newAmount = '';

        for (var i = 1; i <= Math.floor(splitted[0].length / 3); i++) {
            newAmount += '.' + splitted[0].substr(splitted[0].length - i * 3, 3);
        }

        newAmount = splitted[0].substr(0, splitted[0].length % 3) + newAmount;

        amount = newAmount + ',' + splitted[1];
    }

    if (addMin) {
        amount = '-' + amount;
    }

    amount = '&euro; ' + amount;

    return amount;
}

(function($) {
	$.fn.ellipsis = function(enableUpdating, callback){
		var s = document.documentElement.style;
		if (!('textOverflow' in s || 'OTextOverflow' in s)) {
			return this.each(function(){
				var el = $(this);
				if(el.css("overflow") == "hidden"){
					var originalText = el.html();
					var w = el.width();

					var t = $(this.cloneNode(true)).hide().css({
                        'position': 'absolute',
                        'width': 'auto',
                        'overflow': 'visible',
                        'max-width': 'inherit'
                    });
					el.after(t);

					var text = originalText;
					while(text.length > 0 && t.width() > el.width()){
						text = text.substr(0, text.length - 1);
						t.html(text + "...");
					}
					el.html(t.html());

					t.remove();

                    if (typeof(callback) != 'undefined') {
                        callback(el);
                    }

					if(enableUpdating == true){
						var oldW = el.width();
						setInterval(function(){
							if(el.width() != oldW){
								oldW = el.width();
								el.html(originalText);
								el.ellipsis();
							}
						}, 200);
					}
				}
			});
		}
	};
})(jQuery);

function openLivechat() {
    window.open('http://livehelp.hosted.nl/visitor/index.php?/HostedNL/LiveChat/Chat/Request/_sessionID=/_promptType=chat/_proactive=0/_filterDepartmentID=11/_randomNumber=9caxzttvmbzajvdepk0fbwwxhd9kjyhi/_fullName=/_email=/','Hosted','resizable=yes,height=575,width=750');
    return false;
}

function setDisabled(obj, disabled, handleImage) {
    if (typeof(disabled) == 'undefined') {
        disabled = true;
    }
    if (typeof(handleImage) == 'undefined') {
        handleImage = false;
    }

    if (disabled) {
        $(obj).addClass('disabled');
        if (handleImage) {
            $('img', obj).css('opacity', .3);
        }
    } else {
        $(obj).removeClass('disabled');
        if (handleImage) {
            $('img', obj).css('opacity', 1);
        }
    }
}

function htmlEncode(value){
    return $('<div/>').text(value).html();
}

function htmlDecode(value){
    return $('<div/>').html(value).text();
}

function addItemToCart(data) {

    var currentCount = $("div.cart > div > div.container > ul.cartItems > li").length + $("div.cart > div > div.container > ul.cartItems > li > ul > li").length;

	if($("div.cart > div > div.container > ul.cartItems").length == 0) {
		$("div.cart > div > div.container > p").remove();
		$("div.cart > div > div.container").append("<ul class='cartItems'></ul>");
		$("div.cart > div > div.container").append("<p class='action'>" +
				"<a href='/bestelling-afronden/' class='defaultButton small'><span class='l'></span><span><img src='/img/icons/cart_go.png' alt='Winkelwagen' />Naar winkelwagen</span><span class='r'></span></a>" +
				"<a href='/cart/emptyCart/1/' class='defaultButton empty confirmClick small'><span class='l'></span><span><img src='/img/icons/cart_delete.png' alt='Winkelwagen legen' />Legen</span><span class='r'></span></a>" +
		"</p>");
		
		$("div.cart > a > span").addClass('hasProducts').append('<span class="cartAmount">(1)</span>');
	} else {
		$("div.cart > a > span > span.cartAmount").html('(' + (currentCount+1) + ')');
	}
	
	var cssClass = '';
	if(!$("div.cart > div > div.container > ul.cartItems > li").last().hasClass("odd")) {
		cssClass = ' class="odd"';
	}
	
	var newCartItem = $("<li "+cssClass+"><span class='amount'>"+data.item.CartItem.amount+"</span>" +
				"<span class='name'>"+data.item.CartItem.productName+"</span>" +
				"<span class='price'>"+currency(data.item.CartItem.amount*data.item.CartItem.price)+"</span>" +
			"</li>");
	
	$("div.cart > div > div.container > ul.cartItems").append(newCartItem);
}

function showOrderDialog(link,amount) {
	link = $(link);
	
	if(link.parents("table").hasClass("compare")) {
		var trI = link.parents("td").index()-1;
	} else {
		var trI = link.parents("tr").index();		
	}

    var product;
    
    var tableId = link.parents("table").attr("id");
   
    if (link.parents('tbody').hasClass('more')) {
    	product = productCheckMore[tableId][trI]
    } else {
    	product = productCheck[tableId][trI]
    }

    var options = {
        url: '/pages/orderProduct/' + product.productId + '/' + amount,
        ajaxSubmit: true,
        callback: function(data, dialog) {
            if ($('div.contentContainer div.content form input:not([type="hidden"])', dialog).length == 0) {
                $('div.contentContainer div.content form', dialog).submit();
            }
        },
        ajaxFormCallback: function(data, setContent) {
        	
            if (typeof(data) == 'object' && typeof(data.newKey) != 'undefined' && data.newKey >= 0) {
            	
            	addItemToCart(data);
            	
                var orderedDomainHtml = '<h2>Toegevoegd aan winkelwagen</h2>' +
                                        '<p>'+product.name+' is toegevoegd aan uw winkelwagen.</p>' +
                                        '<p class="buttons">' +
                                            '<button class="defaultButton closeDialog" type="button"><span class="l"></span><span>Verder winkelen</span><span class="r"></span></button> ' +
                                            '<a href="/bestelling-afronden/" class="defaultButton"><span class="l"></span><span>Naar winkelwagen</span><span class="r"></span></a>' +
                                        '</p>';

                link.replaceWith('<span class="ordered">Besteld</span>');
                
                //lets add the HTML to the card
                setContent(orderedDomainHtml);
            }
        }
    };
    showDialog(options);
    
    return false;
}

function filterArray(array) {

    var newArray = [],
        i = 0;

    for (key in array) {
        if (typeof(array[key]) != 'undefined') {
            newArray[i++] = array[key];
        }
    }

    return newArray;
}
function initSingleSliders() {

    $(".barslider").each(function(i, obj) {

        var sliderName = $(obj).attr('id');
        var options = sliderOptions[sliderName];

        if (typeof(options) == 'undefined') {
            return true;
        }

        if (typeof(sliderCallbacks[sliderName]) != 'undefined') {
            sliderCallbacks[sliderName](options[0], $(obj));
        }

        $(obj).slider({
            min: 0,
            max: options.length - 1,
            step: 1,
            change: function(event, ui) {

                var minOpacity = 1;
                var maxOpacity = 1;

                var sliderPosition = ui.value / options.length;

                if (sliderPosition < .08) {
                    minOpacity = 0;
                } else if (sliderPosition < .16) {
                    minOpacity = .4;
                } else if (sliderPosition < .24) {
                    minOpacity = .8;
                } else {
                    minOpacity = 1;
                }

                if (sliderPosition > .86) {
                    maxOpacity = 0;
                } else if (sliderPosition > .80) {
                    maxOpacity = .4;
                } else if (sliderPosition > .74) {
                    maxOpacity = .8;
                } else {
                    maxOpacity = 1;
                }

                $('.minValue', $(obj).parent()).css('opacity', minOpacity);
                $('.minValue', $(obj).parent()).css('display', 'block');

                $('.maxValue', $(obj).parent()).css('opacity', maxOpacity);
                $('.maxValue', $(obj).parent()).css('display', 'block');
            },
            slide: function(event, ui) {

                var minOpacity = 1;
                var maxOpacity = 1;

                var sliderPosition = ui.value / options.length;

                if (sliderPosition < .08) {
                    minOpacity = 0;
                } else if (sliderPosition < .16) {
                    minOpacity = .4;
                } else if (sliderPosition < .24) {
                    minOpacity = .8;
                } else {
                    minOpacity = 1;
                }

                if (sliderPosition > .86) {
                    maxOpacity = 0;
                } else if (sliderPosition > .80) {
                    maxOpacity = .4;
                } else if (sliderPosition > .74) {
                    maxOpacity = .8;
                } else {
                    maxOpacity = 1;
                }

                $('.minValue', $(obj).parent()).css('opacity', minOpacity);
                $('.minValue', $(obj).parent()).css('display', 'block');

                $('.maxValue', $(obj).parent()).css('opacity', maxOpacity);
                $('.maxValue', $(obj).parent()).css('display', 'block');

                $('#credit').val(options[ui.value]);

                if (typeof(sliderCallbacks[sliderName]) != 'undefined') {
                    sliderCallbacks[sliderName](options[ui.value], $(obj));
                }
            },
            start: function() {
                $('body').addClass('sliding');
            },
            stop: function() {
                $('body').removeClass('sliding');
            }
        });

        return true;
    });
}


function openLiveHelp() {
    window.open('http://livehelp.hosted.nl/visitor/index.php?/HostedNL/LiveChat/Chat/Request/_sessionID=/_promptType=chat/_proactive=0/_filterDepartmentID=11/_randomNumber=9caxzttvmbzajvdepk0fbwwxhd9kjyhi/_fullName=/_email=/', 'livechatwin', 'toolbar=0,location=0,directories=0,status=1,menubar=0,scrollbars=0,resizable=1,width=600,height=680');
    return false;
}
