//print css
document.write('<link href="/shared/css/slideshow.css" type="text/css" rel="stylesheet" media="all" />');
if ($.browser.msie) document.write('<link href="/shared/css/slideshow_ie.css" type="text/css" rel="stylesheet" media="all" />');



var SlideShow = mm.extend({
	slide_num: 0,
	move_flag: true,
	move_bind_flag: false,
	index_flag: true,
	
	init: function (obj) {
		this.slide_wid = (obj.slideWid) ? obj.slideWid : 500;
		this.slide_arr = $.map(obj.slideArr, function (i) {
			return i;
		});
		this.slide_len = this.slide_arr.length;
		if (obj.moveBind != undefined) {
			this.move_bind_flag = true;
			this.move_bind = obj.moveBind;
		}
		
		$(this.slide_arr[this.slide_num]).clone().css({left: '0px',display: 'none'}).appendTo('#slides');
		$('#slides .slide').fadeIn(250);
		this.navigation();
		this.timer();
	},
	
	timer: function () {
		if (this.slide_len <= 1) return;
		
		this.timerid = setTimeout(function () {
			if (!SlideShow.move_flag) return;
				SlideShow.forward(1);
				$('#slideshow .paginate span').each(function (i) {
					$('#slideshow .paginate span.c').removeClass('c');
					$('#slideshow .paginate span').eq(SlideShow.slide_num).addClass('c');
				});
			}, 10000);
	},
	
	navigation: function () {
		for (var i = 0, ix = this.slide_len; i < ix; i++) {
			$('#slideshow .paginate tr').append('<td><span></span></td>');
		}

		$('#slideshow .paginate span').each(function (i) {
			if (i == 0) $(this).addClass('c');
			
			$(this).click(function () {
				if (!SlideShow.move_flag) return;
				
				$('#slideshow .paginate span.c').removeClass('c');
				$(this).addClass('c');
				SlideShow.skip(i);
			});
		});
	},
	
	skip: function (target) {
		if (target == this.slide_num) return;
		
		if ((this.slide_len - 1) % 2 == 0) {
			var max_forward = (this.slide_len - 1) / 2;
			var max_back    = max_forward;
		}
		else {
			var max_forward = Math.floor((this.slide_len - 1) / 2) + 1;
			var max_back    = (this.slide_len - 1) - max_forward;
		}
		var gap = target - this.slide_num;
		
		if (gap > 0 && gap <= max_forward) {
			var derection = true;
			var interval  = target - this.slide_num;
		}
		else if (gap > 0 && gap > max_forward) {
			var derection = false;
			var interval  = this.slide_len - target + this.slide_num;
		}
		else if (gap < 0 && Math.abs(gap) == max_forward || Math.abs(gap) <= max_back) {
			var derection = false;
			var interval  = this.slide_num - target;
		}
		else if (gap < 0 && Math.abs(gap) > max_back) {
			var derection = true;
			var interval  = this.slide_len + target - this.slide_num;
		}
		
		if (derection) this.forward(interval) ;
		else this.back(interval);
	},
	
	forward: function (n) {
		if (!this.move_flag) return;
		this.move_flag = false;
		
		var rotate_in     = ((this.slide_len - 1 - this.slide_num) <= n) ? (this.slide_len - 1 - this.slide_num) : n;
		var rotate_out    = ((this.slide_num + n) > (this.slide_len - 1)) ? (this.slide_num + n) - (this.slide_len - 1) : 0;
		var slide_obj_num = 0;
		
		for (var i = (this.slide_num + 1), ix = (this.slide_num + rotate_in); i <= ix; i++) {
			slide_obj_num++;
			$(this.slide_arr[i]).clone().css({left: (this.slide_wid*slide_obj_num) + 'px'}).appendTo('#slides');
		}
		
		if (rotate_out) {
			for (var i = 0, ix = rotate_out; i < ix; i++) {
				slide_obj_num++;
				$(this.slide_arr[i]).clone().css({left: (this.slide_wid*slide_obj_num) + 'px'}).appendTo('#slides');
			}
		}
		
		this.slide_num = (rotate_out) ? rotate_out - 1 : this.slide_num + rotate_in;
		this.move(slide_obj_num, true);
	},
	
	back: function (n) {
		if (!this.move_flag) return;
		this.move_flag = false;
		
		var rotate_in     = ((this.slide_num - n) >=  0) ? n : this.slide_num;
		var rotate_out    = ((this.slide_num - n) < 0) ? Math.abs(n - this.slide_num) : 0;
		var slide_obj_num = 0;
		
		if (rotate_in) {
			for (var i = (this.slide_num - 1), ix = (this.slide_num - rotate_in); i >= ix; i--) {
				slide_obj_num++;
				$(this.slide_arr[i]).clone().css({left: ('-' + this.slide_wid*slide_obj_num) + 'px'}).appendTo('#slides');
			}
		}
		
		if (rotate_out) {
			for (var i = (this.slide_len - 1), ix = (this.slide_len - rotate_out); i >= ix; i--) {
				slide_obj_num++;
				$(this.slide_arr[i]).clone().css({left: ('-' + this.slide_wid*slide_obj_num) + 'px'}).appendTo('#slides');
			}
		}
		
		this.slide_num = (rotate_out) ? this.slide_len - rotate_out : this.slide_num - rotate_in;
		this.move(slide_obj_num, false);
	},
	
	move: function (num, move) {
		if (this.move_bind_flag) this.move_bind();
		clearTimeout(this.timerid);
		
		$.each($('#slides .slide'), function (i) {
			if (move) {
				var pos = parseInt($(this).css('left').split('px')[0]) - num * SlideShow.slide_wid;
			}
			else {
				var pos = parseInt($(this).css('left').split('px')[0]) + num * SlideShow.slide_wid;
			}
			
			if (i == 0) {
				$(this).animate({opacity: 0,left: pos + 'px'}, 800, 'swing', function () {
					if (num != i) $(this).remove();
					SlideShow.move_flag = true;
				});
			}
			else {
				$(this).animate({left: pos + 'px'}, 800, 'swing', function () {
					if (num != i) $(this).remove();
					SlideShow.move_flag = true;
				});
			}
		});
		this.timer();
	},
	
	createHtml: function (xml) {
		var category = (xml.find('type').size()) ? 'projects' : 'works';
		
		var html   = $('<div><div class="detail"><h2 /><ul /><p /></div><ul class="btn" /></div>');
		
		var ul     = html.find('.detail > ul');
		var btn    = html.find('ul.btn');
		
		html.find('h2').append(xml.find('name').text().replace(/\{br\}/, '<br />'));
		
		if (category == 'projects') {
			ul.append('<li class="t">' + xml.find('type').text() + '</li>');
		}
		else {
			ul.append('<li class="c">' + xml.find('client').text() + '</li>');
			ul.append('<li class="w">' + xml.find('works').text() + '</li>');
		}
		
		ul.append('<li class="r">' + xml.find('release').text() + '</li>');
		
		if (xml.find('url').size() && xml.find('url').text() != '') {
			ul.append('<li class="l"><a href="' + xml.find('url').text() + '" target="_blank">' + xml.find('url').text() + '</a></li>');
			
			if (category == 'projects') {
				btn.append('<li><a href="' + xml.find('url').text() + '" class="blank" target="_blank">launch this site</a></li>');
			}
			else {
				btn.append('<li><a href="' + xml.find('url').text() + '" class="blank" target="_blank">launch this site</a></li>');
			}
		}
		
		if (!this.index_flag) {
			btn.append('<li><a href="#" class="close">close</a></li>');
			btn.find('.close').click(function () {
				SlideBox.close();
				return false;
			});
		}
		else if (category == 'projects') {
			btn.append('<li><a href="projects.html" class="link">more projects</a></li>');
		}
		else {
			btn.append('<li><a href="works.html" class="link">more works</a></li>');
		}
		
		var year  = new String((new Date()).getFullYear());
		var month = new String((new Date()).getMonth());
		var month = (month > 9) ? month : 0 + month;
		var today = year + month;
		var today = parseInt(today);
		var new_flag = ((today - parseInt(xml.find('release').text().split('.').join(''))) <= 3);
		if (category == 'projects' && new_flag) {
			html.prepend('<img src="/shared/img/icn_new_project.png" alt="new project" class="new" />');
		}
		else if (category == 'works' && new_flag) {
			html.prepend('<img src="/shared/img/icn_new_works.png" alt="new project" class="new" />');
		}
		
		html.find('p').append(xml.find('detail').text().replace(/\{br\}/, '<br />'));
		
		return html;
	}
});



var LoadLists = mm.extend({
	naviPosition: 'all',
	
	init: function (path) {
		$.ajax({
			url: path,
			type: 'GET',
			dataType: 'xml',
			success: function (xml) {
				LoadLists.category_flag = ($(xml).find('type').size() > 0);
				
				var loadxml = $.map($(xml).find('item'), function (i) {
					return i;
				});
				
				loadxml.sort(function (a, b) {
					var sort_a = parseInt($(a).find('release').text().split('.').join(''));
					var sort_b = parseInt($(b).find('release').text().split('.').join(''));
					
					return sort_b - sort_a;
				});
				
				// LoadLists.xml = $(xml).find('item');
				LoadLists.xml = $(loadxml);
				LoadLists.load(LoadLists.xml);
				LoadLists.createNavi(LoadLists.xml);
			}
		});
	},
	
	createNavi: function (xml) {
		var navi = ['all'];
		
		if (this.category_flag) {
			xml.find('type').each(function () {
				var type = $(this).text();
				var flag = true;

				for (var i = 0, ix = navi.length; i < ix; i++) {
					if (navi[i] == type) flag = false;
				}
				if (flag) navi.push(type);
			});
			
			$.each(navi, function (i, n) {
				if (i == 0) {
					var html = '<li class="all"><span>' + n + '</span></li>';
					$(html).addClass('c').appendTo('.options ul.inner');
				}
				else {
					var html = '<li><span>' + n + '</span></li>';
					$('.options ul.inner').append(html);
				}
			});
		}
		else {
			xml.find('release').each(function () {
				var year = $(this).text().split('.')[0];
				var flag = true;

				for (var i = 0, ix = navi.length; i < ix; i++) {
					if (navi[i] == year) flag = false;
				}
				if (flag) navi.push(year);
			});

			navi.sort(function (a, b) {
				return a - b;
			});

			$.each(navi, function (i, n) {
				var html = '<li><span>' + n + '</span></li>';
				if (i == 0) {
					$(html).addClass('c').appendTo('.options ul.inner');
				}
				else {
					$('.options ul.inner').append(html);
				}
			});
		}
		
		this.click();
	},
	
	click: function () {
		$('.options ul.inner li').click(function () {
			var item = $(this).text();
			if (LoadLists.naviPosition == item) {
				return;
			}
			else {
				$('.options ul.inner li.c').removeClass('c');
				$(this).addClass('c');
				LoadLists.naviPosition = item;
				
				if (item == 'all') {
					LoadLists.load(LoadLists.xml);
				}
				else {
					if (LoadLists.category_flag) {
						var new_xml = $.map(LoadLists.xml, function (i) {
							var type = $(i).find('type').text();
							if (type == LoadLists.naviPosition) {
								return i;
							}
						});
					}
					else {
						var new_xml = $.map(LoadLists.xml, function (i) {
							var release = $(i).find('release').text().split('.')[0];
							if (release == LoadLists.naviPosition) {
								return i;
							}
						});
					}
					LoadLists.load($(new_xml));
				}
				
				return false;
			}
		});
	},
	
	load: function (xml) {
		if (!$('#wplist [class*=block]').size()) {
			xml.each(function (i) {
				var html = LoadLists.html(this, i);
				$('#wplist').append(html);
			});
			
			if ((xml.size() % 2) != 0) {
				$('<div class="block4"><div class="inner"></div></div>').appendTo('#wplist');
			}			
		}
		else {
			$('#wplist').animate({
				height: 'toggle',
				opacity: 0
			}, 500, function () {
				$(this).children().remove();
				xml.each(function () {
					var html = LoadLists.html(this);
					$('#wplist').append(html);
				});
				
				if ((xml.size() % 2) != 0) {
					$('<div class="block4"><div class="inner"></div></div>').appendTo('#wplist');
				}
				
				$('#wplist').animate({
					height: 'toggle',
					opacity: 1
				}, 500);
			});
		}
	},
	
	html: function (item) {
		var category = (LoadLists.category_flag) ? 'projects' : 'works';
		var base     = $('<div class="block4"><div class="inner"><div class="detail" /></div></div>');
		var inner    = base.find('.inner');
		var detail   = base.find('.detail');
		var h2       = $('<h2 />');
		var ul       = $('<ul />');
		var img_path = '/shared/' + category + '_img/';
		
		var id             = $(item).attr('id');
		var name           = $(item).find('name').text();
		var slideshow_flag = ($(item).find('images').size() && $(item).find('images').find('image').size());
		var url_flag       = ($(item).find('url').size() && $(item).find('url').text() != '');
		var year_dir       = $(item).find('release').text().split('.')[0];
		
		inner.prepend('<img src="/shared/' + category + '_img/' + year_dir + '/' + $(item).find('thumbnail').attr('src') + '" alt="' + name.replace(/\{br\}/, '') + '" title="' + name.replace(/\{br\}/, '') + '" class="thumbnail" />');
		
		h2.append(name.replace(/\{br\}/, '<br />')).appendTo(detail);
		
		if (category == 'projects') {
			ul.append('<li class="t">' + $(item).find('type').text() + '</li>');
			ul.append('<li class="r">' + $(item).find('release').text() + '</li>');
		}
		else {
			ul.append('<li class="c">' + $(item).find('client').text() + '</li>');
			ul.append('<li class="w">' + $(item).find('works').text() + '</li>');
			ul.append('<li class="r">' + $(item).find('release').text() + '</li>');
		}
		
		if (url_flag) {
			if (slideshow_flag) ul.append('<li class="l">' + $(item).find('url').text() + '</li>');
			else ul.append('<li class="l"><a href="' + $(item).find('url').text() + '" target="_blank">'+ $(item).find('url').text() +'</a></li>');
		}
		
		detail.append(ul);
		
		var year  = new String((new Date()).getFullYear());
		var month = new String((new Date()).getMonth());
		var month = (month > 9) ? month : 0 + month;
		var today = year + month;
		var today = parseInt(today);
		var new_flag = ((today - parseInt($(item).find('release').text().split('.').join(''))) <= 3);
		if (new_flag) inner.prepend('<img src="/shared/img/icn_new.png" alt="new" class="new" />');
		
		if (slideshow_flag) {
			base.attr('rel', id);
			base.addClass('show');
			base.click(function () {
				SlideBox.num = $(this).attr('rel');
				SlideBox.init(LoadLists.xml);
			});
		}
		
		return base;
	}
});



var SlideBox = LoadLists.extend({
	num: 0,
	click_flag: true,
	
	init: function (xml) {
		this.category = (LoadLists.category_flag) ? 'projects' : 'works';
		this.select   = LoadLists.naviPosition;
		this.xml = xml;
		
		this.baseFadeIn();
	},
	
	baseFadeIn: function () {
		var base = $('<div id="sb_base"><img src="/shared/img/slidebox_loading.gif" alt="" class="loading" /></div>');
		$('body').prepend(base);
		$('#sb_base').fadeTo(500, 0.85, function () {
			SlideBox.create(SlideBox.xml.filter('[id="' + SlideBox.num + '"]'));
		}).click(function () {
			SlideBox.close();
		});
	},
	
	create: function (data) {
		var html = '<div id="sb"><div id="slideshow"><div id="slides" /><div class="detail_base" /><table cellspacing="0" class="paginate"><tr /></table></div></div>';
		$('#sb_base .loading').fadeOut(250, function () {
			$('body').prepend(html);
			$('#sb').fadeIn(250, function () {
				SlideShow.index_flag = false;
				var detail = SlideShow.createHtml(data);
				var btn_size = detail.find('.btn li').size();
				$('#slideshow .detail_base').css({backgroundPosition: '0px -' + btn_size*31 + 'px'});
				detail.appendTo('#sb #slideshow .detail_base');
				
				var preimg = {};
				var slides = [];
				var year   = data.find('release').text().split('.')[0];
				 
				data.find('images image').each(function (i) {
					var src = '/shared/' + SlideBox.category + '_img/' + year + '/' + $(this).attr('src');
					preimg[i] = new Image();
					preimg[i].src = src;

					slides.push($('<div class="slide"><img src="' + src + '" /></div>'));
				});
				
				SlideShow.init({
					slideWid: 920,
					slideArr: slides
				});
				
				SlideBox.click_flag = true;
			});
		});
	},
	
	close: function () {
		if (!SlideBox.click_flag) return;
		SlideBox.click_flag = false;
		SlideShow.slide_num = 0;
		clearTimeout(SlideShow.timerid);
		
		$('#sb_base, #sb').fadeOut(500, function () {
			$(this).remove();
		});
	}
});
