window.defaultStatus = "Breedbandgekte.nl"
var alles;
var TFE = new Object();
TFE.AjaxLister = Class.create();
TFE.AjaxLister.prototype = {

	// Constructor
	initialize: function(divid) {		
		scope = this;		
	  this.container = document.getElementById(divid);
		this.objList = new Array();
		this.sortString = '';
		this.sortBy = '';
		this.descasc = '';
		this.type = '';					
		this.filterArray = new Array();
		this.running = false;		
	},
	
	//mergeData
	getData: function(url) {
		this.objList = new Array();		
		var uuid = (Math.random() * 256).toString(16);
		var pars = 'uuid=' + uuid;		
        
		var myAjax = new Ajax.Request(
				url, 
				{
					method: 'get', 
					parameters: pars, 
					onComplete: function(originalRequest) {
						//plaats items in container
						var items = originalRequest.responseXML.documentElement.childNodes;
						var numb = 0;
						for(var i=0; i<items.length; i++ ) {
							if (items[i].nodeType == 1) {
								scope.createItem(items[i],numb++);
							}
						}				
						
						//Set default sort when sortString is empty
						if(scope.sortString == '') {							
							scope.restoreSortObjList('totaal','desc','numeric');
						} else {							
							scope.restoreSortObjList(scope.sortBy,scope.descasc,scope.type);						
						}					
											
						scope.showObjList();																															
					},					
				    onFailure: function(t) {
						$('alert').innerHTML = '<h1>Error ' + t.status + '<\/h1><p>' + t.statusText + ' <\/p>';
						Element.show('alert');
				    }					
				});	
	},

	//createItem
	createItem: function(xmlObject,numb) {
		if (xmlObject.tagName == 'product') {
			//maak object
			var itemobj = new Object();
			var fields = xmlObject.childNodes;
			for(var f=0; f<fields.length; f++ ) {
      
				if (fields[f].firstChild) nodeValue = fields[f].firstChild.nodeValue;
				else nodeValue =  '';
				itemobj[fields[f].tagName] = nodeValue;
			}
			
			var html = '<div'
      
           if (itemobj.waarde==9999){
             html += ' class="rowtip" id="row1" style="cursor:pointer" onclick="showProduct(' + itemobj.productid + ')" onmouseout="this.style.backgroundColor=\'#FFFF99\'" onmouseover="this.style.backgroundColor=\'#E5E5E5\';">';
           }
           else {    
             html += ' class="row" id="row1" style="cursor:pointer" onclick="showProduct(' + itemobj.productid + ')"    onmouseout="this.style.backgroundColor=\'#FFEBCC\'" onmouseover="this.style.backgroundColor=\'#E5E5E5\';">';
           }    
           
			     html += '<div class="column1"><span class="number">@numb@<\/span><\/div>';
			     html += '<div class="column2"><span class="title">&euro; ' + itemobj.totaal.replace('.', ',') + ' 1e jr. <\/span>&euro; ' + itemobj.prijspermaand.replace('.', ',')  + ' per maand<\/div>';
			     html += '<div class="column3"><span class="title">' + itemobj.naamprovider + ' - ' + itemobj.naamproduct + '<\/span>' + itemobj.aktietekst ;
       
            if	(itemobj.voip > 0 ){
              if (itemobj.goedkoopbellen!="n.v.t." ){
               if (itemobj.aktietekst) { 
                html +='<br>';
               }
                html +='<b>Gratis bellen naar vast?</b> ' + itemobj.goedkoopbellen;
              }
            }
           html += '<\/div>';
			     html += '<div class="column4">' + itemobj.typeverbinding + '<\/div>';
			     html += '<div class="column5">' + itemobj.downstream + ' \/ ' + itemobj.upstream + '<\/div>';
			     html += '<div class="column6">';
			  	 
           if	(itemobj.aanmelden.length > 0){
			       html += '<div class="buttonSwitchList"><a href="' + itemobj.aanmelden + '"'
             if (itemobj.aanmelden.indexOf("cl2.asp")>0) {
              html += ' target="_blank"'
             }
             html += '>Meer info<\/a><\/div>';
           }
         	 if	(itemobj.aanmelden.length > 0) {
			       		html += '<div class="buttonOrderList"><a href="' + itemobj.aanmelden + '#bestellen"'
             if (itemobj.aanmelden.indexOf("cl2.asp")>0) {
              html += ' target="_blank"'
             }
                html += '>Bestellen<\/a><\/div>';
           }
			     html += '</div>';
			     html += '<div class="clear"><\/div>';
			   html += '<\/div>';
			   html += '<div class="line"><\/div>';

			var itemdiv = document.createElement('div');
			itemdiv.innerHTML = html;
			itemobj.htmlcontent = itemdiv;
			
			scope.objList.push(itemobj);
			return true;		
		}
	},

	//showObjList
	showObjList: function() {
		//scope.running = true;
		scope.removeObjList();
		scope.container.innerHTML= '';
		var numb = 1;
    var r = 0;
		try {
			scope.setRunning(true);
			for(var i=0; i<scope.objList.length; i++ ) {
				showit = true;
    	  // Max 10 regels laten zien bij binnen komst.
        if ( r>9 && alles!=true ) {
						showit = false;
				}
          
				for (var f=0; f<scope.filterArray.length; f++) {
          
					if (('gratisinstallatiemonteur,gratisdraadloosmodem,virusscanopmail,proefperiode,gratisbellen').indexOf(scope.filterArray[f]) !=-1 && scope.objList[i][scope.filterArray[f]] != 1) {
						showit = false;
					}
					if (('downstream').indexOf(scope.filterArray[f]) !=-1 && scope.objList[i][scope.filterArray[f]] < 999) {
						showit = false;
					}
					if (('kpnlijn').indexOf(scope.filterArray[f]) !=-1 && scope.objList[i][scope.filterArray[f]] == 'ja') {
						showit = false;
					}
					if (('typeverbinding').indexOf(scope.filterArray[f]) !=-1 && scope.objList[i][scope.filterArray[f]] != $('typeverbinding').value) {
						showit = false;
					}
				}
				if (showit) {
          			r=r+1;
					//plaats regelnummer
					var itemdiv = document.createElement('div');
					itemdiv.innerHTML = scope.objList[i].htmlcontent.innerHTML.replace('@numb@',(numb++));
					scope.container.appendChild(itemdiv);
				}
			}
		} finally {
			scope.setRunning(false);
		}
	},
		
	//removeObjList
	removeObjList: function() {
		var childs = scope.container;
		for(var i=0; i<childs.length; i++ ) {
			scope.container.removeChild(childs[i]);
		}
	},	
		
	//sortObjList
	sortObjList: function(sortby,descasc,type) {
		var switchDescasc = descasc.toLowerCase();				
		
		if (scope.sortString != (sortby+descasc+type)) {
			for (var i=0; i<(scope.objList.length-1); i++) {
	        	for (var j=i+1; j<scope.objList.length; j++) {
					if (type.toLowerCase() == 'string') {
			            ifstat = (scope.objList[j][sortby].toLowerCase() < scope.objList[i][sortby].toLowerCase());
					} else if (type.toLowerCase() == 'numeric') {
			            ifstat = (parseFloat(scope.objList[j][sortby]) < parseFloat(scope.objList[i][sortby]));
					} else {
			            ifstat = ((scope.objList[j][sortby]) < (scope.objList[i][sortby]));
					}
		            if (ifstat) {
		                var dummy = scope.objList[i];
		                scope.objList[i] = scope.objList[j];
		                scope.objList[j] = dummy;
		            }
				}
			}
			//	subsortering op prijs bij downstream
			if(sortby=='downstream')
				doSubSort(scope.objList, 'desc', 'totaal', 'downstream');

			//	subsortering op downstream bij prijs
			if(sortby=='totaal')
				doSubSort(scope.objList, 'asc', 'downstream', 'totaal');

			//	subsortering op prijs bij populariteit
			if(sortby=='waarde')
				doSubSort(scope.objList, 'desc', 'totaal', 'waarde');
							
			if (descasc.toLowerCase() == 'asc') {
				scope.objList.reverse();
			}
		} else {
			scope.objList.reverse();

			//	subsortering op prijs bij downstream
			if(sortby=='downstream') 
				doSubSort(scope.objList, 'asc', 'totaal', 'downstream');

			//	subsortering op downstream bij prijs
			if(sortby=='totaal')
				doSubSort(scope.objList, 'asc', 'downstream', 'totaal');
			
			if(sortby=='waarde')
				doSubSort(scope.objList, 'asc', 'totaal', 'waarde');			
				
			if(descasc.toLowerCase() == 'asc')
				switchDescasc = 'desc';
			else if (descasc.toLowerCase() == 'desc')
				switchDescasc = 'asc';
		}	
		
		scope.sortString = (sortby+descasc+type);
		//Set last sorting order
		scope.sortBy = sortby;		
		scope.descasc = switchDescasc;		
		scope.type = type;
	},
	
	//Restore sortering Object List
	restoreSortObjList: function(sortby,descasc,type) {
		for (var i=0; i<(scope.objList.length-1); i++) {
        	for (var j=i+1; j<scope.objList.length; j++) {
				if (type.toLowerCase() == 'string') {
		            ifstat = (scope.objList[j][sortby].toLowerCase() < scope.objList[i][sortby].toLowerCase());
				} else if (type.toLowerCase() == 'numeric') {
		            ifstat = (parseFloat(scope.objList[j][sortby]) < parseFloat(scope.objList[i][sortby]));
				} else {
		            ifstat = ((scope.objList[j][sortby]) < (scope.objList[i][sortby]));
				}
	            if (ifstat) {
	                var dummy = scope.objList[i];
	                scope.objList[i] = scope.objList[j];
	                scope.objList[j] = dummy;
	            }
			}
		}		
		
		if (descasc.toLowerCase() == 'asc') {			
			scope.objList.reverse();
		}		
		
		scope.sortString = (sortby+descasc+type);
		//Set last sorting order
		scope.sortBy = sortby;
		scope.descasc = descasc;
		scope.type = type;
	},	

	//sortMoveObjList
	sortMoveObjList: function(sortby,descasc,type) {		
		if (!scope.running) {			
			scope.setRunning(true);
			//sort list
			scope.sortObjList(sortby,descasc,type);
			scope.showObjList();
		}
	},
	
	//resetShowObjList
	resetShowObjList: function(sortby,descasc,type) {
		//Set runningscope to false, when the page is in the init state
		scope.setRunning(false);			
		if (!scope.running) {			
			scope.setRunning(true);
			//sort list
			scope.restoreSortObjList(sortby,descasc,type);					
			scope.showObjList();
		}
	},	
		
	//filterObjList
	filterObjList: function(label,checked) {
		scope.setRunning(true);
		try {
			for (var f=0; f<scope.filterArray.length; f++) {
				if (scope.filterArray[f] == label) {
					scope.filterArray.splice(f,1);
				}
			}
			if(checked) {
				scope.filterArray.push(label);
			} else {
				for (var f=0; f<scope.filterArray.length; f++) {
					if (scope.filterArray[f] == label) {
						scope.filterArray.splice(f,1);
					}
				}
			}
		}
		finally {
			scope.showObjList();
		}
	},
	
	//setRunning
	setRunning: function(state) {
		scope.running = state;
		$A(document.getElementsByTagName('input')).each(function(input) {
		      input.disabled = state;
		});
		
		//show/hide alert
		if(state) {
			$('alert').innerHTML = '<h1>Even geduld s.v.p.<\/h1><p>Op dit moment wordt de beschikbaarheid van breedband internet in &eacute;&eacute;n keer gecontroleerd bij de verschillende internet providers.<br><br>Bezig met het laden van het overzicht. . . .<br><center><img src="../images/loader.gif" alt=""  border="0"></center><\/p>';
			Element.show('alert');
		} else {
			Element.hide('alert');	
  		}
	}, 	
	
	//getSortingOrder
	getSortingOrder: function() {		
		return scope.descasc;
	}
		
};

//Do search
function dosearch()
{
// document.getElementById('huisnr').value = document.getElementById('maincontainer').style.height;

	myAjaxLister.setRunning(true);
	var cijfers = document.getElementById('cijfers').value;
	var letters = document.getElementById('letters').value;
	var huisnr = document.getElementById('huisnr').value;
	var voip = document.getElementById('voip1').checked;
      
 	var zoek = document.getElementById('zoek').value;
  	var ref  = document.getElementById('ref').value;
	
	if (!voip) {
		$('gratisbellendiv').checked = false;
		Element.hide('gratisbellendiv');
		Element.show('proefperiodediv');	
		$('tabinternet').className = 'tabActive';
		$('tabinternet').innerHTML = 'Internet';
		$('tabinternetbellen').className = 'tabEnabled';
		$('tabinternetbellen').innerHTML = '<a href="javascript:dotab(\'tabinternetbellen\');">Internet + bellen<\/a>';
		
		//Dit is een lokale test url (dit vanwege cross-domain security)
		//var searchurl = 'xml/bbgekte_internet.xml?cijfers=' + cijfers + '&letters=' + letters + '&huisnr=' + huisnr + '&voip=0';
		
		//Dit is de url voor live
		var searchurl = 'xmlfeeds/breedbandinternet.asp?cijfers=' + cijfers + '&letters=' + letters + '&huisnr=' + huisnr + '&voip=0&ref='+ref + '&zoek='+zoek ;
	} else {
		$('proefperiodediv').checked = false;
		Element.hide('proefperiodediv');	
		Element.show('gratisbellendiv');
		$('tabinternet').className = 'tabEnabled';
		$('tabinternet').innerHTML = '<a href="javascript:dotab(\'tabinternet\');">Internet<\/a>';
		$('tabinternetbellen').className = 'tabActive';
		$('tabinternetbellen').innerHTML = 'Internet + bellen';

		//Dit is een lokale test url (dit vanwege cross-domain security)
		//var searchurl = 'xml/bbgekte_internetbellen.xml?cijfers=' + cijfers + '&letters=' + letters + '&huisnr=' + huisnr + '&voip=1';
		
		//Dit is de url voor live
		var searchurl = 'xmlfeeds/breedbandinternet.asp?cijfers=' + cijfers + '&letters=' + letters + '&huisnr=' + huisnr + '&voip=1&ref='+ref + '&zoek='+zoek;
	}
	
	myAjaxLister.getData(searchurl);
 
	//zet filters
	myAjaxLister.filterArray = new Array();
	$A(document.getElementsByTagName('input')).each(function(input) {
		if (input.type == 'checkbox') {
			if (input.checked) {
				myAjaxLister.filterArray.push(input.name);
			}
		}
	});
	if ($('typeverbinding').value != '') {
		myAjaxLister.filterArray.push('typeverbinding');
	}
}

//Do filter
function dofilter(label,checked)
{
	myAjaxLister.setRunning(true);
	myAjaxLister.filterObjList(label,checked);
}

//Do sort
function dosort(numb)
{
	document.getElementById('sort1').className = '';
	document.getElementById('sort2').className = '';
	document.getElementById('sort3').className = '';
	if (numb == 1) {
		document.getElementById('sort1').className = 'active';
		myAjaxLister.sortMoveObjList('totaal','desc','numeric');
		setCookieVars(numb);	
	}
	else if (numb == 2) {
		document.getElementById('sort2').className = 'active';
		myAjaxLister.sortMoveObjList('downstream','asc','numeric');
		setCookieVars(numb);				
	}
	else if (numb == 3) {
		document.getElementById('sort3').className = 'active';
		myAjaxLister.sortMoveObjList('waarde','asc','numeric');
		setCookieVars(numb);			
	}	
}

function resetsort(numb,sortorder){
	document.getElementById('sort1').className = '';
	document.getElementById('sort2').className = '';
	document.getElementById('sort3').className = '';	
	
	if (numb == 1) {
		document.getElementById('sort1').className = 'active';					
		myAjaxLister.resetShowObjList('totaal',sortorder,'numeric');		
		setCookieVars(numb);		
	}
	else if (numb == 2) {
		document.getElementById('sort2').className = 'active';
		myAjaxLister.resetShowObjList('downstream',sortorder,'numeric');			
		setCookieVars(numb);			
	}
	else if (numb == 3) {
		document.getElementById('sort3').className = 'active';
		myAjaxLister.resetShowObjList('waarde',sortorder,'numeric');			
		setCookieVars(numb);		
	}
}

function setCookieVars(numb) {
	setcookie('sort',numb);
	setcookie('sortingorder',scope.getSortingOrder());
}

//Do tab
function dotab(tabnam)
{	
	if (tabnam == 'tabinternet') {
		document.getElementById('voip0').checked = true;
	} else {
		document.getElementById('voip1').checked = true;

	}   
   alles=false;
   dosearch();
}

//Show all
function showAll()
{
  if (alles==true) {
    alles=false;
    document.getElementById('showAll').innerHTML='<a href="#" onclick="showAll();return false;">Toon alle pakketten</a>';
    //checkboxen worden op false gezet willen we dit ? [sjoerd]
  	$A(document.getElementsByTagName('input')).each(function(input) {
  		if (input.type == 'checkbox') {
  			input.checked = false;
  		}
  	});
  }
  else {
    alles=true;
    document.getElementById('showAll').innerHTML='<a href="#" onclick="showAll();return false;">Toon 10 pakketten</a>';
    //checkboxen worden op false gezet willen we dit ? [sjoerd]
  	$A(document.getElementsByTagName('input')).each(function(input) {
  		if (input.type == 'checkbox') {
  			input.checked = false;
  		}
  	});
  }
	dosearch();
}

//Show product
function showProduct(productid)
{
	var cijfers = document.getElementById('cijfers').value;
	var letters = document.getElementById('letters').value;
	var huisnr = document.getElementById('huisnr').value;
	var voip0 = document.getElementById('voip0').checked;
	var voip1 = document.getElementById('voip1').checked;
	var kpnlijn = document.getElementById('kpnlijn').checked;
	var gratisinstallatiemonteur = document.getElementById('gratisinstallatiemonteur').checked;
	var gratisdraadloosmodem = document.getElementById('gratisdraadloosmodem').checked;
	var virusscanopmail = document.getElementById('virusscanopmail').checked;
	var downstream = document.getElementById('downstream').checked;
	var proefperiode = document.getElementById('proefperiode').checked;
	var gratisbellen = document.getElementById('gratisbellen').checked;
	var typeverbinding = document.getElementById('typeverbinding')[document.getElementById('typeverbinding').selectedIndex].value;
	
	//Url aanpassen voor volgpagina
	var produrl = 'abonnement.asp?ref=800&productid=' + productid + '&cijfers=' + cijfers + '&letters=' + letters;
	produrl = produrl + '&huisnr=' + huisnr + '&voip0=' + voip0 + '&voip1=' + voip1 + '&kpnlijn=' + kpnlijn;
	produrl = produrl + '&gratisinstallatiemonteur=' + gratisinstallatiemonteur + '&gratisdraadloosmodem=' + gratisdraadloosmodem;
	produrl = produrl + '&virusscanopmail=' + virusscanopmail + '&downstream=' + downstream + '&proefperiode=' + proefperiode;
	produrl = produrl + '&gratisbellen=' + gratisbellen + '&typeverbinding=' + typeverbinding;
	window.location=produrl;
}


//Pre load
var myAjaxLister;
Event.observe(window, 'load', init, false);

function init() {
	if($('maincontainer')) {				
		myAjaxLister = new TFE.AjaxLister('maincontainer');						
		dosearch();		
    	//Set active sorting
		setInitSorting();
		//Restore
		restoreSorting();					
	} else {
		if($('alert')) {
			Element.hide('alert');
		}
	}	
}
//Pre load sorting
function setInitSorting() {	
	var sortFromCookie = getcookie('sort');
	defaultSort = 'sort1';	
	if	(sortFromCookie.length > 0) {
		defaultSort='sort'+sortFromCookie;
	}
	
	document.getElementById('sort1').className = '';
	document.getElementById('sort2').className = '';
	document.getElementById('sort3').className = '';
	//Set goedkoopste as default sorting
	document.getElementById(defaultSort).className = 'active';
}

function openpopup(url,w,h)
{
	var winl = (screen.width - w) / 2;
	var wint = (screen.height - h) / 2;
	window.open(url, '_blank', 'menubar=0,location=0,scrollbars=no,resizable=0,status=0,width='+w+',height='+h+',top='+wint+',left='+winl); 
}

var veldlengte=0;
function TabNext(obj,event,len,next_field) {
	if (event == "down") {
		veldlengte=obj.value.length;
    	obj.style.backgroundColor="#FFFF99";
      obj.style.borderColor="#000000";
		}
  if (event == "done") {
      obj.style.backgroundColor="#FFFFFF";
      obj.style.borderColor="#a0a0a0";
  }
	if (event == "up") {
		if (obj.value.length != veldlengte) {
			veldlengte=obj.value.length;
			if (veldlengte == len) {
        obj.style.backgroundColor="#FFFFFF";
        obj.style.borderColor="#a0a0a0";
				next_field.focus();
				next_field.style.backgroundColor="#FFFF99";
        next_field.style.borderColor="#000000";
			}
		}
	}    
}

function SpringNaar(x) {
	  parent.location = x
  }
  
function SpringNaarNew(x) {
	  nieuwWindow = window.open(x)
  }

var bookmarkurl="http://www.breedbandgekte.nl"
var bookmarktitle="Breedbandgekte.nl"

function addbookmark(){
	if (document.all)
		window.external.AddFavorite(bookmarkurl,bookmarktitle)
}
  
function getcookie(cookiename) {
	var cookiestring=""+document.cookie;
	var index1=cookiestring.indexOf(cookiename);
	if (index1==-1 || cookiename=="") 
		return ""; 
	var index2=cookiestring.indexOf(';',index1);
	if (index2==-1) 
		index2=cookiestring.length; 
	return unescape(cookiestring.substring(index1+cookiename.length+1,index2));
}

function setcookie(name,value) {	
	cookiestring=name+"="+escape(value);	
	document.cookie=cookiestring;		
}

function restoreSorting() {
	sortFromCookie = getcookie('sort');	
	orderFromCookie = getcookie('sortingorder');
		
	if	((sortFromCookie.length > 0) && (orderFromCookie.length > 0)) {
		resetsort(sortFromCookie,orderFromCookie);			
	}
}


function MM_preloadImages() { //v3.0
	var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
	var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
	if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function doSubSort(obj, descasc, a, b) {

	for (var i=0; i<(obj.length-1); i++) {
		for (var j=i+1; j<obj.length; j++) {
			if	(obj[i][b].toLowerCase() == obj[j][b].toLowerCase()) {
				if	(descasc == 'asc')
					ifstat = (parseFloat(obj[j][a]) < parseFloat(scope.objList[i][a]));
				else
					ifstat = (parseFloat(obj[j][a]) > parseFloat(scope.objList[i][a]));
				if (ifstat) {
					var dummy = scope.objList[i];
					scope.objList[i] = scope.objList[j];
					scope.objList[j] = dummy;
				}
			}
		}
	}
}