function initAjaxBehaviour(container)
{
    includeScript("/scripts/jquery/ui/jquery.ui.dialog.js");
    includeScript("/scripts/jquery/ui/jquery.ui.draggable.js");

    initHistory();
    initAjaxUrl(container);
    initAjaxForm(container);
    initLightbox(container);
    //initTagging(container);
}

function initAjaxUrl(container)
{


    $('a.ajax', container).click(function () {
        var confirmText = $(this).attr('confirm');
        var noHistory   = $(this).attr('nohistory');
        var redirectUrl = $(this).attr('redirecturl');
        var replace     = $(this).hasClass('replace');
        var url = $(this).attr('href');

        if (confirmText) {
        	$('#content').append('<div id="dialogies">' + confirmText + '</div>');
			$('#dialogies').dialog({
				width: 350,
				buttons: {
					"Nee": function() {
						$(this).dialog("close");
					},
					"Ja": function() {
						ajax_load(url, redirectUrl, noHistory, replace);
						$(this).dialog("close");
					}
				}
			});
        } else {
            ajax_load(url, redirectUrl, noHistory, replace);
        }
        return false;
    });
}

function initAjaxForm(container)
{
    $('form.ajax', container).submit(function() {
        var formError = false;
        var redirectUrl = $(this).attr('redirecturl');

        $(this).find(":input").each(function(i, input){
            if($(input).attr('required')) {
                if(!$(input).val()) {
                    var title = $(input).attr('required');
                    notify("Verplicht veld: '" + title + "'");
                    formError = true;
                }
                if ($(input).attr('type') == "checkbox" && !$(input).attr('checked')) {
                    var title = $(input).attr('required');
                    notify("Verplicht veld: '" + title + "'");
                    formError = true;
                }
            }
        });

        // Als er verplicht velden ontbreken breek dan hier af...
        if (formError) return false;


        // Check of er bestanden worden meegestuurd
        // Als er bestanden meegestuurd worden gebruik dan ajaxSubmit
        // Er wordt dan een iframe aangemaakt
        if ($(this).find('input[type=file]').length > 0) {
            $(this).ajaxFormSubmit({
                data: {fileform: true},
                success: function(data) {
                    // stukje code om de response te kunnen parsen
                    data = data.replace('<textarea>','');
                    data = data.replace('</textarea>','');
                    data = data.replace('<TEXTAREA>','');
                    data = data.replace('</TEXTAREA>','');
                    data = data.replace(/&lt;/g,'<');
                    data = data.replace(/&gt;/g,'>');
					data = eval('('+data+')');
                    $.each(data, function(i,div){
                        if (i == 'notify') notify(div.message, div.type);
                        else $("#"+i).html(div);
                        init($("#"+i));
                    });
                    if (redirectUrl) {
                        ajax_load(redirectUrl);
                    }
                }
            });
        } else {
            $(this).ajaxFormSubmit({
                data: {ajaxload: true},
                success: function(data) {
	                    if (data[0] != '{') {
	                        $('body').html(data);
	                    } else {
	                        data = eval('('+data+')');
	                        $.each(data, function(i,div){
	                            if (i == 'notify') notify(div.message, div.type);
	                            else $("#"+i).html(div);
	                            init($("#"+i));
	                        });
	                        if (redirectUrl) {
	                            ajax_load(redirectUrl);
	                        }
	                    }
                    }
            });
        }
        return false;
    });
}

function initLightbox(container)
{
    $('a.lightbox', container).click(function (){

    	var url = $(this).attr("href");
    	var title = $(this).attr("title");

    	$('#lightbox').remove();
    	$('body').append('<div id="lightbox"></div>');
    	$('#lightbox').dialog({
            width: 638,
    		height: 450,
    		draggable: false,
    		resizable: false,
    		position: top,
    		modal: true,
    		title: title
    	});
        if (url.search(/\?/) > -1) {
        	url += '&lightbox=true';

        } else {
        	url += '?lightbox=true';
        }
        ajax_load(url, null, true);
        return false;
    });


    $('a.lightbox_big', container).click(function (){
    	var url = $(this).attr("href");
    	var title = $(this).attr("title");

    	$('#lightbox').remove();
    	$('body').append('<div id="lightbox"></div>');
    	$('#lightbox').dialog({
            width: 750,
    		height:600,
    		draggable: false,
    		resizable: false,
    		position: top,
    		modal: true,
    		title: title
    	});
        if (url.search(/\?/) > -1) {
        	url += '&lightbox=true';

        } else {
        	url += '?lightbox=true';
        }
        ajax_load(url, null, true);
        return false;
    });

	$('a.lightbox_video', container).click(function (){
    	var url = $(this).attr("href");
    	var title = $(this).attr("title");

    	$('#lightbox').remove();
    	$('body').append('<div id="lightbox"></div>');
    	$('#lightbox').dialog({
            width: 690,
    		height:535,
    		draggable: false,
    		resizable: false,
    		position: top,
    		modal: true,
    		title: title
    	});
        if (url.search(/\?/) > -1) {
        	url += '&lightbox=true';

        } else {
        	url += '?lightbox=true';
        }
        ajax_load(url, null, true);
        return false;
    });

		$('a.lightbox_invoice', container).click(function (){
	    	var url = $(this).attr("href");
	    	var title = $(this).attr("title");

	    	$('#lightbox').remove();
	    	$('body').append('<div id="lightbox"></div>');
	    	$('#lightbox').dialog({
	            width: 690,
	    		height:335,
	    		draggable: false,
	    		resizable: false,
	    		position: top,
	    		modal: true,
	    		title: title
	    	});
	        if (url.search(/\?/) > -1) {
	        	url += '&lightbox=true';

	        } else {
	        	url += '?lightbox=true';
	        }
	        ajax_load(url, null, true);
	        return false;
	    });

    $('form.lightbox').submit(function(event)
    {
    	event.preventDefault();
        $(this).find(":input").each(function(i, input){
            if($(input).attr('required')) {
                if(!$(input).val()) {
                    var title = $(input).attr('required');
                    notify("Verplicht veld: '" + title + "'");
                    formError = true;
                }
                if ($(input).attr('type') == "checkbox" && !$(input).attr('checked')) {
                    var title = $(input).attr('required');
                    notify("Verplicht veld: '" + title + "'");
                    formError = true;
                }
            }
        });


    	var url = $(this).attr("action");
        if (url.search(/\?/) > -1) {
        	$(this).attr("action", url + '&lightbox=true');

        } else {
        	$(this).attr("action", url + '?lightbox=true');
        }

    	var title = $(this).attr("title");

    	$('#lightbox').remove();
    	$('body').append('<div id="lightbox"></div>');
    	$('#lightbox').dialog({
            width: 638,
    		height: 400,
    		draggable: false,
    		resizable: false,
    		position: top,
    		modal: true,
    		title: title,
			buttons: {
				"Sluiten": function() {
					$(this).dialog("close");
				}
    		}
    	});
        $(this).ajaxFormSubmit({
        	dataType: 'json',
        	success: function(data) {
        		$.each(data, function(i, div) {
        			$('#'+i).html(div);
        			init($('#'+i));
        		});
        	}
        });
    });

    $('.ui-dialog-titlebar-close').click(function(){
    	$('#lightbox').dialog("close");
    });

    $('.closeDialog').click(function(){
    	$('#lightbox').dialog("close");
    });
}

function initTagging(container)
{
    $('input', container).each( function() {
        //if ($.isFunction($(this).autocomplete()) == false) {
        if (typeof($(this).autocomplete) != 'undefined') {
            var itemType = $(this).attr('itemtype');
            var itemId = $(this).attr('itemid');
            var autocompleteUrl = "/tags/autocomplete";
            var addUrl = "/tags/add?itemtype="+itemType+"&itemid="+itemId;
            var removeUrl =  "/tags/remove?itemtype="+itemType+"&itemid="+itemId;

            // if (url) $(this).autocomplete(url);
            if (itemType) {
                $(this).unbind();
                if ($(this).attr('autocompletematch')) {
                    $(this).autocomplete(autocompleteUrl, {
                        mustMatch :false
                    });
                } else {
                    $(this).autocomplete(autocompleteUrl);
                }
                $(this).result(
                	function(event, data, formatted) {
                		$(this).parents('form').append('<input type="hidden" value="1" name="autocompleted_' + $(this).attr('name') + ' />');
                		$(this).parents('form').append('<input type="hidden" value="1" name="autocompleted" />');
                		var url = document.location.href;

            			ajax_load(addUrl + '&tag=' + data, false, true);
            			removeUrl = removeUrl + '&tag=' + data;
                		$('#taglist').append('<a href="'+removeUrl+'" nohistory="true" class="ajax"><span class="tag">'+data+' <img src="/images/icons/delete.png"  align="absmiddle"/></span></a>');
                		$(this).val('');
                		initAjaxBehaviour();
                });
            }
        }
    });

    $('#addtag', container).click(function(event){
    	event.preventDefault();

        var itemType = $('#tag', container).attr('itemtype');
        var itemId = $('#tag', container).attr('itemid');
        var tag = $('#tag', container).val();
        var addUrl = "/tags/add?itemtype="+itemType+"&itemid="+itemId;
		ajax_load(addUrl + '&tag=' + tag, false, true);
    });
    $('#tags a.tag', container).each(function() {
    	var self = $(this);
    	self.bind('click', function(event) {
    		event.preventDefault();
    		$.get(self.attr('href'));
    		self.remove();
    	});
    });
}

/**
* Laadt een url via ajax
*/
function ajax_load(alink, redirectUrl, noHistory, replace, func, id) {
    // Werk de history bij.
    if (!noHistory) $.history.add(alink, alink);
    // Voeg een extra parameter toe om aan
    // te geven dat het een ajax_load is
    if (alink.search(/\?/) > -1) {
        alink += '&ajaxload=true';

    } else {
        alink += '?ajaxload=true';
    }

    $.get(alink, function(data) {
        // Als er geen JSON object terug is gekomen
        // ga dan niet een div proberen te vullen
        // maar gooi de HTML in de gehele pagina
        if (data[0] != '{') {
            $('body').html(data);
        } else {
            data = eval('('+data+')');
            $.each(data, function(i,div){
            	if (i == 'notify') notify(div.message, div.type);
                if (i == 'debug') Debug.write(div.message, div.name);
                else {
                	var container = $("#"+i);
                	if(replace) {
                		container.replaceWith(div);
                	}
                	else {
                		container.html(div);
                	}

                	init($("#"+i));
                }
            });
        }
        if (redirectUrl) {
            // Al er een redirectUrl is gegeven laadt die dan nu
            ajax_load(redirectUrl);
        }
        if(typeof(func) == 'function') {
            func(id);
        }
    });
    return true;
}

//History - AJAX calls
function initHistory() {
    // Start ajax history
    $.history.addListener(historyChange);
}

var historyChange = function(newLocation, historyData) {
   if (newLocation == "")  newLocation = "/";
    else if (oldLocation != newLocation) {
        ajax_load(newLocation);
    }
    oldLocation = newLocation;
}
var oldLocation;

