/**
 * Custom javascript for www.redmax.nl
 * Created by Hans Dubois for Intermax Interactive B.V. 2009
 * www.intermaxinteractive.nl
 * www.redmax.nl 
 */

var redmaxJs = Class.create({
	// Standard open div on homepage
	homepageOpen : 'homeAccordion0',	
	newsLetterOpen : '',	
	caseOpen : '',
	
	// variables for show next 5 and such
	twitterCurrentItems : '5',
	newsItemCount : 0,
	casesItemCount : 0,
	
	/**
	 * General javascript / website initialisation
	 */
	initialize: function() {

	},
	
	openAccordion: function(element){
		var divToOpen = element.id;
		
		// Close div if it's open
		if(this.homepageOpen == divToOpen){
			var elementToClose = $(divToOpen).next('div');
			$(divToOpen).className = 'harmonicaTitle harmonicaTitleDeactive';
			elementToClose.hide();			
			this.homepageOpen = '';
		}else{
			// Close old
			if(this.homepageOpen != ''){
				var elementToClose = $(this.homepageOpen);
				var nextElement = elementToClose.next("div");
			
				elementToClose.className = 'harmonicaTitle harmonicaTitleDeactive';
				nextElement.hide();
			}
						
			// Open new
			var elementToOpen = $(divToOpen).next('div');
			$(divToOpen).className = 'harmonicaTitle harmonicaTitleActive';
			elementToOpen.appear();
			
			// Set homepage open
			this.homepageOpen = element.id;
		}
	},
	
	openNewsLetter: function(element){
		var divToOpen = element.id;
		
		// Close div if it's open
		if(this.newsLetterOpen == divToOpen){
			var elementToClose = $(divToOpen).next('div');
			$(divToOpen).className = 'newsLetterTitle closed';
			elementToClose.hide();			
			this.newsLetterOpen = '';
		}else{
			// Close old
			if(this.newsLetterOpen != ''){
				var elementToClose = $(this.newsLetterOpen);
				var nextElement = elementToClose.next("div");
			
				elementToClose.className = 'newsLetterTitle closed';
				nextElement.hide();
			}
						
			// Open new
			var elementToOpen = $(divToOpen).next('div');
			$(divToOpen).className = 'newsLetterTitle open';
			elementToOpen.appear();
			
			// Set homepage open
			this.newsLetterOpen = element.id;
		}
	},
	
	openCase: function(element, path){
		var divToOpen = element.id;
		
		// Close div if it's open
		if(this.caseOpen == divToOpen){
			var elementToClose = $(divToOpen).next('div');
			$(divToOpen).className = 'caseTitle';
			elementToClose.hide();			
			this.caseOpen = '';
		}else{
			// Close old
			if(this.caseOpen != ''){
				var elementToClose = $(this.caseOpen);
				var nextElement = elementToClose.next("div");
			
				elementToClose.className = 'caseTitle';
				nextElement.hide();
			}
						
			// Open new
			var elementToOpen = $(divToOpen).next('div');
			$(divToOpen).className = 'caseTitle caseTitleOpen';
			elementToOpen.appear();
			
			// Set homepage open
			this.caseOpen = element.id;
			
			// Update popularity 
			new Ajax.Request('/Ajax?module=Cases&method=updatePopularity&node_path='+path, {method : 'get'});
		}
	
	},
	
	filterCases: function(){
		$('filterForm').submit();
	},
	
	submitMailAdress: function(){
		var emailString = $F('email');
		if((emailString.indexOf(".") > 0) && (emailString.indexOf("@") > 0)){
			return true
		}else{
			alert('Vul een geldig e-mailadres in.');
			return false;
		}
	},
	
	showNextTweets: function(itemsToShow, path){
		// Replace the button so it cannot be clicked again
		$('showNextLink').remove();
		
		// Create spinner elements
		var img = new Element('img', {'src' : '/images/redmax/spinner.gif', 'class' : 'spinner'});
		
		// Create containing div
		var div = new Element('div', {'id' : 'showNextSpinner', 'class' : 'showNext'});
		
		div.appendChild(img);
		
		$('twitterShowNext').appendChild(div);
		
		// Send the ajax request
		var url = '/Ajax?module=Twitter&method=showMoreTweets&currentCount='+this.twitterCurrentItems+'&itemsToShow='+itemsToShow+'&tweetsPath='+path;
		new Ajax.Request(url, {
			  method: 'get',
			  onSuccess: function(transport) {
			    redmax.addTweets(transport, path)
			  }
		});
	},
	
	addTweets: function(transport, path){
		var json = transport.responseText.evalJSON();
	    
	    for ( var int = 0; int < json.tweets.length; int++) {
	    	// make link
	    	var link = new Element( 'a', {'href' : "http://www.twitter.com/"+json.tweets[int].user} );
	    	
	       	// Make image 
	    	var image = new Element('img', {'src' : json.tweets[int].user_image, 'alt' : json.tweets[int].user, 'border': '0'});
	    	
	    	link.AppendChild(image); 
	    	
	    	// Make paragraph
	    	var p = new Element('p', {}).update(json.tweets[int].content);
	    	
	    	// Make clearer
	    	var clearer = new Element('div', {'class' : 'clearer'}).update("<span><!-- No Empty --> </span>");
	    	
	    	// Create LI
	    	var li = new Element('li', {'style' : 'display : none'});
	    	
	    	// Append childs
	    	li.appendChild(link);
	    	li.appendChild(p);
	    	li.appendChild(clearer);
	    	
	    	// Show them in the DOM
	    	$('twitterUL').appendChild(li);
	    	li.appear();
	    	
	    	this.twitterCurrentItems++;
		}
	    
	   // Delete or set the add more element
	   if(json.nextToShow != ''){
		   $('showNextSpinner').remove();	   
   
		   var onLinkClick = 'redmax.showNextTweets(5, \''+path+'\');';
		   var a = new Element('a', {'class' : 'showNext', 'onclick' : onLinkClick, 'id' : 'showNextLink'}).update(json.nextToShow);
		   $('twitterShowNext').appendChild(a);
		   
	   }else{
		   $('showNextSpinner').remove(); 
	   }
	},
	
	showMoreNews: function(amount, path, page, pageUrl){
		// Replace the button with Spinner
		// Replace the button so it cannot be clicked again
		$('showNextLink').remove();
		
		// Create spinner elements
		var img = new Element('img', {'src' : '/images/redmax/spinner.gif', 'class' : 'spinner'});
		
		// Create containing div
		var div = new Element('div', {'id' : 'showNextSpinner', 'class' : 'showNext'});
		
		div.appendChild(img);
		
		$('showNextContainer').appendChild(div);
		
		// set the itemcount right for start
		totalNewsItems = (amount * page);
		if(this.newsItemCount == 0){
			this.newsItemCount = totalNewsItems;
		}		

		// Send the ajax request
		var url = '/Ajax?module=News&method=showMoreNews&currentCount='+this.newsItemCount+'&itemsToShow='+amount+'&newsPath='+path+'&page='+page;
		new Ajax.Request(url, {
			  method: 'get',
			  onSuccess: function(transport) {
			    redmax.addNews(transport, path, pageUrl, amount, page)
			  }
			});
	}, 
	
	addNews: function(transport, path, pageUrl, amount, page){
		var json = transport.responseText.evalJSON();
		
		// Add elements to DOM
		for ( var int = 0; int < json.items.length; int++) {
			// Create the li
			var li = new Element('li', {'class' : 'first'});
			
			// Create the image
			var img = new Element('img', {'src' : json.items[int].image, 'width' : '121', 'height' : '72', 'alt' : 'item'});
			
			// Create the Span
			var span = new Element('span', {});
			
			// Create the A
			var url = pageUrl+"?path="+json.items[int].path;
			var a = new Element('a', {'href' : url}).update(json.items[int].title);
			
			// Create the paragraph
			var p = new Element('p', {}).update(json.items[int].intro);
			
			span.appendChild(a);
			
			li.appendChild(img);
			li.appendChild(span);
			li.appendChild(p);
			
			$('newsOverview').appendChild(li);	
			li.appear();
			
			this.newsItemCount++;
		}
		
		// Delete or set the add more element
		if(json.nextToShow != ''){
		  $('showNextSpinner').remove();	
		  
   		   var onLinkClick = 'redmax.showMoreNews('+amount+', \''+path+'\', \''+page+'\', \''+pageUrl+'\');';
   		   var a = new Element('a', {'class' : 'showNext', 'onclick' : onLinkClick, 'id' : 'showNextLink'}).update(json.nextToShow);
   		   
		   $('showNextContainer').appendChild(a);
		}else{
		   $('showNextSpinner').remove(); 
		}		
	},
	
	showMoreCases: function(itemsToShow, path, page, pageUrl){
		// Delete the old button and replace with spinner
		$('showNextLink').remove();		

		// Create spinner elements
		var img = document.createElement("img");
		img.src = "/images/redmax/spinner.gif";
		img.className = 'spinner';
		 
		// Create containing div
		var div = document.createElement("div");
		div.id = 'showNextSpinner';
		div.className = 'showNext';
		
		div.appendChild(img);
		
		$('showNextContainer').appendChild(div);
		
		
		// set the itemcount right for start
		if(this.casesItemCount == 0){
			totalCasesItems = (itemsToShow * page);
			this.casesItemCount = totalCasesItems;
		}	
	
		// Get the category, branche and discipline
		var category    = $F('categories');
		var branche     = $F('branches');
		var discipline  = $F('disciplines');
		
		// Get the sorting
		var sortBy = '';

		if($('radDate').checked){
			sortBy = 'publication_date';
		}else if($('radPop').checked){
			sortBy = 'popularity';
		}else if($('radAplha')){
			sortBy = 'title';
		}
		
		// Send the ajax request
		var url = '/Ajax?module=Cases&method=showMoreCases&currentCount='+this.casesItemCount+'&itemsToShow='+itemsToShow+'&casesPath='+path+'&page='+page+'&categories='+category+'&branches='+branche+'&disciplines'+discipline+'&sortby='+sortBy;
		new Ajax.Request(url, {
			  method: 'get',
			  onSuccess: function(transport) {
			    redmax.addCases(transport, path, pageUrl, itemsToShow, page)
			  }
			});
	},
	
	addCases : function(transport, path, pageUrl, itemsToShow, page){
		var json = transport.responseText.evalJSON();
		
		// Add elements to DOM
		for ( var int = 0; int < json.items.length; int++) {
				
			// Create the li
			if(json.items[int].background == ''){
				var liBackground = '';
			}else{
				var liBackground = 'background-image : url(\''+json.items[int].background+'\');';
			}			
			var li = new Element('li', {'style' : liBackground});
			
			// Create the container
			var containerDiv = document.createElement('div');
			containerDiv.className = 'caseContainer';
			
			// Make Case title content
			var caseTitleContent = json.items[int].title;
			
			if(json.items[int].businessCase == 'Yes'){
				var caseTitleContent = caseTitleContent + '<img src="/images/redmax/businessCaseIconWhite.png" alt="BusinessCase" />'; 
			}			 
			
			titleOnclick = 'redmax.openCase(this, \''+json.items[int].path+'\');';
			
			// Make titleDiv
			var caseTitleDiv = new Element('div', {'class' : 'caseTitle', 'onclick' : titleOnclick, 'id' :  'case'+this.casesItemCount}).update(caseTitleContent);
			caseTitleDiv.className = 'caseTitle';
			
			var pathJson = json.items[int].path;
			caseTitleDiv.onclick = function(){
				redmax.openCase(this, pathJson);
			};			
			
			// Make ContentDiv
			var caseContentDiv = new Element('div', {});
			caseContentDiv.className = 'caseContent';			
			 
			caseContentDiv.style.display = 'none';			
			
			// Make quote Span
			if(json.items[int].quote_homepage != ''){
				var caseQuote = document.createElement("span");
				caseQuote.className = 'title';
				caseQuote.innerHTML = json.items[int].quote_homepage;
			}
			
			// Make P
			var caseContent = new Element('div', {}).update(json.items[int].description);
						
			if(json.items[int].businessCase == 'Yes'){
				//var caseReadMoreDiv = new Element('div', {'class' : 'caseReadMore'});
				var caseReadMoreDiv = document.createElement('div');
				caseReadMoreDiv.className = 'caseReadMore';
				
				var caseLink = document.createElement('a');
				caseLink.className = 'readMore';
				caseLink.href = pageUrl+'?view='+json.items[int].path;
				caseLink.innerHTML = json.items[int].readMoreText;
				caseReadMoreDiv.appendChild(caseLink);			
			}
			
			caseContent.style.cssText = "width : 232px; height : 263px;";
			
			// Append Childs
			
			// Add quote
			if(json.items[int].quote_homepage != ''){
				caseContentDiv.appendChild(caseQuote);
			}
			
			// Add content
			caseContentDiv.appendChild(caseContent);
			
			// Add link
			if(json.items[int].businessCase == 'Yes'){				
				caseContent.appendChild(caseReadMoreDiv);
			}
			
			// Add to Li
			containerDiv.appendChild(caseTitleDiv);
			containerDiv.appendChild(caseContentDiv);
			
			li.appendChild(containerDiv);

			$('casesUl').appendChild(li);
			li.appear();
		
			this.casesItemCount++;	
		}
		
		// Delete or set the add more element
		if(json.nextToShow != ''){
		  $('showNextSpinner').remove();	
		  
   		   var a = document.createElement('a');
   		   a.className = 'showNext';
   		   a.onclick = function(){
   			   redmax.showMoreCases(itemsToShow, path, page, pageUrl);
   		   };
   		   a.id = 'showNextLink';
   		   a.innerHTML = json.nextToShow;
   		   
		   $('showNextContainer').appendChild(a);
		}else{
		   $('showNextSpinner').remove(); 
		}		
	},
	
	addAppointmentTip : function(element, content){
		new Tip(element, content, 
					{
					effect: 'appear',
					fixed : true,
					hook : 'topRight',
					offset : {x : 40, y: -145},
					className : 'redmax'
					});
	},
	
	initFlash : function(){
		if($('flashHomepage')){
			swfobject.registerObject("myId", "10.0.0", "/images/redmax/flash/redmaxHeader.swf", {},{'wmode' : 'transparent'},{});
		}else if($('flashCases')){
			
		}
	}
});

var redmax = new redmaxJs();
