
var isMozzy; 

	try
	{
		xmlfile = new XMLHttpRequest();
		isMozzy = true;
	}
	catch (e)
	{	
		isMozzy =  false;
	
	}


if (isMozzy) {
	Document.prototype.loadXML = function (s) {
	      
	   // parse the string to a new doc   
	   var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
	      
	   // remove all initial children
	   while (this.hasChildNodes())
	      this.removeChild(this.lastChild);
	         
	   // insert and import nodes
	   for (var i = 0; i < doc2.childNodes.length; i++) {
	      this.appendChild(this.importNode(doc2.childNodes[i], true));
	   }
	}
}



function bswPreview(site_root){
	
	
	this._site_root = site_root;

	this._total_count = 0;
	this._total_pending_count = 0;

	// load xml from string
	this._previewXML = this.loadXML("<page_request/>");
	
	// get the XSLT file from the server
	this._xsltDoc = this.getXSLTDoc(this._site_root + "/xsl/public/includes/PreviewContentList.xsl");

	// set XSLT processor 
	this.proc = this.getProc(this._previewXML ,this._xsltDoc);	
	 
	// add site root to client side xslt
	this.setParam("site_root",this._site_root);

	
}





// set paramater in the xslt 
bswPreview.prototype.setParam = function(n,v){
		
	if(this.isInternetExplorer()){
	
		this.proc.addParameter(n, v, "");
	
	} else if (this.isMozilla()){	
	
		this.proc.setParameter(null,n,v);

	} 

}



bswPreview.prototype.addControl = function(control_id,label,description,allowed_types,content_category_seq_id,type_array){
	
	
	//alert(type_array[0].val);
	try{
				
		var root = this._previewXML;
		var pr = root.getElementsByTagName("page_request")[0];
		var newControl = this._previewXML.createElement("server_control");
			
		this.addElement(newControl, "control_id", control_id);
		this.addElement(newControl, "label", label);		
		this.addElement(newControl, "description", description);
		this.addElement(newControl, "content_category_seq_id", content_category_seq_id);					
		
		// alert(allowed_types.split(",").length);
		
		
		var types_node = this.addElement(newControl, "allowed_types", null);	
		
		
		for(t in type_array){
			var node = this.addElement(types_node, "allowed_type", type_array[t].val);	
				node.setAttribute("id",type_array[t].id);
		}
					
		pr.appendChild(newControl);	
		
	}  catch (e) {

		alert(e);
		
	}
	
}

bswPreview.prototype.addContentItem = function(control_id, title,request_id,content_item_seq_id,content_type_seq_id,content_type_name,content_category_seq_id,content_category_title,sort_order_id,masthead_flag,publish_date,unpublish_date,approved_flag,last_modified_date,last_modified_user_seq_id,approved_flag,last_modified_user_last_name,last_modified_user_first_name,pending_content_item_seq_id){
		
	
		try{
			
			var root = this._previewXML;
			var pr = root.getElementsByTagName("page_request")[0];
			
			var newItem = this._previewXML.createElement("content_item");
			
			this.addElement(newItem, "control_id", control_id);
			this.addElement(newItem, "title", unescape(title));
			this.addElement(newItem, "request_id", request_id);
			this.addElement(newItem, "content_item_seq_id", content_item_seq_id);
			this.addElement(newItem, "content_type_seq_id", content_type_seq_id);
			this.addElement(newItem, "content_type_name", content_type_name);
			this.addElement(newItem, "content_category_seq_id", content_category_seq_id);
			this.addElement(newItem, "content_category_title", content_category_title);
			this.addElement(newItem, "sort_order_id", sort_order_id);
			this.addElement(newItem, "masthead_flag", masthead_flag);
			this.addElement(newItem, "publish_date", publish_date);
			this.addElement(newItem, "unpublish_date", unpublish_date);
			this.addElement(newItem, "approved_flag", approved_flag);
			this.addElement(newItem, "last_modified_date", last_modified_date);
			this.addElement(newItem, "last_modified_user_seq_id", last_modified_user_seq_id);
			this.addElement(newItem, "approved_flag", approved_flag);
			this.addElement(newItem, "last_modified_user_last_name", last_modified_user_last_name);
			this.addElement(newItem, "last_modified_user_first_name", last_modified_user_first_name);
			this.addElement(newItem, "pending_content_item_seq_id", pending_content_item_seq_id);		
										
			pr.appendChild(newItem);
			
		} catch (e) {
		
			alert(e);
		
		}


}


bswPreview.prototype.addElement = function (parent_node, node_name, node_value){

			var newNode = this._previewXML.createElement(node_name);
			
			if(node_value != null){
				var newNodeText = this._previewXML.createTextNode(node_value);	
					newNode.appendChild(newNodeText);
			}	
			
			parent_node.appendChild(newNode);
				
			return newNode;

}


// returns the XSLT process that is appropriate for the browser
bswPreview.prototype.getProc = function(xmlDoc,xsltDoc){

	try	{

		if(this.isInternetExplorer()){

			var cache  = new ActiveXObject("Msxml2.XSLTemplate.3.0");
			cache.stylesheet = xsltDoc;
			var p = cache.createProcessor();
			p.input = xmlDoc;
	  	 	 	
			return p; 
				
		} else if (this.isMozilla()){
			
			var xsltProcessor = new XSLTProcessor();
			xsltProcessor.importStylesheet(xsltDoc);			
			return xsltProcessor;				
		} 
	
	} catch (e){
			
		alert(e);
	}
	

}

// Used by IE to the xslt transfomation

bswPreview.prototype.getTransform = function(proc){

	try{
		if(this.isInternetExplorer()){
		
			proc.transform();
			return proc.output;	
		} 
		
	} catch (e) {
	
		alert(e);
	}

} 

bswPreview.prototype.getContentListHTML = function (){
	
	
	
	try{
	
		var result;
	
		if(this.isInternetExplorer()){   
		
			this.proc.transform();
			

			result = this.getTransform(this.proc);
	
		
		} else if (this.isMozilla()){	
		
			var result = this.proc.transformToFragment(this._previewXML, document);
			
			// alert(this.proc.transformToFragment(this._previewXML, document));	
		// var result = this.proc.transformToFragment(this.xmlDoc, document);
		//	document.getElementById(this.outputArea).innerHTML = "";
		//	document.getElementById(this.outputArea).appendChild(result);
				
			
		
		} 
	
		
		
		return result;
			
	} catch (e){
		
		alert(e);
	}
	
}



bswPreview.prototype.getTotalCount = function(){
		
	return this._total_count;

}

bswPreview.prototype.getTotalPendingCount = function(){
		
	return this._total_pending_count;

}



bswPreview.prototype.getXSLTDoc = function(url){

	
	var _xslt;
	
	if(this.isInternetExplorer()){
	
		_xslt = new ActiveXObject('MSXML2.FreeThreadedDOMDocument.3.0');
		_xslt.async = false;
		_xslt.load(url);
		return _xslt;
	
	} else if (this.isMozilla()){
			
		_xslt = new XMLHttpRequest();
		_xslt.open("GET", url, false);
		_xslt.send(null);
		return  _xslt.responseXML;		
	} 	
	
}


bswPreview.prototype.incrementCount = function(i){
		
	this._total_count += i;

}
bswPreview.prototype.incrementPendingCount = function(i){
		
	this._total_pending_count += i;

}


bswPreview.prototype.loadXML = function (s){

	var _xml;

	if(this.isInternetExplorer()){
		_xml = new ActiveXObject('MSXML2.FreeThreadedDOMDocument.3.0');
		_xml.async = false;
		_xml.loadXML(s);
	} else if (this.isMozilla()){
		_xml = document.implementation.createDocument("", "", null);
		_xml.loadXML(s);
	} 	
	
	return _xml;

}


// check for IE
bswPreview.prototype.isInternetExplorer = function (){

	try
	{
		testDoc = new ActiveXObject('MSXML2.DOMDocument.3.0');
		return true;
	}
	catch (e)
	{	
		return false;
	
	}

}


// check for Firefox
bswPreview.prototype.isMozilla = function (){

	try
	{
		xmlfile = new XMLHttpRequest();
		return true;
	}
	catch (e)
	{	
		return false;
	
	}
}



