/*
以下に依存します。
jquery.js
jquery.cookie.js
*/

var photolibrary = function() {
	
	var lightboxData;
	var formData;
	
	P = {
		top:null,
		list:null,
		dlCookieName:null,
		photoData:{},
		photoNO:0,
		
		init : function() {
			$.ajax({
				url:"common/xml/lightbox.xml",
				dataType:"xml",
				success:onLoadLightbox,
				timeout:5000
			});
			$.ajax({
				url:"common/xml/form.xml",
				dataType:"xml",
				success:onLoadForm,
				timeout:5000
			});
			setDlCookieName(dlCookieName);
			setPhotoData(photoData);
		},
		
		open : function(no) {
			// 詳細画面
			var dh = $(document).height();
			var st = $(document).scrollTop();
			var wh = $(window).height();
			var ph;
			
			var ww = $(window).width();
			var pw;
			
			$("body").append(lightboxData);
			//$("#lb_bg").height(dh);
			
			ph = $("#lb_detail").attr('offsetHeight');
			pw = $("#lb_detail").width();
			
			var top = ((wh - ph) / 2) + st;
			var left = (ww - pw) / 2;
			if (top < 0) top = 0;
			$("#lb_detail").css({
				top : top  + "px",
				left: left + "px"
			});
			
			// データセット
			photolibrary.photoNO = no;
			var photoData = photolibrary.photoData[no];
			$("#lb_img").attr({ 
				src: photoData["web_photo_path"],
				alt: photoData["title"]
			});
			$("#lb_place").text(photoData["title"]);
			
			var i;
			var keyword = '';
			var keywords = '';
			for (i = 0; i < photoData["keywords"].length; i++) {
				if (i > 0) keywords += '、';
				keyword = photoData["keywords"][i];
				keywords += '<a href="./list.php?search=1&amp;word=' + encodeURI(keyword) + '">' + escapeHTML(keyword) + '</a>';
			}
			$("#lb_key").append(keywords);
			
			var setdh = dh;
			if (dh < top + ph + 40) setdh = top + ph + 40;
			$("#lb_bg").height(setdh);
		},
		
		close : function() {
			$("#lb").remove();
		},
		
		download : function(no) {
			if (!no) no = photolibrary.photoNO;
			
			// 写真取得
			var sid = $.cookie(photolibrary.dlCookieName);
			if (sid) {
				submitForm({
					"photo_no": no
				});
				return;
			}
			
			// 申請フォーム
			
			var st = $(document).scrollTop();
			var wh = $(window).height();
			var ph;
			var ww = $(window).width();
			var pw;
			
			$("body").append(formData);
			
			var dh = $(document).height();
			ph = $("#lb_form").attr('offsetHeight');
			pw = $("#lb_form").width();
			
			var top = (dh - ph) / 2;
			var left = (ww - pw) / 2;
			
			if (top < 0) top = 0;
			
			var setdh = dh;
			if (dh < top + ph) setdh = top + ph;
			$("#lb_bg").height(setdh);
			
			$("#lb_form").css({
				top : top  + "px",
				left: left + "px"
			});
			
			// データセット
			$("#photo_no").val(no);
		},
		
		checkForm : function() {
			// 入力値チェック
			if ( !checkNull(['company']         , '貴社・団体名') )                 return false;
			if ( !checkNull(['administrator']   , 'ご担当者') )                     return false;
			if ( !checkNull(['zip1']            , '郵便番号') )                     return false;
			if ( !checkNull(['zip2']            , '郵便番号') )                     return false;
			if ( !checkNull(['address']         , '住所') )                         return false;
			if ( !checkNull(['tel']             , 'TEL') )                          return false;
			if ( !checkNull(['email']           , 'E-mail') )                       return false;
			if ( !checkNull(['media']           , '利用媒体名') )                   return false;
			if ( !checkNull(['insert_content']  , '内容') )                         return false;
			if ( !checkLength('insert_content'  , '内容', 30) )                     return false;
			if ( !checkNull(['insert_term']     , '掲載期間') )                     return false;
			if ( !checkNull(['issuance', 'url'] , '発行部数もしくはサイトのURL') )  return false;
			if ( !checkLength('comment'         , 'その他', 150) )                  return false;
			if ( !checkRule('rule'              , '利用規約に同意してください。') ) return false;
			
			// 送信データを予め保持
			var targets = [
				 'company'
				,'administrator'
				,'zip1'
				,'zip2'
				,'address'
				,'tel'
				,'fax'
				,'email'
				,'media'
				,'insert_content'
				,'insert_term'
				,'issuance'
				,'url'
				,'comment'
				,'rule'
				,'photo_no'
			];
			var i;
			var id;
			var obj = {};
			for (i = 0; i < targets.length; i++) {
				id = targets[i];
				obj[id] = $("#" + id).val();
			}
			
			// フォームを閉じる
			photolibrary.close();
			
			// 送信
			submitForm(obj);
			
			return false;
		}
	};
	
	function setDlCookieName(str) {
		photolibrary.dlCookieName = str;
	}
	
	function setPhotoData(data) {
		photolibrary.photoData = data;
	}
	
	function onLoadLightbox(data) {
		lightboxData = $(data).find("data").text();
	}
	
	function onLoadForm(data) {
		formData = $(data).find("data").text();
	}
	
	function submitForm(obj) {
		var $form = $('<form action="./download.php" method="post"></form>');
		for (var key in obj) {
			$form.append('<input type="hidden" name="' + key + '" value="' + obj[key] + '" />');
		}
		$form.appendTo(document.body);
		$form.submit();
	}
	
	function escapeHTML(str) {
		str = str.replace(";"  , "&#059;");
		str = str.replace("&"  , "&amp;");
		str = str.replace("<"  , "&lt;");
		str = str.replace(">"  , "&gt;");
		str = str.replace("\"" , "&quot;");
		str = str.replace("'"  , "&#039;");
		str = str.replace("%"  , "&#037;");
		str = str.replace("("  , "&#040;");
		str = str.replace(")"  , "&#041;");
		str = str.replace("+"  , "&#043;");
		return str;
	}
	
	function checkNull(ids, view) {
		var i;
		var str = '';
		for (i = 0; i < ids.length; i++) {
			str += $("#" + ids[i]).val();
		}
		if (str === "") {
			alert(view + "を入力してください。");
			$("#" + ids[0]).focus();
			return false;
		}
		return true;
	}
	
	function checkRule(id, msg) {
		if ( $("#" + id).attr('checked') === false ) {
			alert(msg);
			$("#" + id).focus();
			return false;
		}
		return true;
	}
	
	function checkLength(id, view, max) {
		if ( $("#" + id).val().length > max ) {
			alert(view + 'は ' + max + '文字以内で入力してください。');
			$("#" + id).focus();
			return false;
		}
		return true;
	}
	
	return P;
}();
