/**
*   Custom copyright for GeoStart
**/    
var powered_by_geostart = function(oMap) { this.oMap = oMap; };
    powered_by_geostart.prototype = new GControl(true, false);
    powered_by_geostart.prototype.initialize = function () {
            var oContainer = document.createElement("div");
            oContainer.innerHTML    = "<a target='_blank' href='http://www.geostart.nl' style='display:block;height:29px;width:90px;'><img class='png' style='border:0;' src='"+sBaseUrl+"images/powered_by_geostart.png'></a>";
            
            oContainer.id           = "powered_by_geostart";
            oContainer.style.cssText= "width:89px;text-decoration:none;border:none;height:29px;cursor:pointer;padding-bottom:2px;_padding-bottom:0px;";

            this.oMap.getContainer().appendChild(oContainer);
            
            return oContainer;
        }
    powered_by_geostart.prototype.getDefaultPosition = function () {
            return new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(67,4));
};


/* QUICKSEARCH */

jQuery(function ($) {
    $.fn.quicksearch = function (target, opt) {
        
        var timeout, cache, rowcache, jq_results, val = '', e = this, options = $.extend({ 
            delay: 100,
            selector: null,
            stripeRows: null,
            loader: null,
            noResults: '',
            bind: 'keyup',
            onBefore: function () { 
                return;
            },
            onAfter: function () { 
                return;
            },
            show: function () {
                this.style.display = "";
            },
            hide: function () {
                this.style.display = "none";
            }
        }, opt);
        
        this.go = function () {
            
            var i = 0, noresults = true, vals = val.toLowerCase().split(' ');
            
            var rowcache_length = rowcache.length;
            for (var i = 0; i < rowcache_length; i++)
            {
                if (this.test(vals, cache[i]) || val == "") {
                    options.show.apply(rowcache[i]);
                    noresults = false;
                } else {
                    options.hide.apply(rowcache[i]);
                }
            }
            
            if (noresults) {
                this.results(false);
            } else {
                this.results(true);
                this.stripe();
            }
            
            this.loader(false);
            options.onAfter();
            
            return this;
        };
        
        this.stripe = function () {
            
            if (typeof options.stripeRows === "object" && options.stripeRows !== null)
            {
                var joined = options.stripeRows.join(' ');
                var stripeRows_length = options.stripeRows.length;
                
                jq_results.not(':hidden').each(function (i) {
                    $(this).removeClass(joined).addClass(options.stripeRows[i % stripeRows_length]);
                });
            }
            
            return this;
        };
        
        this.strip_html = function (input) {
            var output = input.replace(new RegExp('<[^<]+\>', 'g'), "");
            output = $.trim(output.toLowerCase());
            return output;
        };
        
        this.results = function (bool) {
            if (typeof options.noResults === "string" && options.noResults !== "") {
                if (bool) {
                    $(options.noResults).hide();
                } else {
                    $(options.noResults).show();
                }
            }
            return this;
        };
        
        this.loader = function (bool) {
            if (typeof options.loader === "string" && options.loader !== "") {
                 (bool) ? $(options.loader).show() : $(options.loader).hide();
            }
            return this;
        };
        
        this.test = function (vals, t) {
            for (var i = 0; i < vals.length; i += 1) {
                if (t.indexOf(vals[i]) === -1) {
                    return false;
                }
            }
            return true;
        };
        
        this.cache = function () {
            
            jq_results = $(target);
            
            if (typeof options.noResults === "string" && options.noResults !== "") {
                jq_results = jq_results.not(options.noResults);
            }
            
            var t = (typeof options.selector === "string") ? jq_results.find(options.selector) : $(target).not(options.noResults);
            cache = t.map(function () {
                return e.strip_html(this.innerHTML);
            });
            
            rowcache = jq_results.map(function () {
                return this;
            });
            
            return this.go();
        };
        
        this.trigger = function () {
            this.loader(true);
            options.onBefore();
            
            window.clearTimeout(timeout);
            timeout = window.setTimeout(function () {
                e.go();
            }, options.delay);
            
            return this;
        };
        
        this.cache();
        this.results(true);
        this.stripe();
        this.loader(false);
        
        return this.each(function () {
            $(this).bind(options.bind, function () {
                val = $(this).val();
                e.trigger();
            });
        });
        
    };
});

/* MAIN */


function onLoad() {
    oVerkiezingen = new Verkiezingen();
    
    oVerkiezingen.init();

    $("select").uniform({});
    
    $("a[rel=external]").each(function(i){
        this.target="_blank";
    });
}

$(document).ready(function(){
    onLoad();
});


/** UNIFORM */

(function(a){a.uniform={options:{selectClass:"selector",radioClass:"radio",checkboxClass:"checker",fileClass:"uploader",filenameClass:"filename",fileBtnClass:"action",fileDefaultText:"No file selected",fileBtnText:"Choose File",checkedClass:"checked",focusClass:"focus",disabledClass:"disabled",activeClass:"active",hoverClass:"hover",useID:true,idPrefix:"uniform",resetSelector:false},elements:[]};if(a.browser.msie&&a.browser.version<7){a.support.selectOpacity=false}else{a.support.selectOpacity=true}a.fn.uniform=function(c){c=a.extend(a.uniform.options,c);var e=this;if(c.resetSelector!=false){a(c.resetSelector).mouseup(function(){function i(){a.uniform.update(e)}setTimeout(i,10)})}function b(k){var l=a("<div />"),i=a("<span />");l.addClass(c.selectClass);if(c.useID){l.attr("id",c.idPrefix+"-"+k.attr("id"))}var j=k.find(":selected:first");if(j.length==0){j=k.find("option:first")}i.html(j.text());k.css("opacity",0);k.wrap(l);k.before(i);l=k.parent("div");i=k.siblings("span");k.change(function(){i.text(k.find(":selected").text());l.removeClass(c.activeClass)}).focus(function(){l.addClass(c.focusClass)}).blur(function(){l.removeClass(c.focusClass);l.removeClass(c.activeClass)}).mousedown(function(){l.addClass(c.activeClass)}).mouseup(function(){l.removeClass(c.activeClass)}).click(function(){l.removeClass(c.activeClass)}).hover(function(){l.addClass(c.hoverClass)},function(){l.removeClass(c.hoverClass)}).keyup(function(){i.text(k.find(":selected").text())});if(a(k).attr("disabled")){l.addClass(c.disabledClass)}a.uniform.noSelect(i);h(k)}function d(j){var k=a("<div />"),i=a("<span />");k.addClass(c.checkboxClass);if(c.useID){k.attr("id",c.idPrefix+"-"+j.attr("id"))}a(j).wrap(k);a(j).wrap(i);i=j.parent();k=i.parent();a(j).css("opacity",0).focus(function(){k.addClass(c.focusClass)}).blur(function(){k.removeClass(c.focusClass)}).click(function(){if(!a(j).attr("checked")){i.removeClass(c.checkedClass)}else{i.addClass(c.checkedClass)}}).mousedown(function(){k.addClass(c.activeClass)}).mouseup(function(){k.removeClass(c.activeClass)}).hover(function(){k.addClass(c.hoverClass)},function(){k.removeClass(c.hoverClass)});if(a(j).attr("checked")){i.addClass(c.checkedClass)}if(a(j).attr("disabled")){k.addClass(c.disabledClass)}h(j)}function f(j){var k=a("<div />"),i=a("<span />");k.addClass(c.radioClass);if(c.useID){k.attr("id",c.idPrefix+"-"+j.attr("id"))}a(j).wrap(k);a(j).wrap(i);i=j.parent();k=i.parent();a(j).css("opacity",0).focus(function(){k.addClass(c.focusClass)}).blur(function(){k.removeClass(c.focusClass)}).click(function(){if(!a(j).attr("checked")){i.removeClass(c.checkedClass)}else{a("."+c.radioClass+" span."+c.checkedClass+":has([name='"+a(j).attr("name")+"'])").removeClass(c.checkedClass);i.addClass(c.checkedClass)}}).mousedown(function(){if(!a(j).is(":disabled")){k.addClass(c.activeClass)}}).mouseup(function(){k.removeClass(c.activeClass)}).hover(function(){k.addClass(c.hoverClass)},function(){k.removeClass(c.hoverClass)});if(a(j).attr("checked")){i.addClass(c.checkedClass)}if(a(j).attr("disabled")){k.addClass(c.disabledClass)}h(j)}function g(l){$el=a(l);var m=a("<div />"),k=a("<span>"+c.fileDefaultText+"</span>"),j=a("<span>"+c.fileBtnText+"</span>");m.addClass(c.fileClass);k.addClass(c.filenameClass);j.addClass(c.fileBtnClass);if(c.useID){m.attr("id",c.idPrefix+"-"+$el.attr("id"))}$el.wrap(m);$el.after(j);$el.after(k);m=$el.closest("div");k=$el.siblings("."+c.filenameClass);j=$el.siblings("."+c.fileBtnClass);if(!$el.attr("size")){var i=m.width();$el.attr("size",i/10)}$el.css("opacity",0).focus(function(){m.addClass(c.focusClass)}).blur(function(){m.removeClass(c.focusClass)}).change(function(){var n=a(this).val();n=n.split(/[\/\\]+/);n=n[(n.length-1)];k.text(n)}).mousedown(function(){if(!a(l).is(":disabled")){m.addClass(c.activeClass)}}).mouseup(function(){m.removeClass(c.activeClass)}).hover(function(){m.addClass(c.hoverClass)},function(){m.removeClass(c.hoverClass)});if($el.attr("disabled")){m.addClass(c.disabledClass)}a.uniform.noSelect(k);a.uniform.noSelect(j);h(l)}function h(i){i=a(i).get();if(i.length>1){a.each(i,function(j,k){a.uniform.elements.push(k)})}else{a.uniform.elements.push(i)}}a.uniform.noSelect=function(i){function j(){return false}a(i).each(function(){this.onselectstart=this.ondragstart=j;a(this).mousedown(j).css({MozUserSelect:"none"})})};a.uniform.update=function(i){if(i==undefined){i=a(a.uniform.elements)}i=a(i);i.each(function(){$e=a(this);if($e.is("select")){spanTag=$e.siblings("span");divTag=$e.parent("div");divTag.removeClass(c.hoverClass+" "+c.focusClass+" "+c.activeClass);spanTag.html($e.find(":selected").text());if($e.is(":disabled")){divTag.addClass(c.disabledClass)}else{divTag.removeClass(c.disabledClass)}}else{if($e.is(":checkbox")){spanTag=$e.closest("span");divTag=$e.closest("div");divTag.removeClass(c.hoverClass+" "+c.focusClass+" "+c.activeClass);spanTag.removeClass(c.checkedClass);if($e.is(":checked")){spanTag.addClass(c.checkedClass)}if($e.is(":disabled")){divTag.addClass(c.disabledClass)}else{divTag.removeClass(c.disabledClass)}}else{if($e.is(":radio")){spanTag=$e.closest("span");divTag=$e.closest("div");divTag.removeClass(c.hoverClass+" "+c.focusClass+" "+c.activeClass);spanTag.removeClass(c.checkedClass);if($e.is(":checked")){spanTag.addClass(c.checkedClass)}if($e.is(":disabled")){divTag.addClass(c.disabledClass)}else{divTag.removeClass(c.disabledClass)}}else{if($e.is(":file")){divTag=$e.parent("div");filenameTag=$e.siblings(c.filenameClass);btnTag=$e.siblings(c.fileBtnClass);divTag.removeClass(c.hoverClass+" "+c.focusClass+" "+c.activeClass);filenameTag.text($e.val());if($e.is(":disabled")){divTag.addClass(c.disabledClass)}else{divTag.removeClass(c.disabledClass)}}}}}})};return this.each(function(){if(a.support.selectOpacity){var i=a(this);if(i.is("select")){if(i.attr("multiple")!=true){b(i)}}else{if(i.is(":checkbox")){d(i)}else{if(i.is(":radio")){f(i)}else{if(i.is(":file")){g(i)}}}}}})}})(jQuery);

/** SIMPLEMODAL **/

;(function($){var ie6=$.browser.msie&&parseInt($.browser.version)==6&&typeof window['XMLHttpRequest']!="object",ieQuirks=null,w=[];$.modal=function(data,options){return $.modal.impl.init(data,options);};$.modal.close=function(){$.modal.impl.close();};$.fn.modal=function(options){return $.modal.impl.init(this,options);};$.modal.defaults={appendTo:'body',focus:true,opacity:50,overlayId:'simplemodal-overlay',overlayCss:{},containerId:'simplemodal-container',containerCss:{},dataId:'simplemodal-data',dataCss:{},minHeight:null,minWidth:null,maxHeight:null,maxWidth:null,autoResize:false,autoPosition:true,zIndex:1000,close:true,closeHTML:'<a class="modalCloseImg" title="Close"></a>',closeClass:'simplemodal-close',escClose:true,overlayClose:false,position:null,persist:false,modal:true,onOpen:null,onShow:null,onClose:null};$.modal.impl={o:null,d:{},init:function(data,options){var s=this;if(s.d.data){return false;}ieQuirks=$.browser.msie&&!$.boxModel;s.o=$.extend({},$.modal.defaults,options);s.zIndex=s.o.zIndex;s.occb=false;if(typeof data=='object'){data=data instanceof jQuery?data:$(data);s.d.placeholder=false;if(data.parent().parent().size()>0){data.before($('<span></span>').attr('id','simplemodal-placeholder').css({display:'none'}));s.d.placeholder=true;s.display=data.css('display');if(!s.o.persist){s.d.orig=data.clone(true);}}}else if(typeof data=='string'||typeof data=='number'){data=$('<div></div>').html(data);}else{alert('SimpleModal Error: Unsupported data type: '+typeof data);return s;}s.create(data);data=null;s.open();if($.isFunction(s.o.onShow)){s.o.onShow.apply(s,[s.d]);}return s;},create:function(data){var s=this;w=s.getDimensions();if(s.o.modal&&ie6){s.d.iframe=$('<iframe src="javascript:false;"></iframe>').css($.extend(s.o.iframeCss,{display:'none',opacity:0,position:'fixed',height:w[0],width:w[1],zIndex:s.o.zIndex,top:0,left:0})).appendTo(s.o.appendTo);}s.d.overlay=$('<div></div>').attr('id',s.o.overlayId).addClass('simplemodal-overlay').css($.extend(s.o.overlayCss,{display:'none',opacity:s.o.opacity/100,height:s.o.modal?w[0]:0,width:s.o.modal?w[1]:0,position:'fixed',left:0,top:0,zIndex:s.o.zIndex+1})).appendTo(s.o.appendTo);s.d.container=$('<div></div>').attr('id',s.o.containerId).addClass('simplemodal-container').css($.extend(s.o.containerCss,{display:'none',position:'fixed',zIndex:s.o.zIndex+2})).append(s.o.close&&s.o.closeHTML?$(s.o.closeHTML).addClass(s.o.closeClass):'').appendTo(s.o.appendTo);s.d.wrap=$('<div></div>').attr('tabIndex',-1).addClass('simplemodal-wrap').css({height:'100%',outline:0,width:'100%'}).appendTo(s.d.container);s.d.data=data.attr('id',data.attr('id')||s.o.dataId).addClass('simplemodal-data').css($.extend(s.o.dataCss,{display:'none'})).appendTo('body');data=null;s.setContainerDimensions();s.d.data.appendTo(s.d.wrap);if(ie6||ieQuirks){s.fixIE();}},bindEvents:function(){var s=this;$('.'+s.o.closeClass).bind('click.simplemodal',function(e){e.preventDefault();s.close();});if(s.o.modal&&s.o.close&&s.o.overlayClose){s.d.overlay.bind('click.simplemodal',function(e){e.preventDefault();s.close();});}$(document).bind('keydown.simplemodal',function(e){if(s.o.modal&&s.o.focus&&e.keyCode==9){s.watchTab(e);}else if((s.o.close&&s.o.escClose)&&e.keyCode==27){e.preventDefault();s.close();}});$(window).bind('resize.simplemodal',function(){w=s.getDimensions();s.setContainerDimensions(true);if(ie6||ieQuirks){s.fixIE();}else if(s.o.modal){s.d.iframe&&s.d.iframe.css({height:w[0],width:w[1]});s.d.overlay.css({height:w[0],width:w[1]});}});},unbindEvents:function(){$('.'+this.o.closeClass).unbind('click.simplemodal');$(document).unbind('keydown.simplemodal');$(window).unbind('resize.simplemodal');this.d.overlay.unbind('click.simplemodal');},fixIE:function(){var s=this,p=s.o.position;$.each([s.d.iframe||null,!s.o.modal?null:s.d.overlay,s.d.container],function(i,el){if(el){var bch='document.body.clientHeight',bcw='document.body.clientWidth',bsh='document.body.scrollHeight',bsl='document.body.scrollLeft',bst='document.body.scrollTop',bsw='document.body.scrollWidth',ch='document.documentElement.clientHeight',cw='document.documentElement.clientWidth',sl='document.documentElement.scrollLeft',st='document.documentElement.scrollTop',s=el[0].style;s.position='absolute';if(i<2){s.removeExpression('height');s.removeExpression('width');s.setExpression('height',''+bsh+' > '+bch+' ? '+bsh+' : '+bch+' + "px"');s.setExpression('width',''+bsw+' > '+bcw+' ? '+bsw+' : '+bcw+' + "px"');}else{var te,le;if(p&&p.constructor==Array){var top=p[0]?typeof p[0]=='number'?p[0].toString():p[0].replace(/px/,''):el.css('top').replace(/px/,'');te=top.indexOf('%')==-1?top+' + (t = '+st+' ? '+st+' : '+bst+') + "px"':parseInt(top.replace(/%/,''))+' * (('+ch+' || '+bch+') / 100) + (t = '+st+' ? '+st+' : '+bst+') + "px"';if(p[1]){var left=typeof p[1]=='number'?p[1].toString():p[1].replace(/px/,'');le=left.indexOf('%')==-1?left+' + (t = '+sl+' ? '+sl+' : '+bsl+') + "px"':parseInt(left.replace(/%/,''))+' * (('+cw+' || '+bcw+') / 100) + (t = '+sl+' ? '+sl+' : '+bsl+') + "px"';}}else{te='('+ch+' || '+bch+') / 2 - (this.offsetHeight / 2) + (t = '+st+' ? '+st+' : '+bst+') + "px"';le='('+cw+' || '+bcw+') / 2 - (this.offsetWidth / 2) + (t = '+sl+' ? '+sl+' : '+bsl+') + "px"';}s.removeExpression('top');s.removeExpression('left');s.setExpression('top',te);s.setExpression('left',le);}}});},focus:function(pos){var s=this,p=pos||'first';var input=$(':input:enabled:visible:'+p,s.d.wrap);input.length>0?input.focus():s.d.wrap.focus();},getDimensions:function(){var el=$(window);var h=$.browser.opera&&$.browser.version>'9.5'&&$.fn.jquery<='1.2.6'?document.documentElement['clientHeight']:$.browser.opera&&$.browser.version<'9.5'&&$.fn.jquery>'1.2.6'?window.innerHeight:el.height();return[h,el.width()];},getVal:function(v){return v=='auto'?0:v.indexOf('%')>0?v:parseInt(v.replace(/px/,''));},setContainerDimensions:function(resize){var s=this;if(!resize||(resize&&s.o.autoResize)){var ch=$.browser.opera?s.d.container.height():s.getVal(s.d.container.css('height')),cw=$.browser.opera?s.d.container.width():s.getVal(s.d.container.css('width')),dh=s.d.data.outerHeight(true),dw=s.d.data.outerWidth(true);var mh=s.o.maxHeight&&s.o.maxHeight<w[0]?s.o.maxHeight:w[0],mw=s.o.maxWidth&&s.o.maxWidth<w[1]?s.o.maxWidth:w[1];if(!ch){if(!dh){ch=s.o.minHeight;}else{if(dh>mh){ch=mh;}else if(dh<s.o.minHeight){ch=s.o.minHeight;}else{ch=dh;}}}else{ch=ch>mh?mh:ch;}if(!cw){if(!dw){cw=s.o.minWidth;}else{if(dw>mw){cw=mw;}else if(dw<s.o.minWidth){cw=s.o.minWidth;}else{cw=dw;}}}else{cw=cw>mw?mw:cw;}s.d.container.css({height:ch,width:cw});if(dh>ch||dw>cw){s.d.wrap.css({overflow:'auto'});}}if(s.o.autoPosition){s.setPosition();}},setPosition:function(){var s=this,top,left,hc=(w[0]/2)-(s.d.container.outerHeight(true)/2),vc=(w[1]/2)-(s.d.container.outerWidth(true)/2);if(s.o.position&&Object.prototype.toString.call(s.o.position)==="[object Array]"){top=s.o.position[0]||hc;left=s.o.position[1]||vc;}else{top=hc;left=vc;}s.d.container.css({left:left,top:top});},watchTab:function(e){var s=this;if($(e.target).parents('.simplemodal-container').length>0){s.inputs=$(':input:enabled:visible:first, :input:enabled:visible:last',s.d.data[0]);if((!e.shiftKey&&e.target==s.inputs[s.inputs.length-1])||(e.shiftKey&&e.target==s.inputs[0])||s.inputs.length==0){e.preventDefault();var pos=e.shiftKey?'last':'first';setTimeout(function(){s.focus(pos);},10);}}else{e.preventDefault();setTimeout(function(){s.focus();},10);}},open:function(){var s=this;s.d.iframe&&s.d.iframe.show();if($.isFunction(s.o.onOpen)){s.o.onOpen.apply(s,[s.d]);}else{s.d.overlay.show();s.d.container.show();s.d.data.show();}s.focus();s.bindEvents();},close:function(){var s=this;if(!s.d.data){return false;}s.unbindEvents();if($.isFunction(s.o.onClose)&&!s.occb){s.occb=true;s.o.onClose.apply(s,[s.d]);}else{if(s.d.placeholder){var ph=$('#simplemodal-placeholder');if(s.o.persist){ph.replaceWith(s.d.data.removeClass('simplemodal-data').css('display',s.display));}else{s.d.data.hide().remove();ph.replaceWith(s.d.orig);}}else{s.d.data.hide().remove();}s.d.container.hide().remove();s.d.overlay.hide().remove();s.d.iframe&&s.d.iframe.hide().remove();s.d={};}}};})(jQuery);


/** VerkiezingenClass */

G_NORMAL_MAP.getMinimumResolution = function () { return 6; };
G_NORMAL_MAP.getMaximumResolution = function () { return 10; };

var qs;
var oCache = {};

var Verkiezingen = function() {
    this.oMap;
    this.oTileLayerOverlay;
    this.sSelectedPartij    = "winnaar";
    this.iSelectedJaar      = 2010;
    this.oPartijen = [];
    this.oBounds = {};
    this.oGemeenteOrder = {order: "alfabet", sort: "asc"};
    
    
    
    this.init = function() {
        
        $.ajaxSetup({
            ifModified: false,
            cache: true
        });    
        
        this.oMap = new GMap2(document.getElementById("map"));
        this.oMap.setMapType(G_NORMAL_MAP);
        this.bLoaderActive = true;
        
        this.oMap.addControl(new GSmallMapControl());
        this.oMap.addControl(new powered_by_geostart(this.oMap));
        
        
        this.oBounds = new GLatLngBounds(new GLatLng(50.7504490, 3.3316000), new GLatLng(53.6756000, 7.2276122) );
        
        this.oMap.setCenter(this.oBounds.getCenter());
        
        this.oMap.setZoom(7);       
               
        //setTimeout("oVerkiezingen.checkResize()", 500);
        
        this.oMap.enableScrollWheelZoom();    // Enable scroll wheel zoom.    

        this.oTileLayerOverlay = this.getTileLayerOverlay();
        this.oMap.addOverlay(this.oTileLayerOverlay);        
        
        this.loadListeners();
        this.updateTitle();
        this.updatePartijenSelect(this.getSelectedJaar());
        oVerkiezingen.getJaarData();
        

        if(sPage) {
            this.showTekst(sPage);
        } else {
            if(!this.checkForGemeenteInUrl()) {
                /*this.showTekst("start");*/
            }
        }
        
        qs = $("#s_gemeenten").quicksearch("#jaar_gemeenten_table tr", {
                selector: 'th a'
            });
            
      
    }
    
    this.checkForGemeenteInUrl = function() {
        if(window.location.hash != "" && window.location != "#") {
            if(window.location.hash.indexOf("-") > -1) {
                var aHash = window.location.hash.split("-");
                
                this.getGemeenteDataByCbsCode(aHash[1], aHash[0].substring(1));
                
            } else {
                this.getGemeenteDataByCbsCode(window.location.hash.substring(1));
            }
            return true;
        }
        
        return false;
    }
    
    this.setGemeenteUrl = function(cbscode, jaar) {
        if(typeof(cbscode) == "undefined") {
            window.location.hash = "";
        } else {
            window.location.hash = jaar + "-" + cbscode;
        }
    }
    
    this.lastUpdate = function() {
        var d = new Date();
        
        var iMinutes    = d.getMinutes();
        var iSeconds    = d.getSeconds();
        var iHours      = d.getHours();
        
        if(iMinutes < 10) {
            iMinutes = "0" + iMinutes;
        }
        
        if(iSeconds < 10) {
            iSeconds = "0" + iSeconds;
        }
        
        if(iHours < 10) {
            iHours = "0" + iHours;
        }
        
        
        $("#lastupdate").css("color", "red").find("span").html(iHours + ":" + iMinutes + ":" + iSeconds);
        
        setTimeout('$("#lastupdate").css("color", "#003964")', 1000);
    }

    
    this.checkUpdate = function() {
        //alert("test");
        
        //setTimeout("oVerkiezingen.checkUpdate()");
    }

    this.setPartijen = function(oPartijen) {
        this.oPartijen = oPartijen;
    }
    
    this.getSelectedPartij = function() {
        return this.sSelectedPartij;
    }
    
    this.setPartij = function(sPartij) {
        this.sSelectedPartij = sPartij;
        this.oTileLayerOverlay.refresh();
        this.updateTitle();
        this.updateLegenda();
    }
    
    this.getSelectedJaar = function() {
        return this.iSelectedJaar;
    }
    
    this.setJaar = function(iJaar) {
        this.iSelectedJaar = iJaar;
        this.oTileLayerOverlay.refresh();
        this.updateTitle();
        this.updateLegenda();
        this.getJaarData();
        $("#jaar_gemeenten_header > table").removeClass().addClass("j" + iJaar);
    }
    
    this.updatePartijenSelect = function(iJaar) {
        var sVorigePartij = $("#s_partij").val();
        
        $.getJSON("ajax/getPartijen.php?jaar=" + iJaar, function(oData){
        /*$.getJSON("static/partijen/" + iJaar + "/partijen.txt", function(oData){*/
            
            var bGotoHuidige    = false;
            
            oVerkiezingen.setPartijen(oData);
            
            $("#s_partij option:not(:first)").remove();            
            
            for(var i in oData) {
                $("#s_partij").append('<option value="' + i + '">' + oData[i] + '</option>');
                if(i == sVorigePartij) {
                    bGotoHuidige = true;
                }
            };
            
            if(bGotoHuidige == true) {
                $("#s_partij").val(sVorigePartij);
                oVerkiezingen.setPartij(sVorigePartij);
            } else {
                $("#s_partij").val("winnaar");
                oVerkiezingen.setPartij("winnaar");
            }
            
            $.uniform.update("#s_partij"); 
            
        });
    }
    
    this.loadListeners = function(){
        
        $("#s_verkiezing").change(function() {
            oVerkiezingen.updatePartijenSelect($(this).val());
            oVerkiezingen.setJaar($(this).val());       
        });
        
        $("#s_partij").change(function() {
            oVerkiezingen.setPartij($(this).val());
        });
        
        
        // Load listener voor de clickevent op de kaartlaag
        GEvent.addListener(this.oMap, 'click', function(oOverlay, oPoint) { 
            oVerkiezingen.showMapLoader();
            if(oVerkiezingen.getSelectedPartij() != false && oPoint) {
                oVerkiezingen.getGemeenteDataByPoint(oPoint);
            }
        });
        
        // Laat de zoomend listener om de legenda bij te werken met nieuwe minmaxwaarden
        GEvent.addListener(this.oMap, 'zoomend', function() {
            return;
            if(oGeoStart.oVerkiezingen.getSelectedPartij() != false) {
                oGeoStart.oVerkiezingen.updateLegenda();
            }                
        });
    }
    
    this.showGemeenteUitslagen = function(sJson, oPoint) {
        this.hideLoader();
        var oData = eval('(' + sJson + ')');
        
        if(oData != -1) {
            $("#mapoverlay").html(oData.html).slideDown("fast");
        }
    }
    
    this.hideOverlay = function() {
        $("#mapoverlay").slideUp("fast", function() { $(this).html(""); });
    }
    
    this.updateTitle = function() {
        /*
        if(this.getSelectedPartij() == "winnaar") {
            sPartij = "De grootste partij";
        } else {
            sPartij = "% " + this.oPartijen[this.getSelectedPartij().toLowerCase()];
        }
        
        
        
        $("#mapheader").html(sPartij + " in " + iJaar);
        
        */
        
        iJaar = this.getSelectedJaar();
        
        $("#s_winnaar").html("Wie won er waar in " + iJaar);
        
        
        $("#partijen_header").html("Uitslagen Tweede Kamerverkiezingen " + iJaar);
                    
            
    }
    
    this.updateLegenda = function() {
        
        if(this.getSelectedPartij() != "winnaar") {
            $.getJSON( "widget/ajax/getLegendaRange.php?partij=" + this.getSelectedPartij() + "&jaar=" + this.getSelectedJaar(), function(oData) {oVerkiezingen.setLegendaData(oData);});
            /*$.getJSON("static/legenda/" + this.getSelectedJaar() + "/" + this.getSelectedPartij().toLowerCase() + ".txt", function(oData){
                oVerkiezingen.setLegendaData(oData);
            });*/
            
        } else {
            /*$.get("static/legenda/" + this.getSelectedJaar() + "/winnaar.html", function(sHtml){
                oVerkiezingen.setGrootstePartijen(sHtml);
            });            */
            $.getJSON("widget/ajax/getGrootstePartijen.php?jaar=" + this.getSelectedJaar(), function(oData){
                oVerkiezingen.setGrootstePartijen(oData.html);
            });
        }
    }
    
    this.setLegendaData = function(oData) {
        $("#partijenlist").css("display", "none");
        $("#schaal").css("display", "block");
        document.getElementById("stat_schaal_min").innerHTML = oData.min;
        document.getElementById("stat_schaal_max").innerHTML = oData.max;
    }    
    
    this.setGrootstePartijen = function(sHtml) {
        $("#schaal").css("display", "none");
        $("#partijenlist").css("display", "block");
        $("#partijenlist").html(sHtml);
        
    }
    
    this.getGemeenteDataByCbsCode = function(cbscode, jaar) {
        if(typeof(jaar) == "undefined") {
            jaar = this.getSelectedJaar();
        }
        $.modal('<img class="gem_loader" src="images/loader_white.gif" alt="loading..." />', {overlayClose: true,onClose: function() {
                        oVerkiezingen.setGemeenteUrl();
                        $.modal.close();
                    }});

        $.getJSON('ajax/getGemeenteInfo.php?jaar=' + jaar + '&cbscode=' + cbscode, function(oData) {
            $("#simplemodal-data").html(oData.html);
            oVerkiezingen.setGemeenteUrl(cbscode, jaar);
        });
    }
    
    this.getGemeenteDataByPoint = function(oPoint) {
        /*$.getJSON("ajax/getGemeenteInfo.php?lat=" + oPoint.lat() + "&lng=" + oPoint.lng() + "&jaar=" + this.getSelectedJaar(), function(data) {
            oVerkiezingen.hideMapLoader();
            if(data == -1) {
                return false;
            }
            
            $.modal(data.html, {overlayClose: true});
        });        */
        
        $.ajax({
            ifModified: false,
            url: 'http://tile01.swis.nl/proxy/verkiezingskaart/getCbsCodeByGeo.php',
            dataType: 'jsonp',
            data: "lat=" + oPoint.lat() + "&lng=" + oPoint.lng() + "&jaar=" + this.getSelectedJaar(),
            success: function(mData) {
                oVerkiezingen.hideMapLoader();
                
                if(mData !== false) {
                    oVerkiezingen.getGemeenteDataByCbsCode(mData);
                } else {
                    return;
                }
                    
                
            }
        });
            
        
        return false;
    }    
    
    this.setGemeentenOrder = function(sOrder) {
        if(this.oGemeenteOrder.order == sOrder) {
            if(this.oGemeenteOrder.sort == "asc") {
                this.oGemeenteOrder.sort = "desc";
            } else {
                this.oGemeenteOrder.sort = "asc";
            }
        } else {
            this.oGemeenteOrder.sort = "asc"; 
            this.oGemeenteOrder.order = sOrder;
        }
        
        $("#jaar_gemeenten_header th").removeClass("desc").removeClass("asc");

        $("#jaar_gemeenten_header").find("th." + sOrder).addClass(this.oGemeenteOrder.sort);
        
        this.getGemeenteLijst();
        
        return false;
  
    }
    
    
    
    this.showTekst = function(sPagina) {
        _gaq.push(['_trackEvent', 'Paginas', sPagina]);
        
        /*$.modal('<img class="gem_loader" src="images/loader_white.gif" alt="loading..." />', {
            overlayClose: true,
            containerCss:{
                height:500,
                width:700
            }
        });*/
        
        /*$.getJSON("ajax/getTekst.php?pagina=" + sPagina, function(data) {
            $("#simplemodal-data").html(data.html);
            
            $("a[rel=external]").each(function(i){
                this.target="_blank";
            });
            
        });*/
        
        /*$.get("static/tekstpagina/" + sPagina + ".html", function(html) {
            $.modal(html, {
            overlayClose: true,
            containerCss:{
                height:500,
                width:700
            } } );
            
            $("a[rel=external]").each(function(i){
                this.target="_blank";
            });
                        
        });*/
        
        $.ajax({
            ifModified: false,
            url: "static/tekstpagina/" + sPagina + ".html", 
            success: function(html) {
                $.modal(html, {
                    overlayClose: true,
                    onShow: function() {
                        if(sPagina == "embedkaart") {
                            oVerkiezingen.oEmbedKaart = new EmbedKaart();
                            oVerkiezingen.oEmbedKaart.init();
                        }
                    },
                    containerCss:{
                        height:500,
                        width:700
                    } } );
                    
             }
        });
            
    }
    
    this.getJaarData = function() {
        this.getPartijenGrafiek();
        this.getGemeenteLijst();
        
    }
    
    this.getPartijenGrafiek = function() {
        
        if(this.bJaarPartijenBusy === true) {
            return;
        }
    
        
        this.bJaarPartijenBusy = true;
        
        $.getJSON('ajax/getJaarPartijen.php?jaar=' + this.getSelectedJaar(), function(oData) {
        
            $("#uitslagen .loader").css("display", "none");
            $("#jaar_partijen").html(oData.html);
            oVerkiezingen.bJaarPartijenBusy = false;
        });
    }        

    this.getGemeenteLijst = function() {
    
        if(this.bJaarGemeentenBusy === true) {
            return;
        }
            
         $("#jaar_gemeenten .loader").css("display", "block");  
         /*$("#jaar_gemeenten_table_container").html("");*/
         
        $.getJSON("ajax/getJaarGemeenten.php?order=" + this.oGemeenteOrder.order + "&sort=" + this.oGemeenteOrder.sort + "&jaar=" + this.getSelectedJaar(), function(data) {
            $("#jaar_gemeenten .loader").css("display", "none");
            $("#jaar_gemeenten_table_container").html(data.html);
            //document.getElementById("jaar_gemeenten_table_container").innerHTML = data.html;
            qs.cache();
        });
        /*
        $("#jaar_gemeenten_table_container").load('static/overzicht/' + this.getSelectedJaar() + '/' + this.oGemeenteOrder.order + '_' + this.oGemeenteOrder.sort + ".html", function() {
            
            $("#jaar_gemeenten .loader").css("display", "none");
            qs.cache();
        });*/
        
        /** STATIC */
        
        /*
        
        $.ajax({
            url: 'static/overzicht/' + this.getSelectedJaar() + '/' + this.oGemeenteOrder.order + '_' + this.oGemeenteOrder.sort + '.html',
            dataType: 'html',
            ifModified: true,
            success: function(sHtml, successCode) {
                if (successCode != 'notmodified'){
                    oCache['static/overzicht/' + oVerkiezingen.getSelectedJaar() + '/' + oVerkiezingen.oGemeenteOrder.order + '_' + oVerkiezingen.oGemeenteOrder.sort + '.html'] = sHtml;
                } else {
                    if(typeof(oCache['static/overzicht/' + oVerkiezingen.getSelectedJaar() + '/' + oVerkiezingen.oGemeenteOrder.order + '_' + oVerkiezingen.oGemeenteOrder.sort + '.html']) != "undefined") {
                        sHtml = oCache['static/overzicht/' + oVerkiezingen.getSelectedJaar() + '/' + oVerkiezingen.oGemeenteOrder.order + '_' + oVerkiezingen.oGemeenteOrder.sort + '.html'];
                    }
                }
                
                $("#jaar_gemeenten .loader").css("display", "none");
                $("#jaar_gemeenten_table_container").html(sHtml);
                qs.cache();
            },
            complete: function() {
                oVerkiezingen.lastUpdate();                
                oVerkiezingen.bJaarGemeentenBusy = false;
            }
        });     
     */   
        
    }
        
    /** methode om de kaartlaag op te halen van de mapserver **/
    this.getTileLayerOverlay = function() { 
        var oTileLayer = new GTileLayer(new GCopyrightCollection(), 0, 17);
        
        oTileLayer.getTileUrl = function(oTile, iZoom) {
            if(iZoom == 7   && !(oTile.x== 65 && oTile.y == 42) 
                            && !(oTile.x == 66 && oTile.y == 42) 
                            && !(oTile.x == 65 && oTile.y == 41) 
                            && !(oTile.x == 66 && oTile.y == 41)
                            ){
                return "";
            }
            
            if(oVerkiezingen.getSelectedPartij() != false) {
                var sUrl = "http://mt1.tile01.swis.nl/verkiezingen/" + oVerkiezingen.getSelectedJaar() + "/" + oVerkiezingen.getSelectedPartij() + "_"+oTile.x+"_"+oTile.y+"_"+iZoom+".gif";
                return sUrl;
            } else {
                return "";
            }
        };
        
        //@TODO: opacity in oSettings?
        oTileLayer.getOpacity = function() {return 1;}
        oTileLayer.isPng = function() {return true;}
        
        return new GTileLayerOverlay(oTileLayer);
    }    
    
    this.showMapLoader = function() {
        $("#maploader").css("display", "block");
    }
    
    this.hideMapLoader = function() {
        $("#maploader").css("display", "none");
    }
    
    this.showLoader = function() {
        this.bLoaderActive = true;
        $(".loader").css("display", "block");
    }
    
    this.hideLoader = function() {
        this.bLoaderActive = false;
        $(".loader").css("display", "none");
    }
    
    
}

function EmbedKaart(){
    
    
    this.iWidth = 366;
    this.iHeight = 550;
    
    this.iFrame = document.getElementById('embedkaart');
    
    this.eLoader = document.getElementById('embed_loader');
    this.eEmbedCode =  document.getElementById('mapmakerEmbedCode');
    
    this.sTitel = false;
    
    
    this.getTitel = function(){    
        if(this.sTitel === false) {
            if(oVerkiezingen.getSelectedPartij() == "winnaar") {
                sPartij = "Wie won er waar in " + oVerkiezingen.getSelectedJaar();
            } else {
                sPartij = "% " + oVerkiezingen.oPartijen[oVerkiezingen.getSelectedPartij().toLowerCase()];
            }
            this.sTitel = sPartij;
        }
        return this.sTitel;
    }

    
    this.init = function(){
        if(this.iFrame == null){
            this.iFrame = document.getElementById('embedkaart');
        }
    
        if(this.eLoader == null){
            this.eLoader = document.getElementById('embed_loader');
        }
        
        if(this.eEmbedCode == null){
            this.eEmbedCode =  document.getElementById('mapmakerEmbedCode');
        }

        
        //this.iFrame.src = 'http://localhost/verkiezingskaart/' + this.getUrlFromMain();
        this.iFrame.src = sBaseUrl + this.getUrlFromMain();
        
        var eLoader = this.eLoader;
        
        setInterval('oVerkiezingen.oEmbedKaart.checkMapChange()', 500);
        
        this.initForm();
        
        
        
        
        
        
    }
    
    this.checkMapChange = function(){
        
        if(     this.iFrame && 
                this.iFrame.contentWindow && 
                this.iFrame.contentWindow.oVerkiezingen && 
                this.iFrame.contentWindow.oVerkiezingen.oMap ){
            
            this.eLoader.style.visibility = "hidden";
            
            this.fLng = this.iFrame.contentWindow.oVerkiezingen.oMap.getCenter().lng();
            this.fLat = this.iFrame.contentWindow.oVerkiezingen.oMap.getCenter().lat();
            
            this.iZoom = this.iFrame.contentWindow.oVerkiezingen.oMap.getZoom();
            
            this.sSelectedPartij = this.iFrame.contentWindow.oVerkiezingen.sSelectedPartij;
            this.iSelectedJaar = this.iFrame.contentWindow.oVerkiezingen.iSelectedJaar;
            
            this.eEmbedCode.value = this.getEmbedCode();
        }
    }

    this.getUrlFromMain = function(){
        // embed/350/350/2003/pvda/52.2/4.4/11.html
        
        this.fLng = oVerkiezingen.oMap.getCenter().lng();
        this.fLat = oVerkiezingen.oMap.getCenter().lat();
        
        this.iZoom = oVerkiezingen.oMap.getZoom();
        this.sSelectedPartij = oVerkiezingen.sSelectedPartij;
        this.iSelectedJaar = oVerkiezingen.iSelectedJaar;
        this.sTitel = this.getTitel();
        
        return this.getUrl();
        
        //return 'embed/' + this.iWidth + '/' + this.iHeight + '/' + oVerkiezingen.iSelectedJaar + '/' + oVerkiezingen.sSelectedPartij + '/' + oVerkiezingen.oMap.getCenter().lat() + '/' + oVerkiezingen.oMap.getCenter().lng() + '/' + oVerkiezingen.oMap.getZoom() + '.html';
        
    }
    
    /**
    *   URL opbouwen
    */    
    this.getUrl = function(){
        return 'embed/' + this.iWidth + '/' + this.iHeight + '/' + this.iSelectedJaar + '/' + this.sSelectedPartij + '/' + this.fLat + '/' + this.fLng + '/' + this.iZoom + '/' + escape(this.getTitel()) + '.html';
    }
        
    
    /**
    *   Embed code genereren.
    */
    this.getEmbedCode = function(){
        var sIframeHtml  = '';
        sIframeHtml      = '<iframe width="'+this.iWidth+'" height="'+this.iHeight+'" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="' + sBaseUrl + this.getUrl() + '"></iframe>';
        return sIframeHtml;
    }
     
    
    this.resizeMapmaker = function(iWidth, iHeight){
        
        this.eLoader.style.visibility = "visible";
        
        this.iWidth = iWidth;
        this.iHeight= iHeight;
        
        this.iFrame.style.width = iWidth + "px";
        this.iFrame.style.height = iHeight + "px";
        
        
        this.iFrame.src = this.getUrl();
                        
    }
    

    /**
    *   Formulier listeners initialiseren.
    */
    this.initForm = function(){
        var self = this;
        
        self._setEnabledInput(false);
        
        self.aFormListeners = [];
        
        self.aFormListeners[self.aFormListeners.length] = GEvent.addDomListener(document.getElementById('map_grootte_klein'), 'click', function(){
            self.resizeMapmaker(350, 300);
            self._setEnabledInput(false);
        });
        
        self.aFormListeners[self.aFormListeners.length] = GEvent.addDomListener(document.getElementById('map_grootte_middel'), 'click', function(){
            self.resizeMapmaker(366, 550);
            /*this.iWidth = 366;
            this.iHeight = 478;*/
            self._setEnabledInput(false);
        });
        
        self.aFormListeners[self.aFormListeners.length] = GEvent.addDomListener(document.getElementById('map_grootte_groot'), 'click', function(){
            self.resizeMapmaker(640, 480);
            self._setEnabledInput(false);
        });
        
        self.aFormListeners[self.aFormListeners.length] = GEvent.addDomListener(document.getElementById('map_grootte_aangepast'), 'click', function(){
        //document.getElementById('map_grootte_aangepast').onclick = function(){
            var iHeight = document.getElementById('map_hoogte').value;
            var iWidth = document.getElementById('map_breedte').value;
            self.resizeMapmaker(iWidth, iHeight);
            self._setEnabledInput(true);
            
            self.aFormListeners[self.aFormListeners.length] = GEvent.addDomListener(document.getElementById('map_hoogte'), 'change', function(){
                self.setCustomGrootte();
            });
            
            self.aFormListeners[self.aFormListeners.length] = GEvent.addDomListener(document.getElementById('map_breedte'), 'change', function(){
                self.setCustomGrootte();
            });
        });
        
        
        document.getElementById('map_titel_input').value = this.getTitel();
        
        self.aFormListeners[self.aFormListeners.length] = GEvent.addDomListener(document.getElementById('map_titel_input'), 'change', function(){
            self.update();
        });
        
        self.aFormListeners[self.aFormListeners.length] = GEvent.addDomListener(document.getElementById('map_titel_input'), 'keyup', function(){
            var sTitle = document.getElementById('map_titel_input').value;
            document.getElementById("embedkaart").contentWindow.document.getElementById('map_titel').innerHTML = sTitle;
            self.sTitel = sTitle;
        });
    }        
    
    /**
    *   Custom grootte uitlezen en het voorbeeld aanpassen.
    */
    this.setCustomGrootte = function(){
        if(document.getElementById('map_grootte_aangepast').checked === true){
            var iHeight = document.getElementById('map_hoogte').value;
            var iWidth = document.getElementById('map_breedte').value;
            this.resizeMapmaker(iWidth, iHeight);            
            
        }
    }
    
    /**
    *   De aangepaste grootte inputs aan en uit zetten
    */
    this._setEnabledInput = function(bEnabled){
        if(bEnabled === true){
            sEnabled = '';
        } else {
            sEnabled = 'disabled'
        }
        document.getElementById('map_hoogte').disabled = sEnabled;
        document.getElementById('map_breedte').disabled = sEnabled;
            
    }
    
    
}
