// listing photos setter jscript

// global photos array (contains photo objects, see photo function below)
var photos = []; //array of current displayed photos
var all_photos = []; // array of all cached photos
if(gallery_enabled) {
	var gallery_photos = []; // array of current detail size photos' ids - needed for gallery
	var all_gallery_photos = []; // similar to all_photos but for gallery
	var Gal; // Gallery.Create object containig the gallery instance
}
if(window.detail_wide){
    pic_w = 420;
    pic_h = 320;
}else{
    pic_w = 320;
    pic_h = 200;
}

var add_more = []; //tells if we have to add "More" link for a photo set beginning with "photonum" (values set for some indexes: add_more[photonum|photonum+thumbs_no|photonum+2*thumbs_no|...etc...]
//initialize
for(var u=0;u<18;u++) {
	add_more[u]=0;
}

var add_slideshow; //should slideshow button be added? related to slideshow_enabled global var

//loading image
var thumb_loading = new Image();
thumb_loading.src = "/default/images/property_search/detail/img/loading.gif";
$('detail').src = thumb_loading.src;

//variable to know if detail image has been resized (if detail width > 320, design breaks => resize is necessary)
var detail_resized = false;

var photo_count;

if(typeof $ != 'function') {
	var $ = function(elemId) {
				return document.getElementById(elemId);
			}
}

function htmlspecialchars_decode(encodedString) {
	//alert('start htmlspecialchars_decode('+encodedString+')');
	//js equivalent of PHP htmlspecialchars_decode function
	
	var decodedString = encodedString;
	
	var searchStr = new Array("&amp;","&quot;","&gt;","&lt;","&#039;");
	var replaceStr = new Array("&","\"",">","<","'");
	
	for (var i=0; i<searchStr.length; i++) {
		
		var re = new RegExp(searchStr[i] , "g");
		decodedString = decodedString.replace(re, replaceStr[i]);
		
	}
	//alert('end htmlspecialchars_decode('+encodedString+')');
	//alert(decodedString);
	return decodedString;
	
}

function set_photos() {
	
	/*
	var photosTXT = this.req.responseText;
	alert(photosTXT);
	*/
	
	//alert('Set_photos function start here...');
	
	var photosXML = this.req.responseXML; //this == getPhotos !
	
	//alert('Set_photos function - after set photosXML...');
	
	var photosRoot = photosXML.documentElement;
	//alert('Root tagname:'+photosRoot.tagName);
	var photos_elem = photosRoot.getElementsByTagName("photo");
	//alert('Found '+photos_elem.length+' photo elements in response!');
	
	if(photos_elem.length > 0) {
	
		//put each photo element into photo object array:
		
		// re-initialize photo-count
		photo_count = 0;
		
		//reset photos array
		photos.length = 0;
		
		for (var i=0; i<photos_elem.length; i++) {
			if(i<thumbs_no) { //exclude extra photo retrieved for More link!
				set_photo(photos_elem.item(i));
			} else {
				// i==thumbs_no
				add_more[photonum] = 1;
			}
			photo_count++;
		}
		
		//alert('Found '+photo_count+' photos!\nthumbs_no='+thumbs_no+'\nphotonum='+photonum);
		
		if(photo_count==1 && (photonum==0)) {
			//listing has only one single photo!		
			//init detail photo only, don't show thumbnail for it!
			var detail_photo = $('detail');
			detail_photo.src = photos[0].detail.src;
			var remarks_div = $('remarks');
			remarks_div.innerHTML = photos[0].remarks;
			
			var remarksHeight = parseInt(remarks_div.offsetHeight,10);
			//alert(remarksHeight);
			if(remarksHeight > 150) {
				$('near_remarks').className = "prop";
				$('near_remarks').style.height = (remarksHeight + 5)+'px';
				//$('near_remarks').style.backgroundColor = '#fff8dc';
			}
			
			if(gallery_enabled) {
				gallery_photos[0] = {thumb_id: 'detail', large_img: detail_photo}; // same photo in fact ...
				all_gallery_photos[0] = gallery_photos[0];
				detail_photo.title = "Click to view large image";
				detail_photo.style.cursor = 'pointer';
			}
			
			add_slideshow = false;
			
		} else {
			//alert('before generate_photos()');
			generate_photos();
			//alert_photos();
			
			//alert('before init_photos()');
			setTimeout('init_photos()',500);
			
			//add slideshow?
			if((photo_count >= 2) || (photonum >= thumbs_no)) {
				add_slideshow = slideshow_enabled; //true if site is slideshow enabled
			} else {
				add_slideshow = false;
			}
			
			set_links();
			
		}
		
		if(gallery_enabled) {
			initGallery();
		}
	
	} else {
		
		//no photo available?!?
		$('detail').src = main_photo_src;
		$('remarks').innerHTML = main_photo_remarks;
		var remarksHeight = parseInt($('remarks').offsetHeight,10);
		if(remarksHeight > 150) {
			$('near_remarks').className = "prop";
			$('near_remarks').style.height = (remarksHeight + 5)+'px';
		}
		if(photonum==0) {
			add_slideshow = false;
		}
	}
	
}

function set_photo(photo_elem) {
	//
	//alert('Photo elem#'+photo_count+' - tag:'+photo_elem.tagName);
	//alert('Photo elem has '+photo_elem.childNodes.length+' child nodes');
	//
	var child_count = photo_elem.childNodes.length;
	var i,remarks;
	
	for(i=0; i<child_count; i++) {
		//alert('i='+i);
		var child_node = photo_elem.childNodes[i];
		
		if(child_node.tagName) {
			
			//alert('Childnode#'+i+' tagname: '+child_node.tagName);
		
			childNodeTagname = child_node.tagName;//.toLowerCase();
			
			//alert('Photo elem#'+photo_count+' - childNode#'+i+' tagname:'+childNodeTagname);
			
			switch(childNodeTagname) {
				
				case 'photo_no':
						photo_no = parseInt(child_node.firstChild.data,10);
						break;
						
				case 'thumb':
						thumb_src = htmlspecialchars_decode(child_node.firstChild.data);
						break;
						
				case 'detail':
						detail_src = htmlspecialchars_decode(child_node.firstChild.data);
						break;
						
				case 'caption':
						if(child_node.firstChild) {
							caption = htmlspecialchars_decode(child_node.firstChild.data);
						} else {
							caption = '';
						}
						break;
				
				case 'sequence':
						if(child_node.firstChild) {
							sequence = (child_node.firstChild.data!='') ? parseInt(child_node.firstChild.data,10) : '';
						} else {
							sequence = '';
						}
						break;
						
				case 'remarks':
						if(child_node.firstChild) {
							//alert ('Remarks(before):\n'+child_node.firstChild.data);
							remarks = htmlspecialchars_decode(child_node.firstChild.data);
							//alert ('Remarks: '+remarks);
							//alert('htmlspecialchars_decode(remarks)');
						} else {
							remarks = '';
						}
						break;
				
				default:
						break;
			}
			//alert('Out of switch');
		}
		
	}
	
	//alert('before \'photo\' call');
	photos[photo_no] = new photo(photo_no,thumb_src,detail_src,caption,sequence,remarks);
	//cache photo object
	all_photos[photonum+photo_no] = photos[photo_no];
	//alert('after \'photo\' call');
	if(gallery_enabled) {
		gallery_photos[photo_no] = {thumb_id: 'p'+photo_no, large_img : photos[photo_no].detail };// photo[photo_no].detail.id;
		all_gallery_photos[photonum + photo_no] = gallery_photos[photo_no];
	}
}

function photo(photo_no,thumb_src,detail_src,caption,sequence,remarks) {
	//alert('Photos function start - photo_no:'+photo_no);
	this.photo_no = photo_no;
	
	this.thumb = new Image();
	this.thumb.src = thumb_src;
	this.thumb.id = 'p'+photo_no+'_thumbnail';
	this.thumb.alt = caption;
	this.thumb.onmouseover = updatePhoto;
	
	this.detail = new Image();
	this.detail.src = detail_src;
	this.detail.id = 'p'+photonum+photo_no+'_detail';
	// if gallery is enabled, add current detail photo to document.body
	if(gallery_enabled) {
		this.detail.style.display = 'none';
		document.body.appendChild(this.detail);
	}
	
	this.sequence = sequence;
	this.remarks = remarks;
	
}

function updatePhoto() {
	
	//var photo_no = parseInt(this.id.substr(1,1),10);
	//alert('mouse over photo#'+this.photo_no);
	
	var detail_photo = $('detail');
	var photo = photos[this.photo_no];
	var remarks_div = $('remarks');
	
	if(detail_resized) {
		
		//create brand-new detail image, width unspecified
		// <img id="detail" src="" height="200" style="margin-top:5px;">
		var empty_detail_photo = document.createElement("IMG");
		empty_detail_photo.id = "detail";
		empty_detail_photo.height = pic_h;
		empty_detail_photo.cssText = "margin-top:5px;";
		
		detail_photo.parentNode.replaceChild(empty_detail_photo, detail_photo);
		
		detail_photo = $('detail');
		
		if(gallery_enabled) {
			// re-attach onclick handler to detail image
			detail_photo.style.cursor = 'pointer';
			detail_photo.title = 'Click to view large image';
			detail_photo.onclick = function() {
				// get current photo index
				var current_photo_index = getCurrentPhotoIndex(detail_photo);
				//alert('Picture '+Gal.images[current_photo_index].thumb_id+' clicked!');
				$(Gal.images[current_photo_index].thumb_id).onclick(); // $(this.images[i].thumb_id)
			}
		}
		
		//reset detail_resized
		detail_resized=false;
		
	}
	
	detail_photo.src = photo.detail.src;
	
	//resize detail if necessary (width exceeds 320)
	if(detail_photo.width > pic_w) {
		resizeDetailPhoto(detail_photo);
	}
	
	$('near_remarks').className = "prop min150px";
	$('near_remarks').style.height = '150px';
	//remarks_div.style.height = '150px';
	remarks_div.innerHTML = photo.remarks;
	var remarksHeight = parseInt(remarks_div.offsetHeight,10);
	if(remarksHeight > 150) {
		$('near_remarks').className = "prop";
		$('near_remarks').style.height = (remarksHeight + 5)+'px';
	} else {
		//reset remarks div
		$('near_remarks').className = "prop min150px";
	}
		
}

function alert_photo(photo_no) {
	
	var photo = photos[photo_no];
	var photoName = "photo"+photo_no;
	
	var result = "";
    for (var i in photo) {
        result += photoName + "." + i + "=" + photo[i] + "\n";
    }
    
    alert(result);
	
}

function alert_photos(){
	for (var p=0; p<photos.length; p++) {
		alert_photo(p);
	}
}

function generate_photos() {
	
	//generate img objects and attach them to container
	var thumbsContainer = $('thumbs');
	
	thumbsContainer.innerHTML = '';
	
	for (var p=0; p<photos.length; p++) {
		var ph = document.createElement("img");
		ph.id = "p"+p;
		ph.className = "thumb";
		ph.src = thumb_loading.src;
		if(gallery_enabled) {
			// set title and cursor style
			ph.title = "Click to view large image";
			ph.alt = "Click to view large image";
			ph.style.cursor = 'pointer';
			
		}
		if((p==(photos.length-1)) ) { // && (p%2)
			//clear right
			ph.style.clear = "right";
		}
		thumbsContainer.appendChild(ph);
		if((p==(photos.length-1)) && (p%3==0)) {
			$("p"+p).style.styleFloat = "left";
			$("p"+p).style.clear = "both";
		}
	}
	if(gallery_photos_resize){
	    var div_ = document.createElement("div");
	    div_.style.position='absolute';
	    div_.style.bottom='1px';
	    div_.style.left='1px';
	    div_.style.paddingTop='5px';
	    div_.style.width='200px';
	    div_.innerHTML = '<center>Click any photo to enlarge</center>';
	    thumbsContainer.appendChild(div_);
	    div_.style.display='inline';
	}
		
}

function init_photos() {
	for (var p=0; p<photos.length; p++) {
		init_photo(p);
	}
}

function init_photo(photo_no) {
	
	var photo = photos[photo_no];
	
	if(photo.thumb.complete) {
		var target_photo = $('p'+photo_no);
		target_photo.photo_no = photo_no;
		target_photo.src = photo.thumb.src;
		target_photo.alt = photo.thumb.alt;
		target_photo.title = photo.thumb.alt;
		target_photo.onmouseover = photo.thumb.onmouseover;
		
		if(photo_no==0) {
			//init detail photo
			var detail_photo = $('detail');
			//alert('Detail photo dimensions: '+detail_photo.width+','+detail_photo.height);
			detail_photo.src = photo.detail.src;
			if(detail_photo.width > pic_w) {
				resizeDetailPhoto(detail_photo);
			}
			var remarks_div = $('remarks');
			remarks_div.innerHTML = photo.remarks;
			
			var remarksHeight = parseInt(remarks_div.offsetHeight,10);
			if(remarksHeight > 150) {
				$('near_remarks').className = "prop";
				$('near_remarks').style.height = (remarksHeight + 5)+'px';
			}
			
			if(gallery_enabled) {
				// attach onclick event
				detail_photo.style.cursor = 'pointer';
				detail_photo.title = 'Click to view large image';
				detail_photo.onclick = function() {
					// get current photo index
					var current_photo_index = getCurrentPhotoIndex(detail_photo);
					//alert('Picture '+Gal.images[current_photo_index].thumb_id+' clicked!');
					$(Gal.images[current_photo_index].thumb_id).onclick(); // $(this.images[i].thumb_id)
				}
			}
			
		}
	} else {
		setTimeout('init_photo('+photo_no+')',500);
	}
	
}

function getCurrentPhotoIndex(detail_photo) {
	var ph_idx;
	for (var p=0; p < photos.length; p++) {
		if(detail_photo.src == photos[p].detail.src) {
			ph_idx = p;
			break;
		}
	}
	return ph_idx;
}

function set_links() {
	
	var thumbsDiv = $('thumbs');
	
	// links container div
	var linksDiv = $('links');
	if(!linksDiv) {
		linksDiv = document.createElement("div");
		linksDiv.id = "links";
		linksDiv.className = "links";
		thumbsDiv.appendChild(linksDiv);
	}
	//linksDiv.style.backgroundColor = "#ff6622";
	
	// Manage Previous link
	
	var previousLink = $('previous_photos');
	
	var linksActions = new Object();
	linksActions['add_more'] = 0;
	linksActions['rem_more'] = 0;
	linksActions['add_prev'] = 0;
	linksActions['rem_prev'] = 0;
	
	if(photonum >= thumbs_no) {
		// Add Previous link?
		if(!previousLink) {
			//create it and append to links container div
			var previousLink = document.createElement("a");
			previousLink.style.cssText = "position:relative;left:0px;font-size:11px;cursor:pointer;display:block;float:left;width:55px;text-align:center;";
			previousLink.id = "previous_photos";
			previousLink.innerHTML = "&laquo;Previous";
			//moreLink.href = servername + '/listing_detail/get_listing_photos.php?id='+listing_id+'&photonum='+(photonum+thumbs_no);
			previousLink.onclick = function() {
				photonum = photonum - thumbs_no;
				if(all_photos[photonum]) {
					//already cached :: use all_photos array
					//alert('Load from cache');
					restore_photos();	
				} else {
					//alert('Load by request');
					previous_url = servername + '/listing_detail/get_listing_photos.php?id='+listing_id+'&photonum='+photonum;
					getPhotos = new net.ContentLoader(previous_url,set_photos);
					set_loading_photo();
				}
				$('menulinks').innerHTML = $('menulinks').innerHTML; // prevent NN8 render bug!
			}
			linksActions['add_prev'] = 1;
			//linksDiv.appendChild(previousLink);
		}
	} else {
		// Remove Previous Link?
		if(previousLink) {
			//remove it
			//alert('Removing Previous link...');
			//var moreLink = $('more_photos');
			var previousLinkParent = previousLink.parentNode;
			if(previousLinkParent) {
				//alert("parent node exists as "+previousLinkParent.tagName);
				//previousLinkParent.removeChild(previousLink);
				linksActions['rem_prev'] = 1;
			}
		}
	}
	
	// Manage More link
	
	var moreLink = $('more_photos');
	
	if(photo_count > thumbs_no) { 
		// Add More link ? 
		if(!moreLink) {
			//create "More" link & append it to links container div
			var moreLink = document.createElement("a");
			var moreLinkLeft = (linksActions['add_prev'] == 1) ? '55' : '110';
			moreLink.style.cssText = "position:relative;left:"+moreLinkLeft+"px;font-size:11px;cursor:pointer;display:block;width:55px;text-align:center;float:left;";
			moreLink.id = "more_photos";
			moreLink.innerHTML = "More&raquo;";
			//moreLink.href = servername + '/listing_detail/get_listing_photos.php?id='+listing_id+'&photonum='+(photonum+thumbs_no);
			moreLink.onclick = function() {
				photonum = photonum + thumbs_no;
				if(all_photos[photonum]) {
					//already cached :: use all_photos array
					//alert('Load from cache');
					restore_photos();	
				} else {
					//not cached :: request photos
					//alert('Load by request');
					more_url = servername + '/listing_detail/get_listing_photos.php?id='+listing_id+'&photonum='+photonum;
					if(gallery_enabled) {
						// remove gallery divs
						document.body.removeChild(Gal.overlay);
						document.body.removeChild(Gal.gallery);
						// reset Gallery object
						Gal = null;
						// reset gallery photos array!
						gallery_photos = [];	
					}
					getPhotos = new net.ContentLoader(more_url,set_photos);
					set_loading_photo();
				}
			}
			linksActions['add_more'] = 1;
			//linksDiv.appendChild(moreLink);
			
		} else { //keep it as it is!
			/*update More link onclick
			moreLink.onclick = function() {
				photonum = photonum + thumbs_no;
				more_url = servername + '/listing_detail/get_listing_photos.php?id='+listing_id+'&photonum='+photonum;
				getPhotos = new net.ContentLoader(more_url,set_photos);
				//return false;
			}*/
		}
	} else {
		// Delete More link?
		if(moreLink) {
			//remove it
			//alert('Removing More link...');
			//var moreLink = $('more_photos');
			var moreLinkParent = moreLink.parentNode;
			if(moreLinkParent) {
				//alert("parent node exists as "+moreLinkParent.tagName);
				//moreLinkParent.removeChild(moreLink);
				linksActions['rem_more'] = 1;
			}
		}
	}
	
	//listProperties(linksActions, 'linksActions');
	
	// Perform requested links actions
	if(linksActions['add_more']) {
		if(linksActions['add_prev']) {
			linksDiv.appendChild(previousLink);
			linksDiv.appendChild(moreLink);
		} else if(linksActions['rem_prev']) {
			linksDiv.removeChild(previousLink);
			linksDiv.appendChild(moreLink);
			linksDiv.style.textAlign = "right";
		} else {
			linksDiv.appendChild(moreLink);
			linksDiv.style.textAlign = "right";
		}
	} else if(linksActions['rem_more']) {
		if(linksActions['add_prev']) {
			linksDiv.removeChild(moreLink);
			linksDiv.appendChild(previousLink);
			linksDiv.style.textAlign = "left";
		} else if(linksActions['rem_prev']) {
			//this case can't be!
			linksDiv.removeChild(moreLink);
			linksDiv.removeChild(previousLink);
		} else {
			linksDiv.removeChild(moreLink);
		}
	} else { //keep More link
		if(linksActions['add_prev']) {
			linksDiv.insertBefore(previousLink,moreLink);
			linksDiv.style.textAlign = "left";
		} else if(linksActions['rem_prev']) {
			linksDiv.removeChild(previousLink);
			linksDiv.style.textAlign = "right";
		} else {
			// do nothing, keep all as it is
		}
	}
	
	
	// Manage Slideshow Link
	if(add_slideshow) {
		var slideLink = document.createElement("a");
		slideLink.style.cssText = "position:relative;display:block;width:75px;height:15px;font-size:11px;cursor:pointer;text-align:center;clear:both;"; // 
		slideLink.id = "slideshow";
		slideLink.innerHTML = "&laquo;Slideshow&raquo;";
		slideLink.onclick = function() {
			//window.location = '/slideshow?'+'id='+listing_id;
			window.open('/slideshow?id='+listing_id, '', 'height=500,width=640,scrollbars=yes,resizable=yes');
		}
		//attach to linksDiv
		//linksDiv.appendChild(document.createElement("br"));
		if(navigator.appName == "Microsoft Internet Explorer") {
			var extraDiv = document.createElement("div");
			extraDiv.style.cssText = "position:relative:margin-top:0px;margin-bottom:0px;height:5px;width:100px;font-size:1px;";
			extraDiv.innerHTML = '&nbsp;';
			linksDiv.appendChild(extraDiv);
		} else {
			linksDiv.appendChild(document.createElement("br"));
			slideLink.style.cssText += 'margin-top:5px;';
		}
		var centerElem = document.createElement("center");
		centerElem.appendChild(slideLink);
		linksDiv.appendChild(centerElem);
		//linksDiv.appendChild(slideLink);
		//horizCenter('slideshow','links');
		//$('slideshow').style.left = '55px';
		//$('slideshow').style.marginTop = '15px';
	}
	
}

function set_loading_photo() {
	
	for (var p=0; p<photos.length; p++) {
		$('p'+p).src = thumb_loading.src;
		$('p'+p).onmouseover = function() { };
	}
	
}

function listProperties(obj,objName) {
    var result = "";
    for (var i in obj) {
        result += objName + "." + i + "=" + obj[i] + "\n";
    }
    alert(result);
}

function restore_photos() {
	
	//restores photos array using already cached photos stored in all_photos array
	
	// re-initialize photo-count
	photo_count = 0;
	
	//reset photos array
	photos.length = 0;
	
	if(gallery_enabled) {
		// reset gallery photos array
		gallery_photos = [];
	}
	
	//maximum "thumbs_no" loops
	for (var i=0; i<thumbs_no; i++) {
		if(all_photos[photonum+i]) { 
			photos[i] = all_photos[photonum+i];
			if(gallery_enabled) {
				gallery_photos[i] = all_gallery_photos[photonum+i];
			}
			photo_count++;
		} else {
			break;
		}
	}
	
	//shall we display More link? - this depends on photo_count variable!!!
	if((photo_count==thumbs_no) && add_more[photonum]) {
		photo_count++;
	}
	
	//alert('Found '+photo_count+' photos!\nthumbs_no='+thumbs_no+'\nphotonum='+photonum);
	
	generate_photos();
	
	//alert_photos();
	init_photos();
	//alert('Photonum='+photonum+'\nphoto_count='+photo_count+'\nthumbs_no='+thumbs_no);
	set_links();
	
	if(gallery_enabled) {
		document.body.removeChild(Gal.overlay);
		document.body.removeChild(Gal.gallery);
		Gal = null;
		initGallery();
	}
	
}

function resizeDetailPhoto(detail_photo) {	
	//alert('Resize requested!');
	detail_photo.height = parseInt((pic_w*detail_photo.height)/detail_photo.width,10);
	detail_photo.width = pic_w-2;
	detail_resized = true;
	
}

function initGallery() {
	// only if gallery_enabled = true
	Gal = new Gallery.Create(gallery_photos,'overlay','gallery','gallery_image',gallery_photos_resize);
}

function getObjectLeft(elemID)  {
    var elem = $(elemID);
    var result = 0;
    if (document.defaultView) {
        var style = document.defaultView;
        var cssDecl = style.getComputedStyle(elem, "");
        result = cssDecl.getPropertyValue("left");
    } else if (elem.currentStyle) {
        result = elem.currentStyle.left;
    } else if (elem.style) {
        result = elem.style.left;
    } else if (document.layers) { //NN4
        result = elem.left;
    }
    return parseInt(result);
}

function getObjectWidth(elemID)  {
    var elem = $(elemID);
    var result = 0;
    if (elem.offsetWidth) {
        result = elem.offsetWidth;
    } else if (elem.clip && elem.clip.width) {
        result = elem.clip.width;
    } else if (elem.style && elem.style.pixelWidth) {
        result = elem.style.pixelWidth;
    }
    return parseInt(result);
}

function horizCenter(elemID,parentElemID) {
	var elemW = getObjectWidth(elemID);
	var parentElemW = getObjectWidth(parentElemID);
	//alert(elemW+','+parentElemW);
	$(elemID).style.left = parseInt((parentElemW-elemW)/2,10)+'px';
}
