/* Copyright (c) 2007 Author: Kristoffer Ahl, Spinit AB */ /* Namespace divider =================================================================================================*/ /* =MB.Common */ MB.createNamespace("Common"); MB.Common = function() { return { init : function() { MB.Common.Authentication.setFocusOnForm(); MB.Common.Authentication.initHijax(); MB.Common.Search.init(); MB.Common.TipInvitation.init(); } }; }(); MB.createNamespace("Common.Authentication"); MB.Common.Authentication = function() { return { handleError : function(message,target) { var div = document.getElementById("Auth-Error"); if (!div) { div = document.createElement("div"); div.setAttribute("id","Auth-Error"); } div.innerHTML = message; target.parentNode.insertBefore(div,target); var username = document.getElementById("UserName"); if (username && username.select && username.focus) { username.select(); username.focus(); } var password = document.getElementById("Password"); if (password) { password.value = ""; } }, validateAuthenication : function(response,form) { var data = response.data; if (data != null) { var isAuthenticated = data.getElementsByTagName("IsAuthenticated")[0]; if (isAuthenticated && isAuthenticated.firstChild) { isAuthenticated = MB.toBool(isAuthenticated.firstChild.nodeValue); } else { isAuthenticated = false; } if (isAuthenticated) { var action = data.getElementsByTagName("Action")[0]; if (action) action = action.firstChild.nodeValue; if (action) document.location.href = action; return true; } else { var error = data.getElementsByTagName("Error")[0]; if (error && error.firstChild) { MB.Common.Authentication.handleError(error.firstChild.nodeValue,form); } else if (error && error.nextSibling) { action = error.nextSibling; if (action) action = action.firstChild.nodeValue; if (action) document.location.href = action; } return false; } } }, initHijax : function() { if (!document.getElementById) return; if (!document.getElementById("Auth-Wrapper")) return; if (!document.getElementById("Auth-Form")) return; var form = document.getElementById("Auth-Form") if (!(form.className.indexOf("hijax") > -1)) return; var authWrapper = document.getElementById("Auth-Wrapper"); var button = MB.getElementsByClass("auth-submit",form,"input")[0]; var successHandler = function(response) { MB.UI.clearLoaders(); if (!MB.Common.Authentication.validateAuthenication(response,form)) { if (button != null) { button.value = button.initialValue; button.disabled = false; } } } var failureHandler = function(message) { if (!message) message = MB.Config.AnErrorOccured; if (button != null) { button.value = button.initialValue; button.disabled = false; } MB.UI.clearLoaders(); MB.Common.Authentication.handleError(message,form); } var beginRequestHandler = function(response) { var p = document.getElementById("Auth-Error"); if (p) p.parentNode.removeChild(p); if (button != null) { button.initialValue = button.value; button.value = MB.Config.Common.Authenticating; button.disabled = true; } MB.UI.attachLoader(authWrapper,null,"loader",MB.Config.LoaderImage,false,false); } var callback = new MB.Ajax.Callback(successHandler,failureHandler,beginRequestHandler); MB.Ajax.hijax("Auth-Form","submit",callback); }, setFocusOnForm : function() { if (!document.getElementById) return; var query = document.location.href; var first_control = document.getElementById("UserName") if (first_control && first_control.focus && query && query.indexOf("#") < 0) { first_control.focus(); } } }; }(); MB.createNamespace("Common.Search"); MB.Common.Search = function() { return { init : function() { var searchForm = document.getElementById("Search-Form"); var searchQuery = document.getElementById("Search-Query"); var searchOnEniro = document.getElementById("Search-On-Eniro"); var searchOnMyblock = document.getElementById("Search-On-Myblock"); if (!searchForm || !searchQuery || !searchOnEniro || !searchOnMyblock) return; var performSearchOnMyblock = searchForm.onsubmit; var performSearchOnEniro = function() { if (searchQuery.value && searchQuery.value.length > 0) { var win = window.open(MB.Config.Common.EniroSearchUrl+escape(searchQuery.value), "_blank"); if (win) { if (win.focus) win.focus(); return false; } win = null; } return false; } var toggleEvent = function() { if (searchOnEniro.checked === true) { searchForm.onsubmit = performSearchOnEniro; } else { searchForm.onsubmit = performSearchOnMyblock; } } MB.addEvent(searchOnEniro, "click", toggleEvent); MB.addEvent(searchOnMyblock, "click", toggleEvent); } }; }(); MB.createNamespace("Common.TipInvitation"); MB.Common.TipInvitation = function() { return { init : function() { var invite_multiple = document.getElementById("Invite-Multiple"); var recipient_name = document.getElementById("Recipient-Name"); if (invite_multiple && recipient_name) { invite_multiple.onclick = function() { recipient_name.parentNode.removeChild(recipient_name); this.parentNode.removeChild(this); return false; } } } }; }(); /* Namespace divider =================================================================================================*/ /* =MB.Components.Events */ MB.createNamespace("Components.Events"); MB.Components.Events = function() { var initNewEvents = function() { var containers = MB.getElementsByClass("components-events-add-edit-event",document,"div"); if (containers) { for (var i=0, il=containers.length; i0) { for (i=0, il=containers.length; i0) { for (j=0, jl=links.length; j0) { var collapsable, header, headerText, headerLink, linkDescription, content; for (var i=0; i1) { targetId = targetId.substr(1,targetId.length); var target = document.getElementById(targetId); if (target) { if (MB.hasClass(target,"expanded")) { MB.removeClass(header,"collapse"); MB.addClass(header,"expand"); linkDescription.innerHTML = " " + MB.Config.UI.ExpandCollapse.Expand; MB.removeClass(target,"expanded"); MB.addClass(target,"collapsed"); } else { MB.removeClass(header,"expand"); MB.addClass(header,"collapse"); linkDescription.innerHTML = " " + MB.Config.UI.ExpandCollapse.Collapse; MB.removeClass(target,"collapsed"); MB.addClass(target,"expanded"); } return false; } } } }; }(); /* Namespace divider =================================================================================================*/ /* =MB.Utilities */ // =TODO: Implement createLink function // =TODO: Implement createElement function MB.createNamespace("Utilities"); MB.Utilities = function() { var openNewWindow = function(e) { var event = (!e) ? window.event : e; if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) { return true; } else { var win = window.open(this.getAttribute("href"), "_blank"); if (win) { if (win.focus) win.focus(); return false; } win = null; return true; } } return { // =confirmActions confirmActions : function() { var elems = MB.getElementsByClass("confirm-action"); if (elems && elems.length>0) { for (var i=0; i0) { link = document.createElement("a"); link.setAttribute("href", "#"+header_id); link.appendChild(link_text); item = document.createElement("li"); item.appendChild(link); list.appendChild(item); } } return list; }, // =openLinksInNewWindow openLinksInNewWindow : function(attrib,value) { if (!attrib) { attrib = "class"; } var link; var links = document.getElementsByTagName("a"); if (links && links.length>0) { for (var i=0, ll=links.length; i 0) { for (var j=0; j 0); if (contains_errors && show_summary && summary_id) { buildSummary(form); } else { removeSummary(form); is_valid = true; } return !contains_errors; }; this.checkForErrors = function(element) { var errors = new Array(); var is_valid = true; var rules = element.className; var v = element.value; if (v && v.trim) v = v.trim(); if (rules.indexOf("required") > -1) { is_valid = (v.length > 0); if (is_valid) is_valid = (v != _default_value); if (!is_valid) { errors[errors.length] = element; } } if (rules.indexOf("checked") > -1) { is_valid = element.checked; if (!is_valid) { errors[errors.length] = element; } } if (rules.indexOf("number") > -1) { is_valid = !isNaN(v); if (!is_valid) { errors[errors.length] = element; } } if (errors.length > 0) { markAsError(element); } else { clearError(element); } return errors; }; this.setError = function(element,error_message) { markAsError(element); attatchTooltip(element,error_message); }; var buildSummary = function(form) { var summary = document.getElementById(summary_id); var error_list = document.getElementById(summary_list_id); if (!error_list || !summary) { if (!summary) { summary = document.createElement("div"); summary.setAttribute("id", summary_id); MB.addClass(summary, "validation-error"); } error_list = document.createElement("ol"); error_list.setAttribute("id", summary_list_id); if (summary_header) { summary.innerHTML = summary_header; } else { summary.innerHTML = ""; } summary.appendChild(error_list); form.parentNode.insertBefore(summary,form); } if (error_list) { if (error_list.childNodes.length>0) { do { error_list.removeChild(error_list.childNodes[0]); } while (error_list.childNodes.length > 0) } var i; if (server_error_list) { for (i=0; i)(?:\s*?)(?:.*?)(?:\s*?)<\/abbr(?:\s*?)>/g, "$1"); link.innerHTML = link_text; /* =BUG: Will not work the first time the link is clicked if an onblur event is triggered by another element that affects focus! */ link.onclick = function() { var target = getLinkTarget(this); if (!target) { return true; } else { target.focus() return false; } } li.appendChild(link); error_list.appendChild(li); break; } } } if (MB.hasClass(error,"not-visible")) { var span = document.createElement("span"); span.innerHTML = error.getAttribute("title"); li.appendChild(span); error_list.appendChild(li); } } } }; var removeSummary = function() { var summary = document.getElementById(summary_id); if (summary) summary.parentNode.removeChild(summary); }; var markAsError = function(element) { if (!element) return false; if (!element.className || element.className.indexOf(has_error_class) < 0) { MB.addClass(element,has_error_class); } }; var clearError = function(element) { if (!element) return false; if (!element.className) return false; var cls = new String(element.className); cls = cls.replace(has_error_class, ""); element.className = cls; }; var getLinkTarget = function(link) { var href = link.getAttribute("href"); if (!href) return null; var target_id = href.split("#")[1]; var target = document.getElementById(target_id); return target; }; } }; }(); /* Namespace divider =================================================================================================*/ /* =MB.Web.UI.WebControls.MessageManager */ MB.createNamespace("Web.UI.WebControls.MessageManager"); MB.Web.UI.WebControls.MessageManager = function() { var manager_class = "message-manager"; return { // =getManagerClass getManagerClass : function() { return manager_class; }, // =initManagers initManagers : function() { var managers = MB.getElementsByClass(manager_class,null,"div"); if (!managers) return true; for (var i=0; i 0) { for (var i=0; i 0) { var element = document.getElementById(tooltip); if (element) { element.parentNode.removeChild(element); } } }); } target.onblur = function() { if (target.changed) return true; var test; if (this.type == "checkbox") { test = (this.checked != this.defaultChecked); } else { test = (this.value != null && this.value.length > 0) || (this.initialValue != null && this.value != this.initialValue); } if (test) { MB.removeClass(this,"has-errors"); var message_node = link.parentNode; var message_collection; if (MB.hasClass(message_node.parentNode,"message-group")) { message_node = message_node.parentNode; message_count -= MB.getElementsByClass(negative_class,message_node,"li").length; message_count -= MB.getElementsByClass(neutral_class,message_node,"li").length; message_count -= MB.getElementsByClass(positive_class,message_node,"li").length; message_collection = message_node.parentNode; } else if (MB.hasClass(message_node.parentNode.parentNode,"message-group")) { message_node = message_node.parentNode.parentNode; message_count -= MB.getElementsByClass(negative_class,message_node,"li").length; message_count -= MB.getElementsByClass(neutral_class,message_node,"li").length; message_count -= MB.getElementsByClass(positive_class,message_node,"li").length; message_collection = message_node.parentNode.parentNode; } else { message_count--; message_collection = message_node.parentNode.parentNode; } message_node.style.display = "none"; if (message_count <= 0) { message_collection.style.display = "none"; target.onfocus = null; target.onblur = null; target.onkeydown = null; } target.changed = true; } var element = document.getElementById(tooltip); if (element) { element.parentNode.removeChild(element); } } }; } }; }(); MB.addEvent(window,"load",MB.UI.init); MB.addEvent(window,"load",MB.UI.ExpandCollapse.init); MB.addEvent(window,"load",MB.Utilities.confirmActions); MB.addEvent(window,"load",MB.Validation.initValidation); MB.addEvent(window,"load",MB.Web.UI.WebControls.MessageManager.initManagers); MB.addEvent(window,"load",MB.Common.init); MB.addEvent(window,"load",MB.Components.Events.init); MB.addEvent(window,"load",function() { _uacct = MB.Config.GoogleAnalyticsKey; if (typeof(urchinTracker) !== "undefined") { urchinTracker(); } });