// JavaScript Document
var idToIndexMap;
var idToIndexMapAll;
var newsList;
function NewsUtils() {
	this.idToIndexMap=new Hashtable();
	this.idToIndexMapAll=new Hashtable();
	this.newsList=newsList;
	this.assembleKeyXML=nu_assembleKeyXML;
	this.queryContent=nu_queryContent;
	this.queryContentResult=nu_queryContentResult;
	this.parseNodeList=nu_parseNodeList;
	this.deleteNewsIndex=nu_deleteNewsIndex;
	this.deleteNewsIndexResult=nu_deleteNewsIndexResult;
	this.regenerateNewsIndex=regenerateNewsIndex;
	this.assembleNewsMetadata=nu_assembleNewsMetadata;
	this.regenerateNewsIndexResult=regenerateNewsIndexResult;
	this.sortNewsList=nu_sortNewsList;
	this.createNewsList=nu_createNewsList;
	this.createPublicNewsList=nu_createPublicNewsList;
	this.previewNews=nu_previewNews;
	this.getIndexFromId=nu_getIndexFromId;
	this.publish=nu_publish;
	this.publishResult=nu_publishResult;
	this.loadFile=nu_loadFile;
	this.viewPublicNews=nu_viewPublicNews;
}

function nu_publish(fileName,fileContent){
	var decodedCmdSet = "";
	decodedCmdSet = "<COMMANDS>";
	decodedCmdSet+="<COMMAND CLASS_NAME=\"com.tenduke.services.objectstorage.command.SetRegularFile\"" +
								" FILE_PATH=\"./html/" + fileName + "\"" +
								" ALLOW_OVERWRITE=\"" + "true" + "\">" +
								"<OBJECT_DATA IS_ENCODED=\"true\" ENCODING=\"BASE64\">"+
 								" 	<ODP>"+
										encode64(fileContent)+
								"   </ODP>"+
 								"</OBJECT_DATA>"+
								"</COMMAND>";
	decodedCmdSet+="</COMMANDS>";
	//alert("publishing");
	commandRequest(decodedCmdSet, this.publishResult);
}
function nu_publishResult(req){
	//alert("publishingResult");
	if (req!=null && req!=undefined && req.readyState == 4) {
        if (req.status == 200 && req.responseXML!=null) {
			//
			//
			response  = req.responseXML.documentElement;
			var cmdElement = ((response!=null && response!=undefined) ? response.getElementsByTagName('COMMAND')[0]:null);
			var cmdMessageElement = ((response!=null && response!=undefined) ? response.getElementsByTagName('MESSAGE')[0]:null);
			var result = ((cmdElement!=null && cmdElement!=undefined) ? cmdElement.getAttribute('RESULT').toString():"FAILED");
			if(result=="OK") {
				//
				//
				//alert("Thank you for submitting your entry. Your entry will be processed by " + SERVICE_BRAND_DISPLAY_NAME + " and made available to other users and visitors in the Hall of Fame and Shame.");
			}
			else if(cmdMessageElement!=null && cmdMessageElement!=undefined && cmdMessageElement.firstChild!=null) {
				alert("Sorry, your news entry could not be published at this time. Please try later again!");
			}
        } 
        else {
			alert ( "Sorry, " + SERVICE_BRAND + " could not process your request at this time. Please try later again!");
        }
    }
    else {
		alert ( "Sorry, " + SERVICE_BRAND + " could not process your request at this time. Please try later again!");
    }
}
function nu_getIndexFromId(id){
	for(var i=0; i<this.newsList.length; i++){
		if(this.newsList[i].getAttribute("ID")==id){
			return i;	
		}
	}
	return -1;
}
function nu_previewNews(index,elementId){
		if(index==-1){
			document.getElementById(elementId).innerHTML='<div class="newsTitle">Not Found</div>';
			return;	
		}
		if(this.newsList==undefined || this.newsList==null || this.newsList.length==0){
			//alert("no news");
			return;	
		}
		var id=this.newsList[index].getAttribute("ID");
		var xmlRes2 = getXMLDatabaseInOneChunk("newstests/"+id+".xml", id+".xml");
		//var node=xmlRes2.firstChild.firstChild;
		var node=getNodeByType(xmlRes2, Node.CDATA_SECTION_NODE); 
		
		if(node){
			var aParser = new DOMParser();
		//alert("node.nodeValue "+node.nodeValue)
			var xmlD = aParser.parseFromString(node.nodeValue, "text/xml");
			if(xmlD){
				node=xmlD.firstChild;
			}
			else{
				alert("DOmparserFailed");	
			}
		}
		else{
			alert("cdata notFound");
		}
		/*var imgs=node.getElementsByTagName("IMG");
		for(var i=0; i<imgs.length; i++){
			imgs[i].src=decode64(imgs[i].src);	
			alert("1 imgs "+decode64(imgs[i].src)+", "+imgs[i].src+", "+encode64(imgs[i].src));
			
		}*/
		var imgs=node.getElementsByTagName("img");
		var imageSrcs=new Array();
		for(var i=0; i<imgs.length; i++){
			imageSrcs.push(decode64(imgs[i].getAttribute("src")));
			imgs[i].setAttribute("src","imageSrcs_"+i);	
		}
		var serializer2 = new XMLSerializer();
		var str2 = serializer2.serializeToString(node);
		for(var i=0; i<imageSrcs.length; i++){
			str2=str2.split("imageSrcs_"+i).join(imageSrcs[i]);
		}	
		document.getElementById(elementId).innerHTML=str2;
}
function nu_viewPublicNews(index,elementId){
	var retVal="";
	if(index==-1){
	    //alert("index is -1");
		retVal='<div class="newsTitle">News Title</div>';
	}
	else if(this.newsList==undefined || this.newsList==null || this.newsList.length==0){
		//alert("this.newsList: " + this.newList);
		retVal=""
	}
	else{
	    var i=0;
		var id=this.newsList[index].getAttribute("ID");
		var xmlRes2 = this.loadFile(id+".xml");
		var node=xmlRes2.firstChild;
		if(node && node.nodeValue && node.nodeType==Node.CDATA_SECTION_NODE){
			var aParser = new DOMParser();
			var xmlD = aParser.parseFromString(node.nodeValue, "text/xml");
			if(xmlD){
				node=xmlD.firstChild;
			}
			else{
				alert("DOmparserFailed");	
			}
		}
		else{
			alert("cdata notFound");
		}
		//
		//
		if(node) {
		    var imgs=node.getElementsByTagName("img");
		    var imageSrcs=new Array();
		    if(imgs) {
		        for(i=0; i<imgs.length; i++){
		            if(imgs[i].getAttribute("src")) {
			            imageSrcs.push(decode64(imgs[i].getAttribute("src")));
			            imgs[i].setAttribute("src","imageSrcs_"+i);	
			            //imgs[i].setAttribute("src","image.jpg");	
			        }
		        }
		        var serializer2 = new XMLSerializer();
		        retVal = serializer2.serializeToString(node);
		        for(i=0; i<imageSrcs.length; i++){
		            retVal=retVal.split("imageSrcs_"+i).join(imageSrcs[i]);
	            }
		    }
		}
	}
	//
	//
	if(retVal && elementId && document.getElementById(elementId)){
		document.getElementById(elementId).innerHTML=retVal;
		retVal = null;
	}
	return retVal;
}
function nu_sortNewsList(){
	if(newsUtils.idToIndexMapAll){
		var keys=newsUtils.idToIndexMapAll.keys();
		for(var i=keys.length-1; i>=0; i--){
			var ind=this.getIndexFromId(keys[i]);
			if(ind!=-1){
				this.newsList[ind].parentNode.insertBefore(this.newsList[ind],this.newsList[ind].parentNode.firstChild);
			}
		}
		/*for(var i=0; i<this.newsList.length; i++){
			alert("i="+newsUtils.idToIndexMap.getEntry(this.newsList[i].getAttribute("ID")));
		}*/
	}
}
function nu_createNewsList(){

	var xmlRes = getXMLDatabaseInOneChunk(NEWS_CONTAINER_PATH, NEWS_CONTAINER_NAME);
	if(xmlRes == null){
		createContainer(NEWS_CONTAINER_PATH,NEWS_CONTAINER_NAME, NEWS_CONTAINER_DISPLAY_NAME,NEWS_CONTAINER_ID);
		 xmlRes = getXMLDatabaseInOneChunk(NEWS_CONTAINER_PATH, NEWS_CONTAINER_NAME);
	}
	
	this.newsList=xmlRes.getElementsByTagName("OBJECT_REF");
	
	/*var serializer = new XMLSerializer();
	var str = serializer.serializeToString(xmlRes);
	alert("container "+str);
*/
	this.queryContent();
	this.sortNewsList();
}
function nu_createPublicNewsList(){
	//alert("createPublic");
	var retValue=-1;
	this.queryContent(15);
	var keys=this.idToIndexMap.keys();
	var newsListString='<OBJECT_MAP PATH="kentish_resource_root/containers/news.xml" NAME="news.xml" DISLAY_NAME_ENCODING="Base64" DISLAY_NAME="SW5ib3g=">'+
	'<ICON PATH="" NAME=""/>'+
	'<ACL/>'+
	'<META_DATA/>'+
	'<OBJECT_REFS>';
	for(var i=0; i<keys.length; i++){
		//alert("about to load "+keys[i]);
		var file=this.loadFile(keys[i]+".xml");
		if(file){
			//var serializer = new XMLSerializer();
			//var str = serializer.serializeToString(file);
			//alert(keys[i]+".xml: "+str);
			var node=file.firstChild;
			if(node && node.nodeValue && node.nodeType==Node.CDATA_SECTION_NODE){
				var aNodeValueParser = new DOMParser();
				//alert("node.nodeValue "+node.nodeValue)
				var xmlD = aNodeValueParser.parseFromString(node.nodeValue, "text/xml");
				if(xmlD){
					node=xmlD.firstChild;
				}
				else{
					alert("DOmparserFailed");	
				}
			}
			else{
				alert("cdata notFound");
			}
			if(node) {
			    var nodes=node.getElementsByTagName("div");
			    //alert("nodes: "+nodes.length);
			    var dname="title";
			    if(nodes) {
			        for(var j=0; j<nodes.length; j++){
				        if(nodes[j] && nodes[j].firstChild && nodes[j].getAttribute("class")=="newsTitle"){
					        //alert("nodes[j].nodeValue"+nodes[j].firstChild.nodeValue);
					        dname=nodes[j].firstChild.nodeValue;
					        break;
				        }
			        }
			        newsListString+='<OBJECT_REF PATH="newstests/'+keys[i]+'.xml"'+
		    	        ' NAME="'+keys[i]+'.xml"'+ 
		    	        ' DISLAY_NAME_ENCODING="Base64"'+
		    	        ' DISLAY_NAME="'+encode64(dname)+'"'+
		    	        ' TARGET_TYPE="OBJECT_TYPE_XML_FILE"'+
		    	        ' MIME_TYPE="text/xml"'+
		    	        ' ID="'+keys[i]+'">'+
				        '<META_DATA/>'+
			        '</OBJECT_REF>';
			    }
			}				
		}
	}
	//
	//
	newsListString+='</OBJECT_REFS>'+
					'</OBJECT_MAP>';
	//
	//
	var aParser = new DOMParser();
	try {
	    var xmlD = aParser.parseFromString(newsListString, "text/xml");
	    if(xmlD){
		    //alert("parsed*");
		    this.newsList=xmlD.getElementsByTagName("OBJECT_REF");
		    retValue=0;
	    }
	}
	catch(parserE) {
	    alert(parserE);
	}
    //
    //
	return retValue;
}

/**
 * @return true success
 */
function nu_loadFile(fileName) {
    //
    //
    var retValue = null;
    //
    //
    var req = initRequest("/html/"+fileName, "GET");
    req.setRequestHeader("Content-Type", "text/plain; charset=\"UTF-8\"");
    req.send("");
    response = ((req && req.responseXML) ? req.responseXML.documentElement : null);
    //
    //
    if(response) retValue= response;
    //
    //
    return retValue;
}
/**
 *
 */
function nu_assembleNewsMetadata(anAssetID,delta) {
	//
	//
	//
	//
	if(delta==undefined || delta==null){
		delta=1;	
	}
	var retValue = "<PARAMS>";
	//
	//
	//alert("id: "+anAssetID+", index: "+this.idToIndexMapAll.getEntry(anAssetID));
	if(this.idToIndexMapAll && this.idToIndexMapAll.getEntry(anAssetID)){
		retValue += "<PARAM NAME=\"DISPLAY_INDEX\" VALUE=\"" + (Number(this.idToIndexMapAll.getEntry(anAssetID))+delta) + "\" />";
	}
	else{
		retValue += "<PARAM NAME=\"DISPLAY_INDEX\" VALUE=\"" + 0 + "\" />";
	}
	//
	//
	retValue += "</PARAMS>";
	return retValue
}

/**
 *
 */
function regenerateNewsIndex(anAssetID) {
	//
	//
	var entryMetadata = this.assembleNewsMetadata(anAssetID,1);
	var encodedEntryMetadata = encode64(entryMetadata);
	//
	//
	var decodedCmdSet = "";
	decodedCmdSet = "<COMMANDS>";
	//var keys=idToIndexMapAll.keys();
	if(this.idToIndexMapAll){
		var keys=this.idToIndexMapAll.keys();
		for(var i=0; i<keys.length; i++){
					decodedCmdSet+="<COMMAND CLASS_NAME=\"com.tenduke.services.xmldb.parameter.TransactionalSetEntry\"" +
									" KEY=\"" + encode64(keys[i]) + "\"" +
									" SECONDARY_KEY=\"" + "SEC_KEY_ALL_PARAM_NAMES" + "\"" +
									" DATABASE_NAME=\"" + SERVICE_BRAND + NEWS_BIN_DB_POSTFIX + "\"" +
									" INSERT_MODE=\"false\"" +
									" ALLOW_DUPLICATES=\"false\">" +
								encode64(this.assembleNewsMetadata(keys[i],1)) +
							"</COMMAND>";
		}
	}
	decodedCmdSet+="<COMMAND CLASS_NAME=\"com.tenduke.services.xmldb.parameter.TransactionalSetEntry\"" +
								" KEY=\"" + encode64(anAssetID) + "\"" +
								" SECONDARY_KEY=\"" + "SEC_KEY_ALL_PARAM_NAMES" + "\"" +
								" DATABASE_NAME=\"" + SERVICE_BRAND + NEWS_BIN_DB_POSTFIX + "\"" +
								" INSERT_MODE=\"false\"" +
								" ALLOW_DUPLICATES=\"false\">" +
							encodedEntryMetadata +
						"</COMMAND>";
	
	decodedCmdSet+="</COMMANDS>";
	//alert("encodedEntryMetadata: "+decode64(encodedEntryMetadata));
	//
	// from general.js
	commandRequest(decodedCmdSet, regenerateNewsIndexResult);
}

/**
 *
 */
function regenerateNewsIndexResult(req) {
	if (req!=null && req!=undefined && req.readyState == 4) {
        if (req.status == 200 && req.responseXML!=null) {
			//
			//
			response  = req.responseXML.documentElement;
			var cmdElement = ((response!=null && response!=undefined) ? response.getElementsByTagName('COMMAND')[0]:null);
			var cmdMessageElement = ((response!=null && response!=undefined) ? response.getElementsByTagName('MESSAGE')[0]:null);
			var result = ((cmdElement!=null && cmdElement!=undefined) ? cmdElement.getAttribute('RESULT').toString():"FAILED");
			if(result=="OK") {
				//
				//
				//alert("Thank you for submitting your entry. Your entry will be processed by " + SERVICE_BRAND_DISPLAY_NAME + " and made available to other users and visitors in the Hall of Fame and Shame.");
			}
			else if(cmdMessageElement!=null && cmdMessageElement!=undefined && cmdMessageElement.firstChild!=null) {
				alert("Sorry, your news entry could not be published at this time. Please try later again!");
			}
        } 
        else {
			alert ( "Sorry, " + SERVICE_BRAND + " could not process your request at this time. Please try later again!");
        }
    }
    else {
		alert ( "Sorry, " + SERVICE_BRAND + " could not process your request at this time. Please try later again!");
    }
}
function nu_deleteNewsIndex(anAssetID){
	//alert("deleteNewsIndex");
	var decodedCmdSet="<COMMANDS>";
		decodedCmdSet+="<COMMAND CLASS_NAME=\"com.tenduke.services.xmldb.parameter.TransactionalDeleteEntry\"" +
								" KEY=\"" + encode64(anAssetID) + "\"" +
								" DATABASE_NAME=\"" + SERVICE_BRAND + NEWS_BIN_DB_POSTFIX + "\"/>";
		
		if(this.idToIndexMapAll){
			var keys=this.idToIndexMapAll.keys();
			//alert("start index "+(this.idToIndexMapAll.getEntry(anAssetID)+1));
			for(var i=Number(this.idToIndexMapAll.getEntry(anAssetID))+1; i<keys.length; i++){
				//alert("i: "+i+" new value "+this.assembleNewsMetadata(keys[i],-1));
						decodedCmdSet+="<COMMAND CLASS_NAME=\"com.tenduke.services.xmldb.parameter.TransactionalSetEntry\"" +
										" KEY=\"" + encode64(keys[i]) + "\"" +
										" SECONDARY_KEY=\"" + "SEC_KEY_ALL_PARAM_NAMES" + "\"" +
										" DATABASE_NAME=\"" + SERVICE_BRAND + NEWS_BIN_DB_POSTFIX + "\"" +
										" INSERT_MODE=\"false\"" +
										" ALLOW_DUPLICATES=\"false\">" +
									encode64(this.assembleNewsMetadata(keys[i],-1)) +
								"</COMMAND>";
			}
		}
	decodedCmdSet+="</COMMANDS>";		

	//alert("encodedEntryMetadata: "+decode64(encodedEntryMetadata));
	//
	// from general.js
	commandRequest(decodedCmdSet, this.deleteNewsIndexResult);
}
function nu_deleteNewsIndexResult(req){
	if (req!=null && req!=undefined && req.readyState == 4) {
        if (req.status == 200 && req.responseXML!=null) {
			//
			//
			response  = req.responseXML.documentElement;
			var cmdElement = ((response!=null && response!=undefined) ? response.getElementsByTagName('COMMAND')[0]:null);
			var cmdMessageElement = ((response!=null && response!=undefined) ? response.getElementsByTagName('MESSAGE')[0]:null);
			var result = ((cmdElement!=null && cmdElement!=undefined) ? cmdElement.getAttribute('RESULT').toString():"FAILED");
			if(result=="OK") {
				//
				//
				//alert("Thank you for submitting your entry. Your entry will be processed by " + SERVICE_BRAND_DISPLAY_NAME + " and made available to other users and visitors in the Hall of Fame and Shame.");
			}
			else if(cmdMessageElement!=null && cmdMessageElement!=undefined && cmdMessageElement.firstChild!=null) {
				alert("Sorry, your news entry could not be unpublished at this time. Please try later again!");
			}
        } 
        else {
			alert ( "Sorry, " + SERVICE_BRAND + " could not process your request at this time. Please try later again!");
        }
    }
    else {
		alert ( "Sorry, " + SERVICE_BRAND + " could not process your request at this time. Please try later again!");
    }
	
}
/**
 * @return true success
 */
function nu_queryContent(max_items) {
	//
	//
	//alert("kukkuu");
	if(!max_items){
		max_items=1500;
	}
	var decodedCmdSet = "";
	decodedCmdSet = "<COMMANDS>" +
						"<COMMAND CLASS_NAME=\"com.tenduke.services.xmldb.parameter.TransactionalGetEntries\"" +
								" KEY=\"\"" +
								" SECONDARY_KEY=\"DISPLAY_INDEX\"" +
								" DATABASE_NAME=\"" + SERVICE_BRAND + NEWS_BIN_DB_POSTFIX + "\"" +
								" READ_OFFSET=\"" + 0 + "\"" + 
								" MAX_ITEMS=\"" + max_items + "\"" + 
								" QUERY_METHOD=\"ITERATE_BY_SECONDARY_KEY\">" + 
							encode64(this.assembleKeyXML()) + 
						"</COMMAND>" +
					"</COMMANDS>";
	//
	//
	var req = initRequest("/servlets/XMLCommandServlet", "POST");
    req.setRequestHeader("Content-Type", "text/xml; charset=\"UTF-8\"");
    //
    //
    try {
		req.send(decodedCmdSet);
	}
	catch(cmdSendE) {
		return false;
	}
	//
	//
	this.queryContentResult(req);
}

/**
 *
 */
function nu_queryContentResult(req) {
	//
	//
	//alert("result");
	if (req!=null && req!=undefined && req.readyState == 4) {
        if (req.status == 200 && req.responseXML!=null) {
			//
			//
			response  = req.responseXML.documentElement;
			if(response==null || response==undefined) return;
			/*var serializer = new XMLSerializer();
			var str = serializer.serializeToString(response);
			alert("container "+str);*/
			//
			//
			var cmdElement = response.getElementsByTagName('COMMAND')[0];
			var cmdMessageElement = response.getElementsByTagName('OBJECT_RESPONSE')[0];
			var result = ((cmdElement!=null && cmdElement!=undefined) ? cmdElement.getAttribute('RESULT').toString():"FAILED");
			if(result=="OK" || result=="REQUIRES_AUTHENTICATION") {
				//
				//
				var aNodeList = cmdMessageElement.getElementsByTagName('PARAMS');
				//alert("OK: "+aNodeList.length);
				this.parseNodeList(aNodeList);
			}
			else if(cmdMessageElement!=null && cmdMessageElement!=undefined && cmdMessageElement.firstChild!=null) {
				alert("1 Sorry, the public database does not contain the data you requested. Please try later again!");
			}
        } 
        else {
			alert("2 Sorry, the public database does not contain the data you requested. Please try later again!");
        }
    }
    else {
		alert("3 Sorry, the public database does not contain the data you requested. Please try later again!");
    }
}
/**
 *
 */
function nu_assembleKeyXML() {
	//
	//
	var retValue = "<PARAMS>";
	retValue += "<PARAM NAME=\"DISPLAY_INDEX\" VALUE=\"\" />";
	retValue += "</PARAMS>";
	return retValue;
}
/**
 *
 */
 function nu_parseNodeList(paramsList) {
	//
	//
	this.idToIndexMap.clear();
	this.idToIndexMapAll.clear();
	if(paramsList!=null && paramsList!=undefined) {
		//
		//
		for(var i=0; i<paramsList.length; i++) {
			var aNode = paramsList[i];
			if(aNode!=null) {		
				//
				//		
				var id="";
				var index="";
				var keys=aNode.getElementsByTagName('KEY');
				if(keys.length<1){
					//alert("no p key");	
				}
				id=decode64(keys[0].getAttribute('VALUE').toString());
				var params=aNode.getElementsByTagName("PARAM");
				for(var j=0; j<params.length;j++){
					if(params[j].getAttribute('NAME').toString()=="DISPLAY_INDEX"){	
						index=params[j].getAttribute('VALUE').toString();	
					}
				}
				this.idToIndexMapAll.putEntry(id,index);
				if(i<15){
					this.idToIndexMap.putEntry(id,index);
				}
			}
		}
	}
	//alert("idToIndexMap "+this.idToIndexMap.keys().length);
}


