/*
  assumes $restricted_domain and $logged_in
*/

var current = 1;
var openlayer = '';
var layone = '';
var layers = new Array();
var thumb_col = null;
var imgDisplayed=null;

if (typeof(restricted_domain) == 'undefined') restricted_domain = false;

function main() {
    var args = parseQueryString(document.location.search.substr(1));
    var default_start;
    if (typeof(args.img) != 'undefined') {
	// ?img= is based on the image name (rather than the MT id
	default_start = args.img;
    } else if (document.location.hash.toString() != "") {
	// #movableType_id supported for search to work
	var imgid = document.location.hash.toString().substr(1);
	default_start = $(imgid).parentNode.id;
    } else {
	var def_item = getElementsByTagAndClassName('*','thumbnail')[0];
	//only show first image if we're in the CU domain
	//this is for consistancy of experience across galleries
	default_start = (restricted_domain) ? def_item.getAttribute('name') : null;
    }
    thumb_col = new Collection(thumbs, selectThumb, false, thumbTag, default_start);

}

addLoadEvent(main);


Collection = function(iterfunc, onselect, unselect, introspector, default_elt) {
    /*
      @introspector: introspector(elt) returns the element that onclick should be connected to
    */
    this.all = iterfunc;
    this.selected = null;
    this.onselect = (onselect) ? onselect :
	function(elt) {
	    addElementClass(elt,'selected');
	};
    this.unselect = (unselect) ? unselect :
	function(elt) {
	    removeElementClass(elt,'selected');
	};

    this.introspector = (introspector) ? introspector :
	function(elt) {
	    return elt;
	};
    var myself = this;
    forEach(iterfunc(), function(elt) {
	x = myself.introspector(elt);
	connect(x,'onclick',myself,myself.selector);
    });
    
    if (arguments.length >3 && default_elt != null) {//run default
	forEach(iterfunc(), function(elt) {
	    x = myself.introspector(elt);
	    if (elt.getAttribute('name') == default_elt) {
		myself.selected= x;
		myself.onselect(null, x);
	    }
	});	

    }
};

Collection.prototype.selector = function(e) {
    var self = this;
    if (self.selected != null) {
	self.unselect(self.selected);
    }
    self.selected = e.src();
    self.onselect.call(self,e);
};

function is_restricted(elt) {
    return (hasElementClass(elt.parentNode,'restricted'));
}
function thumbs() {
    return getElementsByTagAndClassName('*','thumbnail'); 
}
function thumbTag(elt) {
    return elt.getElementsByTagName('a')[0];
}
function thumbToName(target) {
    return target.parentNode.parentNode.getAttribute('name');
}

function selectThumb(e, etarget) {
    var self = this;
    if (!etarget) {
	etarget = e.src();
    }
    var imgName = thumbToName(etarget);

    addElementClass(etarget,'selected');
    hideElement(imgDisplayed);
    imgDisplayed = document.getElementById(imgName);

    var imgDest = getElementsByTagAndClassName('div','image',imgDisplayed)[0];
    //alert(imgName+'x'+imgDisplayed+'x'+imgDest);
    
    if (imgDest.getElementsByTagName('img').length == 0 ) {
	if (is_restricted(etarget)) {
	    //logDebug('restricted');
	    if (!logged_in && !restricted_domain) {
		logDebug('need to redirect');
		loginRedirect(imgName);
		return;
	    }
	}
	var imgLoc = getElementsByTagAndClassName('a','imglocation',imgDisplayed)[0].getAttribute('href');
	imgDest.appendChild(IMG({src:imgLoc}));
    }
    
    showElement(imgDisplayed);
}


function loginRedirect(imgName) {
    var login_url='https://www1.columbia.edu/sec/ccnmtl/projects/havel/redirectTo.html';
    var loc = document.location;
    return_location = (loc.toString().indexOf('#') < 0) //get rid of hash
	? loc.toString() 
	: loc.toString().substr(0,loc.toString().indexOf('#'));
    var arg_char = (return_location.indexOf('?')<0) ? '?' : '&';
    return_location = return_location + arg_char +'img='+imgName;

    document.location = loginRedirectChain([login_url, local_login_url, return_location]);
}

function openBig(fileName,winName,width,height) {
    width = width > 775 ? 775 : width;
    height = height > 575 ? 575 : height;
    width += 25;
    height += 25;
    window.open(fileName,winName,'width=' + width + ',height='+ height+',scrollbars=yes,resizable=yes');
}


function sendIt(fileName) {
  if (fileName != "") {
	document.location.href = fileName
  }   
}

function assetLinks() {
    //specific to galleries
    //overriding notebook.js version
    //return imap(domToAsset,getElementsByTagAndClassName('div','image'));
    return imap(domToAsset,imap(thumbTag,thumbs()));
}

function domToAsset(elt) {
    try {
	var m = thumbToName(elt); //elt.parentNode.id;
	return {'target':getElementsByTagAndClassName('div','image',document.getElementById(m))[0]
	       ,'link':assetSourceLink('image',m)
	       ,'title':document.getElementById(m).getElementsByTagName('h2')[0].innerHTML
	       ,'type':'image'
	       ,'name':m
	       ,'restricted':is_restricted(elt)
	      };
    } catch(err) {
	logError(err,err.message);
	return false;
    }
}
