/**
  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
  * Copyright (C) 2002-2005 The Nucleus Group
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
  * of the License, or (at your option) any later version.
  * (see nucleus/documentation/index.html#license for more info)
  *
  * This file contains functions to allow adding items from inside the weblog.
  * Also contains code to avoid submitting form data twice.
  *
  * $Id: edit.js,v 1.9.2.1 2005/08/15 10:51:08 dekarma Exp $
  * $NucleusJP: edit.js,v 1.4.2.1 2005/09/27 06:58:41 kimitake Exp $
  */

var nucleusConvertBreaks = true;
var nucleusMediaPopupURL = '';
var nucleusMediaURL = 'media/';
var nucleusAuthorId = 0;
var scrollTop = -1;

function setConvertBreaks(newval) {	nucleusConvertBreaks = newval; }
function setMediaUrl(url) { nucleusMediaURL = url; }
function setAuthorId(id) { nucleusAuthorId = id; }

function preview(id, value) {
	elem = document.getElementById(id);
	if (!elem) return;
	
	var preview = nucleusConvertBreaks ? str_replace("\n","<br />",value)+"&nbsp;" : value+"&nbsp;";
	
	// expand the media commands (without explicit collection)
	preview = preview.replace(/\<\%image\(([^\/\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"<img src='"+nucleusMediaURL+nucleusAuthorId+"/$1' width='$2' height='$3' alt=\"$4\" />");
	
	// expand the media commands (with collection)
	preview = preview.replace(/\<\%image\(([^\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"<img src='"+nucleusMediaURL+"$1' width='$2' height='$3' alt=\"$4\" />");
	preview = preview.replace(/\<\%popup\(([^\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"<a href='' onclick='if (event &amp;&amp; event.preventDefault) event.preventDefault(); alert(\"popup image\"); return false;' title='popup'>$4</a>");
	preview = preview.replace(/\<\%media\(([^\|]*)\|([^)]*)\)\%\>/g,"<a href='' title='media link'>$2</a>");	
	
	elem.innerHTML = preview;
}

function showedit() {
	prevval = document.getElementById('edit').style.display;
	if (prevval == "block")
		newval = "none";
	else
		newval = "block";
	document.getElementById('edit').style.display = newval;

	if (newval == "block")
		updAllPreviews();	
}

function updAllPreviews() {
	updPreview('title');
	updPreview('body');
	updPreview('more');
}

function isEditVisible() {
	var editform = document.getElementById('edit');
	if (!editform) return true;
	var prevval = editform.style.display;
	return (prevval == "none") ? false : true;
}

function updPreview(id) {
	// don't update when preview is hidden
	if (!isEditVisible()) return;
	
	var inputField = document.getElementById('input' + id);
	if (!inputField) return;
	preview('prev' + id, inputField.value);
}

// replace a in s by b (taken from milov.nl)
function str_replace(a, b, s)
{
	if (a == b || !s.length || !a.length) return s;
	if ((p=s.indexOf(a)) == -1) { return s; }
	else { ns = s.substring(0,p) + b + s.substring(p+a.length,s.length); }
	return (s.indexOf(a) != -1) ? str_replace(a, b, ns) : ns;
}

function shortCuts() {
	if (!event || (event.ctrlKey != true)) return;
	
	switch (event.keyCode) {
		case 1:
			ahrefThis(); break; // ctrl-shift-a
		case 2:
			boldThis(); break; // ctrl-shift-b
		case 9:
			italicThis(); break; // ctrl-shift-i
		case 13:
			addMedia(); break; // ctrl-shift-m
		default: 
			return;
	}
	return;
}

function cutThis() { execAndUpdate('cut'); }
function copyThis() { execAndUpdate('copy'); }
function pasteThis() { execAndUpdate('paste'); }
function boldThis() { insertAroundCaret('<b>','</b>'); }
function italicThis() { insertAroundCaret('<i>','</i>'); }
function leftThis() { insertAroundCaret('<div class="leftbox">','</div>'); }
function rightThis() { insertAroundCaret('<div class="rightbox">','</div>'); }
function alignleftThis() { insertAroundCaret('<div style="text-align: left">','</div>'); }
function alignrightThis() { insertAroundCaret('<div style="text-align: right">','</div>'); }
function aligncenterThis() { insertAroundCaret('<div style="text-align: center">','</div>'); }


function ahrefThis() {
	if (document.selection)
		strSelection = document.selection.createRange().text;
	else
		strSelection = '';
		
	strHref = prompt("Create a link to:","http://");
	if (strHref == null) return;
	
	var textpre = "<a href=\"" + strHref.replace(/&/g,'&amp;') + "\">";
	insertAroundCaret(textpre, "</a>");
}

function execAndUpdate(action) {
	lastSelected.caretPos.execCommand(action);
	updAllPreviews();	
}


var nonie_FormType = 'body';

// Add media to new item
function addMedia() {
	
	var mediapopup = window.open(nucleusMediaPopupURL + 'media.php','name',
		'status=yes,toolbar=no,scrollbars=yes,resizable=yes,width=500,height=450,top=0,left=0');

	return;
} 


function setMediaPopupURL(url) {
	nucleusMediaPopupURL = url;
}

function includeImage(collection, filename, type, width, height) {
	if (isCaretEmpty()) {
		text = prompt("Text to display ?","");
	} else {
		text = getCaretText();
	}
	
	// add collection name when not private collection (or editing a message that's not your)
	var fullName;
	if (isNaN(collection) || (nucleusAuthorId != collection)) {
		fullName = collection + '/' + filename;
	} else {
		fullName = filename;
	}
		
	
	var replaceBy;
	switch(type) {
		case 'popup':
			replaceBy = '<%popup(' +  fullName + '|'+width+'|'+height+'|' + text +')%>';
			break;
		case 'inline':
		default:
			replaceBy = '<%image(' +  fullName + '|'+width+'|'+height+'|' + text +')%>';
	}
	
	insertAtCaret(replaceBy);
	updAllPreviews();	

}


function includeOtherMedia(collection, filename) {
	if (isCaretEmpty()) {
		text = prompt("Text to display ?","");
	} else {
		text = getCaretText();
	}
	
	// add collection name when not private collection (or editing a message that's not your)
	var fullName;
	if (isNaN(collection) || (nucleusAuthorId != collection)) {
		fullName = collection + '/' + filename;
	} else {
		fullName = filename;
	}	
	
	var replaceBy = '<%media(' +  fullName + '|' + text +')%>';
	
	insertAtCaret(replaceBy);
	updAllPreviews();	
}



/*        クッキーに登録する汎用関数              */
/* 書式 : mySetCookie(クッキー名,値,有効期限日数) */
/* 戻り値 : なし(void)                            */
function mySetCookie(myCookie,myValue,myDay){
   myExp = new Date();
   myExp.setTime(myExp.getTime()+(myDay*24*60*60*1000));
   myItem = "@" + myCookie + "=" + escape(myValue) + ";";
   myExpires = "expires="+myExp.toGMTString();
   document.cookie =  myItem + myExpires;
}

/*        クッキーを取り込む汎用関数              */
/* 書式 : myGetCookie(クッキー名)                 */
/* 戻り値 : 値(string)  null:該当なし             */
function myGetCookie(myCookie){
   myCookie = "@" + myCookie + "=";
   myValue = null;
   myStr = document.cookie + ";" ;
   myOfst = myStr.indexOf(myCookie);
   if (myOfst != -1){
      myStart = myOfst + myCookie.length;
      myEnd   = myStr.indexOf(";" , myStart);
      myValue = unescape(myStr.substring(myStart,myEnd));
   }
   return myValue;
}


function saveMyValues() {
  mySetCookie("formcontact", document.form1.f__contact.value,365);
  mySetCookie("formdelivery",  document.form1.f__delivery_date.value,365);
}


function getMyValues() {
if(!myGetCookie("formcontact")) {
	myformcontact="連絡先をお願いします"
	} else {
	myformcontact = myGetCookie("formcontact")
}

if(!myGetCookie("formdelivery")) {
	acDate=new Date();
	myYear=acDate.getYear();
	if(myYear<2000){myYear=myYear+1900};
	myMonth=acDate.getMonth()+1;
	myDate=acDate.getDate()+1;
	tomorrow=myYear + "-" + (zeroUme(myMonth,2)) + "-" + (zeroUme(myDate,2));

	myformdelivery=tomorrow
	} else {
	myformdelivery = myGetCookie("formdelivery")
}


  document.form1.f__contact.value = myformcontact;
  document.form1.f__delivery_date.value = myformdelivery;
}


/*==================================================
  桁数分ゼロ挿入関数
  zeroUme(num,len)
  --------------------------------------------------
  lenで指定した桁数になるまで
  numの値の左側に0を付加した文字列を返します。
  numの桁数がlenより大きい時は何もしません。

  例:zeroUme(30,5)→00030
  --------------------------------------------------*/

function zeroUme(num,len){

  var sa = len - (num+"").length
  var add0 = ""
  if( sa > 0 ) for ( i=0;i<sa;i++ ){ add0 += "0" }
  return ( add0 + num )

}


// function to prevent submitting form data twice
var submitcount=0;
function checkSubmit() {

//title 入力チェック

if(!document.form1.title.value){ 
	alert('タイトルを入力してください');
	return false; 
}

//日付の有効性チェック
//Remove 2007/11/19
/*
datestr=document.form1.f__delivery_date.value;
   if(!datestr.match(/^\d{4}\-\d{2}\-\d{2}$/)){ 
alert('引渡し日の確認をしてください');
        return false; 
    } 
    var vYear = datestr.substr(0, 4) - 0;
    var vMonth = datestr.substr(5, 2) - 1;
    var vDay = datestr.substr(8, 2) - 0; 
    if(vMonth >= 0 && vMonth <= 11 && vDay >= 1 && vDay <= 31){ 
        var vDt = new Date(vYear, vMonth, vDay); 
        if(isNaN(vDt)){ 
            return false; 
        }else if(vDt.getFullYear() == vYear && vDt.getMonth() == vMonth && vDt.getDate() == vDay){ 
        }else{ 
alert('引渡し日の確認をしてください');
            return false; 
        } 
    }else{ 
alert('引渡し日の確認をしてください');
        return false; 
    } 



未来の日付かどうかをチェック
var now = new Date();
   var today = new Date(now.getYear(),now.getMonth(),now.getDate());
var checkdate = new Date(vYear, vMonth, vDay);
      if (checkdate > now) {
         return true;
     } else {
alert('引渡し日は、過去の日付は設定できません');
         return false;
}
*/


//Cookie set
saveMyValues();




	if (submitcount == 0) {
		submitcount++;
		return true;
	} else {
		return false;
	}
}


// code to store the caret (cursor) position of a text field/text area
// taken from javascript.faqts and modified
// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130

// stores the caret
var lastSelected, lastCaretPos;
function storeCaret (textEl) {

	// store caret
	if (textEl.createTextRange) 
		//textEl.caretPos = document.selection.createRange().duplicate();
		lastCaretPos = document.selection.createRange().duplicate();

	// also store lastselectedelement
	lastSelected = textEl;
	
	nonie_FormType = textEl.name;

	scrollTop = textEl.scrollTop;
}

//var lastSelected;

// inserts text at caret (overwriting selection)
function insertAtCaret (text) {
	var textEl = lastSelected;
	if (textEl && textEl.createTextRange && lastCaretPos) {
		var caretPos = lastCaretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
	} else if (!document.all && document.getElementById) {
		mozReplace(document.getElementById('input' + nonie_FormType), text);				
		if(scrollTop>-1) {
			document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
		}
	} else if (textEl) {
		textEl.value  += text;
	} else {
		document.getElementById('input' + nonie_FormType).value += text;		
		if(scrollTop>-1) {
			document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
		}
	}
	updAllPreviews();
}

// inserts a tag around the selected text
function insertAroundCaret (textpre, textpost) {
	var textEl = lastSelected;
	
	if (textEl && textEl.createTextRange && lastCaretPos) {
		var caretPos = lastCaretPos;
		caretPos.text = textpre + caretPos.text + textpost;
	} else if (!document.all && document.getElementById) {
		mozWrap(document.getElementById('input' + nonie_FormType), textpre, textpost);		
		if(scrollTop>-1) {
			document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
		}
	} else {
		document.getElementById('input' + nonie_FormType).value += textpre + textpost;
		if(scrollTop>-1) {
			document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
		}
	}

	updAllPreviews();
}

/* some methods to get things working in Mozilla as well */
function mozWrap(txtarea, lft, rgt) {
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;
	var selEnd = txtarea.selectionEnd;
	if (selEnd==1 || selEnd==2) selEnd=selLength;
	var s1 = (txtarea.value).substring(0,selStart);
	var s2 = (txtarea.value).substring(selStart, selEnd)
	var s3 = (txtarea.value).substring(selEnd, selLength);
	txtarea.value = s1 + lft + s2 + rgt + s3;
}
function mozReplace(txtarea, newText) {
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;
	var selEnd = txtarea.selectionEnd;
	if (selEnd==1 || selEnd==2) selEnd=selLength;
	var s1 = (txtarea.value).substring(0,selStart);
	var s2 = (txtarea.value).substring(selStart, selEnd)
	var s3 = (txtarea.value).substring(selEnd, selLength);
	txtarea.value = s1 + newText + s3;
}
function mozSelectedText() {
	var txtarea = document.getElementById('input' + nonie_FormType);
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;
	var selEnd = txtarea.selectionEnd;
	if (selEnd==1 || selEnd==2) selEnd=selLength;
	return (txtarea.value).substring(selStart, selEnd);
}

function getCaretText() {
	if (!document.all && document.getElementById)
		return mozSelectedText();
	else
		return lastCaretPos.text;
}

function isCaretEmpty() {
	if (lastSelected && lastSelected.createTextRange && lastCaretPos)
		return (lastCaretPos.text == '');
	else if (!document.all && document.getElementById)
		return (mozSelectedText() == '');
	else
		return true;
}

function BtnHighlight(el) {
	with(el.style){
		borderLeft="1px solid gray";
		borderRight="1px solid #e9e9e9";
		borderTop="1px solid gray";
		borderBottom="1px solid #e9e9e9";
	}
}

function BtnNormal(el) {
	with(el.style){
		padding="3px";
		border="1px solid #dddddd";
	}
}

/**************************************************************** 
****************************************************************/ 
function ckDate(datestr) { 
alert(datestr);
   if(!datestr.match(/^\d{4}\-\d{2}\-\d{2}$/)){ 
alert('引渡し日の確認をしてください1');
        return false; 
    } 
alert('3');
    var vYear = datestr.substr(0, 4) - 0;
    var vMonth = datestr.substr(5, 2) - 1;
    var vDay = datestr.substr(8, 2) - 0; 
    if(vMonth >= 0 && vMonth <= 11 && vDay >= 1 && vDay <= 31){ 
        var vDt = new Date(vYear, vMonth, vDay); 
        if(isNaN(vDt)){ 
            return false; 
        }else if(vDt.getFullYear() == vYear && vDt.getMonth() == vMonth && vDt.getDate() == vDay){ 
            return true; 
        }else{ 
alert('引渡し日の確認をしてください2');
            return false; 
        } 
    }else{ 
alert('引渡し日の確認をしてください3');
        return false; 
    } 
} 
