// Misc. Javascript for Peakware.com
// Created by Terrill Thompson, terrillthompson.com
// Last update: Ocotber 30, 2009

$(document).ready(function() {

	$('#dialog').dialog({
		autoOpen: false,
		hide: 'slide',
		width: 500,
		height: 300
	});

	$("a.nonclickable").click(function(event){
		event.preventDefault();
	});
	
	function showCamError(camId) { 

		$("#"+camId).removeClass("loading");
		$("#"+camId).empty();
		$("#"+camId).append("Cam Unavailable");
		$.post('../incs/camtracker.php',{ camId: camId });
	}
	
	$("a.logLink").hover(function(event) { 
		//this function performed on mouseover
		event.preventDefault();
		var logLink = $(this).attr("href");
		var pk = getUrlParam(logLink,'pk');
		var log = getUrlParam(logLink,'log');
		var ajaxUrl = 'scripts/ajaxLogPreview.php?pk=' + pk + '&id=' + log;
		$("#preview")
			.jqm({
			modal: false, 
			overlay: 0,
			ajax: ajaxUrl
		})
	.jqmShow();
	},
	function () { 
		//this function performed on mouseout
		$("#preview").jqmHide();
	});
	
	$("a.photoLink").click(function(event) { 
		//display photo full size in a jqmodal div
		event.preventDefault();
		var photoLink = $(this).attr("href");
		/* Original...
		var fileName = getUrlParam(photoLink,'fileName');
		var fileDir = getUrlParam(photoLink,'fileDir');
		//The above replaced with the following...
		*/
		var photo = getUrlParam(photoLink,'photo');
		var imgWidth = getUrlParam(photoLink,'width');
		var imgHeight = getUrlParam(photoLink,'height');
		//var imgTag = '<img src="' + fileDir + fileName + '" ';
		var imgTag = '<img src="/img.php?src=' + photo + '" ';
		var imgTag = imgTag + 'style="width:' + imgWidth + 'px;height:' + imgHeight + 'px" ';
		var imgTag = imgTag + 'alt=""/>';
		var imgTag = imgTag + '<p>Click off the photo to make it disappear.</p>' + "\n";
		$("#preview")
			.html(imgTag)
			.jqm({
			modal: false, 
			overlay: 70
		})
		.jqmShow();
	});

	$("a.moveLink").click(function(event) { 
		event.preventDefault();
		var moveLink = $(this).attr("href");
		var photoId = getUrlParam(moveLink,'photo');
		var ajaxUrl = 'scripts/ajax4photos.php';
		$.post(ajaxUrl, {
			action : 'promptForPeak',
			photoId : photoId
		}, function (data) { 
			$("#dialog")
				.html(data)
				.data('title.dialog','Move Photo')
				.data('width.dialog',500)
				.data('height.dialog',300)
				.data('buttons.dialog',{"Find": function() {
					//$(this).dialog("close");
					if (document.getElementById('peakSearch')) { 
						var peakSearch = document.getElementById('peakSearch').value;
						$.post(ajaxUrl, { 
							action : 'showPeakChoices',
							photoId : photoId,
							peakName: peakSearch
						}, function (data) { 		
							if (data == "0") { 
								$("#dialog")
								.html('<p>No matching peaks were found.</p>')
								.data('buttons.dialog',{"ok": function() { 
									$(this).dialog("close");
								}})
								.dialog("open");
							}
							else { 
								$("#dialog")
								.html(data)
								.data('buttons.dialog',{"ok": function() { 
									var peakId = $("input[@name='peakId']:checked").val(); 
									var peakName = $("input[@name='peakId']:checked").attr('title'); 
									var desc = $("#desc_" + photoId).val();
									$.post(ajaxUrl, { 
										action: 'movePhoto',
										photoId: photoId,
										desc: desc,
										newPeak: peakId
									}, function (data) {
										$("#dialog").dialog("close");
										if (data == "ok") { 
											var divId = 'photo' + photoId;
											$("#" + divId).slideUp("slow");
										}
										else { 
											msg = 'Sorry, we are unable to move photo #' + photoId;
											alert (msg);
										}
									});
								}})
								.dialog("open");
							}
						});
					}
				}})
				.dialog("open");		
			});
	});
		
	$("a.delPhotoLink").click(function(event) { 
		event.preventDefault();
		var delLink = $(this).attr("href");
		var photoId = getUrlParam(delLink,'photo');
		var ajaxUrl = 'scripts/ajax4photos.php';
		$.post(ajaxUrl, {
			action : 'deletePhoto',
			photoId : photoId
		}, function (data) { 
			if (data == "ok") { 
				var divId = 'photo' + photoId;
				$("#" + divId).slideUp("slow");
			}
			else { 
				msg = 'Sorry, we are unable to delete photo #' + photoId;
				alert (msg);
			}
		});
	});

	$("a.delLogLink").click(function(event) { 
		event.preventDefault();
		var delLink = $(this).attr("href");
		var logId = getUrlParam(delLink,'log');
		var parentId = getUrlParam(delLink,'pk');
		deleteItem('log',logId,'peak',parentId);
	});

});

function checkAllBoxes() {
	$(".checkBox").attr('checked', true);
}

function ajaxFileUpload(userId) {

	//starting setting some animation when the ajax starts and completes
	$("#loading").
		ajaxStart(function(){
			$(this).show();
			// $("#myPhotoDiv").hide();
			// $("#uploadMsg").show().addClass("waiting");
		})
		.ajaxComplete(function(){
			$(this).hide();
			// $("#myPhotoDiv").show();
			// $("#uploadMsg").removeClass("waiting");
		});
		
		/*
			preparing ajax file upload
			url: the url of script file handling the uploaded files
			fileElementId: the file type of input element id and it will be the index of  $_FILES Array()
			dataType: it support json, xml
			secureuri:use secure protocol
			success: call back function when the ajax complete
			error: callback function when the ajax failed
		*/
		var phpUrl = 'scripts/doajaxfileupload.php?userId=' + userId;
		$.ajaxFileUpload
		(
			{
				url:phpUrl, 
				secureuri:false,
				fileElementId:'fileToUpload',
				dataType: 'json',
				success: function (data, status) {
					if(typeof(data.error) != 'undefined') {
						if(data.error != '') {
							$("#uploadMsg").html(data.error);
						}
						else {
							//alert(data.msg);
							$("#uploadMsg").html(data.msg);
							$("#uploadMsg").addClass("alert");
							$("#photoVerb").text('Replace this');
							//force a refresh of image
							var imgSrc = $("#myPhoto img").attr('src');
							if(typeof(imgSrc) == 'undefined') {
								//create a new img element
								var imgTag = '<img alt="" src="img.php?p=1&amp;src= ';
								imgTag += userId + '"/>';
								$("#myPhoto").html(imgTag);								
							}
							else { 
								//refresh the img element with new src
								var timestamp = new Date().getTime();
								$("#myPhoto img")
									.attr('src',imgSrc+'&amp;'+timestamp)
									.removeAttr("width")
									.removeAttr("height");
							}
						}
					}
				},
				error: function (data, status, e) {
					$("#uploadMdsg").append(e);
				}
			}
		)
		return false;
}

function toggleVisibility(obj,span) {

	if ($("#" + obj).is(":hidden")) {
		$("#" + obj).slideDown("slow");
		$("#" + span).html('Hide');
	}
	else { 
		$("#" + obj).slideUp("slow");
		$("#" + span).html('Show');		
	}
};

function makeStateVisible(country) { 

	if (country == 'United States' || country == '204') { 
		if ($("#stateField").is(":hidden")) {
			if ($("#provinceField").is(":visible")) 
				$("#provinceField").hide();
			$("#stateField").slideDown("slow");
		}
	}
	else if (country == 'Canada' || country == '179') { 
		if ($("#provinceField").is(":hidden")) {
			if ($("#stateField").is(":visible")) 
				$("#stateField").hide();
			$("#provinceField").slideDown("slow");
		}
	}
	else { 
		if ($("#stateField").is(":visible")) { 
			$("#stateField").slideUp("slow");
		}
		if ($("#provinceField").is(":visible")) { 
			$("#provinceField").slideUp("slow");
		}
	}
}

// functions for manipulating peak links
var numNewLinks=0;

function addLink() { 
	numNewLinks++;
	var newLink = 	"<li>\n";
	var titleField = 'newTitle' + numNewLinks;
	var urlField = 'newUrl' + numNewLinks;
	newLink = newLink + '<label for="' + titleField + '">Title:</label> ';
	newLink = newLink + '<input type="text" name="' + titleField + '" ';
	newLink = newLink + 'id="' + titleField + '"/><br/>' + "\n";
	newLink = newLink + '<label for="' + urlField + '">URL:</label> ';
	newLink = newLink + '<input type="text" name="' + urlField + '" ';
	newLink = newLink + 'id="' + urlField + '"/></li>' + "\n";
	$("#linkEditor")
		.append(newLink)
		.slideDown("slow")
	;
}


function deleteItem(what,id,pType,pid) { 

	var params = "what=" + what + "&id=" + id;
	if (typeof(pType) != 'undefined' && typeof(pid) != 'undefined')
		params = params + "&pType=" + pType + "&pid=" + pid;
	$.ajax({ 
		type: "POST",
		url: "http://www.peakware.com/scripts/ajaxDelete.php",
		data: params,
		dataType: "text",
		success: function(result){
			if (trim(result) == 'ok') { 
				var selector = "#" + what + id;
				$(selector).slideUp("slow"); 
			}
			else alert ('Sorry. You can not delete that ' + what + '.');
		}
	});

}

function trim (str, charlist) {
	// http://kevin.vanzonneveld.net
	// +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   improved by: mdsjack (http://www.mdsjack.bo.it)
	// +   improved by: Alexander Ermolaev (http://snippets.dzone.com/user/AlexanderErmolaev)
	// +      input by: Erkekjetter
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +      input by: DxGx
	// +   improved by: Steven Levithan (http://blog.stevenlevithan.com)
	// +    tweaked by: Jack
	// +   bugfixed by: Onno Marsman
	// *     example 1: trim('    Kevin van Zonneveld    ');
	// *     returns 1: 'Kevin van Zonneveld'
	// *     example 2: trim('Hello World', 'Hdle');
	// *     returns 2: 'o Wor'
	// *     example 3: trim(16, 1);
	// *     returns 3: 6
 
	var whitespace, l = 0, i = 0;
	str += '';
    
	if (!charlist) {
		// default list
		whitespace ="\n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000";
	} else {
		// preg_quote custom list
		charlist += '';
		whitespace = charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
	}
    
	l = str.length;
	for (i = 0; i < l; i++) {
		if (whitespace.indexOf(str.charAt(i)) === -1) {
			str = str.substring(i);
			break;
		}
	} 
	l = str.length;
	for (i = l - 1; i >= 0; i--) {
		if (whitespace.indexOf(str.charAt(i)) === -1) {
			str = str.substring(0, i + 1);
			break;
		}
	}
	return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
}

// functions for synchronizing continents, countries, ranges, and subranges

function buildChildren(thisField,thisValue) { 
	if (thisField == 'continent') { 
		selectChildren(thisField,thisValue,'country');
		selectChildren(thisField,thisValue,'range');
	}
	else if (thisField == 'range') { 
		selectChildren(thisField,thisValue,'subRange');
	}
}

function updateOptions(selectbox, xml) {
	//remove all current options, add one blank option
	$('#'+selectbox)
		.find('option')
		.remove()
		.end()
		.append('<option value=""></option>'+"\n")
	;
	//parse xml and add new option for each child found
	$("child",xml).each(function(i) { 
		var id = $(this).attr("id");
		var name = $(this).attr("name");
		$('#'+selectbox)
			.append('<option value="' + id + '">' + name + '</option>' + "\n")
		;
	});
}

function selectChildren(parentField,parentValue,childField){
	//remove all existing options from childField select element
	//removeAllOptions(childField);
	//get new options via AJAX
	var phpUrl = 'data/getchildren.php';
	$.ajax({ 
		type: "GET",
		url: "data/getchildren.php",
		data: "pf=" + parentField + "&pv=" + parentValue + "&cf=" + childField,
		dataType: "xml",
		success: function(xml){
			updateOptions(childField,xml);
		}
	});
}

// widely used general purpose functions

function changeSpan(span,content) { 
	document.getElementById(span).innerHTML=content;
}

function checkRadio(boxToCheck,boxToUncheck) { 
	if (boxToCheck) { 
		document.getElementById(boxToCheck).checked = true;
	}
	if (boxToUncheck) {
		document.getElementById(boxToCheck).checked = false;
	}
}
		
function getUrlParam(url,param) {

	param = param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+param+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec(url);
	if( results == null )
		return "";
	else
		return results[1];
}
