function getHTTPReqObject(){
	var httpReq = null;
    if (window.ActiveXObject) {
        try {
            httpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
        } 
        catch (e) {
            try {
                httpReq = new AcviteXObject("MSXML2.XMLHTTP");
            } 
            catch (e) {
                try {
                    httpReq = new ActiveXObject("Microsoft.XMLHTTP");
                } 
                catch (E) {
                    httpReq = false;
                }
            }
        }
    }
    else if (window.XMLHttpRequest) {
            httpReq = new XMLHttpRequest();
    }
	return httpReq;
}

function Standard () {
        
        this.__id;
        this.__name;
        
        this.getId = function () {
            return this.__id;
        }
        this.setId = function (id){
            this.__id = id;
        }
        
        this.getName = function () {
            return this.__name;
        }
        this.setName = function (name) {
            this.__name = name;
        }
}

function parseAOXML(returnDocElement){
    var aoXML = returnDocElement.getElementsByTagName('lo');
    
    //
    var tmpAO = null;
    var tmpPreview = null;
    var tmpStandard = null;
    var standards = new Array();
    
    tmpAO = new AO();
	
	var retVal = {
		ao:null,
		standards:null
	};
	
    var children = aoXML[0].childNodes;
    
    for (var j = 0; j < children.length; j++) {
        if (children[j].nodeName == "id") {
            tmpAO.setId(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "title") {
            tmpAO.setTitle(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "course") {
            tmpAO.setCourse(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "itemNum") {
            tmpAO.setItemNum(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "minGrade") {
            tmpAO.setMinGrade(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "maxGrade") {
            tmpAO.setMaxGrade(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "keywords") {
            tmpAO.setKeyword(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "shortDesc") {
            tmpAO.setShortDesc(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "longDesc") {
            tmpAO.setLongDesc(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "previewPath") {
            tmpAO.setPreviewPath(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "learningTime") {
            tmpAO.setRecommendedTime(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "prerequisites") {
            tmpAO.setPrerequisite(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "systemReq") {
            tmpAO.setSystemReq(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "comingSoon") {
            tmpAO.setComingSoon(children[j].firstChild.nodeValue == "true");
        }
        if (children[j].nodeName == "learnerOutcomes") {
            tmpAO.setLearnerOutcomes(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "loType") {
            tmpAO.setAOType(children[j].firstChild.nodeValue);
        }
        if (children[j].nodeName == "previews") {
            
			var pChildren =  children[j].childNodes;
			
            for (var y = 0; y < pChildren.length; y++) {
                if (pChildren[y].nodeName == "thumbnails") {
                
                    var thumbnailChildren = pChildren[y].childNodes;
                    
                    
                    for (var x = 0; x < thumbnailChildren.length; x++) {
                        if (thumbnailChildren[x].nodeName == "preview") {
                            // get the preview node
                            if (thumbnailChildren[x].firstChild) {
                                var previewData = thumbnailChildren[x].childNodes;
                                tmpPreview = new Preview();
                                for (var k = 0; k < previewData.length; k++) {
                                    if (previewData[k].nodeName == "id") {
                                        if (previewData[k].firstChild) 
                                            tmpPreview.setId(previewData[k].firstChild.nodeValue);
                                    }
                                    if (previewData[k].nodeName == "caption") {
                                        if (previewData[k].firstChild) 
                                            tmpPreview.setCaption(previewData[k].firstChild.nodeValue);
                                    }
                                    if (previewData[k].nodeName == "fileName") {
                                        if (previewData[k].firstChild) 
                                            tmpPreview.setFileName(previewData[k].firstChild.nodeValue);
                                    }
                                    if (previewData[k].nodeName == "defaultThumbnail") {
                                        if (previewData[k].firstChild) {
                                            tmpPreview.setDefault(previewData[k].firstChild.nodeValue == "true");
                                            if (tmpPreview.isDefault()) 
                                                tmpAO.setDefaultThumbnailIndex(x);
                                        }
                                    }
                                }
                                tmpAO.getThumbnails()[x] = tmpPreview;
                                
                            }
                        }
                    }
                }
                
            }
        }
        if (children[j].nodeName == "videos") {
            //TODO: loop for videos
        }
        if (children[j].nodeName == "objectiveMap") {
            var standardsChildren = children[j].childNodes;
            
            for (var x = 0; x < standardsChildren.length; x++) {
                if (standardsChildren[x].nodeName == "standard") {
                    // get the preview node
                    if (standardsChildren[x].firstChild) {
                        var standardData = standardsChildren[x].childNodes;
                        tmpStandard = new Standard();
                        for (var k = 0; k < standardData.length; k++) {
                            if (standardData[k].nodeName == "id") {
                                if (standardData[k].firstChild) 
                                    tmpStandard.setId(standardData[k].firstChild.nodeValue);
                            }
                            if (standardData[k].nodeName == "title") {
                                if (standardData[k].firstChild) 
                                    tmpStandard.setName(standardData[k].firstChild.nodeValue);
                            }
                        }
                        standards[x] = tmpStandard;
                    }
                }
            }
        }
        if(children[j].nodeName == "relatedLOs") {
        	var relatedLOs = children[j].childNodes;
        	
        	for(var x = 0; x < relatedLOs.length; x++) {
        		if(relatedLOs[x].nodeName == "relatedLO") {
        			if(relatedLOs[x].firstChild) {
        				var relatedLOData = relatedLOs[x].childNodes;
        				
        				var tmpRelLO = new AO();
        				
        				for(var k = 0; k < relatedLOData.length; k++) {
        					if(relatedLOData[k].nodeName == "id") {
        						tmpRelLO.setId(relatedLOData[k].firstChild.nodeValue);
        					}
        					if(relatedLOData[k].nodeName == "title") {
        						tmpRelLO.setTitle(relatedLOData[k].firstChild.nodeValue);
        					}
        					if(relatedLOData[k].nodeName == "shortDesc") {
        						tmpRelLO.setShortDesc(relatedLOData[k].firstChild.nodeValue);
        					}
        					if(relatedLOData[k].nodeName == "itemNum") {
        						tmpRelLO.setItemNum(relatedLOData[k].firstChild.nodeValue);
        					}
        					if(relatedLOData[k].nodeName == "course") {
        						tmpRelLO.setCourse(relatedLOData[k].firstChild.nodeValue);
        					}
        					if(relatedLOData[k].nodeName == "comingSoon") {
        						tmpRelLO.setComingSoon(relatedLOData[k].firstChild.nodeValue);
        					}
        					if(relatedLOData[k].nodeName == "thumbnail"){
        						 var thumbnailChildren = relatedLOData[k].childNodes;
        		                    
        		                    for (var t = 0; t < thumbnailChildren.length; t++) {
        		                        if (thumbnailChildren[t].nodeName == "preview") {
        		                            // get the preview node
        		                            if (thumbnailChildren[t].firstChild) {
        		                                var previewData = thumbnailChildren[t].childNodes;
        		                                var tmpPreview = new Preview();
        		                                for (var m = 0; m < previewData.length; m++) {
        		                                    if (previewData[m].nodeName == "id") {
        		                                        if (previewData[m].firstChild) 
        		                                            tmpPreview.setId(previewData[m].firstChild.nodeValue);
        		                                    }
        		                                    if (previewData[m].nodeName == "caption") {
        		                                        if (previewData[m].firstChild) 
        		                                            tmpPreview.setCaption(previewData[m].firstChild.nodeValue);
        		                                    }
        		                                    if (previewData[m].nodeName == "xsmallFileName") {
        		                                        if (previewData[m].firstChild) 
        		                                            tmpPreview.setFileName(previewData[m].firstChild.nodeValue);
        		                                    }
        		                                    if (previewData[m].nodeName == "defaultThumbnail") {
        		                                        if (previewData[m].firstChild) {
        		                                            tmpPreview.setDefault(previewData[m].firstChild.nodeValue == "true");
        		                                            if (tmpPreview.isDefault()) 
        		                                            	tmpRelLO.setDefaultThumbnailIndex(t);
        		                                        }
        		                                    }
        		                                }
        		                                tmpRelLO.getThumbnails()[t] = tmpPreview;
        		                                
        		                            }
        		                        }
        		                    }
        					}
        				}
        			}
        			tmpAO.getRelatedLOs()[x] = tmpRelLO;
        		}
        	}	
        }
        
    }
	
	retVal.ao = tmpAO;
	retVal.standards = standards;
	
    return retVal;
}

function formatText(text){
    var customTags = ['h', 'ul', 'li', 'p'];
    
    var realTags = ['h4', 'ul', 'li', 'p'];
    var tmp1, tmp2;
    for (var i = 0; i < customTags.length; i++) {
        var j = text.indexOf("[" + customTags[i]);
        while (j > -1) {
            text = text.replace("[" + customTags[i], "<" + realTags[i]);
            j = text.indexOf("[" + customTags[i]);
        }
        var j = text.indexOf("[/" + customTags[i] + "]");
        while (j > -1) {
            text = text.replace("[/" + customTags[i] + "]", "</" + realTags[i] + ">");
            j = text.indexOf("[/" + customTags[i] + "]");
        }
    }
    var j = text.indexOf("]");
    while (j > -1) {
        text = text.replace("]", ">");
        j = text.indexOf("]");
    }
    return text;
}

var proxyURL = "../proxy";
var objectiveURL = "objective.jsp";

// read get parameter
function gup(name){
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if (results == null) 
        return "";
    else 
        return results[1];
}

function trim(s)
{
	var l=0; var r=s.length -1;
	while(l < s.length && (s[l] == '\t' || s[l] == '\r' || s[l] == '\n' || s[l] == ' ')){
		l++;
	}
	while(r > l && (s[r] == '\t' || s[r] == '\r' || s[r] == '\n' || s[r] == ' ')){
		r-=1;
	}
	return s.substring(l, r+1);
}
