
// ========================================================================
//  Setting
// ========================================================================

var setting = new Object();
var mapping = new Object();
var content = new Object();
var id = 'home';
var home = 'home';
var contentID = 'home';
var script = './'
var defaultLang = 'ja';

// ========================================================================
//  App
// ========================================================================

App = function () {
	var _err  = new Error('This is static. Please use App.method().');
	_err.name = 'App Error';
	throw _err;
};

App.main = function(){
	//
	var shadowboxDir = './frontend/js/shadowbox/';
	/*
	Shadowbox.loadSkin('classic', shadowboxDir + 'skin');
	Shadowbox.loadLanguage('en', shadowboxDir + 'lang');
	Shadowbox.loadPlayer(['img', 'swf', 'flv', 'html', 'iframe', 'qt', 'wmp'], shadowboxDir + 'player');
	//
	Shadowbox.init({setupSkip: true});
	Shadowbox.open({content: content, title: title, player: 'img'});
	 */
	Shadowbox.loadSkin('default', shadowboxDir + 'skin');
	Shadowbox.loadLanguage('ja', shadowboxDir + 'lang');
	Shadowbox.loadPlayer(['img'], shadowboxDir + 'player');
	//
	jQuery(function(){
		App.onLoad();
		
	});
}; 

App.onLoad = function(){
	//EZJ.Debug.log('-----------------------------------');
	//EZJ.Debug.log('Action.onLoad');
	//
	if (location.hash) location.href = location.href.replace(location.hash, '');
	/*if (jQuery.browser.mozilla) {
		//EZJ.Debug.type = 'console';
	}
	if (jQuery.browser.msie) {
		//EZJ.Debug.type = 'print';
	}*/
	///Action.hideAll();
	jQuery.getJSON(script, {mode: 'json'}, App.loadedData);
}

App.loadedData = function(data){
	//EZJ.Debug.log('Action.loadedData');
	//
	setting = data.setting;
	mapping = data.mapping;
	Shadowbox.init({setupSkip: true});
	Action.printPage();
	Action.setFontSize();
	Action.searchForm(); 
	Action.changeAddress();
}

App.main();


// ========================================================================
//  Action
// ========================================================================

Action = function () {
	var _err  = new Error('This is static. Please use Action.method().');
	_err.name = 'Action Error';
	throw _err;
};

// method

Action.changeAddress = function(){
	//EZJ.Debug.log('Action.changeAddress');
	//
	var param = EZJ.URL.queryToParam();
	param = (param == null) ? new Object({id: mapping.home.id}) : param;
	param.id = (param.id == null) ? mapping.home.id : param.id;
	//EZJ.Debug.log(param);
	var id = param.id;

	content = mapping[id];
	content.param = param;
	if (jQuery.cookie('contentID')) contentID = jQuery.cookie('contentID');
	jQuery.cookie('contentID', content.id, {expires: 30, path: '/'});
	//EZJ.Debug.log('App.onAddressChange: ' + contentID + ' ===> ' + content.id);
	//EZJ.Debug.log('(contentID == content.id): ' + (contentID == content.id));
	
	/*if (content.id == home) {
		jQuery(window).bind('resize', Action.resizeWindow);
	} else {
		jQuery(window).unbind('resize', Action.resizeWindow);
	}*/
	//Action.preloadContents();
	Action.loadContents();
	Action.loadHoverHome();
	
};

Action.isLangJP = function(){
	return (Action.getLang() == defaultLang);
};

Action.getLang = function(){
	var params = EZJ.URL.queryToParam();
	if (params == null) { params = new Object(); }
	if (params.lang == null) {
		params.lang = defaultLang;
	}
	return params.lang;
};

Action.getLangValue = function(key, value){
	return (Action.isLangJP()) ? value[key] : value[key + '_en'];
};

Action.fadeHover = function(btn, key){
	btn.hover(
		function(){
			if (key == null) jQuery(btn).fadeTo(250, 0.5);
			else jQuery(key, btn).fadeTo(250, 0.5);
		},
		function(){
			if (key == null) jQuery(btn).fadeTo(250, 1);
			else jQuery(key, btn).fadeTo(250, 1);
		}
	);
};

Action.hover = function(){
	EZJ.Debug.log('Action.hover');
	//
	jQuery('a img', '#navi').imghover({suffix: '-on', fade: true, fadeSpeed: 250});
	jQuery('a img', '#submenu').imghover();
	jQuery('input', '#submenu').imghover();
	jQuery('a img', '.menu').imghover();
	jQuery('a img', '.more').imghover();
	jQuery('a img', '.link').imghover();
	jQuery('input', '#contact').imghover();
	//
	var btn = jQuery('a', '#tabButton');
	Action.fadeHover(btn, 'img');
	//
	jQuery('a[@rel="fadehover"]').each(function(){
		var btn = jQuery(this);
		Action.fadeHover(btn, 'img');
		Action.fadeHover(btn);
	});
};

Action.loadHoverHome = function(){
	var callbackHome = function(){
		Action.hover();
	}
	//
	switch (content.id) {
		case 'home':
			callbackHome();
		break;
	}
};

Action.contactForm = function(){
	EZJ.Debug.log('Action.contactForm');
	//
	var options = {
		success: showResponse,
		url: script,
		type: 'post',
		data: {mode: 'json'},
		dataType: 'json'
	};
	jQuery('#contactForm').ajaxForm(options);
	//
	function displayResult(key, value){
		jQuery(key).fadeOut(0, function(){
			jQuery(this).text(value);
			jQuery(this).fadeIn(300);
		});
	}
	function showResponse(data){
		EZJ.Debug.log(data);
		jQuery('.notice', '#contactForm').fadeOut(0);
		var count = data.errors.length;
		if (count != 0) {
			jQuery.each(data.errors, function(key, value){
				displayResult('#notice_' + key, value);
			})
			displayResult('div[id="notice_submit"]', data.notice);
			return false;
		}
		jQuery('input[name="action"]').attr('value', data.action);
		displayResult('div[id="notice_submit"]', data.notice);
		return true;
	}
}

Action.searchForm = function(){
	EZJ.Debug.log('Action.searchForm');
	//
    var options = { 
        beforeSubmit:  showRequest,
        success:       showResponse,
        url: script + '?mode=json',
        dataType:  'json'
    };
	//
    jQuery('#searchForm').ajaxForm(options); 
	//
	function displayResult(value){
		jQuery('.notice', '#submenu').fadeOut(0, function(){
			jQuery(this).text(value);
			jQuery(this).fadeIn(300);
		});
	}
	function showRequest(formData, jqForm, options){
		if (!jqForm[0].search.value) {
			displayResult(setting.lang[getLang()].search.none);
			return false;
		}
		jQuery.cookie('searchKeyword', jQuery.param(formData), {expires: 30, path: '/'});
		return true;
	}
	function showResponse(data){
		var count = data.works.length;
		if (count == 0) {
			displayResult(setting.lang[getLang()].search.result + ': ' + count);
			return false;
		}
		location.href = location.href.replace(location.search, '') + '?' + jQuery.cookie('searchKeyword')
		return false;
	}
	function getLang(){
		return Action.getLang();
	}
}

Action.appendPrintPage = function(){
	EZJ.Debug.log('Action.appendPrintPage');
	//
	var title = Action.getLangValue('title', mapping.print);
	var src = setting.dir.submenu + mapping.print.submenu;
	var html = '';
	html += '<li>';
	html += '<a id="print" title="' + title + '">';
	html += '<img src="' + src + '" title="' + title + '" alt="' + title + '" />';
	html += '</a>';
	html += '</li>';
	//
	jQuery('ul li:eq(0)', '#submenu').after(html);
};

Action.hidePrintPage = function(){
	EZJ.Debug.log('Action.hidePrintPage');
	//
	jQuery('ul li:eq(1)', '#submenu').hide();
};

Action.printPage = function(){
	EZJ.Debug.log('Action.printPage');
	//
	Action.appendPrintPage();
	jQuery('a[id="print"]', '#submenu').click(function(){
		EZJ.Debug.log('print');
		EZJ.Util.printOut();
	});
};

Action.appendFontSize = function(){
	EZJ.Debug.log('Action.appendFontSize');
	//
	var html = '';
	html += '<li>';
	jQuery.each(setting.fontSize, function(key, value){
		var title = Action.getLangValue('title', value);
		var src = setting.dir.submenu + value.submenu;
		if (value.size != null) html += '<a id="' + value.id + '">';
		html += '<img src="' + src + '" title="' + title + '" alt="' + title + '" />';
		if (value.size != null) html += '</a>';
	})
	html += '</li>';
	//
	jQuery('ul li:eq(3)', '#submenu').after(html);
};

Action.setFontSize = function() {
	EZJ.Debug.log('Action.setFontSize');
	//
	Action.appendFontSize();
	jQuery('.items .body').css('font-size', jQuery.cookie(setting.fontSize.cookie.id));
	jQuery.each(setting.fontSize, function(key, value){
		if (value.size != null) {
			jQuery('#' + value.id).click(function(){
				Action.changeFontSize(value.size);
			})
		}
	})
}

Action.changeFontSize = function(size) {
	EZJ.Debug.log('Action.changeFontSize');
	//
	jQuery('.items .body').css('font-size', size);
	jQuery.cookie(setting.fontSize.cookie.id, size, {expires: 30, path: '/'});
}

Action.resizeWindow = function(){
	EZJ.Debug.log('Action.resizeWindow');
	//
	if (EZJ.Util.getWindowSize().height - content.height < 150) {
		return;
	}
	jQuery('#header').animate(
        {height: EZJ.Util.getWindowSize().height - content.height, opacity: 1},
        {duration: 100, easing: 'easeOutExpo'}
	);
};


Action.preloadContents = function(){
	//EZJ.Debug.log('Action.preloadContents');
	//
	/*jQuery('#navi').show();
	jQuery('#tabContainer').show();
	if (content.id == 'home') {
		jQuery('#home').animate({opacity: 0}, {duration: 0, complete: function(){jQuery('#home').show();}});
	} else {
		jQuery('.menu', '#target').animate({opacity: 0}, {duration: 0, complete: function(){jQuery('.menu', '#target').show();}});
		jQuery('.items', '#target').animate({opacity: 0}, {duration: 0, complete: function(){jQuery('.items', '#target').show();}});		
	}*/
	//jQuery('#submenu').animate({opacity: 0}, {duration: 0, complete: function(){jQuery('#submenu').show();}});
	jQuery('#header').css(content.bg);
	
	//if (contentID != content.id) jQuery('#header').height(0);
	//Action.fadeinLoading();
	jQuery('#header').animate(
        {
			height: (180),
			opacity: 1
		},
        {
			duration: 100, easing: 'easeOutExpo',
			complete: function(){Action.loadContents();}
		}
    );
};

Action.loadContents = function(){
	//EZJ.Debug.log('Action.loadContents');
	//
	var callback = function(){
		Action.hover();
		//Action.fadeoutLoading();
	}
	//
	switch (content.id) {
		/*case 'home':
			Action.hidePrintPage();
			callback();
			Action.reloadContents();
		break;*/
		case 'works':
		case 'service':
		case 'news':
			var works = new Works({id: content.id, url: script, callback: callback});
		break;
		case 'company':
		case 'contact':
		case 'access':
		case 'policy':
		case 'sitemap':
			callback();
			if (content.id == 'contact') {
				Action.contactForm(); 
			}
		break;
	}
};





// ========================================================================
//  Works
// ========================================================================

Works = function (vars) {
	//EZJ.Debug.log('new Works');
	this.main(vars);
};

Works.prototype._vars = new Object();
	
Works.prototype.main = function(vars){
	//EZJ.Debug.log('Works.main');
	//
	this.setVars('id', vars.id);
	this.setVars('url', vars.url);
	this.setVars('callback', vars.callback);
	this.setParams();
	this.loadDatas();
	Works.prototype.displaySlideMenus();
};

Works.prototype.setVars = function(key, value){
	this._vars[key] = value;
};

Works.prototype.getVars = function(key){
	if (key == null) return this._vars; 
	return this._vars[key];
};

Works.prototype.setParams = function(){
	//jQuery('#items').hide();
	switch (this.getVars('id')) {
		case 'works':
			if (this.getParams('search') == null) {
				jQuery('.searchResult').hide();
			} else {
				jQuery('.tagMenu').hide();
				jQuery('.searchResult').show();
			}
		break;
		case 'service':
			jQuery('dl[class^="thumbs_tag"]').hide();
			
		break;
	}
};

Works.prototype.getParams = function(key){
	var params = EZJ.URL.queryToParam();
	if (params.lang == null) {
		params.lang = defaultLang;
	}
	if (params.page == null) {
		params.page = 1;
	}
	if (params.cat == null) {
		params.cat = 1;
	}
	if (key == null) return params; 
	return params[key];
};

Works.prototype.setDatas = function(value){
	var key = (this.getParams('search') == null) ? 'data' + this.getParams('cat') : 'search';
	this.setVars(key, value);
};

Works.prototype.getDatas = function(){
	var key = (this.getParams('search') == null) ? 'data' + this.getParams('cat') : 'search';
	return this.getVars(key); 
};

Works.prototype.loadDatas = function(){
	//EZJ.Debug.log('Works.loadData');
	//
	try {
		//EZJ.Debug.log('data loading...');
		jQuery('.load', '#status').text('data loading...');
		var params = this.getParams();
		if (params.id != 'works' || params.search != null) params.all = true;
		params.mode = 'json';
		params.id = 'works';
		jQuery.getJSON(this.getVars('url'), params, this.loadedDatas);
	}
	catch (e) { EZJ.Debug.log(e); }
	finally { return false; }
};

Works.prototype.loadedDatas = function(data){
	//EZJ.Debug.log('Works.loadedData');
	//
    try {
		//EZJ.Debug.log('data loaded.');
		jQuery('.load', '#status').text('data loaded.');
		//EZJ.Debug.log({data: data});
		Works.prototype.setDatas(data.works);
		Works.prototype.setVars('tags', data.tags);
		Works.prototype.display();
		var callback = Works.prototype.getVars('callback')
		callback();
		Works.prototype.displayMenus();
		Works.prototype.displayItems();
		
	}
    catch (e) { EZJ.Debug.log(e); }
    finally { return false; }  
};

Works.prototype.display = function(){
	//EZJ.Debug.log('Works.display');
	//
	//EZJ.Debug.log(this.getVars('id'));
	switch (this.getVars('id')) {
		//case 'home':
		//case 'works':
		case 'news':
			this.displayMenus();
			this.displayItems();
			break;
		case 'service':
			//
			//this.displaySlideMenus();
			this.displayItems();
			if (this.getParams('tag')) {
				var id = 'thumbs_tag';
				var rel = id + this.getParams('tag');
				this.slideThumbnails(id, rel);
			}
			break;
	}
};

Works.prototype.slideThumbnails = function(id, rel){
	EZJ.Debug.log('Works.slideThumbnails');
	//
	var num = Number(rel.replace(id, ''));
	var arr = new Array();
	var tags = Works.prototype.getVars('tags');
	jQuery('.' + rel).slideToggle(100);
	jQuery.each(tags, function(key, value){
		arr.push(Number(value.id));
	});
	jQuery.each(arr, function(key, value){
		if (num != value) {
			jQuery('.' + id + value).slideUp(100);
		}
	});
};

Works.prototype.displaySlideMenus = function(){
	//EZJ.Debug.log('Works.displaySlideMenus');
	//
	var id = 'thumbs_tag';
	jQuery('a[rel^="' + id + '"]').each(function(){
		jQuery(this).removeAttr('href');
	});
	jQuery('a', '.more').click(function(){
		var rel = jQuery(this).attr('rel');
		Works.prototype.slideThumbnails(id, rel);
	});
};

Works.prototype.displayMenus = function(){
	EZJ.Debug.log('Works.displayMenus');
	//
    try {
		jQuery('.load', '#status').text('');
		jQuery('#view')
			.append('<span id="imageView" title="image"><img src="' + setting.dir.other + 'works_change01.gif" title="imageView" alt="imageView" /></span>')
			.append('<span id="textView" title="text"><img src="' + setting.dir.other + 'works_change02.gif" title="textView" alt="textView" /></span>');
			
		jQuery('img', '#imageView').imghover();
		jQuery('img', '#textView').imghover();
		jQuery('#imageView').click(function(){
			jQuery('#items').fadeOut(100, function(){
				if (jQuery.browser.msie) {
					jQuery('.item').css({height: '150px', overflow: 'hidden'});
				}
				jQuery('.thumb', '#items').fadeIn(100);
				jQuery('#items').fadeIn(100);
			});
		});
		jQuery('#textView').click(function(){
			jQuery('#items').fadeOut(100, function(){
				if (jQuery.browser.msie) {
					jQuery('.item').css({height: '50px', overflow: 'hidden'});
				}
				jQuery('.thumb', '#items').hide();
				jQuery('#items').fadeIn(100);
			});
		});
	}
    catch (e) { EZJ.Debug.log(e); }
    finally { return false; }  
};

Works.prototype.displayItems = function(){
	EZJ.Debug.log('Works.displayItems');
	//
    try {
		jQuery.each(this.getDatas(), function(key, value){
		    Works.prototype.displayItemDetail(value);
		});
		jQuery('#items').fadeIn(100);
	}
    catch (e) { EZJ.Debug.log(e); }
    finally { return false; }  
};

Works.prototype.displayItemDetail = function(value){
	//EZJ.Debug.log('Works.displayItemDetail');
	//
	var params = Works.prototype.getParams();
	jQuery('a[@rel="shadowbox"]').each(function(){
		var btn = jQuery(this);
		btn.removeAttr('href');
		var id = Number(btn.attr('class').replace('shadowbox', ''));
		if (Number(value.id) == id) {
			var larges = new Array();
			jQuery.each(value.Image_large, function (i, large){
				large.title = '<p class="left">';
				if (value.url) large.title += '<a rel="fadehover" href="' + value.url + '" title="' + Works.prototype.getItemLang('title', value) + '">';
				large.title += Works.prototype.getItemLang('title', value);
				if (value.url) large.title += '</a>';
				large.title += Works.prototype.getItemTagLink(value);
				large.title += '</p>';
				if (Works.prototype.getItemLang('body', value)) {
					large.title += '<p class="left">' + Works.prototype.getItemLang('body', value) + '</p>';
				}
				if (value.url) {
					var src = setting.dir.other + 'button_relatedurl.gif';
					large.title += '<p class="right">';
					large.title += '<a rel="imghover" href="' + value.url + '" title="' + Works.prototype.getItemLang('title', value) + '">';
					large.title += '<img src="' + src + '">';
					large.title += '</a>';
					large.title += '</p>';
				}
				large.content = setting.dir.large + large.name;
				large.player = 'img';
				larges.push(large);
			});
			btn.click(function(){
				jQuery('img', this).fadeTo(300, 1);
				Shadowbox.open(larges);
			});
			Action.fadeHover(btn, 'img');
			Action.fadeHover(btn);
			return;
		}
	});
};

Works.prototype.getItemLang = function(key, value){
	return Action.getLangValue(key, value);
};

Works.prototype.getItemTagLink = function(value){
	//EZJ.Debug.log('Works.getItemTagLink');
	//
	var params = Works.prototype.getParams();
	var tags = new Array();
	jQuery.each(value.Tag, function (key, value){
		var tag = Number(value.id);
		var cat = Number(params.cat);
		var lang = (params.lang == null) ? '' : params.lang;
		var src = setting.dir.other + value.icon;
		var param = {id: 'service', cat: cat, tag: tag, lang: lang};
		var path = EZJ.URL.paramToQuery(param);
		var name = Works.prototype.getItemLang('name', value);
		var link = '<a rel="fadehover" href="' + path + '" title="' + name + '"><img src="' + src + '" title="' + name + '" alt="' + name + '" /></a>';
		tags.push(link);
	});
	return (value.Tag == undefined) ? '' : '<span class="tags">' + tags.join(' ') + '</span>'
};