
var timeout = "";
var source = 'web';

function urldecode (str) {

    var hash_map = {}, ret = str.toString(), unicodeStr='', hexEscStr='';

    var replacer = function (search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };

    // The hash_map is identical to the one in urlencode.
    hash_map["'"]   = '%27';
    hash_map['(']   = '%28';
    hash_map[')']   = '%29';
    hash_map['*']   = '%2A';
    hash_map['~']   = '%7E';
    hash_map['!']   = '%21';
    hash_map['%20'] = '+';
    hash_map['\u00DC'] = '%DC';
    hash_map['\u00FC'] = '%FC';
    hash_map['\u00C4'] = '%D4';
    hash_map['\u00E4'] = '%E4';
    hash_map['\u00D6'] = '%D6';
    hash_map['\u00F6'] = '%F6';
    hash_map['\u00DF'] = '%DF';
    hash_map['\u20AC'] = '%80';
    hash_map['\u0081'] = '%81';
    hash_map['\u201A'] = '%82';
    hash_map['\u0192'] = '%83';
    hash_map['\u201E'] = '%84';
    hash_map['\u2026'] = '%85';
    hash_map['\u2020'] = '%86';
    hash_map['\u2021'] = '%87';
    hash_map['\u02C6'] = '%88';
    hash_map['\u2030'] = '%89';
    hash_map['\u0160'] = '%8A';
    hash_map['\u2039'] = '%8B';
    hash_map['\u0152'] = '%8C';
    hash_map['\u008D'] = '%8D';
    hash_map['\u017D'] = '%8E';
    hash_map['\u008F'] = '%8F';
    hash_map['\u0090'] = '%90';
    hash_map['\u2018'] = '%91';
    hash_map['\u2019'] = '%92';
    hash_map['\u201C'] = '%93';
    hash_map['\u201D'] = '%94';
    hash_map['\u2022'] = '%95';
    hash_map['\u2013'] = '%96';
    hash_map['\u2014'] = '%97';
    hash_map['\u02DC'] = '%98';
    hash_map['\u2122'] = '%99';
    hash_map['\u0161'] = '%9A';
    hash_map['\u203A'] = '%9B';
    hash_map['\u0153'] = '%9C';
    hash_map['\u009D'] = '%9D';
    hash_map['\u017E'] = '%9E';
    hash_map['\u0178'] = '%9F';
    hash_map['\u00C6'] = '%C3%86';
    hash_map['\u00D8'] = '%C3%98';
    hash_map['\u00C5'] = '%C3%85';
 
    for (unicodeStr in hash_map) {
        hexEscStr = hash_map[unicodeStr]; // Switch order when decoding
        ret = replacer(hexEscStr, unicodeStr, ret); // Custom replace. No regexing
    }
    
    // End with decodeURIComponent, which most resembles PHP's encoding functions
    ret = decodeURIComponent(ret);
 
    return ret;
}

function initialize()
{
    document.text.text.focus(); 
    fill_language(); 
//    google.language.getBranding("branding");
    get_results(false);
}

function reset_timer()
{
    if (timeout != "") {
        clearTimeout(timeout);
    }
    timeout = setTimeout('get_results(false)', 1000); 
}

function is_punct(char)
{
    if (char == ' ' || char == ';' || char == ',') return(true);
    return(false);
}

function loadpage(page_request, containerid)
{
    if (page_request.readyState == 4 && (page_request.status == 200 || window.location.href.indexOf("http")==-1))
    {
        containerid.innerHTML = page_request.responseText;
    }
}

function open_url(url, containerid)
{
    var page_request = false;

    if (typeof XMLHttpRequest == "undefined") // if IE
    {
        try {
            page_request = new ActiveXObject("Msxml2.XMLHTTP.6.0");
        } 
        catch (e){
            try {
                page_request = new ActiveXObject("Msxml2.XMLHTTP.3.0");
            } 
            catch (e){
                try {
                    page_request = new ActiveXObject("Msxml2.XMLHTTP");
                } 
                catch (e){
                    try{
                        page_request = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    catch (e){
                        return false;
                    }
                }
            }
        }
    }
    else { // if Mozilla, Safari etc
        page_request = new XMLHttpRequest();
    }

    page_request.onreadystatechange = function() { loadpage(page_request, containerid); }

    page_request.open('GET', url, true);
    page_request.send(null);
}

function find_param(url, param)
{
    param += "=";
//    URL = parent.self.location.href;
    var p = url.indexOf(param);
    if (p == -1)
    {
        return "";
    } else
    {
        var temp = url.substring(p + param.length);
        pe = temp.indexOf("&");
        if (pe == -1) pe = temp.length;
        res = temp.substring(0, pe);
    }
    return (res);
}

function set_param(URL, param, value)
{
    param += "=";
    var p = URL.indexOf(param);
    if (p == -1)
    {
        URL += "&";
        URL += param;
        URL += String(value);
        return URL;
    } else
    {
        p += param.length;
        var pre = URL.substring(0, p);
        var post = URL.substring(p);
        var pe = post.indexOf("&");
        if (pe == -1) post = "";
        else post = post.substring(pe);
        return (pre + value + post);
    }
}

function get_results(url)
{
    url = set_param(url, 'q', document.query.q.value);

    document.getElementById(url.indexOf("related") == -1 ? "frame_results" : "frame_related_flat" ).src = url;
    source = find_param(url, 'src');

    document.query.src.value = source;

    open_url("title_results.php" + url.substring(url.indexOf('?')), document.getElementById("title_results"));
}

function get_results_child(url)
{
    parent.document.getElementById(url.indexOf("related") == -1 ? "frame_results" : "frame_related" ).src = url;
    q = find_param(url, 'q');

    parent.document.query.q.value = q;
}

function update_url(url)
{
    url = set_param(url, 'src', parent.source);

    parent.window.location.href = url;
}
