/* Fixed by VNChannel @ http://mkportal.vnchannel.net
to support:
1/ If webpage exists another login form (like MKPortal Login block)
2/ Support multi-language site
3/ Some fixes in checking passwords and email matches
*/
var url = "xmlhttp.php?action=CheckUsername&user="; // The server-side script
function emailCheck(emailStr)
{
var checkTLD = 1;
var knownDomsPat = /^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
var emailPat = /^(.+)@(.+)$/;
var specialChars = "\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
var validChars = "\[^\\s" + specialChars + "\]";
var quotedUser = "(\"[^\"]*\")";
var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
var atom = validChars + '+';
var word = "(" + atom + "|" + quotedUser + ")";
var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$");
var matchArray = emailStr.match(emailPat);
if(matchArray == null)
{
LoginStatus('email_1','email_1_status',null,'0', email_incorrect);
return false;
}
var user = matchArray[1];
var domain = matchArray[2];
for(i=0; i < user.length; i++)
{
if(user.charCodeAt(i) > 127)
{
LoginStatus('email_1','email_1_status',null,'0', email_invalid_char);
return false;
}
}
for(i=0; i < domain.length; i++)
{
if(domain.charCodeAt(i) > 127)
{
LoginStatus('email_1','email_1_status',null,'0', email_invalid_domain_char);
return false;
}
}
if(user.match(userPat) == null)
{
LoginStatus('email_1','email_1_status',null,'0', username_invalid );
return false;
}
var IPArray = domain.match(ipDomainPat);
if(IPArray != null)
{
for(var i=1; i <= 4; i++)
{
if(IPArray[i] > 255)
{
LoginStatus('email_1','email_1_status',null,'0', des_ip_invalid);
return false;
}
}
return true;
}
var atomPat = new RegExp("^" + atom + "$");
var domArr = domain.split(".");
var len = domArr.length;
for(i=0; i < len; i++)
{
if(domArr[i].search(atomPat) == -1)
{
LoginStatus('email_1', 'email_1_status', null, '0', domain_invalid);
return false;
}
}
if(checkTLD && domArr[domArr.length-1].length!=2 &&
domArr[domArr.length-1].search(knownDomsPat) == -1)
{
LoginStatus('email_1', 'email_1_status',null, '0', domain_country_invalid)
return false;
}
if(len < 2)
{
LoginStatus('email_1', 'email_1_status', null, '0', email_missing_hostname);
return false;
}
return true;
}
function isInt(str)
{
var i = parseInt(str);
if(isNaN(i))
{
return false;
}
i = i . toString();
if(i != str)
{
return false;
}
return true;
}
var isWorking = false;
function handleHttpResponse_2()
{
if(http.readyState == 4)
{
if(http.responseText.indexOf('invalid') == -1)
{
// Split the comma delimited response into an array
results = http.responseText.split(",");
if(results[1] == "Invalid")
{
document.register.username.value = '';
LoginStatus('username', 'username_status', null, '0', results[0] + is_in_use);
isWorking = false;
}
else
{
document.register.username.value = results[0];
LoginStatus('username', 'username_status', null, '1', results[0] + is_available);
isWorking = false;
}
}
}
}
function CheckUserName()
{
if (document.register.username.value=='') return false;
var form = document.register;
if(form.username.value.length < 3)
{
LoginStatus('username', 'username_status', null, '0', username_less_3);
isWorking = false;
}
else
{
if(!isWorking && http)
{
var UserName = document.register.username.value;
/*document.getElementById('username').value = "Checking...";*/
document.register.username.value = 'Checking...';
http.open("GET", url + escape(UserName), true);
http.onreadystatechange = handleHttpResponse_2;
isWorking = true;
http.send(null);
}
}
}
function getHTTPObject()
{
var xmlhttp;
/*@cc_on
@if (@_jscript_version >= 5)
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@else
xmlhttp = false;
@end @*/
if(!xmlhttp && typeof XMLHttpRequest != 'undefined')
{
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
xmlhttp = false;
}
}
return xmlhttp;
}
function LoginStatus(ID,ID2,parentID,sText,reason)
{
var inputboxElem = document.getElementById(ID);
var ID2 = ID + "_status";
if(typeof reason == "undefined")
{
reason = "";
}
if(sText == 0)
{
var sText = " ";
inputboxElem.setAttribute("class", "inputbad");
inputboxElem.setAttribute("className", "inputbad");
}
else if(sText == 1)
{
var sText = " ";
inputboxElem.setAttribute("class", "inputgood");
inputboxElem.setAttribute("className", "inputgood");
}
if(document.layers)
{
var oLayer = (parentID)? eval('document.' + parentID + '.document.' + ID2 + '.document') : document.layers[ID2].document;
oLayer.open();
oLayer.write(sText + reason + progressbar);
oLayer.close();
}
else if(document.all)
{
document.all[ID2].innerHTML = sText + reason;
}
else if(parseInt(navigator.appVersion)>=5&&navigator.appName=="Netscape")
{
document.getElementById(ID2).innerHTML = sText + reason;
}
}
function varfield(field)
{
var form = document.register;
var r = new RegExp("[\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-]", "i");
if(field == 1)
{
if (document.register.password_1.value=='') return false;
if(form.password_1.value.length < 6)
{
LoginStatus('password_1','password_1_status',null,'0', password_less_6);
}
else
{
LoginStatus('password_1','password_1_status',null,'1', password_valid);
}
}
else if(field == 2)
{
if (document.register.password_2.value=='') return false;
if (form.password_1.value != form.password_2.value)
{
LoginStatus('password_2','password_2_status',null,'0', password_not_match);
}
else
{
LoginStatus('password_2','password_2_status',null,'1', password_match);
}
}
else if(field == 3)
{
if (document.register.email.value=='') return false;
if(emailCheck(form.email.value) != false)
{
LoginStatus('email_1','email_1_status',null,'1', email_valid);
}
}
else if(field == 4)
{
if (document.register.email_2.value=='') return false;
if (form.email_1.value != form.email_2.value)
{
LoginStatus('email_2','email_2_status',null,'0', email_not_match);
}
else
{
LoginStatus('email_2','email_2_status',null,'1', email_match);
}
}
}
var http = getHTTPObject(); // We create the HTTP Object