/* postForm(
[,,]) Form element: The originating form. Needed for disabling and resetting the form. If the form has a button with _submit as id, a loading effect will be added. Callback function (optional): Function to call after completion. postForm() has a built in error-reporter. Example: callback(form,success,response); Clear (optional): If true (standard) the form element will be restored to its original state using form.reset();. */ function postForm(form,callback,clear) { if(clear!=false) clear=true; if(!form) { alert("Please specify the source form element!"); return false; } if(!callback) { var callback = function(form,success,response) { if(success) { alert("Failed to post your request from "+form.id+" ("+response.status+")! Sorry!"); return false; } } } if($(form.id+"_submit")) { var submit = $(form.id+"_submit"); var tmp_className = submit.className; var tmp_innerHTML = submit.innerHTML; submit.innerHTML = "Vänta..."; submit.className = "loading"; } var url; if($$(".mceEditor").length>0) { tinyMCE.triggerSave(); $$(".mceEditor").each(function(o) { if(o.id) tinyMCE.execCommand("mceRemoveControl",false,o.id); }) } var params = form.serialize(); Form.disable(form); if(form.action.indexOf("?")!=-1) url = form.action+"&ajax=1"; else url = form.action+"?ajax=1"; new Ajax.Request(url,{ method:form.method, asynchronous:true, postBody:params, onSuccess:function(response) { callback(form,true,response); }, onFailure:function(response) { callback(form,false,response); } }); if(submit) { submit.className = tmp_className; submit.innerHTML = tmp_innerHTML; } if(clear) Form.reset(form); Form.enable(form); Form.focusFirstElement(form); return false; } /* trim(str) Trims a string. str: String to be trimed. */ function trim(str) { return str.replace(/^\s+|\s+$/g, '') } /* function(url[,stule]) Opens a modal floated div. url: Content to be putted in the box style: the style-parameter of the div */ function openFloater(url,callback) { if(!url) { alert("Please specify an URL!"); return false; } Event.observe(document,"keyup",floater_esc = function(e) { if(e.keyCode==27) destroyFloater(); }); var params; if(url.indexOf("?")!=-1 && url.split("?").length==2) { params = url.split("?")[1]; url = url.split("?")[0]; } new Ajax.Updater("modal_window",url,{ method:'get', parameters:params, evalScripts:true, onComplete: function(t) { scrollarr = getScrollOffset(); $("modal_window").style.top = (scrollarr[1]+50)+"px"; $("modal_window").style.left = (scrollarr[0]+((document.documentElement.clientWidth/2))-($("modal_window").getWidth()/2))+'px'; $("modal_wrapper").setStyle({top:scrollarr[1]+"px",left:scrollarr[0]+"px"}); new Effect.Appear($("modal_wrapper"),{duration: 0.2,from: 0, to: 0.2}); new Effect.Appear($("modal_window"),{duration: 0.2}); if(callback) callback(); }, onFailure: function(t) { alert("Failed to load floater! Ajax status: "+t.status); } }); } function openFloater2(url,style) { if(!url) { alert("Please specify an URL!"); return false; } Event.observe(document,"keyup",floater_esc = function(e) { if(e.keyCode==27) destroyFloater(); }); var params; if(url.indexOf("?")!=-1 && url.split("?").length==2) { params = url.split("?")[1]; url = url.split("?")[0]; } new Ajax.Updater("saved",url,{ method:'get', parameters:params, evalScripts:true, onComplete: function(t) { if(!style) { scrollarr = getScrollOffset(); $("saved").style.top = (scrollarr[1])+"px"; $("saved").style.left = (scrollarr[0]+((document.documentElement.clientWidth/2))-($("saved").getWidth()/2))+'px'; } else if($("saved").style.indexOf("display")==-1) $("saved").style = style+" display: none;"; else $("saved").style = style; $("modal_wrapper").setStyle({top:scrollarr[1]+"px",left:scrollarr[0]+"px"}); new Effect.Appear($("modal_wrapper"),{duration: 0.2,from: 0, to: 0.2}); new Effect.Appear($("saved"),{duration: 0.2}); }, onFailure: function(t) { alert("Failed to load floater! Ajax status: "+t.status); } }); } function openFloater3(url,style) { if(!url) { alert("Please specify an URL!"); return false; } Event.observe(document,"keyup",floater_esc = function(e) { if(e.keyCode==27) destroyFloater(); }); var params; if(url.indexOf("?")!=-1 && url.split("?").length==2) { params = url.split("?")[1]; url = url.split("?")[0]; } new Ajax.Updater("error",url,{ method:'get', parameters:params, evalScripts:true, onComplete: function(t) { if(!style) { scrollarr = getScrollOffset(); $("error").style.top = (scrollarr[1])+"px"; $("error").style.left = (scrollarr[0]+((document.documentElement.clientWidth/2))-($("error").getWidth()/2))+'px'; } else if($("saved").style.indexOf("display")==-1) $("saved").style = style+" display: none;"; else $("error").style = style; $("modal_wrapper").setStyle({top:scrollarr[1]+"px",left:scrollarr[0]+"px"}); new Effect.Appear($("modal_wrapper"),{duration: 0.2,from: 0, to: 0.2}); new Effect.Appear($("error"),{duration: 0.2}); }, onFailure: function(t) { alert("Failed to load floater! Ajax status: "+t.status); } }); } /* destroyFloater() Closes an open floater. */ function destroyFloater() { $$("#modal_window .mceEditor").each(function(o) { if(o.id) tinyMCE.execCommand("mceRemoveControl",false,o.id); }) new Effect.Fade($("modal_wrapper"),{duration: 0.2}); new Effect.Fade($("modal_window"),{duration: 0.2,afterFinish: function() { $("modal_window").innerHTML=null; }}); Event.stopObserving(document,"keyup",floater_esc); } /* getScrollOffset() Returns an array with the scroll offset in px. */ function getScrollOffset() { var scrolly = typeof window.pageYOffset != 'undefined' ? window.pageYOffset : document.documentElement.scrollTop; var scrollx = typeof window.pageXOffset != 'undefined' ? window.pageXOffset : document.documentElement.scrollLeft; var scrollarr = new Array(scrollx,scrolly) return scrollarr }