var moduleCount = 0;
var pageSize = 10;
var maxPageCount = 18;
var cultureUI = '';

function pageLoad() {
    Search();
}

function SubmitClicked() {
    Sys.UI.DomElement.setVisible($get('searchOutputWrapper'), false);

    $get('filterLanguage').setAttribute('disabled', 'disabled');
    
    //paging zurücksezen
    $get('SearchOutputPaging').innerHTML = '';
    $get('SearchOutputMediaLibraryPaging').innerHTML = '';

    ASPCode.net.CookieManager.deleteCookie('SearchPageSearchOutput');
    ASPCode.net.CookieManager.deleteCookie('SearchPageSearchOutputMediaLibrary');

    var redCMS_MediaLibrary3Hits = $get('SearchDataSet');
    if (redCMS_MediaLibrary3Hits) {
        $get('searchOutputWrapper').removeChild(redCMS_MediaLibrary3Hits);
    }

    Search();
}

function FilterLanguage(sprache) {
    var hits = redCMS_MediaLibrary3xml.getElementsByTagName('mod_search_hits');
    var parentElement = $get('SearchOutputMediaLibrary');

    $get('SearchOutputMediaLibraryPaging').innerHTML = '';
    $get('SearchOutputMediaLibrary').innerHTML = '';

    ASPCode.net.CookieManager.deleteCookie('SearchPageSearchOutputMediaLibrary');

    Array.forEach(hits, AppendHit, parentElement);

    SetPaging(parentElement);
    if ($get('SearchOutputMediaLibrary').childNodes.length == 0) {
        $get('SearchOutputMediaLibraryPaging').innerHTML = redCMS_SearchAJAXUILanguages['NotFound'];
    }
}

function SearchModule(module_name, project_id, xml_id, culture, searchString, searchWith, parentElement, enableStatistics) {
    Sys.UI.DomElement.setVisible($get('searchOutputWrapper'), true);

    if (searchString == '')
        return;
    cultureUI = culture;
    var moduleAjaxPath = '/Projects/Default/Modules/public/redCMS_SearchAJAXResponse/ASPX/redCMS_SearchAJAXResponse.aspx?searchWith=' + searchWith + '&culture=' + culture + '&searchInModule=' + module_name + '&xmlid=' + xml_id + '&projectId=' + project_id + '&enableStatistics=' + enableStatistics;

    var wRequest = new Sys.Net.WebRequest();
    wRequest.set_url(moduleAjaxPath);
    wRequest.set_body('searchString=' + searchString);
    wRequest.set_httpVerb("POST");
    wRequest.add_completed(OnWebRequestCompleted);
    wRequest.get_headers()["parentElement"] = parentElement;
    wRequest.invoke();
}

var redCMS_MediaLibrary3xml;

function OnWebRequestCompleted(executor, eventArgs) {
    if (executor.get_responseAvailable()) {
        moduleCount--;
        if (executor.get_statusCode() == 200) {
            var parentElement = $get(executor.get_webRequest().get_headers()["parentElement"]);
            var xml = executor.get_xml();
            var hits = xml.getElementsByTagName('mod_search_hits');

            //cloneNode()

            if (hits.length > 0) {
                var moduleStrongName = hits[0].getElementsByTagName('moduleStrongName')[0].firstChild.nodeValue;
                if (moduleStrongName == 'redCMS_MediaLibrary3') {
                    $get('filterLanguage').removeAttribute('disabled');
                    redCMS_MediaLibrary3xml = xml;
                }
                Array.forEach(hits, AppendHit, parentElement);
            }
        }

        SetPaging(parentElement);

        if (moduleCount == 0) {
            Sys.UI.DomElement.setVisible($get('searchOutputProgress'), false);
            if ($get('SearchOutput').childNodes.length == 0) {
                $get('SearchOutputPaging').innerHTML = redCMS_SearchAJAXUILanguages['NotFound'];
            }
            if ($get('SearchOutputMediaLibrary').childNodes.length == 0) {
                $get('SearchOutputMediaLibraryPaging').innerHTML = redCMS_SearchAJAXUILanguages['NotFound'];
            }

            var pageIndex = ReadPageCookie('SearchOutput');
            if (pageIndex != null) {
                SearchOutputShowPage(pageIndex, 'SearchOutput');
            }
            pageIndex = ReadPageCookie('SearchOutputMediaLibrary');
            if (pageIndex != null) {
                SearchOutputShowPage(pageIndex, 'SearchOutputMediaLibrary');
            }
        }
    }
}

function SetPaging(parentElement) {
    if (parentElement && parentElement.childNodes.length > 0) {        
        parentElement.previousSibling.innerHTML = redCMS_SearchAJAXUILanguages['Page'];
        for (var i = 0; i < parentElement.childNodes.length; i++) {
            var ul = parentElement.childNodes[i];
            if (ul.childNodes.length > 0) {
                var attibutes = [];
                Array.add(attibutes, new Array('href', 'javascript:SearchOutputShowPage(' + (i) + ',\'' + parentElement.id + '\');'));
                var className = null;
                if (i == 0) {
                    className = 'activeIndex';
                }
                var pageIndex = CreateElement('a', null, className, attibutes);
                pageIndex.appendChild(document.createTextNode((i + 1)));
                parentElement.previousSibling.appendChild(pageIndex);
            }
        }
    }
}

function SearchOutputShowPage(pageIndex, parentElementId) {
    var parentElement = $get(parentElementId);
    var pages = parentElement.childNodes;
    var pagingElement = parentElement.previousSibling.getElementsByTagName('a');

    var setActive = false;
    for (var i = 0; i < pages.length; i++) {
        var page = pages[i];
        if (i == pageIndex) {
            Sys.UI.DomElement.removeCssClass(page, 'inactive');
            Sys.UI.DomElement.addCssClass(pagingElement[i], 'activeIndex');
            setActive = true;
        }
        else {
            Sys.UI.DomElement.addCssClass(page, 'inactive');
            Sys.UI.DomElement.removeCssClass(pagingElement[i], 'activeIndex');
        }
    }
    if (!setActive && pages.length != 0) {
        Sys.UI.DomElement.removeCssClass(pages[0], 'inactive');
        Sys.UI.DomElement.addCssClass(pagingElement[0], 'activeIndex');
    }
    pages = null;
    SetPageCookie(parentElementId, pageIndex);
}

function SetPageCookie(parentElementId, pageIndex) {
    var cookieName = 'SearchPage' + parentElementId;
    ASPCode.net.CookieManager.setCookie(cookieName, pageIndex.toString());
    //alert(ASPCode.net.CookieManager.getCookie(cookieName));
}

function ReadPageCookie(parentElementId) {
    var cookieName = 'SearchPage' + parentElementId;
    var pageIndex = ASPCode.net.CookieManager.getCookie(cookieName);
    if (pageIndex == null || isNaN(pageIndex))
        return null;
    else
        return new Number(pageIndex);
}

function AppendHit(hit, index, array) {
    var ulElement = this.lastChild;
    if (ulElement == null) {

        ulElement = CreateElement('ul', 'SearchOutputPage1', 'page', null);
        this.appendChild(ulElement);
    }
    else
        if (ulElement.childNodes.length == pageSize) {
        if (this.childNodes.length < maxPageCount) {
            ulElement = CreateElement('ul', 'SearchOutputPage' + (this.childNodes.length + 1), 'page inactive', null);
            this.appendChild(ulElement);
        }
        else {
            return;
        }
    }

    var moduleStrongName = hit.getElementsByTagName('moduleStrongName')[0].firstChild.nodeValue;
    
    var sprache = null;
    if (moduleStrongName == 'redCMS_MediaLibrary3') {
        var isFolder = FindReturnValue(hit, 'mod_media.isFolder');
        if (moduleStrongName == 'redCMS_MediaLibrary3' && isFolder == 'True') {
            return;
        }
        
        filter = $get('filterLanguage').value;
        sprache = FindReturnValue(hit, 'Sprache');
        if (!sprache) sprache = '~~';
        if (sprache.startsWith(';#')) {
            sprache = sprache.substr(2);
        }
        if (sprache.endsWith(';#')) {
            sprache = sprache.substr(0, (sprache.length - 2));
        }
        if ($get('filterLanguage').value != '*') {
            var filter = $get('filterLanguage').value;
            if (sprache != '~~') {
                if (sprache != filter) return;
            }
        }
    }
    
    var hitId = hit.getElementsByTagName('hitId')[0].firstChild.nodeValue;
    var hitName = hit.getElementsByTagName('name')[0].firstChild.nodeValue;
    var hitComment = hit.getElementsByTagName('comment')[0].firstChild;
    var elementId = 'hit' + moduleStrongName + ':' + hitId;

    var page = hit.parentNode;
    var label = page.getElementsByTagName('title')[0].firstChild.nodeValue;
    var pageURL = '/cms/' + page.getElementsByTagName('url')[0].firstChild.nodeValue;
    var text = page.getElementsByTagName('text')[0].firstChild;    
    if (moduleStrongName != 'redCMS_MediaLibrary3' && moduleStrongName != 'redCMS_Main') {
        var itemId = FindReturnValue(hit, 'itemId');
        if (itemId != null) {
            pageURL += '?itemId=' + itemId;
        }
        else {
            pageURL += '?hits=' + hitId;
        }
    } else if (moduleStrongName == 'redCMS_MediaLibrary3') {
        pageURL = '/projects/default/modules/redCMS_MediaLibraryDownload/aspx/getmedia.aspx?mediaId=' + hitId + '&mode=direct';
        if (cultureUI.indexOf('de-', 0) == 0 && hitComment != null) {
            hitName = hitComment.nodeValue;
        } else if (cultureUI.indexOf('de-', 0) == 0 && hitComment == null) {
            hitName = FindReturnValue(hit, 'Titel');
        }
        else {
            hitName = FindReturnValue(hit, 'Titel englisch');
        }
        hitComment = null;
    }

    var liElement = CreateElement('li', elementId, '', null);
    var attibutes = [];
    
    Array.add(attibutes, new Array('href', pageURL));
    if (moduleStrongName == 'redCMS_MediaLibrary3') {        
        var docTypeText = null;
        if (cultureUI == 'de-DE') {
            docTypeText = FindReturnValue(hit, 'Dokumententyp');
            if (docTypeText != null) {
                var docType = CreateElement('div', null, 'dokumententyp', null);
                docType.appendChild(document.createTextNode(docTypeText));
                liElement.appendChild(docType);
            }
        } else {
            docTypeText = FindReturnValue(hit, 'Type of document');
            if (docTypeText != null) {
                var docType = CreateElement('div', null, 'dokumententyp', null);
                docType.appendChild(document.createTextNode(docTypeText));
                liElement.appendChild(docType);
            }
        }
        Array.add(attibutes, new Array('target', 'MediaLibrary3'));

        var imageAttributes = [];
        var fileName = hit.getElementsByTagName('name')[0].firstChild.nodeValue;
        var fileImage = fileName.substring((fileName.lastIndexOf('.') + 1));
        Array.add(imageAttributes, new Array('src', '/Projects/Default/Images/default/icons/' + fileImage + '.gif'));
        Array.add(imageAttributes, new Array('valign', 'middle'));
        Array.add(imageAttributes, new Array('alt', fileName));
        Array.add(imageAttributes, new Array('OnError', 'this.src=\'/Projects/Default/Images/default/icons/unknown.gif\''));
        var imageFile = CreateElement('img', null, null, imageAttributes);
        liElement.appendChild(imageFile);
    }
    if (sprache == null) {
        var nameElement = CreateElement('a', null, 'hitName', attibutes);
        nameElement.appendChild(document.createTextNode(hitName));
        liElement.appendChild(nameElement);
    } else {
        liElement.appendChild(document.createTextNode(hitName));
    }
    if (text && moduleStrongName == 'redCMS_Main') {
        var textElement = CreateElement('div', null, 'pageText', null);
        var textFormat = FormatPageText(text.nodeValue);
        textElement.appendChild(document.createTextNode(textFormat));
        liElement.appendChild(textElement);
    } else if (moduleStrongName == 'redCMS_MediaLibrary3') {
        var attibutes = [];
        Array.add(attibutes, new Array('src', '/projects/default/images/default/flaggen/' + GetFlaggenName(sprache) + '.gif'));
        Array.add(attibutes, new Array('alt', redCMS_SearchAJAXUILanguages[sprache]));
        Array.add(attibutes, new Array('OnError', 'this.src=\'/Projects/Default/Images/default/icons/unknown.gif\''));
        liElement.appendChild(document.createElement('br'));
        var flagge = CreateElement('img', null, null, attibutes);
        liElement.appendChild(flagge);
        var spracheTemp = redCMS_SearchAJAXUILanguages[sprache];
        if (spracheTemp == null) spracheTemp = redCMS_SearchAJAXUILanguages['~~'];
        if (spracheTemp) {
            var spracheTempAttibutes = [];
            Array.add(spracheTempAttibutes, new Array('href', pageURL));
            Array.add(spracheTempAttibutes, new Array('target', 'MediaLibrary3'));
            var flaggeLink = CreateElement('a', null, null, spracheTempAttibutes);
            flaggeLink.appendChild(document.createTextNode(spracheTemp));
            liElement.appendChild(flaggeLink);
        }
    }
    if (hitComment) {
        var commentElement = CreateElement('div', null, 'hitComment', null);
        commentElement.appendChild(document.createTextNode(hitComment.nodeValue));
        liElement.appendChild(commentElement);
    }
    liElement.appendChild(document.createElement('hr'));
    ulElement.appendChild(liElement);
}

function FindReturnValue(hit, valueName) {
    var wert = null;
    var returnValues = hit.getElementsByTagName('mod_search_hits_return_values');
    for (var i = 0; i < returnValues.length; i++) {
        var returnValue = returnValues[i];
        var returnValueName = returnValue.getElementsByTagName('name')[0].firstChild.nodeValue;
        if (returnValueName == valueName) {
            wert = returnValue.getElementsByTagName('wert')[0].firstChild.nodeValue;
            break;
        }
    }

    return wert;
}

function CreateElement(tagName, elementId, elementCssClass, elementAttibutes) {
    var element = document.createElement(tagName);
    if (elementId != null) { element.id = elementId; }
    if (elementCssClass != null) { element.className = elementCssClass; }
    if (elementAttibutes != null) {
        for (var i = 0; i < elementAttibutes.length; i++) {
            var attr = document.createAttribute(elementAttibutes[i][0]);
            attr.nodeValue = elementAttibutes[i][1];
            element.attributes.setNamedItem(attr);
        }
    }
    return element;
}

function GetFlaggenName(sprache) {
    sprache = sprache.toLowerCase();
    sprache = sprache.replace(/ö/g, 'o');
    sprache = sprache.replace(/ü/g, 'u');
    sprache = sprache.replace(/ä/g, 'a');
    return (sprache);
}

function FormatPageText(text) {
    text = text.replace(/&amp;/g, '&');
    text = text.replace(/&nbsp;/g, ' ');
    return (text);
}