var ajaxInProgress = false; // should prevent sending multiple requests from the same page
var envUrl = "api-dev.gizmoz.co.il";
var WSVer = "ax211";
var ISWSVer = "ax23";
var INVALID_TOKEN = -999;
var MAX_TAG_LENGTH = 30;
var IMAGE_FORMAT = "image";
var TAG_TYPE_UGC = "1";

function loginWPass(partner, application, callback){
    var data = "partner=" + partner + "&applicationName=" + application + "&username=" + username + "&password=" + password + "&oldToken=" + apiToken;
    data += "&output=json&callback=loginWPassResponse";
    var url = apiDomain + "axis2/services/User/login?" + data;
    createScript(url);
}

function loginWPassResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.loginResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.loginResponse.returnTag.errorMsg, gizmozObj.loginResponse.returnTag.rc);
        //redirectError(gizmozObj.loginResponse.returnTag.errorMsg);
	redirectError("User does not exist or wrong password");
    } else if (gizmozObj.loginResponse.returnTag.token == "") {
        alertError("Error: Empty token returned", gizmozObj.loginResponse.returnTag.rc);
        redirectError("Error: Empty token returned");
    } else {
        var token = gizmozObj.loginResponse.returnTag.token;
        token = token.replace (/</g,"%3C");
        token = token.replace (/>/g,"%3E");
        apiToken = token;
        execFunction();
    }
}

function loginAsDefaultUserForPartner(partner, application) {
    var data = "partner=" + partner + "&partnerEncryptedKey=" + partnerEncryptedKey + "&applicationName=" + application;
    data += "&output=json&callback=loginAsDefaultUserForPartnerResponse";
    var url = apiDomain + "axis2/services/User/loginAsDefaultUserForPartner?" + data;
    createScript(url);
}

function loginAsDefaultUserForPartnerResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.loginAsDefaultUserForPartnerResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.loginAsDefaultUserForPartnerResponse.returnTag.errorMsg, gizmozObj.loginAsDefaultUserForPartnerResponse.returnTag.rc);
        redirectError(gizmozObj.loginAsDefaultUserForPartnerResponse.returnTag.errorMsg);
    } else {
        var token = gizmozObj.loginAsDefaultUserForPartnerResponse.returnTag.token;
        token = token.replace (/</g,"%3C");
        token = token.replace (/>/g,"%3E");
        apiToken = token;
        setLogininSession(true);
    }
}

// Use this for user login (No password validation)
function doApiFunction(partner, application) {
    if ((apiToken == null) || (apiToken == "")) {
        loginAsDefaultUserForPartner(partner, application);
    } else {
        execFunction();
    }
}

// Use this for user+password login
function doApiFunctionWPass(partner, application) {
    loginWPass(partner, application);
}

function execFunction() {
    if (apiFunction)
        eval(apiFunction);
}

// Templates in Home Page
function showTemplatesFeed(templatesArr) {
    var divArray = doDivSketch(templatesArr,'popularTemp');
    doGalleryTable(divArray,0,2,"paging",1,"popularTemplates","");
}

// Gallery
function doAPIGallery() {
    switch(gallery.type) {
        case 'asset':
            var assetType = "material";
            var assetSubType = "studio_scene";
            var data = "token=" + apiToken + "&assetType=" + assetType + "&assetSubType=" + assetSubType + "&from=" + gallery.startIndex + "&to=" + gallery.toIndex + "&ofUser=" + gallery.userList + "&withStatistics=" + gallery.withStatistics;
            var apiCall = "axis2/services/GizmozUser/getAssets?";
            break;
        case 'assetByTag':
            var assetType = "material";
            var assetSubType = "studio_scene";
            var data = "token=" + apiToken + "&tags=" + gallery.searchTags + "&andRelation=" + gallery.andRelation + "&tagType=" + gallery.tagType + "&from=" + gallery.startIndex + "&to=" + gallery.toIndex + "&withStatistics=" + gallery.withStatistics + "&assetType=" + assetType + "&assetSubType=" + assetSubType + "&withTags=" + "&assetOwnerUsername=" + gallery.userList;
            var apiCall = "axis2/services/GizmozCatalog/getAssetsByTags?";
            break;
        case 'assetByTagEx':
            var assetType = "material";
            var assetSubType = "studio_scene";
            var paramsXml = createByTagExProp(gallery, assetType, assetSubType);
            var data = "token=" + apiToken + "&paramsXml=" + paramsXml;
            var apiCall = "axis2/services/GizmozCatalog/getAssetsByTagsEx?";
            break;
        case 'assetById':
            var data = "token=" + apiToken + "&assetId=" + gallery.itemId + "&withStatistics=" + gallery.withStatistics;
            var apiCall = "axis2/services/GizmozUser/getAssetById?";
            break;
        case 'assetByIdList':
            var data = "token=" + apiToken + "&assetId=" + gallery.itemId + "&withStatistics=" + gallery.withStatistics;
            var apiCall = "axis2/services/GizmozUser/getAssetById?";
            break;
        case 'catalog':
            var data = "token=" + apiToken + "&tags=" + gallery.searchTags + "&from=" + gallery.startIndex + "&to=" + gallery.toIndex;
            var apiCall = "axis2/services/GizmozCatalog/getCatalog?";
            break;
        case 'publicUserProperties':
            var data = "token=" + apiToken + "&propertyList=" + gallery.propertyList + "&userList=" + gallery.userList;
            var apiCall = "axis2/services/GizmozUser/getPublicUserProperties?";
            break;           
        case 'userProperties':
            var data = "token=" + apiToken + "&propertyList=" + gallery.propertyList;
            var apiCall = "axis2/services/GizmozUser/getProperties?";
            break;       
        case 'comments':
            var data = "token=" + apiToken + "&assetId=" + gallery.itemId + "&username=" + gallery.userList + "&from=" + gallery.startIndex + "&to=" + gallery.toIndex;
            var apiCall = "axis2/services/GizmozSite/getComments?";
            break;
        case 'heads':
            //var assetType = "head";
            //var assetSubType = "TDC";
            var data = "token=" + apiToken + "&from=" + gallery.startIndex + "&to=" + gallery.toIndex + "&assetOwnerUsername=" + gallery.userList;
            var apiCall = "axis2/services/GizmozSite/getUserHeads?";
            break;
        case 'hpheads':
            var data = "token=" + apiToken + "&from=1&to=1&assetOwnerUsername=" + gallery.userList;
            var apiCall = "axis2/services/GizmozSite/getUserHeads?";
            break;
        case 'itemPageAssets':
            var data = "token=" + apiToken + "&itemId=" + gallery.itemId;
            var apiCall = "axis2/services/GizmozSite/getItemPageAssets?";
            break;
        default:       
            return;
    }
    data += "&output=json&callback=doAPIGalleryResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function doAPIGalleryResponse(gizmozObj) {
    removeScript(scriptCounter);
    var doCont = true;
    //alert("in doAPIGalleryResponse. gallery.type="+gallery.type);
    switch(gallery.type) {
        case 'asset':
            if (gizmozObj.getAssetsResponse.returnTag.rc < 0) {
                alertError("Error: " + gizmozObj.getAssetsResponse.returnTag.errorMsg, gizmozObj.getAssetsResponse.returnTag.rc);
            } else if (gizmozObj.getAssetsResponse.returnTag.userProperties.feed.totalResults > 0) {
                var totalResults = gizmozObj.getAssetsResponse.returnTag.userProperties.feed.totalResults;
                var dataArray = apiFeedToArray(gizmozObj);
                if (dataArray.length < 1) {
                    // If the page is empty go to the previous page
                    doCont = false;
                    var prevPage = gallery.pageNum - 1;
                    var funcName = currRefresh.substr(0, currRefresh.indexOf("("));
                    eval(funcName + "(" + prevPage + ")");
                } else {
                    var divArray = doDivSketch(dataArray, gallery.galType);
                    doGalleryTable(divArray, gallery.pageNum, gallery.quantityToShow, totalResults, gallery.pagingType, gallery.colsNum, gallery.divName, gallery.pagingFunc, gallery.moreUrl);
                }
            } else {
                clearGallery(gallery.divName);
            }
            break;
        case 'assetByTag':
            if (gizmozObj.getAssetsByTagsResponse.returnTag.rc < 0) {
                alertError("Error: " + gizmozObj.getAssetsByTagsResponse.returnTag.errorMsg, gizmozObj.getAssetsByTagsResponse.returnTag.rc);
            } else if (gizmozObj.getAssetsByTagsResponse.returnTag.catalogDetails.feed.totalResults > 0) {
                var totalResults = gizmozObj.getAssetsByTagsResponse.returnTag.catalogDetails.feed.totalResults;
                var dataArray = apiFeedToArray(gizmozObj);
                var divArray = doDivSketch(dataArray, gallery.galType);
                doGalleryTable(divArray, gallery.pageNum, gallery.quantityToShow, totalResults, gallery.pagingType, gallery.colsNum, gallery.divName, gallery.pagingFunc, gallery.moreUrl);
            } else { 
                clearGallery(gallery.divName);
            }
            break;
        case 'assetByTagEx':
            if (gizmozObj.getAssetsByTagsExResponse.returnTag.rc < 0) {
                alertError("Error: " + gizmozObj.getAssetsByTagsExResponse.returnTag.errorMsg, gizmozObj.getAssetsByTagsExResponse.returnTag.rc);
            } else if (gizmozObj.getAssetsByTagsExResponse.returnTag.catalogDetails.feed.totalResults > 0) {
                var totalResults = gizmozObj.getAssetsByTagsExResponse.returnTag.catalogDetails.feed.totalResults;
                var dataArray = apiFeedToArray(gizmozObj);
                var divArray = doDivSketch(dataArray, gallery.galType);
                doGalleryTable(divArray, gallery.pageNum, gallery.quantityToShow, totalResults, gallery.pagingType, gallery.colsNum, gallery.divName, gallery.pagingFunc, gallery.moreUrl);
            } else { 
                clearGallery(gallery.divName);
            }
            break;
        case 'assetById':
            if (gizmozObj.getAssetByIdResponse.returnTag.rc < 0) {
                alertError("Error: " + gizmozObj.getAssetByIdResponse.returnTag.errorMsg, gizmozObj.getAssetByIdResponse.returnTag.rc);
            } else if (gizmozObj.getAssetByIdResponse.returnTag.userProperties.feed.totalResults > 0) {
                var dataArray = assetPropToArray(gizmozObj);
                doAssetByIdUse(dataArray);
            } else {
                alertError("Error: Video does not exist");
                clearGallery(gallery.divName);
            }
            break;
        case 'assetByIdList':
            if (gizmozObj.getAssetByIdResponse.returnTag.rc < 0) {
                alertError("Error: " + gizmozObj.getAssetByIdResponse.returnTag.errorMsg, gizmozObj.getAssetByIdResponse.returnTag.rc);
            } else if (gizmozObj.getAssetByIdResponse.returnTag.userProperties.feed.totalResults > 0) {
                var dataArrayAll = apiFeedToArray(gizmozObj);
                // Only here we'll know how many entries are left
                var dataArray = getVideosByTagNPage(dataArrayAll, gallery.searchTags, gallery.andRelation);
                if (dataArray.length > 0) {
                    var totalResults = gallery.totalResults;
                    var divArray = doDivSketch(dataArray, gallery.galType);
                    doGalleryTable(divArray, gallery.pageNum, gallery.quantityToShow, totalResults, gallery.pagingType, gallery.colsNum, gallery.divName, gallery.pagingFunc, gallery.moreUrl);
                } else {
                    clearGallery(gallery.divName);
                }
            } else { 
                clearGallery(gallery.divName);
            }
            break;
        case 'catalog':
            if (gizmozObj.getCatalogResponse.returnTag.rc < 0) {
                alertError("Error: " + gizmozObj.getCatalogResponse.returnTag.errorMsg, gizmozObj.getCatalogResponse.returnTag.rc);
            } else if (gizmozObj.getCatalogResponse.returnTag.catalogDetails.feed.totalResults > 0) {
                var totalResults = gizmozObj.getCatalogResponse.returnTag.catalogDetails.feed.totalResults;
                var dataArray = apiFeedToArray(gizmozObj);
                var divArray = doDivSketch(dataArray, gallery.galType);
                doGalleryTable(divArray, gallery.pageNum, gallery.quantityToShow, totalResults, gallery.pagingType, gallery.colsNum, gallery.divName, gallery.pagingFunc, gallery.moreUrl);
            } else {
                clearGallery(gallery.divName);
            }
            break;
        case 'publicUserProperties':
            if (gizmozObj.getPublicUserPropertiesResponse.returnTag.rc < 0) 
	    {
                alertError("Error: " + gizmozObj.getPublicUserPropertiesResponse.returnTag.errorMsg, gizmozObj.getPublicUserPropertiesResponse.returnTag.rc);
            } 
	    else if (gallery.galType != "") 
	    {
		var dataArray = publicUserPropToArray(gizmozObj);
		var totalResults = dataArray.length;
		if (totalResults == 0)
		    clearGallery(gallery.divName);
		else
		{
		    var divArray = doDivSketch(dataArray, gallery.galType);
		    doGalleryTable(divArray, gallery.pageNum, gallery.quantityToShow, totalResults, gallery.pagingType, gallery.colsNum, gallery.divName, gallery.pagingFunc, gallery.moreUrl);
                } 
	    }
	    else  // This is for public details of one user not a gallery
	    {
		feed = gizmozObj.getPublicUserPropertiesResponse.returnTag.userProperties.feed;
		var dataArray = userPropToObj(feed);
		var totalResults = dataArray.length;
		if (totalResults == 0)
		    clearGallery(gallery.divName);
		else
		    doUserPropertiesDiv(dataArray);
            } 
            break;
        case 'userProperties':
            if (gizmozObj.getPropertiesResponse.returnTag.rc < 0) {
                alertError("Error: " + gizmozObj.getPropertiesResponse.returnTag.errorMsg, gizmozObj.getPropertiesResponse.returnTag.rc);
            } else if (gizmozObj.getPropertiesResponse.returnTag.rc == 1) {
                feed = gizmozObj.getPropertiesResponse.returnTag.userProperties.feed;
                var dataArray = userPropToObj(feed);
                doUserPropertiesDiv(dataArray);
            } else {
                clearGallery(gallery.divName);
            }
            break;
        case 'comments':
            if (gizmozObj.getCommentsResponse.returnTag.rc < 0) {
                alertError("Error: " + gizmozObj.getCommentsResponse.returnTag.errorMsg, gizmozObj.getCommentsResponse.returnTag.rc);
            } else if (gizmozObj.getCommentsResponse.returnTag.resultDetails.feed.totalResults > 0) {
                var totalResults = gizmozObj.getCommentsResponse.returnTag.resultDetails.feed.totalResults;
                var dataArray = commentsFeedToArray(gizmozObj);
                doCommentsPropertiesDiv(dataArray, totalResults);
                if (dataArray.length < 1) {
                    // If the page is empty go to the previous page
                    doCont = false;
                    var prevPage = gallery.pageNum - 1;
                    var funcName = commentRefresh.substr(0, commentRefresh.indexOf("("));
                    eval(funcName + "(" + prevPage + ")");
                } else {
                    var divArray = doDivSketch(dataArray, gallery.galType);
                    doGalleryTable(divArray, gallery.pageNum, gallery.quantityToShow, totalResults, gallery.pagingType, gallery.colsNum, gallery.divName, gallery.pagingFunc, gallery.moreUrl);
                }
            } else {     
                clearGallery(gallery.divName);
                doCommentsPropertiesDiv("", "");
            }
            break;
        case 'heads':
            if (gizmozObj.getUserHeadsResponse.returnTag.rc < 0) {
                alertError("Error: " + gizmozObj.getUserHeadsResponse.returnTag.errorMsg, gizmozObj.getUserHeadsResponse.returnTag.rc);
            } else if (gizmozObj.getUserHeadsResponse.returnTag.resultDetails.feed.totalResults > 0) {
                var totalResults = gizmozObj.getUserHeadsResponse.returnTag.resultDetails.feed.totalResults;
                var dataArray = apiFeedToArray(gizmozObj);
                if (dataArray.length < 1) {
                    // If the page is empty go to the previous page
                    doCont = false;
                    var prevPage = gallery.pageNum - 1;
                    var funcName = currRefresh.substr(0, currRefresh.indexOf("("));
                    eval(funcName + "(" + prevPage + ")");
                } else {
                    var divArray = doDivSketch(dataArray, gallery.galType);
		    if (dataArray[0].isDefaultHead)
			headAccess = dataArray[0].id;
                    doGalleryTable(divArray, gallery.pageNum, gallery.quantityToShow, totalResults, gallery.pagingType, gallery.colsNum, gallery.divName, gallery.pagingFunc, gallery.moreUrl);
                }
            } else {
                clearGallery(gallery.divName);
            }
            break;
        case 'hpheads':
            if (gizmozObj.getUserHeadsResponse.returnTag.rc < 0) {
                alertError("Error: " + gizmozObj.getUserHeadsResponse.returnTag.errorMsg, gizmozObj.getUserHeadsResponse.returnTag.rc);
            } else {
                var dataArray = apiFeedToArray(gizmozObj);
		//var divArray = doDivSketch(dataArray, gallery.galType);
		//doGalleryTable(divArray, gallery.pageNum, gallery.quantityToShow, totalResults, gallery.pagingType, gallery.colsNum, gallery.divName, gallery.pagingFunc, gallery.moreUrl);
		doHpHeads(dataArray);
            }
            break;
        case 'itemPageAssets':
            if (gizmozObj.getItemPageAssetsResponse.returnTag.rc < 0) {
                alertError("Error: " + gizmozObj.getItemPageAssetsResponse.returnTag.errorMsg, gizmozObj.getItemPageAssetsResponse.returnTag.rc);
            } else {
                var dataArray = apiFeedToArray(gizmozObj);
		//var divArray = doDivSketch(dataArray, gallery.galType);
		//doGalleryTable(divArray, gallery.pageNum, gallery.quantityToShow, totalResults, gallery.pagingType, gallery.colsNum, gallery.divName, gallery.pagingFunc, gallery.moreUrl);
		doItemPageAssets(dataArray);
            }
            break;
        default:   
    }
    if ((doCont) && (gallery.nextFunction != null) && (gallery.nextFunction != "")) {
        eval(gallery.nextFunction);
    }
}

function getObjIconsFromThumbArr(obj, thumbnailArr)
{
    if (!thumbnailArr)
    {
	obj.img = "images/spacer.gif"; 
	obj.imgId = ""; 
	return;
    }
    obj.img = thumbnailArr[0].url; 
    obj.imgId = thumbnailArr[0].id;
    obj.previewImg = obj.img;
    for (var j = 0; j < thumbnailArr.length; j++) 
    {
	if (thumbnailArr[j].role == "icon")
	{
	    obj.img = thumbnailArr[j].url;
	    obj.imgId = thumbnailArr[j].id;
	}
	else if (thumbnailArr[j].role == "preview")
	    obj.previewImg = thumbnailArr[j].url;
    }
}
function getObjIconsFromEntry(obj, entry)
{
    if (!entry.group || !entry.group.thumbnail)
	return;
    var thumbnailArr = getArray(entry.group.thumbnail);
    if (entry.group.thumbnail)
    {
	obj.img = thumbnailArr[0].url; 
	obj.imgId = thumbnailArr[0].id;
    }
    else
    {
	obj.img = "images/spacer.gif"; 
	obj.imgId = ""; 
    }
    obj.previewImg = obj.img;
    if ((gallery.type == 'heads') || (gallery.galType== 'heads')|| (gallery.type== 'itemPageAssets')) {
	// Get the head icon image
	for (var j = 0; j < thumbnailArr.length; j++) 
	{
	    if (thumbnailArr[j].role == "icon")
	    {
		obj.img = thumbnailArr[j].url;
		obj.imgId = thumbnailArr[j].id;
	    }
	    else if (thumbnailArr[j].role == "preview")
		obj.previewImg = thumbnailArr[j].url;
	    else if (thumbnailArr[j].role == "base3dhead")
	    {
		obj.gender = thumbnailArr[j].gender;
	    }
	}
    }
}
function getObjGenderFromEntry(obj, entry)
{
    // get the gender
    if (!entry.group || !entry.group.thumbnail)
	return;
    var thumbnailArr = getArray(entry.group.link);
    for (var j = 0; j < thumbnailArr.length; j++) 
    {
	if (thumbnailArr[j].role == "base3dhead")
	    obj.gender = thumbnailArr[j].gender;
    }
}

function apiFeedToArray(data) {
    var feed = null;

    switch(gallery.type) {
        case 'asset':
            feed = data.getAssetsResponse.returnTag.userProperties.feed;
            break;
        case 'assetByTag':
            feed = data.getAssetsByTagsResponse.returnTag.catalogDetails.feed;
            break;
        case 'assetByTagEx':
            feed = data.getAssetsByTagsExResponse.returnTag.catalogDetails.feed;
            break;
        case 'assetById':
            feed = data.getAssetByIdResponse.returnTag.userProperties.feed;
            break;
        case 'assetByIdList':
            feed = data.getAssetByIdResponse.returnTag.userProperties.feed;
            break;
        case 'catalog':
            feed = data.getCatalogResponse.returnTag.catalogDetails.feed;
            break;
        case 'publicUserProperties':
            feed = data.getPublicUserPropertiesResponse.returnTag.userProperties.feed;
            break;
        case 'heads':
            feed = data.getUserHeadsResponse.returnTag.resultDetails.feed;
            break;
        case 'hpheads':
            feed = data.getUserHeadsResponse.returnTag.resultDetails.feed;
            break;
        case 'itemPageAssets':
            feed = data.getItemPageAssetsResponse.returnTag.resultDetails.feed;
            break;
        default:   
    }
    var entries = getArray(feed.entry);
    return assetEntriesToDataArray(entries);
}

// implement JSON.stringifyToXml serialization   
 function stringifyToXml(obj) 
 {   
     var t = typeof (obj);   
     if (t != "object" || obj === null) 
     {   
	return String(obj);   
     }   
     else 
     {   
         // recurse array or object   
         var n, v, json = [], arr = (obj && obj.constructor == Array);   
   
         for (n in obj) 
	 {   
             v = obj[n]; t = typeof(v);   
             if (t == "string") ; //v = '<'+v+'>';   
             else if (t == "object" && v !== null) v = stringifyToXml(v);   
             json.push((arr ? "" : '<' + n + '>') + String(v) + (arr ? "" : '</' + n + '>'));   
         }   
	 var res = "";
	 for (n=0; n < json.length; n++)
	     res += json[n];
         return res; //String(json);   
     }   
 }

function assetEntriesToDataArray(entries)
{
    var dataArray = new Array();
    for (var i = 0; i < entries.length; i++) 
    {
        var entry = entries[i];
        var obj = new AssetProperties();
        obj.id = entry.id;
	
        obj.type = entry.group.type;
        obj.subtype = entry.group.subtype;
        obj.status = entry.group.status;
	if (entry.group.link_attribs && entry.group.link_attribs.linkAttrs)
	{
	    //obj.linkAttrs = (new XMLSerializer()).serializeToString(entry.group.link_attribs.linkAttrs);
	    obj.linkAttrs = entry.group.link_attribs.linkAttrs;
	}
	getObjIconsFromEntry(obj, entry);
	getObjGenderFromEntry(obj, entry);
        obj.title = Encoder.decode(entry.title);
        obj.creator = (entry.group.authorname)?entry.group.authorname:"";
        obj.creatorId = (entry.group.authorid)?entry.group.authorid:"";
        var published = DDMMYY(entry.published);
        obj.createdDay = published;
        obj.addedDay = published;
        obj.remixed = null; 
        obj.views = (entry.group.views)?entry.group.views:0;
        var template = "";
        var aspectWidth = 1;
        var aspectHeight = 1;
        var duration = 0;
        if (entry.group.attribs && entry.group.attribs.root)
	{
	    if (entry.group.attribs.root.externalattrs) 
	    {
		if (entry.group.attribs.root.externalattrs.General && entry.group.attribs.root.externalattrs.General.isTemplate == "true")
		    template = obj.title;
		else if (entry.group.attribs.root.externalattrs.BasedOnTemplate && entry.group.attribs.root.externalattrs.BasedOnTemplate.name)
		    template = entry.group.attribs.root.externalattrs.BasedOnTemplate.name;
		if (entry.group.attribs.root.externalattrs.General && entry.group.attribs.root.externalattrs.General.duration)
		    duration = entry.group.attribs.root.externalattrs.General.duration;
	    }
	    if (entry.group.attribs.root.externalattrs && entry.group.attribs.root.externalattrs.AspectRatio)
	    {
		if (entry.group.attribs.root.externalattrs.AspectRatio.width)
		    aspectWidth = entry.group.attribs.root.externalattrs.AspectRatio.width;
		if (entry.group.attribs.root.externalattrs.AspectRatio.height)
		    aspectHeight = entry.group.attribs.root.externalattrs.AspectRatio.height;
	    }
	    if (entry.group.attribs.root.system)
	    {
		if (entry.group.attribs.root.system.width)
		    obj.width = entry.group.attribs.root.system.width;
		if (entry.group.attribs.root.system.height)
		    obj.height = entry.group.attribs.root.system.height;
		if (entry.group.attribs.root.system.isDefaultHead)
		    obj.isDefaultHead = true;
		else
		    obj.isDefaultHead = false;
//		if (entry.group.attribs.root.system.BackgroundColor)
//		    obj.backgroundColor = entry.group.attribs.root.system.BackgroundColor;
	    }
        }
	if (entry.group.content)
	{
	    obj.format = entry.group.content.format;
	    obj.contentUrl = entry.group.content.url;
	}
        obj.template = template;
        obj.duration = duration;
        obj.aspectRatio = aspectWidth/aspectHeight;
        obj.rating = Math.round(entry.group.ratingAverage);
        obj.description = (entry.group.desc)?Encoder.decode(entry.group.desc):"";
        obj.authorization = (entry.group.authorization)?entry.group.authorization:"";
        obj.gaHitString = gallery.hitGA;
        if(obj.gaHitString)
            obj.gaHitString = obj.gaHitString.replace("{templateName}",template);
        if (gallery.imgUrl) 
	{
            if (gallery.imgUrl.match("^"+"javascript:")=="javascript:") 
                obj.imgUrl = gallery.imgUrl + "('" + obj.id + "')";
            else
                obj.imgUrl = gallery.imgUrl + "&scene="+obj.id;
        } 
	else 
            obj.imgUrl = "itemPage.jsp?partner="+partner+"&scene="+obj.id;
        obj.tags = getArray(entry.group.tags);
	if (obj.type == "head")
	{
	    obj.butUrl = "studioPage.jsp?partner="+partner+"&externalFeed=assetInjection," +
	    obj.id+",mainHead&scene=";
	    if (arrayContainsTag(obj.tags, "full_body"))
		obj.butUrl += gallery.avatarMakerTemplateId;
	    else
		obj.butUrl += gallery.headMakerTemplateId;
	}
	else if (gallery.butUrl)
            obj.butUrl = gallery.butUrl + "&scene="+obj.id;
        else
            obj.butUrl = "studioPage.jsp?partner="+partner+"&scene="+obj.id;
        var deleteFunc = gallery.trashEvent;
        if (deleteFunc != null && deleteFunc != "")
            deleteFunc += "('" + entry.id + "')";
        obj.trashEvent = deleteFunc;
        var editItem = gallery.editItem;
        if (editItem != null && editItem != "")
            editItem += "('" + entry.id + "')";
        obj.editItem = editItem;
        var printItem = gallery.printItem;
        if (printItem != null && printItem != "") 
            printItem += "('" + entry.id + "','" + obj.aspectRatio + "','" + obj.duration + "')";
        obj.printItem = printItem;
        obj.popTempStar = null;
        /*obj.creatorImg = getFirstImg(getArray(entry.group.authorcontent));
        // Get the head icon image
        var authorcontentArr = getArray(entry.group.authorcontent);
        for (var j = 0; j < authorcontentArr.length; j++) 
	{
            if (authorcontentArr[j].role == "icon") 
	    {
                obj.creatorImg = authorcontentArr[j].url;
                break;
            }
        }*/
        dataArray[i]=obj;
    }
    return dataArray;
}

function publicUserPropToArray(data) {
    var dataArray = new Array();
    var feed = null;
    feed = data.getPublicUserPropertiesResponse.returnTag.userProperties.feed;

    var entries = getArray(feed.entry);
    for (var i = 0; i < entries.length; i++) {
        var entry = entries[i];
        var obj = new UserProperties();
        obj.id = entry.id;
        obj.img = (entry.thumbnail)?getArray(getArray(entry.thumbnail)[0].url)[0]:"images/spacer.gif";
        obj.defaultHead = (entry.defaultHead)?entry.defaultHead:"";
        obj.title = entry.title;
        obj.creator = entry.username;
        var published = MMMYYYY(ParseYYYYMMDDtoMMDDYYYY(entry.published));
        obj.createdDay = published;
        obj.addedDay = published;
        obj.creatorJoined = published;
        //obj.totalVideos = (entry.totalVideos)?entry.totalVideos:"0";
        obj.rating = 0 + i;
        obj.imgUrl = "myStuff.jsp?partner="+partner+"&requestUsername="+obj.creator;
        obj.butUrl = "home.jsp";
        var privateObj = new PrivateUserProperties();
        privateObj.country = entry.country?entry.country:"";
        privateObj.hobbies = entry.hobbies?entry.hobbies:"";
        privateObj.aboutMe = entry.aboutMe?entry.aboutMe:"";
        obj.setPrivateUserProperties(privateObj);
        dataArray[i]=obj;
    }
    return dataArray;
}

function userPropToObj(feed) {
    var entry = feed.entry
    var obj = new UserProperties();
    obj.id = entry.id;
    
    var thumbnailArr = (entry.thumbnail)?getArray(entry.thumbnail):null;
    getObjIconsFromThumbArr(obj, thumbnailArr);
    //obj.img = (entry.thumbnail)?getArray(getArray(entry.thumbnail)[0].url)[0]:"images/spacer.gif";
    obj.defaultHead = (entry.defaultHead)?entry.defaultHead:"";
    obj.title = entry.title;
    obj.creator = entry.username;
    var published = MMMYYYY(ParseYYYYMMDDtoMMDDYYYY(entry.published));
    obj.createdDay = published;
    obj.addedDay = published;
    obj.creatorJoined = published;
    obj.rating = 1;
    obj.imgUrl = "myStuff.jsp?partner="+partner+"&requestUsername="+obj.creator;
    obj.butUrl = "home.jsp";
    // Private Properties
    var privateObj = new PrivateUserProperties();
    privateObj.firstName = entry.firstName?entry.firstName:"";
    privateObj.lastName = entry.lastName?entry.lastName:"";
    privateObj.gender = entry.gender?entry.gender:"";
    privateObj.birthday = entry.birthday?entry.birthday:"";
    privateObj.country = entry.country?entry.country:"";
    privateObj.town = entry.town?entry.town:"";
    privateObj.email = entry.email?entry.email:"";
    privateObj.personalWebsite = entry.personalWebSite?entry.personalWebSite:"";
    privateObj.blog = entry.blog?entry.blog:"";
    privateObj.hobbies = entry.hobbies?entry.hobbies:"";
    privateObj.aboutMe = entry.aboutMe?entry.aboutMe:"";
    privateObj.allowUpdates = entry.allowUpdates?entry.allowUpdates:false;
    obj.setPrivateUserProperties(privateObj);
    return obj;
}

function assetPropToArray(data) {
    var feed = null;
    feed = data.getAssetByIdResponse.returnTag.userProperties.feed;
    var entry = feed.entry
    var obj = new AssetProperties();
    obj.id = entry.id;
    obj.type = entry.group.type;
    obj.subtype = entry.group.subtype;
    obj.status = entry.group.status;
    getObjIconsFromEntry(obj, entry);
    getObjGenderFromEntry(obj, entry);

    var contentArr = getArray(entry.group.content);
    for (var i = 0; i < contentArr.length; i++) {
        if (contentArr[i].role == "flatSnap") {
            if (contentArr[i].width == HIGHRES_MAX_SIZE || contentArr[i].height == HIGHRES_MAX_SIZE) {
                // Get the highres image
                obj.highresImg = contentArr[i].url;
                obj.highresImgId = contentArr[i].id;
            } else if (contentArr[i].width == LOWRES_MAX_SIZE || contentArr[i].height == LOWRES_MAX_SIZE) {
                // Get the lowres image
                obj.lowresImg = contentArr[i].url;
                obj.lowresImgId = contentArr[i].id;
            }
        }
    }
    if (entry.group.content)
    {
	obj.format = entry.group.content.format;
	obj.contentUrl = entry.group.content.url;
    }
   
    obj.title = Encoder.decode(entry.title);
    obj.creator = (entry.group.authorname)?entry.group.authorname:"";
    obj.creatorId = (entry.group.authorid)?entry.group.authorid:"";
    var published = DDMMYY(entry.published);
    obj.createdDay = published;
    obj.addedDay = published;
    obj.remixed = 302111;
    obj.description = (entry.group.desc)?Encoder.decode(entry.group.desc):"";
    obj.authorization = (entry.group.authorization)?entry.group.authorization:"";
    obj.views = (entry.group.views)?entry.group.views:0;
    obj.gaHitString = gallery.hitGA;
    if (entry.group.attribs && entry.group.attribs.root)
    {
	if (entry.group.attribs.root.externalattrs && entry.group.attribs.root.externalattrs.BasedOnTemplate && entry.group.attribs.root.externalattrs.BasedOnTemplate.name)
	    obj.template = entry.group.attribs.root.externalattrs.BasedOnTemplate.name;
	//if (entry.group.attribs.root.system)
	//    obj.gender = (entry.group.attribs.root.system.gender)?entry.group.attribs.root.system.gender:"";
    }
    if(obj.gaHitString)
       obj.gaHitString = obj.gaHitString.replace("{templateName}", obj.template);
    var duration = 0;
    if (entry.group.attribs && entry.group.attribs.root && entry.group.attribs.root.externalattrs && entry.group.attribs.root.externalattrs.General && entry.group.attribs.root.externalattrs.General.duration)
        duration = entry.group.attribs.root.externalattrs.General.duration;
    obj.duration = duration;
    // Aspect ratio
    var aspectWidth = 1;
    if (entry.group.attribs && entry.group.attribs.root && entry.group.attribs.root.externalattrs && entry.group.attribs.root.externalattrs.AspectRatio && entry.group.attribs.root.externalattrs.AspectRatio.width)
        aspectWidth = entry.group.attribs.root.externalattrs.AspectRatio.width;
    var aspectHeight = 1;
    if (entry.group.attribs && entry.group.attribs.root && entry.group.attribs.root.externalattrs && entry.group.attribs.root.externalattrs.AspectRatio && entry.group.attribs.root.externalattrs.AspectRatio.height)
        aspectHeight = entry.group.attribs.root.externalattrs.AspectRatio.height;
    obj.aspectRatio = aspectWidth/aspectHeight;
    obj.rating = Math.round(entry.group.ratingAverage);
    obj.imgUrl = "itemPage.jsp?partner="+partner+"&scene="+obj.id;
    obj.butUrl = "studioPage.jsp?partner="+partner+"&scene="+obj.id;
    obj.popTempStar = 20;
    obj.tags = getArray(entry.group.tags);
    /*obj.creatorImg = getFirstImg(getArray(entry.group.authorcontent));
    // Get the head icon image
    var authorcontentArr = getArray(entry.group.authorcontent);
    for (var i = 0; i < authorcontentArr.length; i++) {
        if (authorcontentArr[i].role == "icon") {
            obj.creatorImg = authorcontentArr[i].url;
            break;
        }
    }*/

    return obj;
}

function commentsFeedToArray(data) {
    var dataArray = new Array();
    var feed = data.getCommentsResponse.returnTag.resultDetails.feed;
    var entries = getArray(feed.entry);
    for (var i = 0; i < entries.length; i++) {
        var entry = entries[i];
        var obj = new CommentProperties();
        obj.id = entry.id;
        obj.img = (entry.group.thumbnail)?getArray(getArray(entry.group.thumbnail)[0].url)[0]:"images/spacer.gif";
        obj.title = entry.title;
        obj.creator = (entry.group.username)?entry.group.username:"";
        obj.creatorId = (entry.group.userId)?entry.group.userId:"";
        obj.timeAgo = NNAGO(entry.published);
        var published = (entry.published)?DDMMYY(entry.published):"";
        obj.createdDay = published;
        obj.description = (entry.group.desc)?Encoder.decode(entry.group.desc):"";
        if (gallery.imgUrl)
            obj.imgUrl = gallery.imgUrl + "&scene="+obj.id;
        else
            obj.imgUrl = "myStuff.jsp?partner="+partner+"&requestUsername="+obj.creator;
        if (gallery.butUrl)
            obj.butUrl = gallery.butUrl + "&scene="+obj.id;
        else
            obj.butUrl = "studioPage.jsp?partner="+partner+"&scene="+obj.id;
        var deleteFunc = gallery.trashEvent;
        if (deleteFunc != null && deleteFunc != "")
            deleteFunc += "('" + entry.id + "')";
        obj.trashEvent = deleteFunc;
        var abuseEvent = gallery.abuseEvent;
        var msgText = fixText(obj.description);
        msgText = Encoder.decode(msgText);
        if (abuseEvent != null && abuseEvent != "")
            abuseEvent += '("' + obj.id + '","' + msgText + '","' + obj.creator + '")';
        obj.abuseEvent = abuseEvent;
        dataArray[i]=obj;
    }
    return dataArray;
}

function partnerPropToObj(feed) {
    var entry = feed.entry
    var obj = new PartnerProperties();
    var defaultHeadId = "";
    var defaultUserName = "";
    var defaultTorso = "";
    if (entry.attribs && entry.attribs.attrs) {
        if (entry.attribs.attrs.defaultHeadId)
            defaultHeadId = entry.attribs.attrs.defaultHeadId;
        if (entry.attribs.attrs.defaultUserName)
            defaultUserName = entry.attribs.attrs.defaultUserName;
        if (entry.attribs.attrs.defaultTorso)
            defaultTorso = entry.attribs.attrs.defaultTorso;
    }
    obj.defaultHeadId = defaultHeadId;
    obj.defaultUserName = defaultUserName;
    obj.defaultTorso = defaultTorso;
    return obj;
}

// Get the Featured Videos Gallery
function getVideosByTagNPage(givenEntries, searchTags, andRelation) {
    // Do the tag search first if needed
    var videosArr = new Array();
    var entries = new Array();
    var searchTags = gallery.searchTags!=""?gallery.searchTags.split(","):"";
    for (h=0, g=0; (h < givenEntries.length); h++) { 
        var entryElem = givenEntries[h];
        var includeElem = andRelation ? true : false;
        var tags = entryElem.tags?arrayTagsToStr(entryElem.tags):"";
        // Go through all the tags to search and find the relevant ones
        for (ij=0; ij < searchTags.length; ij++) {
            if (andRelation)
            {
                // AND relations
                if (tags == "" || (tags.indexOf(searchTags[ij]) < 0 &&
                  tags.indexOf(Encoder.decode(searchTags[ij])) < 0)) {
                    includeElem = false;
                    break;
                }
            }
            else
            {
                // OR relations
                if (tags != "" && (tags.indexOf(searchTags[ij]) >= 0 ||
                  tags.indexOf(Encoder.decode(searchTags[ij])) >= 0)) {
                    includeElem = true;
                    break;
                }
            }
        }
        if (includeElem || searchTags == "") {
            entries[g] = entryElem;
            g++;
        }
    }

    gallery.totalResults = entries.length;
    gallery.toIndex = gallery.totalResults < gallery.quantityToShow ? entries.length : 
                gallery.totalResults < gallery.toIndex ? gallery.totalResults : gallery.toIndex;
    for (i=gallery.startIndex-1, j=0; (i < entries.length && i < gallery.toIndex); i++, j++) { 
        videosArr[j] = entries[i];
    }
    return videosArr;
}

//**** Show API galleries
function doAPIShowGallery() {
    apiFunction = "doAPIGallery()";
    doApiFunction(partner, application);
}
//****
//**** Get Partner properties
function getPartnerPropApi() {
    apiFunction = "getPartnerProp()";
    doApiFunction(partner, application);
}

function getPartnerProp(partnerProperties){
    var data = "token=" + apiToken;
    var apiCall = "axis2/services/GizmozUser/getPartnerAttributes?";
    data += "&output=json&callback=getPartnerPropResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function getPartnerPropResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.getPartnerAttributesResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.getPartnerAttributesResponse.returnTag.errorMsg, gizmozObj.getPartnerAttributesResponse.returnTag.rc);
        redirectError(gizmozObj.getPartnerAttributesResponse.returnTag.errorMsg);
    } else {
        feed = gizmozObj.getPartnerAttributesResponse.returnTag.userProperties.feed;
        var dataArray = partnerPropToObj(feed);
        if ((tempNextFunc != null) && (tempNextFunc != "")) {
            var func = tempNextFunc + "('" + dataArray.defaultHeadId + "','" + dataArray.defaultUserName + "')";
            eval(func);
        }
    }
}
//****
//**** Get User public properties
function getUserPropApi(userProperties, userList) {
    apiFunction = "getUserProp('" + userProperties + "','" + userList + "')";
    doApiFunction(partner, application);
}

function getUserProp(userProperties, userList){
    var data = "token=" + apiToken + "&propertyList=" + userProperties + "&userList=" + userList;
    var apiCall = "axis2/services/GizmozUser/getPublicUserProperties?";
    data += "&output=json&callback=getUserPropResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function getUserPropResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.getPublicUserPropertiesResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.getPublicUserPropertiesResponse.returnTag.errorMsg, gizmozObj.getPublicUserPropertiesResponse.returnTag.rc);
        redirectError(gizmozObj.getPublicUserPropertiesResponse.returnTag.errorMsg);
    } else {
        feed = gizmozObj.getPublicUserPropertiesResponse.returnTag.userProperties.feed;
        var dataArray = userPropToObj(feed);
        if ((tempNextFunc != null) && (tempNextFunc != "")) {
            var func = tempNextFunc + "('" + dataArray.id + "')";
            eval(func);
        }
    }
}
//****
//**** Register User
function registerUserApi(username, age, userProperties) {
    var data = "partner=" + partner + "&applicationName=" + application + "&username=" + username + "&userProperties=" + userProperties + "&age=" + age + "&oldToken=" + apiToken;
    data += "&output=json&callback=registerUserResponse";
    var url = apiDomain + "axis2/services/User/register?" + data;
    createScript(url);
}

function registerUserResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.registerResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.registerResponse.returnTag.errorMsg, gizmozObj.registerResponse.returnTag.rc);
        redirectError("Registration failed. "+gizmozObj.registerResponse.returnTag.errorMsg);
    } else {
        var token = gizmozObj.registerResponse.returnTag.token;
        token = token.replace (/</g,"%3C");
        token = token.replace (/>/g,"%3E");
        apiToken = token;
        getUserProperties();
    }
}
//****
//**** Forgot Password for User
function forgotPassApi(username) {
    apiFunction = "forgotPass('" + username + "')";
    doApiFunction(partner, application);
}

function forgotPass(username){
    var data = "token=" + apiToken + "&username=" + username;
    data += "&output=json&callback=forgotPassResponse";
    var url = apiDomain + "axis2/services/GizmozSite/sendForgotPassword?" + data;
    createScript(url);
}

function forgotPassResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.sendForgotPasswordResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.sendForgotPasswordResponse.returnTag.errorMsg, gizmozObj.sendForgotPasswordResponse.returnTag.rc);
        redirectError("Failed to retrieve the password. "+gizmozObj.sendForgotPasswordResponse.returnTag.errorMsg);
    } else if (gizmozObj.sendForgotPasswordResponse.returnTag.resultDetails == "false") {
        redirectError("User does not exist. "+gizmozObj.sendForgotPasswordResponse.returnTag.errorMsg);
    } else {
        redirectError("Password sent to your email. "+gizmozObj.sendForgotPasswordResponse.returnTag.errorMsg);
        closeForgotPass();
    }
}
//****
//**** Check the register key
function checkRegisterKeyApi(registerKey) {
    apiFunction = "checkRegisterKey('" + registerKey + "')";
    doApiFunction(partner, application);
}

function checkRegisterKey(registerKey){
    var data = "token=" + apiToken + "&registerKey=" + registerKey;
    data += "&output=json&callback=checkRegisterKeyResponse";
    var url = apiDomain + "axis2/services/GizmozSite/checkRegisterKey?" + data;
    createScript(url);
}

function checkRegisterKeyResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.checkRegisterKeyResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.checkRegisterKeyResponse.returnTag.errorMsg, gizmozObj.checkRegisterKeyResponse.returnTag.rc);
        redirectError("Error while checking the registration key. "+gizmozObj.checkRegisterKeyResponse.returnTag.errorMsg);
    } else if (gizmozObj.checkRegisterKeyResponse.returnTag.resultDetails == "false") {
        redirectError("Registration key is invalid. "+gizmozObj.checkRegisterKeyResponse.returnTag.errorMsg);
    } else if ((tempNextFunc != null) && (tempNextFunc != "")) {
        eval(tempNextFunc);
    }
}

//****
//**** Get Videos number for a user
function doApiVideosNum(username) {
    apiFunction = "getVideosNum('" + username + "')";
    doApiFunction(partner, application);
}

function getVideosNum(username){
    var assetType = "material";
    var assetSubType = "studio_scene";
    var data = "token=" + apiToken + "&assetType=" + assetType + "&assetSubType=" + assetSubType + "&from=1&to=1&ofUser=" + username;
    var apiCall = "axis2/services/GizmozUser/getAssets?";
    data += "&output=json&callback=getVideosNumResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function getVideosNumResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.getAssetsResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.getAssetsResponse.returnTag.errorMsg, gizmozObj.getAssetsResponse.returnTag.rc);
    } else {
        var videosNumElem = document.getElementById("videosNum");
        if (videosNumElem != null)
            videosNumElem.innerHTML = gizmozObj.getAssetsResponse.returnTag.userProperties.feed.totalResults;
    }
    if ((tempNextFunc != null) && (tempNextFunc != "")) {
        eval(tempNextFunc);
    }
}
//****
//**** Add a tag to an asset
function doApiAddTagsToAsset(itemId, tags, tagType, replaceAll) {
    if (tags == null)
        tags = "";
    tempTags = fixTagString(tags, true);
    if (tempTags == null)
        tempTags = "";
    apiFunction = "doAddTagsToAsset('" + itemId + "','" + tempTags + "','" + tagType + "','" + replaceAll + "')";
    doApiFunction(partner, application);
}

function doAddTagsToAsset(itemId, tags, tagType, replaceAll){
    if (tags == "") {
        var data = "token=" + apiToken + "&item=" + itemId + "&tagType=" + tagType;
        var apiCall = "axis2/services/GizmozCatalog/clearTagsFromAsset?";
        data += "&output=json&callback=doClearTagsFromAssetResponse";
    } else {
        var data = "token=" + apiToken + "&item=" + itemId + "&tags=" + tags + "&tagType=" + tagType;
        if (replaceAll)
            data += "&replaceAll=" + replaceAll;
        var apiCall = "axis2/services/GizmozCatalog/addTagsToAsset?";
        data += "&output=json&callback=doAddTagsToAssetResponse";
    }
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function doAddTagsToAssetResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.addTagsToAssetResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.addTagsToAssetResponse.returnTag.errorMsg, gizmozObj.addTagsToAssetResponse.returnTag.rc);
    } else {
        // Get the updated search tags
        var entry = gizmozObj.addTagsToAssetResponse.returnTag.catalogDetails.feed.entry;
        var tagsArr = getArray(entry.group.tags);
        searchUgcTags = Encoder.decode(arrayUgcTagsToStr(tagsArr));
        // Update it in the tags line must have a function called updateTagsValue
        updateTagsValue(searchUgcTags);
        // Now research the related videos
        if (currRefresh)
            eval(currRefresh);
    }
}
function doClearTagsFromAssetResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.clearTagsFromAssetResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.clearTagsFromAssetResponse.returnTag.errorMsg, gizmozObj.clearTagsFromAssetResponse.returnTag.rc);
    } else {
        searchUgcTags = "";
        // Update it in the tags line must have a function called updateTagsValue
        updateTagsValue(searchUgcTags);
        // Now research the related videos
        if (currRefresh)
            eval(currRefresh);
    }
}
//****
//**** Add a comment to an asset/user
function doApiAddComment(assetId, username, commentText) {
    if (commentText != null && commentText != "") {
        commentText = fixText(commentText);
        commentText = Encoder.encode(commentText);
        apiFunction = 'doAddComment("' + assetId + '","' + username + '","' + commentText + '")';
        doApiFunction(partner, application);
    }
}

function doAddComment(assetId, username, commentText){
    var data = "token=" + apiToken + "&assetId=" + assetId + "&username=" + username + "&commentText=" + commentText + "&authorizationId=2";
    var apiCall = "axis2/services/GizmozSite/addComment?";
    data += "&output=json&callback=doAddCommentResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function doAddCommentResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.addCommentResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.addCommentResponse.returnTag.errorMsg, gizmozObj.addCommentResponse.returnTag.rc);
    } else {
        // Get the updated comments list
        eval(commentRefresh);
    }
}
//****
//**** Delete a comment from an asset/user
function doApiDeleteComment(commentId) {
    apiFunction = "doDeleteComment('" + commentId + "')";
    doApiFunction(partner, application);
}

function doDeleteComment(commentId){
    var data = "token=" + apiToken + "&commentId=" + commentId;
    var apiCall = "axis2/services/GizmozSite/deleteComment?";
    data += "&output=json&callback=doDeleteCommentResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function doDeleteCommentResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.deleteCommentResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.deleteCommentResponse.returnTag.errorMsg, gizmozObj.deleteCommentResponse.returnTag.rc);
    }
    // Get the updated comments list
    eval(commentRefresh);
}
//****
//**** Rate an asset
function doApiRateAsset(itemId, rating) {
    apiFunction = "doRateAsset('" + itemId + "','" + rating + "')";
    doApiFunction(partner, application);
}

function doRateAsset(itemId, rating){
    var data = "token=" + apiToken + "&assetId=" + itemId + "&rating=" + rating;
    var apiCall = "axis2/services/GizmozItem/rate?";
    data += "&output=json&callback=doRateAssetResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function doRateAssetResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.rateResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.rateResponse.returnTag.errorMsg, gizmozObj.rateResponse.returnTag.rc);
    } else {
        disableStars(assetRateDivId);
        // Keep here a cookie for this user that he will not rate it again
        var itemId = gizmozObj.rateResponse.returnTag.itemId;
        createCookie(itemId, true, 0);
    }
}
//****
//**** Delete an asset
function doApiDeleteAsset(itemId) {
    apiFunction = "doDeleteAsset('" + itemId + "')";
    doApiFunction(partner, application);
}

function doDeleteAsset(itemId) {
    var data = "token=" + apiToken + "&assetId=" + itemId;
    var apiCall = "axis2/services/GizmozItem/delete?";
    data += "&output=json&callback=doDeleteAssetResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function doDeleteAssetResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.deleteResponse.returnTag.rc < 0)
        alertError("Error: " + gizmozObj.deleteResponse.returnTag.errorMsg, gizmozObj.deleteResponse.returnTag.rc);
    eval(currRefresh);
}
//****
//**** get asset children
function doApiGetAssetChildren(assetId, responseFunction) {
    apiFunction = "getAssetChildren('" + assetId + "')";
    currRefresh = responseFunction;
    doApiFunction(partner, application);
}
function getAssetChildren(assetId) {
    var data = "token=" + apiToken + "&assetId=" + assetId + "&withTags=false" +
	"&output=json&callback=getAssetChildrenResponse";
    var apiCall = "axis2/services/GizmozItem/getAssetChildren?";
    var url = apiDomain + apiCall + data;
    createScript(url);
}
function getAssetChildrenResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.getAssetChildrenResponse.returnTag.rc < 0)
        alertError("Error: " + gizmozObj.getAssetChildrenResponse.returnTag.errorMsg, gizmozObj.getAssetChildrenResponse.returnTag.rc);
    else 
    {
	//var dataArray = apiFeedToArray(gizmozObj);
        var feed = gizmozObj.getAssetChildrenResponse.returnTag.itemsDetails.feed;
	var entries = getArray(feed.entry);
	var dataArray = assetEntriesToDataArray(entries);
	eval(currRefresh + '(dataArray)');
    }
}
//****
//**** Tag Cloud
function doApiGetTagCloud(tagType) {
    apiFunction = "getTagCloud('" + tagType + "')";
    doApiFunction(partner, application);
}

function getTagCloud(tagType) {
    var data = "token=" + apiToken + "&tagType=" + tagType;
    var apiCall = "axis2/services/GizmozCatalog/getTagCloud?";
    data += "&output=json&callback=getTagCloudResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function getTagCloudResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.getTagCloudResponse.returnTag.rc < 0)
        alertError("Error: " + gizmozObj.getTagCloudResponse.returnTag.errorMsg, gizmozObj.getTagCloudResponse.returnTag.rc);
    else {
        var entry = gizmozObj.getTagCloudResponse.returnTag.catalogDetails.feed.entry;
        var tagsArr = getArray(entry.group.tags);
        doTagCloudUse(tagsArr);
    }
}
//****
//**** Update user details
function doApiUpdateUser(userProperties) {
    apiFunction = "doUpdateUser('" + userProperties + "')";
    doApiFunction(partner, application);
}

function doUpdateUser(propertyList) {
    var data = "token=" + apiToken + "&propertyList=" + propertyList;
    var apiCall = "axis2/services/GizmozUser/updateUser?";
    data += "&output=json&callback=doUpdateUserResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function doUpdateUserResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.updateUserResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.updateUserResponse.returnTag.errorMsg, gizmozObj.updateUserResponse.returnTag.rc);
    } else if (gizmozObj.updateUserResponse.returnTag.rc == 1) {
        feed = gizmozObj.updateUserResponse.returnTag.userProperties.feed;
        var dataArray = userPropToObj(feed);
        doUserPropertiesDiv(dataArray);
    }
}
//****
//**** Set Default Head
function doApiSetDefaultHead(itemId) {
    apiFunction = "setDefaultHead('" + itemId + "')";
    doApiFunction(partner, application);
}

function setDefaultHead(itemId) {
    var data = "token=" + apiToken + "&itemId=" + itemId;
    var apiCall = "axis2/services/GizmozUser/setMainGizmo?";
    data += "&output=json&callback=setDefaultHeadResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function setDefaultHeadResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.setMainGizmoResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.setMainGizmoResponse.returnTag.errorMsg, gizmozObj.setMainGizmoResponse.returnTag.rc);
    } else if (gizmozObj.setMainGizmoResponse.returnTag.rc == 1) {
        feed = gizmozObj.setMainGizmoResponse.returnTag.userProperties.feed;
        var dataArray = userPropToObj(feed);
        defaultHeadUse(dataArray);
    }
}
//****
//**** Update asset details
function doApiUpdateAsset(assetId, assetProperties) {
    apiFunction = "doUpdateAsset('" + assetId + "','" + assetProperties + "')";
    doApiFunction(partner, application);
}

function doUpdateAsset(assetId, assetProperties) {
    var data = "token=" + apiToken + "&item=" + assetId + "&propertiesXml=" + assetProperties;
    var apiCall = "axis2/services/GizmozItem/updateAssetProperties?";
    data += "&output=json&callback=doUpdateAssetResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function doUpdateAssetResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.updateAssetPropertiesResponse.returnTag.rc < 0)
        alertError("Error: " + gizmozObj.updateAssetPropertiesResponse.returnTag.errorMsg, gizmozObj.updateAssetPropertiesResponse.returnTag.rc);
    // Refresh the gallery to include the updates
    if (nextFunction)
        eval(nextFunction);
    else 
        eval(currRefresh);
}
//****
//**** Create asset (Also used for flattening the video)
function doApiCreateAsset(assetProperties) {
    apiFunction = "doCreateAsset('" + assetProperties + "')";
    doApiFunction(partner, application);
}

function doCreateAsset(assetProperties) {
    var data = "token=" + apiToken + "&xmlInput=" + assetProperties;
    var apiCall = "axis2/services/GizmozItem/create?";
    data += "&output=json&callback=doCreateAssetResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function doCreateAssetResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.createResponse.returnTag.rc < 0)
        alertError("Error: " + gizmozObj.createResponse.returnTag.errorMsg, gizmozObj.createResponse.returnTag.rc);
    else if (currRefresh) {
        if (currRefresh.substr(-1,1)==")") {
            eval(currRefresh);
        } else {
            var imageId = gizmozObj.createResponse.returnTag.itemsDetails.feed.entry.group.content.id;
            var contentUrl = gizmozObj.createResponse.returnTag.itemsDetails.feed.entry.group.content.url;
            var contentWidth = gizmozObj.createResponse.returnTag.itemsDetails.feed.entry.group.content.width;
            var contentHeight = gizmozObj.createResponse.returnTag.itemsDetails.feed.entry.group.content.height;
            eval(currRefresh + "('" + imageId + "','" + contentUrl + "','" + contentWidth + "','" + contentHeight + "')");
        }
    }
}
//****
//**** Get progress of asset flattening
function apiWaitForAssetVid(assetId, callbackUrl, userParams, sleepTime, maxRetries) {
    apiFunction = "waitForAssetVid('" + assetId + "','" + callbackUrl + "','" + userParams + "','" + sleepTime + "','" + maxRetries + "')";
    doApiFunction(partner, application);
}

function waitForAssetVid(assetId, callbackUrl, userParams, sleepTime, maxRetries) {
    var data = "token=" + apiToken + "&assetId=" + assetId + "&callbackUrl=" + callbackUrl;
    data += "&userParams=" + userParams + "&sleepTime=" + sleepTime + "&maxRetries=" + maxRetries;
    var apiCall = "axis2/services/GizmozSite/waitForAssetVid?";
    data += "&output=json&callback=waitForAssetVidResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function waitForAssetVidResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.waitForAssetVidResponse.returnTag.rc < 0)
    {
        alertError("Error: " + gizmozObj.waitForAssetVidResponse.returnTag.errorMsg, gizmozObj.waitForAssetVidResponse.returnTag.rc);
    }
    else if (gizmozObj.waitForAssetVidResponse.returnTag.resultDetails == "false")
    {
        // Issue a new flat request
        flattenVideo();
    } 
    else if (currRefresh)
        eval(currRefresh);
}
//****
//**** Send Mail notification
function apiSendMail(mailTemplate, fromMail, sendTo, mailDataXml) {
    apiFunction = 'sendMail("' + mailTemplate + '","' + fromMail + '","' + sendTo + '","' + mailDataXml + '")';
    doApiFunction(partner, application);
}

function sendMail(mailTemplate, fromMail, sendTo, mailDataXml) {
    var data = "token=" + apiToken + "&mailTemplate=" + mailTemplate + "&fromMail=" + fromMail;
    data += "&sendTo=" + sendTo + "&mailDataXml=" + mailDataXml;
    var apiCall = "axis2/services/GizmozSite/sendMail?";
    data += "&output=json&callback=sendMailResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function sendMailResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.sendMailResponse.returnTag.rc < 0)
    {
        alertError("Error: " + gizmozObj.sendMailResponse.returnTag.errorMsg, gizmozObj.sendMailResponse.returnTag.rc);
    }
    else if (gizmozObj.sendMailResponse.returnTag.resultDetails == "false")
    {
    } 
    else if (currRefresh)
        eval(currRefresh);
}
//****
//**** Link Face Swap child
function apiLinkFaceSwapChild(parentId) {
    apiFunction = 'linkFaceSwapChild("' + parentId + '")';
    doApiFunction(partner, application);
}

function linkFaceSwapChild(parentId) {
    var data = "token=" + apiToken + "&parentId=" + parentId;
    var apiCall = "axis2/services/GizmozSite/linkFaceSwapChild?";
    data += "&output=json&callback=linkFaceSwapChildResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function linkFaceSwapChildResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.linkFaceSwapChildResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.linkFaceSwapChildResponse.returnTag.errorMsg, gizmozObj.linkFaceSwapChildResponse.returnTag.rc);
    } else if (gizmozObj.linkFaceSwapChildResponse.returnTag.resultDetails == "false") {
        alertError("Error: No face swap to be found", gizmozObj.linkFaceSwapChildResponse.returnTag.rc);
    } else {
        var entry = gizmozObj.linkFaceSwapChildResponse.returnTag.resultDetails.GizmozSiteResponse.feed.entry;
        var dataArray = new AssetProperties();
        dataArray.id = entry.id;
        obj.type = entry.group.type;
        obj.subtype = entry.group.subtype;
        // Get the highres image
        var contentArr = getArray(entry.group.content);
        for (var i = 0; i < contentArr.length; i++) {
            if (contentArr[i].role == "background") {
                // Get the background name
                dataArray.backgroundName = contentArr[i].name;
            }
        }

        useFaceSwap(dataArray);
    }
}

//****
//**** create head obj
var headObjAssetId;
function apiCreateHeadObj(createXml) {
    headObjAssetId = "";
    apiFunction = "createHeadObj('" + createXml + "')";
    doApiFunction(partner, application);
}

function createHeadObj(createXml) {
    var data = "token=" + apiToken + "&xmlInput=" + createXml;
    //var url = apiDomain + "axis2/services/GizmozItem/create?" + data;
    //createScript(url);
    postUrl(apiDomain + "axis2/services/GizmozItem/create?output=json&callback=createHeadObjResponse", 
        data, true, execOnSuccess(getCreateHeadObjXmlResult));
}
function getCreateHeadObjXmlResult(xmlHttpReq)
{
    eval(xmlHttpReq.responseText);
}

function createHeadObjResponse(gizmozObj)
{
    removeScript(scriptCounter);
    var rc = gizmozObj.createResponse.returnTag.rc;
    if (rc == "undefined")
        alertError("Error calling server; undefined RC");
    else if (rc <= 0) 
        alertError("Error: " + gizmozObj.createResponse.returnTag.errorMsg);
    else
    {
	headObjAssetId = gizmozObj.createResponse.returnTag.itemsDetails.feed.entry.id;
        //alert("Result asset id=" + headObjAssetId+". currRefresh="+currRefresh);
	if (currRefresh)
	    eval(currRefresh);
    }
}

//****
//**** create head preview
var headPreviewObj;
function apiCreateHeadPreview(createXml) {
    headPreviewObj = null;
    apiFunction = "createHeadPreview('" + createXml + "')";
    doApiFunction(partner, application);
}
function createHeadPreview(createXml) {
    var data = "token=" + apiToken + "&xmlInput=" + createXml + 
	"&output=json&callback=createHeadPreviewResponse";
    var url = apiDomain + "axis2/services/GizmozItem/create?" + data;
    createScript(url);
}
function createHeadPreviewResponse(gizmozObj)
{
    removeScript(scriptCounter);
    var rc = gizmozObj.createResponse.returnTag.rc;
    if (rc == "undefined")
        alertError("Error calling server; undefined RC");
    else if (rc < 0) 
        alertError("Error: " + gizmozObj.createResponse.returnTag.errorMsg);
    else
    {
	headPreviewObj = gizmozObj.createResponse.returnTag.itemsDetails.feed.entry;
        //alert("Result preview asset id=" + headPreviewObj.id+". currRefresh="+currRefresh);
	if (currRefresh)
	    eval(currRefresh);
    }
}
//****
//**** Get progress of head obj asset create
function apiWaitForHeadObj() {
    apiFunction = "waitForHeadObj()";
    doApiFunction(partner, application);
}

function waitForHeadObj() {
    //alert("waitForHeadObj; headObjAssetId="+headObjAssetId);
    var data = "token=" + apiToken + "&assetId=" + headObjAssetId + 
	"&output=json&callback=waitForHeadObjResponse";
    var url = apiDomain + "axis2/services/GizmozItem/getProgress?" + data;
    //alert("GizmozSite/waitForAsset data=\n"+data);
    createScript(url);
}

function waitForHeadObjResponse(gizmozObj) {
    removeScript(scriptCounter);
    //alert("waitForHeadObjResponse \n rc="+gizmozObj.getProgressResponse.returnTag.rc+
    //"\n stat="+gizmozObj.getProgressResponse.returnTag.itemsDetails +
    //"\n currRefresh="+currRefresh);
    if (gizmozObj.getProgressResponse.returnTag.rc < 0)
    {
        alertError("Error: " + gizmozObj.getProgressResponse.returnTag.errorMsg);
	headObjAssetId = "";
    }
    else
    {
	var stat = gizmozObj.getProgressResponse.returnTag.itemsDetails.toLowerCase();
	if ((stat == "in progress") || (stat == "waiting"))
	    setTimeout("waitForHeadObj()", 5000);
	else
	{
	    if (stat.indexOf("error") >= 0)
		headObjAssetId = "";
	    if (currRefresh)
		eval(currRefresh);
	}
    }
}

//****
//**** Upload photo to Facebook
function apiUploadPhotoToFB(assetId, facebookApiKey, uid, facebookApiSecret) {
    apiFunction = 'uploadPhotoToFB("' + assetId + '","' + facebookApiKey + '","' + uid + '","' + facebookApiSecret + '")';
    doApiFunction(partner, application);
}

function uploadPhotoToFB(assetId, facebookApiKey, uid, facebookApiSecret) {
    var data = "token=" + apiToken + "&assetId=" + assetId + "&facebookApiKey=" + facebookApiKey + 
        "&uid=" + uid + "&facebookApiSecret=" + facebookApiSecret;
    var apiCall = "axis2/services/GizmozSite/uploadPhotoToFB?";
    data += "&output=json&callback=uploadPhotoToFBResponse";
    var url = apiDomain + apiCall + data;
    createScript(url);
}

function uploadPhotoToFBResponse(gizmozObj) {
    removeScript(scriptCounter);
    if (gizmozObj.uploadPhotoToFBResponse.returnTag.rc < 0) {
        alertError("Error: " + gizmozObj.uploadPhotoToFBResponse.returnTag.errorMsg, gizmozObj.uploadPhotoToFBResponse.returnTag.rc);
    } else {
        if (gizmozObj.uploadPhotoToFBResponse.returnTag.resultDetails.photos_upload_response) {
            var imageSrc = Encoder.decode(gizmozObj.uploadPhotoToFBResponse.returnTag.resultDetails.photos_upload_response.src);
            var imageLink = Encoder.decode(gizmozObj.uploadPhotoToFBResponse.returnTag.resultDetails.photos_upload_response.link);
            uploadPhotoToFacebookResponse(imageSrc, imageLink);
        } else {
            alertError("Error: Photos uploaded but link to it is unavailable.");
        }
    }
    closeProcessWin();
}
//****

function fixTagString(strTags, validateLength) {
    // Put comas instead of blanks
    var strTagsNoBlank = strTags.replace(/ /g,",");
    // Trim comas in all places
    var strTagsComasTrimed = trimComas(strTagsNoBlank, validateLength);
    // And for dessert - encode
    var strEncoded = Encoder.encode(strTagsComasTrimed);
    return strEncoded;
}

function trimComas(strTags, validateLength) {
    var arrTags = strToArr(strTags, validateLength);
    var strTagsTrim = arrayToStr(arrTags);
    return strTagsTrim;
}

function strToArr(arrStr, validateLength) {
    var arrObj = new Array();
    var tempArr = arrStr!=""?arrStr.split(","):"";
    for (i=0, h=0; (i < tempArr.length); i++) { 
        if (tempArr[i] != "" && tempArr[i] != null) {
            if(tempArr[i].length > MAX_TAG_LENGTH && validateLength) {
                arrObj = "";
                alertError("Error: Tag length must not exceed " + MAX_TAG_LENGTH + " characters.");
                break;
            } else {
                arrObj[h] = tempArr[i];
                h++;
            }
        }
    }
    return arrObj;
}

function arrayToStr(arrObj) {
    var arrStr = ""
    for (var i = 0; i < arrObj.length; i++) { 
        arrStr += arrObj[i] + ",";
    }
    arrStr = arrStr.substr(0, arrStr.length-1);
    return arrStr;
}

function arrayTagsToStr(arrObj) {
    var arrStr = ""
    for (var i = 0; i < arrObj.length; i++) { 
        arrStr += arrObj[i].tag + ",";
    }
    arrStr = arrStr.substr(0, arrStr.length-1);
    var decodedStr = Encoder.decode(arrStr);
    return decodedStr;
}

function arrayContainsTag(arrObj, tag) {
    for (var i = 0; i < arrObj.length; i++) { 
        if (arrObj[i].tag == tag)
	    return true;
    }
    return false;
}

// Build a string of only the ugc tags
function arrayUgcTagsToStr(tagsArr) {
    var ugcTagsStr = "";
    for (var i=0, h=0; i < tagsArr.length; i++) { 
        if (tagsArr[i].type == TAG_TYPE_UGC) {
            ugcTagsStr += tagsArr[i].tag + ", ";
        }
    }
    ugcTagsStr = ugcTagsStr.substr(0, ugcTagsStr.length-1);
    var decodedStr = Encoder.decode(ugcTagsStr);
    return decodedStr;
}

function createPropertyList(propertyList, rootTag) {
    var xmlStr = "<"+ rootTag +">";
    for (var property in propertyList) {  
        value = propertyList[property];
        value = fixText(new String(value));
        xmlStr += "<"+property+">"+value+"</"+property+">";
    }
    xmlStr += "</"+ rootTag +">";
    xmlStr = xmlStr.replace (/</g,"%3C");
    xmlStr = xmlStr.replace (/>/g,"%3E");
    return xmlStr;
}

function createByTagExProp(galleryObj, assetType, assetSubType) {
    var paramsXml = "<searchParams>";
    paramsXml += "<orTags>";
    var orTagsArr = new Array();
    orTagsArr = galleryObj.orTags.split(',');
    for (var i = 0; i < orTagsArr.length; i++) {
        if (orTagsArr[i])
            paramsXml += "<tag>" + orTagsArr[i] + "</tag>";
    }
    paramsXml += "</orTags>";
    paramsXml += "<andTags>";
    var andTagsArr = new Array();
    andTagsArr = galleryObj.andTags.split(',');
    for (var i = 0; i < andTagsArr.length; i++) {
        if (andTagsArr[i])
            paramsXml += "<tag>" + andTagsArr[i] + "</tag>";
    }
    paramsXml += "</andTags>";
    paramsXml += "<ofUser>" + galleryObj.userList + "</ofUser>";
    paramsXml += "<tagType>" + galleryObj.tagType + "</tagType>";
    paramsXml += "<assetType>" + assetType + "</assetType>";
    paramsXml += "<assetSubType>" + assetSubType + "</assetSubType>";
    paramsXml += "<includeTemporaryAssets></includeTemporaryAssets>";
    paramsXml += "<withStatistics>" + galleryObj.withStatistics + "</withStatistics>";
    paramsXml += "<from>" + galleryObj.startIndex + "</from>";
    paramsXml += "<to>" + galleryObj.toIndex + "</to>";
    paramsXml += "</searchParams>";
    
    return paramsXml;
}

function getFirstImg(arrObj)
{
    imgUrl = "";
    for (var i = 0; i < arrObj.length; i++) 
    { 
        if (arrObj[i].format.match("^"+IMAGE_FORMAT)==IMAGE_FORMAT)
        {
            imgUrl = arrObj[i].url;
            break;
        }
    }
    return imgUrl;
}

function alertError(errorMsg, returnC) {
    var msgToAlert = errorMsg;
    if (errorMsg) {
        //errorMsg = errorMsg.replace(/%20/g," ");
    }
    if (returnC != undefined) {
        msgToAlert = errorMsg; // + " rc=" + returnC;
        // Session time out
        if (returnC == -999) {
            apiToken = "";
            if (gallery != undefined)
                gallery.nextFunction = "";
            var nextUrl = escape(window.location.href);
            // Go Ahead and reload the page
            window.location.href = "/newsite/presite/logout.jsp?partner="+partner+"&calledFrom="+nextUrl;
            return;
        }
    }
    if (returnC == -21 || returnC == -16 || returnC == -15 || returnC == -18 || returnC == -10) {
    } else {
        window.alert(msgToAlert);
    }
    //errDiv = document.getElementById("errDiv");
    //errDiv.innerHTML = errorMsg;
}
