

/**
*
*  URL encode / decode
*  http://www.webtoolkit.info/
*
**/

var Url = {

	// public method for url encoding
	encode : function (string) {
		return escape(this._utf8_encode(string));
	},

	// public method for url decoding
	decode : function (string) {
		return this._utf8_decode(unescape(string));
	},

	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";

		for (var n = 0; n < string.length; n++) {

			var c = string.charCodeAt(n);

			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}

		}

		return utftext;
	},

	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;

		while ( i < utftext.length ) {

			c = utftext.charCodeAt(i);

			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}

		}

		return string;
	}

}

    var showProfilePhotoHelp = true;
	var canvasArray = new Array();
	var strFriendsList;
	var jsonTags;
	var intPhotoID;
	var intAlbumID;
	var mode;
	var intUserID;
	var boolKeyPress = 1;
	var intUseContainer = 1;
	var photo_base = '/gallery.php?url=';

	function charLength(node, length, max)
	{
		if(!node)
			return;
		if(!max)
			max = 800; // parseInt(node.getAttribute('max'));
		var cur = parseInt(("" + node.value).length);
		left = max - cur;
		if(cur > max)
		{
			node.value = node.value.substring(0,max);
			left = 0;
		}
		if(length)
			$('#' + length).html(left);
	}

	function $e(id)
	{
		return document.getElementById(id);
	}

	function selectValue(id,value)
	{
		if(!$e(id))
			return;
		var select = $e(id).getElementsByTagName('option');
		for(i=0;i<select.length;i++)
			if(select[i].value == value)
				select[i].selected = 'selected';
			else
				select[i].selected = null;
	}

	function getradiovalue(radioname)
	{
		if(!document.getElementsByName(radioname))
			return;
		var ids = document.getElementsByName(radioname);
		for(i=0;i<ids.length;i++)
			if(ids[i].checked)
				return ids[i].value;
		return 0;
	}

	function addHiddenInputField(formId, fieldName, id, fieldValue)
	{
	   formElement = document.getElementById(formId);
	   var inputElement = document.createElement("input");
	   inputElement.setAttributeNode(createHtmlAttribute("type", "hidden"));
	   inputElement.setAttributeNode(createHtmlAttribute("name", fieldName));
	   inputElement.setAttributeNode(createHtmlAttribute("value", fieldValue));
	   inputElement.setAttributeNode(createHtmlAttribute("id", id ));
	   formElement.appendChild(inputElement);
	}

	function createHtmlAttribute(name, value)
	{
	   var attribute = document.createAttribute(name)
	   attribute.nodeValue = value
	   return attribute
	}


	function submitAlbum()
	{

		if(parseInt(getradiovalue('albumtype')))
		{
			var fields = new Array('album');
			var status = validateObject(fields);
			return status;
		}
		else
		{
			var fields = new Array('albumname');
			var status = validateObject(fields);
			return status;
		}
	}
	/*********************************************************
	 Common Scripts Used For TAGGING Image
	 *********************************************************/

	function setCheckedValue(radioObj, id) {
		var radioLength = radioObj.length;
		if(radioLength == undefined) {
			radioObj.checked = (radioObj.id == id);
			return;
		}
		for(var i = 0; i < radioLength; i++) {
			radioObj[i].checked = false;

			if(radioObj[i].id == id) {
				radioObj[i].checked = true;
			}
		}
	}

	function removeTag(intTag, divTagList, ajax)
	{
		var strTagData = $('#tag' + intTag).val();
		$('#tag' + intTag).val('deleted=1&' + strTagData);
		$('#tagTitle' + intTag).remove();

		var tagDiv = document.getElementById(divTagList);
		if(tagDiv)
		{
			if(!ajax)
			{
				if(!tagDiv.getElementsByTagName('a').length)
				{
					if(mode != 'view' && mode != 'edit')
						tagDiv.innerHTML = '<span class="default">' + defaultTagText + '</span>';
					else if(mode == 'view')
						tagDiv.innerHTML = '<span class="title">Tagged: </span><span class="default">' + defaultTagText + '</span>';
				}
			}
		}
		$('#apply_box').show();
	}

	function checkHiddenRadio(){
		setCheckedValue(document.getElementsByName('arrFriends'),'hiddenRadio');
		document.getElementById('image-annotate-text').value = '';
	}

	function removePhoto(intPhotoDivID,mode)
	{
	 
		$('#photo' + intPhotoDivID).remove();
    $.gritter.add({
            	title: 'Successfully Deleted Photo',
            	text: 'Click "Apply changes" to finalize changes',
              image: 'js/grumble/themes/smoke/success.png' //check image
            });

		if(mode == 'profile_edit' || mode == 'normal_edit')
			$('#boolDeletedphoto' + intPhotoDivID).val('Y');
		else
			$('#strBigPic' + intPhotoDivID).val('');

		if($('.photoContainer').length == 0)
			$('#noEvents').show();
	}

	function defaultRadioClick(state, mode){
		if(mode == 'profile_edit' || mode == 'profile_upload')
		{
			$('#btnSubmit').val('Next Step (Crop Profile Thumbnail) >>');
			$('#skipCropping').show();
		}
	}
	/*************************************************************/

	/********************  JavaScript For Photo Paging **************************************/

	function forceReloadPage()
	{
		var url = window.location.href;
		if(url.indexOf('/' + intPhotoID + '/') != -1)
			location.reload();
		else
		{
			var pos = url.indexOf('url=');
			pos = url.indexOf('/', pos+1);
			pos = url.indexOf('/', pos+1);
			var pos1 = url.indexOf('/', pos+1);
			var id = url.substr(pos+1, (pos1 - pos - 1));
			if(parseInt(id))
				url = url.replace(id, intPhotoID);
			window.location = url;
		}
	}

	function reloadPage(direction, forceReload)
	{
		if(!forceReload)
		{
			if(intPhotosCount <= 1)
				return;
			if(boolTagging)
				return 'tag';
			if(direction == 'prev')
				intPhotoIndex--;
			else
			{
				if(direction == 'next')
					intPhotoIndex++;
				else
				{
					var rand_no = (new Date()).getTime() % intPhotosCount;
					if(rand_no == intPhotoIndex || rand_no == (intPhotosCount-1))
						intPhotoIndex++;
					else
						intPhotoIndex = rand_no;
				}
			}

			if(intPhotoIndex < 0)
				intPhotoIndex = intPhotosCount-1;
			else
			{
				if(intPhotoIndex == intPhotosCount)
					intPhotoIndex = 0;
			}
		}

		$('#loadingDiv').css('display', 'block');
		$.ajax({
			type: 'post',
			url: photo_base + 'album/photo_paging/' + intOwnerID + '/' + intAlbumID + '/' + intPhotoIndex + '/' + mode + '/' + pagingMode,
			data: null,
			success: photoLoaded
		});
	}

	function photoDeleted(data)
	{
		if(data == 'reload')
			if(intPhotosCount > 1)
				reloadPage('next');
			else
			{
				if(intAlbumID)
					window.location.href = photo_base + 'album/view/' + intAlbumID;
				else
					if(intOwnerID)
						window.location.href = photo_base + intOwnerID;
					else
						window.location.href = photo_base + intUserID;
			}
	}

	function deletePhoto(intAlbumID, intPhotoID)
	{
		var msgtxt ='Are you sure you want to delete this photo?';
      jConfirm(msgtxt, 'Delete Photo', function(r) {
              if(r){
          			$.ajax({
          				type: 'post',
          				url: photo_base + 'album/deletephoto/' + intAlbumID + '/' + intPhotoID,
          				data: null,
          				success: photoDeleted
          			});
              }
      });
	}

	var boolAutoEnableTagging = 0;
	function photoLoaded(data)
	{
		if(!data)
		{
			if(intAlbumID)
				window.location.href = photo_base + 'album/view/' + intAlbumID;
			else
				if(intOwnerID)
					window.location.href = photo_base + intOwnerID;
				else
					window.location.href = photo_base + intUserID;
			return;
		}
		var container = document.getElementById('photo-content' + intUseContainer);
		container.innerHTML = data;
		evaluateJs(container);

		container.style.display = 'block';
		$('#loadingDiv').css('height', container.offsetHeight);
		$('#loadingDiv').css('display', 'none');

		intUseContainer = (intUseContainer == 1?2:1);
		document.getElementById('photo-content' + intUseContainer).innerHTML = '';
		document.getElementById('photo-content' + intUseContainer).style.display = 'none';

		tb_init('a.thickbox, area.thickbox, input.thickbox');
		attachTitles();

		destLang = $.cookie('destLang'); //get previously translated language
		if(destLang){
			translateTo(destLang);
		}
		strFriendsList = $('#additionalControls').html();
		$('#additionalControls').remove();

		tagSinglePhoto(mode);

		$('#canvas0').click(function(e){
			var tag = 'tag';
			if(!boolTagging && mode == 'view')
				tag = reloadPage('next');
			if(tag == 'tag')
			{
				var x = (e.offsetX?e.offsetX:e.layerX);
				var y = (e.offsetY?e.offsetY:e.layerY);
				showAddTag(image, x, y, 0);
			}
		});

		if(mode == 'view')
		{
			$('#canvas0').css('cursor','pointer');
			$('#canvas0').attr('title','Click here to view next image');
		}
		else
		{
			$('#canvas0').css('cursor','crosshair');
			$('#canvas0').attr('title','Click on the faces to tag');
		}

		if(boolAutoEnableTagging)
		{
			enableTagging();
			boolAutoEnableTagging = 0;
		}
/*
		var url = window.location.href;
		var pos = url.indexOf('url=');
		pos = url.indexOf('/', pos+1);
		pos = url.indexOf('/', pos+1);
		var pos1 = url.indexOf('/', pos+1);
		var id = url.substr(pos+1, (pos1 - pos - 1));
		if(parseInt(id) && id != intPhotoID)
			window.location.hash = intPhotoID;
		else
			window.location.hash = '';
*/
	}

	function showAddTag(image, x, y, canvasIndex)
	{
		var co_ordinates = limitBoundBox(x, y, canvasIndex);
		//image.mode = 'view';
		clearAllAnnotations();
		canvasArray[canvasIndex].canvas.children('.image-annotate-edit').show();
		$('#image-annotate-edit-form' + canvasIndex).show();

		if(canvasArray[canvasIndex].editable)
			canvasArray[canvasIndex].editable.form.show;

		if(!image.editable)
		{
			$.fn.annotateImage.add(image);
			$.fn.areaMove(image.editable.area, image.editable.form, co_ordinates.x, co_ordinates.y);
		}
		else
		{
			if(image.state == 0)
			{
				$.fn.annotateImage.add(image);
				$.fn.areaMove(image.editable.area, image.editable.form, co_ordinates.x, co_ordinates.y);
			}
			else
			{
				$.fn.areaMove(image.editable.area, image.editable.form, co_ordinates.x, co_ordinates.y);
			}
		}
	}
/**************************************************************************************/
	function reportObject(intObjID, strObjType, intUserID){
		$.ajax({
		  type: 'post',
		  url: photo_base + 'album/report',
		  data: ({intObjID:intObjID, strObjType:strObjType, intUserID:intUserID}),
		  success: onReportObject
		});
	}

	function onReportObject(data, textStatus, XMLHttpRequest){
		var strObjType = 'Photo';
		if($('#report-li').html().indexOf('Album') != -1)
			strObjType = 'Album';

		if(data == 'success')
		{
			$('#report-li').html('<b>' + strObjType + ' Reported</b>');
		}
		if(data == 'duplicate')
			alert('You have already reported this ' + strObjType.toLower());
	}


	function removeTagsAjax(intUserID, intPhotoID){
		$.ajax({
		  type: 'post',
		  data:({ajax:'1', intUserID:intUserID, intPhotoID:intPhotoID}),
		  url: photo_base + 'album/removetags',
		  success: onRemoveTag
		});
	}

	function onRemoveTag(data){
		var arrMappedTags = new Array();
		if(data){
			var arrMappedTags = mapTagID();
			var arrTags = data.split(',');
			for(var i=0; i<arrTags.length;i++){
				for(y=0; y<arrMappedTags.length; y++){
					var intTagID = arrTags[i];
					if(arrMappedTags[y] == intTagID)
					{
						removeTag(y, "divTagList-0", true);
						$('#note-' + y).remove();
					}
				}
			}
		}
		else
			alert('You are not tagged in this photo.');
	}

	function mapTagID(){
		var arrArray = new Array();
		var arrFields = document.getElementsByName('photos[0][tags][]');
		for(var i=0 ;i<arrFields.length; i++){
			var index = arrFields[i].id.replace('tag','');
			arrArray[parseInt(index)] =  getIDfromTagURL(arrFields[i].value);
		}
		return arrArray;
	}

	function getIDfromTagURL(url){
		var arrParams = new Array();
		if(url) {
			var params = url.split('&');
			for(var i=0; i<params.length; i++){
			var arrTmp = params[i].split('=');
			if(arrTmp[0] == 'id')
				return arrTmp[1];
			}
		}
	}

/****************************************************************************************/

/********************* Script to enable tagging on single photo page *******************/

	function tagSinglePhoto(mode)
	{
//		jsonTags = document.getElementById('jsonTagsDiv').innerHTML;
		image1 = $("#toAnnotate").annotateImage({
			editable: true,
			useAjax:false,
			notes: jsonTags
		});
		canvasArray[0] = image1;
	}

	function showaddnote (img, area) {
		image1.mode = 'view';
		if((area.x1-area.x2) && (area.y1-area.y2))
		{
			$('#image-annotate-edit-form').remove();
			image1.annotateImage.add(image1,area);
		}
	}

	$.fn.onCancel = function(id){
		if(mode == 'view')
			disableTagging();
	}

	function setvalue(id){
		$('#image-annotate-text').val($('#' + id).attr('username'));
	}

	var duplicateTag = false;
	$.fn.onTagAdd = function(data, id) {
			var pos1 = data.indexOf('text=') + 5;
			var pos2 = data.indexOf('&', pos1);
			var tagTitle = data.substr(pos1, pos2-pos1);

			tagTitle = Url.decode(tagTitle);
			tagTitle = tagTitle.replace(/\+/g, " ");

			var profileURL = 'javascript: void(0);';
			if(tagTitle.indexOf('|||') != -1)
			{
				var tmp = tagTitle.split('|||');

				if(tmp[1])
					tagTitle = tmp[1];

				if(parseInt(tmp[0]))
				{
					profileURL = base + 'profilephp?id=' + tmp[0];
					data = data.replace(tmp[0] + '%7C%7C%7C', '');
				}
			}

			if(!id)
				id = 0;
			var divID = 'divTagList-' + id;

			duplicateTag = false;
			$("#" + divID + " span.b").each(function() {
				if($(this).html().indexOf(tagTitle) != -1)
					duplicateTag = true;
			});
			if(duplicateTag)
			{
				duplicateTag = false;
				return;
			}

			intTagID++;

			var fieldID = 'tag' + intPhotoID + intTagID;
			if(id)
				fieldID = 'tag' + intTagID;

			addHiddenInputField('form', 'photos[' + id + '][tags][]', fieldID, data);

			var intNoteID;
			if(jsonTags)
			 	intNoteID = (jsonTags.length + intTagID - 1);
			else
				intNoteID = 0;

			var strHTML = '<span class="b" id="tagTitle' + intTagID + '"><a href="' + profileURL + '" onmouseover="javascript:showTag(' + intNoteID + ');" onmouseout="javascript:hideTag(' + intNoteID + ');">' + tagTitle + '</a> <a class="remove" href="javascript:removeTag(' + intTagID + ', \'' + divID + '\');" style="display:inline;">(Remove)</a></span>';

			var tagDiv = document.getElementById(divID);

			if(tagDiv)
			{
				if($("#" + divID + " a").length)
					if(mode == 'view' || mode == 'edit')
						tagDiv.innerHTML += ', ' + strHTML;
					else
						tagDiv.innerHTML += strHTML;
				else
					if(mode == 'view' || mode == 'edit')
						tagDiv.innerHTML = '<span class="title">Tagged:</span> ' + strHTML;
					else
						tagDiv.innerHTML = strHTML;
			}
			$('#apply_box').show();
	}

	function limitBoundBox(x, y, canvasIndex)
	{
		var canvasHeight = $('#canvas' + canvasIndex).height();
		var canvasWidth = $('#canvas'  + canvasIndex).width();

		if((canvasWidth-x) < (tagWidth/2))
			x = canvasWidth - (tagWidth/2);

		if((canvasHeight-y) < (tagHeight/2))
			y = canvasHeight - (tagHeight/2);

		if(x < (tagWidth/2))
			x = (tagWidth/2);
		if(y < (tagHeight/2))
			y = (tagHeight/2);

		//Make the co-ordinate as center point
		x = x - (tagWidth/2);
		y = y - (tagHeight/2);
		return ({x:x, y:y});
	}

	function enableTagging()
	{
		try
		{
			if(intOwnerID == intUserID)
			{
				$('#albumSelectSpan').show();
				$('#albumCaptionInput').show();

				$("#albumID").resetSS();
				$('#albumLabelSpan').hide();
				$('#albumCaptionSpan').hide();
			}
		}
		catch(err)
		{

		}

		boolTagging =1;
		$('#apply_box').show();

		$('#canvas0').css('cursor','crosshair');
		if(($('#divTagList-0').children('span').length - $('#divTagList-0 .default').length) <= 1)
			$('#divTagList-0').html('<span class="title">Tagged: </span><span class="default">' + defaultTagText + '</span>');
		scrollWin();
		tagbox = ({height:100, width:100});

		$('.divTagList a.remove').css('display', 'inline');
		$('#editPhotoLink').hide();
		$('#cancelPhotoLink').show();
	}

	function disableTagging(){
		boolTagging =0;
		$('#apply_box').hide();
		$('#albumSelectSpan').hide();
		$('#albumCaptionInput').hide();

		$('#albumLabelSpan').show();
		$('#albumCaptionSpan').show();

		$('#canvas0').css('cursor','pointer');

		$('#divTagList-0').html($('#divTagListOriginal').html());

		if(image1.editable)
			image1.editable.destroy();
        image1.image.mode = 'view';

		$('.divTagList a.remove').css('display', 'none');
		$('#editPhotoLink').show();
		$('#cancelPhotoLink').hide();

		$('.image-annotate-area-editable').remove();
		$('input[type="hidden"][name="photos[0][tags][]"]').each(function() {
			if($(this).val().indexOf('id=new') != -1)
				$(this).remove();
		});
	}

	function scrollWin() {
		$('html, body').animate({
			scrollTop: 0
		}, 1000);
	}

	function photoNavigateOnKeyPressFn(event)
	{
		if(boolKeyPress == 1)
		{
			var e = (event.keyCode?event.keyCode:event.which);

			if (e == '37')
		  		reloadPage('prev');
			else if(e == '39')
				reloadPage('next');
/*
			if (event.keyCode == '37')
		  	{
		  		reloadPage('prev');
		  	}
			else if(event.keyCode == '39')
			{
				reloadPage('next');
			}
*/
		}
	}

	function photoNavigateOnKeyPress()
	{
		if ($.browser.mozilla)
			$(document).keypress(photoNavigateOnKeyPressFn);
		else
			$(document).keydown(photoNavigateOnKeyPressFn);
	}

	function albumNavigateOnKeyPressFn(event)
	{
		var e = (event.keyCode?event.keyCode:event.which);

		if (e == '37')
	  		$("#PaginationPhotos a.prev").click();
		else if(e == '39')
			$("#PaginationPhotos a.next").click();
	}

	function albumNavigateOnKeyPress()
	{
		if ($.browser.mozilla)
			$(document).keypress(albumNavigateOnKeyPressFn);
		else
			$(document).keydown(albumNavigateOnKeyPressFn);
	}


	function moveTagBox(x,y)
	{
		var of = $('#image-annotate-edit-form').offset();
		if(of != null)
			$('#image-annotate-edit-form').offset({top:y, left:x});
	}

	function clearAllAnnotations(){
		for(var i=0;i<canvasArray.length; i++)
			if(canvasArray[i])
			{
				canvasArray[i].canvas.children('.image-annotate-edit').hide();
				$('#image-annotate-edit-form' + i).hide();
			}

	}

	/*****************************************************************************************************/
	function selectRadioButtonLabel(id)
	{
		selectRadioButton(null, $('#default-' + id));
	}

	function selectRadioButton(e, node)
	{
		if(!node)
			node = this;

		var id = $(node).attr('id');
		if(id == 'existing' || id == 'newalbum')
		{
			$(node).attr('checked', 'checked');
			$(".radioButtonLabelSelected:not(:checked)").removeClass("radioButtonLabelSelected");
			$(node).next("label").addClass("radioButtonLabelSelected");
			return;
		}

		if($('#hiddenRadio').length)
		{
			var i = id.replace('default-', '');
			node = $("#default-" + i);

//			alert($(node).attr('checked'));
			$('.defaultToolTip').css('display', 'none');
			$('.hoverToolTip').css('display', 'none');

			if(!$("#default-" + i).attr("disabled"))
			{
				if($(node).attr('checked'))
				{
//					$(node).attr('checked', '');
					$('#hiddenRadio').attr('checked', 'checked');
					$('#intDefaultPhotoSelected').val(-1);

					$(".radioButtonLabelSelected:not(:checked)").removeClass("radioButtonLabelSelected");

					if(mode == 'profile_edit' || mode == 'profile_upload')
					{
						$('#skipCropping').hide();
						$('#btnSubmit').attr('value', 'Apply Changes');
						$('#form').attr('action', photo_base + 'album/save/dont_crop');
					}
				}
				else
				{
					$(node).attr('checked', 'checked');
					$('#intDefaultPhotoSelected').val($(node).val());

					$('#default-tooltip-' + i).css('display', '');

					$(".radioButtonLabelSelected:not(:checked)").removeClass("radioButtonLabelSelected");
					$(node).next("label").addClass("radioButtonLabelSelected");

					if(mode == 'profile_edit' || mode == 'profile_upload'){
						$('#skipCropping').show();
						$('#btnSubmit').attr('value', 'Next Step (Crop Profile Thumbnail)');
						$('#form').attr('action', photo_base + 'album/save/');
					}
				}
			}

//			alert(getradiovalue('photos[default]'));
//			alert($('#intDefaultPhotoSelected').val());
//			alert($(node).attr('checked'));
		}
	}

	function albumChanged(node)
	{
		if(!node)
			node = this;

		var i = this.id;
		i = i.replace('album-','');

		var intChangedAlbumID = intAlbumID;

		if($("#album-" + i).length)
			intChangedAlbumID = $("#album-" + i).val();

		if(intChangedAlbumID != intAlbumID)
		{
			$("#default-" + i).attr("disabled","disabled");
			$("#hiddenRadio").attr("checked", "checked");
			$(".radioButtonLabelSelected:not(:checked)").removeClass("radioButtonLabelSelected");
			if(mode == "profile_edit" || mode == "profile_upload")
			{
				$("#skipCropping").hide();
				$("#btnSubmit").attr("value", "Apply Changes");
			}
		}
		else
			$("#default-" + i).attr("disabled","");
	}

	function validateCreate()
	{
		var radioValue =parseInt( $('#createForm input:radio:checked').val());
		if(radioValue == 0 ){
			if($('#strAlbumName').val())
				return true;
			else{
				alert('Enter New Album Name');
				return false;
			}

		}
		else
		{
			if(parseInt($('#intAlbumID').val()))
				return true;
			else{
				alert('Select Existing Album Name');
				return false;
			}

		}
		return false;

	}

	/******************************PHOTO PAGING MODULE*******************************************/
    var photosCount = 0;
    var photos_cached = new Array();
    var loadingPhotosPage = -1;
    var boolShowAllPhotos = 0;

    function loadPhotos(page_index, pagesize, jq)
    {
    	if(loadingPhotosPage != -1)
    		return;

    	loadingPhotosPage = page_index;
		$.ajax({
			type: 'post',
			url: window.location.href,
			data: ({page_index:page_index, pagesize:pagesize, objType:'photo'}),
			success: function(data) {
				photos_cached[loadingPhotosPage] = eval(data);
				renderPhotos(loadingPhotosPage, $("#PaginationPhotos"));
				loadingPhotosPage = -1;
			}
		});
    }

    function renderPhotos(page_index, jq)
    {
    	var pagesize = 12;
    	if(this && this.items_per_page)
    		pagesize = this.items_per_page;

    	if(!photos_cached[page_index])
    	{
			loadPhotos(page_index, pagesize, jq);
			return;
    	}
    	var photos = photos_cached[page_index];

		objPagination = jq;
        // Get number of elements per pagionation page from form
        var strHtml,intStart;
        page_num = page_index;

        var max_elem = Math.min((page_index+1) * pagesize, photosCount);
        var newcontent = '';
        intStart = page_index*pagesize;
        var i=0, j=0;

        // Iterate through a selection of the content and build an HTML string
        for(i=0, j=intStart; j<max_elem; i++,j++)
        {
			newcontent += '<div class="album' + ((max_elem>6 && i<6)?' row1':'') + ((i%6) == 5 || i == (this.items_per_page-1)?' last':'') + '">'+ ((photos[i].userID==intUserID)?'<a class="editGray" href="' + photo_base + 'album/editphoto/' + photos[i].id  + '" >Edit Photo</a>':'') + '<div class="cover"><a href="' + photo_base + 'album/'+ ((boolTaggedPhotos==1)?'viewallTaggedphotos':((boolShowAllPhotos==1)?'viewallphotos':'viewphoto'))  + '/' + photos[i].id + '/' + intAlbumOwnerID + '" class="thumb" style="background-image: url(\'' + base + photos[i].smallPic + '\');" title="' + (photos[i].name?photos[i].name:(photos[i].albumName?photos[i].albumName:'')) + '" ></a></div><div class="info">' + photos[i].commentsCount + ' Comments</div></div>';
        }
        
       
        
              
                
        // Replace old content with new content
        $('#allPhotosContainer').html(newcontent);

        strHtml = '';
        if(photosCount<=this.items_per_page)
        	strHtml = ' ' + (photosCount) + ' Total Photos';
        else
        	strHtml = (intStart+1) + '-' + j + ' of ' + photosCount + ' Photos';
        $('#intPhotoCount').html(strHtml);
        $(".editGray").hide();
        $("div.profileAlbum").each(function() {
        	$(this).hover(function() {
        		$(this).addClass('album_on');
            $(this).find(".editGray").show();
        	}, function() {
        		$(this).removeClass('album_on');
            $(this).find(".editGray").hide();
        	});
        });
        $("div.album").each(function() {
        	$(this).hover(function() {
        		$(this).addClass('album_on');
            $(this).find(".editGray").show();
        	}, function() {
        		$(this).removeClass('album_on');
            $(this).find(".editGray").hide();
        	});
        });
        // Prevent click event propagation
        return false;
    }

    // When document has loaded, initialize pagination and form
    function initPhotoPaging()
    {
	    $(document).ready(function(){
		    // Create pagination element with options from form

	        var optInitPhotos = ({
	        	"items_per_page": 12,
	        	"num_display_entries": 4,
	        	"num_edge_entries": 1,
	        	"prev_text" :' ',
	        	"next_text" :' ',
	        	"callback": renderPhotos
	        });
	        $("#PaginationPhotos").pagination(photosCount, optInitPhotos);

	        albumNavigateOnKeyPress();
	    });
    }


	/******************************ALBUM PAGING MODULE*******************************************/
    var albumsCount = 0;
    var albums_cached = new Array();
    var loadingAlbumsPage = -1;
    var strTaggedAlbumCover;

    function loadAlbums(page_index, pagesize, jq)
    {
    	if(loadingAlbumsPage != -1)
    		return;

    	loadingAlbumsPage = page_index;
		$.ajax({
			type: 'post',
			url: window.location.href,
			data: ({page_index:page_index, pagesize:pagesize,objType:'album'}),
			success: function(data) {
				albums_cached[loadingAlbumsPage] = eval(data);
				renderAlbums(loadingAlbumsPage, $("#PaginationAlbums"));
				loadingAlbumsPage = -1;
			}
		});
    }

    function renderAlbums(page_index, jq)
    {
    	var pagesize = 5;
    	if(this && this.items_per_page)
    		pagesize = this.items_per_page;

    	if(!albums_cached[page_index])
    	{
			loadAlbums(page_index, pagesize, jq);
			return;
    	}
    	var albums = albums_cached[page_index];

		objPagination = jq;
        // Get number of elements per pagionation page from form
        var strHtml,intStart;
        page_num = page_index;

        var max_elem = Math.min((page_index+1) * pagesize, albumsCount);
        var newcontent = '';
        intStart = page_index*pagesize;
        var i=0, j=0;
        for(i=0, j=intStart; j<max_elem; i++,j++)
        {
        	if(albums[i].commentsCount = parseInt(albums[i].commentsCount));
        	else
        		albums[i].commentsCount = 0;

        	albums[i].name = (albums[i].name?albums[i].name:'');

			newcontent +='<div class="' + ((albums[i].isProfileAlbum==1)?'profileAlbum':'album') + ((i == (this.items_per_page -1))?' last':'') + '">'+ ((userRole=='owner' && albums[i].isTaggedAlbum!=1)?'<a class="editGray" href="' + photo_base + 'album/edit/' + albums[i].id + '"' + (albums[i].isProfileAlbum==1?' title="Edit this Album or Change Default Photo"':'') + '>Edit ' + ((albums[i].isProfileAlbum==1)?'':'') + ' Album</a>':'') +'<div class="cover"><a href="' + photo_base + 'album/'+((albums[i].isTaggedAlbum ==1)?'viewtagged/' + intOwnerID : 'view/' + albums[i].id) + '/'  + '" class="thumb" style="background-image: url(\'' + base + ((albums[i].isTaggedAlbum==1)?strTaggedAlbumCover:albums[i].defaultAlbumCover) + '\');" title="' + albums[i].name + '"></a></div><div class="title"><a href="'+ photo_base + 'album/'+((albums[i].isTaggedAlbum ==1)?'viewtagged/' + intOwnerID : 'view/' + albums[i].id) + '/'  + '" >' + albums[i].name + '</a></div><div class="info">' + albums[i].photosCount + ' Photos</div><div class="info">' + albums[i].commentsCount + ' Comments</div></div>';
        }

        if(userRole == 'owner' && showProfilePhotoHelp && albums[0] && albums[0].isProfileAlbum && albums[0].defaultAlbumCover == 'images/default_img_icon_70x70.png')
        {
       		$('#profilePhotoHelp').css('display', '');
        	if(albums[0].photosCount)
        	{
        		$('#profilePhotoHelp_choose').css('display', '');
        		$('#profilePhotoHelp_upload').css('display', 'none');
        	}
        	else
        	{
        		$('#profilePhotoHelp_choose').css('display', 'none');
        		$('#profilePhotoHelp_upload').css('display', '');
        	}
        }

        // Replace old content with new content
        $('#allAlbumsContainer').html(newcontent);

        strHtml = '';
        if(albumsCount<=this.items_per_page)
        	strHtml = ' ' + (albumsCount) + ' Total Albums';
        else
        	strHtml = (intStart+1) + '-' + j + ' of ' + albumsCount + ' Albums';
        $('#intAlbumCount').html(strHtml);

        $("div.album").each(function() {
        	$(this).hover(function() {
        		$(this).addClass('album_on');
        	}, function() {
        		$(this).removeClass('album_on');
        	});
        });
        // Prevent click event propagation
        return false;
    }

    // When document has loaded, initialize pagination and form
    function initAlbumPaging()
    {
	    $(document).ready(function(){
	        var optInitAlbums = ({
	        	"items_per_page": 5,
	        	"num_display_entries": 2,
	        	"num_edge_entries": 1,
	        	"prev_text" :' ',
	        	"next_text" :' ',
	        	"callback": renderAlbums
	        });
	        $("#Pagination").pagination(albumsCount, optInitAlbums);

	        albumNavigateOnKeyPress();
	    });
    }

	function updateComments(data)
	{
		$('#commentsContainer').append(data);
		if(data.length > 10)
			$('#commentsCount').html(parseInt($('#commentsCount').html())+1);
	}

	function replyPosted(data, textStatus, XMLHttpRequest){
		eval(data);
		$('#commentReply').remove();
	}

	$.fn.saveComment = function(type) {
		$.ajax({
			type: 'post',
			url: event_base + 'triyama/postComment',
			data: $('#' + (type?'replyForm':'frmComment')).serialize(),
			success: (type?replyPosted:updateComments)
		});
		$('#strComment').val('');
		$('#strReply').val('');
		$('#strComment').css('height', '35px');
		$('#strReply').css('height', '35px');
	}

	function deleteComment(type, id, parent)
	{
		$.ajax({
			type: 'post',
			url: event_base + 'triyama/deleteComment',
			data: ({strType:type, intCommentID:id, intParentID:parent}),
			success: function(data) {
				eval(data);
			}
		});
	}

	function showReplyBox(divID, intCommentID){
		$('#commentReply').remove();
		$('#' + divID).append(strReplyBox.replace('#intCommentID#',intCommentID));
		$('#intCommentID').val(intCommentID);
		$('#strReply').autogrow();
		$('#strReply').val('').focus();
	}
/*
	//jQuery transaltion
	function translateTo( destLang ){ //this can be declared in the global scope too if you need it somewhere else
    //$('#language_div_loading').show(1000);
				
    $('#translation').translateTextNodes( 'english', destLang, {   //translate from english to the selected language
		  not: '.jq-translate-ui',  //by default the generated element has this className
		  fromOriginal:true,   //always translate from english (even after the page has been translated)
		                      //unnecessary in v1.4, the default value is true
      start: function(){ $('#language_div_loading').show() },   // show loading icon
      complete: function(){ $('#language_div_loading').hide() },  // hide loading icon
		});
    
		$.cookie('destLang',destLang);
		$.post(photo_base + 'album/setLanguage/' + destLang + '/' + (intUserID?intUserID:0));
		$('#language_div').hide();
    //$('#language_div_loading').hide(2000);
				
  }
*/
	function showAllLang(){
		$('#language_div').toggle();
	}

	function initLanguages()
	{
		$(document).ready(function() {
			//$('body').css('height','800px');
      
			$.translate(function(){  //when the Google Language API is loaded
				//you can generate other controls as well, not just a dropdown:
				//there are new features in v1.4: http://code.google.com/p/jquery-translate/wiki/Extensions
        $.translate.ui('ul', 'li', 'span')
					.appendTo('#language_div')    //insert the element to the page
					.css({})
					.find('span')
					.css('cursor','pointer')
					.click(function() {   //when selecting another language

						//in v1.4 $(this).val() or $(this).attr("value")
						// is always the exact language code!
             
						translateTo($(this).text() );
            // set a cookie to remember the selected language
						// see: http://plugins.jquery.com/project/Cookie

						return false; //prevent default browser action
					});
				destLang = $.cookie('destLang'); //get previously translated language
				if( destLang )  //if it was set then
					translateTo( destLang );
          
			}); //end of Google Language API loaded
		}); //end of DOM ready
	}

	function evaluateJs(obj)
	{
		var scriptTags = obj.getElementsByTagName('script');
		var string = '';
		var jsCode = '';
		for(var no=0;no<scriptTags.length;no++){
			if(scriptTags[no].src){
		        var head = document.getElementsByTagName("head")[0];
		        var scriptObj = document.createElement("script");

		        scriptObj.setAttribute("type", "text/javascript");
		        scriptObj.setAttribute("src", scriptTags[no].src);
			}else{
				if(scriptTags[no].text && !scriptTags[no].innerHTML)
				{
					jsCode = jsCode + scriptTags[no].text + '\n';
				}
				else
					jsCode = jsCode + scriptTags[no].innerHTML;
			}
		}
		if(jsCode)
		{
			try{
			    if (!jsCode)
			        return;
	        	if(typeof(eval) != 'undefined')
	        		eval(jsCode);
		        else if (window.execScript){
		        	window.execScript(jsCode)
		        }else if(window.jQuery && jQuery.browser.safari){ // safari detection in jQuery
		            window.setTimeout(jsCode,0);
		        }else{
		            window.setTimeout(jsCode,0);
		        }
			}catch(e){
				alert('Error');
			}
		}
	}

	function makeDefaultAlbumPhoto(album, photo)
	{
		$.ajax({
			type: 'post',
			url: photo_base + 'ajax/default',
			data: ({intAlbumID:album, intPhotoID:photo}),
			success: function(data) {
				eval(data);
			}
		});
	}

/************************************* UPLOAD UTILITY FUNCTIONS ***********************************/
	var uploaderIndex = 0, submitOnComplete = 0, boolUploadComplete = 0, uploader_base;

	function initUploader()
	{
		$(document).ready(function() {
			uploader_base = base;
			if(window.location.href.indexOf('debug') != -1)
				$("#uploadify").uploadify({
					'uploader'		: uploader_base + 'js/uploadify.swf',
          'cancelImg'		: uploader_base + 'images/cancel.png',
					'script'		: photo_base + 'fileupload',
					'folder'		: uploader_base + 'upload',
					'fileDesc'		: 'Upload Photos',
					'fileExt'		: '*.jpg;*.jpeg;*.gif;*.png;*.bmp',
					'queueID'		: 'fileQueue',
					'multi'			: true,
					'auto'			: true,
					/*'buttonText'	: 'BROWSE',*/
					'displayData'	: 'percentage',
          'buttonImg' : uploader_base + 'images/browsebutton.jpg',
					'sizeLimit'		: 7340032,
					'simUploadLimit': 2,
					'onComplete'	: uploadSingleFinished,
					'onSelectOnce': setQueue,
					'onAllComplete': uploadQueueFinished,
					'onCancel': function(event, queueID, fileObj, data) {
						if(data.fileCount == 0)
							resetQueue();
					},
					'onError': function(event, queueID, fileObj, errorObj) {
						debug(fileObj);
						debug(errorObj);
					}
				});
			else
				$("#uploadify").uploadify({
					'uploader'		: uploader_base + 'js/uploadify.swf',
          'cancelImg'		: uploader_base + 'images/cancel.png',
					'script'		: photo_base + 'fileupload',
					'folder'		: uploader_base + 'upload',
					'fileDesc'		: 'Upload Photos',
					'fileExt'		: '*.jpg;*.jpeg;*.gif;*.png;*.bmp',
					'queueID'		: 'fileQueue',
					'multi'			: true,
					'auto'			: true,
					/*'buttonText'	: 'BROWSE',*/
					'displayData'	: 'percentage',
          'buttonImg' : uploader_base + 'images/browsebutton.jpg',
					'sizeLimit'		: 7340032,
					'simUploadLimit': 2,
					'onComplete'	: uploadSingleFinished,
					'onSelectOnce': setQueue,
					'onAllComplete': uploadQueueFinished,
					'onCancel': function(event, queueID, fileObj, data) {
						if(data.fileCount == 0)
							resetQueue();
					}
				});

			$('#fileQueue').html('<span class="subTitle" style="padding-left:3px;">Upload a Photo or Mulitple Photos</span><div><span class="info" style="padding-left:3px;">File size limit 7 MB. If your upload does not work, try a smaller picture. You can upload a JPG, GIF or PNG files.</span></div>');
		});
	}

	function startUpload(submit)
	{
		submitOnComplete = submit;
		$('#uploadify').uploadifyUpload();
		$('#uploadButtonText').html('');
		$('#uploadCompleteButtonText').html('Uploading Files...');
		$('#clearQButtonText').html('');
	}

	function resetQueue()
	{
		$('#uploadify').uploadifyClearQueue();
		$('#clearQButtonText').html('');
		$('#uploadButtonText').html('');
		$('#uploadCompleteButtonText').html((uploaderIndex?'Uploading Complete, proceed to next step':''));
	}

	function setQueue()
	{
		$('#uploadButtonText').html('Upload Files');
		$('#uploadCompleteButtonText').html('');
		$('#clearQButtonText').html('Clear Queue');
	}

	function uploadQueueFinished()
	{
		$('#uploadCompleteButtonText').html('Uploading Complete, proceed to next step');
		$('#uploadButtonText').html('');
		boolUploadComplete = 1;
		if(submitOnComplete)
			$('#form').submit();
	}

	function uploadSingleFinished (event, queueID, fileObj, response, data)
	{
		var path = response.split('|');
		addHiddenInputField('form','FILE[' + uploaderIndex + '][name]', '', fileObj.name );
		addHiddenInputField('form','FILE[' + uploaderIndex + '][bigPic]', '', path[0] );
		addHiddenInputField('form','FILE[' + uploaderIndex + '][tagPic]', '', path[1] );
		addHiddenInputField('form','FILE[' + uploaderIndex + '][smallPic]', '', path[2] );
		addHiddenInputField('form','FILE[' + uploaderIndex + '][size]', '', fileObj.size );
		addHiddenInputField('form','FILE[' + uploaderIndex + '][type]', '', fileObj.type );
		uploaderIndex++;
		$('#uploadify' + queueID + ' .cancel a').remove();
		return false;
	}

	function finishUpload()
	{
		if(!uploaderIndex && !$('#fileQueue .uploadifyQueueItem').length)
		{
			alert('You must upload at least one photo');
			return;
		}
		if(boolUploadComplete)
			$('#form').submit();
		else
			startUpload(1);
	}

	function skipCropping(){
		$('#form').attr('action', photo_base + 'album/save/dont_crop');
		$('#form').submit();
	}

	var boolNotesShowing = 'none';
	function showTag(id)
	{
		boolNotesShowing = $('.image-annotate-view').css('display');
		$('#note-' + id).css('display', 'block');
		$('.image-annotate-view').css('display', 'block');
	}

	function hideTag(id)
	{
		$('#note-' + id).css('display', 'none');
		$('.image-annotate-view').css('display', boolNotesShowing);
	}

	function fadeOutAndRemove(id)
	{
		$("#" + id).animate({opacity: 0.01}, 500, function() { $(this).remove(); });
	}

	function closePopupOnEsc(event)
	{
		var e = (event.keyCode?event.keyCode:event.which);
		if (e == '27')
		{
			if(self.parent && self.parent != self)
				self.parent.tb_remove();
			else
				self.tb_remove();
		}
	}

	function justCreateAnAlbum()
	{
		var name = $('#strAlbumName').val();
		if(name)
			window.location.href = photo_base + 'album/create_blank&name=' + escape(name);
		else
		{
			$('#strAlbumName').focus();
			alert('Please enter album name');
		}
	}