var $j = jQuery.noConflict();
$j(document).ready(function() {
	$j("#modal-upload").jqm({
		modal: true,
		overlay: 50
	});
	$j("a.trigger-open-uploads").click(function() {
		$j("#modal-upload").jqmShow();
	});
	$j("a.trigger-close-uploads").click(function() {
		notifyFlashUploadClose();
		$j("#modal-upload").jqmHide();
	})

	//loadMyPhotos();	
	
	$j("a#link-flickr-auth").click(function() {
		openAPIAuthWindow($j(this).attr("href"));
		return false;
	});
	$j("a#link-photobucket-auth").click(function() {
		openAPIAuthWindow($j(this).attr("href"));
		return false;
	});
	
	//AJAX
	//Set up Browse my Computer form
	$j("form#form-browse").ajaxForm({
		beforeSubmit: submitBrowseForm,
		success: submitBrowseFormAjaxSuccess,
		error: submitBrowseFormError,
		resetForm: true
	});
	
	//Set up Web URLs form
	$j("form#form-urls").ajaxForm({
		beforeSubmit: submitURLs,
		success: submitURLsAjaxSuccess,
		error: submitURLsError,
		resetForm: true
	});
	
	//Photo service search forms
	$j("form.form-search-api").each(function() {
		//$j(this).attr("style","background-color: red");
		$j(this).ajaxForm({
			beforeSubmit: searchPhotoAPI,
			success: searchPhotoAPIAjaxSuccess,
			error: searchPhotoAPIError,
			resetForm: false
		});
	});
	
	$j("#browse-flickr-photos .btn-add-photos").click(function() {
		if ($j(this).attr("class").indexOf("disabled") < 0) {
			addFlickrPhotos();
		}
	});
	$j("#browse-photobucket-photos .btn-add-photos").click(function() {
		if ($j(this).attr("class").indexOf("disabled") < 0) {
			addPhotobucketPhotos();
		}
	});
	
	//add new file-upload fields
	$j("#browse-my-computer .link-addmore a").click(addFileField);
	
	//add new web URL fields
	$j("#browse-web-urls .link-addmore a").click(addURLField);
	
	
	//top nav on uploader
	$j("#uploader-wrapper .nav a").click(function() {
		if ($j(this).attr("class").indexOf("active") < 0) {
			$j("#uploader-wrapper .nav a.active").removeClass("active");
			$j(".canvas").hide();
			$j("#" + $j(this).attr("rel")).show();
			$j(this).addClass("active");
		}
		if ($j(this).attr("rel").indexOf("photobucket") >= 0) {
			loadPhotobucket();	
		} else if ($j(this).attr("rel").indexOf("flickr") >= 0) {
			loadFlickr();
		}
	});
	
	//reset forms
	$j("form").resetForm();
	
	//Web URL input fields
	$j("#browse-web-urls .url-input input").focus(UrlInputFocus).blur(UrlInputBlur);
});

//keep track of which image we're removing, since it can't be passed through Ajax callbacks
var removePhotoID="";
//keep track of which service we're searching, since it can't be passed through Ajax callbacks
var searchingService="";

function searchPhotoAPI(formData, theForm, theOptions) {
	if (trim($j("input[name='query']", theForm).attr("value")).length > 0) {
		searchingService = $j("input.input-service-name", theForm).attr("value"); 
		return true;
	} else {
		return false;
	}
}
function searchPhotoAPIAjaxSuccess(responseText) {
	$j("#browse-" + searchingService + "-photos .ajax-load").html(responseText);
	var numResults = $j("#browse-" + searchingService + "-photos .ajax-load .thumb").length;
	if (numResults > 0) {
		$j("#browse-" + searchingService + "-photos .result-box .thumb img").click(thumbClick);
	} else {
		$j("#browse-" + searchingService + "-photos .ajax-load").html("No results");
	}
	return false;
}
function searchPhotoAPIError() {
	throwError("Could no search photos; Ajax request failed");	
}
function openAPIAuthWindow(theURL) {
	var APIAuthWindow = window.open(theURL, "APIAuthWindow", "width=890,height=600,menubar=no,toolbar=no,location=no,status=yes,resizable=yes,scrollbars=yes");
	APIAuthWindow.focus();
}
function thumbClick(e) {
	if (parseInt(navigator.appVersion)>3) {
		var evt = navigator.appName=="Netscape" ? e:event;
		
		if (navigator.appName=="Netscape" && parseInt(navigator.appVersion)==4) {
			// NETSCAPE 4 CODE
			var mString =(e.modifiers+32).toString(2).substring(3,6);
			shiftPressed=(mString.charAt(0)=="1");
		}else {
		// NEWER BROWSERS [CROSS-PLATFORM]
			shiftPressed=evt.shiftKey;
		}
	} else {
		shiftPressed = true;
	}
	if (! shiftPressed) {
		if ($j(this).attr("class").indexOf("selected") <= 0) {
			$j(".result-box .thumb img.selected").not(this).removeClass("selected");
		}
	} 
	$j(this).toggleClass("selected");
	if ($j(".result-box .thumb img.selected").length > 0) {
		$j(".btn-add-photos", $j(this).parents(".canvas")).removeClass("disabled");
	} else {
		$j(".btn-add-photos", $j(this).parents(".canvas")).addClass("disabled");
	}
}


function UrlInputFocus() {
	if ($j(this).attr("class").indexOf("gray") >= 0) $j(this).attr("value","").removeClass("gray");
}
function UrlInputBlur() {
	if ($j(this).attr("value").replace(" ","") == "") $j(this).attr("value","paste Web URL here").addClass("gray");
}
function loadMyPhotos() {
	$j.ajax({
		dataType: "html",
		url: urlMyPhotos,
		success: loadMyPhotosAjaxSuccess,
		error: loadMyPhotosError
	});
}
function loadMyPhotosError(XMLHttpRequest, textStatus, errorThrown) {
	$j(".myphotos-wrapper .ajax-load").html("Error getting data");
}
function loadMyPhotosAjaxSuccess(returnHTML) {
	if (trim(returnHTML)=="EMPTY") {
		$j("#myphotos-wrapper .ajax-load").html("");
	} else if (returnHTML.indexOf("ERROR:") >= 0) {
		throwError(trim(returnHTML.replace("ERROR:","")));
	} else {
		$j("#myphotos-wrapper .ajax-load").html(returnHTML);
		$j("#myphotos-wrapper .ajax-load a.remove").click(removePhotoClick);
	} 	
}
function removePhotoClick() {
	removePhotoID = $j(this).parent().attr("id");
	//$j("#myphotos-wrapper .ajax-load a.remove").addClass("disabled");
	$j.ajax({
		dataType: "html",
		url: urlRemovePhoto + removePhotoID,
		success: removePhotoClickAjaxSuccess,
		error: removePhotoClickError
	});
}
function removePhotoClickAjaxSuccess(responseText) {
	if (trim(responseText)=="OK") {
	    //$j("#myphotos-wrapper .ajax-load a.remove").removeClass("disabled");
		//removePhoto(removePhotoID);
		loadMyPhotos();
	} else {
		throwError("Could not remove photo; " + responseText);
	}
}
function removePhotoClickError() {
	throwError("Could not remove photo; Ajax request failed");
}
function removePhoto(photoID) {
	$j("#myphotos-wrapper #" + photoID).remove();	
}
function submitBrowseForm() {
	var validates = true;
	var totalFiles = 0;
	var errorText = "";
	document.getElementById("upload_button").disabled = true;
	document.getElementById("uploadanimation").style.display = "inline";	
	$j(".file-input input").each(function() {
		var fileExt;
		if ($j(this).attr("value").length > 0) {
			fileExt = getFileExt($j(this).attr("value"));
			if (fileExt != "jpg" && fileExt !="jpeg") {
				errorText = "Only .JPG or .JPEG files are allowed";
				validates = false;
			} else {
				totalFiles += 1;
			}
		}
	});
	if (validates && totalFiles == 0) {
		errorText = "No files were selected";
		validates = false;
	}
	
	if (! validates) {
		throwError(errorText);	
		document.getElementById("uploadanimation").style.display = "none";
    	document.getElementById("upload_button").disabled = false;		
		return false;
	} else {  
	    
		return true;
	}
}
function submitBrowseFormAjaxSuccess(responseHTML) {
	loadMyPhotosAjaxSuccess(responseHTML);	
	document.getElementById("uploadanimation").style.display = "none";
	document.getElementById("upload_button").disabled = false;
	checkUploadErrors();
}

function checkUploadErrors()
{
    $j.ajax({
		dataType: "html",
		url: urlGetUploadError,
		success: loadErrorMessage,
		error: function(XMLHttpRequest, textStatus, errorThrown) {
			throwError("Unable to get upload errors");
		}
	});
}

function loadErrorMessage(returnText){
 
    if (returnText !='')
    {
        var temp = returnText;
        i = temp.search(/newline/i);
       
        if( i >  0)
        {

           while (i>0)
           {
                temp1= temp.replace(/newline/i,"\n");
                temp = temp1;
                i = temp.search(/newline/i);
           }
           alert(temp1);
        }
    }
}


function submitBrowseFormError(XMLHttpRequest, textStatus, errorThrown) {
	throwError("Unable to submit files; Ajax form submit failed");
}

function submitURLs() {
	var validates = true;
	var totalUrls = 0;
	var errorText = "";
	$j(".url-input input").each(function() {
		$j(this).blur().addClass("gray");
		var fieldVal = $j(this).attr("value");
		if (fieldVal != "paste Web URL here") {
			if (fieldVal.indexOf("http://")!=0 && fieldVal.indexOf("https://")!=0) {
				errorText = "Addresses must start with 'http://' or 'https://'";
				validates = false;
			} else {
				totalUrls += 1;
			}
		}
	});
	if (validates && totalUrls == 0) {
		errorText = "No URLs were entered";
		validates = false;
	}
	if (! validates) {
		throwError(errorText);
		return false;
	} else {
		$j(".url-input input[value='paste Web URL here']").attr("value","");
		return true;
	}
}

function submitURLsAjaxSuccess(responseHTML) {
	loadMyPhotosAjaxSuccess(responseHTML);
}
function submitURLsError(XMLHttpRequest, textStatus, errorThrown) {
	throwError("Unable to add Web URLs; Ajax form-submit failed.");
}


function addFileField() {
	//count the current number of fields
	var numFields = $j("#browse-my-computer .file-input").length
	var newField = $j("#browse-my-computer .file-input").eq(0).clone();
	newField.html(newField.html().replace("file1", "file" + (numFields+1)));
	newField.insertAfter("#browse-my-computer .file-input:last");
	if (numFields == 6) {
		$j("#browse-my-computer .link-addmore").hide();
	}
}
function addURLField() {
	//count the current number of fields
	var numFields = $j("#browse-web-urls .url-input").length
	var newField = $j("#browse-web-urls .url-input").eq(0).clone();
	newField.html(newField.html().replace("url1", "url" + (numFields+1)));
	$j("input", newField).attr("value", "paste Web URL here").addClass("gray").focus(UrlInputFocus).blur(UrlInputBlur);
	newField.insertAfter("#browse-web-urls .url-input:last");
	if (numFields == 8) {
		$j("#browse-web-urls .link-addmore").hide();
	}
}
function notifyFlashUploadClose() {
	//alert("This function notifies flash that the Upload overlay has closed.	");
	NotifyFlashUploadIsDone();
}
//============ FLICKR Functions ==================
function loadFlickr() {
	debug("loadFlickr");
	flickrGetAuthStatus();
}
function loadFlickrInfo() {
	debug("loadFlickrInfo");
	$j(".canvas").hide();
	$j("#browse-flickr-info").show();
}
function flickrGetAuthStatus() {
	debug("flickrGetAuthStatus");
	$j.ajax({
		dataType: "html",
		url: urlFlickrAuthStatus,
		success: flickrGetAuthStatusAjaxSuccess,
		error: flickrGetAuthStatusError
	});
}
function flickrGetAuthStatusAjaxSuccess(responseHTML) {
	debug("flickrGetAuthStatusAjaxSuccess")
	var responseText = trim(responseHTML);
	if (responseText == "OK") {
		loadFlickrPhotosets();	
	} else if(responseText.indexOf("ERROR:") >= 0) {
		throwError(trim(responseText.replace("ERROR:","")));
		loadFlickrInfo();
	} else {
		loadFlickrInfo();
	}
}
function notifyFlickrAuth(success) {
	if (success) {
		flickrGetAuthStatus();
	} else {
		alert("Flickr authentication failed");	
	}
}
function flickrGetAuthStatusError(XMLHttpRequest, textStatus, errorThrown) {
	debug("flickrGetAuthStatusError");
	throwError("Could not get Flickr authentication status; Ajax request failed;");
	loadFlickrInfo();
}
function loadFlickrPhotosets() {
	debug("loadFlickrPhotosets");
	$j.ajax({
		dataType: "html",
		url: urlGetFlickrPhotosets,
		success: loadFlickrPhotosetsAjaxSuccess,
		error: loadFlickrPhotosetsError
	});
	
}
function loadFlickrPhotosetsAjaxSuccess(responseHTML) {
	debug("loadFlickrPhotosetsAjaxSuccess");
	$j(".canvas").hide();
	$j("#browse-flickr-photosets .ajax-load").html(responseHTML);
	if ($j("#browse-flickr-photosets .ajax-load ul.photosets li").length == 1) {
		photosetID = $j("#browse-flickr-photosets .ajax-load ul.photosets li").attr("id");
		loadFlickrPhotos(photosetID);
	} else {
		$j("#browse-flickr-photosets .ajax-load ul.photosets li a").click(flickrPhotosetClick);
		$j("#browse-flickr-photosets").show();
	}
	
}
function flickrPhotosetClick() {
	//alert("flickrPhotosetClick");
	//alert("loadFlickrPhotos(" + $j(this).parent().attr("id") + ")");
	loadFlickrPhotos($j(this).parent().attr("id"));	
}
function loadFlickrPhotosetsError() {
	//debug("loadFlickrPhotosetsError	");
	throwError("There was an error loading photosets; Ajax request failed");
	$j(".canvas").hide();
}
function loadFlickrPhotos(photosetID) {
	$j.ajax({
		dataType: "html",
		url: urlGetFlickrPhotos + photosetID,
		success: loadFlickrPhotosAjaxSuccess,
		error: loadFlickrPhotosError
	});
}
function loadFlickrPhotosAjaxSuccess(responseHTML) {
	//alert("load-photos-ajaxsuccess");
	if (responseHTML.indexOf("ERROR:")  && responseHTML.indexOf("no_photos_in_album") > 0) {
		throwError("There are no photos in the selected album");
		loadFlickrPhotosets();
	} else {
		//alert(responseHTML);
		$j(".canvas").hide();
		$j("#browse-flickr-photos .ajax-load").html(responseHTML)
		$j("#browse-flickr-photos").show();
		$j(".result-box .thumb img").click(thumbClick);
	}
}
function loadFlickrPhotosError(XMLHttpRequest, textStatus, errorThrown) {
	throwError("There was an error loading photos; Ajax request failed");
	loadFlickrPhotosets();
}

function addFlickrPhotos() {
	var selectedPhotoSet = $j(".result-box .thumb img.selected");
	if (selectedPhotoSet.length > 0) {
		var sURL = urlAddFlickrPhotos;
		selectedPhotoSet.each(function() {
			sURL += "&" + paramAddAPIPhotoItem + "=" + $j(this).attr("id");
		});
		$j.ajax({
			url: sURL,
			success: addFlickrPhotosAjaxSuccess,
			error: addFlickrPhotosError
		});
	}
}
function addFlickrPhotosAjaxSuccess(serverResponse) {
	if (serverResponse.indexOf("ERROR:") >= 0) {
		throwError(serverResponse);
	} else {
		loadMyPhotosAjaxSuccess(serverResponse);	
	}
}
function addFlickrPhotosError() {
	throwError("Unable to add photos; Ajax request failed");	
}

//================= PHOTOBUCKET FUNCTIONS =============

function loadPhotobucket() {
	debug("loadPhotobucket");
	photobucketGetAuthStatus();
}
function loadPhotobucketInfo() {
	debug("loadPhotobucketInfo");
	$j(".canvas").hide();
	$j("#browse-photobucket-info").show();
}
function photobucketGetAuthStatus() {
	debug("photobucketGetAuthStatus");
	$j.ajax({
		dataType: "html",
		url: urlPhotobucketAuthStatus,
		success: photobucketGetAuthStatusAjaxSuccess,
		error: photobucketGetAuthStatusError
	});
}
function photobucketGetAuthStatusAjaxSuccess(responseHTML) {
	debug("photobucketGetAuthStatusAjaxSuccess")
	var responseText = trim(responseHTML);
	if (responseText == "OK") {
		loadPhotobucketPhotosets();	
	} else if(responseText.indexOf("ERROR:") >= 0) {
		throwError(trim(responseText.replace("ERROR:","")));
		loadPhotobucketInfo();
	} else {
		loadPhotobucketInfo();
	}
}
function notifyPhotobucketAuth(success) {
	if (success) {
		photobucketGetAuthStatus();
	} else {
		alert("Photobucket authentication failed");	
	}
}
function photobucketGetAuthStatusError(XMLHttpRequest, textStatus, errorThrown) {
	debug("photobucketGetAuthStatusError");
	throwError("Could not get Photobucket authentication status; Ajax request failed;");
	loadPhotobucketInfo();
}
function loadPhotobucketPhotosets() {
	debug("loadPhotobucketPhotosets");
	$j.ajax({
		dataType: "html",
		url: urlGetPhotobucketPhotosets,
		success: loadPhotobucketPhotosetsAjaxSuccess,
		error: loadPhotobucketPhotosetsError
	});
	
}
function loadPhotobucketPhotosetsAjaxSuccess(responseHTML) {
	debug("loadPhotobucketPhotosetsAjaxSuccess");
	$j(".canvas").hide();
	$j("#browse-photobucket-photosets .ajax-load").html(responseHTML);
	if ($j("#browse-photobucket-photosets .ajax-load ul.photosets li").length == 1) {
		photosetID = $j("#browse-photobucket-photosets .ajax-load ul.photosets li").attr("id");
		loadPhotobucketPhotos(photosetID);
	} else {
		$j("#browse-photobucket-photosets .ajax-load ul.photosets li a").click(photobucketPhotosetClick);
		$j("#browse-photobucket-photosets").show();
	}
	
}
function photobucketPhotosetClick() {
	//alert("photobucketPhotosetClick");
	//alert("loadPhotobucketPhotos(" + $j(this).parent().attr("id") + ")");
	loadPhotobucketPhotos($j(this).parent().attr("id"));	
}
function loadPhotobucketPhotosetsError() {
	//debug("loadPhotobucketPhotosetsError	");
	throwError("There was an error loading photosets; Ajax request failed");
	$j(".canvas").hide();
}
function loadPhotobucketPhotos(photosetID) {
	$j.ajax({
		dataType: "html",
		url: urlGetPhotobucketPhotos + photosetID,
		success: loadPhotobucketPhotosAjaxSuccess,
		error: loadPhotobucketPhotosError
	});
}
function loadPhotobucketPhotosAjaxSuccess(responseHTML) {
	//alert("load-photos-ajaxsuccess");
	if (responseHTML.indexOf("ERROR:")  && responseHTML.indexOf("no_photos_in_album") > 0) {
		throwError("There are no photos in the selected album");
		loadPhotobucketPhotosets();
	} else {
		//alert(responseHTML);
		$j(".canvas").hide();
		$j("#browse-photobucket-photos .ajax-load").html(responseHTML)
		$j("#browse-photobucket-photos").show();
		$j(".result-box .thumb img").click(thumbClick);
	}
}
function loadPhotobucketPhotosError(XMLHttpRequest, textStatus, errorThrown) {
	throwError("There was an error loading photos; Ajax request failed");
	loadPhotobucketPhotosets();
}

function addPhotobucketPhotos() {
	var selectedPhotoSet = $j(".result-box .thumb img.selected");
	if (selectedPhotoSet.length > 0) {
		var sURL = urlAddPhotobucketPhotos;
		selectedPhotoSet.each(function() {
			sURL += "&" + paramAddAPIPhotoItem + "=" + $j(this).attr("id");
		});
		$j.ajax({
			url: sURL,
			success: addPhotobucketPhotosAjaxSuccess,
			error: addPhotobucketPhotosError
		});
	}
}
function addPhotobucketPhotosAjaxSuccess(serverResponse) {
	if (serverResponse.indexOf("ERROR:") >= 0) {
		throwError(serverResponse);
	} else {
		loadMyPhotosAjaxSuccess(serverResponse);	
	}
}
function addPhotobucketPhotosError() {
	throwError("Unable to add photos; Ajax request failed");	
}