/**
 * Project: Mobile Sessions 2009
 * Customer: Häberlein & Mauerer / Sony Ericsson
 * 
 * Javascripts for all pages but homepage
 * 
 * @author Patrick Kaiser <pk@okapi.de>
 * @version 1.0
 *
 */


/*
 * sendAfriend funcionality all over the site
 */
var recommendPage = new Class({	
	
	/*
 	 * Implement Options 
 	 */
	Implements: [Options],

	/*
	 * Predefinied options
	 */
	options: {
		target_class: 'recommend_page',
		result_class: 'result',
		form_btn: 'submit_recommendation_',
		form_result: 'recommend_page_form_result_'
	},
	
	/*
	 * Class vars
	 */
	elements: {
		send_button: null,
		recommend_page_containers: null,
		recommend_page_form_ids: []
	},
	
	/*
	 * Constructor
	 */
	initialize: function(options) {
		
		/*
		 * Set options during instantiation
		 */
		this.setOptions(options);
		
		/*
		 * Loop through all recommend_page divs, store unique_ids in this.elements.recommend_page_form_ids
		 */
		this.elements.recommend_page_containers = $$('div.' + this.options.target_class );		
		this.elements.recommend_page_containers.each( 
			function( item ){
				// .getElement(':first-child').id.replace(/^\D+/, '')
				var temp_id = item.getElement(':first-child').id.replace(/^\D+/, '');
				this.elements.recommend_page_form_ids.include( temp_id );
			}.bind(this)
		);
		
		/*
		 * bind send method to the buttons
		 */
		this.elements.recommend_page_form_ids.each(
			function(id)
			{
				/*
				 * bind function send to buttons within form
				 */
				$(this.options.form_btn + id).addEvent( 'click', this.send );
				//$(this.options.form_result + id).slide('out');
			}.bind(this)
		);
	},
	
	/*
	 * Send Form and display result
	 */
	send: function(event) {
		this.target = event.target; //btn
		var id = this.target.id.replace(/^\D+/, '');
		var myform = this.target.getParent(); // form
		var form_send = myform.get('send'); // form send obj
		
		/*
		 * Handle form events
		 * Backend returns json
		 */
		form_send.addEvents({
			'success': function(result){
				var json = JSON.decode( result );
				if( json.global_result )
				{
					$('recommend_page_form_container_' + id).slide('out');
					$('recommend_page_form_result_' + id).set('html', json.global_msg );
					$('recommend_page_form_result_' + id).slide('in');
				}
				else
				{
					//$('recommend_page_form_result_' + id).slide('in');
					$('recommend_page_form_result_' + id).set('html', json.errors[0].error_msg );					
				}			
			},
			'failure': function(){
				$('recommend_page_form_result_' + id).set('html', 'Es ist leider ein Fehler aufgetreten' );
//				//$('recommend_page_form_result_' + id).slide('in');
			}
		});
		
		/*
		 * Send the form
		 */
		myform.send();
	}
});


/*
 * Comment Toggler 
 * Pages: User-Profilseite, Content-Standard Detailseite
 */

var TogglerSeeMore = new Class({
	Implements: [Chain, Options],
	
	options: {
		buttons: {
			close:				"toggle_comments",		// open-/close-Link oben (.toggle_comments)
			writecomments:		"btn_write_comment",		// open-/sprung-link oben rechts (.btn_write_comment)
			closecomments:		"drop-btn-less"			// close-Link unten (.drop-btn-less)
		},
		boxes: {
			container:			"further_comments",		// Container, der auf-/zugeklappt wird (.further_comments)
			switchspantext:		"switch_text"
		},
		delays: {
			afterSlideOut:		400,
			beforeSlideIn:		200
		},
		text: {
			open:				"anzeigen",
			close:				"schliessen"
		}
	},
	
	elements: {
		buttons: {
			close:				null,
			writecomments:		null,
			closecomments:		null
		},
		boxes: {
			container:			null,
			switchspantext:		null
		}
	},

	target: null,



	initialize: function(options) {
		this.setOptions(options);
		
		this.elements.buttons.close			= $$("." + this.options.buttons.close);
		this.elements.buttons.writecomments	= $$("." + this.options.buttons.writecomments);
		this.elements.buttons.closecomments	= $$("." + this.options.buttons.closecomments);
		
		this.elements.boxes.container		= $$("." + this.options.boxes.container);
		this.elements.boxes.switchspantext	= $$("." + this.options.boxes.switchspantext);
		
		
		
		// Links austauschen
		for( i in this.elements.buttons )
		{
			this.elements.buttons[i].each(
				function( item )
				{
					item.href = "javascript:void(0);"		
				}
			);
		};
		
		this.elements.buttons.close.addEvent("click", this.toggle.bind(this));
		this.elements.buttons.writecomments.addEvent("click", this.toggle.bind(this));
		this.elements.buttons.closecomments.addEvent("click", this.hide.bind(this));
		
	
		// Startzustand herstellen
		if ( window.location.hash.match(/(comments)/) )
		{
			this.elements.boxes.container.setStyle("display", "block");
		}
		else
		{
			this.elements.boxes.container.setStyle("display", "none");
			this.elements.boxes.container.slide("out");
		}
	},

	toggle: function(event) {
   	this.target = event.target;
		var checkBtnText = this.elements.boxes.switchspantext.get('html');
		
		if( checkBtnText[0].toLowerCase() == this.options.text.open || checkBtnText == '' ) {
			this.show();
		}
		else
		{
			this.hide();
		}
  },

	show: function() {
		this.elements.boxes.switchspantext.set( 'html', this.options.text.close );
		
		this.elements.boxes.container.setStyle("display", "block").slide("in");
		this.callChain();
  },

	hide: function() {
		this.elements.boxes.switchspantext.set( 'html', this.options.text.open );
		this.elements.boxes.container.slide("out");
		this.callChain.delay(this.options.delays.afterSlideOut, this);
		
		/* IE 6 & 7 Bug-Fix */
		var fixIsNeeded = function() {
			return ((Browser.Engine.name == "trident" && Browser.Engine.version == 4) ||
			(Browser.Engine.name == "trident" && Browser.Engine.version == 5));
		};
		var target = $$(".further_comments")[0];
		
		if (fixIsNeeded())
		{
			target.setStyle("display", target.getStyle("display") == "none" ? "inline" : "none");
		}
	}
});



/*
 * Do this when DOM is ready
 */
window.addEvent('domready', function() {
	
	/*
	 * RecommandPages
	 */
	var recommendPages = new recommendPage({});
	
	/*
	 * Comments
	 */
	if( $$(".comments_wrap")[0] )
  	{
	  var toggler = new TogglerSeeMore({});
  	}
});