$(document).ready(function(){
	initializeMyWiki();
	initializeSwitches();
	var iphoneContainers = $('#iphoneImage');
	if (iphoneContainers.length > 0) {
	    setTimeout('nextScreenshot()', 6000);
	}
	$(".fancybox").fancybox({
	    'overlayOpacity' : 0.7,
	    'overlayColor' : '#012738'
	});
	$(".fancyboxNoPadding").fancybox({
	    'padding' : 0,
	    'overlayOpacity' : 0.7,
	    'overlayColor' : '#012738'
	});
	$('.striped li').each(function(i,element){
	    if (i%2) {
	        $(element).addClass('odd');
	    } else {
	        $(element).addClass('even');
	    }
	})
});

function zekerweten(url, text) {
    var zeker = confirm(text);
    if (zeker) {
        window.location = url;
    }
}

function saveAlignment( paragraph_id, val ) {
    $.getJSON("/index.php", { action: "AJAX_saveAlignment", ajax: true, paragraph_id : paragraph_id, layoutStyle: val });
}

function initializeSwitches() {
    $('.radioSwitch').each(function(i,e) {
        $(this).bind('click',function(){
            var inputId = $(this).attr('rel');
            var curValue = $('#'+inputId).val();
            if (curValue == '1') { 
                $('#'+inputId).val('0');
                $(this).removeClass('switchStateOn');
                $(this).addClass('switchStateOff');
            } else {
                $('#'+inputId).val('1');
                $(this).removeClass('switchStateOff');
                $(this).addClass('switchStateOn');
            }
            return false;
        });
    });
}

function nextScreenshot() {
    var ssWidth = ($('#iphoneImage ul li').length-1) * 189;
    var curPos = $('#iphoneImage ul').css('margin-left');
    var newPos = parseInt(curPos.substring(-2)) - 189;
    if (newPos < -ssWidth) {
        $('#iphoneImage ul').animate({"margin-left": "0px"}, 3000 );
    } else {
        $('#iphoneImage ul').animate({"margin-left": newPos+"px"}, 1000 );
    }
    
    setTimeout('nextScreenshot()', 6000);
}

function chooseLink(title) {
    $('.myWikiEditorContent').each(function(i,editorContent){
        currentScrollPosition = $(editorContent).scrollTop();
        debug('Scrollposition editor: '+currentScrollPosition);
        var selection = $(editorContent).getSelection();
        debug("Selection start: " + selection.start + "\nEnd: " + selection.end + "\nLength: " + selection.length + "\nText: \"" + selection.text + "\"\nAction: bold");
        if (selection.length > 0) {
            $(editorContent).replaceSelection('[['+title+']'+selection.text+']');
            $(editorContent).setCaretPos(selection.end+5);
        } else {
            insertAtCaret('editorId','[['+title+']]');
        }
        $.fancybox.close();
    });
}

function findArticles(chooseLink, showFavorites) {
    $('#searchResults').html('');
    var keyword = $('#keyword').val();
    if (keyword.length > 2 || showFavorites == true) {
        $.getJSON("/index.php", { action: "AJAX_getSearchResults", ajax: true, keyword: keyword, favorites: showFavorites },function(data){
            if (data.length == 0) {
                $('#searchResults').append( '<a class="item createArticle" href="?action=createNewArticle&title='+ucFirst(keyword)+'"><div>Create article: '+keyword+'</div>Click here to create this article</a>' );
            }
            debug('Found '+data.length+' results for searchquery "'+keyword+'"');
            for (i=0;i<data.length;i++) {
                var result = data[i];
                if (chooseLink) {
                    $('#searchResults').append( '<a class="item'+result.favoriteClass+'" href="#" onclick="chooseLink(\''+result.article_title+'\'); return false;"><div>'+result.article_title+' &raquo; '+result.paragraph_title+'</div>Pick this article</a>' );                       
                } else {
                    if (result.paragraph_title != null && result.paragraph_title != '') {
                        $('#searchResults').append( '<a class="item'+result.favoriteClass+'" href="?action=viewArticle&article_id='+result.article_id+'#paragraph_'+result.paragraph_id+'"><div>'+result.article_title+' &raquo; '+result.paragraph_title+'</div>'+result.paragraph_sample+'</a>' );
                    } else {
                        $('#searchResults').append( '<a class="item'+result.favoriteClass+'" href="?action=viewArticle&article_id='+result.article_id+'#paragraph_'+result.paragraph_id+'"><div>'+result.article_title+'</div>'+result.paragraph_sample+'</a>' );
                    }
                }
            }
        });
    } else {
        $('#searchResults').append( '<a class="item">Search string not long enough...</a>' );
    }
}

function toggleFavoriteSearch() {
    $('#keyword').val('');
    $('#favoriteSearch').addClass('favoriteSearchOn');
    findArticles(false, true);
}

function ucFirst( string ) {
    return string.substr(0,1).toUpperCase() + string.substr(1,string.length);
}

function initializeMyWiki() {
    // get all elements to convert
	var editors = $('.myWikiEditor');
	var viewers = $('.myWikiContainer');
	debug(editors.length + ' editor(s) found to convert.');
	debug(viewers.length + ' viewer(s) found to convert.');
	
	// loop trough each element and replace with an editor
	$(editors).each(function(i,el){
		wikiEditor(el);
	});
	$(viewers).each(function(i,el){
		wikiViewer(el);
	});
	
	if ($('#keyword').length > 0) { 
	    initSearchField(false);
	}
	
}

function initSearchField(linkPicker) {
    // set all searchfields
	$('#keyword').bind('keydown', function() {
	    $(this).addClass('active');
	});
	$('#keyword').bind('keyup', function() {
	    findArticles(linkPicker, false);
	    $('#favoriteSearch').removeClass('favoriteSearchOn');
	});
	$('#keyword').bind('blur', function() {
	    if($(this).val()==''){ 
	        $(this).removeClass('active'); 
	    }
	});
    // reset active state when the field is already filled with a value (browser cache)
    if($('#keyword').val()!=''){ 
        $('#keyword').addClass('active');
        findArticles(linkPicker, false);
    }
    debug('Initialize searchfield...');    
}

function wikiViewer (element) {
    
    var viewerContainer;
    var editOverlay;
    var articleId;
    
    convertViewer(element);
    
    function convertViewer(element) {
        $('.myWikiEditButton').bind('click', function() {
    	    activateEditOptions(this); return false;    
    	});
    	$('#favoriteSwitch').bind('click', function(){
    	    var h1 = $(this).parent();
    	    if ($(h1).hasClass('favoriteActive')) {
    	        var favoriteState = 'false';
    	        $(h1).removeClass('favoriteActive');
    	    } else {
    	        var favoriteState = 'true';
    	        $(h1).addClass('favoriteActive');
    	    }
    	    articleId = $('.myWikiEditButton').attr('id').substring(12);
    	    $.getJSON("/index.php", { action: "AJAX_toggleFavorite", ajax: true, article_id : articleId, favoriteState : favoriteState });
    	});
    }
        
    function activateEditOptions(button) {
        $('.myWikiEditOverlay').remove();
        $(button).removeClass('myWikiEditButton').addClass('myWikiEditButtonActive');
        $(button).unbind('click');
        $(button).bind('click', function() {
            removeEditOptions(button);
            return false;
        });
        var articleId = $(button).attr('id').substring(12);
        
        $('.myWikiEditablePara').each(function(i,para) {
            var paragraph_id = parseInt($(para).attr('id').substring(5));
            editOverlay = $('<div class="myWikiEditOverlay"><dl><dd class="header"></dd><dd class="content"><dd class="footer"></dd></dl></div>');
            var addButton = $('<a href="?action=addNewPara&article_id='+articleId+'&position='+(i+1)+'"><img src="/files/img/button_add_paragraph.png" alt="add" /></a>');
            var editButton = $('<a href="?action=editPara&article_id='+articleId+'&paragraph_id='+paragraph_id+'"><img src="/files/img/button_pencil_edit.png" alt="edit" /></a>');
            var deleteButton = $('<a href="#" onclick="zekerweten(\'?action=viewArticle&article_id='+articleId+'&deletePara='+paragraph_id+'\',\'Are you sure to delete this paragraph?\'); return false;"><img src="/files/img/button_trash_delete.png" alt="delete" /></a>');
            $(editOverlay).find('.content').append(addButton).append('<hr />').append(deleteButton).append(editButton);
            $(para).prepend(editOverlay);    
        })
    }
    
    function removeEditOptions(button) {
        $(button).removeClass('myWikiEditButtonActive').addClass('myWikiEditButton');
        $('.myWikiEditOverlay').remove();
        $(button).unbind('click');
        $(button).bind('click', function() {
            activateEditOptions(button);
        });
    }
}

function wikiEditor (element) {
    
    var editorContainer;
    var editorContent;
    var editorToolbar;
    var editorId;
    var editorName;
    var editorWidth;
    var editorHeight;
    var editorValue;
    var paraId;
    
    convertEditor(element);
    
    function convertEditor(element) {
    	// calculating and setting up editor
    	editorId		= $(element).attr('id');
    	paraId          = $('#paraIdField').val();
    	editorName		= $(element).attr('name');
    	editorWidth		= $(element).width();
    	editorHeight    = $(element).height();
    	debug('Converting element with id: ' + editorId + ', width: ' + editorWidth + ', height: ' + editorHeight);
    	editorValue		= $(element).val();
    	editorContainer = $('<div class="myWikiEditorContainer"></div>');
    	$(editorContainer).css('width',editorWidth);
    	$(editorContainer).css('height',editorHeight);
    	editorContent   = $('<textarea name="' + editorName + '" id="editorId" class="myWikiEditorContent"></textarea>');
    	editorToolbar   = $('<div class="myWikiEditorToolbar"></div>');
    	$(editorContent).css('height',editorHeight-53);	
    	$(editorContent).css('width',editorWidth-20);	
    	$(editorContent).html(editorValue);
    	$(editorContent).select( function (el) { 
    		activateToolbarButtons(editorContainer, editorContent, editorToolbar);
        });
    
        $(editorContent).bind('click',function(){
            var selection = $(editorContent).getSelection();
            if (isNaN(parseInt(selection.length))) {
                deactivateToolbarButtons()
            }
        });
        $(editorContent).bind('keyup',function(){
            var selection = $(editorContent).getSelection();
            if (isNaN(parseInt(selection.length))) {
                deactivateToolbarButtons()
            }
        });
        
    	$(editorContainer).append(editorContent);
    	$(editorContainer).append(editorToolbar);
    	// creating and  adding buttons to editor toolbar
    	
    	// link (zonder selectie)
    	var linkButtonNoSelection = $('<a href="/?action=editLink&paragraph_id='+paraId+'" class="myWikiEditorToolbarButton buttonLink fancyboxNoPadding ajax noSelectionLinkButton"></a>');
    	$(editorToolbar).append(linkButtonNoSelection);
    	debug('Adding link (noSelection) button');
    	
    	// link (met selectie, oldskool opmaken)
    	var linkButtonSelection = $('<a href="#" class="myWikiEditorToolbarButton activeButton buttonLink withSelectionLinkButton" style="display: none;"></a>');
    	linkButtonSelection.bind('click', function() {
    		 convertString('link'); return false;
    	});
    	$(editorToolbar).append(linkButtonSelection);
    	debug('Adding link (withSelection) button');
    	
    	// bold
    	var boldButton = $('<a href="#" class="myWikiEditorToolbarButton inActiveButton buttonBold"></a>');
    	boldButton.bind('click', function() {
    		 convertString('bold'); return false;
    	});
    	$(editorToolbar).append(boldButton);
    	debug('Adding bold button');
    	
    	// italic
    	var italicButton = $('<a href="#" class="myWikiEditorToolbarButton inActiveButton buttonItalic"></a>');
    	italicButton.bind('click', function() {
    		 convertString('italic'); return false;
    	});
    	$(editorToolbar).append(italicButton);
    	debug('Adding italic button');
    	
    	// striketrough
    	var strikeButton = $('<a href="#" class="myWikiEditorToolbarButton inActiveButton buttonStrike"></a>');
    	strikeButton.bind('click', function() {
    		 convertString('striketrough'); return false;
    	});
    	$(editorToolbar).append(strikeButton);
    	debug('Adding striketrough button');
    	
    	// list
    	var listButton = $('<a href="#" class="myWikiEditorToolbarButton inActiveButton buttonList"></a>');
    	listButton.bind('click', function() {
    		 convertString('list'); return false;
    	});
    	$(editorToolbar).append(listButton);
    	debug('Adding list button');
    	
    	// clear markup
    	var clearButton = $('<a href="#" class="myWikiEditorToolbarButton inActiveButton buttonClear"></a>');
    	clearButton.bind('click', function() {
    		 convertString('clear'); return false;
    	});
    	$(editorToolbar).append(clearButton);
    	debug('Adding clear markup button');
    	
    	// image
    	var imageButton = $('<a href="/?action=editImage&paragraph_id='+paraId+'" class="myWikiEditorToolbarButton buttonCamera fancyboxNoPadding ajax"></a>');
    	$(editorToolbar).append(imageButton);
    	debug('Adding image button');
    	
    	// place editor after textarea and hiding textarea
    	$(element).after(editorContainer);
    	$(editorContainer).after('<div class="cleaner"></div>');
    	$(element).hide();
    }
    
    function activateToolbarButtons() {
    	debug('Activate toolbar buttons');
    	$('.noSelectionLinkButton').hide();
    	$('.withSelectionLinkButton').show();
    	$(editorToolbar).find('.myWikiEditorToolbarButton').removeClass('inActiveButton');
    }
    function deactivateToolbarButtons() {
    	debug('Deactivate toolbar buttons');
    	$('.withSelectionLinkButton').hide();
    	$('.noSelectionLinkButton').show();
    	$(editorToolbar).find('.myWikiEditorToolbarButton').not('.buttonLink').addClass('inActiveButton');
    }
    
    function convertString( type ) {
        currentScrollPosition = $(editorContent).scrollTop();
        debug('Scrollposition editor: '+currentScrollPosition);
        var selection = $(editorContent).getSelection();
        debug("Selection start: " + selection.start + "\nEnd: " + selection.end + "\nLength: " + selection.length + "\nText: \"" + selection.text + "\"\nAction: bold");
        switch ( type ) {
            case "clear":
                $.getJSON("/index.php", { action: "AJAX_clearMarkup", ajax: true, text : selection.text }, function(data){
                    $(editorContent).replaceSelection(data);
                    $(editorContent).setCaretPos(selection.end+5);
                });
                break;
            case "link":
                $(editorContent).replaceSelection('[['+selection.text+']]');
                $(editorContent).setCaretPos(selection.end+5);
                break;
            case "bold":
                $(editorContent).replaceSelection('=='+selection.text+'==');
                $(editorContent).setCaretPos(selection.end+5);
                break;
            case "italic":
                $(editorContent).replaceSelection('//'+selection.text+'//');
                $(editorContent).setCaretPos(selection.end+5);
                break;
            case "striketrough":
                $(editorContent).replaceSelection('--'+selection.text+'--');
                $(editorContent).setCaretPos(selection.end+5);
                break;
            case "list":
                var lines = selection.text.split("\n");
                var tempString = '';
                for(i=0;i<lines.length;i++) {
                    if (lines[i] != "") {
                        tempString = tempString + '**'+lines[i];
                        if (i<lines.length-1) {
                            tempString = tempString + '\n';
                        }
                    } else {
                        tempString = tempString + "\n";
                    }
                }
                $(editorContent).replaceSelection(tempString);
                $(editorContent).setCaretPos(selection.end+5);
                break;
        }
        
        deactivateToolbarButtons();	
        $(editorContent).scrollTop(currentScrollPosition);
    }
    
    function updatePreview() {
        // updates the preview field. Only used in sandbox.
    }    
}

/**
* Debug functions
**/
function debug(string) {
	var listElement = $('<li style="display: none;">');
	listElement.html(string.toString());
	var debugList = $('#debug #debugList').prepend(listElement);
	$(listElement).fadeIn();
}

function insertAtCaret(areaId,text) { var txtarea = document.getElementById(areaId); var scrollPos = txtarea.scrollTop; var strPos = 0; var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ? "ff" : (document.selection ? "ie" : false ) ); if (br == "ie") { txtarea.focus(); var range = document.selection.createRange(); range.moveStart ('character', -txtarea.value.length); strPos = range.text.length; } else if (br == "ff") strPos = txtarea.selectionStart; var front = (txtarea.value).substring(0,strPos); var back = (txtarea.value).substring(strPos,txtarea.value.length); txtarea.value=front+text+back; strPos = strPos + text.length; if (br == "ie") { txtarea.focus(); var range = document.selection.createRange(); range.moveStart ('character', -txtarea.value.length); range.moveStart ('character', strPos); range.moveEnd ('character', 0); range.select(); } else if (br == "ff") { txtarea.selectionStart = strPos; txtarea.selectionEnd = strPos; txtarea.focus(); } txtarea.scrollTop = scrollPos; } 
