resource improvements
diff --git a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslation.java b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslation.java
index c829e31..fc003b5 100644
--- a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslation.java
+++ b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslation.java
@@ -15,8 +15,10 @@
 import java.util.Vector;
 
 import org.eclipse.core.filebuffers.FileBuffers;
+import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceChangeEvent;
 import org.eclipse.core.resources.IResourceChangeListener;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -84,14 +86,24 @@
 		mangledName = createMangledName();	
 	}	
 	
+	public JsTranslation(IStructuredDocument htmlDocument, IJavaProject javaProj, boolean listenForChanges) {
+		fLock = new byte[0];
+		fJavaProject = javaProj;
+		fHtmlDocument = htmlDocument;
+		setBaseLocation();
+		translator = new JsTranslator(htmlDocument, fModelBaseLocation,listenForChanges);
+		mangledName = createMangledName();	
+	}
+	
 	public IJavaProject getJavaProject() {
 		return fJavaProject;
 	}
 
 	private IPackageFragmentRoot getDocScope(boolean reset) {
 		if(fDocumentScope==null) {
-			fDocumentScope = new DocumentContextFragmentRoot(fJavaProject, getFile(), WebRootFinder.getWebContentFolder(fJavaProject.getProject()), WebRootFinder.getServerContextRoot(fJavaProject.getProject()), JsWebNature.VIRTUAL_SCOPE_ENTRY);
-			fDocumentScope.setIncludedFiles(translator.getRawImports());
+			IProject project = getJavaProject().getProject();
+			IResource absoluteRoot = ((IContainer)getJavaProject().getResource()).findMember( WebRootFinder.getWebContentFolder(fJavaProject.getProject()));
+			fDocumentScope = new DocumentContextFragmentRoot(fJavaProject, getFile(), WebRootFinder.getWebContentFolder(fJavaProject.getProject()), WebRootFinder.getServerContextRoot(fJavaProject.getProject()), JsWebNature.VIRTUAL_SCOPE_ENTRY);			fDocumentScope.setIncludedFiles(translator.getRawImports());
 			return fDocumentScope;
 		}
 		
@@ -130,6 +142,13 @@
 		return 	WebRootFinder.getWebContentFolder(fJavaProject.getProject()).toString();
 	}
 	
+	public String getDirectoryUnderRoot() {
+		String webRoot = getWebRoot() ;
+		IPath projectWebRootPath = getJavaProject().getPath().append(webRoot);
+		IPath filePath = new Path(fModelBaseLocation).removeLastSegments(1);
+		return filePath.removeFirstSegments(projectWebRootPath.matchingFirstSegments(filePath)).toString();
+	}
+	
 	/**
 	 * Originally from ReconcileStepForJava. Creates an ICompilationUnit from
 	 * the contents of the JSP document.
@@ -139,9 +158,10 @@
 	private ICompilationUnit createCompilationUnit() throws JavaModelException {
 		//System.out.println("------------------------- CREATING CU ----------------------------");
 		LibrarySuperType superType = new LibrarySuperType(SUPER_TYPE_LIBRARY, fJavaProject, SUPER_TYPE_NAME);
-		String webRoot = getWebRoot() ;
+		
 		IPackageFragmentRoot root = getDocScope(true);
-		ICompilationUnit cu = root.getPackageFragment(webRoot).getCompilationUnit(getMangledName() + JsDataTypes.BASE_FILE_EXTENSION).getWorkingCopy(getWorkingCopyOwner(), getProblemRequestor(), getProgressMonitor());
+		//String directoryUnderWebroot = getDirectoryUnderRoot();
+		ICompilationUnit cu = root.getPackageFragment("").getCompilationUnit(getMangledName() + JsDataTypes.BASE_FILE_EXTENSION).getWorkingCopy(getWorkingCopyOwner(), getProblemRequestor(), getProgressMonitor());
 		//ICompilationUnit cu = fDocumentScope.getDefaultPackageFragment().getCompilationUnit(getMangledName() + JsDataTypes.BASE_FILE_EXTENSION,SUPER_TYPE_NAME).getWorkingCopy(getWorkingCopyOwner(), getProblemRequestor(), getProgressMonitor());
 		
 		IBuffer buffer;
@@ -252,9 +272,13 @@
 	}
 	
 	public String getJavaPath() {
-		String webRoot = getWebRoot() ;
-		IPackageFragmentRoot root = getDocScope(false);
-		String cuPath = root.getPath().append("/" + webRoot).append("/" + getMangledName() + JsDataTypes.BASE_FILE_EXTENSION ).toString();
+		//String webRoot = getWebRoot() ;
+		//IPackageFragmentRoot root = getDocScope(false);
+		//String cuPath = root.getPath().append("/" + getMangledName() + JsDataTypes.BASE_FILE_EXTENSION ).toString();
+		//ICompilationUnit cu = getCompilationUnit();
+		//IPath realCuPath = cu.getPath();
+		IPath rootPath = new Path(fModelBaseLocation).removeLastSegments(1);
+		String cuPath = rootPath.append("/" + getMangledName() + JsDataTypes.BASE_FILE_EXTENSION ).toString();
 		return cuPath;
 	}
 	
diff --git a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapter.java b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapter.java
index 74b7ebd..cbb2e29 100644
--- a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapter.java
+++ b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapter.java
@@ -48,6 +48,8 @@
 		
 		if(listenForProjectChanges) {
 			ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
+		}else {
+			fJSPTranslation = new JsTranslation(fHtmlDocument, getJavaProject(), listenForProjectChanges);
 		}
 	}
 	
diff --git a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapterFactory.java b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapterFactory.java
index b05fa06..5b178d5 100644
--- a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapterFactory.java
+++ b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapterFactory.java
@@ -41,7 +41,7 @@
 	
 	public JsTranslationAdapterFactory(boolean listenForProjectChanges) {
 		super(IJsTranslation.class, true);
-		listenForProjectChanges = listenForProjectChanges;
+		this.listenForProjectChanges = listenForProjectChanges;
 	}
 	public INodeAdapterFactory copy() {
 		return new JsTranslationAdapterFactory(listenForProjectChanges);
diff --git a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslator.java b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslator.java
index 49271d0..49b6d53 100644
--- a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslator.java
+++ b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslator.java
@@ -69,6 +69,7 @@
 	private int missingEndTagRegionStart = -1;
 	
 	
+	
 	private void advanceNextNode() {
 		setCurrentNode(getCurrentNode().getNext());
 	}
@@ -76,6 +77,7 @@
 	public JsTranslator(IStructuredDocument document, 	String fileName) {
 		super("JavaScript translation for : "  + fileName);
 		fStructuredDocument = document;
+		
 		fStructuredDocument.addDocumentListener(this);
 		setPriority(Job.LONG);
 		setSystem(true);
@@ -83,6 +85,18 @@
 		reset();
 	}
 		
+	public JsTranslator(IStructuredDocument document, 	String fileName, boolean listenForChanges) {
+		super("JavaScript translation for : "  + fileName);
+		fStructuredDocument = document;
+		if(listenForChanges) {
+			fStructuredDocument.addDocumentListener(this);
+			setPriority(Job.LONG);
+			setSystem(true);
+			schedule();
+		}
+		reset();
+	}
+	
 	public String getJsText() {
 		synchronized(finished) {
 			return fScriptText.toString();
@@ -212,8 +226,7 @@
 	}
 	
 	private void finishedTranslation() {
-		System.out.println("Updating CU Buffer..");
-		
+			
 		if(compUnitBuff!=null) compUnitBuff.setContents(fScriptText.toString());
 	}
 	
diff --git a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/search/JsSearchDocument.java b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/search/JsSearchDocument.java
index 0096beb..35e1afb 100644
--- a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/search/JsSearchDocument.java
+++ b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/search/JsSearchDocument.java
@@ -130,7 +130,7 @@
 			// handle unsupported
 			if (model instanceof IDOMModel) {
 				IDOMModel xmlModel = (IDOMModel) model;
-				JsTranslationAdapterFactory factory = new JsTranslationAdapterFactory();
+				JsTranslationAdapterFactory factory = new JsTranslationAdapterFactory(false);
 				xmlModel.getFactoryRegistry().addFactory(factory);
 				IDOMDocument doc = xmlModel.getDocument();
 				JsTranslationAdapter adapter = (JsTranslationAdapter) doc.getAdapterFor(IJsTranslation.class);
diff --git a/bundles/org.eclipse.wst.jsdt.web.ui/src/org/eclipse/wst/jsdt/web/ui/internal/hyperlink/JSDTHyperlinkDetector.java b/bundles/org.eclipse.wst.jsdt.web.ui/src/org/eclipse/wst/jsdt/web/ui/internal/hyperlink/JSDTHyperlinkDetector.java
index 7100e60..914756c 100644
--- a/bundles/org.eclipse.wst.jsdt.web.ui/src/org/eclipse/wst/jsdt/web/ui/internal/hyperlink/JSDTHyperlinkDetector.java
+++ b/bundles/org.eclipse.wst.jsdt.web.ui/src/org/eclipse/wst/jsdt/web/ui/internal/hyperlink/JSDTHyperlinkDetector.java
@@ -23,6 +23,7 @@
 import org.eclipse.wst.jsdt.core.ISourceRange;
 import org.eclipse.wst.jsdt.core.ISourceReference;
 import org.eclipse.wst.jsdt.core.JavaModelException;
+import org.eclipse.wst.jsdt.internal.core.JavaElement;
 import org.eclipse.wst.jsdt.web.core.internal.java.IJsTranslation;
 import org.eclipse.wst.jsdt.web.core.internal.java.JsTranslation;
 import org.eclipse.wst.jsdt.web.core.internal.java.JsTranslationAdapter;
@@ -73,7 +74,7 @@
 							ICompilationUnit myUnit = jspTranslation.getCompilationUnit();
 							
 							while(!(unit instanceof ICompilationUnit || unit instanceof IClassFile || unit==null)) {
-								unit = ((ILocalVariable) element).getParent();
+								unit = ((JavaElement) unit).getParent();
 							}
 							if(unit instanceof ICompilationUnit) {
 								ICompilationUnit cu = (ICompilationUnit)unit;