function DebugShowInnerHTML(id, url) {
var el = document.getElementById(id);
var floatDiv = document.createElement("div");
floatDiv.style.position = "absolute";
floatDiv.style.zIndex='1000';
floatDiv.innerHTML = "[close]";
floatDiv.innerHTML += "
" + url + "
";
el.insertBefore(floatDiv, el.childNodes[0]);
}
function SLAuthProxy(url) {
// User Configurable Properties - these can be set at any time
// your apiKey, this value must be set!
this.apiKey = "ignored";
// sniff the browser for custom behaviors
this.__isExplorer = navigator.userAgent.toLowerCase().indexOf('msie') != -1;
this.__isSafari = navigator.userAgent.toLowerCase().indexOf('safari') != -1;
this.__isMac = navigator.platform.toLowerCase().indexOf('mac') != -1;
this.__isMacIE = this.__isMac && this.__isExplorer;
// if enabled, spit out debug information through alert()
this.debug = window.location.href.indexOf("debug=true") != -1 ? true : false;
this.OnDebug = function(msg){
if (this.debug)
alert("Debug: " + msg);
}
this.OnDebug("Created SLAuthProxy");
// used to track the id of the handler expecting the results from the immediately preceeding method invocation
// this is used only for testing purposes
this.lastHandlerId = "";
// Methods You can Overide
//
// OnSuccess(returnValue) - is passed the return value at the end of a successful call, default does nothing
// OnError(msg) - is passed an error message if a problem occurs
// OnDebug(msg) - is called when debugging is enabled
this.__baseUrl = url;
this.__sendInvokeCount = 0;
this.__eventHandlers = new Object();
}
// Override this function after the Proxy is loaded and you can
// make the profile link go anywhere you want.
SLAuthProxy.prototype.generateProfileURL = function(userId) {
return "http://www.sitelife.com/community/persona/index.html?uid=" + userId;
}
SLAuthProxy.prototype.gotoProfile = function(userId) {
document.location = this.generateProfileURL(userId);
}
// Default error handler for the proxy object, simple alert
SLAuthProxy.prototype.OnError = function(msg) {
alert("OnError: " + msg);
}
// browser independent method to get elements by ID
SLAuthProxy.prototype.GetElement = function(id) {
this.OnDebug("GetElement " + id);
if (document.getElementById)
return document.getElementById(id);
if (document.all)
return document.all[id];
this.OnError("No support for GetElement() in this browser");
return null;
}
// browser independent method to get elements by tag name
SLAuthProxy.prototype.GetTags = function(tagName) {
this.OnDebug("GetTags " + tagName);
if (document.getElementsByTagName)
return document.getElementsByTagName(tagName);
if (document.all)
return document.tags(tagName);
this.OnError("No support for GetTags() in this browser");
return null;
}
SLAuthProxy.prototype.ScriptId = function() { return this.__scriptId = "_sla_script_" + this.__sendInvokeCount; }
SLAuthProxy.prototype.LoadScript = function (url, callback) {
var script = document.createElement('script');
script.type = 'text/javascript';
if (callback)
script.onload = script.onreadystatechange = function() {
if (script.readyState && script.readyState != 'loaded' && script.readyState != 'complete')
return;
script.onreadystatechange = script.onload = null;
callback();
};
script.src = url;
document.getElementsByTagName('head')[0].appendChild (script);
}
SLAuthProxy.prototype.__Send = function(url, scriptToUse) {
this.OnDebug("_Send " + url);
if (this.__isSafari) {
this.LoadScript(url);
return;
}
scriptToUse = scriptToUse || this.ScriptId();
//append our various parameters as necessary
url = this.__AppendUrlValues(url);
this.OnDebug("_Send (updated) " + url);
// add the script node to the document
if (document.createElement && ! this.__isMacIE) {
var scriptNode = this.GetElement(scriptToUse);
var head = this.GetTags('head')[0];
if ( (scriptNode != null) && (scriptNode != undefined) && (!this.__isExplorer) && head.removeChild && (!this.__isSafari)) {
head.removeChild(scriptNode);
scriptNode = null;
}
if(scriptNode == null) {
scriptNode = document.createElement('script');
scriptNode.id = scriptToUse;
scriptNode.setAttribute('type','text/javascript');
scriptNode.setAttribute('charset', 'utf-8');
head.appendChild(scriptNode);
}
scriptNode.setAttribute('src', url);
return;
}
// could fall back to sync at this point, but will bust if the page is already loaded
this.OnError("No support for async in this browser");
}
SLAuthProxy.prototype.__AppendUrlValues = function (url)
{
time = new Date();
url += this.__GetArgument("plckNoCache", time.getTime(), false, false);
url += this.__GetArgument("plckApiKey", this.apiKey, true, false);
return url;
}
// validate and fetch arguments, if the argument is missing and optional, we return an empty string
SLAuthProxy.prototype.__GetArgument = function(variableName, variableValue, isRequired, isArray) {
this.OnDebug("__GetArgument " + variableName + "," + variableValue + "," + isRequired + "," + isArray);
if (typeof variableValue == "undefined" || variableValue == null || variableValue == "")
{
if (isRequired)
{
this.OnError("Missing required parameter " + variableName);
this.__isValid = false;
return "";
}
else
return "";
}
if (isRequired && isArray)
{
if (!this.__ArrayValidation(variableValue))
{
this.OnError("Invalid array parameter " + variableName);
this.__isValid = false;
return "";
}
}
return "&" + variableName + "=" + encodeURIComponent(variableValue);
};
// fetch a named request parameter from the page URL
SLAuthProxy.prototype.GetParameter = function(parameterName) {
var key = parameterName + "=";
var parameters = document.location.search.substring(1).split("&");
for (var i = 0; i < parameters.length; i++)
{
if (parameters[i].indexOf(key) == 0)
return parameters[i].substring(key.length);
}
return null;
};
// determines if the provided string constitutes a valid email address
function jsValidateEmailAddress(pvEmailAddress)
{
if (!pvEmailAddress.match(/^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$/))
{
return false;
}
return true;
}
SLAuthProxy.prototype.SubmitLoginForm = function (form){
var emailElement = this.GetElement("plckEmail");
var passwordElement = this.GetElement("password");
var emailValidationControl = this.GetElement("emailValidation");
var passwordValidationControl = this.GetElement("passwordValidation");
emailValidationControl.style.display = "none";
passwordValidationControl.style.display = "none";
var isValid = true;
if (!jsValidateEmailAddress(emailElement.value)){
emailValidationControl.style.display = "inline";
isValid = false;
}
if (passwordElement.value == ""){
passwordValidationControl.style.display = "inline";
isValid = false;
}
if (isValid)
this.__SubmitForm(form);
}
SLAuthProxy.prototype.SubmitResetPasswordForm = function(form){
var emailElement = this.GetElement("email");
var emailRequiredElement = this.GetElement("emailRequiredValidator");
if (emailElement.value == ""){
emailRequiredElement.style.display = "inline";
return;
}
this.__SubmitForm(form);
}
SLAuthProxy.prototype.SubmitRegistrationForm = function (form){
var emailElement = this.GetElement("email");
var emailConfirmElement = this.GetElement("emailConfirm");
var displayNameElement = this.GetElement("displayName");
var passwordElement = this.GetElement("password");
var passwordConfirmElement = this.GetElement("passwordConfirm");
var emailValidationControl = this.GetElement("emailValidation");
var passwordValidationControl = this.GetElement("passwordValidation");
var displayNameValidationControl = this.GetElement("displayNameValidation");
var emailNotMatchMessage = this.GetElement("emailNotMatchMessage");
var passwordNotMatchMessage = this.GetElement("passwordNotMatchMessage");
emailValidationControl.style.display = "none";
passwordValidationControl.style.display = "none";
passwordNotMatchMessage.style.display = "none";
emailNotMatchMessage.style.display = "none";
displayNameValidationControl.style.display = "none";
var isValid = true;
if (!jsValidateEmailAddress(emailElement.value)){
emailValidationControl.style.display = "inline";
isValid = false;
}
if (displayNameElement.value == ""){
displayNameValidationControl.style.display = "inline";
isValid = false;
}
if (passwordElement.value == ""){
passwordValidationControl.style.display = "inline";
isValid = false;
}
if (emailElement.value != emailConfirmElement.value){
emailNotMatchMessage.style.display = "inline";
isValid = false;
}
if (passwordElement.value != passwordConfirmElement.value){
passwordNotMatchMessage.style.display = "inline";
isValid = false;
}
if (passwordConfirmElement.value.length < 6){
this.ShowInlineError("Password must be 6 characters long.");
isValid = false;
}
if (isValid)
this.__SubmitForm(form);
}
SLAuthProxy.prototype.SubmitChangePasswordForm = function (form){
this.HideInlineError();
var oldPasswordElement = this.GetElement("oldPassword");
var newPasswordElement = this.GetElement("newPassword");
var newPasswordConfirmElement = this.GetElement("newPasswordConfirm");
var oldPasswordRequiredElement = this.GetElement("oldPasswordRequired");
var newPasswordRequiredElement = this.GetElement("newPasswordRequired");
var newPasswordConfirmRequiredElement = this.GetElement("newPasswordConfirmRequired");
oldPasswordRequiredElement.style.display = "none";
newPasswordRequiredElement.style.display = "none";
newPasswordConfirmRequiredElement.style.display = "none";
isValid = true;
if (oldPasswordElement.value == ""){
oldPasswordRequiredElement.style.display = "inline";
isValid = false;
}
if (newPasswordElement.value == ""){
newPasswordRequiredElement.style.display = "inline";
isValid = false;
}
if (newPasswordConfirmElement.value == ""){
newPasswordConfirmRequiredElement.style.display = "inline";
isValid = false;
}
if (newPasswordElement.value != newPasswordConfirmElement.value){
this.ShowInlineError("Passwords do not match.");
return;
}
if (newPasswordElement.value.length < 6){
this.ShowInlineError("Password must be 6 characters long.");
return;
}
if (isValid)
this.__SubmitForm(form);
}
SLAuthProxy.prototype.ShowInlineError = function(message){
var messageElement = this.GetElement("slaErrorMessage");
messageElement.style.display = "inline";
messageElement.innerHTML = message;
return;
}
SLAuthProxy.prototype.HideInlineError = function(){ var messageElement = this.GetElement("slaErrorMessage"); if (messageElement) { messageElement.style.display="none";}}
SLAuthProxy.prototype.WriteDiv = function(id, divClass, styleString) {
if (this.GetElement(id) == null){
document.write('');
}
return id;
}
SLAuthProxy.prototype.__CapturePersistentParams = function(url){
var redirUrl = this.GetParameter("url");
if (redirUrl != null)
url += '&url=' + escape(redirUrl);
// the url of the window hosting the call to the proxy
var hostingUrl = document.location.href;
if ( hostingUrl != null && typeof(hostingUrl) != 'undefined')
url += '&hostingUrl=' + escape(hostingUrl);
return url
}
SLAuthProxy.prototype.WriteDefaultDiv = function(){
this.WriteDiv("slRenderDiv");
// hidden div used for test automation
this.WriteDiv("slRenderDiv_vn", "", "display:none;");
}
SLAuthProxy.prototype.Show = function(){
this.WriteDefaultDiv();
var url = this.__baseUrl + '/Authentication/Index.rails?slaElementId=slRenderDiv&slaDivLayout=1';
this.__Send(this.__CapturePersistentParams(url), "renderLogin");
}
SLAuthProxy.prototype.ShowLogin = function(){
this.WriteDefaultDiv();
var url = this.__baseUrl + '/Authentication/Login.rails?slaElementId=slRenderDiv&slaDivLayout=1';
this.__Send(this.__CapturePersistentParams(url), "renderLogin");
}
SLAuthProxy.prototype.ShowLoginFull = function(){
this.WriteDefaultDiv();
var url = this.__baseUrl + '/Authentication/LoginFull.rails?slaElementId=slRenderDiv&slaDivLayout=1';
this.__Send(this.__CapturePersistentParams(url), "renderLogin");
}
SLAuthProxy.prototype.ShowChangePasswordFull = function(){
this.WriteDefaultDiv();
var url = this.__baseUrl + '/Authentication/ChangePasswordFormFull.rails?slaElementId=slRenderDiv&slaDivLayout=1';
this.__Send(this.__CapturePersistentParams(url), "renderLogin");
}
SLAuthProxy.prototype.ShowRegistration = function(){
this.WriteDefaultDiv();
var url = this.__baseUrl + '/Authentication/DisplayRegistration.rails?slaElementId=slRenderDiv&slaDivLayout=1';
this.__Send(this.__CapturePersistentParams(url), "renderLogin");
}
SLAuthProxy.prototype.__Render = function(path){
var url = this.__baseUrl + path + "?slaElementId=slRenderDiv&slaDivLayout=1";
this.__Send(this.__CapturePersistentParams(url), "renderHere" + escape(path));
}
SLAuthProxy.prototype.__SubmitForm = function(form){
var elementData = "";
for(var x=0;x