/**
* Created by Raph on 10/11/2014.
*/
AjaxLogin = Class.create();
AjaxLogin.prototype = {
initialize: function(config) {
this.config = Object.extend({
triggers: null,
markup:
'
'
+ ''
+ ''
}, config || {});
this.config.size = Object.extend({
width : 'auto',
height : 'auto',
maxWidth : 550,
maxHeight: 600
}, this.config.size || {});
this._prepareMarkup();
this._attachEventListeners();
this._addEventListeners();
},
show: function() {
if (!this.centered) {
this.center();
}
$$('select').invoke('addClassName', 'ajaxlogin-hidden');
if (!$('ajaxlogin-mask')) {
var mask = new Element('div');
mask.writeAttribute('id', 'ajaxlogin-mask');
var body = document.body,
element = document.documentElement,
height = Math.max(
Math.max(body.scrollHeight, element.scrollHeight),
Math.max(body.offsetHeight, element.offsetHeight),
Math.max(body.clientHeight, element.clientHeight)
);
mask.setStyle({
height: height + 'px'
});
$(document.body).insert(mask);
}
if (!window.ajaxloginMaskCounter) {
window.ajaxloginMaskCounter = 0;
}
if (!this.maskCounted) {
this.maskCounted = 1;
window.ajaxloginMaskCounter++;
}
// set highest z-index
var zIndex = 999;
$$('.ajaxlogin-window').each(function(el) {
maxIndex = parseInt(el.getStyle('zIndex'));
if (zIndex < maxIndex) {
zIndex = maxIndex;
}
});
this.window.setStyle({
'zIndex': zIndex + 1
});
this._onKeyPressBind = this._onKeyPress.bind(this);
document.observe('keyup', this._onKeyPressBind);
this.window.show();
},
hide: function() {
if (this.modal || !this.window.visible()) {
return;
}
if (this._onKeyPressBind) {
document.stopObserving('keyup', this._onKeyPressBind);
}
if (this.config.destroy) {
this.window.remove();
} else {
this.window.hide();
}
this.maskCounted = 0;
if (!--window.ajaxloginMaskCounter) {
$('ajaxlogin-mask') && $('ajaxlogin-mask').remove();
$$('select').invoke('removeClassName', 'ajaxlogin-hidden');
}
},
setModal: function(flag) {
this.modal = flag;
if (flag) {
this.window.select('.close').invoke('hide');
} else {
this.window.select('.close').invoke('show');
}
return this;
},
update: function(content, size) {
var oldContent = this.content.down();
oldContent && $(document.body).insert(oldContent.hide());
this.content.update(content);
content.show();
this.addActionBar();
this.updateSize(size);
this.center();
return this;
},
addActionBar: function() {
this.removeActionBar();
var agreementId = this.content.down().id.replace('-window', ''),
trigger = this.config.triggers[agreementId];
if (!trigger || !trigger.actionbar) {
return;
}
this.content.insert({
after: '' + trigger.actionbar.html + '
'
});
$(trigger.actionbar.el).observe(
trigger.actionbar.event,
trigger.actionbar.callback.bindAsEventListener(this, agreementId.replace('ajaxlogin-', ''))
);
},
removeActionBar: function() {
var agreementId = this.content.down().id.replace('-window', ''),
trigger = this.config.triggers[agreementId];
if (trigger && trigger.actionbar) {
var actionbar = $(trigger.actionbar.el);
if (actionbar) {
actionbar.stopObserving(trigger.actionbar.event);
}
}
this.window.select('.actionbar').invoke('remove');
},
getActionBar: function() {
return this.window.down('.actionbar');
},
center: function() {
var viewportSize = document.viewport.getDimensions(),
viewportOffset = document.viewport.getScrollOffsets(),
shadowWrap = this.window.down('.d-shadow-wrap'),
windowSize = this.window.getDimensions(),
left, top;
if ('undefined' === typeof viewportSize.width) { // mobile fix. not sure is this check is good enough.
top = viewportOffset.top + 20;
left = viewportOffset.left;
} else {
top = viewportSize.height / 2
- windowSize.height / 2
+ viewportOffset.top
+ parseInt(shadowWrap.getStyle('margin-top'))
+ parseInt(shadowWrap.getStyle('padding-top')),
left = viewportSize.width / 2
- windowSize.width / 2
+ viewportOffset.left
+ parseInt(shadowWrap.getStyle('margin-left'))
+ parseInt(shadowWrap.getStyle('padding-left'));
if (left < viewportOffset.left || windowSize.width > viewportSize.width) {
left = viewportOffset.left;
} else {
left -= 20; /* right shadow */
}
top = (top < viewportOffset.top ? (20 + viewportOffset.top) : top)
}
this.setPosition(left, top);
this.centered = true;
return this;
},
setPosition: function(x, y) {
this.window.setStyle({
left: x + 17 /* left border */ + 'px',
top : y + 'px'
});
return this;
},
activate: function(trigger) {
var trigger = this.config.triggers[trigger];
this.update(trigger.window.show(), trigger.size).show();
},
updateSize: function(sizeConfig) {
sizeConfig = sizeConfig || this.config.size;
// reset previous size
this.window.setStyle({
width : 'auto',
height: 'auto',
left : 0, /* thin content box fix while page is scrolled to the right */
top : 0
});
this.content.setStyle({
width : isNaN(sizeConfig.width) ? sizeConfig.width : sizeConfig.width + 'px',
height: isNaN(sizeConfig.height) ? sizeConfig.height : sizeConfig.height + 'px'
});
this.window.setStyle({
visibility: 'hidden'
}).show();
var width = this.content.getWidth() + 100, /* right shadow and borders */
viewportSize = document.viewport.getDimensions();
sizeConfig = Object.extend(this.config.size, sizeConfig || {});
if ('auto' === sizeConfig.width
&& (width > sizeConfig.maxWidth || width > viewportSize.width)) {
if (width > viewportSize.width && viewportSize.width < (sizeConfig.maxWidth + 100)) {
width = viewportSize.width - 100; /* right shadow and borders */
} else {
width = sizeConfig.maxWidth;
}
this.content.setStyle({
width: width + 'px'
});
}
var actionbar = this.getActionBar(),
actionbarHeight = actionbar ? actionbar.getHeight() : 0,
height = this.content.getHeight() + actionbarHeight + 20 /* top button */;
if ('auto' === sizeConfig.height
&& (height > sizeConfig.maxHeight || height > viewportSize.height)) {
if (height > viewportSize.height && viewportSize.height < (sizeConfig.maxHeight + actionbarHeight + 20)) {
height = viewportSize.height - 60; /* bottom shadow */
} else {
height = sizeConfig.maxHeight;
}
height -= actionbarHeight;
this.content.setStyle({
height: height + 'px'
});
}
// update window size. Fix for all IE browsers
var paddingHorizontal = parseInt(this.content.getStyle('padding-left')) + parseInt(this.content.getStyle('padding-right'));
//var paddingVertical = parseInt(this.content.getStyle('padding-top')) + parseInt(this.content.getStyle('padding-bottom'));
this.window.hide()
.setStyle({
width : width + paddingHorizontal + 'px',
// height : height + paddingVertical + 'px',
visibility: 'visible'
});
return this;
},
_prepareMarkup: function() {
this.window = new Element('div');
this.window.addClassName('ajaxlogin-window');
this.window.update(this.config.markup).hide();
this.content = this.window.select('.content')[0];
this.close = this.window.select('.close')[0];
$(document.body).insert(this.window);
this.window.id = 'something'
},
_attachEventListeners: function() {
// close window
this.close.observe('click', this.hide.bind(this));
// show window
if (this.config.triggers) {
for (var i in this.config.triggers) {
var trigger = this.config.triggers[i];
if (typeof trigger === 'function') {
continue;
}
trigger.size = trigger.size || {};
for (var j in this.config.size) {
if (trigger.size[j]) {
continue;
}
trigger.size[j] = this.config.size[j];
}
trigger.el.each(function(el) {
var t = trigger;
el.observe(t.event, function(e) {
if (typeof event != 'undefined') { // ie9 fix
event.preventDefault ? event.preventDefault() : event.returnValue = false;
}
Event.stop(e);
if (!t.window) {
return;
}
this.update(t.window, t.size).show();
}.bind(this));
}.bind(this));
}
}
},
_addEventListeners: function() {
var self = this;
$('ajaxlogin-login-form') && $('ajaxlogin-login-form').observe('submit', function(e) {
if (typeof event != 'undefined') { // ie9 fix
event.preventDefault ? event.preventDefault() : event.returnValue = false;
}
Event.stop(e);
if (!ajaxLoginForm.validator.validate()) {
return false;
}
var id = jQuery('#id').val();
$('login-please-wait').show();
//$('send2').setAttribute('disabled', 'disabled');
$$('#ajaxlogin-login-form .buttons-set')[0]
.addClassName('disabled')
.setOpacity(0.5);
new Ajax.Request($('ajaxlogin-login-form').action, {
parameters: $('ajaxlogin-login-form').serialize(),
onSuccess: function(transport) {
var section = $('ajaxlogin-login-form');
if (!section) {
return;
}
var ul = section.select('.messages')[0];
if (ul) {
ul.remove();
}
var response = transport.responseText.evalJSON();
// console.log(response);
if (response.error) {
var section = $('ajaxlogin-login-form');
if (!section) {
return;
}
var ul = section.select('.messages')[0];
if (!ul) {
section.insert({
top: ''
});
ul = section.select('.messages')[0]
}
var li = $(ul).select('.error-msg')[0];
if (!li) {
$(ul).insert({
top: ''
});
li = $(ul).select('.error-msg')[0];
}
$(li).select('ul')[0].insert(
'' + response.error + ''
);
self.updateCaptcha('user_login');
}
// Code implemented by Myron
var newResponseText = transport.responseText;
// console.log("response: "+newResponseText);
if (newResponseText === "\"Your Image Saved\"") {
changeLoginText();
var section = $('ajaxlogin-login-form');
var ul = section.select('.messages')[0];
if (!ul) {
section.insert({
top: ''
});
ul = section.select('.messages')[0]
}
var li = $(ul).select('.success-msg')[0];
if (!li) {
$(ul).insert({
top: ''
});
li = $(ul).select('.success-msg')[0];
}
$(li).select('ul')[0].insert(
'' + newResponseText + ''
);
self.updateCaptcha('user_login');
console.log('ajaxLoginForm is success');
$(self).hide();
}
if (response.redirect) {
document.location = response.redirect;
return;
}
$('login-please-wait').hide();
// $('send2').removeAttribute('disabled');
$$('#ajaxlogin-login-form .buttons-set')[0]
.removeClassName('disabled')
.setOpacity(1);
}
});
});
$('ajaxlogin-create-form') && $('ajaxlogin-create-form').observe('submit', function(e) {
if (typeof event != 'undefined') { // ie9 fix
event.preventDefault ? event.preventDefault() : event.returnValue = false;
}
Event.stop(e);
if (!ajaxCreateForm.validator.validate()) {
return false;
}
$('create-please-wait').show();
$('create').setAttribute('disabled', 'disabled');
$$('#ajaxlogin-create-form .buttons-set')[0]
.addClassName('disabled')
.setOpacity(0.5);
new Ajax.Request($('ajaxlogin-create-form').action, {
parameters: $('ajaxlogin-create-form').serialize(),
onSuccess: function(transport) {
var section = $('ajaxlogin-create-form');
if (!section) {
return;
}
var ul = section.select('.messages')[0];
if (ul) {
ul.remove();
}
var response = transport.responseText.evalJSON();
if (response.error) {
var section = $('ajaxlogin-create-form');
if (!section) {
return;
}
var ul = section.select('.messages')[0];
if (!ul) {
section.insert({
top: ''
});
ul = section.select('.messages')[0]
}
var li = $(ul).select('.error-msg')[0];
if (!li) {
$(ul).insert({
top: ''
});
li = $(ul).select('.error-msg')[0];
}
$(li).select('ul')[0].insert(
'' + response.error + ''
);
self.updateCaptcha('user_login');
}
if (response.redirect) {
//document.location = response.redirect;
location.reload();
return;
}
// Code implemented by Myron
var newResponseText = transport.responseText;
// console.log("response: "+newResponseText);
if (newResponseText === "\"Your Image Saved\"") {
changeLoginText();
var section = $('ajaxlogin-login-form');
var ul = section.select('.messages')[0];
if (!ul) {
section.insert({
top: ''
});
ul = section.select('.messages')[0]
}
var li = $(ul).select('.success-msg')[0];
if (!li) {
$(ul).insert({
top: ''
});
li = $(ul).select('.success-msg')[0];
}
$(li).select('ul')[0].insert(
'' + newResponseText + ''
);
self.updateCaptcha('user_login');
console.log('ajaxLoginForm is success');
$(self).hide();
}
$('create-please-wait').hide();
$('create').removeAttribute('disabled');
$$('#ajaxlogin-create-form .buttons-set')[0]
.removeClassName('disabled')
.setOpacity(1);
}
});
});
$('ajaxlogin-forgot-password-form') && $('ajaxlogin-forgot-password-form').observe('submit', function(e) {
if (typeof event != 'undefined') { // ie9 fix
event.preventDefault ? event.preventDefault() : event.returnValue = false;
}
Event.stop(e);
if (!ajaxForgotForm.validator.validate()) {
return false;
}
$('forgot-please-wait').show();
$('btn-forgot').setAttribute('disabled', 'disabled');
$$('#ajaxlogin-forgot-password-form .buttons-set')[0]
.addClassName('disabled')
.setOpacity(0.5);
new Ajax.Request($('ajaxlogin-forgot-password-form').action, {
parameters: $('ajaxlogin-forgot-password-form').serialize(),
onSuccess: function(transport) {
var section = $('ajaxlogin-forgot-password-form');
if (!section) {
return;
}
var ul = section.select('.messages')[0];
if (ul) {
ul.remove();
}
$('forgot-please-wait').hide();
$('btn-forgot').removeAttribute('disabled');
$$('#ajaxlogin-forgot-password-form .buttons-set')[0]
.removeClassName('disabled')
.setOpacity(1);
var response = transport.responseText.evalJSON();
if (response.error) {
var section = $('ajaxlogin-forgot-password-form');
if (!section) {
return;
}
var ul = section.select('.messages')[0];
if (!ul) {
section.insert({
top: ''
});
ul = section.select('.messages')[0]
}
var li = $(ul).select('.error-msg')[0];
if (!li) {
$(ul).insert({
top: ''
});
li = $(ul).select('.error-msg')[0];
}
$(li).select('ul')[0].insert(
'' + response.error + ''
);
self.updateCaptcha('user_forgotpassword');
} else if (response.message) {
var section = $('ajaxlogin-login-form');
if (!section) {
return;
}
var ul = section.select('.messages')[0];
if (ul) {
ul.remove();
}
var section = $('ajaxlogin-login-form');
if (!section) {
return;
}
var ul = section.select('.messages')[0];
if (!ul) {
section.insert({
top: ''
});
ul = section.select('.messages')[0]
}
var li = $(ul).select('.success-msg')[0];
if (!li) {
$(ul).insert({
top: ''
});
li = $(ul).select('.success-msg')[0];
}
$(li).select('ul')[0].insert(
'' + response.message + ''
);
ajaxLoginWindow.activate('login');
}
}
});
});
$('ajaxlogin-logout-form') && $('ajaxlogin-logout-form').observe('submit', function(e) {
if (typeof event != 'undefined') { // ie9 fix
event.preventDefault ? event.preventDefault() : event.returnValue = false;
}
Event.stop(e);
if (!ajaxLogoutForm.validator.validate()) {
return false;
}
$('login-please-wait').show();
//$('send2').setAttribute('disabled', 'disabled');
$$('#ajaxlogin-logout-form .buttons-set')[0]
.addClassName('disabled')
.setOpacity(0.5);
new Ajax.Request($('ajaxlogin-logout-form').action, {
parameters: $('ajaxlogin-logout-form').serialize(),
onSuccess: function(transport) {
var section = $('ajaxlogin-logout-form');
if (!section) {
return;
}
var ul = section.select('.messages')[0];
if (ul) {
ul.remove();
}
var response = transport.responseText.evalJSON();
if (response.error) {
var section = $('ajaxlogin-logout-form');
if (!section) {
return;
}
var ul = section.select('.messages')[0];
if (!ul) {
section.insert({
top: ''
});
ul = section.select('.messages')[0]
}
var li = $(ul).select('.error-msg')[0];
if (!li) {
$(ul).insert({
top: ''
});
li = $(ul).select('.error-msg')[0];
}
$(li).select('ul')[0].insert(
'' + response.error + ''
);
}
if (response.redirect) {
document.location = response.redirect;
return;
}
$("ajaxlogin-login-window").hide();
$('login-please-wait').hide();
//$('send2').removeAttribute('disabled');
$$('#ajaxlogin-logout-form .buttons-set')[0]
.removeClassName('disabled')
.setOpacity(1);
}
});
});
},
ajaxFailure: function(){
location.href = this.urls.failure;
},
_onKeyPress: function(e) {
if (e.keyCode == 27) {
this.hide();
}
},
updateCaptcha: function(id) {
var captchaEl = $(id);
if (captchaEl) {
captchaEl.captcha.refresh(captchaEl.previous('img.captcha-reload'));
// try to focus input element:
var inputEl = $('captcha_' + id);
if (inputEl) {
inputEl.focus();
}
}
}
};
function setproductlogin(pid, event)
{
//alert(pid);
jQuery("#productlistlogin").trigger("click");
return false;
}
function changeLoginText() {
var elem = document.getElementById("delUserButton")
if (elem.value === "Login2")
elem.value = "Logout";
else
elem.value = "Login2";
var elem = document.getElementById("delUserButton2")
if (elem.value === "Register")
elem.value = "My account";
else
elem.value = "Register";
}