var click = 1;

var Fosta = {
	URL : {
		encode : function(str) {
			var regexp = /%20/g;
		    return encodeURIComponent(str).replace(regexp, "+");
		},
		decode : function(str) {
			return decodeURIComponent(str);
		}
	},
	Navi : function(page, pages, box, pageName) {

		this.pageName = pageName;	
		this.boxName = box;
		this.page = page;
		this.pages = pages;
	
		this.create = function() {
			var html = '<div class="navi" style="text-align:center;overflow:hidden;">';
			html += '<span style="float:right;width:130px;height:40px;">';
			if (this.page < this.pages) {
				html += '<a onclick="'+this.boxName+'.toPage('+(this.page+1)+');return false;" href="">nastepna strona &raquo;</a>';
			}
			html += '</span><span style="float:left;width:130px;height:40px;">';
			if (this.page > 1) {
				html += '<a onclick="'+this.boxName+'.toPage('+(this.page-1)+');return false;" href="">&laquo; poprzednia strona</a>';
			}
			html += '</span>';
			for (var i=0; i<this.pages; i++) {
				if (i + 1 != this.page) {
					$('#' + this.pageName + (i+1)).hide();
					html += '<a href="" onclick="'+this.boxName+'.toPage('+(i+1)+');return false;">' + (i + 1) + '</a>';
				} else {
					html += '<strong>' + (i + 1) + '</strong>';
				}
			}		
		
			html += '</div>';
				
			$('#'+this.boxName).html(html);
		}
	
		this.toPage = function(page) {
			$('#' + this.pageName + this.page).hide();
			$('#' + this.pageName + page).show();
			this.page = page;
			this.create();
		}
	},
	Cookie : {
		set : function(c_name,value,expiredays) {
			var exdate=new Date();
			exdate.setDate(exdate.getDate()+expiredays);
			document.cookie = c_name + "=" + encodeURIComponent(value) +
			((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
		},
		get : function(c_name) {
			if (document.cookie.length>0) {
				c_start=document.cookie.indexOf(c_name + "=");
				if (c_start!=-1) {
					c_start=c_start + c_name.length+1;
					c_end=document.cookie.indexOf(";",c_start);
					
					if (c_end == -1) {
						c_end = document.cookie.length;
					}
					
					return decodeURIComponent(document.cookie.substring(c_start,c_end));
				} else {
					return null;
				}
			}  
			return -1;
		}
	},
	VerticalSlider : function(defaultId,height) {
		this.id = defaultId;
		this.height = height;
		$('#' + defaultId).height("auto");
		this.isMove = false;
		
		this.swap = function(id) {
			
			if (this.isMove) {
				return;
			}
			
			this.isMove = true;
			
			$('#'+this.id).animate({
				height: this.height
			}, 500, function() {
				pageslider.isMove = false;
				pageslider.id = id;
		 	});
			
			$('#' + id).height("auto");
			var hh = $('#' + id).height();
			$('#' + id).height(this.height);
			
			$('#' + id).animate({
				height: hh
			}, 500, function() {
				
		 	});
		}
	},
	SHL : function(tabs, num) {
		this.id  = tabs[num];	
	
		for (var i=0;i<tabs.length;i++) {
			$('#'+tabs[i]).hide();
		}
	
		$('#'+this.id).show();
	
		this.swap = function (id) {
			$('#'+this.id).hide();
			$('#'+id).show();
			this.id = id;
		};
	},
	Flash : { 
		version : -1,
		minor :  -1,
		release: -1,
		embed : function(width,height,file,flashvars) {	
		
			var html = '<object '+
				'classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" '+
				'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" ' + 
				'width="'+width+'" height="'+height+'">'+
				'<param name="movie" value="'+file+'" />'+
				'<param name="quality" value="high" />'+
				'<param name="wmode" value="transparent" />'+
				'<param name="flashvars" value="'+flashvars+'" />	'+	
				'<param name="allowFullScreen" value="true" />' +
				'<embed src="'+file+'" quality="high" allowFullScreen="true" wmode="transparent" flashVars="'+flashvars+'"'+
				'   	pluginspage="http://www.macromedia.com/go/getflashplayer" '+
				'	    type="application/x-shockwave-flash" width="'+width+'" height="'+height+'"></embed>'+
			' </object>';
		
		
			document.write(html);
		},
		getVersion : function () {
			var browserName=navigator.appName; 
		
			if(browserName == "Microsoft Internet Explorer") {
				try{
					var t=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
					t=t.GetVariable('$version').split(' ');
					t=t[1].split(',');
					this.version=t[0];
					this.minor=t[1];
					this.release=t[2];
				} catch(e){
					this.version=0;
				}
			} else { 
				try {
					var t=navigator.plugins['Shockwave Flash'].description;
					t=t.split(' ');
					if(t[3]) b=t[3].split('r');
					else b=t[4].split('r');
					t=t[2].split('.');
					this.version=t[0];
					this.minor=t[1];
					this.release=b[1];
				} catch(e){
					this.version=0
				}
			}
			return this.version;
		}
	},
	Adv : {
		put : function(advid) {
			
			$.ajax({
			   type: "POST",
			   url: 'adv.php?id='+advid,
			   success: function(msg){
					$('#adv'+advid).html(msg);
			   }
			});
		}
	}
};

function OskAddress(oaid,type,postal,city,address,phone,x,y,name,email,www, oid) {
	this.oaid = oaid;
	this.oid = oid;
	this.type = type,
	this.postal = postal;
	this.city = city;
	this.address = address;
	this.phone = phone;
	this.x = x;
	this.y = y;
	this.name = name;
	this.email = email;
	this.www = www;
	this.hideMap = false;
			
	this.info = '<b>'+this.name+'</b><br/>'+
			this.postal+' '+this.city+', '+this.address+'<br/>'+
			'tel. '+this.phone+'<br/>'+
			'email: '+this.email+'<br/>'+
			'<a href="">'+this.www+'</a>';
	
	this.getHtml = function(){
		var html = '<div class="brd_dot"></div>';
		
		if (!this.hideMap) {
			html += '<a href="" id="oskMap' + this.oaid + '" class="mapI"' +
					'   onclick="showOnMap(' + this.oaid + ');return false;"' +
					'   title="Pokaż na mapie"><img src="img/mapIcon.gif"/></a>';
		}
	
		if (this.type == 1) {
			html += '<b>Biuro</b><br/>';
		} else if (this.type == 2) {
			html += '<b>Sala wykładowa</b><br/>';			
		} else {
			html += '<b>Biuro i sala wykładowa</b><br/>';
		}
		
		if (this.postal != '') {
			html += this.postal + ' ';
		}
		if (this.city != '') {
			html += this.city + ' ';
		}
		if (this.address != '') {
			html += 'ul. '+this.address + '<br/> ';
		}
		if (this.phone != '') {
			html += 'tel. '+this.phone + '<br/> ';
		}
		
		html += '<div id="oskDist'+this.oaid+'"></div>';
		
		return html;
	}
}

function Osk(oid,name,logo,category,www,email) {
	
	this.oid = oid;
	this.name = name;
	this.logo = logo;
	this.category = category;
	this.www = www;
	this.email = email;
	
	this.sw = false;
	this.b = false;
	
	this.minSwDist = null;
	this.minBDist = null;
	
	this.avr = null;
	
	this.address = new Object();
	
	this.setMinSwDist = function(dist) {
		if (this.minSwDist > dist || this.minSwDist == null) {
			this.minSwDist = dist;
		}
	}
	
	this.setMinBDist = function(dist) {
		if (this.minBDist > dist || this.minBDist == null) {
			this.minBDist = dist;
		}
	}
		
	this.addAddress = function(address) {
		this.address[address.oaid] = address;
	}
	
	this.getHtml = function() {
		var city = new Object();
		for (i in this.address) {
				if (city[this.address[i].city] == null) {
					city[this.address[i].city] = 0;
				}
				city[this.address[i].city] ++;
		}
		var cstr = '';
		var i=0;
		for (cname in city) {
			if (i > 0) cstr += ', ';
			
			cstr += cname;
			
			i++;
		}
			
		var html = '<div id="osk'+this.oid+'" class="bx osk">'+
			'<div class="hd">'+
			'	<span class="hd_r"></span>'+
			'	<span class="hd_l"></span>'+
			'	<h2><span>'+cstr+'</span><a href="#" onclick="pageslider.swap(\'osk'+this.oid+'\');return false;">'+this.name+'</a>'+
			'		</h2>'+
			'</div>'+
			'<div class="ctx" >';
			
			if (this.logo != '' && this.logo != 0) {
				html +='<img src="img/logos/'+this.oid+'.jpg" /><br/>';
			}
			
			html += 'Kategorie: '+this.category+'<br/>';
			this.www = this.www.replace(' ','');
			if (this.www != '') {
				html += '<a target="_blank" href="http://'+this.www+'">'+this.www+'</a><br/>';
			} 	
			this.email = this.email.replace(' ','');
			if (this.email != '') {
				html += 'email: '+this.email+' <br/> ';
			} 		
			
			html +=	'<h4>Adresy:</h4>';
			
			for (var i in this.address) {
				html += this.address[i].getHtml();
			}
			
			html +=	'</div></div>';
			
		return html;
	}
}

function oskInit() {
	if (GBrowserIsCompatible()) {
		
        map = new GMap2(document.getElementById("gMap"));
        
        map.setMapType(G_NORMAL_MAP);
        map.addControl(new GSmallZoomControl());
		map.enableScrollWheelZoom();
        //map.addControl(new GSmallMapControl());
        //map.addControl(new GMapTypeControl());
		
        oskIconS = new GIcon();
        oskIconS.image = "img/iconOskSW.png";
        oskIconS.shadow = "img/iconOskSh.png";
        oskIconS.iconSize = new GSize(24, 33);
        oskIconS.shadowSize = new GSize(44, 33);
        oskIconS.iconAnchor = new GPoint(8, 33);     
        oskIconS.infoWindowAnchor = new GPoint(8, 33);

        oskIcon = new GIcon();
        oskIcon.image = "img/iconOsk.png";
        oskIcon.shadow = "img/iconOskSh.png";
        oskIcon.iconSize = new GSize(24, 33);
        oskIcon.shadowSize = new GSize(44, 33);
        oskIcon.iconAnchor = new GPoint(8, 33);     
        oskIcon.infoWindowAnchor = new GPoint(8, 33);        

        oskIconD = new GIcon();
        oskIconD.image = "img/iconOskD.png";
        oskIconD.shadow = "img/iconOskSh.png";
        oskIconD.iconSize = new GSize(33, 33);
        oskIconD.shadowSize = new GSize(44, 33);
        oskIconD.iconAnchor = new GPoint(8, 33);     
        oskIconD.infoWindowAnchor = new GPoint(8, 33); 
				
        oskIconF = new GIcon();
        oskIconF.image = "img/iconFlag.png";
        oskIconF.shadow = "img/iconFlagSh.png";
        oskIconF.iconSize = new GSize(22, 26);
        oskIconF.shadowSize = new GSize(31, 26);
        oskIconF.iconAnchor = new GPoint(1, 26);     
        oskIconF.infoWindowAnchor = new GPoint(1, 26); 
        
        drawNormalMap();
		var fst = null;
		for (var i in osks) {
			fst = i;
			break;
		}
		drawSearchMap(fst);
    }	
}

function drawNormalMap() {
	if (address == '' && radius == 0 && type == 1) {
    	map.setCenter(new GLatLng(52.348388, 18.641374), 6);
    	var count = 30;
		var firstOid = null;
    	for (var i in osks) {
			if (firstOid == null) {
				firstOid = i;
			}
			if (count > 0) {
				putToLeftBar(i);
				count--;
			}
    		for (var k in osks[i].address) {
    			if (osks[i].address[k].x != null && osks[i].address[k].y != null) {
    				putOnMap(osks[i].address[k].oaid);
    			}
    		}
    	}
				
    	pageslider = new Fosta.VerticalSlider('osk'+firstOid,30);	
    }	
}

function drawSearchMap(fstOid) {
	if (address != '' && radius != '' && type != null) {
		geocoder = new GClientGeocoder();			
		geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					map.setCenter(new GLatLng(54.348388, 18.641374), 13);
					$('#oskR').html('Nie znaleziono podanego adresu.');
					pageslider = new Fosta.VerticalSlider('osk'+fstOid,30);
				} else {
					markerOptions = {
						draggable: false,
						icon: oskIconF
					};
							
					searchPont = point;
								
					var marker = new GMarker(point,markerOptions);
					var zoom = 13;
					if (radius == 500) {
						zoom = 16;
					} else if (radius == 1500) {
						zoom = 15;
					} else if (radius == 3000) {
						zoom = 13;
					} else if (radius == 5000) {
						zoom = 12;
					}
					
					map.setCenter(point,zoom);
			   	    map.addOverlay(marker);
					
					//tablica do wyswietlenia
					var oskToDraw = new Array();			
					
					//sprawdzam osrodki
					for (oid in osks) {
						checkOsk(osks[oid],oskToDraw);
					}
					
					if (oskToDraw.length > 0) {
						
						$('#oskS').html('');
						for (var i=0;i<oskToDraw.length;i++) {
							$('#oskS').append(oskToDraw[i].getHtml());			
						}
						$('#oskR').html('Znaleziono <b>'+oskToDraw.length+'</b> ośrodków. '+
							'<br/>Najbliżej położony jest ośrodek <b>'+oskToDraw[0].name+'</b> ('+oskToDraw[0].avr.toFixed(2)+' m.)');
						
						pageslider = new Fosta.VerticalSlider('osk'+oskToDraw[0].oid,30);
							
					} else {
						$('#oskR').html('Nie znaleziono ośrodków spełniających podane kryteria.');
						pageslider = new Fosta.VerticalSlider('osk'+fstOid,30);	
					}					
				}
			}
		);
				
	} 	
}

function checkOsk(osk, oskTab) {
	var count = 0;

	//sprawdzam wszystkie siedziby danego osrodka
	for (i in osk.address) {
		var adr = osk.address[i];

		if (adr.x != null && adr.y != null) {
			var p = new GLatLng(adr.x, adr.y);
			var dist = searchPont.distanceFrom(p);
			
			//adres lezy w szukanym promieniu							
			if (dist <= radius) {
				putOnMap(adr.oaid);	
									
				if (adr.type == 1) {
					osk.b = true;
					osk.setMinBDist(dist);
				} else if (adr.type == 2) {
					osk.sw = true;
					osk.setMinSwDist(dist);
				} else {
					osk.sw = true;
					osk.b = true;
					osk.setMinBDist(dist);
					osk.setMinSwDist(dist);
				}								
			} else {
				osk.address[adr.oaid].hideMap = true;
			}
		}
	}
	
	var isOk = false;
	
	//jesli szukamy biur i sal wykladowych
	if (type == 3 && osk.sw && osk.b) {
		//liczymy srednia
		osk.avr = (osk.minSwDist+osk.minBDist)/2;
		isOk = true;	
	//jesli szukamy sal wykladowych
	} else if (type == 2 && osk.sw) {
		osk.avr = osk.minSwDist;
		isOk = true;
	//jesli szukamy biur	
	} else if (type == 1 && osk.b) {
		osk.avr = osk.minBDist;		
		isOk = true;
	}
	if (isOk) {
		//sprawdzam srednia i dodaje do tablicy	
		var set = false;
		for (i in oskTab) {
			if (oskTab[i].avr >= osk.avr) {
				oskTab = oskTab.splice(i, 0, osk);				
				set = true;
				break;
			}
		}
		if (!set) {
			oskTab.push(osk);
		}
	}
}

function loadMovie(pid) {
	getComments(pid);
	getRoute(pid);
	
	$.ajax({
		   type: "POST",
		   url: 'period.html?pid='+pid,
		   success: function(msg){
				eval(msg);
				
				if (odcDesc != '' && odcDesc != null) {
					$("#odcDescription").html(odcDesc);
				} else {
					$("#odcDescription").html('Brak wskazówek dla odcinka');
				}
					
				setMap(odcMap);	
		   }
	});
				
	Fosta.Cookie.set('lastOdc',pid,null);
	
	PID = pid;
}

function setMap(odcMap) {
	if (odcMap != '') {	
		var mapTab = odcMap.split(";");
				
		mapTab[3] = mapTab[3].replace(' to: ','-');
							
		var pts = mapTab[3].split("-");
							
		mapInitialize(parseFloat(mapTab[0]),parseFloat(mapTab[1]),parseInt(mapTab[2]),pts);
	} else {
		$("#odcMap").html("Brak mapy dla odcinka");		
	}
}

function mapInitialize(x, y, z, route){
    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("odcMap"));
        
        map.setMapType(G_NORMAL_MAP);
        map.addControl(new GSmallZoomControl());
        map.setCenter(new GLatLng(x, y), z);
        directionsPanel = document.getElementById("route");
        directions = new GDirections(map, directionsPanel);
        
        directions.loadFromWaypoints(route, {
            preserveViewport: true
        });    
    }
}

function addComment() {
		
		var params = 'ACTION=addComment&pid='+PID
			+'&name='+Fosta.URL.encode(document.getElementById('name').value)
			+'&comment='+Fosta.URL.encode(document.getElementById('tresc').value)
			+'&code='+document.getElementById('code').value;
			
		$.ajax({
			   type: "POST",
			   url: 'ajaxaction.php?'+params,
			   success: function(msg){
                   
                   if (msg == '1') {
                       showAddForm();
                       getComments(PID);
                       $('#name').value = '';
                       $('#tresc').value = '';
                       $('#commMsg').html('<div class="commMs MsOk">Komentarz został dodany</div>');
                   }
                   else 
                       if (msg == '0') {
                           $('#commMsg').html('<div class="commMs">Błąd dodania komentarza. Spróbuj ponownie za chwilę.</div>');
                       }
                       else {
                           $('#commMsg').html('<div class="commMs">' + msg + '</div>');
                       }
                   $('#commMsg').show();
                   click++;
                   document.getElementById('cmCode').src = "randimg.code?id=" + click;
				
			  },
			  failed: function() {
			  	$('#commMsg').html('<div class="commMs>Błąd dodania komentarza</div>');
			  }
		});
		
		return false;			
	}
	
function showAddForm() {
	var box = document.getElementById('commBx');
	
	if (box.style.display == "none") {
		box.style.display = "inline";
		click++;
		document.getElementById('cmCode').src = "randimg.code?id="+click;
		document.getElementById('addComm').innerHTML = "Ukryj formularz";
	} else{
		box.style.display = "none";
		document.getElementById('addComm').innerHTML = "Dodaj komentarz";
		document.getElementById('commMsg').style.display = "none";
		
		document.getElementById('code').value = '';
		document.getElementById('name').value = '';
		document.getElementById('tresc').value = '';
				
	}
	return false;
}

function moreComm() {
	var box = document.getElementById('moreComm');
	
	if (box.style.display == "none") {
		box.style.display = "inline";
		document.getElementById('moreCommBtn').innerHTML = "mniej komentarzy &raquo;";
	} else{
		box.style.display = "none";
		document.getElementById('moreCommBtn').innerHTML = "więcej komentarzy &raquo;";		
	}
}

function getRoute(pid) {
	$('#odcRoute').html("ładowanie trasy ...");
	
	$.ajax({
		   type: "post",
		   url: 'routes.html?pid='+pid,
		   success: function(msg){
				$('#odcRoute').html(msg); 
		   }
	});	
}

function getComments(pid) {
	$('#odcComments').html("ładowanie komentarzy ...");
	
	$.ajax({
		   type: "post",
		   url: 'comments.html?pid='+pid,
		   success: function(msg){
				$('#odcComments').html(msg); 
		   }
	});		
}

function putAndShowOnMap(oaid) {
	map.setCenter(new GLatLng(osksAddr[oaid].x, osksAddr[oaid].y), 14);
	if (osksAddr[oaid].marker != null) {
		osksAddr[oaid].marker.openInfoWindowHtml(osksAddr[oaid].info);
	} else {
		putOnMap(oaid);
		osksAddr[oaid].marker.openInfoWindowHtml(osksAddr[oaid].info);
	}
}

function showOnMap(oaid) {
		map.setCenter(new GLatLng(osksAddr[oaid].x, osksAddr[oaid].y), 14);
		osksAddr[oaid].marker.openInfoWindowHtml(osksAddr[oaid].info);
}

function putToLeftBar(oid) {
	$('#oskS').append(osks[oid].getHtml());
}

function putOnMap(id){

    var x = osksAddr[id].x;
    var y = osksAddr[id].y;
    var info = osksAddr[id].info;
    var type = osksAddr[id].type;
	
	if (type == 1) {
		markerOptions = {
			draggable: false,
			icon: oskIcon
		};
	} else if (type == 2){
		markerOptions = {
			draggable: false,
			icon: oskIconS
		};		
	} else if (type == 3){
		markerOptions = {
			draggable: false,
			icon: oskIconD
		};		
	}
    var point = new GLatLng(x, y);
    var marker = new GMarker(point, markerOptions);
    
    osksAddr[id].marker = marker;
    
    GEvent.addListener(marker, "click", function(){
        marker.openInfoWindowHtml(info);
    });
    map.addOverlay(marker);
	
}




