//-----------------------------------------
// Filename:    framework.js
// Function:    Basic AJAX
// Author:      Kurt Brunner
// Contact:     brunner@hawaii.edu
// Application: ReMark, LabLabs, EnglishWeb
// Version:     1.0 Alpha
// Created:     8/18/2009
// Modified:    
// Copyright:   2009
//-----------------------------------------

framework = {};
framework.Name = 'UHFramework';
framework.Version = '1.0 Alpha';
framework.Copyright = '\xA92009 - K. Brunner';
framework.Description = 'UH AJAX Framework';
framework.About = function(){alert(this.Name+' '+this.Version+'\n'+this.Description+'\n'+this.Copyright)};
framework.browsers =
{
    IE     : window.attachEvent && !window.opera,
    FF     : !!navigator.userAgent.match('Firefox'),
    NS     : !!navigator.userAgent.match('Netscape'),
    IEMac  : document.all && navigator.userAgent.match('Mac'),
    Gecko  : navigator.userAgent.match('Gecko') && !navigator.userAgent.match('KHTML'),
    Camino : !!navigator.userAgent.match('Camino'),
    iCab   : !!navigator.userAgent.match('iCab'),
    Opera  : !!window.opera,
    Safari : !!navigator.userAgent.match('Safari')
};
framework.addEvent = function(elem,name,call)
{
    if(window.attachEvent)
        elem.attachEvent('on' + name,call);
    else if(window.addEventListener)
    {
    	elem.addEventListener(name,call,false);
        if(elem.parentNode && elem.tagName!='BODY') //Fix NN7
            elem.parentNode.replaceChild(elem,elem)
    }
    else // Very old browsers
    {
        var old = elem['on'+name]; 
        if(typeof old == 'function')
            elem['on'+name] = function(){old();call()}; 
        else
            elem['on'+name] = call; 
    }
};
framework.XMLHttpRequest = function()
{
    if(window.XMLHttpRequest)
        return new XMLHttpRequest()
    if(window.ActiveXObject && !this.browsers.IEMac)
    {
        var arrSignatures = new Array(
            'Msxml2.XMLHTTP.5.0',
            'Msxml2.XMLHTTP.4.0',
            'Msxml2.XMLHTTP.3.0',
            'Msxml2.XMLHTTP',
            'Microsoft.XMLHTTP');		
        for(var i=0; i<arrSignatures.length; i++)
        {
            try { return new ActiveXObject(arrSignatures[i]); }
            catch(oError) {}
        }        
    }
    return null
};
framework.httpGet = function(url,call)
{
    try
    {
        var oRequest = this.XMLHttpRequest();
        if(url.indexOf('?') >= 0) //Fix Cache Prolem of IE
            url += '&random=' + Math.random();
        else
            url += '?random=' + Math.random();
        if(typeof call=='function')
        {
            oRequest.onreadystatechange=stateChanged;
            oRequest.open('GET',url,true);
            oRequest.send(null)
        }
        else
        {
            oRequest.open('GET',url,false);
            oRequest.send(null);
            return oRequest.responseText           
        }
    }
    catch(oError){ alert('Error during HTTP-Get!') }
 
    function stateChanged()
    {
        if(oRequest.readyState==4)
            call(oRequest.responseText)
    }
   return null;
};
framework.wait = function(ms)
{
    var date = new Date();
    var curDate = null;
    do{curDate = new Date()} 
    while(curDate-date < ms)    
};
framework.updatePanel = function(elem,url)
{
    var THIS = this;
    var bar = document.getElementById(this.progressBar);
    if(bar) bar.style.display = '';    
    this.httpGet(url,response);

    function response(html)
    {
        elem = document.getElementById(elem) || elem;
        elem.innerHTML = html;
        var script = elem.getElementsByTagName('script');
        for(var i=0;i<script.length;i++)
        {
            var js = script[i].innerHTML;
            if(THIS.browsers.NS)
                js = js.replace(/&lt;/,'<')
            eval(js.replace(/<!--/g,'').replace(/\/\/-->/g,''));
        }
        if(bar) bar.style.display = 'none';    
    }
};
