// Simulates PHP's date function
Date.prototype.format = function(format) {
	var returnStr = '';
	var replace = Date.replaceChars;
	for (var i = 0; i < format.length; i++) {
		var curChar = format.charAt(i);
		if (replace[curChar]) {
			returnStr += replace[curChar].call(this);
		} else {
			returnStr += curChar;
		}
	}
	return returnStr;
};
Date.replaceChars = {
	shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
	longMonths: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
	shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
	longDays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
	
	// Day
	d: function() { return (this.getDate() < 10 ? '0' : '') + this.getDate(); },
	D: function() { return Date.replaceChars.shortDays[this.getDay()]; },
	j: function() { return this.getDate(); },
	l: function() { return Date.replaceChars.longDays[this.getDay()]; },
	N: function() { return this.getDay() + 1; },
	S: function() { return (this.getDate() % 10 == 1 && this.getDate() != 11 ? 'st' : (this.getDate() % 10 == 2 && this.getDate() != 12 ? 'nd' : (this.getDate() % 10 == 3 && this.getDate() != 13 ? 'rd' : 'th'))); },
	w: function() { return this.getDay(); },
	z: function() { return "Not Yet Supported"; },
	// Week
	W: function() { return "Not Yet Supported"; },
	// Month
	F: function() { return Date.replaceChars.longMonths[this.getMonth()]; },
	m: function() { return (this.getMonth() < 9 ? '0' : '') + (this.getMonth() + 1); },
	M: function() { return Date.replaceChars.shortMonths[this.getMonth()]; },
	n: function() { return this.getMonth() + 1; },
	t: function() { return "Not Yet Supported"; },
	// Year
	L: function() { return (((this.getFullYear()%4==0)&&(this.getFullYear()%100 != 0)) || (this.getFullYear()%400==0)) ? '1' : '0'; },
	o: function() { return "Not Supported"; },
	Y: function() { return this.getFullYear(); },
	y: function() { return ('' + this.getFullYear()).substr(2); },
	// Time
	a: function() { return this.getHours() < 12 ? 'am' : 'pm'; },
	A: function() { return this.getHours() < 12 ? 'AM' : 'PM'; },
	B: function() { return "Not Yet Supported"; },
	g: function() { return this.getHours() % 12 || 12; },
	G: function() { return this.getHours(); },
	h: function() { return ((this.getHours() % 12 || 12) < 10 ? '0' : '') + (this.getHours() % 12 || 12); },
	H: function() { return (this.getHours() < 10 ? '0' : '') + this.getHours(); },
	i: function() { return (this.getMinutes() < 10 ? '0' : '') + this.getMinutes(); },
	s: function() { return (this.getSeconds() < 10 ? '0' : '') + this.getSeconds(); },
	// Timezone
	e: function() { return "Not Yet Supported"; },
	I: function() { return "Not Supported"; },
	O: function() { return (-this.getTimezoneOffset() < 0 ? '-' : '+') + (Math.abs(this.getTimezoneOffset() / 60) < 10 ? '0' : '') + (Math.abs(this.getTimezoneOffset() / 60)) + '00'; },
	P: function() { return (-this.getTimezoneOffset() < 0 ? '-' : '+') + (Math.abs(this.getTimezoneOffset() / 60) < 10 ? '0' : '') + (Math.abs(this.getTimezoneOffset() / 60)) + ':' + (Math.abs(this.getTimezoneOffset() % 60) < 10 ? '0' : '') + (Math.abs(this.getTimezoneOffset() % 60)); },
	T: function() { var m = this.getMonth(); this.setMonth(0); var result = this.toTimeString().replace(/^.+ \(?([^\)]+)\)?$/, '$1'); this.setMonth(m); return result;},
	Z: function() { return -this.getTimezoneOffset() * 60; },
	// Full Date/Time
	c: function() { return this.format("Y-m-d") + "T" + this.format("H:i:sP"); },
	r: function() { return this.toString(); },
	U: function() { return this.getTime() / 1000; }
};


// URI UTF8 Decoding object 
var Url = {
	// public method for url decoding
	decode : function (string) {
		return this._utf8_decode(unescape(string));
	},
 
	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		} 
		return string;
	}
}

function scan_images() {
	// hover to show flags
	$('div.image').unbind();
	$('div.image').hover(function() {
		$(this).addClass('imagehover');
		$('div.hdetails', this).css('visibility', 'visible');
	},
	function() {
		$(this).removeClass('imagehover');
		$('div.hdetails', this).css('visibility', 'hidden');
	});
}

function scan_video() {
	$('div.video').unbind();
	$('div.video').hover(function() {
		$(this).addClass('videohover');
		$('div.hdetails', this).css('visibility', 'visible');
	},
	function() {
		$(this).removeClass('videohover');
		$('div.hdetails', this).css('visibility', 'hidden');
	});
}

function scan_entries () {
	// hover to show flags
	$('div.entry').unbind();
	$('div.entry').hover(function() {
		$(this).addClass('entryhover');
		$('span.flags', this).css('visibility', 'visible');
		$('div.hdetails', this).css('visibility', 'visible');
	},
	function() {
		$(this).removeClass('entryhover');
		$('span.flags', this).css('visibility', 'hidden');
		$('div.hdetails', this).css('visibility', 'hidden');
	});
	
	function show_images() {
		var entry = $(this).parent().parent('div.entry');
		if ($('div.images_ct', entry).length > 0) {
			$('div.images_ct', entry).slideUp('fast', function() {
				$('div.images_ct', entry).remove();
				var button = $('.images_btn', entry);
				$('img', button).attr('src', robby.baseurl+'/images/gray_arrow_down.gif');
				$(button).removeClass('hoverbutton_hover');
				$(button).hover(function() {
					$(this).addClass('hoverbutton_hover');
				},
				function() {
					$(this).removeClass('hoverbutton_hover');
				});
			});
			return;
		}
		var domain = $('a.title', entry).attr('href');
		domain = domain.replace(/^http\:\/\//, '');
		domain = domain.replace(/\?.+$/, '');
		var gparams = {
			rsz: 'large',
			v: '1.0',
			key: robby.gapikey,
			start: 0,
			q: 'site:'+domain,
			safe: 'off'
		};
		var button = $('.images_btn', entry);
		$('img', button).attr('src', robby.baseurl+'/images/loading.gif');
		$.getJSON('http://ajax.googleapis.com/ajax/services/search/images?callback=?', gparams, function(data) {
			if (data.responseData.results.length > 0) {
				var html = "<div class=images_ct><div align=right>"+robby.pgoogle+"</div>";
				var i=1;
				$.each(data.responseData.results, function() {
					if (i++ <= 5) 
						html += '<a class="lightbox" href="'+this.url+'"><img src="'+this.tbUrl+'" height=60 border=0 class=image></a> ';
				});
				html += '</div>';
				var images = $(html);
				images.css('display', 'none');
				// $(entry).append(images);
				if ($('.similar_ct', entry).length > 0) {
					$('.similar_ct', entry).before(images);
				} else {
					$(entry).append(images);
				}
				images.slideDown('fast', function() {
					$('img', button).attr('src', robby.baseurl+'/images/gray_arrow_up.gif');
					$('img', button).attr('width', '11');
					$('a.lightbox').lightBox();
					$(button).unbind();
					$(button).addClass('hoverbutton_hover');
					$(button).click(show_images);
				});
			} else {
				$('img', button).attr('src', robby.baseurl+'/images/gray_arrow_down.gif');
				$(button).fadeOut('slow');
			}
		});
	}

	function show_similar() {
		var entry = $(this).parent().parent('div.entry');
		var url = $('a.title', entry).attr('href');
		url = url.replace(/^http:\/\//, '');
		url = url.replace(/\/$/, '');
		var gparams = {
			rsz: 'large',
			v: '1.0',
			key: robby.gapikey,
			start: 0,
			q: 'related:'+url+' '+$('#searchstr').attr('value'),
			safe: 'off'
		};
		var button = $('.similar_btn', entry);
		$('img', button).attr('src', robby.baseurl+'/images/loading.gif');
		$.getJSON('http://ajax.googleapis.com/ajax/services/search/web?callback=?', gparams, function(data) {
			if (data.responseData.results.length > 0) {
				$(entry).append("<div class=similar_ct><div align=right>"+robby.pgoogle+"</div></div>");
				var similar = $('.similar_ct', entry);
				$(similar).css('display', 'none');
				$.each(data.responseData.results, function() {
					this.durl = this.unescapedUrl;
					this.durl = Url.decode(this.durl);
					this.durl = this.durl.replace(/^http\:\/\/(www\.)?/, '');
					this.durl = this.durl.replace(/\/$/, '');
					this.content = this.content.replace(/<.+?>/g, '');
					$(similar).append('<div class=related><a class=title href="'+this.unescapedUrl+'">'+this.titleNoFormatting+'</a><div>'+this.content+'</div><div class=details><span class=url>'+this.durl+'</span></div></div>');
				});
				$(similar).slideDown('fast');
				$('img', button).attr('src', robby.baseurl+'/images/gray_arrow_up.gif');
				$(button).addClass('hoverbutton_hover');
				$(button).unbind();
				$(button).click(function() {
					$(button).removeClass('hoverbutton_hover');
					$(similar).slideUp('fast', function() {
						$(similar).remove();
					});
					$(this).unbind();
					$('img', button).attr('src', robby.baseurl+'/images/gray_arrow_down.gif');
					$(this).removeClass('hoverbutton_hover');
					$(button).hover(function() {
						$(this).addClass('hoverbutton_hover');
					},
					function() {
						$(this).removeClass('hoverbutton_hover');
					});
					$(button).click(show_similar);
				});
			} else {
				$('img', button).attr('src', robby.baseurl+'/images/gray_arrow_down.gif');
				$(button).fadeOut('slow');
			}
		});
	}

	// add hidden details container. Hover to show it
	var similarCap = robby.lang == 'english' ? 'Similar' : 'Παρόμοιες';
	var imagesCap = robby.lang == 'english' ? 'Images' : 'Εικόνες';
	$('.hdetails', 'div.entry').remove();
	// check if it's a video
	
	$('div.entry').append('<div class=hdetails align=left><span class="hoverbutton similar_btn"><img src="'+robby.baseurl+'/images/gray_arrow_down.gif" border=0 width=11> '+similarCap+'</span><span class="hoverbutton images_btn"><img src="'+robby.baseurl+'/images/gray_arrow_down.gif" border=0 width=11> '+imagesCap+'</span></div>');
	$('span.hoverbutton').hover(function() {
		$(this).addClass('hoverbutton_hover');
	},
	function() {
		$(this).removeClass('hoverbutton_hover');
	});
	$('div.hdetails', 'div.entry').css('visibility', 'hidden');
	$('span.similar_btn').click(show_similar);
	$('span.images_btn').click(show_images);
}


// Utilities that add functionality to news articles. 
// Scans the page for all class=article and ads functionality to the hidden similarStories and related_btn

// Initialize article events
function init_articles() {
	$('div.article').unbind();
	$('div.article').mouseover(function() {
		this.className = 'article_hover';
		$('div.share', this).css('visibility', 'visible');
	});
	$('div.article').mouseout(function() {
		this.className = 'article';
		$('div.share', this).css('visibility', 'hidden');
	});
}

// Scan News divs and add functionality for similar articles
function scan_news() {
	init_articles();
	$(".related_stories_btn").unbind();
	$(".related_stories_btn").mouseover(function() {
		$(this).addClass('related_stories_btn_hover');
	});
	$(".related_stories_btn").mouseout(function(e) {
		$(this).removeClass('related_stories_btn_hover');
		// e.stopPropagation();
	});
	$(".related_stories_btn").click(function() {
		var article_ct = this.parentNode.parentNode;
		if ($.browser.msie)
			$(" > div.relatedStories", article_ct).slideToggle("fast");
		else 
			$(" > div.relatedStories", article_ct).slideToggle("fast");
		if (this.style.fontWeight == 'bold') {
			$(this).css("font-weight", "normal");
			$("img", this).attr({src: "images/button_down_arrow.gif"});
		} else {
			$(this).css("font-weight", "bold");
			$("img", this).attr({src: "images/button_up_arrow.gif"});
		}
	});
	$('span.email_btn').css("cursor", "pointer");
	$('span.email_btn').unbind();
	$('span.email_btn').click(function() {
		var article = $(this).parents('div.article_hover');
		var content = {
			title: 'Send this article',
			subject: $('a.news_title', article).text(),
			body: $('div.content', article)[0].innerHTML
		};
		show_email_form(content);
	});
}

function render_news(news) {
	var html = '';
	var imagetag = '';
	if (news.image) {
		if (!news.image.url.match(/www\.apogevmatini\.gr/))
			imagetag = '<a class="lightbox" href="'+news.image.url+'"><img src="'+news.image.url+'" width=80 class="image"></a>'+
				'<div align=center class=details><a href="'+news.image.originalContextUrl+'" title="'+news.image.titleNoFormatting+'">'+news.image.publisher+'</a></div>';
	}
	var relatedStoriesTag = '';
	if (news.relatedStories) {
		$.each(news.relatedStories, function() {
			relatedStoriesTag += '<div class=related>&raquo; <a href="'+this.unescapedUrl+'">'+this.titleNoFormatting+'</a> - <span class=source>'+this.publisher+'</span></div>';
		});
		if (relatedStoriesTag) {
			news.relatedStoriesTag = '<div class=details>'+relatedStoriesTag+'</div>'
			news.relatedTotal = news.relatedStories.length;
		}
	}
	news.relatedCap = '';
	if (new Date(news.publishedDate).format('j/n') == new Date().format('j/n'))
		news.publishedDate = new Date(news.publishedDate).format('H:i');
	else 
		news.publishedDate = new Date(news.publishedDate).format('j/n H:i');
	if (news.relatedTotal > 1) {
		news.relatedCap = 'Show '+news.relatedTotal+' related stories';
	} else {
		news.relatedCap = 'Show '+news.relatedTotal+' related story';
	}
	if (robby.lang == 'greek') {
		if (news.relatedTotal > 1) {
			news.relatedCap = news.relatedTotal+' Σχετικά άρθρα'
		} else {
			news.relatedCap = news.relatedTotal+' Σχετικό άρθρο'
		}
	}

	news.content = news.content.replace(/<.+?>/g, '');
	html = '<div class=article><div class=content>'+
		'<table><tr><td valign=top>'+
			imagetag+
		'</td><td valign=top>'+
			'<a class=news_title href="'+news.unescapedUrl+'">'+news.titleNoFormatting+'</a> '+
			'<a href="'+news.unescapedUrl+'" target=_blank><img src="images/newwind.gif" border=0 width=12 height=10></a>'+
			'<div class=descr>'+news.content+'</div>'+
			'<div class=details><span class=source><b>'+news.publisher+'</b></span> - <span class=url>'+news.publishedDate+'</span></div>'+
		'</td></tr></table>'+
		'</div>'; // content
		if (news.relatedStories) {
			html += '<div align=left><span class="related_stories_btn"><img src="images/button_down_arrow.gif" border=0 align=top width=12> '+news.relatedCap+'</span></div>'+
				'<div class="relatedStories" style="display: none; margin-top:4px"><div class=details>'+relatedStoriesTag+'</div></div>';
		}
		html += '</div>'; // article
	return html;
}

function scan_suggest() {
	$('.suggest_key').css('cursor', 'pointer');
	$('.suggest_key').mouseover(function() {
		$('.suggest_key_selected').removeClass('suggest_key_selected');
		$(this).addClass('suggest_key_selected');
	});
	$('.suggest_key').mouseout(function() {
		$(this).removeClass('suggest_key_selected');
	});
	$('.suggest_key').click(function() {
		$('#searchstr').attr('value', $(this).attr('innerHTML'));
		$('#searchform')[0].submit();
	});
}

function suggest(o, e) {
	var e = window.event ? event : e //distinguish between IE's explicit event object (window.event) and Firefox's implicit.
	// var unicode=evtobj.charCode ? evtobj.charCode : evtobj.keyCode;
	if (e) {
		if ($.browser.mozilla  && e.type=='keydown') 
			return;
	}
	var searchstr = o.value
	if (e) {
		if (e.altKey || e.ctrlKey)
			return;
		if (e.charCode > 0) {
			searchstr += String.fromCharCode(e.charCode)
		} else {
			// alert(e.keyCode);
			var KEY = {
				UP: 38,
				DOWN: 40,
				DEL: 46,
				TAB: 9,
				RETURN: 13,
				ESC: 27,
				COMMA: 188,
				PAGEUP: 33,
				PAGEDOWN: 34,
				BACKSPACE: 8,
				HOME: 36,
				END: 35,
				LEFT: 37,
				RIGHT: 39,
				CTRL: 17,
				ALT: 18
			};
			switch(e.keyCode) {
				case KEY.BACKSPACE:
					$('#suggest_ct').css('display', 'none');
					return;
				case KEY.DEL:
					$('#suggest_ct').css('display', 'none');
					return;
				case KEY.TAB:
					$('#suggest_ct').css('display', 'none');
					return;
				case KEY.DOWN:
					if ($('#suggest_ct').attr('innerHTML') == '') {
						return;
					} else {
						$('#suggest_ct').show();
					}
					var selected = $('.suggest_key_selected', '#suggest_ct');
					var next = $('.suggest_key_selected', '#suggest_ct').next();
					if (next.length > 0) {
						$('.suggest_key_selected').removeClass('suggest_key_selected');
						$(next).addClass('suggest_key_selected');
					} else {
						$('.suggest_key_selected').removeClass('suggest_key_selected');
						var first = $('.suggest_key', '#suggest_ct')[0];
						$(first).addClass('suggest_key_selected');
					}
					$('#searchstr').attr('value', $('.suggest_key_selected').attr('innerHTML'));
					return;
				case KEY.UP:
					if ($('#suggest_ct').attr('innerHTML') == '') {
						return;
					} else {
						$('#suggest_ct').show();
					}
					var selected = $('.suggest_key_selected', '#suggest_ct');
					var prev = $('.suggest_key_selected', '#suggest_ct').prev();
					if (prev.length > 0) {
						$('.suggest_key_selected').removeClass('suggest_key_selected');
						$(prev).addClass('suggest_key_selected');
					} else {
						$('.suggest_key_selected').removeClass('suggest_key_selected');
						var last = $('.suggest_key', '#suggest_ct')[$('.suggest_key', '#suggest_ct').length-1];
						$(last).addClass('suggest_key_selected');
					}
					$('#searchstr').attr('value', $('.suggest_key_selected').attr('innerHTML'));
					return;
				case KEY.ESC:
					$('#suggest_ct').css('display', 'none');
					return;
				case KEY.HOME:
					return;
				case KEY.END:
					return;
				case KEY.PAGEUP:
					return;
				case KEY.PAGEDOWN:
					return;
				case KEY.LEFT:
					return;
				case KEY.RIGHT:
					return;
				case KEY.CTRL:
					return;
				case KEY.ALT:
					return;
				default:
					searchstr += String.fromCharCode(e.keyCode);
			}
		}
	}
	if (searchstr.length > 0) {
		if (searchstr != $('#suggest_ct').attr('lastsearch')) {
			$.getJSON('http://google.com/complete/search?q='+searchstr+'&safe=off&callback=?', function(data, o) {
				$('#suggest_ct').attr('lastsearch', searchstr);
				$('#suggest_ct').attr('innerHTML', '');
				if (data[1].length == 0) {
					$('#suggest_ct').css('display', 'none');
					return;
				}
				$.each(data[1], function() {
					$('#suggest_ct').append('<div class="suggest_key">'+this[0]+'</div>');
				});
				$('#suggest_ct').css({
					left: $('#searchstr_ct').position().left,
					top: $('#searchstr_ct').position().top+$('#searchstr_ct').outerHeight(),
					width: $('#searchstr_ct').width()
				});
				scan_suggest();
				$('body').unbind();
				$('body').click(function() {
					$('#suggest_ct').css('display', 'none');
				});
				if (e)
					$('#suggest_ct').css('display', 'inline');

			});
		}
	} else {
		$('#suggest_ct').css('display', 'none');
		$('body').unbind();
	}
}

$(document).ready(function() {
	if ($.browser.mozilla)
		suggest(document.getElementById('searchstr'), null);
});

