MassEditInterface = new Object();

MassEditInterface.inGoogleMode = false;

MassEditInterface.onLoad = function() {
alert('eep');
token = MassEditInterface.gup('token')
	if(token=="") {
		document.getElementById("start-view").style.display = "block";
    	//MassEditInterface.getMassEditDiv().style.display = "none";
    	//document.getElementById("google-info-view").style.display = "none";
	}
	else {
		//document.getElementById("start-view").style.display = "none";
    	MassEditInterface.getMassEditDiv().style.display = "block";
    	//document.getElementById("google-info-view").style.display = "none";
	}
};

MassEditInterface.loadExample = function(url, instruction) {
    SimileAjax.XmlHttp.get(url, null, function(xmlhttp) {
    	document.getElementById("paste-textarea").value = xmlhttp.responseText 
    	MassEditInterface.onMassEditButtonClick();    	
        document.getElementById("sample-instruction").innerHTML = instruction;
    });
};

MassEditInterface.onMassEditButtonClick = function() {
    MassEditInterface._startMassEditing(document.getElementById("paste-textarea").value);
};

//added for Mass Edit: Google Edition
MassEditInterface.onMassEditGoogleButtonClick = function(records) {
	document.getElementById("start-view").style.display = "none";
    MassEditInterface.getMassEditDiv().style.display = "block";
    document.getElementById("google-info-view").style.display = "none";
	MassEditInterface.inGoogleMode = true;  	

    MassEdit.startEdit(records, MassEditInterface._createColumn, MassEditInterface._clearAllColumns);
};

MassEditInterface.loadGoogleInfo = function() {
	document.getElementById("start-view").style.display = "none";
    MassEditInterface.getMassEditDiv().style.display = "none";
    document.getElementById("google-info-view").style.display = "block";
};

MassEditInterface.toUpperCase = function() {
    MassEdit.transformText(function(s) { return s.toUpperCase(); });
};

MassEditInterface.toLowerCase = function() {
    MassEdit.transformText(function(s) { return s.toLowerCase(); });
};

MassEditInterface.fill = function() {
    var maxPrefix = 0;
    MassEdit.transformText(function(s, prefix, suffix) {
        maxPrefix = Math.max(prefix.length, maxPrefix)
        return s
    })
    MassEdit.transformText(function(s, prefix, suffix) {
        if (!prefix) return s // cursor at start of line, filling doesn't make sense
        var fillChar = prefix.substring(prefix.length-1)        
        var fill = ""
        while (prefix.length + fill.length < maxPrefix) fill += fillChar
        return fill + s
    })
};


// ----------------------------------------------------------------------------------
//                              Single-Line Edit Mode Stuff
// ----------------------------------------------------------------------------------

// PRIVATE ---------------------
MassEditInterface._singleLineMode = false;


// PUBLIC ----------------------
MassEditInterface.getSingleLineMode = function() {
	return MassEditInterface._singleLineMode
}

MassEditInterface.setSingleLineMode = function(/*boolean*/ state) {
	MassEditInterface._singleLineMode = state

	if (state) MassEdit._showNoSelections()
	else MassEdit._showSelections()

    var textfield = MassEdit._findActiveField()
    if (textfield) textfield.getInput().focus()
}

MassEditInterface.toggleSingleLineMode = function() {
	MassEditInterface.setSingleLineMode(!MassEditInterface._singleLineMode)
}

// ----------------------------------------------------------------------------------

MassEditInterface.setMode = function(mode) {
	if (mode == "edit") {
	    document.getElementById("body").className = "mass-edit-edit-mode";
	    document.getElementById("paste-textarea").setAttribute("readonly", "true");
	} else {
	    document.getElementById("body").className = "mass-edit-start-mode";
	    document.getElementById("paste-textarea").removeAttribute("readonly");
	}
}

MassEditInterface.clearText = function() {
    document.getElementById("paste-textarea").value = "";
}

MassEditInterface._startMassEditing = function(text) {
    text = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
    
    var lines = text.split("\n");
    for (var i = 0; i < lines.length; i++) {
        lines[i] = {
            text:   lines[i],
            order:  i
        }
    }
    
    //MassEditInterface.prepareMassEditDiv(document.getElementById("massEditDiv"))
    
    MassEditInterface.setMode("edit")
    
//    document.getElementById("start-view").style.display = "none";
//    MassEditInterface.getMassEditDiv().style.display = "block";
    document.getElementById("google-info-view").style.display = "none";

	// add an event listener so we can update our original text for every edit
	MassEditInterface.updateEventInTheQueue = false
	MassEdit.onChangeCallback = function() {
		if (!MassEditInterface.updateEventInTheQueue) {
			MassEditInterface.updateEventInTheQueue = true
			window.setTimeout(function () {
				MassEditInterface.updateEventInTheQueue = false
				MassEditInterface.updateOriginalText(MassEdit._clusters)
			}, 0)
		}
	}    
    
    MassEdit.startEdit(lines, MassEditInterface._createColumn, MassEditInterface._clearAllColumns);
};

MassEditInterface._columns = [];

MassEditInterface._createColumn = function() {
    return new MassEditInterface._Column();
};

MassEditInterface._clearAllColumns = function() {
    document.getElementById("column-container").innerHTML = "";
    MassEditInterface._columns = [];
    MassEditInterface._resizeColumnContainer();
};

MassEditInterface._resizeColumnContainer = function() {
    var total = 100;
    for (var i = 0; i < MassEditInterface._columns.length; i++) {
        total += MassEditInterface._columns[i]._columnWidth;
    }
    document.getElementById("column-container").style.width = total + "px";
};

MassEditInterface._defaultColumnWidth = 200;
MassEditInterface._Column = function() {
    var div = document.createElement("div");
    div.className = "massEditInterface-column";
    
    var divInner = document.createElement("div");
    divInner.className = "massEditInterface-column-inner";
    div.appendChild(divInner);
    
    var divGutter = document.createElement("div");
    divGutter.className = "massEditInterface-columnGutter";
    div.appendChild(divGutter);
    
    var divGutterInner = document.createElement("div");
    divGutterInner.className = "massEditInterface-columnGutter-inner";
    divGutter.appendChild(divGutterInner);
    
    var columnContainer = document.getElementById("column-container");
    columnContainer.appendChild(div);
    
    this._divInner = divInner;
    this._divGutterInner = divGutterInner;
    this._columnWidth = MassEditInterface._defaultColumnWidth;
    
    var self = this;
    SimileAjax.WindowManager.registerForDragging(
        divGutter,
        {   onDragStart: function() {
                this._width = self._columnWidth;
            },
            onDragBy: function(diffX, diffY) {
                this._width += diffX;
                
                self._columnWidth = Math.max(50, this._width);
                div.style.width = self._columnWidth + "px";
                
                MassEditInterface._resizeColumnContainer();
            },
            onDragEnd: function() {
            }
        }
    );
        
    MassEditInterface._columns.push(this);
    MassEditInterface._resizeColumnContainer();
};

MassEditInterface._Column.prototype.appendChild = function(elmt) {
    this._divInner.appendChild(elmt);
};

MassEditInterface.updateOriginalText = function(clusters) {
	var outputArray = [];
	for(var i=0; i < clusters.length; i++) {
	var valueStructures = clusters[i].valueStructures;
		for(var j=0; j < valueStructures.length; j++) {
			var structure = valueStructures[j];
			outputArray[structure.record.order] = structure.values[0];
		}
	}
	
	var output = "";
	for(var i=0; i < outputArray.length - 1; i++) {
		output = output + outputArray[i] + "\n";
	}
	output = output + outputArray[outputArray.length - 1];
	
    document.getElementById("paste-textarea").value = output;
};

MassEditInterface.onMassEditDoneClick = function(clusters) {
	MassEditInterface.updateOriginalText(clusters)
	MassEditInterface.setMode("start")
    MassEditInterface._clearAllColumns();
};

/*MassEditInterface.exportAllToGoogle = function(clusters, url) {
	var outputArray = [];
	for(var i=0; i < clusters.length; i++) {
	var valueStructures = clusters[i].valueStructures;
		for(var j=0; j < valueStructures.length; j++) {
			var structure = valueStructures[j];
			//PUT/POST request goes here
	var data = '<entry>  <id>http://spreadsheets.google.com/feeds/cells/key/worksheetId/private/full/cellId</id>  <link rel="edit" type="application/atom+xml" href="http://spreadsheets/google.com/feeds/cells/key/worksheetId/private/full/R2C4/version"/><gs:cell row="'+structure.record.row+'" col="'+structure.record.col+'" inputValue="'+structure.values[0]+'"/></entry>'

			$.post(url,data)
		}
	}
	
	var output = "";
	for(var i=0; i < outputArray.length - 1; i++) {
		output = output + outputArray[i] + "\n";
	}
	output = output + outputArray[outputArray.length - 1];

    MassEditInterface._clearAllColumns();
	//Go back to spreadsheet
};*/

MassEditInterface.startOver = function(clusters) {
	var outputArray = [];
	for(var i=0; i < clusters.length; i++) {
	var valueStructures = clusters[i].valueStructures;
		for(var j=0; j < valueStructures.length; j++) {
			var structure = valueStructures[j];
			outputArray[structure.record.order] = structure.record.text;
		}
	}
	
	var output = "";
	for(var i=0; i < outputArray.length - 1; i++) {
		output = output + outputArray[i] + "\n";
	}
	output = output + outputArray[outputArray.length - 1];
	
	document.getElementById("paste-textarea").value = output;	
	MassEditInterface._clearAllColumns();
	MassEditInterface._startMassEditing(output);
};

MassEditInterface.getMassEditDiv = function() {
	return MassEditInterface._massEditDiv
}

MassEditInterface.prepareMassEditDiv = function(div) {
    MassEditInterface._massEditDiv = div
    div.id = "massEditDiv"
    div.innerHTML = MassEditInterface.massEditDivHTML
    MassEditInterface.addMassEditDivCSS()		
	return div
}

MassEditInterface.addMassEditDivCSS = function() {

	function getElement(xpath) {
		var ret = document.evaluate(xpath, document, null, 0, null)
		return ret.iterateNext()
	}
	
	function addCSS(css) {
	    var style = document.createElement("style")
	    style.appendChild(document.createTextNode(css))
	    getElement("//head").appendChild(style)
	}

	if (!MassEditInterface.addMassEditDivCSS_done) {
		addCSS(MassEditInterface.massEditDivCSS);
		MassEditInterface.addMassEditDivCSS_done = true
	}
}

MassEditInterface.massEditDivHTML = '' +
            '<table class="mass-edit-edit-mode" style="margin-top: 2em;" style="font-size: 100%;"><tr style="vertical-align: top;">' +
'                    <tr>\n'+
'                       <td>\n'+
'                           <div class="only-in-edit-mode"> \n'+
                               '<button onclick="MassEditInterface.done_callback(MassEdit._clusters);">Done</button>' +
                               '<button onclick="MassEditInterface.cancel_callback(MassEdit._clusters);">Cancel</button> ' +
                               '<span style="padding-left: 20px"></span>' +                               
'                               <button onclick="MassEditInterface.toUpperCase();">To Uppercase</button> \n'+
'                               <button onclick="MassEditInterface.toLowerCase();">To Lowercase</button> \n'+
'                               <button onclick="MassEditInterface.fill();">Fill</button> \n'+
'                           </div>\n'+
'                       </td>\n'+
'                    </tr>\n'+
'               <tr>\n'+
                '<td style="vertical-align: top;">' +
                    '<div id="editing-area">' +
                        '<div id="column-container"></div>' +
                        '<div id="stretcher" style="clear: both;"></div>' +
                    '</div>' +
                '</td>' +
            '</tr></table>	';	

MassEditInterface.massEditDivCSS = '' + 
'#massEditDiv .singleLineButton {' +
'   position: absolute;' +
'   right:    1px;' +
'   top:      0px;' +
'   cursor:   default;' +
'}' +
'#massEditDiv table {' +
'    font-size: 100%;' +
'}' +
'' +
'#massEditDiv tr, td {' +
'    vertical-align: top;' +
'}' +
'' +
'#massEditDiv #sample-instruction {' +
'    font-weight:    bold;' +
'    font-size:      120%;' +
'    padding:        1em;' +
'    background:     #eeeddd;' +
'    text-align:     center;' +
'}' +
'' +
'#massEditDiv div.massEditInterface-column {' +
'    float:          left;' +
'    border:         1px solid #ddd;' +
'    padding:        2px;' +
'    padding-right:  10px;' +
'    margin-right:   5px;' +
'    position:       relative;' +
'}' +
'' +
'#massEditDiv div.massEditInterface-column-inner {' +
'    height:         100%;' +
'    width:          100%;' +
'    overflow:       auto;' +
'}' +
'' +
'#massEditDiv div.massEditInterface-columnGutter {' +
'    position:       absolute;' +
'    top:            0px;' +
'    bottom:         0px;' +
'    right:          0px;' +
'    width:          8px;' +
'    background:     #eeeddd;' +
'    cursor:         e-resize;' +
'}' +
'' +
'#massEditDiv div.massEditInterface-columnGutter-inner {' +
'    position:       relative;' +
'    top:            0px;' +
'    bottom:         0px;' +
'    left:           0px;' +
'    right:          0px;' +
'}' +
'' +
'#massEditDiv .massEdit-valueUI {' +
'    position: relative;' +
'    white-space: pre;' +
'    font-family: monospace;' +
'    font-size:   10pt;' +
'}' +
'' +
'#massEditDiv .massEdit-valueUI-hovered {' +
'    background:  #dddeee;' +
'}' +
'' +
'#massEditDiv span.massEdit-valueSelection {' +
'    background: #ddd;' +
'}' +
'' +
'#massEditDiv span.massEdit-cursor {' +
'    background: #aaabbb;' +
'    padding:    0 1px;' +
'}' +
'' +
'#massEditDiv .massEdit-valueUI input {' +
'    white-space: pre;' +
'    font-family: monospace;' +
'    font-size:   10pt;' +
'    background:  #dddeee;' +
'}'+
''+
'#massEditDiv .singleLineEditMode input {'+
'    background:  #aaffaa;'+
'}'+
''+
'#massEditDiv .invalidSelection input {'+
'    background:  #ffaaaa;'+
'}'+
''+
'#massEditDiv .invalidSelectionHighlight input {'+
'    background:  #ff0000;'+
'}';