var moduleCount = 0;
var pageSize = 10;
var maxPageCount = 15;
var cultureUI = '';
var enableFullTextSearch = false;

function pageLoad() {    
    /*
    var searchString = $get('searchString').value;    
    var y0 = searchString.split('Y');
    if (y0.length == 2) {
        var y = y0[1].split('.');
        if (y.length == 2) {
            $get('y1').value = y[0];
            $get('y2').value = y[1];
        }
    }
    */
    Search();
}

function SubmitClicked() {
    Sys.UI.DomElement.setVisible($get('searchOutputWrapper'), false);
    
    //paging zurücksezen
    $get('SearchOutputMediaLibraryPaging').innerHTML = '';
    ASPCode.net.CookieManager.deleteCookie('SearchPageSearchOutputMediaLibrary');

    //$get('searchString').value = 'Y' + $get('y1').value + '.' + $get('y2').value;

    $get('searchString', $get('searchOutputForm')).value = 'Y' + $get('searchStringY').value;

    //alert($get('searchString', $get('searchOutputForm')).value);
    
    Search();
}

function SearchModule(module_id, project_id, xml_id, culture, searchString, searchWith, parentElement) {
    Sys.UI.DomElement.setVisible($get('searchOutputWrapper'), true);

    if (searchString == 'Y###.###' || searchString == '')
        return;
    cultureUI = culture;
    var moduleAjaxPath = '/Projects/Default/Modules/public/redCMS_SearchAJAXResponse/ASPX/redCMS_SearchAJAXResponse.aspx?enableFullTextSearch=' + enableFullTextSearch + '&searchWith=' + searchWith + '&culture=' + culture + '&searchInModule=' + module_id + '&xmlid=' + xml_id + '&projectId=' + project_id;

    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();
}

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');
            if (hits.length > 0) {
                Array.forEach(hits, AppendHit, parentElement);
            }
        }

        SetPaging(parentElement);

        if (moduleCount == 0) {
            Sys.UI.DomElement.setVisible($get('searchOutputProgress'), false);
            if ($get('SearchOutputMediaLibrary').childNodes.length == 0) {
                $get('SearchOutputMediaLibraryPaging').innerHTML = redCMS_SearchAJAXUILanguages['NotFound'];
            }

            var 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 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 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;
    var isFolder = FindReturnValue(hit, 'mod_media.isFolder');
    if (moduleStrongName == 'redCMS_MediaLibrary3' && isFolder == 'True') {
        return;
    }
    if (moduleStrongName != 'redCMS_MediaLibrary3') {
        var itemId = FindReturnValue(hit, 'itemId');
        if (itemId != null) {
            pageURL += '?itemId=' + itemId;
        }
        else {
            pageURL += '?hits=' + hitId;
        }
    } else {
        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);
    
    if (moduleStrongName == 'redCMS_MediaLibrary3') {
        /*
        var docType = CreateElement('div', null, 'dokumententyp', null);
        if (cultureUI == 'de-DE') {
            docType.appendChild(document.createTextNode(FindReturnValue(hit, 'Dokumententyp')));
        } else {
            docType.appendChild(document.createTextNode(FindReturnValue(hit, 'Type of document')));
        }
        liElement.appendChild(docType);
        */        
        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);
    }
    //var nameElement = CreateElement('a', null, 'hitName', attibutes);
    //nameElement.appendChild(document.createTextNode(hitName));
    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 sprache = FindReturnValue(hit, 'Sprache');
        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]));
        liElement.appendChild(document.createElement('br'));
        var flagge = CreateElement('img', null, null, attibutes);
        liElement.appendChild(flagge);

        var attibutes = [];
        Array.add(attibutes, new Array('href', pageURL));
        Array.add(attibutes, new Array('target', 'MediaLibrary3'));

        var nameElement = CreateElement('a', null, 'hitName', attibutes);        
        nameElement.appendChild(document.createTextNode(redCMS_SearchAJAXUILanguages[sprache]));
        liElement.appendChild(nameElement);
    }
    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;
    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);
}

