// JavaScript Document
//prevent flicking on mouse over image.
try {
	document.execCommand("BackgroundImageCache", false, true);
} catch(exception) {
// other browsers do nothing
}

//var base = 'http://www.digi3studio.com/preview/tickupdate/web/en-us';
//var base = 'http://www.t-i-c-k.com/en-us';
//var base = '/en-us';
var suggests=[];
var lastRequest=[];

function defaultInput(input,defaultString){
	input.addClass('preedit');
	input.val(defaultString);
	input.focus(function(){
		if(input.val()==defaultString){
			input.val("");
			input.removeClass('preedit');
		};
	});
}

function screenClear(){
	suggests = [];
	$('#msg_split').addClass('clear');
	$('#item_list').html("");
	$('#search_result').html("");
}

function trim(str){
	return str.replace(/^\s+|\s+$/g,"");
}

function suggest(enum_str){
	var obj = enums[enum_str];
	var str = trim($(obj['input']).val());

	if(str == obj['lastSearch'])return;	
	obj['lastSearch'] = str;
	obj['clear']();

	if(str=="")return;
	do_suggest_tick(str		,obj['render']);
	do_suggest_wikipedia(str,obj['render']);
	do_suggest_google(str	,obj['render']);
	do_list_item(str);
}

function do_suggest_tick(str,render){
	if(lastRequest['tick']!=null)lastRequest['tick'].abort();

	lastRequest['tick'] = $.get(
		base+'/item/suggest/api.json?q='+encodeURIComponent(str),
		function(data){
			re_suggest_tick(data,render);
		},
		function(success){},
		'json'
	);
}

function re_suggest_tick(data,render){
	var htmlResult="";
	var arySuggest = data['item'];
	for(var i=0;i<arySuggest.length;i++){
		var txt = arySuggest[i]['name'];
		if(suggests[String(txt).toLowerCase()] == null)suggests[String(txt).toLowerCase()] = [txt,''];
	}
	render();
}

function do_suggest_wikipedia(str,render){
	if(lastRequest['wikipedia']!=null)lastRequest['wikipedia'].abort();
	lastRequest['wikipedia'] = $.get(
		'http://en.wikipedia.org/w/api.php?action=opensearch&format=json&search='+encodeURIComponent(str),
		function(data){
			re_suggest_wikipedia(data,render);
		},
		function(success){},
		'jsonp'
	);
}

function re_suggest_wikipedia(data,render){
	var htmlResult="";
	var arySuggest = data[1];

	for(var i=0;i<arySuggest.length;i++){
		var txt = arySuggest[i];
		suggests[String(txt).toLowerCase()] = [txt,'http://en.wikipedia.org/wiki/'+encodeURI(txt)];
	}
	render();
}

function do_suggest_google(str,render){
	if(lastRequest['google']!=null)lastRequest['google'].abort();
	lastRequest['google'] = $.get(
		'http://google.com/complete/search?q='+encodeURIComponent(str),
		function(data){
			re_suggest_google(data,render);
		},
		function(success){},
		'jsonp'
	);
}

function re_suggest_google(data,render){
	var htmlResult="";
	var arySuggest = data[1];
	for(var i=0;i<arySuggest.length;i++){
		var txt = arySuggest[i][0];
		if(suggests[String(txt).toLowerCase()] == null)suggests[String(txt).toLowerCase()] = [txt,''];
	}
	render();
}

/* suggest*/
function render_suggest_item(){
	var htmlResult="";
	for(var name in suggests){
		var item = suggests[name];
		htmlResult+="<span class='suggest'><a href='#'>"+item[0]+"</a> </span>"
	}
	$('#search_result').html(htmlResult);
	$('.suggest A').click(function(){
		var strBack = enums['item']['lastSearch'];
		$('#item_input').val($(this).html());
		suggest('item');
		suggests[strBack.toLowerCase()] = [strBack,''];
		return false;
	});
}

function do_list_item(str){
	if(lastRequest['list_item']!=null)lastRequest['list_item'].abort();
	lastRequest['list_item'] = $.get(
		base+'/item/list/api.json?q='+encodeURIComponent(str),
		re_list_item,
		function(success){},
		'json'
	);
}

function re_list_item(data){
	var htmlResult=[];
	var aryItems = data['item'];
	var format = data['format'];
	var items =[];

	//render item list
	for(var i=0;i<aryItems.length;i++){
		var item = aryItems[i];

		var str = format;
		str = str.replace(/{{{item_avatar}}}/gi, item['avatar']||"");
		str = str.replace(/{{{item_name}}}/gi, item['name']||"");
		str = str.replace(/{{{item_id}}}/gi, item['id']||"");
		str = str.replace(/{{{item_links}}}/gi, item['links']||'" class="hide');
		str = str.replace(/{{{item_tags}}}/gi, item['tags'].join(',')||"&nbsp;");

		items.push({id:item['id'],edit:item['edit'],verify:item['verify'],verified:item['verified']});

		var itemName = item['name'].toLowerCase();
		var inputName= $('#item_input').val().toLowerCase();
		if(itemName.indexOf(inputName)==0){
			htmlResult.unshift(str);
		}else{
			htmlResult.push(str);
		}
	}
	if($('#item_input').attr('readonly')){
		//if member tick first time, no need to append "add action";
		$('#item_list').html(htmlResult.join(""));
	}else{
		$('#item_list').html(htmlResult.join("")+'<li class="new"><div class="text">'+(aryItems.length>0? 'None of the item matched?':'No related item found.')+'</div><div class="action"><a id="new_item" href="'+base+'/item/add/new?n='+encodeURIComponent($('#item_input').val())+'">'+'Add it!</a></div></li>');
	}
	$('#msg_split').removeClass('clear');
	
	for (var i=0;i<items.length;i++){
		if(items[i]['edit']==false)$('#list_'+items[i]['id']+' .edit_action').remove();
		if(items[i]['verify']==false)$('#list_'+items[i]['id']+' .verify_action').remove();
		if(items[i]['verified']==false)$('#list_'+items[i]['id']+' .verified').remove();
	}
}

var enums = [];
enums['item']	= {input:'#item_input'	,data:[], render:render_suggest_item	,clear:screenClear	,defaultInputText:'anything u using, reading...'};
enums['tag']	= {input:'#tag_input'	,data:[], render:render_suggest_item	,clear:screenClear	,defaultInputText:'brand, color, mood...'};
enums['link']	= {input:'#link_input'	,data:[], render:render_suggest_item	,clear:screenClear	,defaultInputText:'http://wikipedia or official web site'};

function initSuggest(enum_str){
	$(enums[enum_str]['input']).keyup(function(){
		clearTimeout(enums[enum_str]['iid']);
		enums[enum_str]['iid'] = setTimeout(function suggest_item(){suggest(enum_str);},500);
	});
	defaultInput($(enums[enum_str]['input']),enums[enum_str]['defaultInputText']);
}

function initTag(){
	var enum_str="tag";
	$(enums[enum_str]['input']).keyup(add_tag);
	defaultInput($(enums[enum_str]['input']),enums[enum_str]['defaultInputText']);
}

function add_tag(event){
	if(event.keyCode ==188 ||event.keyCode ==13){
		var value = trim($(enums['tag']['input']).val().split(",")[0]);

		$(enums['tag']['input']).val('');
		if(value=="")return;

		render_tag(value);
	};
}

function render_tag(value){
	if(value == '')return;
	//prevent duplicate entry
	var element_tags = $('.tag A.remove');
	for(var i=0;i<element_tags.length;i++){
		if(value==$(element_tags[i]).html())return;
	}

	$('#tag_result').html(
		$('#tag_result').html()+
		"<span class='tag'><a href='#' class='remove'>"+value+"</a> </span>"
	);
	$(enums['tag']['input']).val('');

	enableLinkRemove();
}

function initLink(){
	var enum_str="link";
	$(enums[enum_str]['input']).keyup(add_link);
	defaultInput($(enums[enum_str]['input']),enums[enum_str]['defaultInputText']);
	do_suggest_wikipedia($("#item_name").val(),check_wikipedia_link);
}

function check_wikipedia_link(){
	var itemName = $("#item_name").val().toLowerCase();
	for(var name in suggests){
		var item = suggests[name];
		if(itemName == String(item[0]).toLowerCase()){
			render_link(item[1]);
		}
	}
}

function render_link(value){
	if(value == '')return;
	//prevent duplicate entry
	var element_links = $('.link A.remove');
	for(var i=0;i<element_links.length;i++){
		if(value==$(element_links[i]).html())return;
	}

	if(value.indexOf('http')!=0)value='http://'+value;
	$('#link_result').html(
		$('#link_result').html()+
		"<div class='link'><a href='#' class='remove'>"+value+"</a><a href='"+value+"' target='_blank' class='redirect'> view</a></div>"
	);

	enableLinkRemove();
}

function add_link(event){
	if(event.keyCode ==188 ||event.keyCode ==13){
		var value = $(enums['link']['input']).val().split(",")[0];

		$(enums['link']['input']).val('');
		if(value=="")return;

		//prevent duplicate entry
		var data = enums['link']['data'];
		for(var i=0;i<data.length;i++){
			if(value == data[i])return;
		}
		data.push(value);

		render_link(value);
	};
}

function initSubmit(){
	$('#submit_item').click(function(){
		//collect tags,
		var element_tags = $('.tag A.remove');
		var ary_tags = [];

		//add the input text to links
		var str_tag_input = $('#tag_input').val();
		if(str_tag_input!= enums['tag']['defaultInputText'] && trim(str_tag_input)!=""){
			ary_tags.push(str_tag_input);
		}
		//collect links from buttons
		for(var i=0;i<element_tags.length;i++){
			ary_tags.push($(element_tags[i]).html());
		}
		//assign to hidden input
		$('INPUT#tags').val(ary_tags.join(','));


		//collect links,
		var element_links = $('.link A.remove');
		var ary_links = [];

		//add the input text to links
		var str_link_input = $('#link_input').val();
		if(str_link_input!= enums['link']['defaultInputText'] && trim(str_link_input)!=""){
			ary_links.push(str_link_input);
		}
		//collect links from buttons
		for(var i=0;i<element_links.length;i++){
			ary_links.push($(element_links[i]).html());
		}
		//assign to hidden input
		$('INPUT#links').val(ary_links.join(','));
		$('#item_form').submit();
		return false;
	});
	$('#submit_profile').click(function(){
		$('#member_form').submit();
		return false;
	});
}

function enableLinkRemove(){
	$('A.remove').click(function(){
		$(this).parent().remove()
		return false;
	});
}

$(function(){
	Cufon.replace('.title');

	if($('#item_input').attr('readonly')){
		//for first tick
		do_list_item(trim($('#item_input').val()));
	}else{
		//revisit members
		if($('#item_name').val()!=null){
			initTag();
			initLink();
			enableLinkRemove();
		}else{
			initSuggest('item');
		}
	}
	initSubmit();
});

