﻿/* JAVASCRIPT UTILITY METHODS
   Karol Golka
   May 12, 2007
   http://webstruments.com   
*******************************/

// GLOBALS
String.prototype.trim = 
function () {
    return this.replace(/^\s*|\s*$/,"");
}
var myLightWindow = null;

/* CurrentNav
--------------------------- */
function CurrentNav(nav)
{
    $(nav).className = 'current';
}

/* Modalize
--------------------------- */
function modalize(ele, url)
{
    var width = 500;
    if (arguments[2])
        width = arguments[2];
        
//    // make control
    m = new Control.Modal(false,{
        contents: function(){
            
            // variabltes
            var holder = '';
            
            // call request, get it back
            new Ajax.Request(url,{
                onComplete: function(request){
                    $('modal_container').update(request.responseText);
                }.bind(this)
            });
            return 'loading';
        },
        overlayCloseOnClick: false,
        opacity: 0.8,
        width: width,
        fade: true,
        fadeDuration: .25//,
//        offsetTop: 0
    });
    m.open();
    
    // scroll to
    new Effect.ScrollTo('modal_container');

//    new Control.Modal('ajax',{
//        href: 'http://yahoo.com',
//        opacity: 0.8,
//        width: 500,
//        fade: true,
//        fadeDuration: .25,
//        overlayCloseOnClick: false        
//    }).open();

}

 
/* Grab Form - Generic Form => XML method (DOESN'T HAVE TO BE A FORM)
--------------------------------------------------------------------------------- */
function GrabForm(formname)
{
    // 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":
				// got carriage returns?
				ele.value = ele.value.replace(new RegExp("\\n", "g"), "<br />");
			    // 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":
				        // 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
//    alert(formXML.firstChild.nodeValue);
//    return;
    try
    {
        // SAFARI FIX (or rather anti-fix)
        var xml = '<form>' + tagsToUpperCase(formXML.innerHTML) + '</form>';
    }
    catch(err)
    {
        alert('Error in grabform();');
        var xml = '<form>' + formXML.innerHTML + '</form>';
    }
	
    // debug
    //$('debug').style.display = 'block';
    //$('debug').value = xml; // innerHTML works for FireFox but not IE
    // alert(xml);
    
    /*
    
    InnerHTML is really a Microsoft implementation. Instead, use nodes,
    like this:

    var aParentItem; // whatever element you want to append the new
    anchor to
    var newChild = document.createElement("A");
    newChild.href = "xxxxxxx";
    newChild.appendChild(document.createTextNode("Subs cribe"));
    aParentItem.appendChild(newChild);

    */
    
    // ajax
    return xml;	    	

} // end GrabForm()


/* Save Form
--------------------------------------------------------------------------------- */
function SaveForm(myForm, entity)
{	
    // VALIDATE
    var valForm = new Validation(myForm, {useTitles:true});    
    if	(valForm.validate())
    {
        
        
	    // loading
	    loading();
		
	    // grab form
	    var xml = GrabForm(myForm);
	    
	    
	    
	    // debugger?
	    if (bDebugging) $('tarDebug').update(xml);
	    
	    // disable button if provided arg
	    if (arguments[2])
	        $(arguments[2]).disabled=true;
		
	    // call
        // LGED.SaveForm(entity, xml, SaveForm_callback);
        // make the ajax call
        new Ajax.Request('../../ajax/ajax-processor.aspx', {
            parameters: { method: 'SaveForm', entity : entity, xml : xml },
                onSuccess: function(transport) {
                    // loading
	                loading();
                    
                    // hide lightbox
		            Control.Modal.close();
            		 
		            // reload
		            setTimeout('List("'+transport.responseText+'")', 1);
                   
                },
                onFailure: function(transport) {             
                    // loading
	                loading();
                    //alert(transport.responseText);
                }
            });
   }    
 
}



/* List
--------------------------------------------------------------------------------- */
function List(entity)
{	
	// loading
	loading();
	
	// call
     // make the ajax call
    new Ajax.Request('../../ajax/ajax-processor.aspx', {
        parameters: { method: 'List', entity : entity },
            onSuccess: function(transport) {
                // loading
	            loading();
                
                // variables
		        var div = 'divList'+transport.statusText+'s';
        		
		        // inject
		        $(div).update(transport.responseText);	
               
            },
            onFailure: function(transport) {             
                // loading
	            loading();
                //alert(transport.responseText);
            }
        });
}
 

///* Delete
//--------------------------------------------------------------------------------- */
//function Delete(entity, id)
//{
//	if (confirm("Are you sure you want to - DELETE - this record?"))
//	{	
//		// loading
//		loading();
//		
//		// call
//		LGED.Delete(entity, id, Delete_callback);
//	}
//}

//// CALLBACK
//function Delete_callback(res)
//{ 
//	// loading
//	loading();

//	if (res.value[0] != "0")  
//		// show error 
//		alert(res.value[1]);
//	else {   
//		// reload
//		setTimeout('List("'+res.value[1]+'")', 1);
//	}
//}

/* Get URL Parameter
--------------------------- */
function gup( name )
{
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var tmpURL = window.location.href;
  var results = regex.exec( tmpURL );
  if( results == null )
    return "";
  else
    return results[1];
}

/* URL decode / encode
--------------------------- */
function urldecode(text) {

    text= text.replace(/\%2f/g,"/");
    text= text.replace(/\%3f/g,"\\");
    text= text.replace(/\%3d/g,"=");
    text= text.replace(/\%26/g,"&");
    return text;
}
function urlencode(text) {

    text= text.replace(/\//g,"%2f");
    text= text.replace(/\?/g,"%3f");
    text=  text.replace(/=/g,"%3d");
    text=   text.replace(/&/g,"%26");
    return text;
}

/* EscapeTextareas
--------------------------- */
function EscapeTextareas() {
	 
	// grab all textareas
	$('myForm').getElementsBySelector('textarea').each(function(t){
		// replace <br /> with \r\n
		t.value = t.value.replace(new RegExp("<br />", "g"), "\r\n");
	});
	
}

/* ENTER Submits
--------------------------- */
function ENTERSubmits(func, e)
{
    if(!e) var e = window.event;
    if(e.keyCode) key = e.keyCode;
    else if(e.which) key = e.which;

    if(key == 13)
    {
        setTimeout(func+'()', 1);
    }
    else
        return true;
}


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;
}