
//host = "http://localhost:8080/citatoe/index.php/show/";
host = "http://www.citatoe.com/show/";

// ---------------- search form ----------------

var DUMMY_SEARCH = "Search quotes";

function searchFocused(el) {
	genOnFocus(el, "search-input", DUMMY_SEARCH);
}
function searchBlured(el) {
	genOnBlur(el, "input-hint search-input", DUMMY_SEARCH);
}



// ---------------- add quote form ----------------

var DUMMY_QUOTE = "New quote text";
var DUMMY_TAGS = "comma separated tags like: history, ha ha, travel";

function quoteFocused(el) {
	genOnFocus(el, "", DUMMY_QUOTE);
}
function quoteBlured(el) {
	if(trim(el.value) == "" || trim(el.innerHTML) == "") {
		el.className = "input-hint";
		el.value = DUMMY_QUOTE;
	}
}

function tagsFocused(el) {
	genOnFocus(el, "add-q-tags", DUMMY_TAGS);
}
function tagsBlured(el) {
	genOnBlur(el, "input-hint add-q-tags", DUMMY_TAGS);
	isValidTags(el.value);

	window.setTimeout(function(){hideEl("tags_container");}, 200);
}

function checkQuoteForm(book) {
	var q = gn("quote");
	if(trim(q.innerHTML)=="" || trim(q.value)=="" || q.value==DUMMY_QUOTE)
		return false;
	
	if(DUMMY_TAGS == gg("new_tags").value)
		gg("new_tags").value = "";
	
	if (!isValidTags(gg("new_tags").value)) {
		gg("warn_form").innerHTML = "Please correct your tags: only letters, numbers," +
		" &#145;-&#146; and &#145;_&#146; are allowed";
	//gg("warn_tags").innerHTML = ARR;
	}
	else {
		gg("submit_quote").value = "Loading...";
		gg("submit_quote").disabled = true;
		jQuery.post(host + 'quotes/' + book,
			$("#new_quote_form").serialize(),
			function (data, textStatus) {
				loadLastQuote(book);
				clearQuoteForm();
			}
		);
	}
}

function loadLastQuote(book) {
	jQuery.get(host + 'loadLastQuote/' + book + '/' + new Date().getTime(), 
		function (data, textStatus) {
			$("#all_quotes").append(data);
			$("#newq").fadeIn("slow").removeAttr("id");
		}
	);
	 
}

function clearQuoteForm() {
	gn("quote").value = gn("tags").value = gg("warn_form").innerHTML = "";
	gg("submit_quote").disabled = true;
	gg("submit_quote").value = "Add quote";
}

function showASTags(tags) {
	var tag = trim(tags.value.substring(tags.value.lastIndexOf(",") + 1));
	if(tag.length > 0){
		showEl("tags_container");
		$("#tags_container").load(host + 'asTags/' + tag, 
				function (responseText, textStatus, XMLHttpRequest) {
					//if (responseText.match(/URI you submitted/))
						//hideEl("tags_container");
				});
	}
}

function addTag(el) {
	var str = gg("new_tags").value;
	str = str.substring(0, str.lastIndexOf(",") + 1);
	if(str.length > 1) str += ' ';
	gg("new_tags").value = str + el.innerHTML;
	hideEl("tags_container");
	gg("new_tags").focus();
}



// ---------------- login form ----------------

var DUMMY_LOGIN = "login";
var INPUT_CLASS = "login-inpt";
var ARR = "&larr;";

function loginFocused(el) {
	genOnFocus(el, INPUT_CLASS, DUMMY_LOGIN);
}
function loginBlured(el) {
	genOnBlur(el, "input-hint " + INPUT_CLASS, DUMMY_LOGIN);
}

function pwFocused(el) {
	el.style.display = "none";
	
	var pw = gn("pw");
	pw.style.display = "";
	pw.focus();
}
function pwBlured(el) {
	if(trim(el.value) == ""){
		gn("pw-t").style.display = "";
		el.style.display = "none";
	}
}

function pw2Focused(el) {
	el.style.display = "none";
	
	var pw = gn("pw2");
	pw.style.display = "";
	pw.focus();
}
function pw2Blured(el) {
	if(trim(el.value) == ""){
		gn("pw2-t").style.display = "";
		el.style.display = "none";
	}
}

function togglePW2(reg) {
	// now i have to do this crap cause IE sucks, i'd rather simpy change input type
	if(reg) {
		if(trim(gn("pw2").value)==""){
			gn("pw2-t").style.display = "";
			gn("pw2").style.display = "none"
		}
		else {
			gn("pw2").style.display = "";
			gn("pw2-t").style.display = "none"
		}
	}
	else
		gn("pw2-t").style.display = gn("pw2").style.display = "none";
}

function toggleReg(el) {
	reg = (gg("sign_in").value == "Sign In");
	gg("sign_in").value = reg ? "Register & Sign In" : "Sign In" ;
	el.innerHTML = reg ? "Sign In" : "Register";
	gg("email_hint").style.display = reg ? "" : "none";
	togglePW2(reg);
	if(!reg){
		gg("warn_pw").innerHTML = gg("warn_pw2").innerHTML = gg("warn_login").innerHTML = "";
	}
}

function submitSignIn() {
	if(gg("sign_in").value == "Sign In"){
		gg("login_form").submit();
	}
	else if(!isValidMail(gn("login").value)){
		gg("warn_login").innerHTML = ARR + "&nbsp;";
		gg("warn_form").innerHTML = "Please enter a valid e-mail. We don't mind, but you need your password recovery option, don't you?";
	}
	else if( gn("pw2").value!=gn("pw").value || trim(gn("pw").value)=="" ) {
		gg("warn_login").innerHTML = "";
		gg("warn_pw").innerHTML = ARR;
		gg("warn_pw2").innerHTML = ARR;
		gg("warn_form").innerHTML = "Passwords don't match. Please re-enter them."
	}
	else{
		gn("doReg").value = 1;
		gg("login_form").submit();
	}
}

function tryDemo() {
	if(gg("sign_in").value != "Sign In")
		toggleReg(gg("reg_toggler"));
	loginFocused(gn("login"));
	gn("login").value = "demo@ccou.nt";
	pwFocused(gn("pw-t"));
	gn("pw").value = "demo";
}



// ---------------- edit quote ----------------

function editQuote(id) {
	editQuote(id, '');
}
function editQuote(id, search) {
	var txt = trim(gg("original_4_edit_" + id).innerHTML);
	var tags = gg("qt_" + id).innerHTML;
	
	var el = gg("q_" + id);
	el.innerHTML = editQuoteForm(txt, tags, id, search);
	el.onclick = null;
}

function editQuoteForm(quote, tags, id, search) {
	search = (search=='') ? '' : '<input type="hidden" value="' + search + '" name="search" />&nbsp;';
		
	return '<div class="edit-quote-form">' +
			'<form method="post" action="" id="ef_' + id + '">' +
				'<textarea name="quote" onkeyup="onTypeTA(this, \'save_' + id + '\'); expandTA(this);" rows="4" id="eq_' + id + '" >' + quote + '</textarea>' +
				'<textarea class="et" name="tags" id="et_' + id +
					'" onkeyup="onTypeSubTA(\'eq_' + id + '\',\'save_' + id + '\'); expandTA(this);" rows="4"">' + tags + '</textarea><br />' +
				search +
				'<input type="hidden" value="' + id + '" name="q_id" />' +
				'<input type="hidden" value="save" name="act" id="act_' + id + '" />&nbsp;' +
				'<input type="submit" value="Save" class="button" disabled="true" id="save_' + id + 
					'" onclick="saveQuote(' + id + '); return false; "/>&nbsp;' +
				'<input type="button" value="Delete" class="button" ' +
					'onclick="deleteQuote(' + id + '); return false; " />&nbsp;' +
				'<input type="submit" value="Cancel" class="button" ' +
					'onclick="cancelQuoteEdit(' + id + '); return false; " />' +
			'</form></div>';
}

function saveQuote(id) {
	if (!isValidTags(trim(gg("et_" + id).value)) || !isValidTags(trim(gg("et_" + id).innerHTML))) 
		alert("Please correct your tags: only letters, numbers, '-' and '_' are allowed");
	else {
		jQuery.post(host + 'quotes/0',
			 $("#ef_" + id).serialize(), 
			 function(data, textStatus){
				$("#q_" + id).after(data).remove();
				$("#newq").fadeIn("slow").removeAttr("id");
			}
		);
	}
}

function cancelQuoteEdit(id) {
	gg("act_" + id).value = "cancel";
	gg("ef_" + id).submit();
}

function deleteQuote(id) {
	if(confirm("Are you sure you want to delete this quote?")){
		gg("act_" + id).value = "delete";
		jQuery.post(host + 'quotes/0',
			$("#ef_" + id).serialize(),
			function (data, textStatus) {
				$("#q_" + id).slideUp("slow", function(){
					$("#q_" + id).remove();
				});
			}
		);
	}
	//else
		//cancelQuoteEdit(id);
}

function expandTA(ta) {
	var lines = lineBreakCount(ta.value);
	if(lines>3) {
		//ta.style.height = "auto;";
		ta.rows = lines + 1;
	}
}

// ---------------- book list ----------------

var NEW_BOOK_FORM = "<li><form action='' method='post'>" + 
					"<input type='hidden' name='new_book' value='1' />" +
					"<input name='title' onkeyup='onType(this, \"nb_btn\")' />" +
					"&nbsp;<input type='submit' value='Add' id='nb_btn' disabled='disabled' /></form></li>";
var addBookOn = false;

function resetAddBook() { addBookOn = false; }

function addBook() {
	if(!addBookOn)
		gg("book_list").innerHTML = gg("book_list").innerHTML + NEW_BOOK_FORM;
	addBookOn = true;
	gn('title').focus();
}

function showBookEdit(id) { gg("be_" + id).style.display = ""; }
function hideBookEdit(id) { gg("be_" + id).style.display = "none"; }

function editBook(id) {
	gg("b_" + id).innerHTML = editBookForm( gg("bl_"+id).innerHTML, id );
}

function editBookForm(title, id) {
	return "<form action='' method='post' id='ef_" + id + "'>" + 
				"<input name='title' onkeyup='onType(this, \"save_" + id + "\")' value='" + title + "' />" +
				"<input type='hidden' name='book_id' value='" + id + "' />" +
				"<input type='hidden' name='act' id='act_" + id + "' value='save' />" +
				"&nbsp;<input type='submit' value='Save' id='save_" + id + "' disabled='true' />" +
				"&nbsp;&nbsp;<input type='submit' value='Delete' onclick='deleteBook(" + id + "); return false; ' />" +
				"&nbsp;<input type='submit' value='Cancel' onclick='cancelBookEdit(" + id + "); return false; ' /></form>";
}

function cancelBookEdit(id) {
	gg("act_" + id).value = "cancel";
	gg("ef_" + id).submit();
}

function deleteBook(id) {
	if(confirm("All quotes in this book will be deleted as well. Continue?")){
		gg("act_" + id).value = "delete";
		gg("ef_" + id).submit();
	}
	else
		cancelBookEdit(id);
}


// ---------------- tag list ----------------
function editTag(id) {
	gg("t_" + id).innerHTML = editTagForm( gg("tl_"+id).innerHTML, id );
}

function editTagForm(tag, id) {
	return "<form action='' method='post' id='etf_" + id + "'>" + 
				"<input name='tag' id='et_" + id + "' onkeyup='onType(this, \"save_" + id + "\")' value='" + tag + "' />" +
				"<input type='hidden' name='tag_id' value='" + id + "' />" +
				"<input type='hidden' name='act_tag' id='act_tag_" + id + "' value='save' />" +
				"&nbsp;<input type='submit' value='Save' id='save_" + id + "' disabled='true' onclick='saveTag(" + id + "); return false; ' />" +
				"&nbsp;&nbsp;<input type='submit' value='Delete' onclick='deleteTag(" + id + ", \"" + tag + "\"); return false; ' />" +
				"&nbsp;<input type='submit' value='Cancel' onclick='cancelTagEdit(" + id + "); return false; ' /></form>";
}

function saveTag(id) {
	if(!isValidTags(trim(gg("et_" + id).value)) || !isValidTags(trim(gg("et_" + id).innerHTML)))
		alert("Please correct your tag: only letters, numbers, '-' and '_' are allowed");
	else
		gg("etf_" + id).submit();
}

function cancelTagEdit(id) {
	gg("act_tag_" + id).value = "cancel";
	gg("etf_" + id).submit();
}

function deleteTag(id, tag) {
	if(confirm("Are you sure you want to delete tag '"+tag+"'?")){
		gg("act_tag_" + id).value = "delete";
		gg("etf_" + id).submit();
	}
	else
		cancelTagEdit(id);
}




// ---------------- settings ----------------
function submitChangePw() {
	if( gn("new_pw").value!=gn("new_pw2").value || trim(gn("new_pw").value)=="" ) {
		gg("warn_o_pw").innerHTML = "";
		gg("warn_pw").innerHTML = ARR;
		gg("warn_pw2").innerHTML = ARR;
		gg("warn_form").innerHTML = "Passwords don't match or empty. Please re-enter them."
		$("#warn_form").fadeOut(100, function () {$("#warn_form").fadeIn(100)});
	}
	else{
		gg("pw_form").submit();
	}
}

function submitChangeAlias() {
	if(!isValidText(gn("new_alias").value)) {
		gg('warn_form_alias').innerHTML = "<br />Alias can only contain: latin letters, numbers, _ and -";
		$("#warn_form_alias").fadeOut(100, function () {$("#warn_form_alias").fadeIn(100)});
	}
	else if(trim(gn("new_alias").value).length>40) {
		gg("warn_form_alias").innerHTML = "<br />Alias should be no longer than 40 characters";
		$("#warn_form_alias").fadeOut(100, function () {$("#warn_form_alias").fadeIn(100)});
	}
	else{
		gg("alias_form").submit();
	}
}



// ---------------- toolkit functions ----------------

function trim(str) {
	return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

function gg(id) {
	return document.getElementById(id);
}
function gn(name) {
	return document.getElementsByName(name)[0];
}

function genOnBlur(el, style, text) {
	if(trim(el.value) == "") {
		el.className = style;
		el.value = text;
	}
}

function genOnFocus(el, style, text) {
	if(el.value == text) {
		el.value = "";
		el.className = style;
	}
}

function isValidMail(email) {
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   return reg.test(email);
}

function isValidText(text) {
	   var reg = /^[a-zA-Z0-9_/-]+$/;
	   return reg.test(text);
	}

function isValidTags(tags) {
   //var reg = /([A-Za-z0-9_\-\,])$/;
   return true;// tags=="" ? true : reg.test(tags);
}

function onType(el, btn) {
	if(trim(el.value)!="")
		gg(btn).disabled = false;
	else
		gg(btn).disabled = true;
}
function onTypeTA(el, btn) {
	if(trim(el.innerHTML)!="" && trim(el.value)!="")
		gg(btn).disabled = false;
	else
		gg(btn).disabled = true;
}
function onTypeSubTA(mainEl, btn) {
	onTypeTA(gg(mainEl), btn)
}
function onTypeEmail(el, btn) {
	if(isValidMail(el.value))
		gg(btn).disabled = false;
	else
		gg(btn).disabled = true;
}

function lineBreakCount(str){
	/* counts \n */
	try {
		return((str.match(/[^\n]*\n[^\n]*/gi).length));
	} catch(e) {
		return 0;
	}
}

function showEl(id) { gg(id).style.display = ""; }
function hideEl(id) { gg(id).style.display = "none"; }