
//create a global var to hold the fileID
var fileID=0;

//global filter variable
var aFilter = {};
var strFilter="";

//set up domParser if IE

if (typeof DOMParser == "undefined") {
   DOMParser = function () {}

   DOMParser.prototype.parseFromString = function (str, contentType) {
      if (typeof ActiveXObject != "undefined") {
         var d = new ActiveXObject("MSXML2.DomDocument");
         d.loadXML(str);
         return d;
      } else if (typeof XMLHttpRequest != "undefined") {
         var req = new XMLHttpRequest;
         req.open("GET", "data:" + (contentType || "application/xml") +
                         ";charset=utf-8," + encodeURIComponent(str), false);
         if (req.overrideMimeType) {
            req.overrideMimeType(contentType);
         }
         req.send(null);
         return req.responseXML;
      }
   }
}


//requires a fileID to be set globally
function saveDualLanguageCheckBox(obj) {

 	var strEn = obj.value.substring(0,obj.value.indexOf('|'));
	var strEs = obj.value.substring(obj.value.indexOf('|')+1,obj.value.length);

	var key = obj.name;
	
	if (obj.checked) {

		saveMetadata(fileID, 'en', key, strEn);
		saveMetadata(fileID, 'es', key, strEs);
	} else {
	
		deleteMetadata(fileID, 'en', key, strEn);
		deleteMetadata(fileID, 'es', key, strEs);
	}
}

function toggleFilter(obj) {

 	var strValue = obj.value.substring(0,obj.value.indexOf('|')).replace(/\s+$/,"");

	if (obj.checked) {

		aFilter[encodeURIComponent(obj.name) + "[]=" + encodeURIComponent(strValue)] = 1;
	} else {
	
		aFilter[encodeURIComponent(obj.name) + "[]=" + encodeURIComponent(strValue)] = 0;
	}

	strFilter = "";
	for (key in aFilter) if (aFilter[key]==1) strFilter += "&" + key;
	
	writeYahooTable(strFilter);	
}

function writeYahooTable(strFilter) {

YAHOO.example.XHR_XML = new function() {
        
        var formatUrl = function(elCell, oRecord, oColumn, sData) {
	    elCell.innerHTML = "<a href='" + oRecord.ClickUrl + "' target='_blank'>" + sData + "</a>";
	};


        var formatCasename = function(elCell, oRecord, oColumn, oData){
                var str = oRecord.getData("casename");
				var str_es =  oRecord.getData("casename_es");

                str = str.replace(/^\s+|\s+$/g, ''); 
                str_es = str_es.replace(/^\s+|\s+$/g, '');

		if (str.length == 0)  elCell.innerHTML = str_es;  //put in spanish version
                else if (str_es.length == 0) elCell.innerHTML = str; //put in english version
                else elCell.innerHTML = "<span class=\"en\">" + str + "</span><span class=\"es\">" + str_es + "</span>"; //put in both
        }
        
		var formatCourt = function(elCell, oRecord, oColumn, oData){
                var str = oRecord.getData("court");
                var str_es =  oRecord.getData("court_es");

                elCell.innerHTML = "<span class=\"en\">" + str + "</span><span class=\"es\">" + str_es + "</span>";
        }

        var formatCountry = function(elCell, oRecord, oColumn, oData){
                var str = oRecord.getData("country");
                var str_es =  oRecord.getData("country_es");

                elCell.innerHTML = "<span class=\"en\">" + str + "</span><span class=\"es\">" + str_es + "</span>";
        }

	    var myColumnDefs = [
            {key:"date", label:"<span class=\"en\">Date</span><span class=\"es\">Fecha</span>", sortable:true},
			{key:"casename", label:"<span class=\"en\">Case</span><span class=\"es\">Decisi&oacute;n</span>", sortable:true, formatter:formatCasename},
			{key:"court", label:"<span class=\"en\">Court</span><span class=\"es\">Corte</span>", sortable:true, formatter:formatCourt},
			{key:"country", label:"<span class=\"en\">Region</span><span class=\"es\">Regi&oacute;n</span>", sortable:true, formatter:formatCountry}
        ];

		var myColumnSet = new YAHOO.widget.ColumnSet(myColumnDefs);

        this.myDataSource = new YAHOO.util.DataSource("../rTools/fm.php");
        this.myDataSource.connMethodPost = true;
        this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_XML;
        this.myDataSource.responseSchema = {
            resultNode: "row",
            fields: ["fileID","date","casename","casename_es","court","court_es","country","country_es","summary","summary_es",{key:"fileID",converter:YAHOO.util.DataSource.convertNumber, parser:YAHOO.util.DataSource.parseNumber}]
        };
        
        this.myDataTable = new YAHOO.widget.DataTable("xml", myColumnSet, this.myDataSource, {initialRequest:"action=getFileList"+strFilter, selectionMode:"single"});
    	
    	this.myDataTable.subscribe("rowClickEvent", function(oArgs){
            if (oArgs.target != null){
            var elRadio = oArgs.target;
            }
            if (this.getRecord(elRadio) != null){
            elRecord = this.getRecord(elRadio);
            }
            rowID = elRecord.getData("fileID");
            rowLink = "../rTools/fm.php?action=getFile&fileID=" + rowID;
            summaryContentEn = elRecord.getData("summary");
            summaryContentEs = elRecord.getData("summary_es");
            
        });
	
	this.myDataTable.subscribe('cellClickEvent', YAHOO.ymod.tableExtension.cleanUp );
    	
    	this.myDataTable.subscribe('rowClickEvent', YAHOO.ymod.tableExtension.selectRow, 
    	function(contentDiv) { 
			var oRecord = this.getRecord(contentDiv.target);
			var myContent = '';
			var selectedRows = this.getSelectedRows();
			if( selectedRows.length> 0 )
				{
				if (summaryContentEn != '' && summaryContentEs != '' ){
					myContent += '<span class="en">' + summaryContentEn + '</span> <span class="es">' + summaryContentEs + '</span>';
					}
				if (summaryContentEn == ''){
					myContent += '<span class="warning en">Summary not available in english </span>' + summaryContentEs;
					}
				if (summaryContentEs == ''){
					myContent += '<span class="warning es">Resumen no disponible en espa&ntilde;ol </span>' + summaryContentEn;
					}
				myContent += '<p class=\"details-link">&raquo; <a href=\"#\" onClick=\"printCase(' + rowID + ')\" ><span class="en">see case details</span><span class="es">ver detalles del caso</span></a></p>';
			}
			contentDiv.innerHTML = myContent;		
    	 }
    	 );
    };
}

function editFile(id){

	fileID = id;
	fillFile(fileID);

	document.getElementById("form-wrapper").className="showform";
}

function newFile() {

	//get a new fileID and set the global variable
	fileID = fmServer("newFile");
	editFile(fileID);
}

function deleteFile(fileID,casename) {

	if (confirm("Do you want to delete case "+casename+"?")) {
		params = "fileID=" + escape(fileID);
		fmServer("deleteFile", params);
	}
}

function saveFile(fileID, date, published) {

	params = "fileID=" + escape(fileID) + "&date=" + escape(date) + "&published=" + escape(published);
	fmServer("saveFile", params);
}

function saveFileDate() {

	var strDate = document.getElementById("year").value + "/" + document.getElementById("month").value + "/" + document.getElementById("day").value;
	
	params = "fileID=" + escape(fileID) + "&date=" + escape(strDate);
	fmServer("saveFileDate", params);
}

function updateTextInput(obj, language) {

	overwriteMetadata(fileID, language, obj.name, obj.value);
}

function updateTextarea(obj, language) {

	overwriteMetadata(fileID, language, obj.name, obj.value);
}

function saveFilePublished(myFileID, published) {

	//if we don't pass a fileID, use the global one
	if (isNaN(myFileID)) myFileID=fileID;
	
	params = "fileID=" + escape(myFileID) + "&published=" + escape(published);
	fmServer("saveFilePublished", params);
}

function saveMetadata(fileID, language, key, value) {

	params = "fileID=" + escape(fileID) + "&language=" + escape(language) + "&key=" + escape(key) + "&value=" + encodeURIComponent(value);
//alert(params);
	fmServer("saveMetadata", params);
}

function overwriteMetadata(fileID, language, key, value) {

	params = "fileID=" + escape(fileID) + "&language=" + escape(language) + "&key=" + escape(key) + "&value=" + encodeURIComponent((value));
	//alert(params);
	fmServer("overwriteMetadata", params);
}

function deleteMetadata(fileID, language, key, value) {

	params = "fileID=" + escape(fileID) + "&language=" + escape(language) + "&key=" + escape(key) + "&value=" + encodeURIComponent(value);
	fmServer("deleteMetadata", params);
}

function getPublishedFileList() {

	var strXML=fmServer("getPublishedFileList", "");
	fillTable('published', strXML);	
	stripe('published', '#fff', '#f0f0f0');
}

function getUnpublishedFileList() {

	var strXML=fmServer("getUnpublishedFileList", "");
	fillTable('unpublished', strXML);	
	stripe('unpublished', '#fff', '#f0f0f0'); 
}

function fillTable(tbl, strXML) {

	// convert the string to an XML object
	var oXML = (new DOMParser()).parseFromString(strXML, "text/xml");

	// get the XML root item
	var oRows = oXML.getElementsByTagName('row');

	var strTable="<table class=\"edit-table\" width=\"659\"><tbody>";

	for (var i = 0 ; i < oRows.length ; i++) {
	
		oRow = oRows[i];
		
		//this is a locally scope'd fileID
		var myFileID = oRow.getElementsByTagName("fileID")[0].firstChild.nodeValue;
		var date = oRow.getElementsByTagName("date")[0].firstChild.nodeValue;
		var filename = oRow.getElementsByTagName("filename")[0].firstChild.nodeValue;
		var casename = oRow.getElementsByTagName("casename")[0].firstChild.nodeValue;

		strTable += "<tr><td>";
		strTable += casename;
		strTable += "</td><td>";
		strTable += filename;
		strTable += "</td><td>";
		strTable += date;
		strTable += "</td><td>";
		strTable += "<a href=\"javascript:editFile("+myFileID+")\">edit</a>";
		strTable += "</td><td>";

		if (tbl=='unpublished') strTable += "<a href=\"javascript:saveFilePublished("+myFileID+",1);getUnpublishedFileList();getPublishedFileList();\">publish</a>";
		else		 	strTable += "<a href=\"javascript:saveFilePublished("+myFileID+",0);getUnpublishedFileList();getPublishedFileList();\">unpublish</a>";
		strTable += "</td><td>";
		if (tbl=='unpublished') strTable += "<a href=\"javascript:deleteFile("+myFileID+",'"+removeQuotes(casename)+"');getUnpublishedFileList();\">delete</a>";
		else 			strTable += "<a href=\"javascript:deleteFile("+myFileID+",'"+removeQuotes(casename)+"');getPublishedFileList();\">delete</a>";
		strTable += "</td></tr>";

	}
	
	strTable += "</tbody></table>";
	
	document.getElementById(tbl).innerHTML = strTable;
}

function clearAllFileBoxes() {

	
	var inputs = document.getElementsByTagName("input");
	for(index = 0; index < inputs.length; index++)
	{
		if (inputs[index].type!="checkbox") try {inputs[index].value=""} catch (err) {}
		
		if (inputs[index].type=="checkbox") {
			
			try {
				inputs[index].checked=false
				document.getElementById("label"+inputs[index].id).className = "checkbox_unchecked";
			} catch (err) {}
		}
	}
	
	var inputs = document.getElementsByTagName("textarea");
	for(index = 0; index < inputs.length; index++)
	{
		if (inputs[index].type!="checkbox") try {inputs[index].value=""} catch (err) {}
		try {document.getElementById("label"+inputs[index].id).className = "checkbox_unchecked";} catch(err) {}
	}
}

function spitdata(fileID) {

        var strXML=fmServer("getFile", "fileID="+fileID);

        // convert the string to an XML object
        var oXML = (new DOMParser()).parseFromString(strXML, "text/xml");

        var oRows = oXML.getElementsByTagName('es');
        for (var i = 0 ; i < oRows.length ; i++) {

                oRow = oRows[i];

                str=("<BR><BR><BR>filename:"+oRow.getElementsByTagName("filename_es")[0].firstChild.nodeValue);
                str+=("<BR><BR><BR>casename:"+oRow.getElementsByTagName("casename_es")[0].firstChild.nodeValue);
                str+=("<BR><BR><BR>judges_es:"+oRow.getElementsByTagName("judges_es")[0].firstChild.nodeValue);
                str+=("<BR><BR><BR>facts_es:"+oRow.getElementsByTagName("facts_es")[0].firstChild.nodeValue);
                str+=("<BR><BR><BR>summary_es:"+oRow.getElementsByTagName("summary_es")[0].firstChild.nodeValue);
                str+=("<BR><BR><BR>reasoning_es:"+oRow.getElementsByTagName("reasoning_es")[0].firstChild.nodeValue);
                str+=("<BR><BR><BR>outcome_es:"+oRow.getElementsByTagName("outcome_es")[0].firstChild.nodeValue);
                str+=("<BR><BR><BR>strength_es:"+oRow.getElementsByTagName("strength_es")[0].firstChild.nodeValue);
                str+=("<BR><BR><BR>provisions_es:"+oRow.getElementsByTagName("provisions_es")[0].firstChild.nodeValue);

	}

	document.getElementById("testArea").innerHTML=str;
}


function fillFile(fileID) {

	//clear all form elements
	clearAllFileBoxes();

	var strXML=fmServer("getFile", "fileID="+fileID);

	// convert the string to an XML object
	var oXML = (new DOMParser()).parseFromString(strXML, "text/xml");

	//set the date
	try {
	
		var strDate = oXML.getElementsByTagName("date")[0].firstChild.nodeValue;
		strDate = strDate.replace(/-/,"/");
		var d = new Date(Date.parse(strDate.substring(0,strDate.indexOf(" "))));
		document.getElementById("year").value = d.getYear();
		document.getElementById("month").value = d.getMonth();
		document.getElementById("day").value = d.getDay();
	} catch (err) {}
	
	// get the english items
	var oRows = oXML.getElementsByTagName('en');
	for (var i = 0 ; i < oRows.length ; i++) {

		oRow = oRows[i];
		
		updateElementFromXML("filename", oRow);
		updateElementFromXML("casename", oRow);
		updateElementFromXML("judges", oRow);
		updateElementFromXML("facts", oRow);
		updateElementFromXML("summary", oRow);
		updateElementFromXML("reasoning", oRow);
		updateElementFromXML("outcome", oRow);
		updateElementFromXML("strength", oRow);
		updateElementFromXML("provisions", oRow);
		updateElementFromXML("nationalcourts", oRow);

		updateCheckboxes("topic", oRow);
		updateCheckboxes("country", oRow);
		updateCheckboxes("court", oRow);
		updateCheckboxes("legal", oRow);
	}
	
	// get the spanish items
	var oRows = oXML.getElementsByTagName('es');
	for (var i = 0 ; i < oRows.length ; i++) {

		oRow = oRows[i];
		updateElementFromXML("filename_es", oRow);
		updateElementFromXML("casename_es", oRow);
		updateElementFromXML("judges_es", oRow);
		updateElementFromXML("facts_es", oRow);
		updateElementFromXML("summary_es", oRow);
		updateElementFromXML("reasoning_es", oRow);
		updateElementFromXML("outcome_es", oRow);
		updateElementFromXML("strength_es", oRow);
		updateElementFromXML("provisions_es", oRow);
                updateElementFromXML("nationalcourts_es", oRow);
	}
	
	// get the tbd items
	var oRows = oXML.getElementsByTagName('tbd');
	for (var i = 0 ; i < oRows.length ; i++) {

		oRow = oRows[i];
		updateElementFromXML("related_document", oRow);
		updateElementFromXML("filename_tbd", oRow);
	}
}

function updateCheckboxes(strName,oRow) {

	var inputs = document.getElementsByTagName("input");

	for (j=0; j<oRow.getElementsByTagName(strName).length;j++) {

		// Loop through all form elements (input tags)
		for(index = 0; index < inputs.length; index++)
		{
			try {
				if(inputs[index].name==strName && inputs[index].value.indexOf(oRow.getElementsByTagName(strName)[j].firstChild.nodeValue + ' |') == 0) {
					inputs[index].checked = 1;
					//alert(document.getElementById("label"+inputs[index].id).id);
					document.getElementById("label"+inputs[index].id).className = "checkbox_checked";
					//alert(inputs[index].value + "\n" + oRow.getElementsByTagName("topic")[j].firstChild.nodeValue + "\n" + inputs[index].value.indexOf(oRow.getElementsByTagName(strName)[j].firstChild.nodeValue));
				}
			} catch (err) {
				//alert(err);
			}
		}
	}

}

function updateElementFromXML(strField, oX) {

	try {
		document.getElementById(strField).value = oX.getElementsByTagName(strField)[0].firstChild.nodeValue;
	} catch (err) {}
}

function fmServer(action, params) {

	//use this if the method is get instead of post:
	//strUrl = "fm.php?action=" + action + "&" + params + "&fakeParam="+escape(Math.random()*100000000);
	
	strUrl = "fm.php?fakeParam="+escape(Math.random()*100000000);
	params = "action="+action+"&"+params;

	//alert(params);	
	
	var myRequest = new Ajax.Request(strUrl, {

		method: 'post', parameters:params,
		asynchronous: false,
		// Handle 404
		on404: function(t) {
			alert('Error 404: location "' + t.statusText + '" was not found.');
		},
		// Handle other errors
		onFailure: function(t) {
			alert('Error ' + t.status + ' -- ' + t.statusText);
		}
	});
//alert(myRequest.transport.responseText);
	return myRequest.transport.responseText;
}

function removeQuotes(str) {
	str=str.replace(/\\/g,'\\\\');
	str=str.replace(/\'/g,'\\\'');
	str=str.replace(/\"/g,'');
	return str;
}

function getTest() {

	var d1 = new Date();
	var nStart = d1.getTime();

	var strXML=fmServer("getFileList", "dd=dd");

	var d2 = new Date();
	var nEnd = d2.getTime();
	
	alert("start: "+ nStart + " end: " + nEnd+ " time elapsed:" + (nEnd - nStart));
}
