// This is an AJAX request. It takes a structure of URL parameters as // well as an optional call back method. function APIRequest( objParams, fnCallBack ){ var objConnection = null; var strUrl = "api.cfm?"; var strQueryString = ""; var strKey = ""; // The the various forms of creating the HTTP request. IE // and Mozilla do this differently. Use the try / catch // to figure out which one's won't break. try { objConnection = new ActiveXObject("Microsoft.XMLHTTP"); } catch( objMSError ) { try { objConnection = new XMLHttpRequest(); } catch (objMozError) { alert("Your browser cannot handle this XMLHttpRequest technology."); } } // Check to make sure we have a connection object. if (objConnection){ // Loop over the URL params object and add the // key-value pairs to the query string. for (strKey in objParams){ // Be sure to escape the value for the URL. strUrl += ( "&" + strKey + "=" + encodeURIComponent( objParams[ strKey ] ) ); } // prompt( "url", strUrl ); // return; // Open the connection. We are going to use a "Get" // approach. That will put all of our values into the // URL, not the FORM scope. objConnection.open( "get", strUrl ); // Check to see if we have a call back method. If we do, // then set up the state change method handler. This is // designed to send the evaluated JSON result back to // the call back method. if (fnCallBack){ // Define the ready state change method. objConnection.onreadystatechange = function(){ var objResponse = objConnection; // Check to see if we have a response. if (objResponse.readyState == 4){ // Evaluate the JSON response and send it to the // given call back method. fnCallBack( eval( "(" + objResponse.responseText + ")" ) ); } }; } // Send the AJAX request now that we have our connection // set up and the handlers defined. objConnection.send( null ); } } function CallAPI( strInteraction ){ // Check to see if we have an APIInterval // value that we should clear. if (window.APIInterval){ // Delete this interval since we are about to // launch another API request. clearTimeout( window.APIInterval ); } // Launch a new API request to update the Shortie and // get the updated property data returned. APIRequest( { interaction: (strInteraction ? strInteraction : "") }, function( objData ){ // Update the property values. $( "p.property" ).each( function( intI ){ var objProp = $( this ); objProp.text( objData[ objProp.attr( "rel" ) ] ); } ); // Update the time values. $( "#timevalue" ).text( objData.time ); // Update the delay value. $( "#delayvalue" ).text( ( (parseInt( objData.delay ) > 0) ? (objData.delay + " minutes") : "No Delay" ) ); // Set a timeout to call another API request. window.APIInterval = setTimeout( CallAPI, (5 * 1000) ); } ); } function UpdateShortieImage(){ var jShortie = $( "#shortie" ); var intValue = ((parseInt( Math.random() * 100 ) % 17) + 1); var imgShortie = new Image(); // Format the value to make sure it is a two digit // value (for our file naming convention). intValue = ( (intValue.toString().length == 1) ? ("0" + intValue) : intValue ); // Set the image onload handler. $( imgShortie ).load( function( obj ){ // Fade out the current shortie. jShortie.fadeOut( function(){ // Set the background image of the // shortie div to the newly loaded // image. jShortie.css( "background-image", "url( '" + imgShortie.src + "' )" ); // Fade the shorti back in. jShortie.fadeIn( function(){ // Set the timeout to update the // shortie image. setTimeout( UpdateShortieImage, (8 * 1000) ); } ); } ); } ); // Set the image source. This will trigger the // onLoad handler set above. imgShortie.src = ("images/" + intValue + ".jpg"); } // Run this code when the document loads. $( function(){ // Set up all the interaction links. $( "a.interaction" ).click( function( objEvent ){ CallAPI( this.rel ); } ); // Update the form with an API call. CallAPI(); // Update the shortie image. UpdateShortieImage(); } );