var WebService =  {
    stylesheet:null,
	outputNode:new Object(),
	moreLink: new String(),
	errorMsg: false,
    initialize:function(url, outputNode, StyleSheet, moreLink, errorMsg) {
		if(outputNode.innerHTML == "") {
			if(outputNode) {
				this.outputNode = outputNode;
			}
			if(moreLink != null || moreLink != false) {
				this.moreLink = moreLink;
			} else {
				this.moreLink = false;
			}
			if (StyleSheet) {
				this.stylesheet = XmlUtil.parseXml(StyleSheet); 
			} else if (xslStyleSheet) {
				this.stylesheet = XmlUtil.parseXml(xslStyleSheet); 
			}
			this.loadScript(url);
			
			if(errorMsg) {
				this.errorMsg = errorMsg;
			}
		}
    },
    addEvent:function(element, type, handler) {
        if (element.addEventListener) {
            element.addEventListener(type, handler, false);
        } else if (element.attachEvent) {
            element.attachEvent("on" + type, handler);
        }
    },
    loadScript:function(url, id){
	    var script = document.getElementById(id);
	    if (script) {
		    script.parentNode.removeChild(script);
	    }
	    script = document.createElement("script");
	    script.type = "text/javascript";
	    script.id = id;	
	    script.src = url;
	    document.getElementsByTagName("head")[0].appendChild(script);
    },
    runXSL:function(JSONObj) {
		if (!(JSONObj.xml && JSONObj.xml.length > 0) || JSONObj.status == 1) { 
			this.outputNode.innerHTML = this.errorMsg; 
			return;
		}
        
        var xslDOM = this.stylesheet;
        var xml = XmlUtil.parseXml(JSONObj.xml);
        
        try {    
            this.addParamsToXml(xml);
        }
        catch (e) {}
        
        var output = null;

        if (typeof XSLTProcessor != "undefined") {
            try { 
                xsl = new XSLTProcessor(); 
                xsl.importStylesheet(xslDOM);
                output = xsl.transformToFragment(xml, document);
								
                this.outputNode.innerHTML = "";
                this.outputNode.appendChild(output);
				if(this.moreLink != false) {
					this.outputNode.innerHTML += "<div class='right'><a class='left-arrow-small' href='"+this.moreLink+"'>More</a></div>";
				}
            } 
            catch (e) { output = null; }
        }
        else if (window.ActiveXObject) {
            try {
                output = xml.transformNode(xslDOM);
                this.outputNode.innerHTML = output;
				if(this.moreLink) {
					this.outputNode.innerHTML += "<div class='right'><a class='left-arrow-small' href='"+this.moreLink+"'>More</a></div>";
				}
            } 
            catch (e) { output = null; }
        }
    },
    callService:function(){
            WebService.loadScript(url, "webservice");
    }    
} // end 

function callbackfunction(response){
    if (response)
        WebService.runXSL(response);
}