// Copyright (c) Alexander Kirk 2006 var browser = null; var detect_browser = function () { // do some basic browser detection if (navigator.userAgent.indexOf("Safari") > 0) { browser = "safari"; } else if (navigator.product == "Gecko") { browser = "mozilla"; } else { browser = "ie"; } } detect_browser(); var resort = function () { var divs = document.getElementsByTagName("div"); var start = 200; var h; for (var i = 0; i < divs.length; i++) { if (divs[i].style.left != "560px") { continue; } divs[i].style.top = start + "px"; h = parseInt(divs[i].style.height); if (h < 55) h = 55; start += h + 10; } } var user_check = null, email_check = null, pw_check = null; var register_check = function (field) { var params = ""; switch (field) { case 'userid': if (user_check) { window.clearTimeout(user_check); } user_check = window.setTimeout('register_check_go("' + field + '")', 150); break; case 'email': if (email_check) { window.clearTimeout(email_check); } if ($('email').value != "") { email_check = window.setTimeout('register_check_go("' + field + '")', 150); } else { $('email_msg').innerHTML = ""; } break; case 'password': if (pw_check) { window.clearTimeout(pw_check); } pw_check = window.setTimeout('register_check_go("' + field + '")', 150); break; default: return false; } return true; } var register_check_go = function(field) { switch (field) { case 'userid': params = '&userid=' + document.getElementById(field).value; break; case 'email': if ($('email').value != "") { if (!$('email').value. match(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i)) { $('email_msg').innerHTML = 'seems to be incorrect.'; } else { $('email_msg').innerHTML = 'ok'; } } return true; break; case 'password': params = '&password=' + document.getElementById(field).value; params += '&password_c=' + document.getElementById(field + "_c").value; break; default: return false; } $(field + "_msg").innerHTML = ''; new Ajax.Updater(field + "_msg", '/register.php', { parameters: "check=1" + params }); } var global_zIndex = 10; var raise_zIndex = function (id) { global_zIndex = (global_zIndex < 10) ? 10 : global_zIndex + 1; document.getElementById("config_" + id).style.zIndex = global_zIndex; document.getElementById("config_" + id + "_handler").style.zIndex = global_zIndex; } var search_from_form = function () { search_page(document.getElementById("query").value, 1); return false; } var re_search = function () { search_page(query, page); } var search = function (q) { tabs_active(q, 1); search_page(q, 1); } var search_page = function (q, p) { document.getElementById("loading").style.display = "inline"; new Ajax.Request('/search.php', { parameters: 'query=' + q + '&page=' + p, method: 'get', onSuccess: search_response }); return false; } var save_close_timeout = null; var save_close_blummlet_state = function () { var v = document.getElementById("close_blummlet").checked ? 1 : 0; document.getElementById("loading_close_blummlet").style.display = "inline"; if (save_close_timeout) window.clearTimeout(save_close_timeout); document.getElementById("close_blummlet_status").innerHTML = ""; new Ajax.Request('/store.php', { parameters: 'close_blummlet=' + v, onSuccess: function (r) { document.getElementById("loading_close_blummlet").style.display = "none"; document.getElementById("close_blummlet_status").innerHTML = r.responseText; save_close_timeout = window.setTimeout('document.getElementById("close_blummlet_status").innerHTML = ""', 2000); } }); return false; } var next_hint = function () { document.getElementById("loading_next_hint").style.display = "inline"; new Ajax.Request('/config.php', { parameters: 'next_hint=1', onSuccess: function (r) { document.getElementById("loading_next_hint").style.display = "none"; document.getElementById("hint_text").innerHTML = r.responseText; } }); return false; } var tabs_active = function (w, p) { alltabs = new Array('__popular', '__score', '__all', '__random', '__own', '__new'); f = false; for (i = 0; i < alltabs.length; i++) { t = $(alltabs[i]); if (typeof(t) == 'undefined' || !t) { continue; } if (w == alltabs[i]) { t.className = 'active'; f = true; } else { t.className = ''; } } t = document.getElementById('other_query'); if (!f) { t.innerHTML = """ + w + """; t.style.display = "inline"; t.href = "javascript:void(search('" + w + "', " + p + "))"; t.className = 'active'; } else { t.className = ''; } } var search_response = function (req) { $("results").innerHTML = ""; m = req.responseText.match(//); if (m) { $("loading").style.display = "none"; //alert ("Sorry, nothing found..."); $("results").innerHTML = req.responseText; } else { divs = document.getElementsByTagName("div"); to_delete = new Array(); for (i = 0; i < divs.length; i++) { if (divs[i].style.left != "560px") { continue; } to_delete.push(divs[i].id); } for (i = 0; i < to_delete.length; i++) { e = $(to_delete[i]); e.parentNode.removeChild(e); } $("page").innerHTML = page; $("results").innerHTML += req.responseText; scripts = req.responseText.match(/]*>([^<]*)/g); if (scripts) { all_scripts = ""; for (i = 0; i < scripts.length; ++i) { all_scripts += scripts[i].substr(31); } eval(all_scripts); } } } var next_page = function () { search_page(query, page+1); } var prev_page = function () { if (page <= 1) { alert("You are already on the first page."); return false; } search_page(query, page-1); return true; } var types = new Array('link', 'info', 'image', 'rich'); var old_type = ''; var changed = true; var check_form = function(report) { switch_type(); type = get_type(); is_error = false; if (!report) { error = ""; errorCount = 0; o = document.getElementById("name"); if (o.title == o.value || o.value == "") { error += "\nTitle (can't be empty)"; errorCount++; } switch (type) { case "link": o = document.getElementById("code"); if (o.title == o.value) { error += "\nhref (can't be empty)"; errorCount++; } else if (o.value.substr(0, 7) != "http://" && o.value.substr(0, 11) != "javascript:") { error += "\nhref (need to specify http: or javascript:)"; errorCount++; } break; case "rich": o = document.getElementById("code"); if (o.title == o.value) { error += "\nCode (can't be empty)"; errorCount++; } break; } o = document.getElementById("desc"); if (o.title == o.value || o.value == "") { error += "\nDescription (can't be empty)"; errorCount++; } if (errorCount > 1) { alert('The following fields have errors:\n' + error); is_error = true; } else if (errorCount == 1) { alert('The following field has an error:\n' + error); is_error = true; } } if (report && (typeof self["jslint"] == "undefined")) { alert("Syntax could not be checked, sorry."); } else if (report || !document.getElementById("bypass_js_check").checked) { f = new Array('code', 'image', 'name'); for (p = 0; p < f.length; p++) { val = document.getElementById(f[p]).value; val = val.replace(/\n|\r/g, ''); if (val.substr(0, 11) == "javascript:") { val = val.substr(11) + ";"; } else { val = "test = '" + val + "';"; } if (!syntax_check(val, f[p])) { is_error = true; } break; } if (!is_error && report) { alert("Everything ok!"); } } return !is_error; } var check_delete = function() { if (!document.getElementById('delete').checked) { alert('You need to confirm that you want to delete the blummlet'); return false; } else { return true; } } var syntax_check = function(code, name) { jslint.laxLineEnd = true; jslint.plusplus = false; jslint.cap = true; jslint.jscript = true; if (jslint(code)) { return true; } var e = jslint.error; alert('Problem in ' + name + ' at line ' + (e.line + 1) + ' character ' + (e.character + 1) + ': ' + e.reason); return false; } var switch_type = function() { type = ""; for (i = 0; i < types.length; i++) { cur_form = document.getElementById("form_" + types[i]); if (document.getElementById("type_" + types[i]).checked) { cur_form.style.display = 'block'; type = types[i]; } else { cur_form.style.display = 'none'; } } if (changed) { if (old_type != '') { save(old_type); } copy(type); } old_type = type; } var copy = function(type) { copy_helper(type, "image"); copy_helper(type, "code"); copy_helper(type, "name"); } var copy_helper = function(type, name) { var f = document.getElementById(type + "_" + name); f.value = document.getElementById(name).value; window.setTimeout("f=document.getElementById('" + type + "_" + name + "'); toggle_help(f); toggle_help_blur(f);", 10); } var save = function(type) { document.getElementById("type").value = type; save_helper(type, "image"); save_helper(type, "code"); save_helper(type, "name"); } var save_helper = function(type, name) { f = document.getElementById(name); o = document.getElementById(type + "_" + name); if (o.value == o.title) { f.value = ""; } else { f.value = o.value; } } var get_type = function() { for (i = 0; i < types.length; i++) { if (document.getElementById("type_" + types[i]).checked) { return types[i]; } } return false; } var toggle_help_blur = function (o) { if (o.value == "") { o.value = o.title; o.style.color = '#ccc'; } else if (o.value != o.title) { bi = document.getElementById("blummlet_image"); if (o.id.search(/_image/) != -1) { bi.innerHTML = ''; if (o.value != "") { img = document.createElement("img"); img.src = o.value; img.width = 16; img.height = 16; bi.appendChild(img); } } else if (o.id.search(/_code/) != -1 && document.getElementById("image").value == "" && getFavicon) { m = o.value.match(/http:\/\/([a-z0-9-]+\.)+[a-z]+/); if (m) { n = o.id.replace(/_code/, '_image'); document.getElementById(n).value = m[0] + "/favicon.ico"; toggle_help_blur(document.getElementById(n)); getFavicon = false; } } else if (o.id.search(/_name/) != -1) { document.getElementById("blummlet_name").innerHTML = o.value; br = document.getElementById("blummlet_resize"); if (parseInt(br.style.width) == 60) { w = o.value.length * 7; if (bi.innerHTML != '') { w += 20; } br.style.width = w + "px"; document.getElementById("width").value = w; } } o.style.color = '#000'; } } var toggle_help = function (o) { if (o.value == o.title) { o.value = ""; o.style.color = '#000'; } maybe_resize(o); changed = true; } var maybe_resize = function (o) { if (o.tagName.toLowerCase() != "textarea") { return; } var lines = o.value.split(/\n/).length + 1; var wrap_lines = Math.floor(o.value.length / 84) + 2; var new_height = Math.max(lines, wrap_lines) * 14 + 5; o.style.height = Math.max(40, Math.min(200, new_height)) + "px"; } var toggle = function (field) { f = document.getElementById(field); f.style.display = (f.style.display != 'none') ? 'none' : 'block'; } var preset = function (name) { if (confirm("This will delete all your currently configured blummlets. Continue?")) { new Ajax.Request('/preset.php', { parameters: 'id=' + name, onComplete: function() { location.reload(); } }); } } var toggle_access = function (o) { $('has_username').style.display = (o.options[o.selectedIndex].value == 'protected') ? 'inline' : 'none'; } var toggle_wizard = function() { $('wizard').style.visibility = ($('wizard').style.visibility != 'visible') ? 'visible' : 'hidden'; } var whizz = function () { name = $('wizard_name').value; if (name == "") { alert('Please specify a name for the service.'); return false; } url = $('wizard_url').value; if (url.search(/BLUMMY/i) == -1) { alert('The keyword was not found in the URL you gave me. Please try again.\n\nIf it still does not work the service you are trying to integrate may require some special effort.\nYou could post something about it in the forum.'); return false; } url = url.replace(/'/, '\\\''); url = url.replace(/BLUMMY/i, '\'+escape(q)+\''); code = "javascript:(function(){q=Blummy.getSelection('Please enter a query for "; code += name; code += ":\\n(You can also select some text before clicking this blummlet)');if(q){Blummy.href('" code += url; code += "');}})()"; for (i = 0; i < types.length; i++) { $("type_" + types[i]).checked = (types[i] == 'link'); } $('type').value = 'link'; switch_type(); $('code').value = code; m = code.match(/http:\/\/([a-z0-9-]+\.)+[a-z]+/); if (m) { $('image').value = m[0] + "/favicon.ico"; getFavicon = false; } $('name').value = name; toggle_help_blur($('link_image')); copy('link'); toggle_wizard(); return true; } var toggle_advanced = function(save) { var s_advanced = 'none'; var s_simple = 'inline'; var is_advanced = false; if (typeof($('advanced')) != 'undefined' && $('advanced')) { is_advanced = $('advanced').checked; } if (is_advanced) { t = s_advanced; s_advanced = s_simple; s_simple = t; } var el = document.getElementsByTagName("div"); for (var i = 0; i < el.length; i++) { if (el[i].className == "advanced") { el[i].style.display = s_advanced; } else if (el[i].className == "simple") { el[i].style.display = s_simple; } } // if ($("prefs")) $("prefs").style.display = s_advanced; if ($("__score")) $("__score").style.display = s_advanced; if (typeof(save) != 'undefined' && save) { adv = (document.getElementById('advanced').checked) ? 1 : 0; new Ajax.Request('store.php', { parameters: 'advanced=' + adv }); } } var create_input = function(n, v) { input = document.createElement("input"); input.type = "hidden"; input.name = n; input.value = v; return input; } var save_without_ajax = function() { var n, n2, u, data, data_field; var f = document.getElementById("save_form"); f.childNodes = null; var l = parseInt(document.getElementById("layer").style.left); var t = parseInt(document.getElementById("layer").style.top); var divs = document.getElementsByTagName("div"); for (var i = 0; i < divs.length; i++) { if (divs[i].style.left == "560px") { continue; } if (divs[i].className != "box") { continue; } f.appendChild(create_input('module[' + i + ']', divs[i].id)); f.appendChild(create_input('left[' + i + ']', parseInt(divs[i].style.left) - l)); f.appendChild(create_input('top[' + i + ']', parseInt(divs[i].style.top) - t)); f.appendChild(create_input('bwidth[' + i + ']', parseInt(divs[i].style.width))); f.appendChild(create_input('bheight[' + i + ']', parseInt(divs[i].style.height))); data = ""; u = divs[i].id; data_field = document.getElementById("data_" + u); for (iX = 0; iX < data_needed[u].length; iX++) { n = data_needed[u][iX]; if (n.substr(0, 1) == "!") { n2 = n.substr(1); n2 = n2.replace(/ /g, "_").toLowerCase(); data += "&" + n2 + "=" + data_field.getAttribute(n2); } } f.appendChild(create_input('bdata[' + i + ']', data)); } f.appendChild(create_input('width', parseInt(document.getElementById("layer").style.width))); f.appendChild(create_input('height', parseInt(document.getElementById("layer").style.height))); f.appendChild(create_input('advanced', (document.getElementById("advanced").checked) ? 1 : 0)); f.appendChild(create_input('browserleft', parseInt(document.getElementById("position").style.left) / 418 * 100)) f.appendChild(create_input('all', '1')); return true; } var vote_hover = function(id, stars) { for (i = 1; i <= 5; i++) { $('vote_' + id + "_" + i).src = (i <= stars) ? "/img/star.png" : "/img/star_empty.png"; } $('vote_' + id).value = stars; } var vote_fix = function(id, stars) { vote_hover(id, stars); for (i = 1; i <= 5; i++) { $('vote_' + id + "_" + i).parentNode.onmouseover = null; } } window.setInterval("resort()", 1000); window.onload = function () { for(var ii = 0; arguments.callee.actions.length > ii; ii++) arguments.callee.actions[ii](); }; window.onload.actions = []; window.onload.actions.push(toggle_advanced);