//
//Description of different Search Engines and their SECookie key.
//
function f_setcookie (name, value, expires) {
        cookieDate = new Date();
        cookieDate.setTime(cookieDate.getTime()+(60*24*60*60*1000));
        if (expires == 'session')
        {
            // Session cookie.
            cookieDate = '';
            document.cookie = name + "=" + escape (value) + ";";
        }
        else
        {
            // Timed cookie.
            document.cookie = name + "=" + escape (value) + ((expires == null) ? ("; expires=" + cookieDate) : ("; expires=" + expires.toGMTString()));
        }
}
function f_getcookieval(offset) {
        var endstr = document.cookie.indexOf (";", offset);
        if (endstr == -1) endstr = document.cookie.length;
        return unescape(document.cookie.substring(offset, endstr));
}


function f_getcookie(name) {
        var arg = name + "=";
        var alen = arg.length;
        var clen = document.cookie.length;
        var i = 0;
        while (i < clen) {
                var j = i + alen;
                if (document.cookie.substring(i, j) == arg) return f_getcookieval (j);
                i = document.cookie.indexOf(" ", i) + 1;
                if (i == 0) break;
        }
        return null;
}

var curResult = "";
function selectSearch(key)
{
    var ifrm;
    for (i=0; i < curResult.length; i++)
    {
        // Find the key.
        c = curResult.charAt(i);
        ifrm = parent.result.searchResult.document.getElementById(c+'result');
        ifrm.width='0%';
        ifrm.height='0%';
    }
        
    ifrm = parent.result.searchResult.document.getElementById(key+'result');
    ifrm.width='100%';
    ifrm.height='97%';
    var sName = parent.document.getElementById("currSearch");
    sName.innerHTML =  'Search Result: ' + lookupInfo(key);
    return 0;
}

function searchDone(key)
{
    currButton = parent.result.searchBtn.document.getElementById(key+'button');
    currButton.style.display = "";
}


function msearch() 
{ 
    // The algorithm here is:
    // 1. Check which search engines have been requested.
    // 2. For each of them, call the corresponding formulate function, which
    // will return the correct URL for the search specific to it. The formulate
    // function will be <cookie_keyword>Search() (i.e. YSearchFormulate for
    // yahoo search). This will make life easier to add search engines.
    // 3. Create a JS tab for each of them, and load them in separate tabs.

    var SECookie = f_getcookie("SE");
    f_setcookie('CURRENT',SECookie,"session");
    //
    parent.result.document.write ('<iframe name=searchBtn width=100% height=8% frameborder=0></iframe>');
    parent.result.document.write ('<iframe name=searchResult width=100% height=92% frameborder=0></iframe>');
    parent.result.document.close();
    parent.result.searchResult.document.write(' <style> .hidden \{ display:none \} <\/style>');

    parent.result.searchBtn.document.write('<table border=1 rules=all cellspacing=0 cellpadding=0><tr><td>Click Here&gt;&gt;&gt;&nbsp;</td>');

    curResult = SECookie;
    for (i=0; i < SECookie.length; i++)
    {
        // Find the key.
        c = SECookie.charAt(i);
        // Create the search URL
        searchUrl = lookupURL(c,searchForm.elements['searchStr'].value);
        // Create search tabs.
        // Load the URL in search part.
        //
        // Use srchBtn window to select which search engine to display.
        // Use searchResult window to display the current result.
        //parent.result.searchBtn.document.write('<input type=submit onClick=Javascript:top.selectSearch("'+c+'")/>&lt;'+c+' Search&gt;</div>');
        //
        parent.result.searchBtn.document.write('<td><span id='+c+'button STYLE="cursor:crosshair; display:none; width:100%; background-color:#'+(10+i*20)+'FF'+(10+i*20)+';" onClick=Javascript:top.selectSearch("'+c+'") > &nbsp;'+lookupInfo(c)+' Search Result &nbsp; <\/span></td>');
        parent.result.searchResult.document.write('<iframe name='+c+'result id='+c+'result '+ ' width=0% height=0% border=0px src=' + searchUrl + ' onLoad=javascript:top.searchDone("'+c+'")></iframe>');
    } 
    parent.result.searchResult.document.close(); 
    parent.result.searchBtn.document.close();
    selectSearch(SECookie.charAt(0));
}

// Function to setup the page properties. This uses the SE cookie to set the
// check on boxes that were checked previously. Just to remember the
// preferences. If no cookie is set, it sets the SE cookie to the default value.

function setupPage()
{
    //
    //Get SE cookie.
    //If it is empty, set it to default value.
    //set the check boxes up accordingly.
    //

    var SECookie = f_getcookie("SE");
    if (SECookie == null)
    {
        f_setcookie("SE","Y");
        SECookie = "Y";
    }

    for (i=0; i < SECookie.length; i++)
    {
        c = SECookie.charAt(i);
        searchForm.elements[c].checked = true;
    }
}
// Handler function for each search engine checkbox. It gets the current status
// of the checkbox if it changes, and sets the cookie key accordingly.
function SESetup(box)
{
    var SECookie = f_getcookie("SE");
    if (box.checked == true)
    {
        if(SECookie.indexOf(box.name) < 0)
        {
            SECookie = SECookie +""+ box.name;
            f_setcookie("SE",SECookie);
        }
    }
    else
    {
        if(SECookie.indexOf(box.name) >= 0)
        {
            if(SECookie.length > 1)
            {
               preStr = SECookie.substr(0,SECookie.indexOf(box.name));
               postStr = SECookie.substr(SECookie.indexOf(box.name)+1,SECookie.length);
               SECookie = preStr + "" + postStr;
            }
            else
            {
                SECookie = "";
            }
            f_setcookie("SE",SECookie);
        }
    }
}

function goNext()
{
    /*
     * 1. Find current search windows.
     * 2. For each of them, find the location.
     * 3. Pass the location to the right handler.
     * 4. Load the URL the handler returns to the page.
     */
    Current = f_getcookie("CURRENT");
    if (Current == null)
    {
        return;
    }
    for(i=0; i< Current.length; i++)
    {
        key = Current.charAt(i);
        // Search for the window.
        currW = parent.result.searchResult.document.getElementById(key+'result');
        if(currW == null)
        {
            alert("Code:0001: Please let Indiangeek know!!");
            continue;
        }
        currUrl = currW.src;
        sUrl = lookupNext(key,currUrl);
        currW.src= sUrl;
    }
}

function goPrevious()
{
    /*
     * 1. Find current search windows.
     * 2. For each of them, find the location.
     * 3. Pass the location to the right handler.
     * 4. Load the URL the handler returns to the page.
     */
    Current = f_getcookie("CURRENT");
    if (Current == null)
    {
        return;
    }
    for(i=0; i< Current.length; i++)
    {
        key = Current.charAt(i);
        // Search for the window.
        currW = parent.result.searchResult.document.getElementById(key+'result');
        if(currW == null)
        {
            alert("Code:0001: Please let Indiangeek know!!");
            continue;
        }
        currUrl = currW.src;
        sUrl = lookupPrev(key,currUrl);
        currW.src= sUrl;
    }
}

function lookupURL(key,sString)
{
    var funcName = key+"Search";
    var func = this[funcName];
    var sUrl = func(escape(sString));
    return sUrl;
}

function lookupInfo(key)
{
    var funcName = key+"Info";
    var func = this[funcName];
    return func();
}

function lookupNext(key,sString)
{
    var funcName = key+"Next";
    var func = this[funcName];
    return func(sString);
}
function lookupPrev(key,sString)
{
    var funcName = key+"Previous";
    var func = this[funcName];
    return func(sString);
}

/////////////////////////////////////////////////////////////////////
// Independent Search Specific URL Creators.
/////////////////////////////////////////////////////////////////////
function YSearch(sString)
{
    return 'http:\/\/search.yahoo.com\/search\?p='+sString;
}

function YInfo()
{
    return "Yahoo!";
}

function YNext(sString)
{
    var srchIdx = sString.indexOf('http://search.yahoo.com/search?p=');
    var result_per_page = 10;
    if (srchIdx == -1)
    {
            alert('Code:0002: Please let Indiangeek know!!');
    }
    var substr=sString.substring(srchIdx+'http://search.yahoo.com/search?p='.length);
    var retStr = 'http://search.yahoo.com/search?p=';
    srchIdx = substr.indexOf('b=');
    if(srchIdx == -1)
    {
        retStr = retStr + substr + '&b=11';
    }
    else
    {
        var count = substr.substring(srchIdx+2);
        count = (eval(count) + result_per_page);
        var prefix = substr.substring(0,srchIdx);
        retStr = retStr + prefix + 'b=' + count;
    }
    return retStr;
}

function YPrevious(sString)
{
    var srchIdx = sString.indexOf('http://search.yahoo.com/search?p=');
    var result_per_page = 10;
    if (srchIdx == -1)
    {
            alert('Code:0003: Please let Indiangeek know!!');
    }
    var substr=sString.substring(srchIdx+'http://search.yahoo.com/search?p='.length);
    var retStr = 'http://search.yahoo.com/search?p=';
    srchIdx = substr.indexOf('b=');
    if(srchIdx == -1)
    {
        retStr = sString;
    }
    else
    {
        var count = substr.substring(srchIdx+2);
        count = (eval(count) - result_per_page);
        if (count < 0)
            count = 0;
        var prefix = substr.substring(0,srchIdx);
        retStr = retStr + prefix + 'b=' + count;
    }
    return retStr;
}

function GSearch(sString)
{
    return 'http:\/\/www.google.com\/search\?q='+sString;
}
function GInfo()
{
    return "Google";
}

function GNext(sString)
{
    var srchIdx = sString.indexOf('http://www.google.com/search?q=');
    var result_per_page = 10;
    if (srchIdx == -1)
    {
            alert('Code:0002: Please let Indiangeek know!!');
    }
    var substr=sString.substring(srchIdx+'http://www.google.com/search?q='.length);
    var retStr = 'http://www.google.com/search?q=';
    srchIdx = substr.indexOf('start=');
    if(srchIdx == -1)
    {
        retStr = retStr + substr + '&start=10';
    }
    else
    {
        var count = substr.substring(srchIdx+6);
        count = (eval(count) + result_per_page);
        var prefix = substr.substring(0,srchIdx);
        retStr = retStr + prefix + 'start=' + count;
    }
    return retStr;
}

function GPrevious(sString)
{
    var srchIdx = sString.indexOf('http://www.google.com/search?q=');
    var result_per_page = 10;
    if (srchIdx == -1)
    {
            alert('Code:0003: Please let Indiangeek know!!');
    }
    var substr=sString.substring(srchIdx+'http://www.google.com/search?q='.length);
    var retStr = 'http://www.google.com/search?q=';
    srchIdx = substr.indexOf('start=');
    if(srchIdx == -1)
    {
        retStr = sString;
    }
    else
    {
        var count = substr.substring(srchIdx+6);
        count = (eval(count) - result_per_page);
        var prefix = substr.substring(0,srchIdx);
        retStr = retStr + prefix + 'start=' + count;
    }
    return retStr;
}


function MSearch(sString)
{
    return 'http://search.msn.com/results.aspx?q='+sString;
}

function MInfo()
{
    return "Micro$oft";
}

function MNext(sString)
{
    var srchIdx = sString.indexOf('http://search.msn.com/results.aspx?q=');
    var result_per_page = 10;
    if (srchIdx == -1)
    {
            alert('Code:0002: Please let Indiangeek know!!');
    }
    var substr=sString.substring(srchIdx+'http://search.msn.com/results.aspx?q='.length);
    var retStr = 'http://search.msn.com/results.aspx?q=';
    srchIdx = substr.indexOf('first=');
    if(srchIdx == -1)
    {
        retStr = retStr + substr + '&first=11';
    }
    else
    {
        var count = substr.substring(srchIdx+6);
        count = (eval(count) + result_per_page);
        var prefix = substr.substring(0,srchIdx);
        retStr = retStr + prefix + 'first=' + count;
    }
    return retStr;
}

function MPrevious(sString)
{
    var srchIdx = sString.indexOf('http://search.msn.com/results.aspx?q=');
    var result_per_page = 10;
    if (srchIdx == -1)
    {
            alert('Code:0003: Please let Indiangeek know!!');
    }
    var substr=sString.substring(srchIdx+'http://search.msn.com/results.aspx?q='.length);
    var retStr = 'http://search.msn.com/results.aspx?q=';
    srchIdx = substr.indexOf('first=');
    if(srchIdx == -1)
    {
        retStr = sString;
    }
    else
    {
        var count = substr.substring(srchIdx+6);
        count = (eval(count) - result_per_page);
        var prefix = substr.substring(0,srchIdx);
        retStr = retStr + prefix + 'first=' + count;
    }
    return retStr;
}

function ASearch(sString)
{
    return 'http://a9.com/'+sString;
}
function AInfo()
{
    return 'Amazon(A9)';
}

function ANext(sString)
{
    var srchIdx = sString.indexOf('pw=');
    var retStr;
    if (srchIdx == -1)
    {
        retStr = sString + '?pw=2';
    }
    else
    {
        var count = sString.substring(srchIdx+3);
        count++;
        retStr = sString.substring(0,srchIdx+3)+count;
    }
    return retStr;
}

function APrevious(sString)
{
    var srchIdx = sString.indexOf('pw=');
    var retStr;
    if (srchIdx == -1)
    {
        retStr = sString + '?pw=2';
    }
    else
    {
        var count = sString.substring(srchIdx+3);
        count--;
        if (count < 1)
            count=1;
        retStr = sString.substring(0,srchIdx+3)+count;
    }
    return retStr;
}

