/* tasklist.js 2008-01-30 (mca) 2008-02-01 (mca) : added support for application/json 2008-02-03 (mca) : added support for application/atom+xml */ // shared vars g_etag = ''; g_url = ''; g_id = ''; g_ctype_ck = 'tasklist-ctype'; g_ctype = 'text/xml'; // default type // init form window.onload = function() { var f,coll,i,n,ck; // handle form event and url f = document.getElementsByTagName('form')[0]; if(f) { f.onsubmit = function(){ return validateForm();}; url = f.getAttribute('action'); } // handle toggle event coll = document.getElementsByClassName('done','a'); for(i=0;i'+completed+''; break; case 'application/json': var task = {name : span.innerHTML, "is-completed" : completed}; doc = JSON.stringify(task); break; case 'application/atom+xml': doc = ''+span.innerHTML+''+g_id+''+completed+''; break; default: alert('ERROR:\n\nUnknown content type: ['+g_ctype+']'); return; } ajax.httpPut(g_url+g_id,null,onAjaxComplete,(g_ctype.indexOf('xml')!=-1?true:false),'putItem',g_ctype,doc,{'if-match':g_etag}); return false; } // handle ajax callbacks function onAjaxComplete(response,headers,context,status,msg) { switch(status) { case 0: // ie abort code break; case 200: // OK case 201: // Created case 202: // Accepted case 204: // NoContent break; case 301: case 302: if(headers.location) { location.href=headers.location; } break; default: // 400 & 500 errors if(headers.location) { location.href=headers.location; } else{ alert(status+'\n'+msg); } break; } switch(context) { case 'checkItem': g_etag = headers.etag || ''; updateItem(); break; case 'putItem': location.reload(); break; case 'deleteItem': location.reload(); break; default: alert('Unknown context\n'+context); } } /* handy stuff */ String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); }; function eventTrigger(e) { if (!e) { e = event; } return e.target || e.srcElement; } // extend document object, if needed if(!document.getElementsByClassName) { document.getElementsByClassName = function(className, tag, elm) { var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)"); tag = tag || "*"; elm = elm || document; var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag); var returnElements = []; var current; var length = elements.length; for(var i=0; i < length; i++){ current = elements[i]; if(testClass.test(current.className)){ returnElements.push(current); } } return returnElements; }; } if(!document.getElementsByNameEx) { document.getElementsByNameEx = function(name, tag, elm) { tag = tag || "*"; elm = elm || document; var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag); var returnElements = []; var current; var length = elements.length; for(var i=0; i < length; i++){ current = elements[i]; if(current.getAttribute('name')==name){ returnElements.push(current); } } return returnElements; }; } function createCookie(name,value,days) { var date,expires; if (days) { date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); expires = "; expires="+date.toGMTString(); } else { expires = ""; } document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name) { var c,nameEQ,ca; nameEQ = name + "="; ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { c = ca[i]; while (c.charAt(0)==' ') { c = c.substring(1,c.length); } if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length,c.length); } } return null; } function eraseCookie(name) { createCookie(name,"",-1); }