/*******************
control the menu
*******************/
	
var menu={
	visible:false,
	cancelling:false,
	show:function(){
		this.find('img').show();
		menu.cancelling=false;
		if (!menu.visible && !blips.mobile){
			menu.visible=true;
			ignite('#menu').animate({height:22},0.2);
			}
		},
	hide:function(e){
		if (menu.visible){
			menu.cancelling=true;
			setTimeout(function(){
				if (menu.cancelling){
					menu.visible=false;
					ignite('#menu').animate({height:0},0.2);
					}
				},500);
			}
		},
	arrowHide:function(){
		this.find('img').hide();
		},
	cancelHide:function(){
		menu.cancelling=false;
		},
	text:{
		rss:'rss',
		archive:'archive',
		ban:'moderator options',
		bin:'delete entry',
		edit:'edit entry',
		mail:'send to a friend',
		favourite:'add to favourites',
		nofavourite:'add to favourites',
		subscribe:'subscribe to this journal',
		unsubscribe:'unsubscribe from this journal',
		zoom:'view larger version',
		download:'download original',
		settings:'entry settings',
		unstaged:'submit to Unstaged',
		unstagedremove:'remove from Unstaged'
		},
	updateText:function(){
		ignite('#menu-text').setHTML(menu.text[this[0].id.replace('menu-','')]);
		},
	clearText:function(){
		ignite('#menu-text').setHTML('');
		}
	};

// lets delegate

ignite.event.add('#blip-prev, #blip-next','mouseenter',menu.show);
ignite.event.add('#blip-prev, #blip-next','mouseleave',menu.arrowHide);

ignite.event.add('#menu-items a','mouseover',menu.updateText);
ignite.event.add('#menu-items a','mouseout',menu.clearText);

if (!blips.mobile){
	ignite.ready(function(){
		ignite('#blip_bg').mouseleave(function(){
			menu.hide();
			});
		});
	}



// classes to handle overlays and dialogs

var Overlay=function(color,opacity){
	this.opacity=arguments.length>1 ? opacity : 1;
	var style={
		'position':'absolute',
		'top':'0px',
		'left':'0px',
		'width':'100%',
		'zIndex':30,
		'height':ignite(document).height()+'px'
		};
	if (color) style['background-color']=color;
	this.div=ignite.DOM.create('div').setStyle(style);
	this.busy=false;
	document.body.appendChild(this.div[0]);
	if (arguments.length>1) this.div.setOpacity(0);
	};
	
ignite.util.augment(Overlay.prototype,{
	fadeIn:function(secs,callback){
		this.busy=true;
		var self=this;
		(new ignite.FX.Tween(this.div, {opacity:this.opacity}, secs, {onComplete:function(){
			self.busy=false;
			if (callback) callback();
			}})).play();
		},
	fadeOut:function(secs,callback,remove){
		var ns=this.div, self=this;
		this.busy=true;
		(new ignite.FX.Tween(this.div, {opacity:0}, secs, {onComplete:function(){
			if (remove) document.body.removeChild(ns[0]);
			self.busy=false;
			if (callback) callback();
			}})).play();
		}
	});
	
	

// definitions for each menu option
	
var controls={
	dispatch:function(e){
		var id=this[0].id.replace(/menu-/,'');
		if (controls[id] && controls[id].clicked) controls[id].clicked(e);
		},
	zoom:{
		clicked:function(e){
			ignite.event.cancel(e);
			ignite('#menu-zoom').addClass('loading');
			controls.zoom.url=blips.zoom;
			ignite('#image-loader')[0].src='v2/imageLoader.php?callback=window.top.controls.zoom.imageLoaded&img='+controls.zoom.url;
			return false;
			},
		imageLoaded:function(h){
			ignite('#menu-zoom').removeClass('loading');
			if (!controls.zoom.url) return false;
			controls.zoom.img=ignite.DOM.create('div',{
				className:'zoom-image'
				},ignite.DOM.create('img',{'src':controls.zoom.url})
				);
			var w=ignite(window), wh=w.height();
			controls.zoom.img.setStyle({'top':Math.ceil(w.top()+(h > wh ? 40 : (wh-h)/2))+'px'});
			document.body.appendChild(controls.zoom.img[0]);
			controls.overlay=new Overlay('#666666',1);
			controls.overlay.fadeIn(1.3);
			controls.zoom.img.fadeIn(1.3,{
				onComplete:function(){
					try {this[0].style.filter="";} catch(e){}
					}
				});
			},
		close:function(){
			controls.overlay.fadeOut(1.3,null,true);
			controls.zoom.img.fadeOut(1.3,{onComplete:function(){
				this.remove();
				}});
			}
		},
	mail:{
		sent:false,
		clicked:function(e){
			ignite.event.cancel(e);
			controls.overlay=new Overlay('black',0.7);
			controls.overlay.fadeIn(0.5,controls.mail.display);
			},
		display:function(r){
			controls.dialog=ignite.DOM.create('div',{
				className:'dialog mail'
				},ignite.DOM.create('div',{id:"mail-outer"},
					ignite.DOM.create('p',{
						id:"mail-message",
						innerHTML:"To send a link to this entry to up to five friends, put their email addresses (separated with commas) in the box below, then click 'Send'."
						}),
					ignite.DOM.create('p',{
						innerHTML:"<label for='mail-recipients'>Recipients:</label><input type='text' id='mail-recipients' />"
						}),
					ignite.DOM.create('p',{
						innerHTML:"<label for='mail-content'>Message:</label></span><textarea id='mail-content'>I saw this on Blipfoto and thought you might like it:</textarea>"
						}),
					ignite.DOM.create('span',{
						className:'cancelbutton',
						innerHTML:'Cancel'
						}),
					ignite.DOM.create('span',{
						className:'sendbutton',
						innerHTML:'Send'
						})));
			var w=ignite(window), wh=w.height(), h=300, m=300; // height-inner margin
			controls.dialog.setStyle({'top':Math.ceil(w.top()-m+(h > wh ? 40 : (wh-h)/2))+'px'});
			document.body.appendChild(controls.dialog[0]);
			},
		send:function(){
			if (controls.mail.sent){
				controls.closeDialog();
				}
			if (!ignite('#mail-recipients, #mail-content').getValue().all()) ignite('#mail-message').setHTML('Please fill in both fields.');
			else{
				ignite('span.sendbutton').setHTML("sending...");
				(new ignite.ajax.HTTP('viewajax.php',{
					data:'mode=mail&id='+blips.main_id+'&recipients='+encodeURIComponent(ignite('#mail-recipients')[0].value)+'&content='+encodeURIComponent(ignite('#mail-content')[0].value),
					method:'post',
					json:true,
					onComplete:controls.mail.responseReceived
					})).send();
				}
			},
		responseReceived:function(r){
			if (!r.success){
				ignite('#mail-message').setHTML(r.message);
				ignite('#mail-outer span.sendbutton').setHTML("Send");
				}
			else{
				controls.mail.sent=true;
				ignite('#mail-outer p').setStyle({'visibility':'hidden'});
				ignite('#mail-outer span').setStyle({'visibility':'hidden'});
				var outer=ignite('#mail-outer'), h=outer.getHeight(0), v=50;
				outer.animate({'height':v},0.4,{
					onComplete:function(){
						ignite('#mail-outer span.sendbutton').setClass('closebutton').setHTML('OK').setStyle({visibility:'visible'});
						ignite('#mail-message').setClass('success').setHTML("Thank you, your message has been sent.").setStyle({visibility:'visible'});
						}
					});
				}
			}
		},
	subscribe:{
		clicked:function(e){
			ignite.event.cancel(e);
			controls.overlay=new Overlay('black',0.7);
			controls.overlay.fadeIn(0.5);
			(new ignite.ajax.HTTP('viewajax.php',{
				data:'mode=subscribe&user_id='+blips.user_id,
				method:'post',
				json:true,
				onComplete:controls.subscribe.responseReceived
				})).send();
			},
		responseReceived:function(r){
			if (controls.overlay.busy) setTimeout(function(){
				controls.subscribe.responseReceived(r);
				},13);	// wait til fade is done
			else{
				controls.dialog=ignite.DOM.create('div',{
					className:'dialog'
					},ignite.DOM.create('div',{className:'autoclose'},
						ignite.DOM.create('p',{
							className:r.success ? 'success' : 'failure',
							innerHTML:r.message
							})));
				if (r.success) ignite('#menu-subscribe')[0].id='menu-unsubscribe';
				
				var w=ignite(window), wh=w.height(), h=100, m=300; // height-inner margin
				controls.dialog.setStyle({'top':Math.ceil(w.top()-m+(h > wh ? 40 : (wh-h)/2))+'px'});
				
				document.body.appendChild(controls.dialog[0]);
				setTimeout(controls.closeDialog,1500);
				
				}
			}
		},
	unsubscribe:{
		clicked:function(e){
			ignite.event.cancel(e);
			controls.overlay=new Overlay('black',0.7);
			controls.overlay.fadeIn(0.5);
			(new ignite.ajax.HTTP('viewajax.php',{
				data:'mode=unsubscribe&user_id='+blips.user_id,
				method:'post',
				json:true,
				onComplete:controls.unsubscribe.responseReceived
				})).send();
			},
		responseReceived:function(r){
			if (controls.overlay.busy) setTimeout(function(){
				controls.unsubscribe.responseReceived(r);
				},13);	// wait til fade is done
			else{
				controls.dialog=ignite.DOM.create('div',{
					className:'dialog'
					},ignite.DOM.create('div',{className:'autoclose'},
						ignite.DOM.create('p',{
							className:r.success ? 'success' : 'failure',
							innerHTML:r.message
							})));
				if (r.success) ignite('#menu-unsubscribe')[0].id='menu-subscribe';
				
				var w=ignite(window), wh=w.height(), h=100, m=300; // height-inner margin
				controls.dialog.setStyle({'top':Math.ceil(w.top()-m+(h > wh ? 40 : (wh-h)/2))+'px'});
				
				document.body.appendChild(controls.dialog[0]);
				setTimeout(controls.closeDialog,1500);
				}
			}
		},
	favourite:{
		clicked:function(e){
			ignite.event.cancel(e);
			controls.overlay=new Overlay('black',0.7);
			controls.overlay.fadeIn(0.5);
			(new ignite.ajax.HTTP('viewajax.php',{
				data:'mode=favourite&user_id='+blips.user_id+'&image_id='+blips.main_id,
				method:'post',
				json:true,
				onComplete:controls.favourite.responseReceived
				})).send();
			},
		responseReceived:function(r){
			if (controls.overlay.busy) setTimeout(function(){
				controls.favourite.responseReceived(r);
				},13);	// wait til fade is done
			else{
				controls.dialog=ignite.DOM.create('div',{
					className:'dialog'
					},ignite.DOM.create('div',{className:'autoclose'},
						ignite.DOM.create('p',{
							className:r.success ? 'success' : 'failure',
							innerHTML:r.message
							})));
				if (r.success) ignite('#menu-favourite < li').remove();
				document.body.appendChild(controls.dialog[0]);
				setTimeout(controls.closeDialog,1500);
				}
			}
		},
	nofavourite:{
		clicked:function(e){
			controls.favourite.clicked(e);
			}
		},
	settings:{
		clicked:function(e){
			ignite.event.cancel(e);
			controls.overlay=new Overlay('black',0.7);
			controls.overlay.fadeIn(0.5,controls.settings.display);
			},
		display:function(r){
		
			var html=[];
			html.push("<div class='dialog settings'><div id='settings-outer'><p id='settings-message'>Display the following components for this entry:</p>");
			for (var s in blips.settings){
				html.push("<p class='setting'><label for='"+s+"'>"+blips.settings[s].label+"</label><input type='checkbox' name='"+s+"' "+(blips.settings[s].status ? "checked='checked'" : "")+" /></p>");
				}
			html.push("<span class='cancelbutton'>Cancel</span><span class='sendbutton'>Save</span></div></div>");
			controls.dialog=html.join("").toNodeGroup();
			var w=ignite(window), wh=w.height(), h=300, m=300; // height-inner margin
			controls.dialog.setStyle({'top':Math.ceil(w.top()-m+(h > wh ? 40 : (wh-h)/2))+'px'});
			document.body.appendChild(controls.dialog[0]);
			},
		send:function(){
			var data=[];
			ignite('#settings-outer input').forEach(function(i){
				data.push(i.name+"="+(i.checked ? "1" : "0"));
				});
			ignite('span.sendbutton').setHTML("saving...");
			(new ignite.ajax.HTTP('viewajax.php',{
				data:'mode=settings&id='+blips.main_id+'&'+data.join('&'),
				method:'post',
				json:true,
				onComplete:controls.settings.responseReceived
				})).send();
			},
		responseReceived:function(r){
			if (!r.success){
				ignite('#settings-message').setHTML(r.message);
				ignite('#settings-outer span.sendbutton').setHTML("Save");
				}
			else{
				ignite('#settings-outer p').setStyle({'visibility':'hidden'});
				ignite('#settings-outer span').setStyle({'visibility':'hidden'});
				var outer=ignite('#settings-outer'), h=outer.getHeight(0), v=50;
				outer.animate({'height':v},0.4,{
					onComplete:function(){
						ignite('#settings-outer span.sendbutton').click(function(){
							window.location=window.location.href.replace(/#.*/,'');
							}).setClass('closebutton').setHTML('OK').setStyle({visibility:'visible'});
						ignite('#settings-message').setClass('success').setHTML("Thank you, your settings have been saved.").setStyle({visibility:'visible'});
						}
					});
				}
			}
		},
	closeDialog:function(){
		controls.mail.sent=false;
		document.body.removeChild(controls.dialog[0]);
		controls.overlay.fadeOut(0.5,null,true);
		}
	};
	
	
/********
comments
********/
	
var comments={
	fetch:function(e){
		ignite('#comment-panel').show();
		if (!blips.auto){
			ignite.event.cancel(e);
			(new ignite.ajax.HTTP('viewajax.php',{
				data:"mode=comments&image_id="+blips.main_id+"&author="+blips.user_id,
				method:"post",
				json:true,
				onComplete:comments.responseReceived
				})).send();
			}
		ignite.event.remove('#comments','click',comments.fetch);
		},
	submit:function(e){
		ignite.event.cancel(e);
		var data=["mode=postcomment"];
		data.push("hid_id="+blips.main_id);
		data.push("hid_author="+blips.user_id);
		data.push("content="+encodeURIComponent(ignite('#new-comment').getValue(0)));
		if (ignite('#check_value').length && ignite('#check_value')[0].checked) data.push("check_value=1");
		(new ignite.ajax.HTTP('viewajax.php',{
			data:data.join('&'),
			method:"post",
			json:true,
			onComplete:comments.responseReceived
			})).send();
		},
	responseReceived:function(r){
		if (r.track_update){
			ignite('#track_update').setHTML(" (updated)");
			}
		if (r.success){
		
			ignite('#comment-panel').show();
			var i=0, c=r.comments.length;
			var commentList=ignite('#commentList');
			
			var birthdays={
				100:'birthday.gif',
				200:'birthday.gif',
				300:'birthday.gif',
				365:'birthday.gif',
				500:'500.gif',
				730:'birthday.gif',
				1000:'500.gif',
				1095:'birthday.gif',
				1460:'birthday.gif',
				1500:'500.gif',
				1825:'birthday.gif'
				};
			
			// run through step by step to avoid unresponsive browser
			var commentStepper=function(){
				if (i<c){
					var commentObj=r.comments[i], icons=[];
				
					if (commentObj.commentor.isGuest){
						icons.push("<img src='gfx/other/guest.gif' />");
						}
					else{
				
						var entries=commentObj.commentor.entries;
						if (entries <= 9) icons.push("<img src='gfx/levels/learner.gif' alt='New contributor'/>");
						else if (entries <= 99) icons.push("<img src='gfx/levels/camera-bronze.gif' />");
						else if (entries <= 364) icons.push("<img src='gfx/levels/camera-silver.gif' />");
						else if (entries <= 999) icons.push("<img src='gfx/levels/camera-gold.gif' />");
						else if (entries <= 1499) icons.push("<img src='gfx/levels/camera-platinum.gif' />");
						else icons.push("<img src='gfx/levels/camera-red.gif' />");
						
						if (commentObj.commentor.lastEntryToday && birthdays[commentObj.commentor.entries]){
							icons.push("<img src='gfx/levels/"+birthdays[commentObj.commentor.entries]+"' />");
							}
						
						if (commentObj.commentor.blipOfTheWeek) icons.push("<img src='gfx/icons/icon_blipoftheweek.gif'/>");
						if (commentObj.commentor.foundingMember) icons.push("<img src='gfx/levels/founder.gif' />");
						else if (commentObj.commentor.member) icons.push("<img src='gfx/icons/icon_member.gif' />");
					
						if (r.auth) icons=icons.map(function(html){	// add links if logged in
							return "<a href='icons.php'>"+html+"</a>";
							});
							
						}
						
					if (r.moderator || (commentObj.commentor.isViewer && !commentObj.commentor.isGuest)) icons.push("<a href='edit.php?id="+commentObj.comment.id+"' class='editcomment'><img src='gfx/icons/edit.gif' title='Edit this comment' /></a>");
					else if (r.author) icons.push("<a href='edit.php?id="+commentObj.comment.id+"' class='editcomment'><img src='gfx/icons/trash.gif' title='Delete this comment' /></a>");
					var html='<li><a name="'+commentObj.comment.id+'"></a><p>'+commentObj.comment.content+'</p>';
					if (commentObj.commentor.isGuest) html+='<h3>~ <span class="guest">'+commentObj.commentor.username+'</span> '+icons.join(' ')+'</h3></li>';
					else html+='<h3>~ <a href="http://www.blipfoto.com/'+commentObj.commentor.username+'" '+(commentObj.commentor.user_id==blips.user_id ? ' class="author"' : '')+'>'+commentObj.commentor.username+'</a> '+icons.join(' ')+'</h3></li>';

					
					commentList.insertChild(html,null);
					i++;
					setTimeout(commentStepper,15);
					}
				else {
					if (!i) commentList.insertChild("<li id='nocomments'><p>No comments for this entry yet</p></li>",null);
					else if (!r.postadded) window.location.href=window.location.hash; // jump view to comments
					if (r.postadded){
						var postCount=ignite('#postcount');
						var pc=postCount.getHTML(0)*1;
						postCount.setHTML(""+(pc+1));
						ignite('#postcountplural').setHTML(pc ? "s" : "");
						ignite('#new-comment').setValue("");
						ignite('#nocomments').remove();
						}
					}
				};
				
			setTimeout(commentStepper,15);
			
			}
		}
	};
	
	
/****
tags
****/
(function(){
var state=0;
ignite.event.add('#tags','click',function(e){	
	var panel=ignite('#tag-panel');
	if (!state){
		panel.show();
		this.setHTML('hide tags');
		}
	else{
		panel.hide();
		this.setHTML('show tags');
		ignite.event.cancel(e);
		}
	state=!state;
	});
	})();
	
	
var ratings={
	select:function(e){
		if (blips.rate){
			menu.cancelHide();
			ignite('#alt-blips a').removeClass('active');
			var i=(this[0].id.replace('rate_','')*1);
			for (var j=1;j<i;j++){
				ignite('#rate_'+j).addClass('active');
				}
			}
		},
	deselect:function(e){
		if (blips.rate){
			var i=5;
			while (i>0){
				ignite('#rate_'+i)[(i > blips.rating ? 'remove' : 'add')+'Class']('active');
				i--;
				}
			}
		},
	clicked:function(e){
		ignite.event.cancel(e);
		var i=this[0].id.replace('rate_','')*1;
		if (blips.rate){
			(new ignite.ajax.HTTP('viewajax.php',{
				data:'mode=rate&rating='+i+'&image_id='+blips.main_id,
				method:'post',
				json:true,
				onComplete:ratings.responseReceived
				})).send();
			}
		},
	responseReceived:function(r){
		if (r.success){
			ignite('#alt-blips').setClass('norate');
			blips.rate=false;
			for (var i=1;i<=5;i++){
				var x=ignite('#rate_'+i);
				x[(i > r.rating ? 'remove' : 'add')+'Class']('active');
				x[0].title=r.title;
				}
			}
		}
	}

ignite.event.add('#alt-blips a','mouseover',ratings.select);
ignite.event.add('#alt-blips a','mouseout',ratings.deselect);
ignite.event.add('#alt-blips a','click',ratings.clicked);
	
ignite.event.add('#comments','click',comments.fetch);
//ignite.event.add('#comment-form','submit',comments.submit);
	
// generic
ignite.event.add('#menu-items a','click',controls.dispatch);
ignite.event.add('span.closebutton','click',controls.closeDialog);
ignite.event.add('span.cancelbutton','click',controls.closeDialog);

// extra
ignite.event.add('.zoom-image img','click',controls.zoom.close);
ignite.event.add('#mail-outer span.sendbutton','click',controls.mail.send);
ignite.event.add('#settings-outer span.sendbutton','click',controls.settings.send);

ignite.event.add('a[href$=large]','click',controls.zoom.clicked);

ignite.ready(function(e){
	ignite('#comment-form').submit(function(e){
		comments.submit(e);
		});
	if (blips.showComments) comments.fetch(e);
	if (blips.size=="large" && blips.zoom) controls.zoom.clicked(e);
	});