//******************************************************** For autocomplete ***************************************//

/*
Autocomplete for email Version 1.0
!IMPORTANT keypress event on the document returns false on pressing enter key

Requires getKeyCode function and g function which returns the element passed to it

g = function (id)	{
return ( document.getElementById ( id ) ) ;
} ;

function getKeyCode(e)// v1.0
{
return er = (window.event)? window.event.keyCode:(e)?e.which:null;
}

Developed by Kailash Kumar P. and Leslie Varghese P.
*/

/* ---------------------------- */
/* Globals 						*/
/* ---------------------------- */
var selPos = 0 , currInputObj, autoS, aIfr, eleHeight = 21, hideDelay = 200, validateFunc ;
var mySEs = new Array (
"yahoo.com",
"gmail.com",
"yahoo.co.in",
"yahoo.co.uk",
"rediffmail.com",
"hotmail.com",
"rediff.com",
"indiatimes.com",
"yahoomail.com",
"sify.com",
"yahoo.in",
"ymail.com",
"zapak.com",
"tcs.com",
"in.com",
"google.com",
"inbox.com",
"rocketmail.com",
"ril.com",
"wipro.com",
"vsnl.net",
"zapakmail.com",
"india.com",
"aol.in",
"vsnl.com",
"mail.com",
"sancharnet.in",
"aol.com",
"sbi.co.in",
"infosys.com",
"msn.com",
"dataone.in",
"live.com"
) ;

mySEs.sort() ;



/* -----------------------------------------------------------------------Position */
positionSuggest = function (ob) {
    var obj = ob ;
    var cL = cT = 0 ;
    do {
        cL += obj.offsetLeft;
        cT += obj.offsetTop;
    } while (obj = obj.offsetParent);

    if ( typeof(ob.offsetHeight) != "undefined")
    {
        aIfr.style.top = autoS.style.top = cT + ob.offsetHeight + "px";
        aIfr.style.left = autoS.style.left = cL + "px" ;
    }
};

hideS = function () { if ( typeof(autoS) != "undefined" ) aIfr.style.display=autoS.style.display="none"; };
hideSuggest = function () {	setTimeout(hideS, hideDelay) ; };

/* -----------------------------------------------------------------------SEARCH */
autosuggest = function (e) {
    currInputObj = (typeof(e.srcElement) != "undefined")? e.srcElement:this;
    positionSuggest( currInputObj );
    key = e.which;
    if(typeof(key) == "undefined") key = e.keyCode ;
    if (key == 38 || key == 40 || key == 13)
    {
        if (key==13)
        {
            if ( g('a'+ selPos) != null )
            selectData('a' + selPos) ;
            selPos = 0;
        }
        else if ( g('a' + selPos) != null )
        {
            g('a' + selPos).className = '';
            (key==38 && g('a'+(selPos-1)) != null)?selPos--:(key==40 && g('a'+(selPos+1)) != null)?selPos++:selPos = selPos ;
            g('a' + selPos).className = 'selected' ;
        }
    }
    else if (typeof(key) != "undefined")
    {
        var q = currInputObj.value, s, email;
        if ( q.indexOf('@') != -1 )
        {
            email = q.split("@");
            s = ((key>=65&&key<=90)||(key>=97&&key<=122)||(key>=48&&key<=57))?email[1] + String.fromCharCode(key).toLowerCase(): email[1];
            if( typeof(s) != "undefined" && s != "")
            {
                var myStr = '<ul>', i = 0, patt = new RegExp ('^' + s.toLowerCase()), len = mySEs.length;
                for (se in mySEs)
                if ( patt.test(mySEs[se]) )
                {
                    myStr += '<li onclick="selectData(\'a' + i + '\');'+validateFunc+'(\''+currInputObj.id+'\')"><a href="#"';
                    if ( !i ) myStr += ' class="selected"' ;
                    myStr += 'onmouseover="hoverSelMe(' + i + ')" onclick="return false" id="a' + i + '">' + email[0] + '@' + mySEs[se] + '</a></li>' ;
                    i++ ;
                }
                myStr += '</ul>';
                aIfr.style.height = parseInt(i * eleHeight) + 'px';
                autoS.innerHTML=myStr;
                aIfr.style.display=autoS.style.display="block";
            }
            else
            hideSuggest();
        }
    }
};

hoverSelMe = function ( currItem ) {
    g('a' + selPos).className = '';
    g('a' + currItem).className = 'selected' ;
    selPos = currItem ;
}

function selectData(id) {
    selPos = 0 ;
    currInputObj.value=g(id).innerHTML;
    hideSuggest () ;
}

/* Overwriting the keypress event for the document :(:(:(:(:(:(:(:(:(:(:( */
cancelDocPress=function(event){document.onkeypress=document.onkeydown=function(event){if(getKeyCodeCancel(event)==13)return false;};};
setDocPress = function (event){document.onkeypress=document.onkeydown=function(event){return true;};};

initAutocomplete = function(txtId, vF) {
    var tObj = g(txtId);
    validateFunc = vF ;
    if ( typeof(autoS) == "undefined")
    {
        autoS = document.createElement('div');
        autoS.id = 'emailAutoSuggest' ;
        autoS.className = 'myAutocomplete';
        g(document.getElementsByTagName('body')[0].id = 'myBody').appendChild(autoS);
        aIfr = document.createElement('iframe');
        aIfr.id = 'emailAutoSuggestIframe';
        aIfr.className = 'acIframe';
        aIfr.frameBorder = 0;
        aIfr.scrolling = "no";
        g('myBody').appendChild(aIfr);
    }

    if ( tObj.attachEvent )
    {
        tObj.attachEvent('onkeydown', autosuggest);
        tObj.attachEvent('onfocus', cancelDocPress);
        tObj.attachEvent('onblur', hideSuggest);
        tObj.attachEvent('onblur', setDocPress);
    }
    else
    {
        tObj.addEventListener('keydown', autosuggest, false);
        tObj.addEventListener('focus', cancelDocPress, false);
        tObj.addEventListener('blur', hideSuggest, false);
        tObj.addEventListener('blur', setDocPress, false);
    }
};
