// REQUIRES daylife_base.js

if(!DAYLIFE){
	var DAYLIFE = {}
}

DAYLIFE.Searcher = function(){
	var version = '1.0';
	var DL = DAYLIFE;
	var dom = DL.Dom;
	var daypi = DL.Daypi;
	var events = DL.Events;
	var type_calls = {
		articles: 'search_getRelatedArticles',
		topics: 'search_getRelatedTopics',
    quotes: 'search_getRelatedQuotes',
    images: 'search_getRelatedImages',
    quotesabout: 'search_getQuotesAbout'
	};
	var display_requests = [];
	var displayIn = function(request_id, elem){
		var display_in = display_requests[request_id];
		if(display_in){
			dom.emptyElement(display_in);
			if(elem.childNodes.length < 1){
				elem = dom.makeElement('p', { className: 'dlPromo' }, 'We could not find any results for this search.')
			}
			display_in.appendChild(elem);
		}
	}
	
	return{
		
		formatTimestamp: function(ts){
			var date = ts.replace(/(\d{4})-(\d{2})-(\d{2})/,"$2/$3/$1");
			var hourmatch = date.match(/\s\d{2}/);
			var hour = parseInt(hourmatch[0]);
			var ampm = (hour < 12) ? 'am' : 'pm';
			hour = (ampm == 'am') ? ((hour < 1) ? 12: hour) : ((hour > 12) ? hour - 12 : hour);
			date = date.replace(/\d{2}:(\d{2}):\d{2}/, hour + ":$1 " + ampm);
			return date;
		},
		
		renderForm: function(form_container_id,prompt,dimensions,search_on_init){
			prompt = (prompt.push) ? prompt[Math.floor(Math.random()*prompt.length)] : ((prompt) ? prompt : "");
			var callbacks = {
				'articles' : this.displayArticles,
				'topics' : this.displayTopics,
				'images' : this.displayImages
			}
			var container = document.getElementById(form_container_id);
			var id;
			if(container){
				var src_container = dom.makeElement('div',{ 'id': 'DAYLIFE_SEARCH' });
				container.appendChild(src_container);
				var form = dom.makeElement('form',{ className: 'dlSearchForm'});
				var field = dom.makeElement('input',{ type: 'text', value: prompt, className: 'dlField', name: 'query' });
				field.is_prompting = true;
				field.onfocus = function(){
					if(field.is_prompting){
						field.value = "";
						field.is_prompting = false;
					}
				}
				var hidden = dom.makeElement('input',{ type: 'hidden', value: 'articles', name: 'category'});
				var submit = dom.makeElement('input',{ type: 'submit', className: 'dlSubmit', value: 'search' });
				var submittext = dom.makeElement('span','Search');
				var ul = dom.makeElement('ul',[
					dom.makeElement('li',[
						dom.makeElement('a',{ href: '#', rel: 'articles', className: 'on' },'Articles')
					]),
					dom.makeElement('li',[
						dom.makeElement('a',{ href: '#', rel: 'topics' },'Topics')
					]),
					dom.makeElement('li',[
						dom.makeElement('a',{ href: '#', rel: 'images' },'Images')
					])
				]);
				var tabs = [];
				for (var i = ul.childNodes.length - 1; i >= 0; i--){
					tabs[i] = ul.childNodes[i].firstChild;
				};
				//submit.appendChild(submittext);
				var fieldset = dom.makeElement('fieldset',[
					field,
					hidden,
					submit,
					ul
				]);
				form.appendChild(fieldset);
				src_container.appendChild(form);
				results_container = dom.makeElement('div', { className: 'dlSearchResults'}, [
					dom.makeElement('p', { className: 'dlPromo' }, 'Search the world\'s news with Daylife.')
				]);
				src_container.appendChild(results_container);
				var footer = dom.makeElement('p', { className: 'dlFooter' }, 'Powered by Daylife');
				src_container.appendChild(footer);
				if(dimensions){
					if(dimensions.width){
						container.style.width = dimensions.width + "px";
					}
					if(dimensions.height){
						var cum_height = form.offsetHeight + footer.offsetHeight;
						var res_height = dimensions.height - cum_height;
						results_container.style.height = res_height + "px";
						results_container.style.overflowY = "auto";
						results_container.style.overflowX = "hidden";
					}
				}
				var self = this;
				var submit = function(){
					var type = hidden.value
					var callback = callbacks[type];
					var query = field.value;
					if(query && callback){
						id = self.search(type, query, callback);
						dom.emptyElement(results_container);
						results_container.appendChild(dom.makeElement('p', { className: 'dlPromo' }, 'Searching for ' + type + '...'))
						display_requests[id] = results_container;
					}
					return false;
				}
				form.onsubmit = submit;
				// for ie...
				if(document.all){
					submit.onclick = submit;
				}
				ul.onclick = function(e){
					var targ = events.getTarget(e);
					if(targ.rel){
						for (var i = tabs.length - 1; i >= 0; i--){
							tabs[i].className = "";
						};
						targ.className = "on";
						hidden.value = targ.rel;
						submit();
					}
					return false;
				}
				if(search_on_init === true){
					submit();
				}
			}
		},
		
		displayArticles: function(response,request_id){
			var self = this, lis, count;
			var header = dom.makeElement('p', { className: 'dlHeader' }, 'Articles');
			var ul = dom.makeElement('ul', { className: 'articles' });
			var articles = response["response"]["payload"]["article"], article, li, date, sourcename;
			if(articles){
				var count = articles.length;
				for(var i=0;i<count;i++){
					article = articles[i];
					sourcename = article["source"]["name"] || article["source"]["url"];
					li = dom.makeElement('li',[
						dom.makeElement('a',{ href: article["url"], className: 'headline', target: '_blank' }, article["headline"]),
						dom.makeElement('p', [
							dom.makeElement('span', DL.Searcher.formatTimestamp(article["timestamp"]) + ' from '),
							dom.makeElement('a', { href: article["source"]["url"] }, sourcename),
							dom.makeElement('a', { href: 'http://www.daylife.com/article/' + article["article_id"], target: '_blank', className: 'more' }, 'more info')
						]),
					]);
					ul.appendChild(li);
				}
			}
			displayIn(request_id, ul);
		},
		
		displayImages: function(response,request_id){
			var lis, count;
			var header = dom.makeElement('p', { className: 'dlHeader' }, 'Images');
			var ul = dom.makeElement('ul', { className: 'images' });
			var images = response["response"]["payload"]["image"], image, li, sourcename, link;
			if(images){
				var count = images.length;
				for(var i=0;i<count;i++){
					image = images[i];
					link = "http://www.daylife.com/image/" + image['image_id'];
					sourcename = image["source"]["name"] || image["source"]["url"];
					li = dom.makeElement('li',[
						dom.makeElement('a',{ href: link, className: 'image', target: '_blank' }, [
							dom.makeElement('img', { src: image['thumb_url'], border: 0 })
						]),
						dom.makeElement('p',{ className: 'caption' }, image['caption']),
						dom.makeElement('p', [
							dom.makeElement('span', DL.Searcher.formatTimestamp(image["timestamp"]) + ' from '),
							dom.makeElement('a', { href: image["source"]["url"] }, sourcename)
						]),
					]);
					ul.appendChild(li);
				}
			}
			displayIn(request_id, ul);
		},
		
		displayTopics: function(response,request_id){
			var lis, count;
			var header = dom.makeElement('p', { className: 'dlHeader' }, 'Topics');
			var ul = dom.makeElement('ul', { className: 'topics' });
			var topics = response["response"]["payload"]["topic"], topic, li;
			if(topics){
				var count = topics.length;
				for(var i=0;i<count;i++){
					topic = topics[i];
					li = dom.makeElement('li',[
						dom.makeElement('a',{ href: topic["daylife_url"], className: 'headline', target: '_blank' }, topic["name"]),
						dom.makeElement('span',' (' + topic["type"].toLowerCase() + ')')
					]);
					ul.appendChild(li);
				}
			}
			displayIn(request_id, ul);
		},
		
		search: function(type,querystr,callback){
			var method = type_calls[type];
			if(method){
				params = (type == "images") ? { query: querystr, source_filter_id: '118000000000000002' } : { query: querystr };
				return daypi.request(method, params ,callback);
			}
		}
		
	}
}();

