/* CUSTOM FORM ELEMENTS Created by Ryan Fait www.ryanfait.com Modified by Joel Nagy, to work with mootools addEvent // NOTE: IF POSSIBLE CHANGE "styled" to a new className as "styled" causes problems with certain browsers that requires extra JS to repair */ var checkboxHeight = "15"; var radioHeight = "25"; var selectWidth = "288"; /* No need to change anything after this */ document.write(''); var TAB_KEY = '9'; var SPACE_KEY = '32'; function getKey(e) { var evt = e || window.event; return evt.keyCode? evt.keyCode: evt.charCode; } var Custom = { init: function() { var inputs = document.getElementsByTagName("input"), span = Array(), textnode, option, active; for(a = 0; a < inputs.length; a++) { if((inputs[a].type == "checkbox" || inputs[a].type == "radio") && inputs[a].className.indexOf("styled") >= 0) { span[a] = document.createElement("span"); span[a].className = inputs[a].type; span[a].id = '__'+inputs[a].id; if(inputs[a].checked == true) { if(inputs[a].type == "checkbox") { position = "0 -" + (checkboxHeight*2) + "px"; span[a].style.backgroundPosition = position; } else { position = "0 -" + (radioHeight*2) + "px"; span[a].style.backgroundPosition = position; } } inputs[a].parentNode.insertBefore(span[a], inputs[a]); $(inputs[a]).addEvent('change', Custom.clear); $(inputs[a]).addEvent('keypress', function (e) { var g = getKey(e); if (g == SPACE_KEY) { Custom.check(null, this); $(this).checked = !$(this).checked; clickr(); } }); // if tab ignore //$(inputs[a]).addEvent('focus', function () { Custom.xfocus(null, this); }); //$(inputs[a]).addEvent('blur ', function () { Custom.xblur(null, this); }); //$(span[a]).addEvent('focus', Custom.xfocus); //$(span[a]).addEvent('blur ', Custom.xblur); $(span[a]).addEvent('mousedown', Custom.pushed); $(span[a]).addEvent('mouseup', Custom.check); $(document).addEvent('mouseup', Custom.clear); $(span[a]).addEvent('mouseup', clickr); } } inputs = document.getElementsByTagName("select"); for(a = 0; a < inputs.length; a++) { if(inputs[a].className.indexOf("styled") >= 0) { option = inputs[a].getElementsByTagName("option"); active = option[0].childNodes[0].nodeValue; textnode = document.createTextNode(active); for(b = 0; b < option.length; b++) { if(option[b].selected == true) { textnode = document.createTextNode(option[b].childNodes[0].nodeValue); } } span[a] = document.createElement("span"); span[a].className = "select"; span[a].id = "select" + inputs[a].name; span[a].appendChild(textnode); inputs[a].parentNode.insertBefore(span[a], inputs[a]); inputs[a].onchange = Custom.choose; } } }, pushed: function() { element = this.nextSibling; if(element.checked == true && element.type == "checkbox") { this.style.backgroundPosition = "0 -" + checkboxHeight*3 + "px"; } else if(element.checked == true && element.type == "radio") { this.style.backgroundPosition = "0 -" + radioHeight*3 + "px"; } else if(element.checked != true && element.type == "checkbox") { this.style.backgroundPosition = "0 -" + checkboxHeight + "px"; } else { this.style.backgroundPosition = "0 -" + radioHeight + "px"; } }, check: function(e, element) { var self = null; if (element) { self = element.previousSibling; } else { element = this.nextSibling; self = this; } if(element.checked == true && element.type == "checkbox") { self.style.backgroundPosition = "0 0"; element.checked = false; } else { if(element.type == "checkbox") { self.style.backgroundPosition = "0 -" + checkboxHeight*2 + "px"; } else { self.style.backgroundPosition = "0 -" + radioHeight*2 + "px"; group = this.nextSibling.name; inputs = document.getElementsByTagName("input"); for(a = 0; a < inputs.length; a++) { if(inputs[a].name == group && inputs[a] != self.nextSibling) { inputs[a].previousSibling.style.backgroundPosition = "0 0"; } } } element.checked = true; } }, /* xfocus: function(e, element) { if (element) { self = element.previousSibling; } else { element = this.nextSibling; self = this; } var td = $(self).getParent('td'); if (td) td.style.border = '1px dotted #000'; }, xblur: function(e, element) { if (element) { self = element.previousSibling; } else { element = this.nextSibling; self = this; } var td = $(self).getParent('td'); if (td) self.style.border = '1px dotted transparent'; }, */ clear: function() { inputs = document.getElementsByTagName("input"); for(var b = 0; b < inputs.length; b++) { if(inputs[b].type == "checkbox" && inputs[b].checked == true && inputs[b].className.indexOf("styled") >= 0) { inputs[b].previousSibling.style.backgroundPosition = "0 -" + checkboxHeight*2 + "px"; } else if(inputs[b].type == "checkbox" && inputs[b].className.indexOf("styled") >= 0) { inputs[b].previousSibling.style.backgroundPosition = "0 0"; } else if(inputs[b].type == "radio" && inputs[b].checked == true && inputs[b].className.indexOf("styled") >= 0) { inputs[b].previousSibling.style.backgroundPosition = "0 -" + radioHeight*2 + "px"; } else if(inputs[b].type == "radio" && inputs[b].className.indexOf("styled") >= 0) { inputs[b].previousSibling.style.backgroundPosition = "0 0"; } } }, choose: function() { option = this.getElementsByTagName("option"); for(d = 0; d < option.length; d++) { if(option[d].selected == true) { document.getElementById("select" + this.name).childNodes[0].nodeValue = option[d].childNodes[0].nodeValue; } } } } //window.onload = Custom.init; window.addEvent('domready', function() { try { Custom.init(); } catch (e) { } }); //: domready()