updated for version 7.0150
diff --git a/runtime/autoload/htmlcomplete.vim b/runtime/autoload/htmlcomplete.vim
index ab50952..9dd5830 100644
--- a/runtime/autoload/htmlcomplete.vim
+++ b/runtime/autoload/htmlcomplete.vim
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:	XHTML 1.0 Strict
 " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change:	2005 Sep 19
+" Last Change:	2005 Sep 23
 
 function! htmlcomplete#CompleteTags(findstart, base)
   if a:findstart
@@ -66,8 +66,13 @@
 		" it possible?
 		" Also retrieving class names from current file and linked
 		" stylesheets.
-		if a:base =~ "\\(on[a-z]*\\|style\\|class\\)\\s*=\\s*[\"']"
-			if a:base =~ "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
+		if a:base =~ "\\(on[a-z]*\\|id\\|style\\|class\\)\\s*=\\s*[\"']"
+			if a:base =~ "\\(id\\|class\\)\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
+				if a:base =~ "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
+					let search_for = "class"
+				elseif a:base =~ "id\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
+					let search_for = "id"
+				endif
 				" Handle class name completion
 				" 1. Find lines of <link stylesheet>
 				" 1a. Check file for @import
@@ -76,9 +81,22 @@
 				let head = getline(search('<head\>'), search('<\/head>'))
 				let headjoined = join(copy(head), ' ')
 				if headjoined =~ '<style'
-					let stylehead = substitute(headjoined, '+>\*[', ' ', 'g')
-					let styleheadlines = split(stylehead)
-					let headclasslines = filter(copy(styleheadlines), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
+					let stylehead = substitute(headjoined, '+>\*[,', ' ', 'g')
+					if search_for == 'class'
+						let styleheadlines = split(stylehead)
+						let headclasslines = filter(copy(styleheadlines), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
+					else
+						let stylesheet = split(headjoined, '[{}]')
+						" Get all lines which fit id syntax
+						let classlines = filter(copy(stylesheet), "v:val =~ '#[a-zA-Z0-9_-]\\+'")
+						" Filter out possible color definitions
+						call filter(classlines, "v:val !~ ':\\s*#[a-zA-Z0-9_-]\\+'")
+						" Filter out complex border definitions
+						call filter(classlines, "v:val !~ '\\(none\\|hidden\\|dotted\\|dashed\\|solid\\|double\\|groove\\|ridge\\|inset\\|outset\\)\\s*#[a-zA-Z0-9_-]\\+'")
+						let templines = join(classlines, ' ')
+						let headclasslines = split(templines)
+						call filter(headclasslines, "v:val =~ '#[a-zA-Z0-9_-]\\+'")
+					endif
 					let internal = 1
 				else
 					let internal = 0
@@ -93,13 +111,15 @@
 						let styletable += [matchstr(line, "href\\s*=\\s*[\"']\\zs\\f\\+\\ze")]
 					endif
 				endfor
-				for file in filestable
+				for file in styletable
 					if filereadable(file)
 						let stylesheet = readfile(file)
 						let secimport = filter(copy(stylesheet), "v:val =~ '@import'")
 						if len(secimport) > 0
 							for line in secimport
-								let secimportfiles += [matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")]
+								let secfile = matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")
+								let secfile = fnamemodify(file, ":p:h").'/'.secfile
+								let secimportfiles += [secfile]
 							endfor
 						endif
 					endif
@@ -109,10 +129,24 @@
 				for file in cssfiles
 					if filereadable(file)
 						let stylesheet = readfile(file)
-						let stylefile = join(stylesheet)
-						let stylefile = substitute(stylefile, '+>\*[', ' ', 'g')
-						let stylesheet = split(stylefile)
-						let classlines = filter(copy(stylesheet), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
+						let stylefile = join(stylesheet, ' ')
+						let stylefile = substitute(stylefile, '+>\*[,', ' ', 'g')
+						if search_for == 'class'
+							let stylesheet = split(stylefile)
+							let classlines = filter(copy(stylesheet), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
+						else
+							let stylesheet = split(stylefile, '[{}]')
+							" Get all lines which fit id syntax
+							let classlines = filter(copy(stylesheet), "v:val =~ '#[a-zA-Z0-9_-]\\+'")
+							" Filter out possible color definitions
+							call filter(classlines, "v:val !~ ':\\s*#[a-zA-Z0-9_-]\\+'")
+							" Filter out complex border definitions
+							call filter(classlines, "v:val !~ '\\(none\\|hidden\\|dotted\\|dashed\\|solid\\|double\\|groove\\|ridge\\|inset\\|outset\\)\\s*#[a-zA-Z0-9_-]\\+'")
+							let templines = join(classlines, ' ')
+							let stylelines = split(templines)
+							let classlines = filter(stylelines, "v:val =~ '#[a-zA-Z0-9_-]\\+'")
+
+						endif
 					endif
 					" We gathered classes definitions from all external files
 					let classes += classlines
@@ -120,43 +154,71 @@
 				if internal == 1
 					let classes += headclasslines
 				endif
-				let elements = {}
-				for element in classes
-					if element =~ '^\.'
-						let class = matchstr(element, '^\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
-						let class = substitute(class, ':.*', '', '')
-						if has_key(elements, "common")
-							let elements["common"] .= " ".class
-						else
-							let elements["common"] = class
-						endif
-					else
-						let class = matchstr(element, '[a-zA-Z1-6]*\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
-						let tagname = tolower(matchstr(element, '[a-zA-Z1-6]*\ze.'))
-						if tagname != ''
-							if has_key(elements, tagname)
-								let elements[tagname] .= " ".class
+
+				if search_for == 'class'
+					let elements = {}
+					for element in classes
+						if element =~ '^\.'
+							let class = matchstr(element, '^\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
+							let class = substitute(class, ':.*', '', '')
+							if has_key(elements, 'common')
+								let elements['common'] .= ' '.class
 							else
-								let elements[tagname] = class
+								let elements['common'] = class
+							endif
+						else
+							let class = matchstr(element, '[a-zA-Z1-6]*\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
+							let tagname = tolower(matchstr(element, '[a-zA-Z1-6]*\ze.'))
+							if tagname != ''
+								if has_key(elements, tagname)
+									let elements[tagname] .= ' '.class
+								else
+									let elements[tagname] = class
+								endif
 							endif
 						endif
-					endif
-				endfor
+					endfor
 
-				if has_key(elements, tag) && has_key(elements, "common")
-					let values = split(elements[tag]." ".elements["common"])
-				elseif has_key(elements, tag) && !has_key(elements, "common")
-					let values = split(elements[tag])
-				elseif !has_key(elements, tag) && has_key(elements, "common")
-					let values = split(elements["common"])
-				else
-					return []
+					if has_key(elements, tag) && has_key(elements, 'common')
+						let values = split(elements[tag]." ".elements['common'])
+					elseif has_key(elements, tag) && !has_key(elements, 'common')
+						let values = split(elements[tag])
+					elseif !has_key(elements, tag) && has_key(elements, 'common')
+						let values = split(elements['common'])
+					else
+						return []
+					endif
+
+				elseif search_for == 'id'
+					" Find used IDs
+					" 1. Catch whole file
+					let filelines = getline(1, line('$'))
+					" 2. Find lines with possible id
+					let used_id_lines = filter(filelines, 'v:val =~ "id\\s*=\\s*[\"''][a-zA-Z0-9_-]\\+"')
+					" 3a. Join all filtered lines 
+					let id_string = join(used_id_lines, ' ')
+					" 3b. And split them to be sure each id is in separate item
+					let id_list = split(id_string, 'id\s*=\s*')
+					" 4. Extract id values
+					let used_id = map(id_list, 'matchstr(v:val, "[\"'']\\zs[a-zA-Z0-9_-]\\+\\ze")')
+					let joined_used_id = ','.join(used_id, ',').','
+
+					let allvalues = map(classes, 'matchstr(v:val, ".*#\\zs[a-zA-Z0-9_-]\\+")')
+
+					let values = []
+
+					for element in classes
+						if joined_used_id !~ ','.element.','
+							let values += [element]
+						endif
+
+					endfor
+
 				endif
 
 				" We need special version of sbase
 				let classbase = matchstr(a:base, ".*[\"']")
-			    let classquote = matchstr(classbase, '.$')
-
+				let classquote = matchstr(classbase, '.$')
 
 				let entered_class = matchstr(attr, ".*=\\s*[\"']\\zs.*")
 
@@ -229,6 +291,10 @@
 					let values = ["text", "password", "checkbox", "radio", "submit", "reset", "file", "hidden", "image", "button"]
 				elseif a:base =~ '^button'
 					let values = ["button", "submit", "reset"]
+				elseif a:base =~ '^style'
+					let values = ["text/css"]
+				elseif a:base =~ '^script'
+					let values = ["text/javascript"]
 				endif
 			else
 				return []
@@ -313,11 +379,11 @@
 		elseif tag == 'q'
 			let attrs = coreattrs + ["cite"]
 		elseif tag == 'script'
-			let attrs = ["id", "charset", "type", "src", "defer", "xml:space"]
+			let attrs = ["id", "charset", "type=\"text/javascript\"", "type", "src", "defer", "xml:space"]
 		elseif tag == 'select'
 			let attrs = coreattrs + ["name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange"]
 		elseif tag == 'style'
-			let attrs = coreattrs + ["id", "type", "media", "title", "xml:space"]
+			let attrs = coreattrs + ["id", "type=\"text/css\"", "type", "media", "title", "xml:space"]
 		elseif tag == 'table'
 			let attrs = coreattrs + ["summary", "width", "border", "frame", "rules", "cellspacing", "cellpadding"]
 		elseif tag =~ '^\(thead\|tfoot\|tbody\|tr\)$'