var geocoder = '';
var map = '';
var addMarker = new Array();
var addMarkerTimer = 0;
var timer = new Array();
var queryLimit = 0;
var queryLimitErrorShown = 0;
var infoWindow = new Array();

function submitPending()
{
    var approved = document.getElementById('pendingForm').approved;
    var denied = document.getElementById('pendingForm').denied;
    var approvedSave = document.getElementById('pendingAccepted');
    var deniedSave = document.getElementById('pendingDenied');
    var msg = '';

    
    for ( param in approved) {
    	if ( isNaN(param) ) {
    		if ( undefined != approved.value && approved.checked) {
    			approvedSave.value += ','+approved.value;
    		}
    		break;
    	} else {
	        if ( approved[param].checked ) {
	            approvedSave.value += ','+approved[param].value;
	        }
    	}
    }

    approvedSave.value += ',';
    
    for ( param in denied) {    	
    	if ( isNaN(param) ) {
    		if ( undefined != denied.value && denied.checked) {
    			deniedSave.value += ','+denied.value;
    		}
    		break;
    	} else {
	        if ( denied[param].checked ) {
	            deniedSave.value += ','+denied[param].value;
	        }
    	} 
    }
    
    if ( msg.length > 0 ) {
        alert(msg);
    } else {
    	document.getElementById('pendingForm').submit();
    }
    
}

function validateForgottenPasswordForm()
{
	var msg = '';
	msg += verifyEmail(document.getElementById('forgotten_password_email'),0)
	if ( 0 === msg.length ) {
		document.getElementById('forgotten_password').submit();
	} else {
		alert(msg);
	}
}

function verifyEmail(fieldObject, directAlert)
{
	var msg = '';
	
	if ( !isEmailValid(fieldObject.value) ) {
		msg += 'Please enter a valid email address.';
		fieldObject.focus();
	}
	
	if ( 0 === directAlert ) {
		return msg;
	} else {
		if ( 0 !== msg.length ) {
			alert(msg);
		}	
	}
}

function verifyResetPasswords()
{
	var password = document.getElementById('forgotten_password_password');
	var verify = document.getElementById('forgotten_password_password_verify');
	var msg = '';
	var msg_password = verifyPassword(password, 0);
	var msg_verify = '';
	var match = 1;
	
	if ( password.value !== verify.value ) {
		msg += 'Passwords do not match.\n';
		match = 0;
	}
	
	if ( 0 < msg_password.length ) {		
		msg += '\nPassword field has the following failures:\n' + msg_password;
		password.focus();
	}
	
	if ( 0 === match ) {
		msg_verify = verifyPassword(verify, 0);
		if ( 0 < msg_verify.length ) {		
			msg += '\nVerify field has the following failures:\n' + msg_password;
		}
	}
	
	if ( 0 === msg.length ) {
		document.getElementById('forgotten_password').submit();
	} else {
		alert(msg);
	}
	
	
	
}

function verifyPassword(fieldObject, directAlert)
{
	var msg = validatePassword(fieldObject.value);
		
	if ( 0 === directAlert ) {
		return msg;
	} else {
		if ( 0 !== msg.length ) {
			alert(msg);
			fieldObject.focus();
		}	
	}
}

function validatePassword(password)
{
	// Required minimum length
	var minimumLength = 6;
	var msg = '';
	if ( minimumLength > password.length ) {
		msg += '\tMust be at least ' + minimumLength + ' characters long\n';
	}
	
	if ( 0 < msg.length ) {
		return 'Password requires the following:\n' + msg;
	} else {
		return msg;
	}
	
}

function isEmailValid(email)
{
	var regExEmail = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
	return regExEmail.test(email);
}

function codeAddress(address, miniview, rent, listing_id, Pa, Qa) {
    var marker = '';
    var count = 0;
    var isValid = true;
    var myLatlng = '';

    infoWindow[listing_id] = new InfoBubble({
        map: map,
        content: miniview,
        /*position: new google.maps.LatLng(-35, 151),*/
        shadowStyle: 1,
        padding: 0,
        backgroundColor: 'rgb(57,57,57)',
        borderRadius: 20,
        /*arrowSize: 10,*/
        borderWidth: 1,
        borderColor: '#e1e1e1',
        disableAutoPan: true,
        hideCloseButton: true,
        arrowPosition: 30,
        maxWidth: 400,
        maxHeight: 200,
        minWidth: 315,
        minHeight: 120
        /*backgroundClassName: 'phoney',*/
        /*arrowStyle: 2*/
      });

    var image = './images/mapMarker'+rent+'.png';
    if ( undefined === Pa ||
            null === Pa ||
            '' == Pa ||
            undefined == Qa ||
            null === Qa ||
            '' == Qa ) {
    	queryLimit++;
    	if ( queryLimit < 10 ) {
            geocoder.geocode( { 'address': address}, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {

                marker = new google.maps.Marker({
                    map: map,
                    icon: image,
                    position: results[0].geometry.location
                });

                google.maps.event.addListener(marker, 'click', function() {
                    infowindow.open(map,marker);
                });

                count = addMarker.length;
                addMarker[count] = new Array();
                addMarker[count]['listing_id'] = listing_id;
                addMarker[count]['Pa'] = results[0].geometry.location.Pa;
                addMarker[count]['Qa'] = results[0].geometry.location.Qa;

                google.maps.event.addListener(marker, 'click', function() {
                    loadInfoWindow(listing_id, marker);
                });

              } else {
                alert("Geocode was not successful for the following reason: " + status);
              }
            });
    	} else {
        	if ( queryLimitErrorShown == 0 ) {
        		   alert('Over Geocode Query limit, please refresh the pages');
        		   queryLimitErrorShown = 1;
        	}
    	}
    } else {
        myLatlng = new google.maps.LatLng(Pa, Qa);
        marker = new google.maps.Marker({
            map: map,
            icon: image,
            position: myLatlng
        });

        google.maps.event.addListener(marker, 'click', function() {
            loadInfoWindow(listing_id, marker);
        });
    }
}

function loadInfoWindow(listing_id,marker) {
    for ( listing_id1 in infoWindow ) {
        try {
        	   infoWindow[listing_id1].close();
        } catch (e) {}
    }
    infoWindow[listing_id].open(map,marker);
}

function addAllMarkers(position)
{
    position = (!position)?0:position;
    if ( position < addMarker.length ) {
        if ( addMarker[position]['listing_id'] != 0 ) {
            jQuery.get("./services/addMarker.php", { "listing_id": addMarker[position]['listing_id'], "Pa": addMarker[position]['Pa'], "Qa": addMarker[position]['Qa'] })
                .complete(function() {});
            addMarker[position]['listing_id'] = 0;
        }
        addAllMarkers(++position);
    }

}

function deleteListing(id)
{
    if ( confirm('Please verify that you wish to delete this listing.\nDeleting this listing cannot be undone!') ) {
        window.location.href='deleteListing.php?id='+id;
    }
}

function replaceSlideImage(key)
{
	var image = getImgByKey(key);
	var html = '';
	var title = '';
	var formTag = '<form enctype="multipart/form-data"  action="./services/photo.php?mode=upload" method="post" id="form_upload" onsubmit="uploadImage(this) return false;">'
			+ '<input type="hidden" name="key" value="' + key + '" />' 
			+ '<input type="hidden" name="listings_id" value="' + document.getElementById('edit_form_id').value + '" />' ;
	
	if ( '' == image ) {
		title = 'Upload new image';
		html += '<p>Select an image to upload.</p>'
			+ formTag
			+ '<label for="upload_image_' + key + '_replacement">&nbsp;</label><input type="file" name="replacement" id="upload_image_' + key + '_replacement" /><br /><br />' 
			+ '<div id="submitlocation"><label for="upload_image_submission">&nbsp;</label><input type="button" onclick="uploadImage(\'form_upload\');" value="Upload Image" id="upload_image_submission" /></div>';
	} else {
		title = 'Replace image';
		html = '<p><img src="'+image+'" alt="Delete" /></p>';
	
		html += '<p>Select an image with which to replace the above.</p>'
			+ formTag
			+ '<label for="upload_image_' + key + '_replacement">&nbsp;</label><input type="file" name="replacement" id="upload_image_' + key + '_replacement" /><br /><br />' 
			+ '<div id="submitlocation"><label for="upload_image_submission">&nbsp;</label><input type="button" onclick="uploadImage(\'form_upload\');" value="Replace Image" id="upload_image_submission" /></div>';
	}
	html += '&nbsp;<input type="button" onclick="closeModal(); return false;" value="Cancel" />'
			+ '</form>';
	openModal(title, html);
}

function uploadImage(form_id)
{

	var iFrames = document.getElementsByTagName('IFRAME');
	var iFrameCount = (iFrames.length+1);

	var formObject = document.getElementById(form_id);
	// Creates a name for the iframe
	var iFrameID  = 'iFrameUpload_'+iFrameCount;
	var iFrameClass = "upload_iFrame";
	// Creates a div in javascript
	var iframeDiv	= document.createElement('div');
	iframeDiv.className = iFrameClass;
	// Creating invisibile iframe to the div created in JavaScript
	iframeDiv.innerHTML = '<iframe style="display:none;" src="about:blank" id="'+iFrameID+'" name="'+iFrameID+'" onload="uploadImageComplete(\''+iFrameID+'\');"></iframe>';
	// Add iframe to page
	document.body.appendChild(iframeDiv);
	// Change target of the form to the new iframe
	formObject.setAttribute('target', iFrameID);
	//formObject.setAttribute('target', '_blank');
	
	document.getElementById('submitlocation').innerHTML = '<img src="./images/spinner.gif" alt="Please wait, picture is uploading" />';
	
	// Submit form to iframe
	formObject.submit();
	
}
var timer = new Array();
function uploadImageComplete(iFrameDivId)
{
	var iframeObject = document.getElementById(iFrameDivId);
	var arrBody = new Array();
	var docObject = '';
	var currentDate = new Date();

	// Basically checks for the ways different browsers will check the content of an iframe.
	if (iframeObject.contentWindow) {
	    arrBody = iframeObject.contentWindow.document.getElementsByTagName('body');
		docObject = arrBody[0];
	} else if (iframeObject.contentDocument) {
		docObject = iframeObject.contentDocument;
	} else {
	    docObject = window.frames[iframeName].document;
	}
	if ( -1 == docObject.innerHTML.indexOf('|') ) {
		timer[iFrameDivId] = setTimeout('uploadImageComplete(\''+iFrameDivId+'\')',250);
	} else {
		clearTimeout(timer[iFrameDivId]);
		var returnedContents = docObject.innerHTML.split('|');
		
		if ( '' == returnedContents[1] && '' != returnedContents[2] ) {
			alert(returnedContents[2]);
		} else {
			var passedBackFileName = returnedContents[1];
			
			var key = returnedContents[0];
			var slide = getCurrentSlide(key);
			var newElements = new Array();

			var replace = 0;
			var replaceButton = '';
			var images = slide.getElementsByTagName('IMG');
			var current_image = '';
			if ( images.length > 0 ) {
				current_image = images[0];
			}
			
			var input = document.getElementsByTagName('INPUT');
			var input_exists = 0;
			for ( i = 0; i < input.length; i++  ) {
				if (input[i].name == 'file_name_'+key) {
					input_exists = 1;
					input[i].value=passedBackFileName;
					break;
				}
			}
			for (var i = 0; i < slide.children.length; i++ ) { 
				if ( 'replace_slide_image' == slide.children[i].className ) {
					slide.children[i].innerHTML = 'Replace';
					if ( 'Replace' ==  slide.children[i].innerHTML ) {
						replace = 1;
						replaceButton = slide.children[i];
						slide.removeChild(slide.children[i]);
					}
				}
			}
			
			newElements['img'] = document.createElement('IMG');
			newElements['del'] = document.createElement('DIV');
			
			if ( key < 7 && key > 1 && replace == 0 ) {
				newElements['slide'] = document.createElement('DIV');
				newElements['slide'].className='slideCase';
				
				newElements['slide_header'] = document.createElement('SPAN');	
				newElements['slide_header_text'] = document.createTextNode(document.getElementById('info_optional').innerHTML);
				newElements['slide_header'].appendChild(newElements['slide_header_text']);
				newElements['slide'].appendChild(newElements['slide_header']);
				
				newElements['slide_upload'] = document.createElement('DIV');
				
				newElements['slide_upload'].className='replace_slide_image';
				newElements['slide_upload'].setAttribute('onclick','replaceSlideImage('+parseInt(key+1)+');');
				newElements['slide_upload_text'] = document.createTextNode('Upload');
				newElements['slide_upload'].appendChild(newElements['slide_upload_text']);
				
				newElements['slide'].appendChild(newElements['slide_upload']);
				document.getElementById('slideCarousel').appendChild(newElements['slide']);		
			}
				
			if ( slide.getElementsByClassName('delete_slide_image').length == 0 ) {
				newElements['del'].className='delete_slide_image';
				newElements['del'].setAttribute('onclick','deleteSlideImage('+key+');');
				slide.appendChild(newElements['del']);
			}
			
			if ( !input_exists ) {
				newElements['hidden_field'] = document.createElement('INPUT');
				newElements['hidden_field'].type="hidden";
				newElements['hidden_field'].name='file_name_'+key;
				newElements['hidden_field'].value=passedBackFileName;
				slide.appendChild(newElements['hidden_field']);
			}
			
			//Appending datestampt to passedBackFileName to force browser to release cache
			passedBackFileName += '?date='+currentDate.getYear()+(currentDate.getMonth()+1)+currentDate.getDate()+currentDate.getHours()+currentDate.getMinutes()+currentDate.getSeconds(); 
		
			if ( '' != current_image ) {
				current_image.src = passedBackFileName;
			} else {
				newElements['img'].src = passedBackFileName;
			
				slide.appendChild(newElements['img']);
			}
			if ( '' != replaceButton ) {
				slide.appendChild(replaceButton);
			}
			closeModal();
		}
	}
}

function deleteIt()
{
	jQuery.post('./services/photo.php?mode=deletePhoto',{listings_id: document.getElementById('image_delete_form').listings_id.value, sort: document.getElementById('image_delete_form').key.value})
		.success(function() {
			var slide = getCurrentSlide(document.getElementById('image_delete_form').key.value);
			for (var i = 0; i < slide.children.length; i++ ) { 
				if ( 'replace_slide_image' == slide.children[i].className ) {
					slide.children[i].innerHTML = 'Upload';
				}
				if ( 'IMG' == slide.children[i].tagName || 'delete_slide_image' == slide.children[i].className) {
					slide.removeChild(slide.children[i]);
					i--;
				}
			}
			closeModal();
		});
}

function getCurrentSlide(key)
{
	var slideCarousel = document.getElementById('slideCarousel');
	var divs = slideCarousel.getElementsByTagName('DIV');
	var currentOnClick = '';
	
	for ( param in divs ) {
		if ( divs[param] && 'slideCase' == divs[param].className ) {
			for (var i = 0; i < divs[param].children.length; i++ ) {
				currentOnClick = divs[param].children[i].getAttribute('onclick');
				if ( null != currentOnClick && (
						'deleteSlideImage('+key+');' == currentOnClick.toString() ||
						'replaceSlideImage('+key+');' == currentOnClick.toString()	)) {
					return divs[param];
				}
			}
		}
	}
	return '';
}

function deleteSlideImage(key)
{
	var html = '<p>This change cannot be undone.</p>'
		+ '<form id="image_delete_form" action="" method="post">'
		+ '<input type="hidden" name="key" value="' + key + '" />' 
		+ '<input type="hidden" name="listings_id" value="' + document.getElementById('edit_form_id').value + '" />'
		+ '<p><img src="'+getImgByKey(key)+'" alt="Delete" /></p>'
		+ '<p>Are you sure you would like to permenantly delete this image?</p>'
		+ '<label for="delete_image_submission">&nbsp;</label><input type="button" onclick="deleteIt();" value="Delete Image" id="delete_image_submission" />'
		+ '&nbsp;&nbsp;&nbsp;&nbsp;<input type="button" onclick="closeModal();" value="No" />'
		+ '</form>';
	
	openModal('Verification', html);
}

function getImgByKey(key)
{
	var slideCarousel = document.getElementById('slideCarousel');
	var divs = slideCarousel.getElementsByTagName('DIV');
	var slideCase = new Array();
	var localImage = '';
	
	for ( param in divs ) {
		if ( 'slideCase' == divs[param].className ) {
			if ( slideCase.length == key ) {
				localImage = divs[param].getElementsByTagName('IMG');
				if ( 0 == localImage.length) {
					return '';
				} else {
					
					return localImage[0].src;
				}
			} else {
				slideCase[slideCase.length] = 1;
			}
		}
	}
	
	return '';
}

function openModal(title, content)
{
	//console.log(mouse.x);
	//console.log(mouse.y);
	document.getElementById('modal_header').innerHTML = title;
	document.getElementById('modal_content').innerHTML = content;
	document.getElementById('modal').style.display='block';
}

function closeModal()
{
	document.getElementById('modal_header').innerHTML = '';
	document.getElementById('modal_content').innerHTML = '';
	document.getElementById('modal').style.display='none';
}


function initDraggable()
{
	jQuery("#slideCarousel").sortable({
        update : function () { 
        	saveChangesToSort(); 
          } 
    }).disableSelection();
		
}

function saveChangesToSort()
{
	var imgs = document.getElementById('slideCarousel').getElementsByTagName('IMG');
	var imageSave = new Array();
	
	for (var i = 0; i < imgs.length; i++) {
		imageSave[i] = imgs[i].src;
	}
	
	jQuery.post('./services/photo.php?mode=rearrangePhoto',{images: imageSave})
	.success(function() {
		reDrawSlides();
	});
}

function reDrawSlides()
{
	var headerContent = '';
	var imgs = document.getElementById('slideCarousel').getElementsByTagName('IMG');
	for ( var i = 0; i < imgs.length; i++ ) {
		switch (i) {
		case 0:
			headerContent = document.getElementById('info_exterior').innerHTML; 
			break;
		case 1:
		case 2:
			headerContent = document.getElementById('info_interior').innerHTML; 
			break;
		default:
			headerContent = document.getElementById('info_optional').innerHTML;
			break;
		}
		imgs[i].parentNode.getElementsByTagName('SPAN')[0].innerHTML = headerContent;
	}
}
