<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: ajax code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 24 Jul 2008 06:31:05 GMT</pubDate>
    <description>DZone Snippets: ajax code</description>
    <item>
      <title>Rails ajax star rater</title>
      <link>http://snippets.dzone.com/posts/show/5675</link>
      <description>Here's some Rails code I created to try out the &lt;a href="http://www.komodomedia.com/blog/2007/01/css-star-rating-redux/"&gt;CSS Star Rating Redux&lt;/a&gt; from Komodo Media.&lt;br /&gt;&lt;br /&gt;I set up my &lt;b&gt;routes.rb&lt;/b&gt; to use REST.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;map.resources :titles, :member =&gt; { :rate =&gt; :any }&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I use the &lt;a href="http://www.deveiate.org/projects/Linguistics/"&gt;Ruby Linguistics Framework&lt;/a&gt; to make this implementation easier. Install it using RubyGems (&lt;b&gt;sudo gem install linguistics&lt;/b&gt;). And then put the following code at the top of your &lt;b&gt;application_helper.rb&lt;/b&gt; file.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;require 'linguistics'&lt;br /&gt;Linguistics::use(:en)  # extends Array, String, and Numeric&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This code goes in the page you want the rater to appear in, in this example, &lt;b&gt;show.html.erb&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;ul class="star-rating" id="&lt;%= dom_id(@title) -%&gt;_rating"&gt;&lt;%= render :partial =&gt; '/partials/star_rating', :locals =&gt; { :record =&gt; @title } %&gt;&lt;/ul&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Create a partial called &lt;b&gt;_star_rating.html.erb&lt;/b&gt; in your &lt;b&gt;RAILS_ROOT/views/partials&lt;/b&gt; directory.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;li class="current-rating" style="width: &lt;%= number_to_percentage((record.rating.to_f * 25) / (5 * 25) * 100) -%&gt;;"&gt;Currently &lt;%= record.rating -%&gt;/5 Stars.&lt;/li&gt;&lt;br /&gt;&lt;% (1..5).each do |i| -%&gt;&lt;br /&gt;    &lt;li&gt;&lt;%= link_to_remote pluralize(i, 'Star'), {&lt;br /&gt;        :update =&gt; "#{dom_id(record)}_rating",&lt;br /&gt;        :url =&gt; eval("rate_#{record.class.name.downcase}_url(:rating =&gt; #{i})")&lt;br /&gt;    }, {&lt;br /&gt;        :class =&gt; "#{i.en.numwords}-#{i.abs == 1 ? 'star' : 'stars'}",&lt;br /&gt;        :title =&gt; "#{pluralize(i, 'star')} out of 5"&lt;br /&gt;    } -%&gt;&lt;/li&gt;&lt;br /&gt;&lt;% end -%&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 20 Jun 2008 04:19:32 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5675</guid>
      <author>sporkyy (Todd Sayre)</author>
    </item>
    <item>
      <title>Generating Taconite command documents</title>
      <link>http://snippets.dzone.com/posts/show/5475</link>
      <description>// description of your code here&lt;br /&gt;Hello,&lt;br /&gt;&lt;br /&gt;This is a port of a php class used to generate XML taconite command documents, useful for (very) easy and powerful ajaxy stuff, if you don't know what that is just check it there in french : http://www.desfrenes.com/playground/taconite/ or there in english : http://www.malsup.com/jquery/taconite/.&lt;br /&gt;&lt;br /&gt;Basically what it does is generate an XML document that is later processed by a javascript plugin which executes a serie of DOM modifications.&lt;br /&gt;&lt;br /&gt;About the code, I'm a Django beginner as well as a Python beginner so kind advices are welcome.&lt;br /&gt;&lt;br /&gt;Cheers. &lt;br /&gt;&lt;code&gt;&lt;br /&gt;# usage:&lt;br /&gt;#&lt;br /&gt;# t = Taconite()&lt;br /&gt;#&lt;br /&gt;# t.append("#toto","&lt;label&gt;test&lt;/label&gt;")&lt;br /&gt;# t.remove("#tutu")&lt;br /&gt;# t.js('alert("hello world");')&lt;br /&gt;# t.toggleClass('blue','body')&lt;br /&gt;# t.css("body","background-color","white")&lt;br /&gt;# [...]&lt;br /&gt;# print t.toprettyxml()&lt;br /&gt;&lt;br /&gt;import xml.dom.minidom as dom&lt;br /&gt;&lt;br /&gt;class Taconite(dom.Document):&lt;br /&gt;    def __init__(self):&lt;br /&gt;        dom.Document.__init__(self)&lt;br /&gt;        taconite = self.createElement("taconite")&lt;br /&gt;        self.appendChild(taconite)&lt;br /&gt;&lt;br /&gt;    def __str__(self):&lt;br /&gt;        return self.toxml(encoding="utf-8")&lt;br /&gt;    &lt;br /&gt;    def camelizeCssProperty(self,property):&lt;br /&gt;        words = property.split('-')&lt;br /&gt;        camelized = words[0].lower()&lt;br /&gt;        for word in words[1:] :&lt;br /&gt;            camelized = camelized + word[0].upper() + word[1:]&lt;br /&gt;        return camelized&lt;br /&gt;    &lt;br /&gt;    def js(self,script):&lt;br /&gt;        command = self.createElement("eval")&lt;br /&gt;        js = self.createTextNode(script)&lt;br /&gt;        command.appendChild(js)&lt;br /&gt;        self.childNodes[0].appendChild(command)&lt;br /&gt;    &lt;br /&gt;    def changeContentCommand(self,method,selector,content):&lt;br /&gt;        html_dom = dom.parseString(content)&lt;br /&gt;        command = self.createElement(method)&lt;br /&gt;        command.setAttribute("select",selector)&lt;br /&gt;        command.appendChild(html_dom.childNodes[0])&lt;br /&gt;        self.childNodes[0].appendChild(command)&lt;br /&gt;    &lt;br /&gt;    def changeStateCommand(self,action,selector):&lt;br /&gt;        command = self.createElement(action)&lt;br /&gt;        command.setAttribute("select",selector)&lt;br /&gt;        self.childNodes[0].appendChild(command)&lt;br /&gt;    &lt;br /&gt;    def CssCommand(self,action,css_class,selector):&lt;br /&gt;        command1 = self.createElement(action)&lt;br /&gt;        command1.setAttribute("select",selector)&lt;br /&gt;        command1.setAttribute("arg1",css_class)&lt;br /&gt;        command2 = self.createElement(action)&lt;br /&gt;        command2.setAttribute("select",selector)&lt;br /&gt;        command2.setAttribute("value",css_class)&lt;br /&gt;        self.childNodes[0].appendChild(command1)&lt;br /&gt;        self.childNodes[0].appendChild(command2)&lt;br /&gt;    &lt;br /&gt;    def addClass(self,css_class,selector):&lt;br /&gt;        self.CssCommand("addClass",css_class,selector)&lt;br /&gt;&lt;br /&gt;    def removeClass(self,css_class,selector):&lt;br /&gt;        self.CssCommand("remove",css_class,selector)&lt;br /&gt;&lt;br /&gt;    def toggleClass(self,css_class,selector):&lt;br /&gt;        self.CssCommand("toggleClass",css_class,selector)&lt;br /&gt;    &lt;br /&gt;    def append(self,selector,content):&lt;br /&gt;        self.changeContentCommand("append",selector,content)&lt;br /&gt;    &lt;br /&gt;    def prepend(self,selector,content):&lt;br /&gt;        self.changeContentCommand("prepend",selector,content)&lt;br /&gt;        &lt;br /&gt;    &lt;br /&gt;    def before(self,selector,content):&lt;br /&gt;        self.changeContentCommand("before",selector,content)&lt;br /&gt;        &lt;br /&gt;    &lt;br /&gt;    def after(self,selector,content):&lt;br /&gt;        self.changeContentCommand("after",selector,content)&lt;br /&gt;    &lt;br /&gt;    def wrap(self,selector,content):&lt;br /&gt;        self.changeContentCommand("wrap",selector,content)&lt;br /&gt;    &lt;br /&gt;    def replace(self,selector,content):&lt;br /&gt;        self.changeContentCommand("replace",selector,content)&lt;br /&gt;    &lt;br /&gt;    def replaceContent(self,selector,content):&lt;br /&gt;        self.changeContentCommand("replaceContent",selector,content)&lt;br /&gt;    &lt;br /&gt;    def remove(self,selector):&lt;br /&gt;        self.changeStateCommand("remove",selector)&lt;br /&gt;    &lt;br /&gt;    def show(self,selector):&lt;br /&gt;        self.changeStateCommand("show",selector)&lt;br /&gt;    &lt;br /&gt;    def hide(self,selector):&lt;br /&gt;        self.changeStateCommand("hide",selector)&lt;br /&gt;    &lt;br /&gt;    def removeContent(self,selector):&lt;br /&gt;        self.changeStateCommand("empty",selector)&lt;br /&gt;    &lt;br /&gt;    def css(self,selector,property,value):&lt;br /&gt;        command = self.createElement("css")&lt;br /&gt;        command.setAttribute("select",selector)&lt;br /&gt;        command.setAttribute("name",self.camelizeCssProperty(property))&lt;br /&gt;        command.setAttribute("value",value)&lt;br /&gt;        self.childNodes[0].appendChild(command)&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 08 May 2008 02:50:20 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5475</guid>
      <author>desfrenes (desfrenes)</author>
    </item>
    <item>
      <title>Simple javascript XHR object with fix for missing onreadystatechange event in Firefox (for synchronous calls)</title>
      <link>http://snippets.dzone.com/posts/show/5416</link>
      <description>This code fixes the issue in Firefox where the onreadystatechange event is not called for synchronous XHR requests. It is based on the XHConn script from http://xkr.us/code/javascript/XHConn/, patched with the fix documented at http://lukav.com/wordpress/2007/04/12/firefox-firebug-and-synchronos-calls-problem/&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;/** XHConn - Simple XMLHTTP Interface - bfults@gmail.com - 2005-04-08        **&lt;br /&gt; ** Code licensed under Creative Commons Attribution-ShareAlike License      **&lt;br /&gt; ** http://creativecommons.org/licenses/by-sa/2.0/                           **/&lt;br /&gt;/**&lt;br /&gt; * Modified slightly from original to support synchoronous transactions&lt;br /&gt; * CDB 2007-05-16, 2007-06-05&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;function XHConn()&lt;br /&gt;{&lt;br /&gt;	var xmlhttp, bComplete = false;&lt;br /&gt;	try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }&lt;br /&gt;	catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }&lt;br /&gt;	catch (e) { try { xmlhttp = new XMLHttpRequest(); }&lt;br /&gt;	catch (e) { xmlhttp = false; }}}&lt;br /&gt;	if (!xmlhttp) return null;&lt;br /&gt;	this.connect = function(sURL, sMethod, sVars, fnDone, bAsynch)&lt;br /&gt;	{&lt;br /&gt;		if (!xmlhttp) return false;&lt;br /&gt;		bComplete = false;&lt;br /&gt;		sMethod = sMethod.toUpperCase();&lt;br /&gt;&lt;br /&gt;		if (bAsynch == null) bAsynch = true; //treat asynch as an optional argument&lt;br /&gt;&lt;br /&gt;		try {&lt;br /&gt;			if (sMethod == "GET")&lt;br /&gt;			{&lt;br /&gt;				xmlhttp.open(sMethod, sURL+"?"+sVars, (bAsynch == true));&lt;br /&gt;				sVars = "";&lt;br /&gt;			}&lt;br /&gt;			else&lt;br /&gt;			{&lt;br /&gt;				xmlhttp.open(sMethod, sURL, (bAsynch == true));&lt;br /&gt;				xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");&lt;br /&gt;				xmlhttp.setRequestHeader("Content-Type",&lt;br /&gt;					"application/x-www-form-urlencoded");&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;			xmlhttp.onreadystatechange = function(){&lt;br /&gt;				if (xmlhttp.readyState == 4 &amp;&amp; !bComplete)&lt;br /&gt;				{&lt;br /&gt;					bComplete = true;&lt;br /&gt;					fnDone(xmlhttp);&lt;br /&gt;				}&lt;br /&gt;			};&lt;br /&gt;			xmlhttp.send(sVars);&lt;br /&gt;&lt;br /&gt;			/**&lt;br /&gt;			 * Firefox &lt;= 2.0.0 doesn't fire onreadystatechange for synchronous requests.&lt;br /&gt;			 * See http://lukav.com/wordpress/2007/04/12/firefox-firebug-and-synchronos-calls-problem/&lt;br /&gt;			 */&lt;br /&gt;			var isGecko = (document.addEventListener) ? true : false;&lt;br /&gt;			try {&lt;br /&gt;				if (!bAsynch &amp;&amp; isGecko &amp;&amp; xmlhttp.onreadystatechange == null) {&lt;br /&gt;					bComplete = true;&lt;br /&gt;					fnDone(xmlhttp);&lt;br /&gt;					return true;&lt;br /&gt;				}&lt;br /&gt;			}&lt;br /&gt;			catch (e) { return false; }&lt;br /&gt;			/**&lt;br /&gt;			 * End synchronous request patch&lt;br /&gt;			 */&lt;br /&gt;		}&lt;br /&gt;		catch(z) { return false; }&lt;br /&gt;		return true;&lt;br /&gt;	};&lt;br /&gt;	return this;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 21 Apr 2008 17:35:19 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5416</guid>
      <author>ChrisBloom7 (Chris Bloom)</author>
    </item>
    <item>
      <title>Basic XMLHttprequest</title>
      <link>http://snippets.dzone.com/posts/show/5281</link>
      <description>Non-IE version:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;xhr = new XMLHttpRequest();                     &lt;br /&gt;xhr.open(&lt;br /&gt;    "GET",                          &lt;br /&gt;    "http://foo.com",       &lt;br /&gt;    true                            &lt;br /&gt;  );&lt;br /&gt;xhr.onreadystatechange=function(){&lt;br /&gt;    if (xhr.readyState==4){&lt;br /&gt;      if (xhr.status==200){&lt;br /&gt;        parseResponse(xhr);&lt;br /&gt;      }else{&lt;br /&gt;        //handle the HTTP error...&lt;br /&gt;      }&lt;br /&gt;    };&lt;br /&gt;  };&lt;br /&gt;xhr.send(null); &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;// Basic XMLHttprequest (code from http://www.sitepoint.com/article/take-command-ajax)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;function makeHttpRequest(url){&lt;br /&gt;&lt;br /&gt;   var http_request = false;&lt;br /&gt;&lt;br /&gt;   if (window.XMLHttpRequest) { // Mozilla, Safari,...&lt;br /&gt;   &lt;br /&gt;       http_request = new XMLHttpRequest();&lt;br /&gt;	   &lt;br /&gt;       if (http_request.overrideMimeType){&lt;br /&gt;	   &lt;br /&gt;           http_request.overrideMimeType('text/xml');&lt;br /&gt;		   &lt;br /&gt;       }&lt;br /&gt;	   &lt;br /&gt;   } &lt;br /&gt;   else if (window.ActiveXObject) { // IE&lt;br /&gt;   &lt;br /&gt;       try{&lt;br /&gt;	   &lt;br /&gt;           http_request = new ActiveXObject("Msxml2.XMLHTTP");&lt;br /&gt;		   &lt;br /&gt;       } &lt;br /&gt;	   catch(e){&lt;br /&gt;	   &lt;br /&gt;           try{&lt;br /&gt;		   &lt;br /&gt;               http_request = new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;			   &lt;br /&gt;           } &lt;br /&gt;		   catch (e) {}&lt;br /&gt;       }&lt;br /&gt;	   &lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   if (!http_request) {&lt;br /&gt;   &lt;br /&gt;       alert('Unfortunatelly you browser doesn\'t support this feature.');&lt;br /&gt;	   &lt;br /&gt;       return false;&lt;br /&gt;	   &lt;br /&gt;   }&lt;br /&gt;   http_request.onreadystatechange = function() {&lt;br /&gt;   &lt;br /&gt;       if (http_request.readyState == 4){&lt;br /&gt;	   &lt;br /&gt;           if (http_request.status == 200){&lt;br /&gt;&lt;br /&gt;				alert(http_request.responseText);&lt;br /&gt;&lt;br /&gt;           } &lt;br /&gt;		   else{&lt;br /&gt;		   &lt;br /&gt;               alert('There was a problem with the request.(Code: ' + http_request.status + ')');&lt;br /&gt;			   &lt;br /&gt;           }&lt;br /&gt;		   &lt;br /&gt;       }&lt;br /&gt;	   &lt;br /&gt;   };&lt;br /&gt;   &lt;br /&gt;   http_request.open('GET', url, true);&lt;br /&gt;   http_request.send(null);&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 25 Mar 2008 19:46:23 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5281</guid>
      <author>Yansky (Yansky)</author>
    </item>
    <item>
      <title>miniAJAX.js - updated to be a bit more robust</title>
      <link>http://snippets.dzone.com/posts/show/5182</link>
      <description>inspired by timmorgan's post here: http://snippets.dzone.com/posts/show/2025&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;see CHANGELOG in details.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;function $(e){if(typeof e=='string')e=document.getElementById(e);return e};&lt;br /&gt;function collect(a,f){var n=[];for(var i=0;i&lt;a.length;i++){var v=f(a[i]);if(v!=null)n.push(v)}return n};&lt;br /&gt;&lt;br /&gt;ajax={};&lt;br /&gt;ajax.x=function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest()}}};&lt;br /&gt;//ajax.serialize=function(f){var g=function(n){return f.getElementsByTagName(n)};var nv=function(e){if(e.name)return encodeURIComponent(e.name)+'='+encodeURIComponent(e.value);else return ''};var i=collect(g('input'),function(i){if((i.type!='radio'&amp;&amp;i.type!='checkbox')||i.checked)return nv(i)});var s=collect(g('select'),nv);var t=collect(g('textarea'),nv);return i.concat(s).concat(t).join('&amp;');};&lt;br /&gt;ajax.serialize=function(f){var g=function(n){return f.getElementsByTagName(n)};var nv=function(e){if(e.name)return encodeURIComponent(e.name)+'='+encodeURIComponent(e.value);else return ''};var i=collect(g('input'),function(i){if((i.type!='radio'&amp;&amp;i.type!='checkbox')||i.checked)return nv(i)});var s=collect(g('select'),nv);var t=collect(g('textarea'),nv);var sOutput = i.concat(s).concat(t).join('&amp;'); while (sOutput.indexOf('&amp;&amp;')&gt;0) sOutput = sOutput.replace("&amp;&amp;","&amp;"); return sOutput;}; // i've modified to clear out instances of "&amp;&amp;" in the POSTback&lt;br /&gt;ajax.send=function(u,f,m,a){var x=ajax.x();x.open(m,u,true);x.onreadystatechange=function(){if(x.readyState==4)f(x.responseText)};if(m=='POST')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(a)};&lt;br /&gt;ajax.sendNoCache=function(u,f,m,a){u = u + (u.indexOf('?') &lt; 0 ? '?' : '&amp;') + 'noCache=' + new Date().getTime();var x=ajax.x();x.open(m,u,true);x.onreadystatechange=function(){if(x.readyState==4)f(x.responseText)};if(m=='POST')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(a)};&lt;br /&gt;ajax.get=function(url,func){ajax.send(url,func,'GET')};&lt;br /&gt;ajax.getNoCache=function(url,func){url = url + (url.indexOf('?') &lt; 0 ? '?' : '&amp;') + 'noCache=' + new Date().getTime();ajax.send(url,func,'GET')};&lt;br /&gt;ajax.gets=function(url){var x=ajax.x();x.open('GET',url,false);x.send(null);return x.responseText};&lt;br /&gt;ajax.getsNoCache=function(url){url = url + (url.indexOf('?') &lt; 0 ? '?' : '&amp;') + 'noCache=' + new Date().getTime();var x=ajax.x();x.open('GET',url,false);x.send(null);return x.responseText};&lt;br /&gt;ajax.post=function(url,func,args){ajax.send(url,func,'POST',args)};&lt;br /&gt;ajax.postNoCache=function(url,func,args){ajax.sendNoCache(url,func,'POST',args)};&lt;br /&gt;ajax.update=function(url,elm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.get(url,f);};&lt;br /&gt;ajax.updateNoCache=function(url,elm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.getNoCache(url,f);};&lt;br /&gt;ajax.submit=function(url,elm,frm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.post(url,f,ajax.serialize(frm))};&lt;br /&gt;ajax.submitNoCache=function(url,elm,frm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.postNoCache(url,f,ajax.serialize(frm))};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/** HOW TO USE&lt;br /&gt;ajax.x - The XMLHttpRequest object (or MS equivalent) used for communication&lt;br /&gt;&lt;br /&gt;ajax.serialize(f)&lt;br /&gt;  f = the form element you wish to be serialized&lt;br /&gt;  This function serializes all the fields in a form so that they can be passed as a query string in the form 'arg1=val1&amp;arg2=val2'.&lt;br /&gt;&lt;br /&gt;ajax.getNoCache(url, func)&lt;br /&gt;ajax.get(url, func)&lt;br /&gt;  url = the url to query (can contain arguments after a '?')&lt;br /&gt;  func = the function to call once the response is returned (no quotes)&lt;br /&gt;  This function uses a GET request to query the specified url and return a response to the specified function.&lt;br /&gt;&lt;br /&gt;ajax.getsNoCache(url)&lt;br /&gt;ajax.gets(url)&lt;br /&gt;  url = the url to query (can contain arguments after a '?')&lt;br /&gt;  This function uses a GET request to query the specified url and return a response synchronously. Use this sparingly, as synchronous calls can lock up the browser.&lt;br /&gt;&lt;br /&gt;ajax.postNoCache(url, func, args)&lt;br /&gt;ajax.post(url, func, args)&lt;br /&gt;  url = the url to query&lt;br /&gt;  func = the function to call once the response is returned (no quotes)&lt;br /&gt;  args = a string containing arguments to be passed to the url&lt;br /&gt;  This function uses a POST request to query the specified url and return a response to the specified function.&lt;br /&gt;&lt;br /&gt;ajax.updateNoCache(url, elm)&lt;br /&gt;ajax.update(url, elm)&lt;br /&gt;  url = the url to query&lt;br /&gt;  elm = the (name of the) element to update&lt;br /&gt;  This function uses a GET request to query the specified url and insert the result into the specified element.&lt;br /&gt;&lt;br /&gt;ajax.submitNoCache(url, elm, frm)&lt;br /&gt;ajax.submit(url, elm, frm)&lt;br /&gt;  url = the url to query&lt;br /&gt;  elm = the (name of the) element to update&lt;br /&gt;  frm = the form element to submit&lt;br /&gt;  This function is typically used in the onsubmit handler of a function. The form is not submitted the usual way; the form is instead serialized using 'ajax.serialize' and submitted using 'ajax.post'. The result is then inserted into the specified element.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/** CHANGES - by Michael Lowden&lt;br /&gt;[2/27/2008 10:43 AM] &lt;br /&gt;Update the "serialize" function to get rid of risk of consecutive "&amp;" symbols.  where "&amp;&amp;&amp;&amp;&amp;&amp;" may throw either an exception or a warning on some webservers (e.g. Tomcat).&lt;br /&gt;&lt;br /&gt;[2/26/2008 4:47 PM]&lt;br /&gt;Adapted it a little to handle for IE's stupid Caching issue when using AJAX:&lt;br /&gt;I simply added the following functions:&lt;br /&gt;  ajax.sendNoCache(url,func,method,args), not called by user, but called by some below functions.&lt;br /&gt;  ajax.getNoCache(url, func)&lt;br /&gt;  ajax.getsNoCache(url)&lt;br /&gt;  ajax.postNoCache(url, func, args)&lt;br /&gt;  ajax.updateNoCache(url, elm)&lt;br /&gt;  ajax.submitNoCache(url, elm, frm)&lt;br /&gt;*/&lt;/code&gt;</description>
      <pubDate>Wed, 27 Feb 2008 18:51:38 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5182</guid>
      <author>Michael.Lowden (Michael Lowden)</author>
    </item>
    <item>
      <title>Upload a file using Ajax</title>
      <link>http://snippets.dzone.com/posts/show/5166</link>
      <description>This code is categorised as Ajax because it "fits within my definition of Ajax" as explained from the &lt;a href="http://www.openjs.com/articles/ajax/ajax_file_upload/"&gt;Ajax File Upload&lt;/a&gt; [openjs.com] article.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;br /&gt;  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;&lt;br /&gt;&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;&lt;br /&gt;  &lt;head&gt;&lt;br /&gt;    &lt;title&gt;File upload&lt;/title&gt;&lt;br /&gt;    &lt;meta http-equiv="Content-Type" content="text/html;charset=utf-8"/&gt;&lt;br /&gt;    &lt;script type="text/javascript"&gt;&lt;br /&gt;    //&lt;![CDATA[&lt;br /&gt;      function init() {&lt;br /&gt;	document.getElementById('file_upload_form').onsubmit=function() {&lt;br /&gt;                                  //'upload_target' is the name of the iframe&lt;br /&gt;	  document.getElementById('file_upload_form').target = 'upload_target'; &lt;br /&gt;	  }&lt;br /&gt;  }&lt;br /&gt;  window.onload=init;&lt;br /&gt;    //]]&gt;&lt;br /&gt;    &lt;/script&gt;&lt;br /&gt;  &lt;/head&gt;&lt;br /&gt;  &lt;body&gt;&lt;br /&gt;    &lt;form id="file_upload_form" method="post" enctype="multipart/form-data" action="/p/file_upload.cgi"&gt;&lt;br /&gt;    &lt;input name="myfile" id="myfile" size="27" type="file" /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;input type="submit" name="action" value="Upload" /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;iframe id="upload_target" name="upload_target" src="" style="width:0;height:0;border:0px solid #fff;"&gt;&lt;/iframe&gt;&lt;br /&gt;    &lt;/form&gt;&lt;br /&gt;  &lt;/body&gt;&lt;br /&gt;&lt;/html&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 23 Feb 2008 14:33:52 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5166</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Pull JavaScript code dynamically into your web page at run-time.</title>
      <link>http://snippets.dzone.com/posts/show/4911</link>
      <description>Using the JavaScript keyword Eval() with AJAX makes it possible to dynamically add JavaScript code at run-time to your web page.&lt;br /&gt;&lt;br /&gt;Here's the complete code dynalert.html, dynalert.js, and dynalert.cgi&lt;br /&gt;&lt;br /&gt;file:dynalert.html&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;br /&gt;	"http://www.w3.org/TR/xhtml1-strict.dtd"&gt;&lt;br /&gt;&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;&lt;br /&gt;	&lt;head&gt;&lt;br /&gt;		&lt;title&gt;dynalert&lt;/title&gt;&lt;br /&gt;		&lt;meta http-equiv="Content-Type" content="type=text/html; charset=ISO-8859-1" /&gt;&lt;br /&gt;		&lt;script type="text/javascript" src="dynalert.js"&gt;&lt;/script&gt;&lt;br /&gt;	&lt;/head&gt;&lt;br /&gt;&lt;br /&gt;	&lt;body&gt;&lt;br /&gt;&lt;p id="i1"&gt;123 &lt;/p&gt;&lt;input type="button" value="go" onclick="update()" /&gt;&lt;br /&gt;	&lt;/body&gt;&lt;br /&gt;&lt;/html&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;file: dynalert.js&lt;br /&gt;&lt;code&gt;&lt;br /&gt;function populatePage(results){&lt;br /&gt;  eval(results);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//send the update&lt;br /&gt;function update() {&lt;br /&gt;&lt;br /&gt;	var strServer = "dynalert.cgi";&lt;br /&gt;	url2 = "";&lt;br /&gt;	SubmitRBData(strServer,"?" + url2);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function SubmitRBData(strUrl, strPostFields) {&lt;br /&gt;	http.open("GET", strUrl + strPostFields, true);&lt;br /&gt;	http.onreadystatechange = handleHttpResponse;&lt;br /&gt;	http.send(null);&lt;br /&gt;}&lt;br /&gt;function handleHttpResponse() {&lt;br /&gt;&lt;br /&gt;	if (http.readyState == 4) {&lt;br /&gt;		if (http.status == 200)&lt;br /&gt;		{&lt;br /&gt;		results = http.responseText;&lt;br /&gt;		populatePage(results); // string response&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function getHTTPObject() {&lt;br /&gt;&lt;br /&gt;	var objXMLHttp=null&lt;br /&gt;&lt;br /&gt;	if (window.XMLHttpRequest)&lt;br /&gt;	{&lt;br /&gt;		objXMLHttp=new XMLHttpRequest()&lt;br /&gt;	}&lt;br /&gt;	else if (window.ActiveXObject)&lt;br /&gt;	{&lt;br /&gt;		objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;return objXMLHttp&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var http = getHTTPObject(); // We create the HTTP Object&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;file:dynalert.cgi&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/ruby&lt;br /&gt;# dynalert.cgi&lt;br /&gt;&lt;br /&gt;require 'cgi'&lt;br /&gt;&lt;br /&gt;cgi = CGI.new&lt;br /&gt;&lt;br /&gt;#title = cgi['title']&lt;br /&gt;&lt;br /&gt;puts "Content-Type: text/html"&lt;br /&gt;puts&lt;br /&gt;puts "function transcript(){ alert('and Bob said this idea might work.');}"&lt;br /&gt;puts "alert('this is a success');"&lt;br /&gt;puts "alert('we can now pass back anything we like');"&lt;br /&gt;puts "transcript();"&lt;br /&gt;puts "oNew = document.createElement('strong');"&lt;br /&gt;puts "oNew.innerHTML = 'yes - this is bold text';"&lt;br /&gt;puts "document.getElementById('i1').appendChild(oNew);"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;</description>
      <pubDate>Fri, 21 Dec 2007 22:36:04 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4911</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Capturing the value from an HTML text box - Ajax style</title>
      <link>http://snippets.dzone.com/posts/show/4902</link>
      <description>This extract of JavaScript code illustrates how the value of a text box on an HTML form could be saved efficiently when used with AJAX. &lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;input type="text" name="proj1" id="proj1" value="Car_log" &lt;br /&gt;  onkeyup="timed_updateSummaryCRecord(event.keyCode, '1','project', this.value)" /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The onkeyup event retrieves the user input as soon as the key is pressed, then the event.keyCode is validated to ensure only alpha-numeric characters trigger the save routine. &lt;br /&gt;&lt;code&gt;&lt;br /&gt;function timed_updateSummaryCRecord(keyCode, parent_id, field,  val) {&lt;br /&gt;  if (val.length &gt; 0 &amp;&amp; ((keyCode &gt; 40) || (keyCode == 8)) ) {&lt;br /&gt;    clearTimeout(t);&lt;br /&gt;    t = setTimeout("updateSummaryCRecord('" + parent_id + "', '" + field + "', '" + val + "')", 1000);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The setTimeout will trigger the save routine after 1 second, however if the user continues to type before the 1 second timer has elapsed, the running timer will be cancelled and the new timer will start.&lt;br /&gt;&lt;br /&gt;Note: keyCode value '8' is accepted because it is the backspace key. It would also be helpful to accept the delete key press.</description>
      <pubDate>Tue, 18 Dec 2007 17:08:23 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4902</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>jQuery Maps Interface - Easily create Google or Yahoo maps</title>
      <link>http://snippets.dzone.com/posts/show/4361</link>
      <description>/* jQuery Maps (jmaps) - A jQuery plugin for Google Maps API&lt;br /&gt; * Author: Tane Piper (digitalspaghetti@gmail.com) &lt;br /&gt; * With special thanks Dave Cardwell (who helped on getting the first version of this plugin to work).&lt;br /&gt; * Website: http://code.google.com/p/gmapp/&lt;br /&gt; * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php&lt;br /&gt; * This plugin is not affiliated with Google or Yahoo.  &lt;br /&gt; * For Google Maps API and T&amp;C see http://www.google.com/apis/maps/&lt;br /&gt; * For Yahoo! Maps API and T&amp;C see http://developer.yahoo.com/maps/&lt;br /&gt; * &lt;br /&gt; * === Changelog ===&lt;br /&gt; * Version 1.3&lt;br /&gt; * Added support for creating Yahoo! Maps, can create Map, Satallite or Hybrid.  Check out available options below&lt;br /&gt; * Added support for creating points on Yahoo! maps.&lt;br /&gt; * Added support for creating Polylines on Yahoo! maps.&lt;br /&gt; * Added support for GeoRSS files on both Yahoo! and Google maps, as well as existing KML support for Google, method&lt;br /&gt; * name was changed from .addKml to .addRss&lt;br /&gt; * Moved directions search out of main namespace, now function that is called from within plugin by providing fields&lt;br /&gt; * &lt;br /&gt; * Version 1.2 (25/07/2007)&lt;br /&gt; * Moved GClientGeocoder into searchAddress method&lt;br /&gt; * Fixed bug in searchAddress method regarding getPoint().&lt;br /&gt; * &lt;br /&gt; * Version 1.1 (16/07/2007)&lt;br /&gt; * Changed name to remove Google from main name - namespace now .jmap.&lt;br /&gt; * Added additional options:&lt;br /&gt; * 	+ Add map dragging enable/disable.&lt;br /&gt; *	+ Add scroll wheel zooming.&lt;br /&gt; *	+ Add smooth continuous zooming (on certain browsers).&lt;br /&gt; *	+ Added clean unloading of Google objects.&lt;br /&gt; * Added .addPoly method.  Allows the creation of polylines on the map.&lt;br /&gt; * Added .addKml support for rendering KML Files.&lt;br /&gt; * Added .directions Driving Direction support.&lt;br /&gt; * &lt;br /&gt; * Version 1.0 (13/07/2007)&lt;br /&gt; * Initial version.&lt;br /&gt; * Creates Google Map.&lt;br /&gt; * Add points to map.&lt;br /&gt; * Takes address or postcode, Geocodes and centers map.  Also creates a draggable marker.&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;(function($) {&lt;br /&gt;	/* function searchAddress(jmap, address, settings)&lt;br /&gt;	 * This function is an internal plugin method that returns a GLatLng that can be passed&lt;br /&gt;	 * to a Google map.&lt;br /&gt;	 */&lt;br /&gt;	function searchAddress(jmap, address, settings) {&lt;br /&gt;		&lt;br /&gt;		if (jmap._mapType) {&lt;br /&gt;			alert('Yahoo Maps Geocoding not yet supported');&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		if (jmap.i.Au) {&lt;br /&gt;			GGeocoder = new GClientGeocoder();&lt;br /&gt;			GGeocoder.getLatLng(address, function(point){&lt;br /&gt;				if (!point) {&lt;br /&gt;					alert(address + " not found");&lt;br /&gt;				} else {&lt;br /&gt;					jmap.setCenter(point,settings.zoom);&lt;br /&gt;					var marker = new GMarker(point, {draggable: true});&lt;br /&gt;					jmap.addOverlay(marker);&lt;br /&gt;					pointlocation = marker.getPoint();&lt;br /&gt;					marker.openInfoWindowHtml("Latitude: " + pointlocation.lat() + "&lt;br /&gt;Longitude: " + pointlocation.lng());&lt;br /&gt;					GEvent.addListener(marker, "dragend", function(){&lt;br /&gt;						mylocation = marker.getPoint();&lt;br /&gt;						marker.openInfoWindowHtml("Latitude: " + pointlocation.lat() + "&lt;br /&gt;Longitude: " + pointlocation.lng());			&lt;br /&gt;					});&lt;br /&gt;				}&lt;br /&gt;			});&lt;br /&gt;		}	&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	/* directions: function(map,query, panel)&lt;br /&gt;	 * Takes a Direction query and returns directions for map.  Optional panel for text information&lt;br /&gt;	 */&lt;br /&gt;	function searchDirections(jmap,query,panel) {&lt;br /&gt;		// Yahoo Maps&lt;br /&gt;		if (jmap._mapType) {&lt;br /&gt;			alert('Yahoo Directions support not yet added')	;&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		// Google Maps&lt;br /&gt;		if (jmap.i.Au) {&lt;br /&gt;			var dirpanel = document.getElementById(panel);&lt;br /&gt;			directions = new GDirections(jmap, dirpanel);&lt;br /&gt;			directions.load(query);&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	$.fn.extend({&lt;br /&gt;	/* jmap: function(settings)&lt;br /&gt;	 * The constructor method&lt;br /&gt;	 * Example: $().jmap();&lt;br /&gt;	 */&lt;br /&gt;	jmap: function(settings) {&lt;br /&gt;		var version = "1.3";&lt;br /&gt;		/* Default Settings*/	&lt;br /&gt;		var settings = jQuery.extend({&lt;br /&gt;			provider: "google",		// can be "google" or "yahoo"&lt;br /&gt;			maptype: "hybrid",		// can be "map", "sat" or "hybrid"&lt;br /&gt;			center: [55.958858,-3.162302],	// G + Y&lt;br /&gt;			zoom: 12,				// G + Y&lt;br /&gt;			controlsize: "small",	// G + Y&lt;br /&gt;			showtype: true,			// G + Y&lt;br /&gt;			showzoom: true,			// Y&lt;br /&gt;			showpan: true,			// Y&lt;br /&gt;			showoverview: true,		// G&lt;br /&gt;			showscale: true,		// Y&lt;br /&gt;			dragging: true,			// G + Y&lt;br /&gt;			scrollzoom: true,		// G + Y&lt;br /&gt;			smoothzoom: true,		// G&lt;br /&gt;			searchfield: "#Address",&lt;br /&gt;			searchbutton: "#findaddress",&lt;br /&gt;			directionsto: "#to",&lt;br /&gt;			directionsfrom: "#from",&lt;br /&gt;			directionsfind: "#getDirections",&lt;br /&gt;			directionspanel: "myDirections"&lt;br /&gt;		},settings);&lt;br /&gt;		&lt;br /&gt;		return this.each(function(){&lt;br /&gt;			switch(settings.provider)&lt;br /&gt;			{&lt;br /&gt;				case "yahoo":&lt;br /&gt;					var jmap = this.jMap = new YMap(this);&lt;br /&gt;					switch(settings.maptype) {&lt;br /&gt;						case "map":&lt;br /&gt;							var loadmap = YAHOO_MAP_REG;&lt;br /&gt;							break;&lt;br /&gt;						case "sat":&lt;br /&gt;							var loadmap = YAHOO_MAP_SAT;&lt;br /&gt;							break;&lt;br /&gt;						default:&lt;br /&gt;							var loadmap = YAHOO_MAP_HYB;&lt;br /&gt;							break;&lt;br /&gt;					}&lt;br /&gt;					jmap.setMapType(loadmap);&lt;br /&gt;					jmap.drawZoomAndCenter(new YGeoPoint(settings.center[0],settings.center[1]), settings.zoom);&lt;br /&gt;					if (settings.showtype == true){&lt;br /&gt;						jmap.addTypeControl();	// Type of map Control&lt;br /&gt;					}&lt;br /&gt;					if (settings.showzoom == true &amp;&amp; settings.controlsize == "small" ){&lt;br /&gt;						jmap.addZoomShort();	// Small zoom control&lt;br /&gt;					}&lt;br /&gt;					if (settings.showzoom == true &amp;&amp; settings.controlsize == "large" ){&lt;br /&gt;						jmap.addZoomLong();		// Large zoom control&lt;br /&gt;					}&lt;br /&gt;					if (settings.showpan == true) {&lt;br /&gt;						jmap.addPanControl();	// Pan control&lt;br /&gt;					}&lt;br /&gt;					if (settings.showscale == false) {&lt;br /&gt;						/* On by default */&lt;br /&gt;						jmap.removeZoomScale();	// Show scale bars&lt;br /&gt;					}&lt;br /&gt;					if (settings.dragging == false) {&lt;br /&gt;						/* On by default */&lt;br /&gt;						jmap.disableDragMap();	// Is map draggable?&lt;br /&gt;					}&lt;br /&gt;					if (settings.scrollzoom == false) {&lt;br /&gt;						/* On by default */&lt;br /&gt;						jmap.disableKeyControls(); // Mousewheel and Keyboard control&lt;br /&gt;					}&lt;br /&gt;					break;&lt;br /&gt;					&lt;br /&gt;				case "mslive":&lt;br /&gt;					alert('Microsoft Live Maps are currently not supported but planned for version 1.4')&lt;br /&gt;					break;&lt;br /&gt;					&lt;br /&gt;				default:	&lt;br /&gt;					var jmap = this.jMap = new GMap2(this);&lt;br /&gt;					switch(settings.maptype) {&lt;br /&gt;						case "map":&lt;br /&gt;							var loadmap = G_NORMAL_MAP;&lt;br /&gt;							break;&lt;br /&gt;						case "sat":&lt;br /&gt;							var loadmap = G_SATELLITE_MAP;&lt;br /&gt;							break;&lt;br /&gt;						default:&lt;br /&gt;							var loadmap = G_HYBRID_MAP;&lt;br /&gt;							break;&lt;br /&gt;					}&lt;br /&gt;					jmap.setCenter(new GLatLng(settings.center[0],settings.center[1]),settings.zoom,loadmap);&lt;br /&gt;					switch(settings.controlsize)&lt;br /&gt;					{&lt;br /&gt;						case "small":&lt;br /&gt;							jmap.addControl(new GSmallMapControl());&lt;br /&gt;							break;&lt;br /&gt;						case "large":&lt;br /&gt;							jmap.addControl(new GLargeMapControl());&lt;br /&gt;							break;&lt;br /&gt;						case "none":&lt;br /&gt;							break;&lt;br /&gt;						default:&lt;br /&gt;							jmap.addControl(new GSmallMapControl());&lt;br /&gt;					}&lt;br /&gt;					if (settings.showtype == true){&lt;br /&gt;						jmap.addControl(new GMapTypeControl());&lt;br /&gt;					}&lt;br /&gt;					if (settings.showoverview == true){&lt;br /&gt;						jmap.addControl(new GOverviewMapControl());&lt;br /&gt;					}&lt;br /&gt;					if (settings.scrollzoom == true) {&lt;br /&gt;						/* Off by default */&lt;br /&gt;						jmap.enableScrollWheelZoom();&lt;br /&gt;					}&lt;br /&gt;					if (settings.smoothzoom == true) {&lt;br /&gt;						/* Off by default*/&lt;br /&gt;						jmap.enableContinuousZoom();&lt;br /&gt;					}&lt;br /&gt;					if (settings.dragging == false) {&lt;br /&gt;						/* On by default */&lt;br /&gt;						jmap.disableDragging();&lt;br /&gt;					}&lt;br /&gt;			}	&lt;br /&gt;			/* Seach for the lat &amp; lng of our address*/&lt;br /&gt;			jQuery(settings.searchbutton).bind('click', function(){&lt;br /&gt;				searchAddress(jmap, jQuery(settings.searchfield).attr('value'), settings);&lt;br /&gt;			});&lt;br /&gt;			/* Search for Directions */&lt;br /&gt;			jQuery(settings.directionsfind).bind("click", function(){&lt;br /&gt;				var from = $(settings.directionsfrom).attr('value');&lt;br /&gt;				var to = $(settings.directionsto).attr('value');&lt;br /&gt;				searchDirections(jmap, "from: " + from + " to: " + to, settings.directionspanel);	&lt;br /&gt;				$(settings.directionsfrom).attr('value', to);&lt;br /&gt;				$(settings.directionsto).attr('value', '');&lt;br /&gt;				return false;&lt;br /&gt;			});&lt;br /&gt;			/* On document unload, clean unload Google API*/&lt;br /&gt;			jQuery(document).unload(function(){ GUnload(); });&lt;br /&gt;		});&lt;br /&gt;		},&lt;br /&gt;	/* myMap: function()&lt;br /&gt;	 * Returns a map object from the API, so it's available to the user&lt;br /&gt;	 * Example: $().myMap().setCenter(...) for Google;&lt;br /&gt;	 * Example: $().myMap().drawZoomAndCenter(...) for Yahoo;&lt;br /&gt;	 */&lt;br /&gt;	myMap: function() {&lt;br /&gt;		return this[0].jMap;	&lt;br /&gt;	},&lt;br /&gt;	/* addPoint: function()&lt;br /&gt;	 * Returns a marker to be overlayed on the Google map&lt;br /&gt;	 * Example: $().addPoint(...);&lt;br /&gt;	 */&lt;br /&gt;	addPoint: function(pointlat, pointlng, pointhtml, isdraggable, removable) {&lt;br /&gt;		var jmap = this[0].jMap;&lt;br /&gt;		// Yahoo Maps&lt;br /&gt;		if (jmap._mapType) {			&lt;br /&gt;			var marker = new YMarker(new YGeoPoint(pointlat, pointlng));	// Create the Yahoo marker type&lt;br /&gt;			YEvent.Capture(marker, EventsList.MouseClick, function(){		// Add mouseclick to open HTML&lt;br /&gt;				marker.openSmartWindow(pointhtml);&lt;br /&gt;			});&lt;br /&gt;			// Below code does not work as expected&lt;br /&gt;			/*if (removable == true) {&lt;br /&gt;				YEvent.Capture(marker, EventsList.MouseDoubleClick, function(){&lt;br /&gt;					jmap.removeOverlay(marker);&lt;br /&gt;				});&lt;br /&gt;			}*/&lt;br /&gt;			jmap.addOverlay(marker);	// Add marker to map&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		// Google Maps	&lt;br /&gt;		if (jmap.i.Au) {&lt;br /&gt;			var marker = new GMarker(new GLatLng(pointlat,pointlng), { draggable: isdraggable } );&lt;br /&gt;			GEvent.addListener(marker, "click", function(){&lt;br /&gt;				marker.openInfoWindowHtml(pointhtml);&lt;br /&gt;			});&lt;br /&gt;			if (removable == true) {&lt;br /&gt;				GEvent.addListener(marker, "dblclick", function(){&lt;br /&gt;					return jmap.removeOverlay(marker);&lt;br /&gt;				});&lt;br /&gt;			}&lt;br /&gt;			return jmap.addOverlay(marker);&lt;br /&gt;		}&lt;br /&gt;	},&lt;br /&gt;	/* addPoly: function(poly)&lt;br /&gt;	 * Takes an array of GLatLng points, converts it to a vector Polyline to display on the map&lt;br /&gt;	 * Example: $().addPoly(...);&lt;br /&gt;	 */&lt;br /&gt;	addPoly: function (poly, colour, width, alpha) {&lt;br /&gt;		var jmap = this[0].jMap;&lt;br /&gt;		// Yahoo Maps&lt;br /&gt;		if (jmap._mapType) {&lt;br /&gt;			return	jmap.addOverlay(poly, colour, width, alpha);&lt;br /&gt;		}&lt;br /&gt;		// Google Maps&lt;br /&gt;		if (jmap.i.Au) {&lt;br /&gt;			return jmap.addOverlay(poly);&lt;br /&gt;		}&lt;br /&gt;	},&lt;br /&gt;	/* addRss: function()&lt;br /&gt;	 * Takes a KML file and renders it to the map.&lt;br /&gt;	 * Example: $().addPoint(...);&lt;br /&gt;	 */&lt;br /&gt;	addRss: function (rssfile) {&lt;br /&gt;		var jmap = this[0].jMap;&lt;br /&gt;		// Yahoo Maps&lt;br /&gt;		if (jmap._mapType) {&lt;br /&gt;			var geoXml = new YGeoRSS(rssfile);&lt;br /&gt;			return jmap.addOverlay(geoXml);&lt;br /&gt;		}&lt;br /&gt;		// Google Maps&lt;br /&gt;		if (jmap.i.Au) {&lt;br /&gt;			var geoXml = new GGeoXml(rssfile);&lt;br /&gt;			return jmap.addOverlay(geoXml);&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;	}&lt;br /&gt;});&lt;br /&gt;})(jQuery);&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 27 Jul 2007 11:52:21 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4361</guid>
      <author>digitalspaghetti (Tane Piper)</author>
    </item>
    <item>
      <title>Ajax link call to function with image as icon</title>
      <link>http://snippets.dzone.com/posts/show/4348</link>
      <description>// description of your code here&lt;br /&gt;This railscode makes an ajaxcall to a action inside the controller and uses a image icon as the clickable area to trigger it. I am using it all over the place when doing nice looking admininterfaces.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;link_to_remote (image_tag("/images/createchild.jpeg", :size =&gt; "17x17", :border =&gt; 0), &lt;br /&gt;:url =&gt; {:action =&gt; 'acton_inside_controller', :id =&gt; record.id })&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 23 Jul 2007 11:18:19 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4348</guid>
      <author>afterburn (Andreas Kviby)</author>
    </item>
  </channel>
</rss>
