function getContent(el){//{{{
    if( el.textContent ) return el.textContent;
    if( el.innerText   ) return el.innerText;
    if( el.nodeValue   ) return el.nodeValue;
    if( el.firstChild!=null ) return getContent( el.firstChild );
    return null;
}//}}}
function setContent(el, c){//{{{
    if(      el.textContent ) el.textContent = c;
    else if( el.innerText   ) el.innerText = c ;
    else if( el.nodeValue   ) el.nodeValue = c;
    else if( el.firstChild!=null ) setContent( el.firstChild, c );
}//}}}
var http_request = null;   
function set_up_request(type){//{{{
    //alert("set_up_request: 1");
    http_request = null;
    try{       http_request = new ActiveXObject("Msxml2.XMLHTTP");    }catch(E){ http_request = null;}
    //alert("set_up_request: 1.5");
    //if      (window.XMLHttpRequest)
    if( http_request==null ) {  http_request = new XMLHttpRequest(); http_request.overrideMimeType( type ); }
    //else                              http_request = new ActiveXObject("Microsoft.XMLHTTP"); // IE                              
    //alert("set_up_request: 2");
    if(!http_request) alert('Giving up :( Cannot create an XMLHTTP instance');  
    return http_request;
}//}}}
var addrs = null;
function show_status(http_request){//{{{ show status
    switch(http_request.readyState){
        case 0: window.status = "uninitialized";            return false;
        case 1: window.status = "loading";                  return false;
        case 2: window.status = "loaded";                   return false;
        case 3: window.status = "interactive";              return false;
        case 4: window.status = "parsing and rendering";    return true;
        default:                                            return false;
    }
}//}}}
function set_addr(state){//{{{
    //alert("mark 1");
    if( addrs == null ){
        http_request = set_up_request( 'text/xml' );
        http_request.onreadystatechange = function(){
            if(!show_status(http_request)) return;
            addrs = new Array();
            var nl = http_request.responseXML.documentElement.getElementsByTagName('service');
            //var re = /\s/;
            var warnings = "";
            for( var serv = 0; serv < nl.length; serv++ ){
                var service = nl.item( serv );
                var states = getContent( service.getElementsByTagName( 'states' ).item( 0 ) ).replace('\n', ' ').replace('\r', ' ').split(' ');
                var addr_fields  = new Array();
                var addr_links = service.getElementsByTagName( 'html_link' );
                if( addr_links.length > 0 ){
                    addr_fields["HTML_LINK"] = getContent( addr_links.item(0) );
                    if(addr_fields["HTML_LINK"].indexOf(".htm")<0) warnings += addr_fields["HTML_LINK"]+" should have extensions .htm or .html\n";
                }else{ //{{{ old style
                    var addr_ch = service.getElementsByTagName( 'address' ).item( 0 ).childNodes;
                    for( var ch = 0; ch < addr_ch.length; ch++ ){ // toUpperCase !!!
                        if( addr_ch.item(ch).tagName == null ) continue;
                        addr_fields[ addr_ch.item(ch).tagName.toUpperCase() ] = getContent( addr_ch.item(ch) ); 
                    }
                }//}}}
                for(var st = 0; st<states.length; st++){
                    var st1 = states[st].toUpperCase();//.replace( re, '' ); 
                    if( st1 == null || st1 == '') continue;
                    if( addrs[ st1 ]!=null ) warnings += "Repeated definition of address for '"+st1+"'!\nOnly the last one will work!\n";
                    addrs[st1] = addr_fields;    // toUpperCase !!!
                }
            }
            if( warnings!="" && document.location.href.indexOf('test') > 0 ) alert( warnings );
            set_addr_to_div( state );
        };
        http_request.open('GET', theUrl, true);
        http_request.send(null); 
    }else set_addr_to_div( state );
}//}}}
function map_on_focus( state ){ document.getElementById('the map').src = 'TheMap_'+state+'.gif'; }
function map_on_blur(  )      { document.getElementById('the map').src = 'TheMap_Gray.gif'; }

function set_addr_to_div( state ){//{{{
    state = state.toUpperCase();
    var addr_div = document.getElementById( 'address' );
    var addr = addrs[ state ];
    if( addr == null ) addr =  addrs['REST'];
    if( addr == null ){ alert("Not implemented yet!"); return; }
    if( addr['HTML_LINK'] != null){
        if( addr['HTML'] == null ){
            http_request = set_up_request( 'text/xml' );
            http_request.onreadystatechange = function(){
                if(!show_status(http_request)) return;
                addr['HTML'] = http_request.responseText;
                addr_div.innerHTML = http_request.responseText;
            };
            http_request.open('GET', addr['HTML_LINK'], true);
            http_request.send(null); 
            return;
        }else addr_div.innerHTML = addr['HTML'];
    }else{
        var html = "<strong>Distributor:</strong><br/>";
        html += 'name:&nbsp;'+addr['NAME']+'<br/>';
        if( addr['PHONE']!=null )
            html += 'phone:&nbsp;'+addr['PHONE']+'<br/>';
        if( addr['FAX']!=null )
            html += 'fax:&nbsp;'+addr['FAX']+'<br/>';
        html += 'address:&nbsp;'+addr['STREET']+'<br/>'+addr['CITY']+'<br/>'+addr['STATE']+'<br/>'+addr['ZIP']+'<br/>';
        if( addr['EMAIL']!=null )
            html += 'email:&nbsp;<a href="mailto:'+addr['EMAIL']+'">'+addr['EMAIL']+'</a><br/>';
        if( addr['URL']!=null )
            html += '<a href="'+addr['URL']+'>'+addr['URL']+'</a>';
        addr_div.innerHTML = html;
    }
}//}}}

