
var photos = [];
var tagContainer = "tag_container";
var photoContainer = "photo_container";
var tagList = [];
var tagCountList = [];
var tagMaxCount = 0;
var tagNodes = [];
var searchTagList = [];
var checkedTagList = [];
var isSearching = false;
var tagCallCount = 0;
var defaultMessage = 'type text here to start';

var howTo = '';


/*
*
* Search
*
*/

function init() {
	isSearching = false;
	remove_children(photoContainer);
	remove_children(tagContainer);
	var div = document.getElementById(tagContainer);
	div.className = 'hidden';
	
	var div = document.getElementById(photoContainer);
	
	
	// SEARCH BOX
	var block = document.createElement( 'div' );
	block.id = 'search';
	var input = document.createElement( 'input' );
	input.type = 'text';
	input.id = 'search_text';
	input.value = defaultMessage;
	dom.event.addEventListner(input, 'click', onInputClick);
	var linkNode = document.createElement( 'a' );
	dom.event.addEventListner(linkNode, 'click', startSearch);
	var text = document.createTextNode('SEARCH');
	linkNode.appendChild(text);
	
	block.appendChild(input);
	block.appendChild(linkNode);
	div.appendChild(block);
}

function onInputClick(evt) {
	if (document.getElementById('search_text').value == defaultMessage) {
		document.getElementById('search_text').value = '';
	}
}

function startSearch() {
	if (document.getElementById('search_text').value != 'type text here to start') {
		getMoviesByKeys(document.getElementById('search_text').value);
	}
}

function startRecentSearch() {
	getRecentPhotos()
}


function getMoviesByKeys ( tag ) {
	var div = document.getElementById(tagContainer);
	div.className = '';
	tagCallCount = 0;
	
	isSearching = true;
	if (tag != '') {
		checkedTagList.push(tag);
	}
	param = {};
	param.vq = checkedTagList.join('+');
    param.alt = 'json-in-script';
    param.callback = 'onMoviesLoad';
	
    var url = 'http://gdata.youtube.com/feeds/api/videos?'+
               obj2query( param );

	show_waiting(photoContainer);

    var script  = document.createElement( 'script' );
    script.type = 'text/javascript';
    script.src  = url;
    document.body.appendChild( script );
	
	resetTagList();
};


function getInfo(id) {
	
	param = {};
	param.photo_id = id;
	param.api_key  = apiKey;
	param.method   = 'flickr.photos.getInfo';
    param.format   = 'json';
    param.jsoncallback = 'onInfoLoad';
	
	var url = 'http://www.flickr.com/services/rest/?'+
               obj2query( param );
	
	var script  = document.createElement( 'script' );
    script.type = 'text/javascript';
    script.src  = url;
    document.body.appendChild( script );
}


function searchByTag(evt) {
	getMoviesByKeys(dom.event.target(evt).title);
}


function obj2query ( obj ) {
    var list = [];
    for( var key in obj ) {
        var k = encodeURIComponent(key);
        var v = encodeURIComponent(obj[key]);
        list[list.length] = k+'='+v;
    }
    var query = list.join( '&' );
    return query;
}

/*
*
* Handler
*
*/
function onMoviesLoad ( data ) {
	
	if (!isSearching) { return }
	if ( ! data ) return;
    if ( ! data.feed ) return;
    if ( ! data.feed.entry ) return;
	
	remove_children(photoContainer);
	
	var feed = data.feed;
	var entries = feed.entry || [];
    var html = ['<ul>'];
    
	
	var div = document.getElementById(photoContainer);
	
	//alert(entries.length);
	for (var i = 0; i < entries.length; ++i) {
      var entry = entries[i];
      var title = entry.title.$t;
	  var linkHref = entry.link[0].href;
	  var thumbSrc = entry["media$group"]["media$thumbnail"][0].url;
	  var rate = Math.floor(Number(entry["gd$rating"].average));
	  var duration = Number(entry["media$group"]["yt$duration"].seconds);
      //html.push('<li>', title, thumb,'</li>');
	  
	  	var movieBlock = document.createElement( 'div' );
	  	movieBlock.className = 'movie_block';
		
	  	var linkNode = document.createElement( 'a' );
		linkNode.href = linkHref;
		linkNode.target = 'movie';
		var descNode = document.createElement( 'div' );
		descNode.className = 'desc'
		var titleNode = document.createElement( 'p' );
		var rateNode = document.createElement( 'p' );
		rateNode.className = 'rate';
		var timeNode = document.createElement( 'p' );
		
		
        var img = document.createElement( 'img' );
        img.src = thumbSrc;
		img.title = title;
		img.width = 80;
		img.height = 60;
        img.style.border = '0';
		
		var textNode = document.createTextNode( title );
		var rateStr = '';
		for (var k = 0; k < rate; k ++) {
			rateStr += ' * ';
		}
		var rateNumNode = document.createTextNode( rateStr );
		var timeTextNode = document.createTextNode( Math.floor(duration / 60) + ':' + addZero(duration % 60) );
		
        linkNode.appendChild( img );
        movieBlock.appendChild( linkNode );
		
        titleNode.appendChild( textNode );
		rateNode.appendChild( rateNumNode );
		timeNode.appendChild( timeTextNode );
		
		descNode.appendChild( titleNode );
        descNode.appendChild( rateNode );
        descNode.appendChild( timeNode );
        
		movieBlock.appendChild( descNode );
        
		div.appendChild( movieBlock);
	  	
		var categories = entry.category || [];
		for (var j = 0; j < categories.length; j ++) {
			var category = entry.category[j];
			if (category.term.indexOf("http") < 0) {
				addToTagList(category.term)
			}
		}
	}

}

function onInfoLoad ( data ) {
	
	if (!isSearching) { return }
	
    if ( ! data ) return;
    if ( ! data.photo ) return;
    if ( ! data.photo.tags) return;
    if ( ! data.photo.tags.tag ) return;
	
	var list = data.photo.tags.tag ;

	for( var i=0; i<list.length; i++ ) {
        var tag = list[i].raw;
		
		addToTagList(tag);
	}
}


/*
*
* TagControle
*
*/

function addToTagList(tag) {
	
	for (var i = 0; i < checkedTagList.length; i ++) {
		if (checkedTagList[i] == tag) {
			return;
		}
	}
	
	
	for (var j = 0; j < tagList.length; j ++) {
		
		if (tagList[j] == tag) {
			tagCountList[j] ++;
			if (tagCountList[j] < 1) {
				tagNodes[j].className = 'tag_level_1';
			} else if (tagCountList[j] < 2) {
				tagNodes[j].className = 'tag_level_2';
			} else if (tagCountList[j] < 5) {
				tagNodes[j].className = 'tag_level_3';
			} else if (tagCountList[j] < 10) {
				tagNodes[j].className = 'tag_level_4';
			} else {
				tagNodes[j].className = 'tag_level_5';
			}
				
			
			if (tagMaxCount < tagCountList[j]) {
				tagMaxCount = tagCountList[j];	
			}
			return
		}
		
	}
	tagList.push(tag);
	tagCountList.push(1);
	
	var div = document.getElementById(tagContainer);
	
	var linkNode = document.createElement( 'a' );
	linkNode.title = tag;
	linkNode.id = tag;
		
	dom.event.addEventListner(linkNode, 'click', searchByTag);

    var text = document.createTextNode( tag + ' ' );
	linkNode.appendChild( text );
    div.appendChild( linkNode );
	
	
	tagNodes.push(linkNode);
	
}

function resetTagList() {
	remove_children(tagContainer);
	tagList = [];
	tagCountList = [];
	tagNodes = [];
	tagMaxCount = 0;
	
	var div = document.getElementById(tagContainer);
    for( var i=0; i<checkedTagList.length; i++ ) {
        var tag = checkedTagList[i];
		var block = document.createElement('div');
		var check = document.createElement('img');
		check.src = 'img/check.gif';
		check.id = i;
		dom.event.addEventListner(check, 'click', deleteCheckedTag);

        var text = document.createTextNode(tag );
        
		block.appendChild(check);
        block.appendChild(text);
		div.appendChild(block);

    }
}

function deleteCheckedTag(evt) {
	checkedTagList.splice(Number(dom.event.target(evt).id), 1);
	if (checkedTagList.length == 0) {
		init();
	} else {
		getMoviesByKeys('');
	}
}

/*
*
* Display
*
*/


function remove_children ( id ) {
    var div = document.getElementById( id );
    while ( div.firstChild ) { 
        div.removeChild( div.lastChild );
    }
};

function show_waiting ( id ) {
	remove_children(id);
    var div = document.getElementById( id );
	var img = document.createElement( 'img' );
    img.src = 'img/wait.png';
    img.style.border = '0';
    div.appendChild(img);
};

/*
*
* Util
*
*/

function addZero(n) {
	if (n < 10) {
		return "0" + n;
	} else {
		return "" + n;
	}
}


/*
*
* Debug
*
*/


function toConsole(str) {
	return
	var div = document.getElementById('console');
	var text = document.createTextNode(str + ' ');
    div.appendChild(text);	
}

function clearConsole() {
	remove_children('console');
}







