
	var opleidingen = Class.create(kb_base,{
		initialize : function($super, RPCURI, container){
			$super(RPCURI, container);
			this.instID = 'kb_' + parseInt(Math.random()*1000000);
		},
		
		getOpleidingen : function(mainCat){
			$('page').hide();
			this.mainCat = mainCat;
			// get sectors:
			this.getSectors(this._getOpleidingen.bind(this));
		},
		
		_getOpleidingen : function(sectors){
			this.container.update('<h1> Opleidingen '+ this.getMainCatName()+ '</h1>');
			
			var sectorContainer = new Element('div', {className:'sectors'})
			this.container.insert(sectorContainer);
//			this.getCloser(sectorContainer);
	  		if (this.mainCat == 2) sectorContainer.insert('<p>Doordat er zeer veel opleidingen zijn in het MBO en er voortdurend veranderingen plaats vinden, hebben we ervan afgezien om alle opleidingen te noemen.</p><p>Je ziet bij elke beroepensector:<br/><ul><li>een korte omschrijving van de richtingen</li><li>interessante websites die meer info geven over de sector</li><li>MBO scholen die opleidingen verzorgen in de genoemde sector</li></ul></p><p>Je zou om te beginnen kunnen kijken of het ROC bij jou in de buurt opleidingen verzorgt in de sector van jouw keuze en welke opleidingen dat zijn.</p>');
			this.writeSectors(sectorContainer, this.writeLevels.bindAsEventListener(this))
	  	},
	  	
	  	writeLevels : function(e){
	  		if (e) {
	  			var selectedSector = e.element().sector;
	  			var parentContainer = e.element();
	  			parentContainer = parentContainer.parentNode;
	  			
	  			var container = new Element('div', {className:'levelContainer'});
	  			parentContainer.insert(container);
	  			
	  			
	  			this.getCloser(container);

	  			
	  			if (this.mainCat == 2){
//		  			var sectorDescription = new Element('div', {className:'sectorDescription'});
//		  			container.insert(sectorDescription);
//	  				this.writeSectorDescription(selectedSector, sectorDescription);
//	  			}else{
//		  			var link = new Element('a').update("Meer informatie over de sector " + selectedSector.name);
//		  			container.insert(link);
		  			var sectorDescription = new Element('div', {className:'sectorDescription'}).insert(selectedSector.VMBO_introductietext);
//		  			sectorDescription.hide();
		  			container.insert(sectorDescription);
		  			container.insert('<br/>');
//		  			link.observe('click', (function(){
//		  				this.writeSectorDescription(selectedSector, sectorDescription);
//		  			}).bind(this))
	  			}else if (selectedSector.name=='uniform' && this.mainCat != 2){
		  			container.insert(gUniformText);
		  			return;
	  			}

	  			
// enable later if the MBO-studies are complete
//	  			var link = this.getLevelLink('mbo', "MBO opleidingen", selectedSector);
//	  			container.insert(link);
//	  			var inlineContainer = new Element('div');
//	  			container.insert(inlineContainer);
//	  			link.inlineContainer = inlineContainer;
//
//	  			link.observe('click', this.getStudiesAtSector.bindAsEventListener(this))

		  		if (this.mainCat == 2){
		  			var link = this.getLevelLink('mbo', "MBO scholen in de sector " + selectedSector.name, selectedSector);
		  			container.insert(link);
		  			var inlineContainer = new Element('div', {className:'inlineContainer'});
		  			inlineContainer.hide();
		  			container.insert(inlineContainer);
		  			link.inlineContainer = inlineContainer;
		  			link.sector = selectedSector;
		  			link.observe('click', this.getSchoolsAtSector.bindAsEventListener(this))

		  		}else{
		  			if (selectedSector.no_show_at_vmbo != '1'){
			  			var link = this.getLevelLink('mbo', "MBO scholen in de sector " + selectedSector.name, selectedSector);
			  			container.insert(link);
			  			var inlineContainer = new Element('div', {className:'inlineContainer'});
			  			inlineContainer.hide();
			  			container.insert(inlineContainer);
			  			link.inlineContainer = inlineContainer;
			  			link.sector = selectedSector;
			  			link.observe('click', this.getSchoolsAtSector.bindAsEventListener(this))
		  			}
		  		}
	  			

	  			if (this.mainCat == 2){
			  		var mapsLink = new Element('a').update("Toon alle opleidingen in de sector " + selectedSector.name + " op de kaart");
			  		container.insert(mapsLink);
			  		var mapsContainer = new Element('div', {className:'studyMapsContainer'});
			  		container.insert(mapsContainer);
			  		mapsContainer.hide();
			  		mapsLink.observe('click', (function(){
			  			var func = (function(req,rpc){
			  				this.writeSchoolsMap(req, rpc, mapsContainer, '');
			  			}).bind(this)
			  			this.getSchoolsAtSector('', selectedSector.id, mapsContainer, func);
			  		}).bind(this) )
	  			}

	  			if (this.mainCat == 1){
		  			var link = this.getLevelLink('hbo', "HBO opleidingen", selectedSector);
		  			container.insert(link);
		  			var inlineContainer = new Element('div');
		  			container.insert(inlineContainer);
		  			link.inlineContainer = inlineContainer;
		  			link.observe('click', this.getStudiesAtSector.bindAsEventListener(this))
		  		}
		  		if (this.mainCat == 3){
		  			var link = this.getLevelLink('hbo', "HBO opleidingen", selectedSector);
		  			container.insert(link);
		  			var inlineContainer = new Element('div');
		  			container.insert(inlineContainer);
		  			link.inlineContainer = inlineContainer;
		  			link.observe('click', this.getStudiesAtSector.bindAsEventListener(this))

		  			var link = this.getLevelLink('wo', "WO opleidingen", selectedSector);
		  			container.insert(link);
		  			var inlineContainer = new Element('div');
		  			container.insert(inlineContainer);
		  			link.inlineContainer = inlineContainer;
		  			link.observe('click', this.getStudiesAtSector.bindAsEventListener(this))
		  			
		  		}
	  		}	  		
	  	},
	  	
	  	drawStudies : function(req,rpc,container, level, sector){
	  		if (sector){
	  			var head = new Element('h1').update(level.toString().toUpperCase() + " studies in de sector " + sector.name);
	  			container.insert(head);
	  		}

	  		var studies = rpc.toObject().responses.response.row;
	  		
	  		if (!studies){
	  			container.insert("<p> Geen studies gevonden</p>");
	  			return;
	  		}
	  		if (!studies.length) studies = [studies];
	  		var ul = new Element('ul');
	  		container.insert(ul);
	  		studies.each(
	  			(function(study){
	  				var link = new Element('a').update(study.name);
	  				var li = new Element('li').update(link);
	  				var infoContainer = new Element('div', {className:'studyInfo'});
	  				li.insert(infoContainer);
	  				link.inlineContainer = infoContainer;
	  				infoContainer.hide();
	  				ul.insert(li);
	  				var func = (function(){
	  					this.showStudy(study, infoContainer);
	  				}).bind(this)
	  				link.observe('click', func)
	  			}).bind(this)
	  		)
	  	},
	  	
	  	showStudy : function(study, inlineContainer){
	  		inlineContainer.show();
	  		inlineContainer.update('');
	  		this.getCloser(inlineContainer);
	  		var header = new Element('div', {className:'studyTitle'}).update(study.name);
	  		inlineContainer.insert(header);
	  		inlineContainer.insert('<p>' + study.description + '</p>');

	  		if (this.activeLevel !='mbo'){
		  		// waar:
		  		var link = new Element('a').update("Waar kan je " + study.name + " volgen?");
		  		inlineContainer.insert(link);
		  		var schoolsContainer = new Element('div', {className:'schoolsContainer'});
		  		inlineContainer.insert(schoolsContainer);
		  		schoolsContainer.hide();
		  		link.observe('click', (function(){
		  			var func = (function(req,rpc){
		  				this.writeSchoolListing(req, rpc,schoolsContainer, study);
		  			}).bind(this)
		  			this.getSchools(study.id, func,'',schoolsContainer);
		  		}).bind(this) )
		  		
		  		inlineContainer.insert('<br/>');
		  		
		  		var link = new Element('a').update("Toon alle scholen met " + study.name + " op de kaart");
		  		inlineContainer.insert(link);
		  		var mapsContainer = new Element('div', {className:'studyMapsContainer'});
		  		inlineContainer.insert(mapsContainer);
		  		mapsContainer.hide();
		  		link.observe('click', (function(){
		  			var func = (function(req,rpc){
		  				this.writeSchoolsMap(req, rpc,mapsContainer, study);
		  			}).bind(this)
		  			this.getSchools(study.id, func, '', mapsContainer);
		  		}).bind(this) )
		  				  		
		  		inlineContainer.insert('<br/>');
		  		
		  		// rechten:
		  		var link = new Element('a').update("Vooropleidingseisen voor " + study.name + "");
		  		inlineContainer.insert(link);
		  		var rightsContainer = new Element('div', {className:'rightsContainer'});
		  		inlineContainer.insert(rightsContainer);
		  		rightsContainer.hide();
		  		link.observe('click', (function(){
		  			var func = (function(req,rpc){
		  				this.writeRights(req, rpc, rightsContainer);
		  			}).bind(this)
		  			this.getStudyRights(study, func, rightsContainer);
		  		}).bind(this) )
	  		}else{

	  			var pcContainer = new Element('div');
	  			inlineContainer.insert(pcContainer);

	  			var link = new Element('a').update("Zoek ROC's bij jou in de buurt")
		  		pcContainer.insert(link);
		  		link.observe('click', (function(){
		  			pcContainer.update('');
			  		var func = (function(input){
			  			this.locateMBOStudy(input, study, pcContainer);
			  		}).bind(this)
			  		this.getPostCodeSearch(pcContainer, func);
			  		pcContainer.insert("<br/>");
		  		}).bind(this))
		  		
	  			pcContainer.insert("<br/>");
		  		
		  		var link = new Element('a').update("Toon alle ROC's op de kaart");
		  		inlineContainer.insert(link);
		  		var mapsContainer = new Element('div', {className:'studyMapsContainer'});
		  		inlineContainer.insert(mapsContainer);
		  		mapsContainer.hide();
		  		link.observe('click', (function(){
		  			var func = (function(req,rpc){
		  				this.waiter(mapsContainer);
		  				this.writeSchoolsMap(req, rpc,mapsContainer, study);
		  			}).bind(this)
		  			this.getMBOSchools(func);
		  		}).bind(this) )
		  				  		
		  		inlineContainer.insert('<br/>');	  			
	  		}
	  	},

	  	locateMBOStudy : function(input, study,container){
	  		var pc = input.getValue();
	  		this.waiter(container);
	  		var rpc = new rpcClient(this.RPCURI, '439b3a44-76ce-11de-86f2-001f297dba24');
			if (window.console) rpc.debug = true;
	  		rpc.createCall('is', 'locateMBOStudy', {zip:pc});
  			rpc.execute(
  				(function(req, rpc){
  					this.writeStudiesAtLocation(req,rpc,container, study)
  				}).bind(this)
  			);
	  	},
	  	
	  	locateStudy: function(input, study, container){
	  		var pc = input.getValue();
	  		var rpc = new rpcClient(this.RPCURI, '439b3a44-76ce-11de-86f2-001f297dba24');
			if (window.console) rpc.debug = true;
			this.waiter(container);
	  		rpc.createCall('is', 'locateStudy', {studyID:study.id, zip:pc});
  			rpc.execute(
  				(function(req, rpc){
  					this.writeStudiesAtLocation(req,rpc,container, study)
  				}).bind(this)
  			);
	  	},
	  	
	  	locateStudyBySector :  function(input, sectorID, container){
	  		var pc = input.getValue();
	  		this.waiter(container);
	  		var rpc = new rpcClient(this.RPCURI, '439b3a44-76ce-11de-86f2-001f297dba24');
			if (window.console) rpc.debug = true;
	  		rpc.createCall('is', 'locateStudy', {'sectorID':sectorID, zip:pc});
  			rpc.execute(
  				(function(req, rpc){
  					this.writeStudiesAtLocation(req,rpc,container, '', sectorID)
  				}).bind(this)
  			);
	  	},
	  	
	  	writeSchoolsMap : function(req, rpc, container, study){
	  		this.unwaiter();
	  		container.show();
	  		var schools = rpc.toObject().responses.response.row;
	  		if (!schools.length) schools = [schools];
	  		
	  		var map = new google.maps.Map2(container);
	  		map.setMapType(G_HYBRID_MAP);
	  		map.enableScrollWheelZoom();
	  		var mapTypeButtons = new GMapTypeControl();
	  		map.addControl(mapTypeButtons);
	  		var zoomMapControls = new GSmallMapControl();
	  		map.addControl(zoomMapControls);
	  		map.setCenter(new GLatLng(52.160455, 5.343462), 7);
	  		schools.each(
		  			(function(school){
		  				if ( (school.location) &&  (school.location.lat && school.location.lng) ){
			  		  		var uri = school.uri;
			  		  		if ((uri) && (uri.indexOf('http') == -1)){
			  		  			uri = 'http://' + uri;
			  		  		}
			  		  		var address= '';
			  		  		if (school.address ) address = school.address; 
			  		  		var schoolInfo = school.name + '<br/>' + address + '<br/>' + school.zipcode + '  ' + school.city + '<br/>' + school.phone + '<br/>' + '<a href="'  +uri+ '" target="_blank">' + uri + '</a><br/>'
			  		  		if (address.toString().toLowerCase().indexOf('postbus') > -1){
			  		  			schoolInfo =  "<b>Let op, het adres is een postbus, <br/>kijk op de website voor het exacte adres!</b><br/>" + schoolInfo; 
			  		  		}else{
			  		  		}
		  		  		
			  		  		var lg = new GLatLng(school.location.lat, school.location.lng);
			  				var marker = new GMarker(lg, 
			  						{
			  							title: school.name,
			  							draggable:false
			  						});
			  				map.addOverlay(marker);
			  				GEvent.addListener(marker, 'click', function() { 
			  					marker.openInfoWindowHtml(schoolInfo);
			  				});
		  				}
		  			}).bind(this)
		  		);
	  	},

	  	
	  	writeStudiesAtLocation: function(req,rpc,container, study, sectorID){
	  		if (!sectorID) sectorID = ''
	  		this.writeSchoolListing(req,rpc,container, study, true, sectorID)
	  	},
	  	
	  	writeSchoolListing : function(req, rpc, container, study, fromLocation, sectorID){
	  		if (!fromLocation) fromLocation = false;
	  		if (!sectorID) sectorID = '';
	  		if (!study) study = '';
	  		this.unwaiter();
	  		var schools = rpc.toObject().responses.response.row;
	  		if (!schools.length) schools = [schools];
	  		container.update('');
	  		container.show();
	  		this.getCloser(container);
	  		var ul = new Element('ul');
	  		container.insert(ul);
	  		
	  		schools.each(
	  			(function(school){
	  				var link = new Element('a').update(school.name + " (" + school.city + ")");
	  				var li = new Element('li').insert(link);
	  				ul.insert(li);
	  				
	  				var inlineContainer = new Element('div', {className:'schoolDetails'});
	  				inlineContainer.hide();
	  				li.insert(inlineContainer);
	  				
	  				link.observe('click', (function(){
	  					this.writeSchoolDetails(school, inlineContainer);
	  				}).bind(this)  )
	  				
	  			}).bind(this)
	  		)
	  		container.insert("<br/>");
	  		
	  		var pcContainer = new Element('div');
	  		container.insert(pcContainer);
	  		
	  		if (this.activeLevel =='mbo') return;

	  		var studyName = '';
  			if (study.name) studyName = study.name;

	  		if (schools.length > 2){ 
		  		if (fromLocation){
		  			var link = new Element('a').update("Toon alle locaties waar je de studie " + studyName + " kan volgen" );
			  		pcContainer.insert(link);
	
			  		link.observe('click', (function(){
			  			var func = (function(req,rpc){
			  				this.writeSchoolListing(req, rpc,container, study, false, sectorID);
			  			}).bind(this)
			  			if (study){
			  				this.getSchools(study.id, func);
			  			}else{
			  				this.getSchoolsAtSector('', sectorID, container);
			  			}
			  		}).bind(this) )
		  			
		  		}else{
		  			
			  		var link = new Element('a').update("Zoek een studie " + studyName + " bij jou in de buurt")
			  		pcContainer.insert(link);
			  		link.observe('click', (function(){
			  			pcContainer.update('');
			  			if (sectorID){
			  				var func = (function(input){
			  					this.locateStudyBySector(input, sectorID, container);
			  				}).bind(this)
			  			}else{
			  				var func = (function(input){
			  					this.locateStudy(input, study, container);
			  				}).bind(this)
			  			}
				  		this.getPostCodeSearch(pcContainer, func);
				  		pcContainer.insert("<br/>");
			  		}).bind(this))
		  		}
	  		}
	  		

	  	},
	  	
	  	writeSchoolDetails : function(school, container){
	  		container.update('');
	  		this.getCloser(container);
	  		container.show();
	  		var uri = school.uri;
	  		if (uri.indexOf('http') == -1) uri = 'http://' + uri;

	  		var schoolInfo = school.city + '<br/>' + school.phone + '<br/>' + '<a href="'  +uri+ '" target="_blank">' + uri + '</a><br/>' 
	  		container.insert(schoolInfo);
	  		if (school.x != '' && school.y != ''){
	  			school.location = {lat:school.x,lng:school.y};
	  		}
	  		if (school.location){
		  		var gMapsLink = new Element('a').update("Toon op kaart");
		  		container.insert(gMapsLink);
		  		
		  		var gMapsContainer = new Element('div', {className:'gMapsContainer'});
		  		container.insert(gMapsContainer);
		  		gMapsContainer.hide();
		  		
		  		gMapsLink.inlineContainer = gMapsContainer;
		  		gMapsLink.school = school;
		  		gMapsLink.schoolInfo =  schoolInfo;
		  		gMapsLink.observe('click', this.showSchoolMap.bindAsEventListener(this))
	  		}
	  	},
	  	
	  	showSchoolMap : function(e){
	  		var container = e.element().inlineContainer;
	  		container.show();
	  		var school = e.element().school;
	  		var schoolInfo = e.element().schoolInfo;
	  		schoolInfo = school.name + '<br/>' + schoolInfo;
	  		var address= '';
	  		if (school.address ) address = school.address 
	  		
	  		if (address.toString().toLowerCase().indexOf('postbus') > -1){
	  			schoolInfo =  "<b>Let op, het adres is een postbus, <br/>kijk op de website voor het exacte adres!</b><br/>" + schoolInfo; 
	  		}
	  		
	  		address = address + ' '  + school.city + ' netherlands'
	  		
	  		var map = new google.maps.Map2(container);
	  		map.setMapType(G_HYBRID_MAP);
	  		map.enableScrollWheelZoom();
	  		var mapTypeButtons = new GMapTypeControl();
	  		map.addControl(mapTypeButtons);
	  		var zoomMapControls = new GSmallMapControl();
	  		map.addControl(zoomMapControls);
//	  		map.setCenter(new GLatLng(school.location.lat, school.location.lng), 9);
//	  		
//	  		var lg = new GLatLng(school.location.lat, school.location.lng);
//			var marker = new GMarker(lg, 
//					{
//						title: school.name,
//						draggable:false
//					});
//			marker.openInfoWindowHtml(schoolInfo);			
//			map.addOverlay(marker);
//	  		return;
	  		var geocoder = new GClientGeocoder();
	  		geocoder.getLatLng(
			    address,
			    function(point) {
			      if (!point) {
			        alert(address + " not found");
			      } else {
			        map.setCenter(point, 9);
			        var marker = new GMarker(point);
			        map.addOverlay(marker);
			        
			      }
			    }
			  );

	  	    //map.setCenter(new google.maps.LatLng(37.4419, -122.1419), 13);

	  	},
	  	
	  	writeRights : function(req, rpc, container){
	  		this.unwaiter();
	  		container.update('');
	  		container.show();
	  		var right = rpc.toObject().responses.response.row;
	  		this.writeRightsRow(container, right);

	  	}	  	
		
	});

