<!DOCTYPE HTML>
<html>
	<head >
		<title>Photark Mobile</title>
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<link href="css/jquery.mobile-1.1.0.min.css" rel="stylesheet"
		type="text/css" />
		<link href="css/mobiscroll-2.0.full.min.css" rel="stylesheet"
		type="text/css" />
		<link href="css/photoswipe.css" rel="stylesheet"
		type="text/css" />
		<link href="css/jquery.mobile.simpledialog.css" rel="stylesheet"
		type="text/css" />
		<link href="css/custom.css" rel="stylesheet"
		type="text/css" />
		<style>
			.more
			{
				text-align:right;
			}
		</style>
		<script type="text/javascript" src="scripts/jquery-1.7.2.min.js"></script>
		<script type="text/javascript" src="scripts/jquery.mobile-1.1.0.min.js"></script>
		<script type="text/javascript" src="scripts/mobiscroll-2.0.full.min.js"></script>
		<script type="text/javascript" charset="utf-8" src="scripts/cordova-1.8.0.js" ></script>
		<script type="text/javascript" charset="utf-8" src="scripts/klass.min.js"></script>
		<script type="text/javascript" charset="utf-8" src="scripts/code.photoswipe-3.0.5.min.js"></script>
		<!--For Facebook Implementation Start-->
		<script type="text/javascript" src="scripts/cdv-plugin-fb-connect.js"></script><!--Facebook Connect Plugin-->
		<script type="text/javascript" src="scripts/facebook_js_sdk.js"></script><!--Facebook JS SDK-->
		<script type="text/javascript" src="scripts/facebook.js"></script><!--Facebook Implementation-->
		<!--For Facebook Implementation End-->
		<script type="text/javascript" charset="utf-8" src="scripts/jquery.mobile.simpledialog2.js"></script>
		<script type="text/javascript" charset="utf-8" src="scripts/contacts.js" ></script>
		<script type="text/javascript" charset="utf-8" src="scripts/utils.js" ></script>
		<script type="text/javascript" charset="utf-8" src="scripts/tagging.js" ></script>
		<script type="text/javascript" charset="utf-8" src="scripts/dataAccess.js"></script>
		<script type="text/javascript" charset="utf-8" src="scripts/search.js"></script>	
		<script type="text/javascript" charset="utf-8" src="http://maps.googleapis.com/maps/api/js?libraries=places&sensor=true"></script>
		<script type="text/javascript" charset="utf-8" src="scripts/geoLocation.js" ></script>
		<script type="text/javascript" charset="utf-8" src="scripts/jquery.ui.map.js"></script>
		<!-- <script type="text/javascript" charset="utf-8" src="scripts/jquery.ui.map.services.js"></script> -->
		<script type="text/javascript" charset="utf-8" src="scripts/MapView.js"></script>
		
		<!--For Flickr Implementation Start-->
		<script type="text/javascript" charset="utf-8" src="scripts/childbrowser.js"></script>
		<script type="text/javascript" charset="utf-8" src="scripts/jquery.md5.js"></script>
		<script type="text/javascript" charset="utf-8" src="scripts/sha1.js"></script>
		<script type="text/javascript" charset="utf-8" src="scripts/flickr.js"></script>
		<!--For Flickr Implementation End-->
		<!--For Picasa Implementation Start-->
		<script type="text/javascript" charset="utf-8" src="scripts/picasa.js"></script>
		<!--For Picasa Implementation End-->
		<script type="text/javascript" charset="utf-8" src="http://maps.googleapis.com/maps/api/js?libraries=places&sensor=true"></script>
		<script type="text/javascript" charset="utf-8" src="scripts/geoLocation.js" ></script>
		<script type="text/javascript" charset="utf-8" src="scripts/jquery.ui.map.js"></script>
		<!-- <script type="text/javascript" charset="utf-8" src="scripts/jquery.ui.map.services.js"></script> -->
		<script type="text/javascript" charset="utf-8" src="scripts/MapView.js"></script>
		<script type="text/javascript">
			var pictureSource;
			// picture source
			var destinationType;
			// sets the format of returned value
			
			var windowWidth;
			var windowHeight;
			
			var tagObjects;
			var tagObjectsSaved;
			var tagObjects;
			var tagObjectsSaved;
			// Wait for device
			document.addEventListener("deviceready", onDeviceReady, false);

			function onDeviceReady() {
				
				checkNetwork();
				
				pictureSource = navigator.camera.PictureSourceType;
				destinationType = navigator.camera.DestinationType;
				getContacts();
				$('#ContactsPage li a').live('click', function() {
					var name = $(this).text();
					onContactsClick(name);
				});

				openDB();	//Initialize the database
				
				//Screen orientation changed
				$(window).bind( 'orientationchange', function(e){
					if ($.event.special.orientationchange.orientation() == "portrait") {
						adjustScreenLayout();
					} else {
						adjustScreenLayout();
					}
				});
				adjustScreenLayout();
				
				//To handle menu button clicks
				document.addEventListener("menubutton", onMenuClick, false);	
				
				//Auto complete feature of location
				var options = {
  					types: ['(cities)'
					]
				};

				
			}

			//Document ready function
			$(function() {

				// Handler for Date Picker

				$('#editDate').scroller({
					preset : 'date',
					theme : 'default',
					display : 'modal',
					mode : 'scroller',
					dateOrder : 'yymmdd',
					dateFormat : "yy-mm-dd"
				});

				//Handler for time picker
				$('#editTime').scroller({
					preset : 'time',
					theme : 'default',
					display : 'modal',
					mode : 'scroller'
				});
				
				$('#searchStartDate').scroller({
					preset : 'date',
					theme : 'default',
					display : 'modal',
					mode : 'scroller',
					dateOrder : 'yymmdd',
					dateFormat : "yy-mm-dd"
				});
				
				$('#searchEndDate').scroller({
					preset : 'date',
					theme : 'default',
					display : 'modal',
					mode : 'scroller',
					dateOrder : 'yymmdd',
					dateFormat : "yy-mm-dd"
				});
				
				 $("#tagPicture").click(function(e) {
				 	 e.preventDefault();
				 	 var x = e.pageX - this.offsetLeft;
				     var y = e.pageY - this.offsetTop;				     
				 	 showDialog(e,x,y) ;
			    })
			    	
			    $("#tagPicture").css({ 
					    'position': 'relative'
			    });
			    
			    if(google) {
					var autocomplete = new google.maps.places.Autocomplete($("#editLocation")[0], options);
					google.maps.event.addListener(autocomplete, 'place_changed', function() {
						var place = autocomplete.getPlace();
						//console.log(place.address_components);
					});
				} else {
					alert("location services not available");
				}

			});

			function onPhotoDataSuccess(imageData) {
				var largeImage = document.getElementById('largeImage');
				largeImage.style.display = 'block';
				largeImage.src = "data:image/jpeg;base64," + imageData;
			}

			function onPhotoURISuccess(imageURI) {
				$("#metadata").html("");
				var largeImage = document.getElementById('largeImage');

				largeImage.style.display = 'block';
				largeImage.src = imageURI;
				
				onImageUpdated();				
				
				$('#toolbar').listview("create");
				uri= imageURI;
				window.resolveLocalFileSystemURI(imageURI, onFileEntryComplete, isFail);
				
				tagObjects=new Array();
				
			    $('#largeImage').css({
			          // Using jQuery CSS we write the $width variable we previously specified as a pixel value. We use max-width incase the image is smaller than our viewport it won't scale it larger. Don't forget to set height to auto or else it will squish your photos.
			          'max-width' : windowWidth , 'height' : 'auto'
			    });   
			    
			    tagObjectsSaved=new Array();
				viewData(imageURI);
				$('#largeImage').click(function() { fullScreen(largeImage.src); });

			}
			
			function photoCaptureSuccess (uri) {
			  onPhotoURISuccess(uri);
			  clearMetadata();
			  date=getCurrentDate();
			  time=getCurrentTime();
			  updateDB();
			  $.mobile.changePage("#ConfirmLocation");
			}

			function onFileEntryComplete(fileEntry) {
				fileEntry.file(successFile, isFail);
				fileEntry.getMetadata(successMetadata, isFail);
			}

			function successMetadata(metadata) {
				$("#metadata").append("<p> LastModified:" + metadata.modificationTime + "</p> ");

			}

			function successFile(file) {
				$("#metadata").append("<p> Size:" + file.size + "bytes </p> <p> Type:" + file.type + " </p>");

			}

			function isFail() {
				alert("Error Occured");
			}

			function capturePhoto() {
				// Take picture using device camera and retrieve image
				navigator.camera.getPicture(photoCaptureSuccess, onFail, {
					destinationType : navigator.camera.DestinationType.FILE_URI,
					quality : 50
				});
				
			}

			function getPhoto(source) {
				// Retrieve image file location from specified source
				navigator.camera.getPicture(onPhotoURISuccess, onFail, {
					quality : 50,
					destinationType : destinationType.FILE_URI,
					sourceType : source
				});
			}

			function onFail(message) {
				alert('Failed because: ' + message);
			}

			function editDateOnClick(parent) {
				parent.scroller('show');
			}

			function editTimeOnClick(parent) {
				$('#editTime').scroller('show');
			}

			function save() {
				nickname = $("#nickName").val();
				date = $("#editDate").val();
				time = $("#editTime").val();
				loc= $("#editLocation").val();
				people=$("#editPeople").val().split(",");
				description=$("#editDiscription").val();
				if(loc!=""){
					adressToCoordinate(loc);
				}
				updateDB();
			}
			
			//This method load existing metadata to edit metadata page on page load
			$('#EditMetadata').live('pageshow', function () {
				$("#nickName").val(getNickname());
				$("#editDate").val(getDate());
				$("#editTime").val(getTime());
				$("#editLocation").val(getLocation());
				$("#editDiscription").val(getDescription());
				var people=getPeople();
				var s="";
				for (var i=0; i < people.length; i++) {
				  s=s+people[i]+',';
				};
				$("#editPeople").val(s);
			});
			
			$('#photoTag').live('pageshow', function () {
				$('#tagPicture').html('<img id="tagImage"/>');
				displayTagImage(uri) ;
				markTags(tagObjectsSaved);
			});
			
			function clearMetadata(){
			    $("#nickName").val("Not defined");
				$("#editDate").val("");
				$("#editTime").val("");
				$("#editLocation").val("");
				$("#editDiscription").val("");
				$("#editPeople").val("");
			}
        
        	function onMenuClick(){
        		$.mobile.changePage("#optionMenu");
        	}

		</script>
	</head>
	<body>
		<!-- Page Start-->
		<div id="main" data-role="page" data-theme="a">
			<!-- Page Header Start -->
			<div data-role="header" data-position="fixed">
				<h1>PhotArc Mobile</h1>
			</div>
			<!-- Page Header End -->
			<!-- Page Body Start -->
			<div id="a" data-role="content" align="justify">				
						
					<ul id="mainMenu" data-role="listview" data-theme="a" data-inset="false">
						<img id="largeImage"
						src="images/home.png"  />
						<li data-icon="arrow-r" id="captureButton">
							<a href="#" onclick="capturePhoto()">Capture Photo</a>
						</li>
						<li data-icon="arrow-r" id="galleryButton">
							<a href="#" onclick="getPhoto(pictureSource.PHOTOLIBRARY)">From Gallery</a>
						</li>
						<li data-icon="arrow-r" id="webAlbumButton">
							<a href="#webAlbum">Web Album</a>
						</li>
						<li data-icon="arrow-r" id="searchButton">
							<a href="#search_photoes">Search</a>
						</li>
						<li id="imageInfoButton" data-icon="arrow-r" style="display: none">
							<a href="#imageInfo" data-rel="dialog" >Image Info</a>
						</li>
						<li id="photoTagButton" data-icon="arrow-r" style="display: none">
							<a href="#photoTag">View tags</a>
						</li>
						<li id="editDataButton" data-icon="arrow-r" style="display: none">
							<a href="#EditMetadata">Edit image data</a>
						</li>
						<li id="deleteButton" data-icon="arrow-r" style="display: none" data-rel="dialog">
							<a href="#ConfirmDelete">Delete Photo</a>
						</li>
					</ul>
					
				<!-- This is not visible
				Used to store the uri for photoswipe -->
				<div id="slideshow" style="display: none;">
					<ul id="Gallery">
						<!-- To be added dynamically	 -->
					</ul>
				</div>

			</div>
			<!-- Page Body End -->
			<!-- Page Footer Start -->
			<div data-role="footer" data-position="fixed">
				<div id="toolbar_icons" style="text-align: center" >
					<a href="#" id="homeButton" data-role="button" data-icon="home" style="display: none" onclick="onHomeButtonClicked()">Home</a>
					<a href="#help" id="helpButton" data-role="button" data-icon="info" >Help</a>
				</div>
				
			</div>
			<!-- Page Footer End -->
		</div>

		<!-- Edit metadata page -->
		<div id="EditMetadata" data-role="page">
			<div data-role="header" data-position="fixed">
				<h1>Edit Metadata</h1>
			</div>

			<!-- Form Content -->
			<div data-role="content">

				<div data-role="fieldcontain">
					<label for="name"> Photo nick name: </label>
					<input type="text"
					id="nickName" value="" />
				</div>
				<div data-role="fieldcontain">
					<label for="name"> Date: </label>
					<input type="text" name="name"
					id="editDate" value="" onclick='editDateOnClick($("#editDate"))' />
				</div>
				<div data-role="fieldcontain">
					<label for="name"> Time: </label>
					<input type="text" name="name"
					id="editTime" value="" onclick='editTimeOnClick($("#editTime"))' />
				</div>
				<div data-role="fieldcontain">
					<label for="textarea"> Location </label>
					<input type="text" name="searchbox" id="editLocation" value="" />
				</div>
				<div data-role="fieldcontain">
					<label for="textarea"> People: </label>
					<textarea cols="40" rows="8" name="textarea" id="editPeople"></textarea>
					<a href="#ContactsPage" data-role="button" data-theme="a"  data-mini="true">Browse</a>
				</div>

				<div data-role="fieldcontain">
					<label for="textarea"> Discription </label>
					<textarea cols="40" rows="8" name="textarea" id="editDiscription"></textarea>
				</div>
			</div>
			<div data-role="footer" style="text-align: center">
				<a href="index.html" data-icon="check" onclick="save()">Save</a>
				<a href="index.html" data-icon="delete">Cancel</a>
			</div>
		</div>
		<!-- Page End -->

		<!-- Contacts List Page-->
		<div id="ContactsPage" data-role="page">
			<div data-role="header">
				<h1>Contacts</h1>
			</div>
			<div data-role="content">

				<ul id="allContacts" data-role="listview" data-filter="true" data-inset="true">

				</ul>
			</div>
		</div>
		<!-- Page End -->

		<!-- Confirm Delete Dialog-->
		<div id="ConfirmDelete" data-role="page">
			<div data-role="header">
				<h1>Confirm Delete</h1>
			</div>
			<div data-role="content">

				<p>
					Are you sure you want to delete this photo?
				</p>
				<a href="index.html"
				data-role="button" onclick="deleteFile()"
				data-theme="b">Delete</a>
				<a href="index.html"
				data-role="button"
				data-theme="b">Cancel</a>
			</div>
		</div>
		<!-- Page End -->
		<!-- User's Web Album -->
		<div id="webAlbum" data-role="page">
			<!-- Page Header Start -->
			<div data-role="header" data-position="fixed">
				<h1>PhotArc Mobile</h1>
			</div>
			<!-- Page Header End -->
			<!-- Content Start-->
				<!--Facebook Start-->
				<div data-role="fieldcontain" class="switch">
					<fieldset data-role="controlgroup">
						<label for="facebookSwitch">Facebook</label>
						<select name="facebookSwitch" id="facebookSwitch" data-theme="a" data-role="slider" data-mini="true">
							<option value="off" selected="true">
									Off
							</option>
							<option value="on">
									On
							</option>
						</select>
					</fieldset>
				</div>
				<div id="facebook"></div>
				<!--Facebook End-->
				<hr />
				<!--Picasa Begin-->
				<div data-role="fieldcontain" class="switch">
					<fieldset data-role="controlgroup">
						<label for="picasaSwitch">Picasa</label>
						<select name="picasaSwitch" id="picasaSwitch" data-theme="a" data-role="slider" data-mini="true">
							<option value="off" selected="true">
									Off
							</option>
							<option value="on">
									On
							</option>
						</select>
					</fieldset>
				</div>
				<div id="picasa"></div>
				<hr />
				<!--Picasa End-->
				<!--Flickr Begin-->
				<div data-role="fieldcontain" class="switch">
					<fieldset data-role="controlgroup">
						<label for="flickrSwitch">Flickr</label>
						<select name="flickrSwitch" id="flickrSwitch" data-theme="a" data-role="slider" data-mini="true">
							<option value="off" selected="true">
								Off
							</option>
							<option value="on">
								On
							</option>
						</select>
					</fieldset>
				</div>
				<div id="flickr"></div>
				<!--Flickr End-->
			<!-- Content End -->
			<!-- Page Footer Start -->
			<div data-role="footer" data-position="fixed" >
				<div id="toolbar_message" style="text-align: center">
					<a href="#" data-role="button" data-icon="search">Search</a>
				</div>
				<div id="toolbar_icons" style="display: none;text-align: center" >
					<a href="#EditMetadata" data-role="button" data-icon="plus" data-transition="flip">Edit Metadata</a>
					<a href="#" data-role="button" data-icon="search">Search</a>
					<a href="#ConfirmDelete" data-role="button" data-icon="delete" data-rel="dialog" data-transition="pop">Delete</a>
				</div>
			</div>
			<!-- Page Footer End -->
		</div>
	
	<!-- Search page -->
		<div id="search_photoes" data-role="page">
			<div data-role="header" data-position="fixed">
				<h1>Search Photos</h1>
			</div>
			<div data-role="content">
				<div data-role="fieldcontain">
					<label for="search"> Enter name: </label>
					<input type="text" name="search" id="searchName" value="" />
				</div>

				<p>
					Date:
				</p>
				<div data-role="fieldcontain">
					<label for="search">From:</label>
					<input type="text" name="search" id="searchStartDate" value="" onclick='editDateOnClick($("#searchStartDate"))'/>
					<label for="search">To:</label>
					<input type="text" name="search" id="searchEndDate" value="" onclick='editDateOnClick($("#searchEndDate"))'/>
				</div>

				<div data-role="fieldcontain">
					<label for="search"> Enter location: </label>
					<input type="text" name="search" id="searchLocation" value="" />
				</div>

				<div data-role="fieldcontain">
					<label for="textarea"> People (Separated by commas): </label>
					<textarea cols="40" rows="8" name="textarea" id="searchPeople"></textarea>
					<a href="#ContactsPage" data-role="button" data-theme="a"  data-mini="true">Browse</a>
				</div>

			</div>
			<div data-role="footer" data-position="fixed" style="text-align: center">
				<a href="#"
				data-role="button" data-mini="true" data-icon="search" onclick='doSearch()'>Search</a>
				<a href="#"
				data-role="button" data-rel="dialog" data-transition="pop" data-icon="grid" onclick="getPhoto(pictureSource.PHOTOLIBRARY)">Shaw all</a>
				<a href="index.html"
				data-role="button" data-mini="true"
				data-icon="back">Cancel</a>
			</div>
		</div>
		<!-- Page End -->
		
		<!-- Search Results page-->
		<div id="searchResults" data-role="page">
			<div data-role="header">
				<h1>Results</h1>
			</div>
			<div data-role="content">

				<div class="ui-grid-a" id="resultGallery" style="padding=5px !important">
					<!-- To be added dinamically -->
				</div>

			</div>
		</div>
		<!-- Page End -->
		
		<!-- Image Info page-->
		<div id="imageInfo" data-role="page">
			<div data-role="header">
				<h1>Image Info</h1>
			</div>
			<div data-role="content">				
				<div id="metadata">
					<p>Capture or open a photo to view data.</p>
				</div>
				<div id="infoControlls">
					<a href="#mapView"
					data-role="button" data-mini="true" data-icon="star" onclick=''>Show in Map</a>
				</div>
			</div>
		</div>
		<!-- Page End -->
		
		<!-- Confirm Location Dialog-->
		<div id="ConfirmLocation" data-role="dialog">
			<div data-role="header">
				<h1>Add location.</h1>
			</div>
			<div data-role="content">
				<p>
					Do you want to add current location to this photo?
				</p>
				<a href="#"
				data-role="button" onclick="addLocation()"
				data-theme="b">Yes</a>
				<a href="index.html"
				data-role="button"
				data-theme="b">No</a>
			</div>
		</div>
		<!-- Page End -->
		
		<!-- Map View-->
		<div id="mapView" data-role="page">
			<div data-role="header">
				<a href="index.html" data-icon="delete">Back</a>
				<h1>Map View</h1>
			</div>
			<div data-role="content">
				<div class="item rounded dark">					
					<div id="map_canvas" align="center"></div>
				</div>		
			</div>
		</div>
		<!-- Page End -->
		
		<!-- options menu page-->
		<div id="optionMenu" data-role="dialog">
			<div data-role="header">
				<h1>Menu</h1>
			</div>
			<div data-role="content">				
				<div id="options">
					<a href="#"
					data-role="button" data-mini="false" data-icon="grid" onclick='viewAllImages()'>View all photos</a>
					<a href="#mapView"
					data-role="button" data-mini="false" data-icon="grid" onclick=''>View all in map</a>
					<a href="#help"
					data-role="button" data-mini="false" data-icon="info" onclick=''>Help</a>
					<a href="#about"
					data-role="button" data-mini="false" data-icon="info" onclick=''>About</a>
					<a href="#"
					data-role="button" data-mini="false" data-icon="delete" onclick='navigator.app.exitApp()'>Exit</a>
				</div>
			</div>
		</div>
		<!-- Page End -->
		
		<!-- photo tag page-->
		<div id="photoTag" data-role="page" data-add-back-btn="true"  data-theme="a">
			<div data-role="header" >
				<h1>Tag Photo</h1>
			</div>
			<div data-role="content">
				<div id="tagPicture">
					<img id="tagImage"/>
				</div>
				<a href="#" id="enableTaggingButton"
				data-role="button" data-mini="false" data-icon="grid" onclick='enableTagging()'>Enable Tagging</a>
				<a href="#" id="saveTagsButton"
				data-role="button" data-mini="false" data-icon="grid" style="display: none" onclick='saveTags()'>Save tags</a>
				<a href="#" id="clearTagsButton"
				data-role="button" data-mini="false" data-icon="delete" style="display: none" onclick='clearTags()'>Clear tags</a>
				<a href="#" id="cancelTaggingButton"
				data-role="button" data-mini="false" data-icon="grid" style="display: none" onclick='enableTagging()'>Cancel</a>
				
			</div>
		</div>
		<!-- Page End -->
		
		<!-- help page-->
		<div id="help" data-role="page" data-add-back-btn="true"  data-theme="a">
			<div data-role="header" >
				<h1>Help</h1>
			</div>
			<div data-role="content">
				<ul>
					<li>To get started caputre a photo, open exsisting photo or go to web albums</li>
					<li>You can organize photoes by editing image related data and saving</li>
					<li>You can search photoes according to data you have added</li>
					<li>You can tag people in your photo by going to view tags section</li>
					<li>You can view a image full screen by tapping on it</li>
					<li>Deleting a photo through the application will delete the photo from phone memory too</li>
				</ul>
			</div>
		</div>
		<!-- Page End -->
		
		<!-- About page-->
		<div id="about" data-role="dialog" data-add-back-btn="true"  data-theme="a">
			<div data-role="header" >
				<h1>About</h1>
			</div>
			<div data-role="content" style="text-align:center">
				<p>A free and open source photo manager application for mobile devices.</p>
				<br/>
				<a  href="http://incubator.apache.org/photark/">Project home page</a>
				<br/>
				<p align="center">Apache Software foundation 2012</p>
			</div>
		</div>
		<!-- Page End -->
		

	</body>
</html>
