﻿///ajax.js: ajax functions

function GetFriends()
{
    var paramArray = new Array();
    paramArray["UserPassportName"] = username;
    AJAXFetch("Friends", paramArray, GetFriends, true);
}

function GetFriends(xmldoc)
{
    MyFriends = "";
    var friends = xmldoc.getElementsByTagName("Friend");
    for(var i = 0 ; i < friends.length ;  i++)
    {
        MyFriends += friends[i].getAttribute("FriendID")+";";
    }
}

function AjaxOnPageLoading()
{
    generateTagStream();
    getRecentVideos();
}

var loadingSign = null;

function loadingOn() 
{
    if (loadingSign) 
    {
        loadingSign.style.display = '';
    }
}

function loadingOff() 
{
    if (loadingSign) 
    {
        loadingSign.style.display = 'none';
    }
}

var HTTP_STATUS_OK = 200;
var READYSTATE_COMPLETED = 4;


function AJAXSubmit(submitType, paramArray, callBack, sync) 
{
    paramArray["UserPGUID"] = userHexPGUID;
    paramArray["UserPassportName"] = username;
    var paramString = "";
    for (paramName in paramArray) 
    {
        paramString += "&" + paramName + "=" + paramArray[paramName];
    }
    makeRequest("SubmitData.aspx?UploadType=" + submitType + paramString, callBack, sync);
}

function AJAXFetch(submitType, paramArray, callBack, sync) 
{
    var paramString = "";
    for (paramName in paramArray) 
    {
        paramString += "&" + paramName + "=" + paramArray[paramName];
    }
    makeRequest("FetchData.aspx?Type=" + submitType + paramString, callBack, sync);
}

var requestArray = new Array();

function makeRequest(url, callFunction, sync) 
{
    // find a slot to put our request
    var requestIndex = requestArray.length;
    for (var i=0; i<requestArray.length; i++) 
    {
        if (!requestArray[i]) 
        {
            requestIndex = i;
            break;
         }
    }
    
    requestArray[requestIndex] = 
    {
        req: null,
        handle: callFunction
    };
	if (window.XMLHttpRequest) 
	{
		requestArray[requestIndex].req = new XMLHttpRequest();
	} 
	else if (window.ActiveXObject) 
	{
		requestArray[requestIndex].req = new ActiveXObject("Msxml2.XMLHTTP.3.0");
	}

	if (!requestArray[requestIndex].req) 
	{
		return false;
    }
	requestArray[requestIndex].req.onreadystatechange = handleRequest;
	requestArray[requestIndex].req.open('POST', url, sync);
	requestArray[requestIndex].req.send(null);
}

var handleMutex = 0;
var rIndex = 0;
function handleRequest() 
{
    if (handleMutex) 
    {
        rIndex = 0;
        return;
    }
    handleMutex = 1;
    var loading = false;
    for (rIndex=0; rIndex<requestArray.length; rIndex++) 
    {
        var thisloading = false;
        if (requestArray[rIndex]) 
        {
            thisloading = true;
            if (requestArray[rIndex].req.readyState == READYSTATE_COMPLETED) 
            {
                if(requestArray[rIndex].req.status == 404)
                {
                    alert("no data found!");
                }
                else if (requestArray[rIndex].req.status == HTTP_STATUS_OK) 
                {
                    if(requestArray[rIndex].req.responseText.indexOf("ReturnString:") != -1)
                    {
                        var returnString = requestArray[rIndex].req.responseText.replace("ReturnString:","");
                        if(returnString.indexOf("OK") == -1)
                        {
                            //alert(returnString);
                            requestArray.splice(rIndex,1);
                            rIndex --;
                            continue;
                        }
                    }
                    requestArray[rIndex].handle(requestArray[rIndex].req.responseXML);
                    requestArray[rIndex] = null;
                    thisloading = false;
                }
                else
                {
                    //alert(requestArray[rIndex].req.statusText);
                    requestArray.splice(rIndex,1);
                    rIndex --;
                    continue;
                }
            }
        }
        loading = (loading || thisloading); 
    }
    if (loading) 
    {
        loadingOn();
    } 
    else 
    {
        loadingOff();
    }
    handleMutex = 0;
}