var urlBase = "/printone/quickEdit.aspx";
var formVars = "";
var changing = false;


function fieldEnter(field,evt,idfld,fieldNameTitle,anchorElementId,elementType) {  
	evt = (evt) ? evt : window.event;
	//if (evt.keyCode == 13 && field.value!="") 
	if(!changing)
	    return;
	if (evt.keyCode == 13) 	
	{
	    // set this early stop the blur event if fired
	    changing = false;
	    
		elem = $( idfld );
		anchorElement = $( anchorElementId );

		var paramDictionary = {
                fieldName: fieldNameTitle,
                content: field.value
            };
        var asyncRequest = new Ajax.Request(urlBase, 
            {
                method:'post',
                parameters : paramDictionary,
                onSuccess : function(transport) {                    
                    // Success, update the DropDownList                    
                    try {
                            var result = transport.responseText;
                            processAsyncResponse(result,field,idfld,fieldNameTitle,anchorElementId,elementType,elem);
                    } catch(e) 
                    {
                       // alert("unable to call transport:" + e);
                    }
                },
                onException: function(req, exception) {
                    //alert("Exception Occurred for Store Editor: r\nDetails:\r\n\r\n" + exception);
                    return false;
                },
                onFailure : function(transport) {
                   // alert("some failure...");
                }
            });
		return false;
	}
	else 
	{
		return true;
	}
}

function fieldBlur(field,idfld,fieldNameTitle,anchorElementId,elementType) {
	if(!changing)
	    return;
	elem = $( idfld );
	anchorElement = $( anchorElementId );
	var paramDictionary = {
            fieldName: fieldNameTitle,
            content: field.value
        };
    var asyncRequest = new Ajax.Request(urlBase, 
        {
            method:'post',
            parameters : paramDictionary,
            onSuccess : function(transport) {                    
                // Success, update the DropDownList                    
                try {
                        var result = transport.responseText;
                        processAsyncResponse(result,field,idfld,fieldNameTitle,anchorElementId,elementType,elem);
                } catch(e) 
                {
                    //alert("unable to call transport:" + e);
                }
            },
            onException: function(req, exception) {
                //alert("Exception Occurred for Store Editor: r\nDetails:\r\n\r\n" + exception);
                return false;
            },
            onFailure : function(transport) {
                //alert("some failure...");\
            }
        });
	changing = false;
	return false;
}

function processAsyncResponse(responseValue,field,idfld,fieldNameTitle,anchorElementId,elementType,elem)
{
    var stringContent = '';
    // Treat Meta Tags separately
    if(idfld.indexOf("MetaTag") > -1)
        stringContent = escape(responseValue.replace("'", "\\'"));
    else
        stringContent = responseValue.replace("'", "\\'");

    var anchorLink = "javascript:changeToQuickEditMode('" + idfld + "', '" + fieldNameTitle.replace("'", "\\'") + "', '" + stringContent + "', '" + anchorElementId + "','" + elementType + "')";
        
    if (elementType != "submit" && elementType != "button" && elementType != "text" && elementType != "enhancedcss")
	{
		noLight(elem);
		parentElement = anchorElement.parentNode;
	    if(navigator.appName == 'Netscape')
	        elem.textContent = responseValue;
	    else
	        elem.innerText = responseValue;
		anchorElement.innerHTML = "[Edit]";	
		if(elementType == "span")
		{
			// delete the anchor link and create a new one
			newAnchorElement = document.createElement(anchorElementId);
			newAnchorElementId = anchorElementId;
			newAnchorElement.innerHTML = "<a href=\""+ anchorLink +"\"\" id=\""+ anchorElementId +"\" style=\"font-size:9px;color:red;\">[Edit]</a>"
			parentElement.removeChild(anchorElement);
			parentElement.appendChild(newAnchorElement);
		}
	}
	else
	{
		if(elementType == "text")
		{
			elem.value = responseValue;
			anchorElement.innerHTML = "[Edit]";
		}
		else {
		    actualElem = $(elem.id.substring(16));	    
		    if (elementType == "enhancedcss") {		        
		        var innerHTML = "<span>" + responseValue + "</span>";
		        var innerSpanNodes = actualElem.getElementsByTagName("span");
		        if (innerSpanNodes.length > 1) {
		            var textToSearch = innerSpanNodes.item(0).innerHTML;
		            var lastCaretIdx = textToSearch.lastIndexOf(">")+1;
		            innerHTML = "<span>" + textToSearch.substring(0, lastCaretIdx) + responseValue + "</span>";
		        }		        		               
		        actualElem.innerHTML = innerHTML;           
		    }
		    else {
		        actualElem.value = responseValue;
		    }
		    // important: adding and removing a class helps so we don't screw up the current display property when setting back to visible, which breaks enhanced button skins
		    actualElem.removeClassName("hide");
			saveElem = $(elem.id.replace("quickEditTextBox", "saveBox"));
		    elem.style.display = 'none';
		    elem.style.visibility = 'hidden';
		    saveElem.style.display = 'none';
		    saveElem.style.visibility = 'hidden';		    
		    actualElem.parentNode.removeChild(saveElem);
		    actualElem.parentNode.removeChild(elem);		    
		    anchorElement.style.display = 'inline';
			anchorElement.style.visibility = 'visible';
			anchorElement.innerHTML = "[Edit]";
		}
	}
}

//edit field created
function changeToQuickEditMode(elementId, nameTitle, nameValue, anchorId, pElementType) 
{
    changing = false;
	actual = $( elementId );
	anchorElement = $( anchorId );
	var elementType = '';
	var stripHtmlTags = false;
	
	if(pElementType != "span")
	{
		elementType = actual.type;
	}
	else
	{
		elementType = pElementType;
	}
	if( elementType == null || elementType == 'undefined' )
	{
		elementType = 'standard';
    }
    if (pElementType == 'enhancedcss') 
    {
        elementType = pElementType;
        stripHtmlTags = true;        
    }
	if(!changing)
	{
	    if (elementType != "submit" && elementType != "button" && elementType != "text" && elementType != "enhancedcss")
		{
			width = 200;
			height = actual.getHeight() + 2;
			if(height <= 2)
			    height = 16; // set it to default height if no height
			if(height < 40)
				actual.innerHTML = "<input id=\""+ actual.id +"_field\" style=\"width: "+width+"px; height: "+height+"px;\" maxlength=\"254\" type=\"text\" value=\"" + actual.innerHTML.replace(/"/g,'&quot;') + "\" onkeypress=\"return fieldEnter(this,event,'" + actual.id + "','" + nameTitle + "','" + anchorElement.id + "','" + elementType + "')\" onclick=\"this.focus();\" onfocus=\"highLight(this);\" onblur=\"noLight(this); return fieldBlur(this,'" + actual.id + "','" + nameTitle + "','" + anchorElement.id + "','" + elementType + "');\" />";
			else
				actual.innerHTML = "<textarea name=\"textarea\" id=\""+ actual.id +"_field\" style=\"width: "+width+"px; height: "+height+"px;\" onfocus=\"highLight(this);\" onblur=\"noLight(this); return fieldBlur(this,'" + actual.id + "','" + nameTitle + "','" + anchorElement.id + "','" + elementType + "');\">" + actual.innerHTML.replace(/"/g,'&quot;') + "</textarea>";
			//anchorElement.innerHTML = "<input id=\""+ anchorElement.id +"_field\" type=\"button\" style=\"font-size:10px;\" value=\"Save\" />";// onclick=\"return fieldBlur(actual,'" + actual.id + "','" + nameTitle + "','" + anchorElement.id + "','" + elementType + "')\" />";
			anchorElement.innerHTML = "<span id=\""+ anchorElement.id +"_field\" style=\"background-color:lightgrey; border: 2px solid #999999; padding: 2px 3px 2px 3px; font-size:10px; cursor: default; color: black;\">Save</span>";
			changing = true;
			actual.firstChild.select();
			actual.firstChild.focus();
		}
		else
		{
			if(elementType == "text")
			{
				//anchorElement.innerHTML = "<input id=\""+ anchorElement.id +"_field\" type=\"button\" style=\"font-size:10px;\" value=\"Save\" onclick=\"return fieldBlur(actual,'" + actual.id + "','" + nameTitle + "','" + anchorElement.id + "','" + elementType + "')\" />";
				anchorElement.innerHTML = "<span id=\""+ anchorElement.id +"_field\" style=\"background-color:lightgrey; border: 2px solid #999999; padding: 2px 3px 2px 3px; font-size:10px; cursor: default; color: black;\" onclick=\"return fieldBlur(actual,'" + actual.id + "','" + nameTitle + "','" + anchorElement.id + "','" + elementType + "')\">Save</span>";
			    changing = true;
			    actual.select();
			    actual.focus();
			}
			else 
			{
			    changing = true;
			    var val = (stripHtmlTags ? _quickeditStripHTML(actual.innerHTML) : actual.value).replace(/"/g, '&quot;')			    
			    var actualSize = actual.getDimensions();
			    width = actualSize.width + 10;
			    height = actualSize.height;
				editElement = document.createElement('quickEditTextBox' + elementId);
				editElement.id = 'quickEditTextBox' + elementId;
				editElement.innerHTML = "<input id=\""+ editElement.id +"_field\" style=\"width: "+width+"px; height: "+height+"px;\" maxlength=\"254\" type=\"text\" value=\"" + val + "\" onkeypress=\"return fieldEnter(this,event,'" + editElement.id + "','" + nameTitle + "','" + anchorElement.id + "','" + elementType + "')\" onfocus=\"highLight(this);\" onblur=\"noLight(this); return fieldBlur(this,'" + editElement.id + "','" + nameTitle + "','" + anchorElement.id + "','" + elementType + "');\" />";
				saveElement = document.createElement('saveBox' + elementId);
				saveElement.id = 'saveBox' + elementId;
				saveElement.innerHTML = "<span id=\""+ saveElement.id +"\" style=\"background-color:lightgrey; border: 2px solid #999999; padding: 2px 3px 2px 3px; font-size:10px; cursor: default; color: black;\">Save</span>";
				//anchorElement.innerHTML = "<input id=\""+ anchorElement.id +"_field\" type=\"button\" style=\"font-size:10px;\" value=\"Save\" />";// onclick=\"return fieldBlur(editElement,'" + actual.id + "','" + nameTitle + "','" + anchorElement.id + "','" + elementType + "')\" />";
				anchorElement.parentNode.insertBefore(saveElement, anchorElement);
				anchorElement.parentNode.insertBefore(editElement, saveElement);												
				// important: adding and removing a class helps so we don't screw up the current display property when setting back to visible, which breaks enhanced button skins
				actual.addClassName("hide");	
							
				anchorElement.style.display = 'none';
				anchorElement.style.visibility = 'hidden';
				editElement.firstChild.select();
				editElement.firstChild.focus();
			}
		}
	}		
}


//find all span tags with class quickEditText and id as fieldname parsed to update script. add onclick function
function editbox_init()
{
	if (!document.getElementsByTagName){ return; }
	var spans = document.getElementsByTagName("span");
	var spanTitle = '';
	var spanValue = '';
	//var anchor;
	// loop through all span tags
	for (var i=0; i<spans.length; i++){
		var spn = spans[i];
        	if (((' '+spn.className+' ').indexOf("quickEditText") != -1) && (spn.title)) 
        	{
        		spanTitle = spn.title;
        		spanValue = spn.innerHTML;
        		spanValue = spanValue.replace(/'/g, "\\'");
        		spanValue = spanValue.replace(/"/g, '&quot;');
        		anchorElement = $(spn.id + '_anchor');
        		if(anchorElement == null)
        		{
        			anchorElement = document.createElement(spn.title + '_anchor');
        			anchorElementId = spn.title + '_anchor';
					anchorElement.id = anchorElementId;
					var anchorLink = "javascript:changeToQuickEditMode('" + spn.title.replace("'", "\\'") + "', '" + spn.title.replace("'", "\\'") + "', '" + spanValue + "', '" + anchorElementId + "', 'span')";
					anchorElement.innerHTML = "&nbsp;<a href=\""+ anchorLink +"\"\" id=\""+ anchorElementId +"\" style=\"font-size:9px;color:red;\">[Edit]</a>"
					spn.parentNode.appendChild(anchorElement);
				}
       		}

	}
}

function highLight(span){
        span.parentNode.style.border = "2px solid #D1FDCD";
        span.parentNode.style.padding = "0";
        span.style.border = "1px solid #54CE43";
}

function noLight(span){
    if(span.parentNode)
    {
        span.parentNode.style.border = "0px";
        span.parentNode.style.padding = "2px";
    }
    span.style.border = "0px";
}

function highLightElement(objElement){
            objElement.style.border = "3px solid #54CE43";
}

function noLightElement(objElement){
        objElement.style.border = "0px";
}

function _quickeditStripHTML(input) {
    // The next line is optional, it replaces escaped brackets with real ones, 
    // i.e. &lt; is replaced with < and &gt; is replaced with >
    input = input.replace(/&(lt|gt);/g, function(strMatch, p1) {
        return (p1 == 'lt') ? '<' : '>';
    });
    return input.replace(/<\/?[^>]+(>|$)/g, '');
}