123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- function smfRegister(formID, passwordDifficultyLevel, regTextStrings)
- {
- this.addVerify = addVerificationField;
- this.autoSetup = autoSetup;
- this.refreshMainPassword = refreshMainPassword;
- this.refreshVerifyPassword = refreshVerifyPassword;
- var verificationFields = new Array();
- var verificationFieldLength = 0;
- var textStrings = regTextStrings ? regTextStrings : new Array();
- var passwordLevel = passwordDifficultyLevel ? passwordDifficultyLevel : 0;
- // Setup all the fields!
- autoSetup(formID);
- // This is a field which requires some form of verification check.
- function addVerificationField(fieldType, fieldID)
- {
- // Check the field exists.
- if (!document.getElementById(fieldID))
- return;
- // Get the handles.
- var inputHandle = document.getElementById(fieldID);
- var imageHandle = document.getElementById(fieldID + '_img') ? document.getElementById(fieldID + '_img') : false;
- var divHandle = document.getElementById(fieldID + '_div') ? document.getElementById(fieldID + '_div') : false;
- // What is the event handler?
- var eventHandler = false;
- if (fieldType == 'pwmain')
- eventHandler = refreshMainPassword;
- else if (fieldType == 'pwverify')
- eventHandler = refreshVerifyPassword;
- else if (fieldType == 'username')
- eventHandler = refreshUsername;
- else if (fieldType == 'reserved')
- eventHandler = refreshMainPassword;
- // Store this field.
- var vFieldIndex = fieldType == 'reserved' ? fieldType + verificationFieldLength : fieldType;
- verificationFields[vFieldIndex] = Array(6);
- verificationFields[vFieldIndex][0] = fieldID;
- verificationFields[vFieldIndex][1] = inputHandle;
- verificationFields[vFieldIndex][2] = imageHandle;
- verificationFields[vFieldIndex][3] = divHandle;
- verificationFields[vFieldIndex][4] = fieldType;
- verificationFields[vFieldIndex][5] = inputHandle.className;
- // Keep a count to it!
- verificationFieldLength++;
- // Step to it!
- if (eventHandler)
- {
- createEventListener(inputHandle);
- inputHandle.addEventListener('keyup', eventHandler, false);
- eventHandler();
- // Username will auto check on blur!
- inputHandle.addEventListener('blur', autoCheckUsername, false);
- }
- // Make the div visible!
- if (divHandle)
- divHandle.style.display = '';
- }
- // A button to trigger a username search?
- function addUsernameSearchTrigger(elementID)
- {
- var buttonHandle = document.getElementById(elementID);
- // Attach the event to this element.
- createEventListener(buttonHandle);
- buttonHandle.addEventListener('click', checkUsername, false);
- }
- // This function will automatically pick up all the necessary verification fields and initialise their visual status.
- function autoSetup(formID)
- {
- if (!document.getElementById(formID))
- return false;
- var curElement, curType;
- for (var i = 0, n = document.getElementById(formID).elements.length; i < n; i++)
- {
- curElement = document.getElementById(formID).elements[i];
- // Does the ID contain the keyword 'autov'?
- if (curElement.id.indexOf('autov') != -1 && (curElement.type == 'text' || curElement.type == 'password'))
- {
- // This is probably it - but does it contain a field type?
- curType = 0;
- // Username can only be done with XML.
- if (curElement.id.indexOf('username') != -1 && window.XMLHttpRequest)
- curType = 'username';
- else if (curElement.id.indexOf('pwmain') != -1)
- curType = 'pwmain';
- else if (curElement.id.indexOf('pwverify') != -1)
- curType = 'pwverify';
- // This means this field is reserved and cannot be contained in the password!
- else if (curElement.id.indexOf('reserve') != -1)
- curType = 'reserved';
- // If we're happy let's add this element!
- if (curType)
- addVerificationField(curType, curElement.id);
- // If this is the username do we also have a button to find the user?
- if (curType == 'username' && document.getElementById(curElement.id + '_link'))
- {
- addUsernameSearchTrigger(curElement.id + '_link');
- }
- }
- }
- return true;
- }
- // What is the password state?
- function refreshMainPassword(called_from_verify)
- {
- if (!verificationFields['pwmain'])
- return false;
- var curPass = verificationFields['pwmain'][1].value;
- var stringIndex = '';
- // Is it a valid length?
- if ((curPass.length < 8 && passwordLevel >= 1) || curPass.length < 4)
- stringIndex = 'password_short';
- // More than basic?
- if (passwordLevel >= 1)
- {
- // If there is a username check it's not in the password!
- if (verificationFields['username'] && verificationFields['username'][1].value && curPass.indexOf(verificationFields['username'][1].value) != -1)
- stringIndex = 'password_reserved';
- // Any reserved fields?
- for (var i in verificationFields)
- {
- if (verificationFields[i][4] == 'reserved' && verificationFields[i][1].value && curPass.indexOf(verificationFields[i][1].value) != -1)
- stringIndex = 'password_reserved';
- }
- // Finally - is it hard and as such requiring mixed cases and numbers?
- if (passwordLevel > 1)
- {
- if (curPass == curPass.toLowerCase())
- stringIndex = 'password_numbercase';
- if (!curPass.match(/(\D\d|\d\D)/))
- stringIndex = 'password_numbercase';
- }
- }
- var isValid = stringIndex == '' ? true : false;
- if (stringIndex == '')
- stringIndex = 'password_valid';
- // Set the image.
- setVerificationImage(verificationFields['pwmain'][2], isValid, textStrings[stringIndex] ? textStrings[stringIndex] : '');
- verificationFields['pwmain'][1].className = verificationFields['pwmain'][5] + ' ' + (isValid ? 'valid_input' : 'invalid_input');
- // As this has changed the verification one may have too!
- if (verificationFields['pwverify'] && !called_from_verify)
- refreshVerifyPassword();
- return isValid;
- }
- // Check that the verification password matches the main one!
- function refreshVerifyPassword()
- {
- // Can't do anything without something to check again!
- if (!verificationFields['pwmain'])
- return false;
- // Check and set valid status!
- var isValid = verificationFields['pwmain'][1].value == verificationFields['pwverify'][1].value && refreshMainPassword(true);
- var alt = textStrings[isValid == 1 ? 'password_valid' : 'password_no_match'] ? textStrings[isValid == 1 ? 'password_valid' : 'password_no_match'] : '';
- setVerificationImage(verificationFields['pwverify'][2], isValid, alt);
- verificationFields['pwverify'][1].className = verificationFields['pwverify'][5] + ' ' + (isValid ? 'valid_input' : 'invalid_input');
- return true;
- }
- // If the username is changed just revert the status of whether it's valid!
- function refreshUsername()
- {
- if (!verificationFields['username'])
- return false;
- // Restore the class name.
- if (verificationFields['username'][1].className)
- verificationFields['username'][1].className = verificationFields['username'][5];
- // Check the image is correct.
- var alt = textStrings['username_check'] ? textStrings['username_check'] : '';
- setVerificationImage(verificationFields['username'][2], 'check', alt);
- // Check the password is still OK.
- refreshMainPassword();
- return true;
- }
- // This is a pass through function that ensures we don't do any of the AJAX notification stuff.
- function autoCheckUsername()
- {
- checkUsername(true);
- }
- // Check whether the username exists?
- function checkUsername(is_auto)
- {
- if (!verificationFields['username'])
- return false;
- // Get the username and do nothing without one!
- var curUsername = verificationFields['username'][1].value;
- if (!curUsername)
- return false;
- if (!is_auto)
- ajax_indicator(true);
- // Request a search on that username.
- checkName = curUsername.php_to8bit().php_urlencode();
- getXMLDocument(smf_prepareScriptUrl(smf_scripturl) + 'action=register;sa=usernamecheck;xml;username=' + checkName, checkUsernameCallback);
- return true;
- }
- // Callback for getting the username data.
- function checkUsernameCallback(XMLDoc)
- {
- if (XMLDoc.getElementsByTagName("username"))
- isValid = XMLDoc.getElementsByTagName("username")[0].getAttribute("valid");
- else
- isValid = true;
- // What to alt?
- var alt = textStrings[isValid == 1 ? 'username_valid' : 'username_invalid'] ? textStrings[isValid == 1 ? 'username_valid' : 'username_invalid'] : '';
- verificationFields['username'][1].className = verificationFields['username'][5] + ' ' + (isValid == 1 ? 'valid_input' : 'invalid_input');
- setVerificationImage(verificationFields['username'][2], isValid == 1, alt);
- ajax_indicator(false);
- }
- // Set the image to be the correct type.
- function setVerificationImage(imageHandle, imageIcon, alt)
- {
- if (!imageHandle)
- return false;
- if (!alt)
- alt = '*';
- var curImage = imageIcon ? (imageIcon == 'check' ? 'field_check.gif' : 'field_valid.gif') : 'field_invalid.gif';
- imageHandle.src = smf_images_url + '/icons/' + curImage;
- imageHandle.alt = alt;
- imageHandle.title = alt;
- return true;
- }
- }
|