//ajax tracker  async, sync

var last_action=0; 
var reset=false;


// backward-compatibility function to add custom action
var PARAM_PAGE_ID_INDEX=0;
var PARAM_ACTION_INDEX=1;
var PARAM_ASYNC_INDEX=2;
var PARAM_TIMEOUT_INDEX=3;

var PARAM_NAME_INDEX=0;
var PARAM_VALUE_INDEX=1;

var Params=new Array();
Params[PARAM_PAGE_ID_INDEX]=new Array('pageId','$mandatory$');
Params[PARAM_ACTION_INDEX]=new Array('action','$mandatory$');
Params[PARAM_ASYNC_INDEX]=new Array('async',true);
Params[PARAM_TIMEOUT_INDEX]=new Array('timeout',1);

function showItems(queryString){
    var GoodParam;
    var UserParams;
    if(queryString.indexOf("?")==0)
        queryString=queryString.substr(1);
    UserParams=queryString.split("&");
    for(var CurrentParam=0;CurrentParam<Params.length;CurrentParam++){
        GoodParam=false;
        for(var CurrentUserParam=0;CurrentUserParam<UserParams.length;CurrentUserParam++){
            var NameValue=UserParams[CurrentUserParam].split("=");
            if(Params[CurrentParam][PARAM_NAME_INDEX]==NameValue[0]){
                Params[CurrentParam][PARAM_VALUE_INDEX]=NameValue[1];
                GoodParam=true;
                break;
            }
        }
        if ((GoodParam==false) && (Params[CurrentParam][PARAM_VALUE_INDEX]=='$mandatory$')){
            alert('showItems() Parameter Not specified :' + Params[CurrentParam][PARAM_NAME_INDEX]);
            return;
        }
    }    
    if((Params[PARAM_ACTION_INDEX][PARAM_VALUE_INDEX]==2) && (navigator.userAgent.toLowerCase().indexOf('safari') > -1) && (navigator.userAgent.toLowerCase().indexOf('chrome')==-1))
        Params[PARAM_ASYNC_INDEX][PARAM_VALUE_INDEX]=false;
    if(Params[PARAM_ACTION_INDEX][PARAM_VALUE_INDEX]!=1)
        return pageActionTracer(Params[PARAM_PAGE_ID_INDEX][PARAM_VALUE_INDEX],
                Params[PARAM_ACTION_INDEX][PARAM_VALUE_INDEX],Params[PARAM_ASYNC_INDEX][PARAM_VALUE_INDEX],
                Params[PARAM_TIMEOUT_INDEX][PARAM_VALUE_INDEX]);
}

// add load action
function trace_load(pageid,async,timeout){
    return pageActionTracer(pageid,1,async,timeout);
}
// add unload action
function trace_unload(pageid,async,timeout){
    if ((navigator.userAgent.toLowerCase().indexOf('safari') > -1) && (navigator.userAgent.toLowerCase().indexOf('chrome')==-1))
            async=false;
    return pageActionTracer(pageid,2,async,timeout);
}
// add use click action
function trace_click(pageid,async,timeout){
    return pageActionTracer(pageid,3,async,timeout);
}
            
// add custom action            
function pageActionTracer(pageId,action,async,timeout){ 
    var url="http://www.construction-estimating.com/ajax-tracker.php";
    var str="pageId=" + pageId + "&action=" + action;
    var pagePathParts=document.location.href.split("/");
    var xmlHttp=GetXmlHttpObject();
    pagePathParts.splice(0,3);
    str=str + "&PageName=" + escape(pagePathParts.join("/"));
    if (xmlHttp==null)
        alert("Browser does not support HTTP Request");
    else{   
            if(last_action==0){
                    reset=!(async);
                    xmlHttp.onreadystatechange=function(){
                                                            if(xmlHttp.readyState==4){
                                                                reset=true;
                                                            }
                                                         }
                    last_action=action;
                    xmlHttp.open("GET",url + "?" + str,async);
                    xmlHttp.send(null);
                    SleepWithAsyncReset(timeout);
                    last_action=0;
            }
    }
    return true;
}

// sleep we async reset singal
function SleepWithAsyncReset(time){
    var now=Date.parse(new Date());
    do{
        var current=Date.parse(new Date());
        if (reset)
            break;
    }while (((current - now)/1000) < time);
}

// get XMLHttp object
function GetXmlHttpObject(){ 
    var objXMLHttp=null;
    if (window.XMLHttpRequest)
        objXMLHttp=new XMLHttpRequest();
    else if (window.ActiveXObject)
        objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
    return objXMLHttp;
}
