var gl_currentPopup;

var gl_left;
var gl_top;
var gl_width;
var gl_height;
var GL_popupWidth;
var GL_popupHeight;
var GL_previousPopupId;
var gl_editStyleData = null;
var gl_popupData = null;
var gl_mouseData = null;
var gl_itemArray = new Array();
var gl_highlightedSpans = new Array();
var gl_isMultipleSelect = false;
var gl_msSelectCnt = 0;
var gl_dragMSSelect = false;
var gl_dragMSSelectHighlight = null;
var gl_drawLineInit;
var gl_newFieldCount = 0;
var gl_isLoaded = false;
var gl_clickOnHighlight = false;
var gl_readyToMove = false;
var gl_dragResizeDirection;
var gl_dragLineHandler;
var gl_savePageScrollTop = 0;
var gl_savePageScrollLeft = 0;
var gl_editStyleData_key = 'editStyleData';

function GL_msSelect(evt) {
	gl_mouseData = new GLMouseData();
	gl_mouseData.handle = 'editStyle';

	gl_dragMSSelect = true;
	GL_changeMainBodyCursor('crosshair');	
}

function GL_msSelectMouseDown(evt) {  
    cX = evt.clientX;
    cY = evt.clientY;       
    GL_hideHighlightSpan();   
    gl_dragMSSelectHighlight = findObject('GL_msSelectHightlight'); 
	gl_dragMSSelectHighlight.style.visibility = 'visible';
	gl_dragMSSelectHighlight.style.left = cX + 'px';	
	gl_dragMSSelectHighlight.style.top = cY + 'px';
}
function GL_msSelectMouseMove(evt) {   
	if ( !gl_dragMSSelectHighlight ) {
		return;
	}
    var width = evt.clientX - cX;
    var height = evt.clientY - cY;     
	gl_dragMSSelectHighlight.style.width = width + 'px';
	gl_dragMSSelectHighlight.style.height = height + 'px';
	
	var mainBody = findObject('GL_mainBody');
	var spanList = mainBody.getElementsByTagName( 'span' );
	if ( spanList ) {
	    
		if ( spanList.length ) {		
			for (var i=0; i<spanList.length; i++) {
				GL_msSelectMouseMoveSelectOn(spanList[i]);
			}	
		} else {
			GL_msSelectMouseMoveSelectOn(spanList);
		}
	}	
}
function GL_msSelectMouseMoveSelectOn(span) {
	if ( span.id && span.id.indexOf('editStyle') ) {
	//	span.click();
	}
}

function GL_msSelectMouseUp(evt) {   
	if ( !gl_dragMSSelectHighlight ) {
		return;
	}
	gl_dragMSSelectHighlight.style.visibility = 'hidden';
	GL_changeMainBodyCursor('auto');
	gl_dragMSSelectHighlight = null;	
	gl_dragMSSelect = false; 	
}


function GL_showMSToolbar() {
	findObject('GL_editStyleAlignToolBar').style.visibility = 'visible';
}

function GL_hideMSToolbar() {
	findObject('GL_editStyleAlignToolBar').style.visibility = 'hidden';
}

function GL_changeMSSpace(select, whichWay) {
	if ( gl_highlightedSpans.length < 2 ) {
		return;
	}
	
	var selectedValue = select.options[select.selectedIndex].value * 1;
	for (var i=1; i<gl_highlightedSpans.length; i++) {	
		var prevSpan = gl_highlightedSpans[i-1].span;
		var prevPos = jQuery(prevSpan).position();
		var prevLeft = prevPos.left;
		var prevTop = prevPos.top;
		var prevWidth = prevSpan.offsetWidth;
		var prevHeight = prevSpan.offsetHeight;		
		
		var currSpan = gl_highlightedSpans[i].span;
	    currSpan.style.position = 'absolute';    		
		if ( 'left' == whichWay ) {
			var currLeft = prevLeft + prevWidth + selectedValue;		
			currSpan.style.left = currLeft + 'px';
		} else if ( 'top' == whichWay ) {
			var currTop = prevTop + prevHeight + selectedValue;		
			currSpan.style.top = currTop + 'px';
		}
		GL_updateStyleParameter(gl_highlightedSpans[i]); 	
		GL_updateMSHighlightSpan(gl_highlightedSpans[i]);					
	}	
}

function GL_alignMS(whichWay) {
	if ( gl_highlightedSpans.length < 1 ) {
		return;
	}
	
	var targetSpan = gl_highlightedSpans[0].span;
	var targetPos = jQuery(targetSpan).position();
	var targetLeft = targetPos.left;
	var targetTop = targetPos.top;
	var targetWidth, targetHeight;
	if (Core.isIE()){
		targetWidth = targetSpan.offsetWidth;
		targetHeight = targetSpan.offsetHeight;	
	}
	else {
		targetWidth = targetSpan.clientWidth;
		targetHeight = targetSpan.clientHeight;	
	}

	for (var i=1; i<gl_highlightedSpans.length; i++) {	
		var editStyle = gl_highlightedSpans[i];
		var alignSpan = editStyle.span;
	    alignSpan.style.position = 'absolute';    		
		if ( 'left' == whichWay ) {
			alignSpan.style.left = targetLeft + 'px';
		} else if ( 'right' == whichWay ) {
		    var alignLeft = targetLeft + (targetWidth - alignSpan.offsetWidth);
			alignSpan.style.left = alignLeft + 'px';
		} else if ( 'top' == whichWay ) {
			alignSpan.style.top = targetTop + 'px';
		} else if ( 'bottom' == whichWay ) {
			var alignTop = targetTop + (targetHeight - alignSpan.offsetHeight);
			alignSpan.style.top = alignTop + 'px';
		} else if ( 'width' == whichWay ) {
			if (editStyle.styleType.isEditable('width'))
				editStyle.styleType.updateWidth(targetWidth);
		} else if ( 'height' == whichWay ) {
			if (editStyle.styleType.isEditable('height'))
				editStyle.styleType.updateHeight(targetHeight);
		}
		
		GL_updateStyleParameter(gl_highlightedSpans[i]); 	
		GL_updateMSHighlightSpan(gl_highlightedSpans[i]);			

	}
	CSSInspector.refresh();
}

function GL_editStyleSelectMS(evt, msHighlightSpan) {
	if ( !msHighlightSpan.editObjectId ) {
		return;
	}
	var span = GL_findHighlighted(msHighlightSpan.editObjectId);
	if ( span ) {
		GL_editStyleSelect(evt, span);
	}	
}

function GL_editStyleSelect(evt, editStyleData) {
    if ( evt && (evt.shiftKey || evt.altKey || evt.ctrlKey) ) {
    	var previousOne = GL_findHighlighted(editStyleData.span.id);
    	if ( previousOne ) {
    		GL_removeOneHighlighted(editStyleData);
    		return;
    	}
    	
    	// save previous one
    	if ( gl_editStyleData ) {
    		GL_addToHighlighted(gl_editStyleData); 
    		GL_hideHighlightSpan();   		
	        gl_readyToMove = false;
	    	gl_drawLineInit = false;
	    	gl_dragLineHandler = false;
	    	gl_dragResizeDirection = false;
	    	gl_editStyleData = null;      		
    	}
    	
    	GL_addToHighlighted(editStyleData);
    	gl_isMultipleSelect = true;  	
    	return;
    }
    else if (!editStyleData.type) {
       	var previousOne = GL_findHighlighted(editStyleData.span.id);
    	if ( previousOne ) {
    		editStyleData.highlightSpan = previousOne.highlightSpan;
    		return;
    	}
    
	    GL_removeAllHighlighted();
	   	GL_addToHighlighted(editStyleData);
    	gl_isMultipleSelect = true;  	
	   	return;
	}
  
	if ( gl_editStyleData && gl_editStyleData.span) {
        GL_savePreviousData(gl_editStyleData.span);
	}
	

	gl_editStyleData = editStyleData;
	gl_editStyleData.highlightSpan = findObject('GL_editStyleHighlighted');		
    GL_updateHighlightSpan(gl_editStyleData.span);

	gl_editStyleData.span.style.zIndex = 100;
    
	gl_editStyleData.highlightSpan.style.visibility = 'visible';
    
    var textInput = GL_findDOMObjectById(gl_editStyleData.span, 'INPUT', 'gl_editStyleInputValue');
    if ( textInput ) {
        gl_editStyleData.highlightSpan.style.zIndex = 100;  
        textInput.focus();  
        textInput.focus();  //fixed browser bug
    }            
}

function GL_getMSHighlightSpanId(editStyleData) {
	return 'highlightedSpan' + editStyleData.span.id;
}

function GL_addToHighlighted(editStyleData) {
	gl_highlightedSpans[gl_highlightedSpans.length] = editStyleData;
	jQuery(editStyleData.span).data(gl_editStyleData_key, editStyleData);
    var hSpanId = GL_getMSHighlightSpanId(editStyleData);
    var hSpan = findObject(hSpanId);
    if ( !hSpan ) {
//    	GL_writeHighlightedSpan(hSpanId);
//    	hSpan = findObject(hSpanId);
		selectNode = new DomSelectNode(hSpanId);
		selectNode.init();
    }
	GL_updateMSHighlightSpan(editStyleData);
	if ( gl_highlightedSpans.length > 1 ) {
		GL_showMSToolbar();
	}
	CSSInspector.refresh();
}

function GL_updateMSHighlightSpan(editStyleData) {
    var hSpan = findObject(GL_getMSHighlightSpanId(editStyleData));
    if ( !hSpan ) {
    	return;
    }
    var pos = jQuery(editStyleData.span).position();
    hSpan.style.left = Math.round(pos.left) + 'px';
    hSpan.style.top = Math.round(pos.top) + 'px';
    hSpan.style.width = editStyleData.span.offsetWidth + 'px';
    hSpan.style.height = editStyleData.span.offsetHeight + 'px';    
    hSpan.style.borderWidth = '1px';
    hSpan.style.visibility = 'visible';
//    hSpan.style.zIndex = -100;
    hSpan.editObjectId = editStyleData.span.id;
    editStyleData.highlightSpan = hSpan;
}

function GL_findHighlighted(spanId) {
	for (var i=0; i<gl_highlightedSpans.length; i++) {
		if ( spanId == gl_highlightedSpans[i].span.id ) {
			return gl_highlightedSpans[i];
		}
	}
	return null;
}

function GL_getAllSelectionSpans(){
	var selects = [];
	for (var i=0; i<gl_highlightedSpans.length; i++) {
		var highlighted = gl_highlightedSpans[i];
//	    var hSpanId = GL_getMSHighlightSpanId(highlighted);
	    var hSpan = highlighted.highlightSpan;//findObject(hSpanId);
	    selects.push(hSpan);		
	}
	return selects;
}

function GL_removeOneHighlighted(editStyleData) {
	var removed;
	var tempList = new Array();
	var cnt = 0;
	for (var i=0; i<gl_highlightedSpans.length; i++) {
		if ( editStyleData.span.id == gl_highlightedSpans[i].span.id ) {
			removed = gl_highlightedSpans[i];
		} else {
			tempList[cnt] = gl_highlightedSpans[i];
			cnt++;
		}
	}
		
	var hSpanId = GL_getMSHighlightSpanId(editStyleData);
	var hSpan = findObject(hSpanId);
	if ( hSpan ) {
		hSpan.style.visibility = 'hidden';
	}
	gl_highlightedSpans = tempList;
	if ( gl_highlightedSpans.length < 2 ) {
		GL_hideMSToolbar();
	}
	
	jQuery(removed.span).removeData(gl_editStyleData_key);
	CSSInspector.refresh();

	return removed;
}

function GL_removeAllHighlighted() {
	var tempList = new Array();
	for (var i=0; i<gl_highlightedSpans.length; i++) {
		tempList[i] = gl_highlightedSpans[i];
	}
	for (var i=0; i<tempList.length; i++) {
		GL_removeOneHighlighted(tempList[i]);
	}
	tempList = null;
}
var MIN = -9999;
function GL_editStyleOnKeyDown(evt) {
	if ( !(gl_editStyleData || gl_isMultipleSelect)) {
		return true;
	}

    var evt = (evt) ? evt : ((window.event) ? event : null);   
	if ( evt.type != 'keydown' ) {
		return true;
	}

	var ARRAY_LEFT = 37;
	var ARRAY_UP = 38;
	var ARRAY_RIGHT = 39;
	var ARRAY_DOWN = 40;
	var PLUS = 187;
	if ( !GL_isIE() ) {
		PLUS = 61;
	}
	var MINUS = 189;
	if ( !GL_isIE() ) {
		MINUS = 109;
	}
	var LESS_THAN = 188;
	var GREAT_THAN = 190;	
	
	var passEventToParent = true;
	var key = (evt.charCode) ? evt.charCode:evt.keyCode;
	var deltaX = MIN;
	var deltaY = MIN;
	var deltaW = MIN;
	var deltaH = MIN;	
	var increament = 15;
	if ( evt.altKey || evt.shiftKey || evt.ctrlKey || evt.metaKey ) {
		increament = 1;
	}
	if ( key >= ARRAY_LEFT && key <= ARRAY_DOWN ) {
		passEventToParent = false;
	}
	if ( key == ARRAY_RIGHT ) {
		deltaX = increament;
	} else if ( key == ARRAY_LEFT ) {
		deltaX = increament * (-1);
	} else if ( key == ARRAY_UP ) {
		deltaY = increament * (-1);
	} else if ( key == ARRAY_DOWN ) {
		deltaY = increament;
	} else if ( key == PLUS ) {
		deltaW = increament;
	} else if ( key == MINUS ) {
		deltaW = increament * (-1);
	}
	if ( deltaX == MIN && deltaY == MIN && deltaW == MIN && deltaH == MIN) {
		return true;
	}

	var updateList = GL_getUpdateStyleList();
	if ( updateList.length == 0 ) {
		return;
	}
	for (var i=0; i<updateList.length; i++) {
	//	if ( GL_isIE() ) {
			GL_editStyleOnKeyDownUpdateSpanIE(updateList[i], deltaX, deltaY, deltaW, deltaH);		
	//	} else {
	//		GL_editStyleOnKeyDownUpdateSpan(updateList[i], deltaX, deltaY, deltaW, deltaH);				
	//	}
	}
	if ( !passEventToParent ) {
		evt.cancelBubble = true
		if ( evt.stopPropagation ) {
			evt.stopPropagation();
			evt.returnValue = false;
		}
//		if ( !GL_isIE() ) {
//			document.body.scrollTop = gl_savePageScrollTop;
//			document.body.scrollLeft = gl_savePageScrollLeft;
//		}
	
		return false;
	}
	
}

function GL_editStyleOnKeyDownUpdateSpanIE(editStyleData, deltaX, deltaY, deltaW, deltaH) {
	
    editStyleData.span.style.position = 'absolute';    
    if ( deltaX > MIN) {
		editStyleData.span.style.left = (jQuery(editStyleData.span).position().left + deltaX) + 'px';
	}
	if ( deltaY > MIN) {
		editStyleData.span.style.top = (jQuery(editStyleData.span).position().top + deltaY) + 'px';
	}
	if ( deltaW > MIN) {
//		editStyleData.span.style.width = (editStyleData.span.offsetWidth + deltaW) + 'px';
		editStyleData.styleType.updateWidth(editStyleData.span.offsetWidth + deltaW);
	}
	if ( deltaH > MIN) {
//		editStyleData.span.style.height = (editStyleData.span.offsetHeight + deltaH) + 'px';	
		editStyleData.styleType.updateHeight(editStyleData.span.offsetHeight + deltaH);
	}
		
	GL_updateStyleParameter(editStyleData); 
	
	GL_updateMSHighlightSpan(editStyleData);
	CSSInspector.refresh();
}

function GL_editStyleOnKeyDownUpdateSpan(editStyleData, deltaX, deltaY, deltaW, deltaH) {

	var sourceSpan = editStyleData.span;
	var highlightSpan = editStyleData.highlightSpan;  
	
	if ( deltaX > MIN) {
		highlightSpan.style.left = (jQuery(highlightSpan).position().left + deltaX) + 'px';
	}
	if ( deltaY > MIN) {
		highlightSpan.style.top = (jQuery(highlightSpan).position().top + deltaY) + 'px';
	}
	if ( deltaW > MIN) {
		var width = highlightSpan.offsetWidth;
		if ( !GL_isIE() ) {
			var borderWidth = GL_getBorderWidth(highlightSpan);
			width -= 2* borderWidth;
		}
		highlightSpan.style.width = (width + deltaW) + 'px';
	}	
	if ( deltaH > MIN) {
		var height = highlightSpan.offsetHeight;
		if ( !GL_isIE() ) {
			var borderWidth = GL_getBorderWidth(highlightSpan);
			height -= 2* borderWidth;
		}		
		highlightSpan.style.height = (height + deltaH) + 'px';	
	}	
				
	sourceSpan.style.position = 'absolute';  
	GL_copyHighligthToEdit(highlightSpan, sourceSpan);				
	GL_updateStyleParameter(editStyleData); 	
	GL_updateMSHighlightSpan(editStyleData);
}

function GL_getDataItem(id) {
   var item = gl_itemArray[id];
   if ( !item ) {
       item = new GLEditStyleData();
       gl_itemArray[id] = item; 
   }
   return item;  
}

function GL_addDrawItem(sourceSpan, type, styleParameterId, valueParameterId, drawType) {
    if ( !drawType ) {
        return;
    }
    var item = gl_itemArray[sourceSpan.id];
    if ( item ) {
        return;
    }
    
    item = new GLEditStyleData();
    item.span = sourceSpan;
    item.type = type;
    item.drawType = drawType;
    item.styleParameterId = styleParameterId;
    item.valueParameterId = valueParameterId;
    gl_itemArray[sourceSpan.id] = item;
}

function GL_isInDrawArea(id) {
    if ( !gl_itemArray[id] ) {
        return;
    }

    var item = gl_itemArray[id];
    var x = event.clientX;
    var y = event.clientY;
    s( x + ' ' + item.left );
    if ( x >= item.left && x <= (item.left + item.width) && y >= item.top && y <= item.top + item.height ) {
        return true;
    } else {        
        return false;
    }
}
function GL_drawSetData(id, drawLineWidth, drawLineHeight) {
   var item = gl_itemArray[id];
   if ( !item ) {
    GL_getDataItem(id).drawLineWidth = drawLineWidth;         
    GL_getDataItem(id).drawLineHeight = drawLineHeight;
   }
}

function GLMouseData() {
	this.handle;
}
function GLEditStyleData() {
	this.span;
	this.type;	
	this.valueParameterId;
	this.styleParameterId;	
    this.modifyFlagParameterId;
    
	this.propertyParameterId;	
	this.savedInnerHTML;
	this.highlightSpan;
	this.display_name;
	this.edit;
	this.drawType;
	this.drawLineWidth;	
	this.drawLineHeight;
	this.borderWidth;
	this.visibility;
    
    this.value;
    this.left;  
    this.top;
    this.width;  
    this.height;      
    this.isHide; 
    this.styleType = new StyleType(); 
}

function GLPopupData() {
	this.handle;	
	this.popupId;
	this.filePopupId;
	this.fileUrlSpanId;
}



function GL_submitEditStyle(select) {
	var selectedValue = select.options[select.selectedIndex].value;
	if ( selectedValue && selectedValue.length > 1) {
		this.location = selectedValue;
	}
}

function pickColor(color) {
	if (ColorPicker_targetInput==null) {
		return;
	}
	ColorPicker_targetInput.value = color;
	if ( ColorPicker_targetInput.id ) {
		GL_setColor(ColorPicker_targetInput.id, color);
	}
}

function GL_getUpdateStyleList() {
	var updateList = new Array();
	if ( gl_isMultipleSelect ) {
		for (var i=0; i<gl_highlightedSpans.length; i++) {
			updateList[i] = gl_highlightedSpans[i];
		}	
	} else {
		if ( gl_editStyleData ) {
			updateList[gl_highlightedSpans.length] = gl_editStyleData;
		}
	}
	return updateList;
}

function GL_setColor(name, color) {
	var updateList = GL_getUpdateStyleList();
	if ( updateList.length == 0 ) {
		return;
	}
	for (var i=0; i<updateList.length; i++) {
		var currStyle = updateList[i].span.style;
		
		if ( 'color' == name ) {
			currStyle.color = color;
		} else 
		if ( 'background-color' == name ) {
			if ( color == '#FFFFFF' ) {
				currStyle.backgroundColor = 'transparent';
			} else {
				currStyle.backgroundColor = color;
			}
		} else
		if ( 'border-color' == name ) {
			currStyle.borderColor = color;
	   		var borderStyle = GL_getBorderStyle(updateList[i].span)
	   		if (!borderStyle || 'none' == borderStyle ) {
	   			currStyle.borderStyle = 'solid';
	   		}
		}		
		GL_updateStyleParameter(updateList[i]);
	}
}

function GL_storeCurrentColor(name) {
	var updateList = GL_getUpdateStyleList();
	if ( updateList.length == 0 ) {
		return;
	}
	var firstColor;
	for (var i=0; i<updateList.length; i++) {
		var span = updateList[i].span;
		var currStyle = updateList[i].span.style;
		var prevStyle;
		if (span.prevStyle)
			prevStyle = span.prevStyle;
		else
			span.prevStyle = prevStyle = {};
		
		if ( 'color' == name ) {
			prevStyle.color = currStyle.color;
			if (!firstColor)
				firstColor = prevStyle.color;
		} else 
		if ( 'background-color' == name ) {
			prevStyle.backgroundColor = currStyle.backgroundColor;
			if (!firstColor)
				firstColor = prevStyle.backgroundColor;
		} else
		if ( 'border-color' == name ) {
			prevStyle.borderColor = currStyle.borderColor;
			prevStyle.borderStyle = currStyle.borderStyle;
			if (!firstColor)
				firstColor = prevStyle.borderColor;
		}
	}
	
	return firstColor;
}

function GL_restorePreviousColor(name) {
	var updateList = GL_getUpdateStyleList();
	if ( updateList.length == 0 ) {
		return;
	}
	for (var i=0; i<updateList.length; i++) {
		var currStyle = updateList[i].span.style;
		var prevStyle;
		if (updateList[i].span.prevStyle)
			prevStyle = updateList[i].span.prevStyle;
		else
			continue;
		
		if ( 'color' == name ) {
			currStyle.color = prevStyle.color;
		} else 
		if ( 'background-color' == name ) {
			currStyle.backgroundColor = prevStyle.backgroundColor;
		} else
		if ( 'border-color' == name ) {
			currStyle.borderColor = prevStyle.borderColor;
			currStyle.borderStyle = prevStyle.borderStyle;
		}
	}
	GL_updateStyleParameter(updateList[i]);	
}

function GL_setSelectedStyle(select, name) {
	var updateList = GL_getUpdateStyleList();
	if ( updateList.length == 0 ) {
		return;
	}
	for (var i=0; i<updateList.length; i++) {
		var currStyle = updateList[i].span.style;
		
		var selectedValue = select.options[select.selectedIndex].value;
		if ( 'font-family' == name ) {	
		   	currStyle.fontFamily = selectedValue;
		} else 
		if ( 'text-transform' == name ) {	
		   	currStyle.textTransform = selectedValue;
		} else 
		if ( 'border-style' == name ) {	
		   	currStyle.borderStyle = selectedValue;
		   	if ( 'none' != selectedValue ) {
			   	var borderWidth = GL_getBorderWidth(updateList[i].span);
			   	if ( borderWidth < 1 ) {
			   		currStyle.borderWidth = '1px';
			   	}		   	
		   	}
		}  else 
		if ( 'vertical-align' == name ) {	
		   	currStyle.verticalAlign = selectedValue;
		} else 
		if ( 'width' == name ) {	
		    if ( selectedValue && selectedValue.length > 0 ) {
			   	currStyle.width = selectedValue + 'px';
			}
		} else 		
		if ( 'height' == name ) {	
		    if ( selectedValue && selectedValue.length > 0 ) {
			   	currStyle.height = selectedValue + 'px';
			}
		} else 
		if ( 'border-width' == name ) {	
		   	currStyle.borderWidth = selectedValue + 'px';
		   	if ( selectedValue*1 > 0 ) {
		   		var borderStyle = GL_getBorderStyle(updateList[i].span)
		   		if (!borderStyle || 'none' == borderStyle ) {
		   			currStyle.borderStyle = 'solid';
		   		}
		   	}
		}		
	
		GL_updateStyleParameter(updateList[i]);
		GL_updateMSHighlightSpan(updateList[i]);
	}	
	CSSInspector.refresh();
	select.selectedIndex = 0;
}

function GL_setStyleValue(name, value) {
	var updateList = GL_getUpdateStyleList();
	if ( updateList.length == 0 ) {
		return;
	}
	for (var i=0; i<updateList.length; i++) {
		var currStyle = updateList[i].span.style;
		
		if ( 'text-align' == name ) {	
		   currStyle.textAlign = value;
		} else
		
		if ( 'font-size' == name ) {		
		   var currValue = findComputedStyleValue(updateList[i].span, name, 'fontSize');
		   if ( currValue.indexOf('%') > -1 ) {
			   var size = currValue.substring(0, currValue.length-1) * 1;	   
			   if ( value == 'plus' ) {
			   		size = size * 1 + 10;
			   } else {
				   size = size * 1 - 10;
			   }	   
			   currStyle.fontSize = size + '%';
		   } else
		   if ( currValue.indexOf('px') > -1 ) {
		       var size = Math.round(currValue.replace(/px/, '') * 1);
		       if ( value == 'plus' ) {
		           size = size + 1;
		       } else {
		           size = size - 1;	       
		       }
		       currStyle.fontSize = size + 'px';	
		   }
		}	
		GL_updateStyleParameter(updateList[i]);
	}
	CSSInspector.refresh();
}

function GL_setStyle(name) {
	var updateList = GL_getUpdateStyleList();
	if ( updateList.length == 0 ) {
		return;
	}
	for (var i=0; i<updateList.length; i++) {
		var currStyle = updateList[i].span.style;
		
		if ( 'font-weight' == name ) {
			var currValue = currStyle.fontWeight;
			var newValue;		
		    if ( currValue == 'bold' ) {
		    	newValue = 'normal';
		    } else {
		    	newValue = 'bold';
		    }
	 	    currStyle.fontWeight = newValue;
		} else
		if ( 'font-style' == name ) {
			var currValue = currStyle.fontStyle;
			var newValue;		
		    if ( currValue == 'italic' ) {
		    	newValue = 'normal';
		    } else {
		    	newValue = 'italic';
		    }
	 	    currStyle.fontStyle = newValue;
		} else
		if ( 'text-decoration' == name ) {
			var currValue = currStyle.textDecoration;
			var newValue;		
		    if ( currValue == 'underline' ) {
		    	newValue = 'none';
		    } else {
		    	newValue = 'underline';
		    }
	 	    currStyle.textDecoration = newValue;
		} else
		if ( 'visibility' == name ) {	
			var currValue = currStyle.visibility;
			var newValue;
			if (currValue == 'hidden'){
				newValue = '';
			}
			else {
				newValue = 'hidden';
			}
			currStyle.visibility = newValue;
//			var currValue = updateList[i].visibility;
//			var newValue;		
//		    if ( currValue == 'hidden' ) {
//		    	newValue = 'visible';	    	
//		    	currStyle.backgroundColor = 'transparent';
//		    } else {
//	            if ( GL_getDataItem(updateList[i].span.id).isHide ) {
//	                newValue = 'visible';           
//	                currStyle.backgroundColor = 'transparent';                
//	                GL_getDataItem(updateList[i].span.id).isHide = false;
//	            } else {
//	    	    	newValue = 'hidden';		
//		       	    currStyle.backgroundColor = '000033';	    			    
//	            }
//		    }	    
//	 	    updateList[i].visibility = newValue;	
		} else
		if ( 'writing-mode' == name ) {	
			var currValue = currStyle.writingMode;
			var newValue;		
		    if ( currValue == 'tb-rl' ) {
		    	newValue = 'lr-tb';
		    } else {
		    	newValue = 'tb-rl';
		    }
		    
	 	    currStyle.writingMode = newValue;	
	 	    var temp = currStyle.height;
	 	    currStyle.height = currStyle.width;
	 	    currStyle.width = temp;
	 	    
		}		
		GL_updateStyleParameter(updateList[i]);
	}
	CSSInspector.refresh();
}
function findStyleValue(object, styleProp, IEStyleProp) {
	return object.style[IEStyleProp];
	if (object.currentStyle) return object.currentStyle[IEStyleProp];
	else if (window.getComputedStyle) {
		
		compStyle = window.getComputedStyle(object,'');
		var value = compStyle.getPropertyValue(styleProp);
		if ( !value ) {
			value = eval('object.style.' + IEStyleProp);
		}
		return value;
	}
}

function findComputedStyleValue(object, styleProp, IEStyleProp){
	if (object.currentStyle) return object.currentStyle[IEStyleProp];
	else if (window.getComputedStyle) {
		
		compStyle = window.getComputedStyle(object,'');
		var value = compStyle.getPropertyValue(styleProp);
		if ( !value ) {
			value = eval('object.style.' + IEStyleProp);
		}
		return value;
	}
}

function GL_setHandlerVisibility(id, visibility) {
	var handler = GL_findDOMObjectById(gl_editStyleData.highlightSpan, 'img', id);
	if (handler)
		handler.style.visibility = visibility;
}

function GL_hideHighlightSpan() {
	if ( !gl_editStyleData ) {
		return;
	}

	gl_editStyleData.highlightSpan.style.visibility = 'hidden';
	
       GL_setHandlerVisibility('GL_editStyleResizeEE', 'hidden');
       GL_setHandlerVisibility('GL_editStyleResizeWW', 'hidden'); 
       GL_setHandlerVisibility('GL_editStyleResizeSS', 'hidden');        
       GL_setHandlerVisibility('GL_editStyleResizeNN', 'hidden');
       GL_setHandlerVisibility('GL_editStyleResizeNE', 'hidden');        
       GL_setHandlerVisibility('GL_editStyleResizeSE', 'hidden');        
       GL_setHandlerVisibility('GL_editStyleResizeSW', 'hidden');        
       GL_setHandlerVisibility('GL_editStyleResizeNW', 'hidden');  
    
    GL_setHandlerVisibility('GL_lineBeginHandle', 'hidden');
    GL_setHandlerVisibility('GL_lineMiddleHandle', 'hidden'); 
    GL_setHandlerVisibility('GL_lineEndHandle', 'hidden');  	
}



function GL_changeMainBodyCursor(cursor) {
	var mainBody = findObject('GL_mainBody');
	mainBody.style.cursor = cursor;		
}



function GL_getSpanStyle(styleData) {
    var editSpan = styleData.span;
    var st = styleData.styleType;
	var style = styleData.span.style.cssText;//'';	
//    var style = "";
	if (style.charAt(style.length-1) != ';'){
		style += ';';
	}
	style += st.getVersion();
	return style;
	
	var newNameOffset = 0;
	var newFieldNameSpan = findObject(editSpan.id + 'newFieldName');
	if ( newFieldNameSpan ) {
		newNameOffset = newFieldNameSpan.offsetWidth;
	}

	if ( st.isEditable('top') ) {
	    style += 'top:' + jQuery(editSpan).position().top + 'px;';	
	}
	if ( st.isEditable('left') ) {	
		style += 'left:' + (editSpan.offsetLeft+newNameOffset) + 'px;';
	}
	
	var width = st.getWidth();//editSpan.offsetWidth;
	var height = st.getHeight();//editSpan.offsetHeight;
	if ( !GL_isIE() ) {
		var borderWidth = GL_getBorderWidth(editSpan);
		width -= 2* borderWidth;
		height -= 2* borderWidth;
	}
	if ( st.isEditable('width') ) {
		style += 'width:' + width + 'px;';
	}
	if ( st.isEditable('height') ) {	
		style += 'height:' + height + 'px;';
	}
	
	if ( st.isEditable('font-family') ) {	
		style += GL_getStyle(editSpan, 'font-family', 'fontFamily');
	}
	if ( st.isEditable('font-size') ) {	
		style += GL_getStyle(editSpan, 'font-size', 'fontSize');
	}
	if ( st.isEditable('font-weight') ) {		
		style += GL_getStyle(editSpan, 'font-weight', 'fontWeight');
	}
	if ( st.isEditable('font-style') ) {		
		style += GL_getStyle(editSpan, 'font-style', 'fontStyle');
	}
	if ( st.isEditable('text-decoration') ) {		
		style += GL_getStyle(editSpan, 'text-decoration', 'textDecoration');
	}
	if ( st.isEditable('text-align') ) {	
		style += GL_getStyle(editSpan, 'text-align', 'textAlign');
	}
	if ( st.isEditable('color') ) {		
		style += GL_getStyle(editSpan, 'color', 'color');
	}
	if ( st.isEditable('text-transform') ) {		
		style += GL_getStyle(editSpan, 'text-transform', 'textTransform');	
	}
	
	if ( GL_isIE() ) {
		if ( st.isEditable('border-style') ) {			
			style += GL_getStyle(editSpan, 'border-style', 'borderStyle');
		}
		if ( st.isEditable('border-color') ) {			
			style += GL_getStyle(editSpan, 'border-color', 'borderColor');
		}
		if ( st.isEditable('border-width') ) {			
			style += GL_getStyle(editSpan, 'border-width', 'borderWidth');		
		}
	} else {
		if ( st.isEditable('border-style') ) {			
			style += 'border-style:' + GL_getBorderStyle(editSpan) + ';';	
		}
		if ( st.isEditable('border-color') ) {			
			style += 'border-color:' + GL_getBorderColor(editSpan) + ';';
		}
		if ( st.isEditable('border-width') ) {			
			style += 'border-width:' + GL_getBorderWidth(editSpan) + ';';
		}
	}
	if ( st.isEditable('writing-mode') ) {		
		style += GL_getStyle(editSpan, 'writing-mode', 'writingMode');
	}

	if ( 'hidden' == styleData.visibility ) {
		style += 'visibility:hidden;';
		style += 'background-color:' + styleData.savedBackgroundColor + ";";
	} else {
		style += GL_getStyle(editSpan, 'visibility', 'visibility');	
		if ( st.isEditable('background-color') ) {			
			style += GL_getStyle(editSpan, 'background-color', 'backgroundColor');
		}
	}
	
	if ( st.isEditable('drawLineWidth') ) {		
		if ( GL_getDataItem(styleData.span.id).drawLineWidth ) {
			style += ';drawLineWidth:' + GL_getDataItem(styleData.span.id).drawLineWidth + ';';
		}
	}
	if ( st.isEditable('drawLineHeight') ) {		
		if ( GL_getDataItem(styleData.span.id).drawLineHeight ) {
			style += ';drawLineHeight:' + GL_getDataItem(styleData.span.id).drawLineHeight + ';';
		}
	}	
	return style;
}

function GL_getBorderStyle(span) {
    var style =  span.style.borderStyle;
    if ( !style ) {
    	return null;
    }
    if ( !GL_isIE()) {
	    var parIndex = style.indexOf(' ');
	    if ( parIndex > -1 ) {
	    	return style.substring(0, parIndex);
	    }
    }	
    return style;
}

function GL_updateStyleParameter(styleData, noUpdateHighlightSpan) {
	if ( !styleData ) {
		return;
	}
	var editSpan = styleData.span;
	var styleParameter = GL_findFormField(styleData.styleParameterId);
	styleParameter.value = GL_getSpanStyle(styleData);
    
    var modifyParameter = GL_findFormField(styleData.modifyFlagParameterId);
    modifyParameter.value = 'yes';    
    
    var textInput = GL_findDOMObjectById(editSpan, 'INPUT', 'gl_editStyleInputValue');
	if ( textInput ) {
	   var hiddenInput = GL_findFormField(GL_getDataItem(editSpan.id).valueParameterId);
       if ( hiddenInput ) {
    	   hiddenInput.value = textInput.value;	
       }
       var modifyParameter2 = GL_findFormField(GL_getDataItem(editSpan.id).modifyFlagParameterId);
       if ( modifyParameter2 ) {
        modifyParameter2.value = 'yes';
       }       
	}
	
	if ( styleData.propertyParameterId ) {
	    var propertyHidden = GL_findFormField(styleData.propertyParameterId);
	    var prop = '';
	    if ( styleData.display_name ) {
	    	prop += 'display name=' + styleData.display_name + '::';
	    }
	    if ( styleData.edit ) {
	    	prop += 'edit next=' + styleData.edit + '::edit=' + styleData.edit + '::';
	    }	
	    propertyHidden.value = prop;
	}

	var newFieldNameSpan = findObject(styleData.span.id + 'newFieldName');
	if ( newFieldNameSpan ) {
		var newFieldNameStyleParameter = GL_findFormField(styleData.span.id + 'newFieldNameStyleParameter');
		if ( newFieldNameStyleParameter ) {	
		    newFieldNameStyleParameter.value = 'position:absolute;';
			newFieldNameStyleParameter.value += 'top:' + editSpan.offsetTop + 'px;';
			newFieldNameStyleParameter.value += 'left:' + editSpan.offsetLeft + 'px;';
		}
	}
	if ( noUpdateHighlightSpan != true ) { 
		GL_updateHighlightSpan(styleData.span);	
	}
    
    if ( styleData.drawType == 'oval' ) {
        var bw = GL_getBorderWidth(editSpan);
        var color =  GL_getBorderColor(styleData.span);
        editSpan.innerHTML =  GL_drawOval(0, 0, editSpan.offsetWidth, editSpan.offsetHeight, color, bw);  
    } else if ( styleData.drawType == 'line' ) {    
        var bw = GL_getBorderWidth(styleData.span);
        var color =  GL_getBorderColor(styleData.span);
        editSpan.innerHTML = GL_drawLine(
                   GL_getDataItem(styleData.span.id).drawLineWidth*1, 
                   GL_getDataItem(styleData.span.id).drawLineHeight*1, color, bw, 2);     
    }
    
    GL_updateStyleParameter.styleUpdated = true;
}

function GL_getStyle(object, name, varName) {
	return name + ':' + findStyleValue(object, name, varName) + ';';
}

function GL_getSpanInputText(valueParameterInputId, valueParameterInputValue, width) {
	var str = '';
	str += '<INPUT style="position:absolute;width:' + width + 'px;" class="text" TYPE="text" ';
	str += ' id="gl_editStyleInputValue" NAME="gl_editStyleInputValue"';
	str += ' onchange="GL_setValue(\'' + valueParameterInputId + '\', this.value);"';        
    str += ' VALUE="' + valueParameterInputValue + '"/>';					
	return str;
}

function GL_getSpanInputTextArea(valueParameterInputId, valueParameterInputValue) {
	var str = '';
	str += '<TEXTAREA ROWS="5" COLS="50" style="position:absolute;" ';
	str += ' id="gl_editStyleInputValue" name="gl_editStyleInputValue"';
	str += ' onchange="GL_setValue(\'' + valueParameterInputId + '\', this.value);"';        
    str += ' >' + valueParameterInputValue + '</TEXTAREA>';					
	return str;
}

function GL_insertNewLabel(value, editable) {
	return GL_insertTextField('label', '', value, editable);
}

function GL_showPopupEditStyleNewField(popupId, filePopupId, fileUrlSpanId) {
   gl_popupData = new GLPopupData();
   gl_popupData.handle = 'editStyleNewField';
   gl_popupData.filePopupId = filePopupId;
   gl_popupData.fileUrlSpanId = fileUrlSpanId;
}
function GL_popupOkEditStyleNewField() {
	var toolbarForm = GL_findForm('GL_toolbarForm');
	var name = GL_findField(toolbarForm, 'newFieldName').value;
	var typeSelect =  GL_findField(toolbarForm, 'newFieldDataType');
	var type = typeSelect.options[typeSelect.selectedIndex].value;

	if ( type == '4' ) {	//file
		GL_insertFileField(gl_popupData.filePopupId, gl_popupData.fileUrlSpanId);
	} else {
		var value = '';
		if ( type == '3' ) {  //date
			value = formatDate(new Date(), 'MM/dd/yyyy HH:mm:ss');
		}	
		var editable = GL_isEditableField(type);
		GL_insertTextField(type, name, value, editable);
	}	
	if ( gl_editStyleData ) {
		gl_editStyleData.span.style.left = '360px';
		gl_editStyleData.span.style.top = '200px';
		GL_updateHighlightSpan(gl_editStyleData.span);
	}
}

function GL_insertFileField(popupId, fileUrlSpanId) {
	var urlSpan = findObject(fileUrlSpanId);
	urlSpan.innerHTML += 'primitiveDataId=newDisplayField';
	GL_showPopupFrame(popupId, fileUrlSpanId, 'Insert a New File', 560, 250);
}

function GL_isEditableField(type) {
	if ( type == '0' ) {
		return true;
	} 
	if ( type == '1' ) {
		return true;
	} 
	if ( type == '2' ) {
		return true;
	} 
	if ( type == '9' ) {
		return true;
	} 
	if ( type == '10' ) {
		return true;
	} 
	return false;
}

function GL_insertTextField(type, newFieldName, value, editable) {
    var defaultInputLength = 200;
	var transForm = GL_findForm('transactionForm');
	
	var newField = '';
	var valueParameterId = 'newFieldValue' + gl_newFieldCount;	
	var styleParameterId = 'newFieldStyle' + gl_newFieldCount;
    var modifyFlagParameterId = 'newFieldModifyFlag' + gl_newFieldCount;
	var propertyParameterId = 'newFieldProp' + gl_newFieldCount;
	var spanId = 'editStyleNewField' + gl_newFieldCount;
    var drawType = '';
    if ( gl_editStyleData && gl_editStyleData.drawType ) {
        drawType = gl_editStyleData.drawType;
    }
	
	newField += '<span style="position:absolute;vertical-align:middle;" id="' + spanId + '"';
	newField += ' onclick="GL_editStyleAndValue(event, this, \'' + type + '\', \'' + styleParameterId + '\', \'' + valueParameterId + '\', \'' + drawType + '\', \'' + modifyFlagParameterId + '\');"';
	if ( type == 'label' ) {
		newField += ' ondblclick="GL_editStyleSwitchEdit(this, \'' + type + '\', \'' + styleParameterId + '\',  \'' + valueParameterId + '\', \'' + modifyFlagParameterId + '\');"';
	}
	newField += '>';
	newField += '</span>';

	if ( type == 'label' ) {
	    if ( gl_editStyleData && gl_editStyleData.drawType && gl_editStyleData.drawType != 'label') {
			newField += '<input TYPE="hidden" NAME="newFieldTypes" VALUE="'+ gl_editStyleData.drawType + '"/>';			    
	    } else {
			newField += '<input TYPE="hidden" NAME="newFieldTypes" VALUE="19"/>';		
		}
	} else {	
		newField += '<input TYPE="hidden" NAME="newFieldTypes" VALUE="' + type + '"/>';
	}

	newField += '<input TYPE="hidden" NAME="newFieldNames" VALUE="' + newFieldName + '" id="' +  spanId + 'newFieldNameParameter' + '"/>';
	newField += '<input TYPE="hidden" NAME="newFieldNameStyles" VALUE="" id="' +  spanId + 'newFieldNameStyleParameter' + '"/>';	
	if ( type == 'label' || !editable ) {
		newField += '<input TYPE="hidden" NAME="newFieldValues" VALUE="' + value + '" id="' + valueParameterId + '"/>';	
	}
	newField += '<input TYPE="hidden" NAME="newFieldValueStyles" VALUE="" id="' + styleParameterId + '"/>';
	newField += '<input TYPE="hidden" NAME="newFieldProperties" VALUE="" id="' + propertyParameterId + '"/>';
    newField += '<input TYPE="hidden" NAME="styleFieldModifyFlags" VALUE="yes" id="' + modifyFlagParameterId + '"/>';
	
	transForm.innerHTML += newField;
    gl_newFieldCount = gl_newFieldCount + 1;
    
    var newSpan = findObject(spanId);  
    var typeStr = 'text';  
    if ( type == 'label' ) {
        typeStr = 'label';    
    } else {
	    newSpan.innerHTML = '<span id="' + spanId + 'newFieldName">' + newFieldName + '</span>';
	} 
    if ( type == '13' ) {  //sequence
    	newSpan.innerHTML += GL_getSpanInputTextArea(valueParameterId, ''); 
    	typeStr = 'sequence';  
	} else {
		if ( type == '3' ) {  //date
			typeStr = 'date';   	
		}
 		if ( editable ) {
 			if ( type == 'label' ) {
				newSpan.innerHTML += GL_getSpanInputText(valueParameterId, '', defaultInputLength); 
			} else {
				newSpan.innerHTML += '<input TYPE="text" NAME="newFieldValues" VALUE="' + value + '" id="' + valueParameterId + '"/>';	
			}
		} else {
			newSpan.innerHTML += value;
		}
	} 
	var input = findObject('gl_editStyleInputValue');
	if ( input ) {
		var width = newSpan.offsetWidth + input.offsetWidth;
		var height = newSpan.offsetHeight;
		if ( input.offsetHeight > height ) {
			height = input.offsetHeight;
		}
		newSpan.style.width = width + 'px';
		newSpan.style.height = height + 'px';		
	}
	GL_moveToCenter(newSpan);	
    GL_editStyleAndValue(window.event, newSpan, typeStr, styleParameterId, valueParameterId, '', modifyFlagParameterId);  
    GL_updateStyleParameter(gl_editStyleData);
    
    return newSpan;
}

function GL_editStyle(evt, sourceSpan, styleParameterId, modifyFlagParameterId) {
	gl_mouseData = new GLMouseData();
	gl_mouseData.handle = 'editStyle';
	
	var editStyleData = new GLEditStyleData();
	editStyleData.styleType.sourceSpan = editStyleData.span = sourceSpan;
	editStyleData.styleParameterId = styleParameterId;
    editStyleData.modifyFlagParameterId = modifyFlagParameterId;
	editStyleData.savedInnerHTML = sourceSpan.innerHTML;
	GL_editStyleSelect(evt,	editStyleData );
	DomSelectNode.getSelectNode(editStyleData.highlightSpan).onMouseDown(evt);
	return Core.preventDefault(evt);
}

function GL_editStyleAndValue(evt, sourceSpan, type, styleParameterId, valueParameterId, drawType, modifyFlagParameterId, childTagName) {
	gl_mouseData = new GLMouseData();
	gl_mouseData.handle = 'editStyle';
	
    var itemData = GL_getDataItem(sourceSpan.id);   
    itemData.span = sourceSpan;    
    itemData.type = type;
    itemData.styleParameterId = styleParameterId;
    itemData.valueParameterId = valueParameterId;  
    itemData.drawType = drawType;
    
	var editStyleData = new GLEditStyleData();
	
	var childDom = null;
	if ( childTagName ) {
		var children = sourceSpan.getElementsByTagName(childTagName);		
		if ( children && children.length > 0 ) {
			childDom = children[0];
		}
	}
	
	if (sourceSpan.tagName == 'INPUT'){
		childDom = sourceSpan;
		sourceSpan = childDom.parentNode;
		childTagName = 'INPUT';
	}
	
	if ( childTagName == 'INPUT' ) {
		editStyleData.styleType = new StyleTypeTextField();
		editStyleData.styleType.input = childDom;
	} else if (childTagName == 'TEXTAREA') {
		editStyleData.styleType = new StyleTypeTextArea();
		editStyleData.styleType.textarea = childDom;
	}
	editStyleData.styleType.sourceSpan = sourceSpan;

	editStyleData.span = sourceSpan;
	editStyleData.type = type;
	editStyleData.drawType = drawType;
	editStyleData.styleParameterId = styleParameterId;
	editStyleData.valueParameterId = valueParameterId;
    editStyleData.modifyFlagParameterId = modifyFlagParameterId;
	editStyleData.savedInnerHTML = sourceSpan.innerHTML;
	GL_editStyleSelect(evt, editStyleData);
	DomSelectNode.getSelectNode(editStyleData.highlightSpan).onMouseDown(evt);
	
	if ( gl_isMultipleSelect == true ) {  
		return Core.preventDefault(evt);
	}
    
    if ( gl_editStyleData && gl_editStyleData.drawType && gl_editStyleData.drawType == 'line' ) {     
        gl_drawLineInit = false;       
        GL_showLineHighlight();
    } 
	return Core.preventDefault(evt);
}

function GL_savePreviousData(newSelectSpan) {
    if ( !gl_editStyleData || !gl_editStyleData.span ) {
        return;
    }
    
    var prevSpan = gl_editStyleData.span;
    if ( prevSpan.id == newSelectSpan.id ) {
        return;
    }
    GL_saveUserInputData(prevSpan);

}

function GL_saveUserInputData(aSpan) {
    var textInput = GL_findDOMObjectById(aSpan, 'INPUT', 'gl_editStyleInputValue');
    if ( !textInput ) {
        return;
    }
    
   var modifyParameter = GL_findFormField(GL_getDataItem(aSpan.id).modifyFlagParameterId);
   if ( modifyParameter ) {
        modifyParameter.value = 'yes';
   }       
    
    var parameterId = GL_getDataItem(aSpan.id).valueParameterId;
    if ( !parameterId ) {
        return;
    }
        
    var parameter = GL_findFormField(parameterId); 
    if ( !parameter ) {
        return;
    }    
    parameter.value = textInput.value;
    aSpan.innerHTML = parameter.value;
}



function GL_setFieldProperty(propName, value, input) {
	if ( !gl_editStyleData ) {
		return;
	}

	if ( 'display name' == propName ) {
		gl_editStyleData.display_name = value;
		var newFieldNameSpan = findObject(gl_editStyleData.span.id + 'newFieldName');
		if ( newFieldNameSpan ) {
			newFieldNameSpan.innerHTML = value;
		}
		var newFieldNameParameter = GL_findFormField(gl_editStyleData.span.id + 'newFieldNameParameter');
		if ( newFieldNameParameter ) {
			newFieldNameParameter.value = value;
		}		
	} 	
	if ( 'edit' == propName ) {
	    if ( gl_editStyleData.edit = 'yes' ) {
	    	gl_editStyleData.edit = 'no';
	    } else {
			gl_editStyleData.edit = 'yes';	    
	    }
	} 	
	GL_updateStyleParameter(gl_editStyleData);
}

function GL_draw(drawType) {
	gl_mouseData = new GLMouseData();
	gl_mouseData.handle = 'editStyle';
	
	gl_editStyleData = new GLEditStyleData();
	gl_editStyleData.type = 'label';
	gl_editStyleData.drawType = drawType;
	GL_changeMainBodyCursor('move');
}

function GL_dot(left, top, size, color) {
    var html = '';
    html += '<SPAN';
    html += ' STYLE="position:absolute;left:' + left + 'px;top:' + top + 'px;';
    html += 'width:' + size + 'px;height: ' + size + 'px;';
    html += 'clip:rect(0 ' + size + 'px, ' + size + 'px, 0);';
    html += 'background-color:' + color + ';"';
    html += '>';
    html += '</SPAN>';
    return html;
}

function GL_drawOval (left, top, width, height, color, borderWidth) {  
	var html = '';
    left = Math.round(left);  width = Math.round(width);  
    top = Math.round(top);  height = Math.round(height); 

    var A = (width-left)/2;  var XM = left+A;
    var B = (height-top)/2;  var YM = top+B;

    var SinPhi = 1/Math.sqrt(A*A+B*B);
    var CosPhi = Math.sqrt(1 - SinPhi*SinPhi);

    var X = 1; var Y = 0;  var XNew = 0; var YNew = 0;
    while (X > -SinPhi) {    
    	html += GL_dot( Math.round(XM+A*X), Math.round(YM+B*Y), borderWidth, color);
	    html += GL_dot( Math.round(XM-A*X), Math.round(YM+B*Y), borderWidth, color);
	    html += GL_dot( Math.round(XM+A*X), Math.round(YM-B*Y), borderWidth, color);
	    html += GL_dot( Math.round(XM-A*X), Math.round(YM-B*Y), borderWidth, color);
    	XNew = X*CosPhi - Y*SinPhi;
	    YNew = X*SinPhi + Y*CosPhi;
    	X = XNew;
	    Y = YNew;
    }
    html += '<span style="width:100%;height:100%;" ></span>';
    return html;
}



function GL_toolBarInit() {
	window.document.onkeydown = GL_editStyleOnKeyDown; 	
	var headerImage = findObject('GL_glHeaderImage');
	headerImage.style.visibility = 'hidden';
    findObject('GL_windowEditorLabel').style.display = 'none';
    findObject('GL_windowEditor').style.top = '90px';
    
    //init underIFrame
    var mainPos = jQuery('#GL_mainBody').position();
    jQuery('#GL_underIFrame').css(mainPos);
}

var gl_toolbar = null;
var gl_alignBar = null;
function GL_scrollToolBar() {
	if ( gl_toolbar == null ) {
		gl_toolbar = findObject('GL_toolbar');
		gl_toolbar.style.zIndex = 10000; 
	}
	if ( gl_alignBar == null ) {
		gl_alignBar = findObject('GL_editStyleAlignToolBar');
		gl_alignBar.style.zIndex = 10000; 
		gl_alignBar.style.position = 'absolute';
	}
	if (!Core.isIE()){
		gl_toolbar.style.position = 'fixed';
		gl_alignBar.style.position = 'fixed';
		gl_toolbar.style.top = '0px';	
		gl_alignBar.style.top = gl_toolbar.offsetHeight + 'px';
		gl_toolbar.style.left = '0px';	
		gl_alignBar.style.left = '0px';
		return;
	}
	
	var main = findObject('GL_mainBody');
	var mainTop = main.offsetTop;
	
	var top = document.body.scrollTop;
	gl_toolbar.style.top = (top-mainTop) + 'px';	
	gl_alignBar.style.top = (top + gl_toolbar.offsetHeight - mainTop) + 'px';
	var left = document.body.scrollLeft + 'px';
	gl_toolbar.style.left = left;	
	gl_alignBar.style.left = left;
	
	if (GL_colorPicker)
		GL_colorPicker.mainDiv.style.top = (top + gl_toolbar.offsetHeight) + 'px';
	if (CSSInspector.inspector){
		var iTop = top + document.body.clientHeight - CSSInspector.inspector.mainDiv.offsetHeight;
		CSSInspector.inspector.mainDiv.style.top = iTop + 'px';
	}
	
	temp = setTimeout('GL_scrollToolBar()',500);
}

function GL_editStyleSave() {
	GL_resetAction('transactionForm', 'saveStyle');
	document.transactionForm.submit();
}
function GL_editStyleReset() {
	var go = confirm('Are you sure you want to restore all to default setting?');
	if ( go ) {
		GL_setValue('editStyleClearAll', 'yes');
		GL_editStyleSave()
 	}	
}

function GL_showAllHiddenFields() {
	var table = findObject("GL_mainBody");
	var spans = table.getElementsByTagName("span");
	GL_removeAllHighlighted();
	for (i=0; i<spans.length; i++) {
		var aSpan = spans[i];
		if ( !aSpan.id ) {
			continue;
		}		
		if ( aSpan.id.indexOf('editStyle') == 0) {
			if ( 'hidden' == aSpan.style.visibility ) {
				if (Core.isIE()){
					//fragile
					var id = aSpan.id;
					var idNum = parseInt(id.substr(9)); //9 is length of editStyle
					idNum -= 1;
					var modPrefix = 'GL_modify';
					var modInput = document.getElementById(modPrefix + idNum);
					if (modInput){
						GL_editStyle({shiftKey:true}, aSpan, 'GL_nameStyle' + (idNum - 2), modPrefix + idNum);
						continue;
					}
					idNum -= 3;
					var modInput = document.getElementById(modPrefix + idNum);
					if (modInput){
						GL_editStyle({shiftKey:true}, aSpan, 'GL_valueStyle' + (idNum - 1), modPrefix + idNum);
						continue;
					}
					
				}
				else
					aSpan.onmousedown({shiftKey:true});
			}
		}
	}
}

function GL_updateHighlightSpan(sourceSpan) {
	if ( !gl_editStyleData ) {
		return;
	}
	var st = gl_editStyleData.styleType;
	
	var highlightBorderWidth = 1;
    var highlightSpan = gl_editStyleData.highlightSpan;   
    var top, left;
    if ( st.textarea ) { 
    	top = st.getTop();
    	left = st.getLeft();
    } else {
    	var pos = jQuery(sourceSpan).position();
	    top = pos.top;
    	left = pos.left;
    }
    var width = sourceSpan.offsetWidth;
    var height = sourceSpan.offsetHeight;
        
	var spanBorderWidth = GL_getBorderWidth(sourceSpan)
	
    if ( GL_isIE() ) {
    	top -= highlightBorderWidth;
    	left -=  highlightBorderWidth;
    	width += 2*highlightBorderWidth;
    	height += 2*highlightBorderWidth;    	
    } else {
    	top -= highlightBorderWidth;
    	left -=  highlightBorderWidth;
    	width = width;
    	height = height;
    }      
   
    highlightSpan.style.top = top + 'px';
    highlightSpan.style.left = left + 'px';
    highlightSpan.style.width = width + 'px';
    highlightSpan.style.height = height + 'px';    
    highlightSpan.style.borderWidth = highlightBorderWidth + 'px';    
    highlightSpan.editObjectId = sourceSpan.id;
    
    if ( gl_editStyleData.drawType == 'line' ) {          
       GL_setHandlerVisibility('GL_editStyleResizeEE', 'hidden');
       GL_setHandlerVisibility('GL_editStyleResizeWW', 'hidden'); 
       GL_setHandlerVisibility('GL_editStyleResizeSS', 'hidden');        
       GL_setHandlerVisibility('GL_editStyleResizeNN', 'hidden');
       GL_setHandlerVisibility('GL_editStyleResizeNE', 'hidden');        
       GL_setHandlerVisibility('GL_editStyleResizeSE', 'hidden');        
       GL_setHandlerVisibility('GL_editStyleResizeSW', 'hidden');        
       GL_setHandlerVisibility('GL_editStyleResizeNW', 'hidden');   
    } else {
       GL_setHandlerVisibility('GL_lineBeginHandle', 'hidden');
       GL_setHandlerVisibility('GL_lineMiddleHandle', 'hidden'); 
       GL_setHandlerVisibility('GL_lineEndHandle', 'hidden');  
  
	    GL_setHandlerVisibility('GL_editStyleResizeNN', 'visible');   
	    GL_setHandlerVisibility('GL_editStyleResizeNW', 'visible');     
	    GL_setHandlerVisibility('GL_editStyleResizeNE', 'visible');        
	    GL_setHandlerVisibility('GL_editStyleResizeSE', 'visible');        
	    GL_setHandlerVisibility('GL_editStyleResizeSW', 'visible');  
	    GL_setHandlerVisibility('GL_editStyleResizeSS', 'visible');     
	    if ( highlightSpan.offsetHeight < 50 ) {
	       GL_setHandlerVisibility('GL_editStyleResizeEE', 'hidden');
	       GL_setHandlerVisibility('GL_editStyleResizeWW', 'hidden');    
	    } else {
	       GL_setHandlerVisibility('GL_editStyleResizeEE', 'visible');
	       GL_setHandlerVisibility('GL_editStyleResizeWW', 'visible');   
	    }       
    }
    
    if ( gl_editStyleData.drawType == 'oval' ) {
    	highlightSpan.style.borderWidth = '2px'; 
    } else if ( gl_editStyleData.drawType == 'line' ) {
        highlightSpan.style.borderWidth = '0px'; 
    } else {
        highlightSpan.style.borderWidth = highlightBorderWidth + 'px';  
    }
}

function GL_drawLine(X2, Y2, color, size, space) {
    var X1 = 0;
    var Y1 = 0;
    var html = '';
    var DeltaX = Math.abs(X1-X2);
    var DeltaY = Math.abs(Y1-Y2);

    if (DeltaX >= DeltaY) {
        if (X2 < X1) {                               
            var X = X1; X1 = X2; X2 = X;
            var Y = Y1; Y1 = Y2; Y2 = Y;
        }
        var Error  = 2*DeltaY-DeltaX;
        var Delta1 = 2*(DeltaY-DeltaX);
        var Delta2 = 2*DeltaY;      
        var Offset = (Y2 > Y1 ? +1 : -1);
        for (var i = 0; i <= DeltaX; i++) {
            if ( (i % space) == 0 ) {
                html += GL_dot(X1,Y1, size, color);
            }
            if (Error > 0) {
                Y1 += Offset;
                Error += Delta1;                                 
            } else {
                Error += Delta2;                                         
            }
            X1++;
        }
    } else {
        if (Y2 < Y1) {                                     
            var X = X1; X1 = X2; X2 = X;
            var Y = Y1; Y1 = Y2; Y2 = Y;
        }
        var Error  = 2*DeltaX-DeltaY;
        var Delta1 = 2*(DeltaX-DeltaY);
        var Delta2 = 2*DeltaX;
        var Offset = (X2 > X1 ? +1 : -1);
        for (var i = 0; i <= DeltaY; i++) {
            if ( (i % space) == 0 ) {
                html += GL_dot(X1, Y1, size, color);                    
            }
            if (Error > 0) {
                X1 += Offset;
                Error += Delta1;                                  
            } else {
                Error += Delta2;                                           
            }
            Y1++;
        }
    }
    return html;
}


function GL_showLineHighlight() {
    gl_editStyleData.highlightSpan.style.visibility = 'visible';    
    
    var shift = 0;
    var width = GL_getDataItem(gl_editStyleData.span.id).drawLineWidth;
    var height = GL_getDataItem(gl_editStyleData.span.id).drawLineHeight;
        
    var beginHandle = GL_findDOMObjectById(gl_editStyleData.highlightSpan, 'img', 'GL_lineBeginHandle');
    beginHandle.style.visibility = 'visible';    
    beginHandle.style.left = (-1*shift) + 'px';         
    beginHandle.style.top = (-1*shift) + 'px';    
    
    var midHandle = GL_findDOMObjectById(gl_editStyleData.highlightSpan, 'img', 'GL_lineMiddleHandle');
    midHandle.style.visibility = 'visible';    
    midHandle.style.left = (width/2 - shift) + 'px';         
    midHandle.style.top = (height/2 - shift) + 'px';        
      
    var endHandle = GL_findDOMObjectById(gl_editStyleData.highlightSpan, 'img', 'GL_lineEndHandle');
    endHandle.style.visibility = 'visible';    
    endHandle.style.left = (width - shift) + 'px';         
    endHandle.style.top = (height - shift) + 'px';
}


function GL_onMouseDownDraw(evt) {
    var mainBody = findObject('GL_mainBody');
    if ( mainBody && evt.clientX > mainBody.offsetWidth -10) {
        return;
    }
    
    if ( !gl_editStyleData.span ) {
        var drawType = gl_editStyleData.drawType;
        var newSpan;
        if ( drawType == 'label' ) { 
             newSpan = GL_insertNewLabel(' ', true);
        } else {
             newSpan = GL_insertNewLabel(' ', false);
        }
        newSpan.style.left = (evt.clientX+document.body.scrollLeft)*1 + 'px';
        newSpan.style.top = (evt.clientY+document.body.scrollTop)*1 + 'px'; 
        newSpan.style.borderColor = '3366CC';
        newSpan.style.borderWidth = '2px';      
        if ( drawType == 'rectange' ) {         
            newSpan.style.width = '200px';
            newSpan.style.height = '40px';      
            newSpan.style.borderStyle = 'solid';
            GL_updateHighlightSpan(newSpan);
        } else if ( drawType == 'oval' ) {  
            newSpan.style.width = '150px';
            newSpan.style.height = '20px';          
            newSpan.innerHTML = GL_drawOval(document.body.scrollLeft, document.body.scrollTop, newSpan.offsetWidth,  newSpan.offsetHeight, 'red', 2);           
        } else if ( drawType == 'line' ) {  
            gl_drawLineInit = true;
            newSpan.style.width = '0px';
            newSpan.style.height = '0px';   
            GL_hideHighlightSpan();    
            GL_changeMainBodyCursor('crosshair');           
            cX = evt.clientX;
            cY = evt.clientY;                   
            gl_readyToMove = true;     
            var bw = newSpan.style.borderWidth;
            gl_editStyleData.borderWidth = bw.substring(0, bw.length-2) * 1;
        } else if ( drawType == 'curve' ) { 
            newSpan.style.width = '0px';
            newSpan.style.height = '0px';   
            GL_changeMainBodyCursor('crosshair');
            cX = evt.clientX;
            cY = evt.clientY;               
            gl_readyToMove = true;
        } else if ( drawType == 'label') {
        
        }
        gl_editStyleData.span = newSpan;
        gl_editStyleData.drawType = drawType;
    }
    GL_updateStyleParameter(gl_editStyleData);
}

function GL_editStyleDragStart(evt) {    
    gl_readyToMove = true;
    var evt = (evt) ? evt : ((window.event) ? event : null);
    gl_left = gl_editStyleData.highlightSpan.offsetLeft;
    gl_top = gl_editStyleData.highlightSpan.offsetTop; 
    gl_width = gl_editStyleData.highlightSpan.offsetWidth;
    gl_height = gl_editStyleData.highlightSpan.offsetHeight;  
    cX = evt.clientX;
    cY = evt.clientY;
    if (evt.preventDefault)
    	evt.preventDefault();
    else
    	return false;  
}

function GL_editStyleResize(evt, direction) {
    GL_resizeUpdate(evt, gl_editStyleData.highlightSpan.style, direction, true, true);
}

var _glMoveResizeDataM;
function GL_resizeUpdate(evt, style, direction, updateOriginal, updateDimension) {
    var evt = (evt) ? evt : ((window.event) ? event : null);
    var top = -1;
    var left = -1;
    var width = -1;
    var height = -1;
    var deltaX = evt.clientX - cX;
    var deltaY = evt.clientY - cY;
    if ( direction == 'se' ) {
        width = gl_width + deltaX; 
        height = gl_height + deltaY;                                     
    } else if ( direction == 'ss' ) {
        height = gl_height + deltaY; 
    } else if ( direction == 'nn' ) {
        top = gl_top + deltaY;
        height = gl_height - deltaY; 
    } else if ( direction == 'ne' ) {
        width = gl_width + deltaX;         
        top = gl_top + deltaY;
        height = gl_height - deltaY; 
    } else if ( direction == 'sw' ) {
        left = gl_left + deltaX;   
        width = gl_width - deltaX;      
        height = gl_height + deltaY; 
    }  else if ( direction == 'nw' ) {
        left = gl_left + deltaX;   
        width = gl_width - deltaX;      
        top = gl_top + deltaY;
        height = gl_height - deltaY; 
    } else if ( direction == 'ww' ) {
        left = gl_left + deltaX;   
        width = gl_width - deltaX; 
    }  else if ( direction == 'ee' ) {
        width = gl_width + deltaX; 
    }
    _glMoveResizeDataM = new Object();
    if ( updateOriginal ) {
        if ( top > 0 ) {
            style.top = top + 'px';   
            _glMoveResizeDataM.isTopChanged = true;                                  
        }
        if ( left > 0 ) {
            style.left = left + 'px';
           _glMoveResizeDataM.isLeftChanged = true;                                                 
        }
    }        
    if ( updateDimension ) {    
        if ( width > 0) {
            style.width = width + 'px';
           _glMoveResizeDataM.isWidthChanged = true;            
        }    
        if ( height > 0 ) {
            style.height = height + 'px';                                     
           _glMoveResizeDataM.isHeightChanged = true;            
        }
    }
}
function GL_copyHighligthToEdit(highlightSpan, sourceSpan) {
	var highlightBorderWidth = GL_getBorderWidth(highlightSpan);
	var spanBorderWidth = GL_getBorderWidth(gl_editStyleData.span);
	
	var st = gl_editStyleData.styleType;
	var pos = jQuery(highlightSpan).position();
    var top = pos.top;
    var left = pos.left;
    var width = highlightSpan.offsetWidth;
    var height = highlightSpan.offsetHeight;
	
    if ( GL_isIE() ) {
//    	top -= highlightBorderWidth;
//    	left -=  highlightBorderWidth;
//    	width -= 2*highlightBorderWidth;
//   	height -= 2*highlightBorderWidth;    	
    } else {
    	top += highlightBorderWidth;
    	left +=  highlightBorderWidth;
    	width = width - 2*spanBorderWidth - 2*highlightBorderWidth;
    	height = height - 2*spanBorderWidth - 2*highlightBorderWidth;
    }      
    if ( st.isEditable('top') ) {    
		if ( _glMoveResizeDataM.isTopChanged == true ) { 		
 			sourceSpan.style.top = top + 'px';
 		}
 	}
	if ( st.isEditable('left') ) { 	
		if ( _glMoveResizeDataM.isLeftChanged == true ) { 
			sourceSpan.style.left = left + 'px';
		}
	}
    if ( st.isEditable('width') ) {	
		if ( _glMoveResizeDataM.isWidthChanged == true ) { 
			st.sourceSpan = sourceSpan;
	 		st.updateWidth(width);
	 	}
	}
    if ( st.isEditable('height') ) {	
		if ( _glMoveResizeDataM.isHeightChanged == true ) { 
			st.sourceSpan = sourceSpan;
 			st.updateHeight(height);
 		}
 	}
}

function GL_editStyleDragEnd(evt, direction) {
   var evt = (evt) ? evt : ((window.event) ? event : null);
//   GL_resizeUpdate(evt, gl_editStyleData.span.style, direction, true, true);

	var sourceSpan = gl_editStyleData.span;
	var highlightSpan = gl_editStyleData.highlightSpan;   

	GL_copyHighligthToEdit(highlightSpan, sourceSpan);
 	
   GL_updateStyleParameter(gl_editStyleData, false);  
    
   gl_readyToMove = false;
}

function GL_lineDragStart(evt) {    
    gl_readyToMove = true;
    gl_drawLineInit = false;
    var evt = (evt) ? evt : ((window.event) ? event : null);
    gl_left = gl_editStyleData.highlightSpan.offsetLeft;
    gl_top = gl_editStyleData.highlightSpan.offsetTop; 
    gl_width = GL_getDataItem(gl_editStyleData.span.id).drawLineWidth * 1;
    gl_height = GL_getDataItem(gl_editStyleData.span.id).drawLineHeight * 1; 
    
    cX = evt.clientX;
    cY = evt.clientY;       
    GL_hideHighlightSpan();   
    GL_setHandlerVisibility('GL_lineBeginHandle', 'hidden');
    GL_setHandlerVisibility('GL_lineMiddleHandle', 'hidden'); 
    GL_setHandlerVisibility('GL_lineEndHandle', 'hidden');      
}

function GL_lineDragMove(evt) {
    var evt = (evt) ? evt : ((window.event) ? event : null);
    var deltaX = evt.clientX - cX;
    var deltaY = evt.clientY - cY;
    gl_editStyleData.span.style.left = (gl_left + deltaX) + 'px';
    gl_editStyleData.span.style.top = (gl_top + deltaY) + 'px';   
    
    var color =  GL_getBorderColor(gl_editStyleData.span); 
    gl_editStyleData.span.innerHTML = GL_drawLine(gl_width,  gl_height, color, 2, 5);    
}

function GL_lineDragMoveEnd(evt) {           
    GL_updateStyleParameter(gl_editStyleData);  
    GL_showLineHighlight(); 
    gl_readyToMove = false;
}

function GL_lineDragResizeBeginHandler(evt) {
    var deltaX = evt.clientX - cX;
    var deltaY = evt.clientY - cY;

    var newLeft = gl_left + deltaX;
    var newTop = gl_top + deltaY;
    
    gl_editStyleData.span.style.left = newLeft + 'px';
    gl_editStyleData.span.style.top = newTop + 'px';        

   var newWidth = gl_width - deltaX;
   var newHeight = gl_height - deltaY;    
    
    var color =  GL_getBorderColor(gl_editStyleData.span);
    gl_editStyleData.span.innerHTML = GL_drawLine(newWidth,  newHeight, color, 2, 5);
    GL_getDataItem(gl_editStyleData.span.id).drawLineWidth = newWidth;
    GL_getDataItem(gl_editStyleData.span.id).drawLineHeight = newHeight;  
}


function GL_lineDragResizeEndHandler(evt) {
    var newWidth = gl_width + evt.clientX - cX;
    var newHeight = gl_height + evt.clientY - cY;    
  
	var color =  GL_getBorderColor(gl_editStyleData.span);
    gl_editStyleData.span.innerHTML = GL_drawLine(newWidth,  newHeight, color, 2, 5);
    GL_getDataItem(gl_editStyleData.span.id).drawLineWidth = newWidth;
    GL_getDataItem(gl_editStyleData.span.id).drawLineHeight = newHeight;    
}

function GL_lineDragResizeEnd(evt, which) {
    GL_updateStyleParameter(gl_editStyleData);  
    GL_showLineHighlight(); 
    gl_readyToMove = false;
}



function GL_editStyleSwitchEdit(sourceSpan, type, styleParameterId, valueParameterId, modifyFlagParameterId) {
    var itemData = GL_getDataItem(sourceSpan.id);
    itemData.type = type;
    itemData.span = sourceSpan;    
    itemData.styleParameterId = styleParameterId;
    itemData.valueParameterId = valueParameterId;
    itemData.modifyFlagParameterId = modifyFlagParameterId;
    itemData.savedInnerHTML = sourceSpan.innerHTML;    
    var valueParameter = GL_findFormField(valueParameterId);
    itemData.value = valueParameter.value;
    if ( type == 'sequence' ) { //sequence
        sourceSpan.innerHTML = GL_getSpanInputTextArea(valueParameterId, itemData.value);     
    } else if (type == 'file' ) {  
    
    } else {
        sourceSpan.innerHTML = GL_getSpanInputText(valueParameterId, itemData.value, sourceSpan.offsetWidth); 
    }   
}


function GL_getBorderWidth(span) {
	var bw = span.style.borderWidth;	
	if ( !bw ) {
		return 0;
	}
    return bw.substring(0, bw.indexOf('px')) * 1;
}

function GL_getBorderColor(span) {
    var color =  span.style.borderColor;
    if ( !color ) {
    	return null;
    }
    if ( !GL_isIE()) {
	    var parIndex = color.indexOf(')');
	    if ( parIndex > -1 ) {
	    	color = color.substring(0, parIndex+1);
	    }
    }	
    return color;
}

function GL_setDragResizeDirection(direction) {
	if ( GL_isIE() ) {
		return;
    }
    gl_dragResizeDirection = direction;
}
function GL_setDragLineHandler(evt, whichHandler) {
	if ( GL_isIE() ) {
		return;
    }
	gl_dragLineHandler = whichHandler;
}

function GL_onMouseDownEditStyle(evt) {    
	if ( !evt ) {
		return;
	}

	var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
	var objectId = (node) ? node.id : null;
	if (node.selectIgnore)
		return true;
	if ( gl_isMultipleSelect ) {
		 if (node.tagName.toLowerCase() == 'option')
		 	return;
		 if ( !objectId ) {
//		 	if ( gl_msSelectCnt > 0 ) {
			 	GL_removeAllHighlighted();
			 	gl_isMultipleSelect = false;
			 	gl_msSelectCnt = 0;
//			} else {
//				gl_msSelectCnt++;
//			}
			return;				 				
		 }
		 if ( objectId.indexOf('editStyle') < 0 && objectId.indexOf('_pD_') < 0 ) {
		 	if (objectId.indexOf('toolbar') == -1 && objectId != 'gl_editStyleInputValue' ) {  
//			 	if ( gl_msSelectCnt > 0 ) {
				 	GL_removeAllHighlighted();
				 	gl_isMultipleSelect = false;
				 	gl_msSelectCnt = 0;
//				} else {
//					gl_msSelectCnt++;
//				}			
			 }
		 }		 
		 return;
	}
	
    if ( !gl_editStyleData ) {      
        return;
    }	
    
	if ( gl_dragResizeDirection ) {
	    GL_editStyleDragStart(evt);
	    return;
	}

	if ( gl_dragLineHandler ) {
		GL_lineDragStart(evt);
		return;
	}

	if ( gl_dragMSSelect ) {
		GL_msSelectMouseDown(evt);
		return;
	}
/*
    if ( gl_clickOnHighlight == true && gl_editStyleData ) {
        gl_readyToMove = false;
        gl_editStyleData = null;
        return;
    }
*/           
    if ( gl_editStyleData.span == null && gl_editStyleData.drawType) {
        GL_onMouseDownDraw(evt);
        return;
    }
    
    var objectId = (evt.target) ? evt.target.id : ((evt.srcElement) ? evt.srcElement.id : null);
    if (objectId && objectId.indexOf('GL_editStyleHighlighted') < 0 ) {
        if (objectId.indexOf('toolbar') == -1 && objectId != 'gl_editStyleInputValue' ) {  
            GL_saveUserInputData(gl_editStyleData.span);
        }
        return;
    }
           
    var highlightDiv = findObject('GL_editStyleHighlighted');   
    if ( highlightDiv.editObjectId == gl_editStyleData.span.id ) {
    	var pos = jQuery(gl_editStyleData).position();
        cX = evt.clientX - pos.left;
        cY = evt.clientY - pos.top;   
        GL_popupWidth = evt.clientX - gl_editStyleData.span.offsetWidth;
        GL_popupHeight = evt.clientY - gl_editStyleData.span.offsetHeight;
        GL_updateStyleParameter(gl_editStyleData);
        if ( 'GL_editStyleHighlighted' == objectId || gl_editStyleData.span.id == objectId) {
    		gl_clickOnHighlight = true;
    	}    
        
		gl_savePageScrollTop = document.body.scrollTop;
		gl_savePageScrollLeft = document.body.scrollLeft;
        
        
        gl_readyToMove = true;
        return;
    } else {        
        gl_readyToMove = false;     
        gl_editStyleData = null;
        return;
    }   
}


function GL_onMouseMoveEditStyle (evt) {
	if ( !evt ) {
		return;
	}
	
    if ( gl_dragResizeDirection ) {
		GL_editStyleResize(evt, gl_dragResizeDirection)
		return;
	}

	if ( gl_dragLineHandler ) {		
		if ( gl_dragLineHandler == 'move' ) {
			GL_lineDragMove(evt);
		} else if ( gl_dragLineHandler == 'begin' ) {
			GL_lineDragResizeBeginHandler(evt);
		} else if ( gl_dragLineHandler == 'end') {
			GL_lineDragResizeEndHandler(evt);
		}
		return;
	}
	
	if ( gl_dragMSSelect ) {
		GL_msSelectMouseMove(evt);
		return;
	}	

    if (gl_editStyleData && gl_readyToMove) {       
        gl_editStyleData.span.style.position = 'absolute';                  
        
        if ( gl_editStyleData.drawType == 'line' && gl_drawLineInit) {
            var width = evt.clientX - cX;
            var height = evt.clientY - cY;     
            
            var color =  GL_getBorderColor(gl_editStyleData.span);
            gl_editStyleData.span.innerHTML = GL_drawLine(width,  height, color, 2, 5);
            GL_getDataItem(gl_editStyleData.span.id).drawLineWidth = width;
            GL_getDataItem(gl_editStyleData.span.id).drawLineHeight = height; 
            if ( width > 0 && height > 0 ) {
                gl_editStyleData.highlightSpan.style.width = width + 'px';
                gl_editStyleData.highlightSpan.style.height = height + 'px';
            }
        } else {
        	if ( gl_clickOnHighlight ) {
	            gl_editStyleData.highlightSpan.style.left = evt.clientX - cX + 'px';
    	        gl_editStyleData.highlightSpan.style.top = evt.clientY - cY + 'px'; 
    	    }
        }
    }
}
function GL_onMouseUpEditStyle(evt) {
	if ( !evt ) {
		return;
	}

	if ( gl_dragResizeDirection ) {
		GL_editStyleDragEnd(evt, gl_dragResizeDirection);
		gl_dragResizeDirection = null;
		return;
	}

	if ( gl_dragLineHandler ) {		
		if ( gl_dragLineHandler == 'move' ) {
			GL_lineDragMoveEnd(evt);
		} else  {
			GL_lineDragResizeEnd(evt, gl_dragLineHandler);
		}
		gl_dragLineHandler = null;
		return;
	}

	if ( gl_dragMSSelect ) {
		GL_msSelectMouseUp(evt);
		return;
	}

    if (!gl_editStyleData) {    
        return;
    }
    if ( gl_readyToMove ) {         
        if ( gl_editStyleData.drawType == 'line' ) {
            if ( gl_drawLineInit ) {
                GL_showLineHighlight(); 
                GL_updateStyleParameter(gl_editStyleData);                                                                     
            }
        } else {        
        	if ( gl_clickOnHighlight ) {                     	    
	            gl_editStyleData.span.style.left = evt.clientX - cX + 'px';
	            gl_editStyleData.span.style.top = evt.clientY - cY + 'px';                          
	            GL_updateStyleParameter(gl_editStyleData);  
	        }            
        }
    }       
    if ( gl_editStyleData.drawType ) {
        GL_changeMainBodyCursor('auto');    
    }
    
	gl_clickOnHighlight = false;                    
    gl_readyToMove = false;
    gl_drawLineInit = false;
    return false;
}

function StyleType() {
	this.sourceSpan;
	
	this.isEditable = function(name) {
		return true;
	}
	this.getVersion = function() {
		return '';
	}
	this.updateWidth = function(width) {
		this.setWidth(this.sourceSpan, width);
	}
	this.updateHeight = function(height) {
		this.setHeight(this.sourceSpan, height);
	}	
	this.setWidth = function(dom, w) {
		if ( w < 1 ) {
			return;
		}
		
		var width = w;
		if (typeof(w) == 'number')
			width = w + 'px';
		dom.style.width = width;
	}
	this.setHeight = function(dom, h) {
		if ( h < 1 ) {
			return;
		}
		var height = h;
		if (typeof(h) == 'number')
			height = h + 'px';
		dom.style.height = height;
	}	
	this.getTop = function() {
		return jQuery(this.sourceSpan).intPosition().top;
	}
	this.getLeft = function() {
		return jQuery(this.sourceSpan).intPosition().left;
	}
	
	this.getWidth = function() {
		return this.sourceSpan.offsetWidth;
	}
	this.getHeight = function() {
		return this.sourceSpan.offsetHeight;
	}
}
function StyleTypeTextField() {
	this.styleType = StyleType;
	this.styleType();
	
	this.input;
	var _editable = 'top:left:width:';
	this.isEditable = function(name) {
		if ( _editable.indexOf(name+':') > -1 ) {			
			return true;
		}
		return false;
	}
	this.getVersion = function() {
		return 'glv:1;';
	}
	this.updateWidth = function(width) {
		var parWidth = this.input.parentNode.offsetWidth;
		var dif = width - parWidth;
		
		var val = this.input.offsetWidth + dif;
		if (isNaN(val)){
			val = width;
		}

		this.setWidth(this.sourceSpan, width);
		this.setWidth(this.input, val);
	}
	
	this.updateHeight = function(){
	}
	
	this.getWidth = function(){
		return this.input.offsetWidth;
	}
	this.getHeight = function(){
		return this.input.offsetHeight;
	}

	this.getCssWidth = function(){
		return this.input.style.width;
	}
	this.getCssHeight = function(){
		return this.input.style.height;
	}
}
function StyleTypeTextArea() {
	this.styleType = StyleType;
	this.styleType();
	
	this.textarea;
	
	var _editable = 'top:left:width:height:';
	this.isEditable = function(name) {
		if ( _editable.indexOf(name+':') > -1 ) {			
			return true;
		}
		return false;
	}
	this.getVersion = function() {
		return 'glv:1;';
	}	
	this.updateWidth = function(width) {
		var parWidth = this.textarea.parentNode.offsetWidth;
		var dif = width - parWidth;

		var val = this.textarea.offsetWidth + dif;
		if (isNaN(val)){
			val = width;
		}
		
		this.setWidth(this.sourceSpan, val);
		this.setWidth(this.textarea, val);
	}
	this.updateHeight = function(height) {
		this.setHeight(this.sourceSpan, height);
		this.setHeight(this.textarea, height);
	}
	this.getTop = function() {
		return $(this.textarea.parentNode.parentNode).intPosition().top;
	}
	this.getLeft = function() {
		return $(this.textarea.parentNode.parentNode).intPosition().left;
	}		
	this.getWidth = function(){
		return this.textarea.offsetWidth;
	}
	this.getHeight = function(){
		return this.textarea.offsetHeight;
	}
	this.getCssWidth = function(){
		return this.textarea.style.width;
	}
	this.getCssHeight = function(){
		return this.textarea.style.height;
	}
}

function GL_editStyleSavePrompt(event){
	if (!GL_updateStyleParameter.styleUpdated)
		return;
	var link = Core.getNode(event);
	if (!GL_editStyleSavePrompt.dialogContainer){
		GL_editStyleSavePrompt.dialogContainer = Core.addNode(document.body, 'div');
		GL_editStyleSavePrompt.dialogContainer.style.width = document.body.scrollWidth + 'px';
		GL_editStyleSavePrompt.dialogContainer.style.height = document.body.scrollHeight + 'px';
		GL_editStyleSavePrompt.dialogContainer.style.zIndex = 10000000;
		Core.setClassName(GL_editStyleSavePrompt.dialogContainer, 'dialogContainerDiv');
	}
	GL_editStyleSavePrompt.dialogContainer.style.display = '';
	var conf = new DialogYesNoCancel(GL_editStyleSavePrompt.dialogContainer, 'Save Changes',
		'Do you want to save your layout changes?', window, 'GL_saveEditAndReturnToTrans');
	conf.setNoButtonCallback(window, 'GL_dontSaveEditStyle');
	conf.setCancelButtonCallback(window, 'GL_cancelEditStyleClose');
	conf.isMovable = false;
	conf.isTransparentPadding = true;
	conf.addPaddingToDomParent = true;
	conf.returnToTransUrl = link.href;
	conf.open();
	return Core.preventDefault(event);
}

function GL_saveEditAndReturnToTrans(){
	GL_resetAction('transactionForm', 'saveStyleEndEdit');
	document.transactionForm.submit();
}

function GL_dontSaveEditStyle(dialog){
	window.location = dialog.returnToTransUrl;
}

function GL_cancelEditStyleClose(){
	GL_editStyleSavePrompt.dialogContainer.style.display = 'none';
	return false;
}