document.write('');
var initSite = {
photoGallery: function() {
if ($('photo-gallery') && $('nav-overlay')) {
var navFader = new Fx.Morph('nav-overlay', {duration:200});
$('image-holder').addEvents({
'mouseenter': function(){navFader.start({'opacity': [0, .6]})},
'mouseleave': function(){navFader.start({'opacity': [.6, 0]})}
});
}
},
powerCentre: function() {
if ($('promo-power-centre')) {
pcSliders = $$('#pc-links li.deck');
sliders = [];
$$('#pc-links img.toggle').each(function(el, i){
sliders[i] = new Fx.Slide(pcSliders[i], {duration:100}).hide();
el.addEvent('click', function() {
pcSliders[i].setStyle('display', 'inline');
sliders[i].toggle();
if (el.getProperty('alt') == 'Expand') {
el.setProperties({src:'/i/ads/powercentre-collapse.gif', alt:'Collapse'});
} else {
el.setProperties({src:'/i/ads/powercentre-expand.gif', alt:'Expand'});
}
});
});
}
},
register: function() {
$$('.member-signup').fireEvent('click');
},
start: function() {
initSite.powerCentre();
}
};
/*-------------------------------------------------------------------
MEMBERSHIP REGISTRATION
------------------------------------------------------------------- */
function toggleFields(obj, fields) {
var i = $(obj).selectedIndex;
if ($(obj).options[i].text == 'Australia') {
$(fields).fade('show');
} else {
$(fields).fade('hide');
}
}
function memberCheckName() {
var file = '/membership/check_username.htm';
var username = encodeURIComponent($('username').value);
var email = encodeURIComponent($('email').value);
var str = "";
//Return null if no username provided
if(username == ""){
return null;
}
str = "username="+username+"&email="+email;
request.open( "POST", file, false );
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
request.send(str);
var response = request.responseText;
response = response.split("||");
if(response != 'Username is available.'){
return '0';
}else{
return '1';
}
}
function memberCheckEmail() {
var file = '/membership/check_email.htm';
var email = encodeURIComponent($('email').value);
var str = "";
str = "email="+email;
request.open( "POST", file, false );
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
request.send(str);
var response = request.responseText;
response = response.split("||");
if(response == 'Email already registered.'){
return '-1';
}else if(response != 'Email is available.'){
return '0';
}else{
return '1';
}
}
var fc;
var lbinit = false;
var lightboxjs = {
init: function() {
$$('.member-signup').addEvent('click', function(e){
if(lbinit == true) return false;
lbinit = true;
if(e){ e.stop();}
if($('sl')){
$('sl').dispose();
lbinit = false;
if($('video-player-story')) $('video-player-story').setStyle('visibility', 'visible');
}
var bl = new Element('div', {
'id':'bl'
}).inject($(document.body),'top');
new Request({url:'/membership/aj/member-signup.htm',evalScripts:true,
onSuccess: function(responseHTML) {
// Lightbox shows up
trackOmnitureMembership("event3");
var sl = new Element('div', {
'html':responseHTML,
'id':'sl'
}).inject($(document.body),'top');
if($('video-player-story')) $('video-player-story').setStyle('visibility', 'hidden');
lightboxjs.positionBox();
lightboxjs.buildForm();
}
}).send();
});
},
buildForm: function() {
fc = new FormCheck('sl-form');
$each($$('.sl-select-replace'), function(el, idx){
lightboxjs.replaceSelect(el, idx);
});
$each($$('.sl-checkbox-replace'), function(el, idx){
lightboxjs.replaceCheckbox(el);
});
$each($$('.sl-radiobutton-replace'), function(el, idx){
lightboxjs.replaceRadioButton(el);
});
$('sl-close').addEvent('click', function(e){
e.stop();
$('bl').dispose();
lbinit = false;
$('sl').dispose();
$each($$('.fc-tbx'), function(el){
el.dispose();
});
if($('video-player-story')) $('video-player-story').setStyle('visibility', 'visible');
})
},
positionBox:function(){
if($('sl')){
scrollToElement(document.body);
var windowScrollSize = $(document.window).getScrollSize();
var windowSize = $(document.window).getSize();
var boxSize = $('sl').getSize();
var topBox = (windowSize.y - boxSize.y)/2;
var leftBox = (windowSize.x - boxSize.x)/2;
$('sl').setStyles({
top:topBox,
left:leftBox
});
$('bl').setStyles({
width:windowScrollSize.x,
height:windowScrollSize.y
});
}
},
toggleList: function(el){
var list = el.getParent().getElement('ul.sl-select-list');
list.fade();
},
replaceCheckbox: function(el){
if(el.getProperty('checked')) el.getParent().addClass('sl-valid');
var span = new Element('span').inject(el.getParent());
el.getParent().addEvent('click', function(){
if(this.hasClass('sl-valid')){
this.removeClass('sl-valid')
el.setProperty('checked', false);
}else{
this.addClass('sl-valid');
el.setProperty('checked', true);
}
})
},
replaceRadioButton: function(el){
if(el.getProperty('checked')) el.getParent().addClass('sl-valid');
var span = new Element('span').inject(el.getParent());
el.getParent().addEvent('click', function(){
if(!this.hasClass('sl-valid')){
this.addClass('sl-valid');
el.setProperty('checked', true);
var currentVal = el.get('value');
var currentName = el.get('name');
$each($$('.sl-radiobutton-replace[name='+currentName+']'), function(el, idx){
if(currentVal != el.get('value')){
el.getParent().removeClass('sl-valid');
el.setProperty('checked', false);
}
});
}
})
},
replaceSelect: function(el, idx){
var select = el;
var ul = new Element('ul', {
'class': 'sl-select-list',
'styles': {
'z-index': (100 - idx)
}
});
$each(select.getElements('option'), function(el, idx){
if(idx == 0){
var p = new Element('p', {
'text': el.get('text'),
'class': 'sl-select',
'events': {
'click': function(e){
lightboxjs.toggleList(this);
}
}
}).inject(select.getParent());
return;
}
var liClass;
if(el.hasClass('sl-select-head')) liClass = 'sl-select-head';
if(el.getProperty('selected')){
liClass = 'sl-selected';
select.getParent().getElement('p.sl-select').set('text', el.get('text'));
fc.validate(select);
}
var li = new Element('li', {
'text': el.get('text'),
'class': liClass,
'events': {
'click' : function(){
if(!el.hasClass('sl-select-head')){
if(ul.getElement('li.sl-selected')) ul.getElement('li.sl-selected').removeClass('sl-selected');
this.addClass('sl-selected');
select[idx].setProperty('selected', true)
select.getParent().getElement('p.sl-select').set('text', this.get('text'));
//Add country select check
if(select.id == 'user_country'){
toggleFields(select.id, 'sl-state');
}
ul.fade('hide');
fc.validate(select);
}
}
}
}).inject(ul);
});
ul.inject(el.getParent()).fade('hide');
}
}
window.addEvent('domready', lightboxjs.init);
window.addEvent('resize', lightboxjs.positionBox);
/*-------------------------------------------------------------------
MISC SITE FUNCTIONS
------------------------------------------------------------------- */
function switchTabs(activeTab, tabParent) {
var tabs = $(tabParent).getElements('li');
var panels = $(tabParent.getParent()).getElements('.box-content');
tabs.each(function(el, x){
tabs[x].removeClass('active');
panels[x].setStyle('display', 'none');
if(x == activeTab) {
tabs[x].addClass('active');
panels[x].setStyle('display', 'block');
}
});
}
/* tina: need to duplicate function for boxes that don't have a box-content class */
function switchTabs2(activeTab, tabParent) {
var tabs = $(tabParent).getElements('li');
var panels = $(tabParent.getParent()).getElements('.nil-box-content');
tabs.each(function(el, x){
tabs[x].removeClass('active');
panels[x].setStyle('display', 'none');
if(x == activeTab) {
tabs[x].addClass('active');
panels[x].setStyle('display', 'block');
}
});
}
function visibilite(el) {
if ($(el).getStyle('display') == 'none') {
$(el).setStyle('display', 'block');
} else {
$(el).setStyle('display', 'none');
}
}
function scrollToElement(target) {
var scrollFx = new Fx.Scroll(window, {duration:400}).toElement(target);
}
var footerClick, fLinks, fSlider;
function toggleFooter() {
var fToggler = $('toggle-footer');
if (!footerClick) {
fLinks = $('external-links').setStyle('display', 'block');
fSlider = new Fx.Slide(fLinks, {duration:800}).hide();
footerClick = true;
}
if (!fSlider.isVisible()) {
fToggler.set('text', 'Hide this section');
var footerHeight = fLinks.getStyle('height').toInt() + 30;
$('footer').setStyle('height', footerHeight+'px');
var fScroll = new Fx.Scroll(window).toBottom().chain(function(){
fSlider.toggle();
});
} else {
fToggler.set('text', 'Around SHEEP Indonesia Foundation');
$('footer').setStyle('height', 'auto');
fSlider.hide();
}
}
function showBlogBio(el) {
if($(el).getStyle('display') == 'none') {
$('expand-link').set('text', '[-] Hide bio');
} else {
$('expand-link').set('text', '[-] Read bio');
}
visibilite(el);
}
function snapshot(activeTab){
snapshotTabs = $('snapshot').getElements('li');
snapshotPanels = $('snapshot').getElements('p.clearfix');
snapshotTabs.each(function(el, x) {
snapshotTabs[x].removeClass('snapshot_selected');
snapshotPanels[x].setStyle('display', 'none');
if(snapshotTabs[x].id == activeTab.id) {
snapshotTabs[x].addClass('snapshot_selected');
snapshotPanels[x].setStyle('display', 'block');
}
});
}
function videoThumbText(msg){
var targetElement = $('video-thumb-display') ;
if (msg) {
targetElement.set('html', ''+msg+'');
} else {
targetElement.set('html', 'Latest videos on ZDNet Australia');
}
}
/*-------------------------------------------------------------------
SUCKERFISH
Replicate :hover pseudo class on any element for IE
------------------------------------------------------------------- */
function initStoryTools(){
if ($('story-tools')) {
suckerfish(sfHover, 'LI', 'story-tools');
}
}
function suckerfish(type, tag, parentId) {
if (window.attachEvent) {
window.attachEvent('onload', function() {
var sfEls = (parentId==null)?document.getElementsByTagName(tag):document.getElementById(parentId).getElementsByTagName(tag);
type(sfEls);
});
}
}
var sfHover = function(sfEls) {
for (var i=0; i35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('k s=f d({17:4(7,3){2.7=$(7);a(!2.7.1L(\'U\')){2.7.x(\'U\');2.9=[];2.8=[];2.M({H:d.g,D:d.g,16:d.g,13:d.g,14:".n",J:".u",15:1q,I:1i,R:0,w:"1j",A:"1k",z:"K",N:1H,p:1G},3);2.9=$(7).1b(2.3.14);2.8=$(7).1b(2.3.J);2.C();2.e(2.3.R);a(2.3.p)2.p();a(2.3.z!=\'K\')2.O(2.3.z);S 2}W S 1s},O:4(b){2.8.q(4(l,y){$(l).1u(b,4(){2.m.M(2.m.3,{Q:2.3.N});a(2.j!=y)2.e(y);2.18()}.1w(2))},2)},C:4(){2.m=f 1x.1y(2.9,{Q:2.3.I});2.9.q(4(n){n.t(\'B\',0)})},e:4(6){k b={};2.9.q(4(n,5){a(5==6&&5!=2.j){$(2.8[5]).X(2.3.A).x(2.3.w);b[5.11()]={\'B\':[1]}}W{$(2.8[5]).X(2.3.w).x(2.3.A);b[5.11()]={\'B\':[0]}}},2);2.h(\'13\',6);2.j=6;2.m.1E(b)},p:4(){2.C();2.12=2.E.1I(2.3.15,2);2.h(\'16\')},18:4(){1K(2.12);2.h(\'D\')},E:4(){v=2.j;T=(v+1>=2.9.1f)?0:v+1;2.e(T);2.h(\'H\')},1l:4(){$(2.3.o).t(\'L\',\'1m\');a(!$(2.3.o).1n())$(2.3.o).t(\'1r\',\'1t\')},1v:4(){$(2.3.o).t(\'L\',\'1A\')}});s.10(f 1B);s.10(f 1D);k 1F=s.1J({17:4(l,3){2.P(l,$1c({G:\'.1e\',V:\'F://i.i.r.r/1a.1d/i/Z/c/1g.Y\',19:\'F://i.i.r.r/1a.1d/i/Z/c/1z.Y\'},3))},e:4(6){2.8.q(4(u,5){$(u).1h(2.3.G).1o=(5==6)?2.3.V:2.3.19},2);2.P(6)}});k 1p=1C;',62,110,'||this|options|function|index|slideIndex|container|buttons|slides|if|action||Class|showSlide|new|empty|fireEvent||currentSlide|var|el|slideFx|slide|carouselContainer|autoplay|each|com|CNETcarousel|setStyle|button|current|buttonOnClass|addClass|idx|rotateAction|buttonOffClass|opacity|createFx|onStop|rotate|http|bubbleButtonBGImgSelector|onRotate|transitionDuration|buttonsSelector|none|visibility|setOptions|rotateActionDuration|setupAction|parent|duration|startIndex|return|next|hasCarousel|buttonOnGifSrc|else|removeClass|gif|fd|implement|toString|slideshowInt|onShowSlide|slidesSelector|slideInterval|onAutoPlay|initialize|stop|buttonOffGifSrc|cnwk|getElements|merge||bbg|length|green_button|getElement|500|selected|off|show|visible|isVisible|src|carousel|4000|display|false|block|addEvent|hide|bind|Fx|Elements|gray_button|hidden|Options|null|Events|start|CNETcarouselWithButtons|true|100|periodical|extend|clearInterval|hasClass'.split('|'),0,{}))
/*-------------------------------------------------------------------
SIMPLESLIDE.JS
http://tobiaswallin.com/files/SlideShow/documentation.php
------------------------------------------------------------------- */
eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('a W=j L({X:8(5,7){4.5=5;4.7=7;6(4.7.n=="M"||4.7.n=="C"){a o;4.o=4.D.N(4.7.O,4,$(4.5))}b{4.D($(4.5))}},D:8(5){a f;6(4.7)f=4.7.f;b f="A";a 3;6(4.7.d){a d=4.7.d.K();d-=1}a 9=5.c().c()[0];9.r(8(e){6(e.i=="s"){3=e}});6(d||d==0){6(5.c()[0].c()[d])3=5.c()[0].c()[d];b P("Q "+d+" R S T")}b{6(!3){6(f=="A"){3=9[0].w()}b 6(f=="H"){3=5.c()[0].F()}}b{6(f=="A"){a t=5.c()[0].F();6(t==3.w()&&4.7.n=="C")$I(4.o);6(t==3)3=9[0];b 3=3.w()}b 6(f=="H"){a E=5.c()[0].V();6(E==3.J()&&4.7.n=="C")$I(4.o);6(E==3)3=5.c()[0].F();b 3=3.J()}}}6(3){6(4.7.G=="l")4.l(5,9,3);b 6(4.7.G=="h")4.h(5,9,3);b 6(4.7.G=="v")4.v(5,9,3)}},l:8(5,9,3){a l=j k.u(5,{g:4.7.g,m:8(){9.r(8(e){e.i=""});3.i="s"}}).x(3)},h:8(5,9,3){a h=j k.y(5,\'z\',{g:4.7.g,m:8(){j k.u(5,{g:1,m:8(){9.r(8(e){e.i=""});3.i="s";j k.y(5,\'z\').q(0.p,1)}}).x(3)}});h.q(1,0.p)},v:8(5,9,3){a B=4.7.g.K();a h=j k.y(5,\'z\',{g:(B/2)});h.q(1,0.p).U(8(){h.q(0.p,1)});j k.u(5,{g:B,m:8(){9.r(8(e){e.i=""});3.i="s"}}).x(3)}});',60,60,'|||child|this|container|if|options|function|children|var|else|getChildren|goTo||direction|duration|fade|id|new|Fx|scroll|onComplete|auto|automated|01|start|each|currentChild|lastElement|Scroll|scrollfade|getNext|toElement|Style|opacity|forward|durationInt|once|slider|firstElement|getLast|type|back|clear|getPrevious|toInt|Class|loop|periodical|time|alert|Slide|does|not|exist|chain|getFirst|SimpleSlide|initialize'.split('|'),0,{}))
/*-------------------------------------------------------------------
PLUGIN EXTENSIONS
------------------------------------------------------------------- */
Fx.Slide.implement({
isVisible: function() {
return (this.wrapper.offsetHeight == 0 || this.wrapper.offsetWidth == 0) ? false: true;
}
});
/*-------------------------------------------------------------------
FORM CHECK
------------------------------------------------------------------- */
var FormCheck = new Class({
Implements: [Options, Events],
options : {
tipsClass: 'fc-tbx', //tips error class
errorClass: 'fc-error', //div error class
fieldErrorClass: 'fc-field-error', //error class for elements
trimValue : true, //trim (remove whitespaces before and after) the value
submitByAjax : true, //false : standard submit way, true : submit by ajax
ajaxResponseDiv : 'sl', //element to inject ajax response into (can also use onAjaxSuccess) [cronix]
ajaxEvalScripts : false, //use evalScripts in the Request response [cronix]
onAjaxRequest : $empty, //Function to fire when the Request event starts
onAjaxSuccess : $empty, //Function to fire when the Request receives . Args: response [the request response] - see Mootools docs for Request.onSuccess
onAjaxFailure : $empty, //Function to fire if the Request fails
display : {
showErrors : 1,
titlesInsteadNames : 0,
errorsLocation : 1,
indicateErrors : 1,
keepFocusOnError : 0,
checkValueIfEmpty : 0,
addClassErrorToField : 0,
fixPngForIe : 1,
replaceTipsEffect : 1,
flashTips : 0,
closeTipsButton : 1,
tipsPosition : "right",
tipsOffsetX : -45,
tipsOffsetY : 0,
listErrorsAtTop : false,
scrollToFirst : true,
fadeDuration : 300
},
alerts : {
submit: "There was an error during registration. Please try again.",
required: "This field is required.",
alpha: "This field accepts alphabetic characters only.",
alphanum: "This field accepts alphanumeric characters only.",
nodigit: "No digits are accepted.",
digit: "Please enter a valid integer.",
digitltd: "The value must be between %0 and %1",
number: "Please enter a valid number.",
email: "Please enter a valid email.",
phone: "Please enter a valid phone.",
url: "Please enter a valid url.",
confirm: "This field is different from %0",
differs: "This value must be different of %0",
length_str: "The length is incorrect, it must be between %0 and %1",
length_fix: "The length is incorrect, it must be exactly %0 characters",
lengthmax: "The length is incorrect, it must be at max %0",
lengthmin: "The length is incorrect, it must be at least %0",
checkbox: "Please check the box",
radios: "Please select a radio",
select: "Please choose a value",
username_invalid: "Username not available or invalid, please choose another.",
email_invalid: "Email not available or invalid, please choose another.",
email_registered: "Email has already been registered, please choose another.",
mobile_update: "Please supply a mobile number."
},
regexp : {
required : /[^.*]/,
alpha : /^([a-z ._-]+|.{0})$/i,
alphanum : /^([a-z0-9 ._-]+|.{0})$/i,
digit : /^([-+]?[0-9]+|.{0})$/,
nodigit : /^([^0-9]+|.{0})$/,
number : /^([-+]?\d*\.?\d+|.{0})$/,
email : /^([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}|.{0})$/i,
phone : /^([\d\s ().-]+|.{0})$/,
url : /^((http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&%\$#\=~])*|.{0})$/i
}
},
/*
Constructor: initialize
Constructor
Add event on formular and perform some stuff, you now, like settings, ...
*/
initialize : function(form, options) {
if (this.form = $(form)) {
this.form.isValid = true;
this.regex = ['length'];
this.setOptions(options);
//internalization
if (typeof(formcheckLanguage) != 'undefined') this.options.alerts = formcheckLanguage;
this.validations = [];
this.alreadyIndicated = false;
this.firstError = false;
var regex = new Hash(this.options.regexp);
regex.each(function(el, key) {
this.regex.push(key);
}, this);
this.form.getElements("*[class*=validate]").each(function(el) {
el.validation = [];
var classes = el.getProperty("class").split(' ');
classes.each(function(classX) {
if(classX.match(/^validate(\[.+\])$/)) {
var validators = eval(classX.match(/^validate(\[.+\])$/)[1]);
for(var i = 0; i < validators.length; i++) {
el.validation.push(validators[i]);
}
this.register(el);
}
}, this);
}, this);
this.form.addEvents({
"submit": this.onSubmit.bind(this)
});
if(this.options.display.fixPngForIe) this.fixIeStuffs();
document.addEvent('mousewheel', function(){
this.isScrolling = false;
}.bind(this));
}
},
/*
Function: register
Private method
Add listener on fields
*/
register : function(el) {
this.validations.push(el);
el.errors = [];
if (el.validation[0] == 'submit') {
el.addEvent('click', function(e){
this.onSubmit(e);
}.bind(this));
return true;
}
if (this.isChildType(el) == false) el.addEvent('blur', function(e) {
if((el.element || this.options.display.showErrors == 1) && (this.options.display.checkValueIfEmpty || el.value)) this.manageError(el, 'blur');
}.bind(this))
//We manage errors on radio
else if (this.isChildType(el) == true) {
//We get all radio from the same group and add a blur option
var nlButtonGroup = this.form.getElements('input[name="'+ el.getProperty("name") +'"]');
nlButtonGroup.each(function(radio){
radio.addEvent('blur', function(){
if((el.element || this.options.display.showErrors == 1) && (this.options.display.checkValueIfEmpty || el.value)) this.manageError(el, 'click');
}.bind(this))
},this);
}
},
/*
Function: validate
Private method
Dispatch check to other methods
*/
validate : function(el) {
el.errors = [];
el.isOk = true;
if (this.options.trimValue && el.value != null ) el.value = el.value.trim();
//On valide l'lment qui n'est pas un radio ni checkbox
el.validation.each(function(rule) {
if(this.isChildType(el)) {
if (this.validateGroup(el) == false) {
el.isOk = false;
}
} else {
var ruleArgs = [];
if(rule.match(/^.+\[/)) {
var ruleMethod = rule.split('[')[0];
ruleArgs = eval(rule.match(/^.+(\[.+\])$/)[1].replace(/([A-Z\._]+)/i, "'$1'"));
} else var ruleMethod = rule;
if (this.regex.contains(ruleMethod) && el.get('tag') != "select") {
if (this.validateRegex(el, ruleMethod, ruleArgs) == false) {
el.isOk = false;
}
}
if (ruleMethod == 'confirm') {
if (this.validateConfirm(el, ruleArgs) == false) {
el.isOk = false;
}
}
if (ruleMethod == 'differs') {
if (this.validateDiffers(el, ruleArgs) == false) {
el.isOk = false;
}
}
if (el.get('tag') == "select" || (el.type == "checkbox" && ruleMethod == 'required')) {
//Do extra checking that country is Australia before making state mandatory
if(el.id == 'user_state')
{
var i = $('user_country').selectedIndex;
if ($('user_country').options[i].text == 'Australia')
{
if (this.simpleValidate(el) == false) {
el.isOk = false;
}
}
//Make sure others are mandatory
} else {
if (this.simpleValidate(el) == false) {
el.isOk = false;
}
}
}
if(ruleMethod == 'username_availability'){
if(el.value != ""){
var username_status = memberCheckName();
if(username_status == '0'){
el.errors.push(this.options.alerts.username_invalid);
el.isOk = false;
}
}else{
el.isOk = false;
}
}
if(ruleMethod == 'email_availability'){
if(el.value != ""){
var email_status = memberCheckEmail();
if(email_status == '0'){
el.errors.push(this.options.alerts.email_invalid);
el.isOk = false;
}else if(email_status == '-1'){
el.errors.push(this.options.alerts.email_registered);
el.isOk = false;
}
}else{
el.isOk = false;
}
}
if(ruleMethod == 'user_mobile'){
if(el.checked == true){
if(this.validateRegex($('user_mobile'), 'required', false) == false){
el.errors.push(this.options.alerts.mobile_update);
$('user_mobile').getParent().addClass('sl-error');
el.isOk = false;
}
}
}
}
}, this);
if (el.isOk){
el.getParent().removeClass('sl-error');
//Only highlight correct when really checking for values
if(el.value != "") {
el.getParent().addClass('sl-valid');
}
return true;
}else {
el.getParent().removeClass('sl-valid');
el.getParent().addClass('sl-error');
return false;
}
},
/*
Function: simpleValidate
Private method
Perform simple check for select fields and checkboxes
*/
simpleValidate : function(el) {
if (el.get('tag') == 'select' && (el.options[el.selectedIndex].text == el.options[0].text)) {
el.errors.push(this.options.alerts.select);
return false;
} else if (el.type == "checkbox" && el.checked == false) {
el.errors.push(this.options.alerts.checkbox);
return false;
}
return true;
},
/*
Function: validateRegex
Private method
Perform regex validations
*/
validateRegex : function(el, ruleMethod, ruleArgs) {
var msg = "";
if (ruleArgs[1] && ruleMethod == 'length') {
if (ruleArgs[1] == -1) {
this.options.regexp.length = new RegExp("^[\\s\\S]{"+ ruleArgs[0] +",}$");
msg = this.options.alerts.lengthmin.replace("%0",ruleArgs[0]);
} else if(ruleArgs[0] == ruleArgs[1]) {
this.options.regexp.length = new RegExp("^[\\s\\S]{"+ ruleArgs[0] +"}$");
msg = this.options.alerts.length_fix.replace("%0",ruleArgs[0]);
} else {
this.options.regexp.length = new RegExp("^[\\s\\S]{"+ ruleArgs[0] +","+ ruleArgs[1] +"}$");
msg = this.options.alerts.length_str.replace("%0",ruleArgs[0]).replace("%1",ruleArgs[1]);
}
} else if (ruleArgs[0] && ruleMethod == 'length') {
this.options.regexp.length = new RegExp("^.{0,"+ ruleArgs[0] +"}$");
msg = this.options.alerts.lengthmax.replace("%0",ruleArgs[0]);
} else {
msg = this.options.alerts[ruleMethod];
}
if (ruleArgs[1] && ruleMethod == 'digit') {
var regres = true;
if (!this.options.regexp.digit.test(el.value)) {
el.errors.push(this.options.alerts[ruleMethod]);
regres = false;
}
if (ruleArgs[1] == -1) {
if (el.value >= ruleArgs[0]) var valueres = true; else var valueres = false;
msg = this.options.alerts.digitmin.replace("%0",ruleArgs[0]);
} else {
if (el.value >= ruleArgs[0] && el.value <= ruleArgs[1]) var valueres = true; else var valueres = false;
msg = this.options.alerts.digitltd.replace("%0",ruleArgs[0]).replace("%1",ruleArgs[1]);
}
if (regres == false || valueres == false) {
el.errors.push(msg);
return false;
}
} else if (this.options.regexp[ruleMethod].test(el.value) == false) {
el.errors.push(msg);
return false;
}
return true;
},
/*
Function: validateConfirm
Private method
Perform confirm validations
*/
validateConfirm: function(el,ruleArgs) {
if (el.validation.contains('required') == false) {
el.validation.push('required');
}
var confirm = ruleArgs[0];
if(el.value != this.form[confirm].value){
if (this.options.display.titlesInsteadNames)
var msg = this.options.alerts.confirm.replace("%0",this.form[confirm].getProperty('title'));
else
var msg = this.options.alerts.confirm.replace("%0",confirm);
el.errors.push(msg);
return false;
}
return true;
},
/*
Function: validateDiffers
Private method
Perform differs validations
*/
validateDiffers: function(el,ruleArgs) {
var differs = ruleArgs[0];
if(el.value == this.form[differs].value){
if (this.options.display.titlesInsteadNames)
var msg = this.options.alerts.differs.replace("%0",this.form[differs].getProperty('title'));
else
var msg = this.options.alerts.differs.replace("%0",differs);
el.errors.push(msg);
return false;
}
return true;
},
/*
Function: isChildType
Private method
Determine if the field is a group of radio or not.
*/
isChildType: function(el) {
var elType = el.type.toLowerCase();
if((elType == "radio")) return true;
return false;
},
/*
Function: validateGroup
Private method
Perform radios validations
*/
validateGroup : function(el) {
el.errors = [];
var nlButtonGroup = this.form[el.getProperty("name")];
el.group = nlButtonGroup;
var cbCheckeds = false;
for(var i = 0; i < nlButtonGroup.length; i++) {
if(nlButtonGroup[i].checked) {
cbCheckeds = true;
}
}
if(cbCheckeds == false) {
el.errors.push(this.options.alerts.radios);
return false;
} else {
return true;
}
},
/*
Function: listErrorsAtTop
Private method
Display errors
*/
listErrorsAtTop : function(obj) {
if(!this.form.element) {
this.form.element = new Element('div', {'id' : 'errorlist', 'class' : this.options.errorClass}).injectTop(this.form);
}
if ($type(obj) == 'collection') {
new Element('p').set('html',"" + obj[0].name + " : " + obj[0].errors[0]).injectInside(this.form.element);
} else {
if ((obj.validation.contains('required') && obj.errors.length > 0) || (obj.errors.length > 0 && obj.value && obj.validation.contains('required') == false)) {
obj.errors.each(function(error) {
new Element('p').set('html',"" + obj.name + " : " + error).injectInside(this.form.element);
}, this);
}
}
},
/*
Function: manageError
Private method
Manage display of errors boxes
*/
manageError : function(el, method) {
var isValid = this.validate(el);
if ((!isValid && el.validation.contains('required')) || (!el.validation.contains('required') && el.value && !isValid)) {
if(this.options.display.listErrorsAtTop == true && method == 'submit') {
this.listErrorsAtTop(el, method);
}
if (this.options.display.indicateErrors == 2 ||this.alreadyIndicated == false || el.name == this.alreadyIndicated.name)
{
if(!this.firstError) this.firstError = el;
this.alreadyIndicated = el;
if (this.options.display.keepFocusOnError && el.name == this.firstError.name) (function(){el.focus()}).delay(20);
this.addError(el);
return false;
}
} else if ((isValid || (!el.validation.contains('required') && !el.value)) && el.element) {
this.removeError(el);
return true;
}
return true;
},
/*
Function: addError
Private method
Add error message
*/
addError : function(obj) {
if(!obj.element && this.options.display.indicateErrors != 0) {
if (this.options.display.errorsLocation == 1) {
var pos = (this.options.display.tipsPosition == 'left') ? obj.getCoordinates().left : obj.getCoordinates().right;
var options = {
'opacity' : 0,
'position' : 'absolute',
'float' : 'left',
'z-index' : '9999',
'left' : pos + this.options.display.tipsOffsetX
}
obj.element = new Element('div', {'class' : this.options.tipsClass, 'styles' : options}).injectInside(document.body);
this.addPositionEvent(obj);
} else if (this.options.display.errorsLocation == 2){
obj.element = new Element('div', {'class' : this.options.errorClass, 'styles' : {'opacity' : 0}}).injectBefore(obj);
} else if (this.options.display.errorsLocation == 3){
obj.element = new Element('div', {'class' : this.options.errorClass, 'styles' : {'opacity' : 0}});
if ($type(obj.group) == 'object' || $type(obj.group) == 'collection')
obj.element.injectAfter(obj.group[obj.group.length-1]);
else
obj.element.injectAfter(obj);
}
}
if (obj.element) {
obj.element.empty();
if (this.options.display.errorsLocation == 1) {
var errors = [];
obj.errors.each(function(error) {
errors.push(new Element('p').set('html', error));
});
var tips = this.makeTips(errors).injectInside(obj.element);
if(this.options.display.closeTipsButton) {
tips.getElements('a.close').addEvent('mouseup', function(){
this.removeError(obj);
}.bind(this));
}
obj.element.setStyle('top', obj.getCoordinates().top - tips.getCoordinates().height + this.options.display.tipsOffsetY);
} else {
obj.errors.each(function(error) {
new Element('p').set('html',error).injectInside(obj.element);
});
}
if (!Browser.Engine.trident5 && obj.element.getStyle('opacity') == 0)
new Fx.Morph(obj.element, {'duration' : this.options.display.fadeDuration}).start({'opacity':[1]});
else
obj.element.setStyle('opacity', 1);
}
/*
if (this.options.display.addClassErrorToField && this.isChildType(obj) == false)
{
obj.addClass(this.options.fieldErrorClass);
}*/
},
/*
Function: addPositionEvent
Update tips position after a browser resize
*/
addPositionEvent : function(obj) {
if(this.options.display.replaceTipsEffect) {
obj.event = function(){
new Fx.Morph(obj.element, {
'duration' : this.options.display.fadeDuration
}).start({
'left':[obj.element.getStyle('left'), obj.getCoordinates().right + this.options.display.tipsOffsetX],
'top':[obj.element.getStyle('top'), obj.getCoordinates().top - obj.element.getCoordinates().height + this.options.display.tipsOffsetY]
});
}.bind(this);
} else {
obj.event = function(){
obj.element.setStyles({
'left':obj.getCoordinates().right + this.options.display.tipsOffsetX,
'top':obj.getCoordinates().top - obj.element.getCoordinates().height + this.options.display.tipsOffsetY
});
}.bind(this)
}
window.addEvent('resize', obj.event);
},
/*
Function: removeError
Private method
Remove the error display
*/
removeError : function(obj) {
this.firstError = false;
this.alreadyIndicated = false;
obj.errors = [];
obj.isOK = true;
window.removeEvent('resize', obj.event);
if (this.options.display.errorsLocation == 2)
new Fx.Morph(obj.element, {'duration' : this.options.display.fadeDuration}).start({ 'height':[0] });
if (!Browser.Engine.trident5) {
new Fx.Morph(obj.element, {
'duration' : this.options.display.fadeDuration,
'onComplete' : function() {
if (obj.element) {
obj.element.destroy();
obj.element = false;
}
}.bind(this)
}).start({ 'opacity':[1,0] });
} else {
obj.element.destroy();
obj.element = false;
}
if (this.options.display.addClassErrorToField && !this.isChildType(obj))
{
obj.removeClass(this.options.fieldErrorClass);
}
},
/*
Function: focusOnError
Private method
Create set the focus to the first field with an error if needed
*/
focusOnError : function (obj) {
if (this.options.display.scrollToFirst && !this.alreadyFocused && !this.isScrolling) {
if (this.alreadyIndicated.element) {
switch (this.options.display.errorsLocation){
case 1 :
var dest = obj.element.getCoordinates().top;
break;
case 2 :
var dest = obj.element.getCoordinates().top-30;
break;
case 3 :
var dest = obj.getCoordinates().top-30;
break;
}
this.isScrolling = true;
} else if (!this.options.display.indicateErrors) {
var dest = obj.getCoordinates().top-30;
}
/*if (window.getScroll.y != dest) {
new Fx.Scroll(window, {
onComplete : function() {
this.isScrolling = false;
obj.focus();
}.bind(this)
}).start(0,dest);
} else {
this.isScrolling = false;
obj.focus();
}*/
this.alreadyFocused = true;
}
},
/*
Function: fixIeStuffs
Private method
Fix png for IE6
*/
fixIeStuffs : function () {
if (Browser.Engine.trident4) {
//We fix png stuffs
var rpng = new RegExp('url\\(([\.a-zA-Z0-9_/:-]+\.png)\\)');
var search = new RegExp('(.+)formcheck\.css');
for (var i = 0; i < document.styleSheets.length; i++){
if (document.styleSheets[i].href.match(/formcheck\.css$/)) {
var root = document.styleSheets[i].href.replace(search, '$1');
var count = document.styleSheets[i].rules.length;
for (var j = 0; j < count; j++){
var cssstyle = document.styleSheets[i].rules[j].style;
var bgimage = root + cssstyle.backgroundImage.replace(rpng, '$1');
if (bgimage && bgimage.match(/\.png/i)){
var scale = (cssstyle.backgroundRepeat == 'no-repeat') ? 'crop' : 'scale';
cssstyle.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, src=\'' + bgimage + '\', sizingMethod=\''+ scale +'\')';
cssstyle.backgroundImage = "none";
}
}
}
}
}
},
/*
Function: makeTips
Private method
Create tips boxes
*/
makeTips : function(txt) {
var table = new Element('table');
table.cellPadding ='0';
table.cellSpacing ='0';
table.border ='0';
var tbody = new Element('tbody').injectInside(table);
var tr1 = new Element('tr').injectInside(tbody);
new Element('td', {'class' : 'tl'}).injectInside(tr1);
new Element('td', {'class' : 't'}).injectInside(tr1);
new Element('td', {'class' : 'tr'}).injectInside(tr1);
var tr2 = new Element('tr').injectInside(tbody);
new Element('td', {'class' : 'l'}).injectInside(tr2);
var cont = new Element('td', {'class' : 'c'}).injectInside(tr2);
var errors = new Element('div', {'class' : 'err'}).injectInside(cont);
txt.each(function(error) {
error.injectInside(errors);
});
if (this.options.display.closeTipsButton) new Element('a',{'class' : 'close'}).injectInside(cont);
// new Element('div', {'style' : "clear:both"}).injectInside(cont);
new Element('td', {'class' : 'r'}).injectInside(tr2);
var tr3 = new Element('tr').injectInside(tbody);
new Element('td', {'class' : 'bl'}).injectInside(tr3);
new Element('td', {'class' : 'b'}).injectInside(tr3);
new Element('td', {'class' : 'br'}).injectInside(tr3);
return table;
},
/*
Function: reinitialize
Private method
Reinitialize form before submit check
*/
reinitialize: function() {
this.validations.each(function(el) {
if (el.element) {
el.errors = [];
el.isOK = true;
if(this.options.display.flashTips == 1) {
el.element.destroy();
el.element = false;
}
}
}, this);
if (this.form.element) this.form.element.empty();
this.alreadyFocused = false;
this.firstError = false;
this.alreadyIndicated = false;
this.form.isValid = true;
},
/*
Function: submitByAjax
Private method
Send the form by ajax, and replace the form with response
*/
submitByAjax: function() {
var url = this.form.getProperty('action');
var submission_type = $('fh_controller').value;
if(submission_type == 'ajnew_member') {
$('sl-submit').set('text', 'Registering');
} else {
$('sl-submit').set('text', 'Updating Profile');
}
this.fireEvent('ajaxRequest');
new Request({
url: url,
method: this.form.getProperty('method'),
data : this.form.toQueryString(),
evalScripts: this.options.ajaxEvalScripts,
onFailure: function(instance){
this.fireEvent('ajaxFailure', instance);
}.bind(this),
onSuccess: function(result){
this.fireEvent('ajaxSuccess', result);
if(this.options.ajaxResponseDiv){
var response = result.split("");
if(response[0] != "1"){
//Set that an error occurred
$('sl-submit').errors.push(this.options.alerts.submit);
this.addError($('sl-submit'));
if(submission_type == 'ajnew_member') {
$('sl-submit').set('text', 'Join Now');
} else {
$('sl-submit').set('text', 'Update my profile');
}
}else{
if(submission_type == 'ajnew_member') {
// Registration successful
trackOmnitureMembership("event4");
$(this.options.ajaxResponseDiv).set('html', response[2]);
lightboxjs.buildForm();
//Update login
$('login-button-text').innerHTML = 'Login';
$('ajres').innerHTML = response[1];
$('flogin').style.display = 'none';
$('ajres').style.display = 'block';
} else {
//Successful URS update
trackOmnitureMembership("event35");
$(this.options.ajaxResponseDiv).set('html', response[1]);
}
//Add event on close button
$('sl-close').addEvent('click', function(e){
e.stop();
$('bl').dispose();
$('sl').dispose();
$each($$('.fc-tbx'), function(el){
el.dispose();
});
});
}
}
}.bind(this)
}).send();
},
/*
Function: onSubmit
Private method
Perform check on submit action
*/
onSubmit: function(event) {
new Event(event).stop();
this.reinitialize();
this.validations.each(function(el) {
if(!this.manageError(el,'submit')) this.form.isValid = false;
}, this);
(this.form.isValid) ? ((this.options.submitByAjax) ? this.submitByAjax() : this.form.submit()) : this.focusOnError(this.firstError);
}
});