var PH_TITLE = '#TITLE#';
var PH_DESCRIPTION = '#DESCRIPTION#';
var PH_URL = '#URL#';
var PH_CLICKURL = '#CLICKURL#';

var PH_NAME = '#NAME#';

var ELEM_RESULT = 'result';
var ELEM_RELATED = 'related';

function getData(keyword) {
    var url = 'search.php';
    var pars = 'q=' + encodeURIComponent(keyword) +
               '&realref=' + encodeURIComponent(document.referrer);

    new Ajax.Request(url,
    {
        method: 'get',
        parameters: pars,
        onComplete: showData,
        onFailure: showError
    });

}

function submitForm(form) {
    var keyword = form["query"].value;
    getData(keyword);
    return false;
}

function showError(response) {

}

function showData(response) {
    var xml = response.responseXML;
    if (xml == null || xml == undefined) {
        return;
    }
    var recordList = xml.getElementsByTagName('record');
    if (recordList == null || recordList == undefined) {
        return;
    }
    updateResult(xml);
    updateRelated(xml);
}

function updateResult(xml) {
    var recordList = xml.getElementsByTagName('record');
    if (recordList.length == 0) {
        return;
    }
    var result = '';
    var count = recordList.length;
    for (var i = 0; i < count; i++) {
        var record = recordList[i];
        var template = templateResult;

        var title = getElemText(record.getElementsByTagName('title')[0]);
        var description = getElemText(record.getElementsByTagName('description')[0]);
        var url = getElemText(record.getElementsByTagName('url')[0]);
        var clickurl = getElemText(record.getElementsByTagName('clickurl')[0]);

        template = replaceAll(template, PH_TITLE, title);
        template = replaceAll(template, PH_DESCRIPTION, description);
        template = replaceAll(template, PH_URL, url);
        template = replaceAll(template, PH_CLICKURL, clickurl);

        result += template;
    }
    $(ELEM_RESULT).innerHTML = result;
}

function updateRelated(xml) {
    if (xml.getElementsByTagName('related').length == 0) {
        return;
    }
    var nameList = xml.getElementsByTagName('related')[0].getElementsByTagName('name');
    var result = '';
    var count = nameList.length;
    for (var i = 0; i < count; i++) {
        var name = getElemText(nameList[i]);
        var template = templateRelated;

        template = replaceAll(template, PH_NAME, name);

        result += template;
    }
    $(ELEM_RELATED).innerHTML = result;
}

function getElemText(node) {
    return node.text || node.textContent || (function(node){
        var _result = "";
        if (node == null) {
            return _result;
        }
        var childrens = node.childNodes;
        var i = 0;
        while (i < childrens.length) {
            var child = childrens.item(i);
            switch (child.nodeType) {
                case 1: // ELEMENT_NODE
                case 5: // ENTITY_REFERENCE_NODE
                    _result += arguments.callee(child);
                    break;
                case 3: // TEXT_NODE
                case 2: // ATTRIBUTE_NODE
                case 4: // CDATA_SECTION_NODE
                    _result += child.nodeValue;
                    break;
                case 6: // ENTITY_NODE
                case 7: // PROCESSING_INSTRUCTION_NODE
                case 8: // COMMENT_NODE
                case 9: // DOCUMENT_NODE
                case 10: // DOCUMENT_TYPE_NODE
                case 11: // DOCUMENT_FRAGMENT_NODE
                case 12: // NOTATION_NODE
                // skip
                break;
            }
            i++;
        }
        return _result;
    }(node));
}

function replaceAll(text, findString, newString) {
    while (text.indexOf(findString) != -1) {
        text = text.replace(findString, newString);
    }
    return text;
}

var templateResult =

'<tr>' +
'<td valign="top"><div align="left">' +
    '<table width="100%" border="0" cellspacing="0" cellpadding="8">' +
      '<tr>' +
        '<td valign="top"><div align="left">' +
            '<table width="100%" border="0" cellspacing="0" cellpadding="0">' +
              '<tr>' +
                '<td><A href="' + PH_CLICKURL + '" class="result_title">' + PH_TITLE + '</A></td>' +
              '</tr>' +
              '<tr>' +
                '<td><TABLE width="100%" border=0 cellPadding=0 cellSpacing=0>' +
                    '<TBODY>' +
                      '<TR>' +
                        '<TD class="resultxt">' + PH_DESCRIPTION + '<BR>' +
                          '<em><a href="' + PH_CLICKURL + '" class="greenlink">' + PH_URL + '</a></em></TD>' +
                      '</TR>' +
                    '</TBODY>' +
                  '</TABLE></td>' +
              '</tr>' +
            '</table>' +
          '</div></td>' +
      '</tr>' +
    '</table>' +
  '</div></td>' +
'</tr>';

var templateRelated = '<a href="#" onclick="getData(\'' + PH_NAME + '\')">' + PH_NAME + '</a>';

