﻿$.bravo = {
	
	config : {
		menuFadeDuration : 300,
		submenuDelayDuration : 500,
		subMenuSlideDuration : 100,
		thumbnailFadeInDuration : 500,
		portfolioArrowDuration : 200,
		portfolioArrowDisplacement : 5,
		profileKeys : Array('height', 'bust', 'waist', 'hips', 'shoes', 'hair', 'eyes')
	},
	
	init : function() {
		this.initNav();
		this.getData();
	},
	
	initNav : function() {
		
		// add key elements to nav items
		$('#nav li div.main').append('<span class="hover"></span><span class="inactive"></span>');
		
		// fade in highlights on hover
		$('#nav li').hover(function() {
			$(this).find('span.hover').fadeIn($.bravo.config.menuFadeDuration)
			.parent().find('span.inactive').fadeOut($.bravo.config.menuFadeDuration);
		}, function() {
			$(this).find('span.inactive').fadeIn($.bravo.config.menuFadeDuration)
			.parent().find('span.hover').fadeOut($.bravo.config.menuFadeDuration);
		});
		
		// open submenu on hover
		/*
		$('#nav li.women, #nav li.men').hover(function() {
			$(this).siblings().find('div.sub').slideUp($.bravo.config.subMenuSlideDuration);
			$(this).find('div.sub').slideDown($.bravo.config.subMenuSlideDuration);
		});
		
		// close submenus after delay on hover out
		$('#nav').hover(function() {}, function() {
			$('#nav li div.sub').delay($.bravo.config.submenuDelayDuration).slideUp($.bravo.config.subMenuSlideDuration);
		});
		*/
		
	},
	
	gotoPage : function(id) {

		$('#nav').show();

		content_html = '';
		portfolio_html = '';
		$.bravo.afterFilter = function(){};
		route = id.replace('#', '').split('/');
		
		if (route.length == 3) {
			$('#nav').hide();
			portfolio_html = $.bravo.getModelPortfolioHTML(route[0], route[1], route[2]);	
		}
		else if (route.length == 2) {
			if (id == '#women/intown') {
				content_html = $.bravo.getModelListHTML(json.models.women.intown, 'women', 'intown');
			}
			else if (id == '#women/bookings') {
				content_html = $.bravo.getModelListHTML(json.models.women.bookings, 'women', 'bookings');
			}
			else if (id == '#men/intown') {
				content_html = $.bravo.getModelListHTML(json.models.men.intown, 'men', 'intown');
			}
			else if (id == '#men/bookings') {
				content_html = $.bravo.getModelListHTML(json.models.men.bookings, 'men', 'bookings');
			}
			else if (id == '#asian/japanese' || id == '#asian/asian') {
				content_html = $.bravo.getModelListHTML(json.models.asian.asian, 'asian', 'asian') + $.bravo.getModelListHTML(json.models.asian.japanese, 'asian', 'japanese');
			}
		}
		else if (id == '#asian') {
			content_html = $.bravo.getModelListHTML(json.models.asian.asian, 'asian', 'asian') + $.bravo.getModelListHTML(json.models.asian.japanese, 'asian', 'japanese');
		}
		else if (id == '#news') {
			content_html = $.bravo.getNewsHTML(json.news);
		}
		else if (id == '#link') {
			content_html = $.bravo.getLinkHTML(json.link);
		}
		else if (id == '#about') {
			content_html = $.bravo.getAboutHTML();
		}
		else if (id == '#contact') {
			content_html = $.bravo.getContactHTML();
		}
		else {
			content_html = $.bravo.getHome();
		}
		
		selector = '#content, #portfolio';
		$(selector).fadeOut(function() {
			$('#content').html(content_html);
			$('#portfolio').html(portfolio_html);
			$('#content, #portfolio').fadeIn();
			$('.lightbox a').fancybox({
				overlayColor : '#000',
				overlayOpacity : 0.8
			});
			$.bravo.afterFilter();
		});
		
	},
	
	getHome : function() {
		html = '<div class="address"><a class="flash" target="_blank" href="/flash.html"></a></div>';
		return html;
	},

	getNewsHTML : function(entries) {
		html = '<dl class="text_content news_content">';
		$.each(entries, function(index, value) {
			html += '<dt>' + value.date[0].text + '</dt>' +
			'<dd>' + value.text[0].text + '</dd>';
		});
		html += '</dl>';
		return html.replace(/\n/g, "<br>");
	},

	getLinkHTML : function(entries) {
		html = '<dl class="text_content link_content">' +
		'<h2>Contact</h2>';
		$.each(entries, function(index, value) {
			html += '<dt>' + value.position[0].text + '</dt>' +
			'<dd>' + value.name[0].text + '</dd>';
		});
		html += '<dt class="contact">' + json.contact.en[0].text + '</dt>' +
		'</dl>';
		return html.replace(/\n/g, "<br>");
	},

	getAboutHTML : function() {
		html = '<dl class="text_content about_content">' +
		'<dt>About us</dt>' +
		"<dd>Bravo Models is viewed worldwide as one of the top agencies of Japan as well as a leading international model agency.  The agency was founded in 1996 by Shoko Arai.  Ms. Arai was one of the pioneer women to fully own an agency in Japan.  Bravo Models' success has been built on honoring long-term relationships with the best international agencies, excellent service plus great communication & problem solving skills.  Bravo has top scouts networked throughout the major markets of the world which allows for Bravo to bring some of the best models to Tokyo.</dd>" +
		'<dt>Company Profile</dt>' +
		"<dd>Company Name  : Bravo Models Co., Ltd.<br />President  : Shoko Arai<br />Address  : Hillside Terrace H-301, 18-17 Sarugakucho,Shibuya-u,Tokyo 150-0033, Japan<br />Capital  : 15 Million yen<br />Established  : November 28, 1996<br />Number of employees  : 10</dd>" +
		'<dt>会社概要</dt>' +
		"<dd>会社名　　　株式会社ブラボー<br />代表取締役　新井祥子 <br />住　所　　　〒150-0033東京都渋谷区猿楽町18-17ヒルサイドテラスH棟301 <br />資本金　　　1,500万円 <br />設　立　　　平成8年11月28日 <br />社員数　　　10名<br />業　種　　　モデル紹介業（外人モテル招聘業）</dd>" +
		'</dl>';
		return html;
	},

	getContactHTML : function() {
		html = '<dl class="text_content contact_content">' +
		'<dt>ADDRESS</dt>' +
		"<dd>〒150-0033 東京都渋谷区猿楽町18-17　ヒルサイドテラス　H棟301<br />HILLSIDE TERRACE 301, 18-17 Sarugakucho, Shibuya-ku, Tokyo 150-0033, Japan<br />TEL 03-3463-9090   FAX 03-3463-9901</dd>" +
		'<dt>E-MAIL</dt>' +
		'<dd>[ WOMEN ]<br />福田　<a href="mailto:ayumi@bravomodels.net">ayumi@bravomodels.net</a>　　山中　<a href="mailto:yasu@bravomodels.net">yasu@bravomodels.net</a><br />尾鹿　<a href="mailto:hope@bravomodels.net">hope@bravomodels.net</a>　　田口　<a href="mailto:hiroko@bravomodels.net">hiroko@bravomodels.net</a><br />[ MEN ]<br />吉野　<a href="mailto:tachi@bravomodels.net">tachi@bravomodels.net</a></dd>' +
		'<dt>DIRECTOR OF SCOUTING</dt>' +
		'<dd>Marcia Moellers USA Office #1-970-586-3222  e-mail: <a href="mailto:bravomarcia@aol.com">bravomarcia@aol.com</a><br /><b><i>NEW YORK CASTING DIRECTOR</i></b><br />Mariko Derpa　<a href="images/2011_MD_promo_card.pdf" target="_blank">more info</a><br /><br /><span class="lightbox"><a href="images/bravo_map.jpg"><img src="images/bravo_map.png"></a></span><br /><a href="http://maps.google.co.jp/maps?f=q&source=s_q&hl=ja&geocode=&q=%E6%9D%B1%E4%BA%AC%E9%83%BD%E6%B8%8B%E8%B0%B7%E5%8C%BA%E7%8C%BF%E6%A5%BD%E7%94%BA18-17%E3%80%80&sll=35.649489,139.699724&sspn=0.003317,0.005246&brcurrent=3,0x60188b4f96870bb3:0x591cd013980bb32b,0,0x60188b4f99db0077:0x69ffd5ff95c33d0e&ie=UTF8&hq=&hnear=%E6%9D%B1%E4%BA%AC%E9%83%BD%E6%B8%8B%E8%B0%B7%E5%8C%BA%E7%8C%BF%E6%A5%BD%E7%94%BA%EF%BC%91%EF%BC%98%E2%88%92%EF%BC%91%EF%BC%97&ll=35.648918,139.6982&spn=0.006635,0.01458&z=17" target="_blank">Google Mapで見る</a>　　　<a href="images/bravo_map.pdf" target="_blank">地図を印刷する</a><br /><br />東急東横線 ： 代官山駅　正面口より徒歩約５分<br />東急東横線／地下鉄日比谷線 ： 中目黒駅より徒歩７分<br />Tokyu Toyoko-line: Daikanyama Sta. About 5 minutes walk from the main exit<br />Tokyu Toyoko-line / Tokyo Metro Hibiya-line: Nakameguro Sta. 7 minutes walk </dd>' +
		'<dt class="highlight">BECOME A MODEL</dt>' +
		'<dd>ブラボーは、日本人・ハーフモデルを募集しております。詳しくは<a href="cmfmail/form.html" target="_blank">こちら</a></dd>' +
		'</dl>';
		return html;
	},
	
	getModelListHTML : function(models, gender, type) {
		html = '<ul class="gallery_type ' + type + ' ' + gender + ' ' + type + '_' + gender + '">';
		if (gender == 'asian') {
			html += '<li class="' + type + '"><a>' + type + '</a></li>';
		}
		else {
			html += '<li class="intown"><a href="#' + gender + '/intown">In town</a></li>' +
			'<li class="bookings"><a href="#' + gender + '/bookings">Direct booking</a></li>';
		}
		html += '</ul>';
		if (gender != 'asian') {
			html += '<ul class="gallery_key">' +
			'<li class="special_booking">Special Booking</li>' +
			'<li class="coming_soon">Coming soon</li>' +
			'</ul>';
		}
		html += '<ul class="gallery ' + gender + '">';
		$.each(models, function(index, value) {
			if (value.specialBooking && value.specialBooking[0].text == 1 && value.comingSoon && value.comingSoon[0].text == 1) cssClass = ' class="sb_cs"';
			else if (value.specialBooking && value.specialBooking[0].text == 1) cssClass = ' class="special_booking"';
			else if (value.comingSoon && value.comingSoon[0].text == 1) cssClass = ' class="coming_soon"';
			else cssClass = '';
			html += '<li' + cssClass + '>' +
			'<a href="#' + gender + '/' + type + '/' + index + '"><img src="' + value.thumbnail[0].text + '" /></a>' +
			'<div>' + value.name[0].text + '</div>' +
			'</li>';
		});
		html += '</ul>';
		$.bravo.afterFilter = function() {
			$.bravo.fadeInList($('.gallery li'));
		};
		return html;
	},
	
	getModelPortfolioHTML : function(gender, location, index) {
		model = json.models[gender][location][index];
		html = '<div class="controls">';
		if (model.composit_image[0].text && false) html += '<a href="' + model.composit_image[0].text + '" class="lightbox">Composite</a>';
		html += '</div>' +
			'<div class="profile">' +
			'<h2>' + model.name[0].text + '</h2>' +
			'<ul>';
		$.each($.bravo.config.profileKeys, function(index, value) {
			html += '<li class="' + value + '">' + $.string(value).capitalize().str + ' : ' + model[value][0].text + '</li>';
		});
		if (model['composit_image'] && typeof(model['composit_image'][0].text) != 'undefined') {
			html += '<li class="composite lightbox"><a href="' + model['composit_image'][0].text + '" title="<a href=&#34;' + model['composit_pdf'][0].text + '&#34; target=&#34;_blank&#34; >Download PDF</a>">Composite</a></li>';
		}
		if (model['polaroid_image'] && typeof(model['polaroid_image'][0].text) != 'undefined') {
			html += '<li class="polaroid lightbox"><a href="' + model['polaroid_image'][0].text + '" title="<a href=&#34;' + model['polaroid_pdf'][0].text + '&#34; target=&#34;_blank&#34; >Download PDF</a>">Polaroid</a></li>';
		}
		if (model['VTR_Intro'] && typeof(model['VTR_Intro'][0].text) != 'undefined') {
			html += '<li class="video lightbox"><a class="iframe" href="video.php?url=' + model['VTR_Intro'][0].text + '" id="video_link">Video</a></li>';
			html += '<div style="display: none;"><div id="jwplayer" name="jwplayer" class="JWVideo" style="background: transparent !important;"><video id="player1" width="400" height="300" controls><source src="/' + model['VTR_Intro'][0].text + '" type="video/mp4" /></video></div></div>';
		} else if (model['VTR_Walking'] && typeof(model['VTR_Walking'][0].text) != 'undefined') {
			html += '<li class="video lightbox"><a class="iframe" href="video.php?url=' + model['VTR_Walking'][0].text + '" id="video_link">Video</a></li>';
			html += '<div style="display: none;"><div id="jwplayer" name="jwplayer" class="JWVideo" style="background: transparent !important; display: none;"><video id="player1" width="400" height="300" controls><source src="/' + model['VTR_Walking'][0].text + '" type="video/mp4" /></video></div></div>';
		}
		html += '<li class="back"><a href="#' + gender + '/' + location + '">Back</a></li>' +
			'</ul>' +
			'</div>' +
			'<ul id="portfolio_gallery">';
		$.each(model.slide, function(index, value) {
			html += '<li><img src="' + value.text + '" /></li>';
		});
		html += '</ul>';
		$.bravo.afterFilter = function() {
			$("#video_link").fancybox({
				overlayColor : '#000',
				overlayOpacity : 0.8,
				autoDimensions: false,
				width: 400,
				height: 300
			}); 
			$('#portfolio_gallery').jcarousel({
				wrap: 'circular',
				scroll: 1,
				buttonPrevHTML: '<div><span></span></div>',
				buttonNextHTML: '<div><span></span></div>'
			});
			$('#portfolio .jcarousel-prev').hover(function() {
				$(this).find('span').animate({
					left: '-=' + $.bravo.config.portfolioArrowDisplacement
				}, $.bravo.config.portfolioArrowDuration);
			}, function() {
				$(this).find('span').animate({
					left: '+=' + $.bravo.config.portfolioArrowDisplacement
				}, $.bravo.config.portfolioArrowDuration);
			});
			$('#portfolio .jcarousel-next').hover(function() {
				$(this).find('span').animate({
					left: '+=' + $.bravo.config.portfolioArrowDisplacement
				}, $.bravo.config.portfolioArrowDuration);
			}, function() {
				$(this).find('span').animate({
					left: '-=' + $.bravo.config.portfolioArrowDisplacement
				}, $.bravo.config.portfolioArrowDuration);
			});
		};
		return html;
	},
	
	fadeInList : function(list) {
		var animations = new Array();
		// queue all
		$(list).each(function() {
			animations.push($(this));
		});
		// start animating
		$.bravo.fadeInListItem(animations, animations.shift());
	},
		
	fadeInListItem : function (animations, li) {
		li.hide().fadeIn($.bravo.config.thumbnailFadeInDuration);
		// wait until animation is done and recurse if there are more animations
		if(animations.length > 0) $.bravo.fadeInListItem(animations, animations.shift());
	},
	
	getData : function() {
		json = new Object();
		$.get('xml/home.xml', function(xml){
			$.extend(json,
				{'home' : $.xml2json(xml, true).Home[0].list}
			);
      $.bravo.setBackground(json.home);
			$.get('xml/link.xml', function(xml){
				$.extend(json,
					{'link' : $.xml2json(xml, true).link},
					{'contact' : $.xml2json(xml, true).contact[0]}
				);
				$.get('xml/Models.xml', function(xml){
					$.extend(json, {'models' : Object()});
					$.extend(json.models,
						{'women' : $.xml2json(xml, true).Woman[0]},
						{'men' : $.xml2json(xml, true).Man[0]},
						{'asian' : $.xml2json(xml, true).Asian[0]}
					);
					$.get('xml/whatsNew.xml', function(xml){
						$.extend(json,
							{'news' : $.xml2json(xml, true).article}
						);
						$.bravo.setupHashChange();
					});
				});
			});
		});
	},
	
	setBackground : function(data) {
		$.each(data, function(index, value) {
			$('#background').append('<li><img src="' + value.text + '" /></li>');
		});
		$('#background').jcarousel({
			wrap: 'circular',
			scroll: 1,
			easing: 'linear',
			animation: 10000,
			auto: .01,
			buttonNextHTML: null,
			buttonPrevHTML: null
		});
	},
	
	setupHashChange : function() {
		// go to page on hashtag change
		$(window).hashchange(function(){
			hash = location.hash;
			$.bravo.gotoPage(hash);
		});
		$(window).hashchange();
	}
	
}
