Nie będę pisał szerzej o fakcie, że we wklejonym przez Ciebie kodzie brakuje drugiej klamry za else (zamykającej blok funkcji) i nie ma w HTML-u elementu #gdansk, bo rozumiem, że w Twojej wersji to jest OK i problemy te pojawiły się przy przeklejaniu kodu.
To robisz źle, że this wewnątrz funkcji nie wskazuje Ci na obrazek. Gdybyś dołączał funkcję obsługi zdarzenia w inny sposób, niż (przestarzały) atrybut onClick umieszczony w kodzie, to miałbyś z tym mniej problemów. A tak... w onClick masz po prostu zwykły kod JavaScript. Kod ten tworzy jakby blok, w którym this związane jest rzeczywiście z elementem, który wyzwolił zdarzenie -- czyli z obrazkiem.
Niestety, z powodu błędu w specyfikacji JavaScriptu to "this" nie jest zanoszone do wnętrza funkcji wywoływanej w tym bloku (to, na co wskazuje this, nazywamy "kontekstem funkcji", lub po prostu "kontekstem"). Funkcja nie dziedziczy automatycznie kontekstu z bloku kodu, w którym została wywołana. Czyli wewnątrz onclick this wskazuje na obrazek, ale wewnątrz odpalanej tam funkcji już nie. Tam wskazuje tak naprawdę na obiekt globalny, czyli window. Pisząc "this.src = 'abc'" piszesz więc jakby "window.src = 'abc'". Nie to, co chciałeś.
Problem z kontekstem możesz jednak rozwiązać ręcznie. Zauważ, że wewnątrz onclick -- tam, gdzie kontekst jest jeszcze poprawny -- przekazujesz funkcji show parametr. Przekazujesz wartość 'gdansk', a funkcja odbiera go jako argument formalny o nazwie id. W ten sam sposób możesz przekazać kontekst.
W definicji funkcji dodaj drugi argument formalny. Nazwij go np. source, czyli źródło [źródło zdarzenia; element, który wyzwolił zdarzenie]. Za chwilę zadbamy, by argument ten otrzymał referencję do naszego obrazka, więc zamień wszystkie this wewnątrz funkcji na source. Jak już załatwiłeś deklarację funkcji, to teraz wystarczy w onClick przekazać jej ten drugi argument. Przekaż jej oczywiście po prostu this (bez żadnych apostrofów itp.). this to referencja do obrazka, którą funkcja zna wewnątrz siebie pod nazwą source.
Jest jeszcze drugie rozwiązanie. Krótsze i wymagające mniej zmian, ale ono jest dla zaawansowanych. Ponieważ Ty jeszcze nie formatujesz nawet poprawnie kodu i nie robisz ładnych wcięć, musisz jeszcze trochę dorosnąć, zanim będziesz mógł tego używać :P (tak, to jest wjazd na ambicje! formatuj kod! każdy kod chce być piękny -- Twój też!).
Kontekstem w JavaScripcie można sterować. By to jednak skumać, powinieneś już znać się na dziedziczeniu prototypowym i w ogóle obiektowym modelu zastosowanym w JavaScripcie, także przyjdzie na to czas. Nadmienię tylko, że zamiast wywołania w onClick show('gdansk'), trzeba by użyć show.call(this, 'gdansk'). Wtedy kontekst wewnątrz show byłby ustawiony poprawnie i wszystko by Ci śmigało. Na razie masz jednak do dyspozycji prostsze rozwiązania (prostsze do zrozumienia, bo głupio używać kodu, którego się nie rozumie!).
I co, pomogło? Sytuacja opanowana?
PS. Tak w ogóle to problem kontekstu jest znany i nie lubiany przez rzesze koderów JS na świecie. Mnóstwo szczególnie profesjonalnych programistów ma z tym kłopoty. Także każda chwila poświęcona na zrozumienie tego problemu nie jest chwilą straconą.