/* JAVASCRIPT UTILITY METHODS
   Karol Golka
   May 12, 2007
   http://webstruments.com   
*******************************/

// globals
var errorcount = 0;

/* ReplaceCufon
--------------------------------------------------------------------------------- */
function ReplaceCufon()
{
    Cufon.replace('h2', {hover:true})('h3', {hover:true})('h4', {hover:true})('#navbar a');
}




/* Grab Form - Generic Form => XML method (DOESN'T HAVE TO BE A FORM)
--------------------------------------------------------------------------------- */
function GrabForm(formname)
{
    
    try {
        // grab 'form' container (doesn't have to be an actual form)
        var myForm = $(formname).descendants();
        
        // BEGIN BUILDING XML
        formXML = Builder.node('form');	
    	
        // loop thru form inputs, switch, and build XML
        for(var i=0; i<myForm.length; i++) {
            
            // get element
	        ele = myForm[i];
    	    
	        // debug
	        //alert(ele);
    	    
	        // switch and build
	        switch(ele.tagName.toLowerCase()) {
		        case "hidden":
		            // build form element XML
        	        formXML.appendChild(Builder.node(ele.name, ele.value));
        	        break;
		        case "button":
			        break;
		        case "textarea":
    		        
		           // build form element XML
		           formXML.appendChild(Builder.node(ele.name, ele.value));
		           
			        break;
		        case "select":
		            // build form element XML
        	        formXML.appendChild(Builder.node(ele.name, $F(ele.name)));
			        break;	
		        case "input":
		            switch(ele.type) {
				        case "text":
				        case "hidden":
				        case "password":
				        
				            // if we got an STARTSECTION_x or ENDSECTION_x
				            // then -> don't append them normally,
				            // but just insert an opening XML tag (<section>) 
				            // and then for an ENDSECTION insert a closing tag (</section>)
				            
				            if (ele.name.indexOf('startsection_') != -1)
				                // generic start
				                formXML.appendChild(Builder.node('startsection', ''));
				            else if (ele.name.indexOf('endsection_') != -1)
				                // generic end
				                formXML.appendChild(Builder.node('endsection', ''));
				            else 				        
				                // build form element XML
        	                    formXML.appendChild(Builder.node(ele.name, $F(ele.name)));
        	                
        	                
			                break;	
				        case "checkbox":
				            // check if "checked"
				            if (ele.checked)
					            // build form element XML
        	                    formXML.appendChild(Builder.node(ele.name, ele.value));
					        break;
				        case "radio":
				            // check if "checked"
				            if (ele.checked)
					            // build form element XML
        	                    formXML.appendChild(Builder.node(ele.name, ele.value));
					        break;
				        default:
					        break;
			        } // end switch
    				
			        break;
		        default:
			        break;
	        } // end switch
        } // end for loop
    	
        // finish xml
        var xml = '<form>' + tagsToUpperCase(formXML.innerHTML) + '</form>';
    	
        // debug
        //$('debug').style.display = 'block';
        //$('debug').value = xml; // innerHTML works for FireFox but not IE
        //alert(xml);
        
        // ajax
        return xml;	 
    }
    catch(err) { alert(err.description); }

} // end GrabForm()



/* SendMessage
--------------------------------------------------------------------------------- */
function SendMessage() {

    // validate
    var valForm = new Validation('form01', { useTitles: true });
    if (valForm.validate()) {
    
        // grab form
        var xml = GrabForm('form01');
        
        // loading
        $('btnSubmit').disabled = true;
        $('BtnSubmitSpinner').show();  
             

        // make the ajax call
	    new Ajax.Request('ajax/custom-public-ajax-processor.aspx', {
            parameters: { 
                method:         'SendMessage',
                email:         $('tbxEmail').value, 
                xml:          xml // for email xslt
            },
            onSuccess: function(transport) {

                 // redirect to confirmation page
                 location.href = 'confirmation.aspx';
            },
            onFailure: function(transport) {
                //alert("We had some trouble sending your message, please try again!");  
                
                // loading
                $('btnSubmit').disabled = false;
                $('BtnSubmitSpinner').hide();          
                
                // resend
                if (errorcount < 4)
                {
                    // increment error count
                    errorcount++;
                    SendMessage();                        
                }
                else
                {
                    alert("We had some trouble sending your message, please try again!");  
                }
                
            }
        });  	
    }
}






function tagsToUpperCase(html)
{
    html = html.replace(/([a-z])s*(=)s*("|')/gi, '$1$2$3');
    if (parts = html.match(/(<\/?[a-z][a-z0-9]*| [a-z]+=)/gi))
    {
        for (var i = 0; i < parts.length; i++)
        {
            var part = parts[i];
            html = html.replace(new RegExp(part, 'g'), part.toUpperCase());
        };
    };
    return html;
}



