/* AJAX Search - Start */
addEvent(window,'load',ajaxSearchInit);
var searchReq = null;

function getXmlHttpRequestObject() {
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    } else if(window.ActiveXObject) {
        return new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        alert("Die Suche kann mit Ihrem Browser nicht verwendet werden!");
    }
}

function ajaxSearchInit()
{
    var quickSearchForm = document.getElementById('quicksearch');
    if ( quickSearchForm )
        new FormInputExample(
                quickSearchForm.elements['quicksrcstr'],
                (CONSOLEO_LANGUAGE_ID && CONSOLEO_LANGUAGE_ID != 1 ) ? 'Search' : 'Suchbegriff' );
    document.getElementById("quicksrcstr").onkeyup = wait;
    searchReq = getXmlHttpRequestObject();
}

function wait()
{
    if (escape(document.getElementById('quicksrcstr').value.length) >= 2)
    {
        setTimeout("getSearchResults()",1000);
        document.onkeypress = changeField;
    }
    else
    {
        document.getElementById('ajax_results').style.display = 'none'; 
    }
}

function changeField (evt) 
{
    if (document.getElementById("quicksrcstr").value != "") 
    {
        if (!evt) 
            evt = window.event;
        
        
        // pressed "ESC"
        if (evt.keyCode == "27") 
        {
            document.getElementById("ajax_results").style.display = "none";
            document.getElementById("quicksrcstr").value = "";
        }
    }
}

function getSearchResults()
{
    var ss = document.getElementById('ajax_results');
    ss.style.display = 'block';
    ss.innerHTML = "<img src=\"" + CONSOLEO_RELPATH + "images/ajax_loading.gif\" " +
        "alt=\"Suche l&auml;uft...\" title=\"Suche l&auml;ft...\" />" +
        "<ul><li class=\"status\"><p class=\"right\">.........</p></li></ul>";
    if (searchReq.readyState == 4 || searchReq.readyState == 0) {       
        var str = escape(document.getElementById('quicksrcstr').value); 
        searchReq.open("GET", CONSOLEO_RELPATH + '?modexec=mod_search&search=' + encodeURIComponent(str) + '&l='+CONSOLEO_LANGUAGE_ID, true);
        searchReq.onreadystatechange = handleSearchSuggest; 
        searchReq.send(null);
    }
}

function handleSearchSuggest() {
    if (searchReq.readyState == 4) {
        var ss = document.getElementById('ajax_results');
        var str = searchReq.responseText.split("\n");
        if (str)
        {
            ss.style.display = 'block';
            ss.innerHTML = str;
        }
        else
        {
            ss.innerHTML = '';
            ss.style.display = 'none';
        }
    }
}


/**
 * FormInputExample()
 * 
 * Fill formfield with example string if no uservalue is given.
 * 
 * @param formField - input field
 * @param demoString - Demo string to show in field if it's empty
 * @param demoCSSClass - CSSClass of formField if empty, default id 'empty'
 */
function FormInputExample( formField, demoString, demoCSSClass )
{
    this.formField = formField;
    this.demoString = demoString;
    this.userChanged = false;
    if (!demoCSSClass ) this.demoCSSClass = 'empty';
    else this.demoCSSClass = demoCSSClass;
    
    if ( formField.value == '' )
        this.setDemoString();
    else
        this.userChanged = true;
    this.formField.formInputExample = this;
    addEvent(this.formField, 'focus', function() { this.formInputExample.removeDemoString(); } );
    addEvent(this.formField, 'blur', function() { this.formInputExample.setDemoString(); } );
    addEvent(this.formField, 'change', function() { 
        this.formInputExample.userChanged = true; 
        if ( this.value == '' )
        {
            this.formInputExample.userChanged = false;
            this.setDemoString();
        }
    } );
    addEvent(this.formField, 'keyup', function(evt) { this.formInputExample.userChanged = true; } );
    var current = this.formField.parentNode;
    while ( current )
    {
        if ( current.tagName.toLowerCase() == 'form' )
        {
            if (current.formInputExample) break;
            current.formInputExample = this;
            addEvent(current,'submit', function() { this.formInputExample.onFormSubmit(); });
            break;
        }
        current = current.parentNode;
    }
}

FormInputExample.prototype.onFormSubmit = function()
{
    var current = this.formField.parentNode;
    while ( current )
    {
        if ( current.tagName.toLowerCase() == 'form' )
        {
            var inputs = current.getElementsByTagName('input');
            for ( var x=0; x<inputs.length; x++ )
            {
                if (inputs[x].formInputExample && !inputs[x].formInputExample.userChanged)
                    inputs[x].formInputExample.removeDemoString();
            }
            break;
        }
        current = current.parentNode;
    }
}

FormInputExample.prototype.removeDemoString = function()
{
    var classes = this.formField.className.split(' ');
    var nc = new Array();
    for ( var x=0; x<classes.length; x++ ) {
        if ( classes[x] == this.demoCSSClass ) continue;
        nc.push(classes[x]);
    }
    this.formField.className = nc.join(' ');
    if ( this.formField.value != this.demoString ) return;
    this.formField.value='';
}

FormInputExample.prototype.setDemoString = function()
{
    if (this.userChanged) return;
    this.formField.className += ' '+this.demoCSSClass;
    this.formField.value=this.demoString;
}
