function min(a, b) {
    return ((a > b) ? b : a); 
}

function editdistance(_s1, _s2)
{
    var s1 = new Array(), s2 = new Array(), m = new Array();
    var x, y, i;
    var L1 = _s1.length, L2 = _s2.length;

    for( i = 0 ; i < L1 ; ++i ) s1[i + 1] = _s1.substr(i, 1);
    for( i = 0 ; i < L2 ; ++i ) s2[i + 1] = _s2.substr(i, 1);

    m[0] = new Array();
    for( x = 0 ; x <= L1 ; ++x ) m[0][x] = x;
    for( y = 1 ; y <= L2 ; ++y ){
        m[y] = new Array();
	m[y][0] = y;
        for( x = 1 ; x <= L1 ; ++x )
	    m[y][x] = min(1 + min(m[y - 1][x], m[y][x - 1]),
			  m[y - 1][x - 1] + ((s1[x] == s2[y]) ? 0 : 1));
    }    

    return m[L2][L1];
}

function correctEMail(email)
{
    var i;
    if( email.indexOf("http://") != -1 )
	return email.replace(/http:\/\//, '');

    var server = email.substr( email.indexOf('@') + 1 );
    var prefix = email.substr(0, email.indexOf('@'));
    var mostlist =
	new Array("yahoo.com.tw", "yahoo.com.hk", "yahoo.com.cn", "yahoo.com",
		  "gmail.com", "hotmail.com", "yam.com", "pchome.com.tw",
		  "msn.com", "xuite.net", "mail2000.com.tw");
    var feqerrlist = new Array(new Array("gmail.com.tw",   "gmail.com"),
			       new Array("gmail.com.hk",   "gmail.com"),
			       new Array("gmail.tw",       "gmail.com"),
			       new Array("gnnail.com",     "gmail.com"),
			       new Array("mail.google.com","gmail.com"),
			       new Array("mail.google.com.tw","gmail.com"),
			       new Array("google.com",     "gmail.com"),
			       new Array("google.com.tw",  "gmail.com"),
			       new Array("xuite.net.tw",   "xuite.net"),
			       new Array("xuite.com.tw",   "xuite.net"),
			       new Array("hotmail.com.tw", "hotmail.com"),
			       new Array("hotmail.com.hk", "hotmail.com"),
			       new Array("hotmail.tw",     "hotmail.com"),
			       new Array("tw.yahoo.com",   "yahoo.com.tw"),
			       new Array("yahoo.tw",       "yahoo.com.tw"),
			       new Array("yhoo.com.tw",    "yahoo.com.tw"),
			       new Array("yah00.com.tw",   "yahoo.com.tw"),
			       new Array("pchome.com",     "pchome.com.tw"),
			       new Array("yam.com.tw",     "yam.com"),
			       new Array("yam.tw",         "yam.com"),
			       new Array("pixnet.com.tw",  "pixnet.net"),
			       new Array("pixnet.com",     "pixnet.net"),
			       new Array("mail.yahoo.com.tw", "yahoo.com.tw"),
			       new Array("mail.yahoo.com.hk", "yahoo.com.hk")
			       );
    for( i in mostlist )
	if( mostlist[i] == server )
	    return undefined;

    for( i in feqerrlist )
	if( feqerrlist[i][0] == server )
	    return (prefix + '@' + feqerrlist[i][1]);

    for( i in mostlist )
	if( editdistance(server, mostlist[i]) == 1 )
	    return (prefix + '@' + mostlist[i]);

    return undefined;
}
