
var userScripts = new Array('/javascript/prototype.js', '/javascript/scriptaculous.builder.effects.js', '/javascript/ipn_dobjs.js'); //,dragdrop
//global array containing list of scriptnames we attempted to load by include
loadedScripts = new Array();
//will store the previous preview id (for easier targeting)
prevID = 'placeholder';
crop = '';
loadScripts(userScripts);

pshown = 0; //pseudo global to track mouseover actions..
var currMousedOverObj = false;
tset = ggetCookie('gpreviews') || 'on'; //twiddle preivews on and off...

var metaNames = new Array('', '_ipnid', '_caption');
// custompreviewshowrelease = 1;

lbexpansionspace=0;
var pmousedelta=[45,-30]; //image x,y offsets from cursor position in pixels. Enter 0,0 for no offset
//cache loading img:
var loadImg = new Image();
loadImg.src = '/graphics/loading5.png';

/* UTILITY FUNCS */

function checkCSSdef(defName) {
	if (defName == '' || (! defName && defName != 0))
		return 0;

	if (document.styleSheets)
	{
		for (var i = 0; i < document.styleSheets.length; i++)
		{
			if (typeof(document.styleSheets[i]) != 'undefined' )
			{
				
				var sheets = document.styleSheets[i];
			
				var nosecurity = 0;
				if(typeof(sheets) != 'undefined')
				{
					if(sheets.href)
						if (sheets.href.match(/http:\/\/tools.ipnstock.com\//) || 
							! sheets.href.match(/http:/))
							nosecurity = 1;
				}

				var rules = 1;
				if (nosecurity) //local or same site, so okay
 				{
					try { typeof(sheets.cssRules); }
 					catch (e) { rules = 0; };
				}
				else //can't look anyway
				{
					rules = 0;
				}

				if(typeof(sheets) != 'undefined' && rules)
				{
					var rules = sheets.cssRules;
			
					if(typeof(rules) != 'undefined')
					{
						for (var j = 0; j < rules.length; j++)
						{
							if(rules[j].selectorText)
							{
								if(rules[j].selectorText.toLowerCase() == defName.toLowerCase)
									return 1;
								else
									return 0;
							}
						}
					}
					else
					{
						return 0;
					}
				}
				else
				{
					return 0;
				}
			}
			else
			{
				return 0;
			}
		}
	}
	
}
/*
function gfixDate(date) {
  var base = new Date(0);
  var skew = base.getTime();
  if (skew > 0)
    date.setTime(date.getTime() - skew);   
}

*/

function onjustafterload() {
	//create preview image div

	if (typeof(document.body) == 'undefined')
		return;

	//create preview switch dropdown
 	var pSel = document.createElement('select'); 
 
	//set this aside for now	
	var previewImage = Builder.node('img',{id:'previewimg_placeholder',border:'0',alt:'loading',LOWSRC:'/graphics/loading5.png',
						src:'/graphics/loading5.png'});
	var previewCaption = Builder.node('div',{id:'previewpane_metdat_placeholder',style:'padding-left: 3%'},[
					(typeof(custompreviewhideid) == 'undefined' ?
						Builder.node('span',{className:'small',id:'previewpane_metdat_placeholder_ipnid'})
							:
						''
					),
					Builder.node('br'),
					(typeof(custompreviewhidecaption) == 'undefined' ?
						Builder.node('span',{className:'small',style:"font-weight:bold;",id:'previewpane_metdat_placeholder_caption' })
							:
						''
					),
			]);
	var previewElement = 
	Builder.node('div', {id:'pimid',style:'position:absolute; width:434px; height:1px; top: -500px;'},[
		Builder.node('div',{id:'previewpaneshadow2', style:'background:#FFF; border: gray 1px solid;'},[
			Builder.node('div',{id:'previewpaneshadow1'},[
				Builder.node('div',{id:'previewpane',className:'previewpane'},[
// 					Builder.node('div',{id:'dbgdiv'}),
					Builder.node('span', {id:"ddd",className:'xsmall'}),
					Builder.node('div',{align:'center', style:'padding: 2px 2px 2px 2px;'},[previewImage]),
					previewCaption
				]),
			]),
		])
	]);
	Element.setOpacity(previewElement, 0);
	document.body.appendChild(previewElement);
	var defDefs = $H({ 	previewpane: "padding: '4px', backgroundColor: '#ffffff', fontSize: '10pt'",
				previewpaneshadow1: "padding: '0 2px 2px 0', backgroundColor: '#666666'",
				previewpaneshadow2: "padding: '1px', backgroundColor: '#999999'" });

	defDefs.each(function(pair){ 
		if( ! checkCSSdef('#'+pair.key) ) {
			eval('$("'+pair.key+'").setStyle({'+pair.value+'});'); 
		}
	});

	var claDefs = $H({	xsmall: "fontSize: '9px', fontFamily: '\"Lucida Grande\", Verdana, Arial, Helvetica, sans-serif', color: '#333333'",
				small: "fontSize: '9px', fontFamily: '\"Lucida Grande\", Verdana, Arial, Helvetica, sans-serif', color: '#333333', lineHeight: '16px'" });

	claDefs.each(function(pair){ 	
		if( ! checkCSSdef('.'+pair.key) ) 
		{
			var targs = '';
			try { targs = $A( document.getElementsByClassName(pair.key, $('pimid')) ); } catch (e) {};
			if (targs != '')
				targs.each(function(ele) { eval('$(ele).setStyle({'+pair.value+'});'); });
		}	
	});
	return true;
};

//include scripts...
function loadScripts (fileArr) {
	if(typeof(fileArr) != 'object')
		return true;

	for (var j = 0; j < fileArr.length; j++)
	{
		if (typeof(fileArr[j]) != 'undefined' && fileArr[j] != '')
		{
			var idn = fileArr[j].match(/(^|\/)([^\/]+\.[^\.\?]+).*$/);
			if (typeof(idn) == 'object')
			{
				idn = idn[2];
				document.write('<script type="text/javascript" src="'+fileArr[j]+'" id="'+idn+'"></script>\n');
				loadedScripts.push(idn);
			}
		}
	}

	return true;
}

function checkScripts() { // has to be called after load, and looks for a callback from the script, not really necc for style, but
			//important for pages etc that have commerce related js, etc...
	if(typeof(loadedScripts) != 'object' || loadedScripts.length == 0)
		return true;

	var MAX_TRIES = 10;
	for (var j = 0; j < loadedScripts.length; j++)
	{
		var chk = '';
		
		var tryc = 0;
		while (chk == '' && tryc < 10)
		{
			try {
				chk = eval(loadedScripts[j]+'_isLoaded()');
			} catch (e) { alert('!'+chk+' -> '+e); }
			tryc++;
		}
	}

	return true;
}

function portSize() {
	var retY = parseInt(document.body.offsetHeight - 20);
	var retX = parseInt(document.body.offsetWidth - 20);

	var iX = parseInt(window.innerWidth);
	var iY = parseInt(window.innerHeight);

	retX = ( iX < retX ? iX : retX); 
	retY = ( iY < retY ? iY : retY); //we want smaller of 2 anyway, also pseud-crossbrowser as a result...

	return [retX, retY]; //X x Y
}

function pfindmouse(e){
	if($('pimid'))  {
		var xcoord=pmousedelta[0]
		var ycoord=pmousedelta[1]

		var thePort = portSize();

		var scrollleft = (document.documentElement.scrollLeft || document.body.scrollLeft);
		var scrolltop = (document.documentElement.scrollTop || document.body.scrollTop);

		var theTar;
		if (typeof(event) == 'undefined')
		{
			mouseX = e.pageX || (e.clientX + scrollleft);
			mouseY = e.pageY || (e.clientY + scrolltop);
			theTar = e.target;
		}
		else //IE
		{
			mouseX = event.pageX || (event.clientX + scrollleft);
			mouseY = event.pageY || (event.clientY + scrolltop);
			theTar = event.target;
		}

		if (typeof(ie6mousey) != 'undefined' && ! isNaN(ie6mousey) )
		mouseY += ie6mousey;

		if (thePort[0] - mouseX < parseInt(thePort[0]/2)){
			xcoord = mouseX - xcoord - 430; // Move to the left side of the cursor
		} else {
			xcoord += mouseX;
		}

		if (thePort[1] - mouseY < 450){
			ycoord += mouseY - Math.max(10,(490 + mouseY - thePort[1] - scrolltop));
		} else {
			ycoord += mouseY;
		}
		if(ycoord < 0 ){ycoord = 0;}
	
  		$('pimid').style.left = parseInt(xcoord) + "px";
  		$('pimid').style.top  = parseInt(ycoord) + "px";
		
		if ($('SpDivShim'))
		{
			$('SpDivShim').style.display = 'visible';
			$('SpDivShim').style.left = parseInt(xcoord) + "px";
			$('SpDivShim').style.top  = parseInt(ycoord) + "px";
		 	if(theTar && theTar.nodeName == 'IMG')
		 	{	
 				var primDem = Element.getDimensions(theTar);
				$('SpDivShim').style.width = primDem['width'] + 'px';
				$('SpDivShim').style.height = primDem['height'] + 'px';
 			}
		}

		/*if ($('dbgdiv'))
 			$('dbgdiv').innerHTML = 
					'MX: '+mouseX+' MY: '+mouseY + '<br/>' +
					'X: '+Position.page($('pimid'))[0] + ' Y: '+ Position.page($('pimid'))[1] +
 					'<br/>PSX: ' + (portSize()[0]) + ' PW '+Element.getDimensions($('pimid'))['width']+
 					'<br/>PSY: ' + (portSize()[1]) + ' PH '+Element.getDimensions($('pimid'))['height'];*/ 

	}
}

function parsPrID(prOb)
{
        var prid = prOb.src.match(/^.*\/([^\/]+)\.jpg$/i);

        if (typeof(prid) == 'object')
                prid = prid[1];
        else    //cant get IPN id out of image source..
		prid = 'r'+parseInt(Math.random() * 10000000000);

	return prid;
}

/* ANSILLARY FUNCS */

function hp(thar){
	//setTimeout('hpoff("'+ thar.id +'")',350);
	if(! $('pimid'))
		return;
	var prid = parsPrID(thar);
	if ($('previewimg_'+prid))
	{
		for (var i = 1; i < metaNames.length; i++)
                	$('previewpane_metdat_'+prid+metaNames[i]).innerHTML = ' ';
	}
	currMousedOverObj = '';
	document.onmousemove = function(){}; //kill handler..
	setTimeout('hpoff("'+prid+'");', 400);
}

function hpoff(prid){
	if(currMousedOverObj == '')
	{
		if(typeof(mouseX)!='undefined' && mouseX > parseInt(portSize()[0]/2))
		{
			$('pimid').style.left = '-500px';
			if($('SpDivShim'))
				$('SpDivShim').style.left = '-500px';
		}
		else if (typeof(mouseX)!='undefined')
		{
			$('pimid').style.top = '-1000px';
			if($('SpDivShim'))
				$('SpDivShim').style.index = '-1000px';
		}
		new Effect.Opacity('pimid', {from: Element.getOpacity('pimid'), to:0, duration:.3});
		if ($('SpDivShim'))
			$('SpDivShim').style.display = 'none';
	}
}

function previewset(thar){
	if (typeof(thar) == 'undefined')
		return;

	tset = thar.options[thar.selectedIndex].value;
        var date = new Date();
        date.setTime(date.getTime()+(60*24*60*60*1000));
        gsetCookie('gpreviews',tset,date, '/', gGetCookieDom());
	return;
}

function gsetCookie(name, value, expires, path, domain, secure) {
  var curCookie = name + "=" + escape(value) +
      ((expires) ? "; expires=" + expires.toGMTString() : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      ((secure) ? "; secure" : "");
  document.cookie = curCookie;
}

function ggetCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else
    begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1)
    end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}

function prloadimg(prOb,crop){
	//get image id out of image source (so this is necessarily called from the image)
	
	//so just looking for .JPG @ end ..
	if (typeof(prOb) != 'object')
		return;
	else if (! $('pimid'))
		onjustafterload();

	if ($('previewimg_'+prevID))
		$('previewimg_'+prevID).src='/graphics/loading5.png'; //loading5.png

	currMousedOverObj = prOb.id; 

	prOb.title = ''; //title tags tend to get in the way...

	var prid = parsPrID(prOb);
	smallscreen=0;

	//hit, wid, src, id, onload (prid)
	if ($('previewimg_'+prevID))
	{
		$('previewimg_'+prevID).setAttribute('id','previewimg_' + prid);
		$('previewimg_'+prid).setAttribute('src','http://cimages.ipnstock.com/dyn_images/400/85/' + prid + '.JPG');
		$('previewimg_'+prid).setAttribute('onload', 'this.setAttribute("alt", "'+prid+'");');
		Element.setOpacity($('previewimg_'+prid), 1);
	}

	for (var i = 0; i < metaNames.length; i++)
	{
		if( $('previewpane_metdat_'+prevID+metaNames[i]) )
			$('previewpane_metdat_'+prevID+metaNames[i]).setAttribute('id', 'previewpane_metdat_'+prid+metaNames[i]);
	}
	prevID = prid;


}

/* TOP LEVEL FUNCS AND THEIR DIRECT DESCENDANTS */

function sp(oObj) { //wrapper func to make asynch call before rendering popup
	if (typeof(oObj) != 'object' || tset != 'on' || ! $('pimid'))
		return;

	var imageid = oObj.src.match(/^.*\/([^\/]+)\.jpg$/i);
	if (typeof(imageid) == 'object')
		imageid = imageid[1];
	else	//cant get IPN id out of image source..
		return;

	document.onmousemove=pfindmouse; //set mousemove handler...
	setFields(imageid, '', '', '', '', '', '', '', 1);
// no ajax anymore	ajax_JSON( '/AjaxHandlers/ImageInfo/'+imageid+'.json', 'get', null );
	if (! oObj.id)
		oObj.setAttribute('id', imageid );

	currMousedOverObj = oObj.id;

	setTimeout("sp_act('"+oObj.id+"', '"+imageid+"', 0);", 100); //don't immediately pop the item, but can still cache it...
}

function sp_act(oObjId, imageid, tryCtr){  //imagename, license, photographer, 
	var prshortcaption ='';
	var prphotographer='';
	if($('data' + imageid).innerHTML){
		//RENDER!
		var oMd_div = document.getElementById('previewpane_metdat_'+imageid);
		if (typeof(oMd_div) != 'undefined' && oMd_div)
		{
			//file_size = (  file_size  ? '<span style="font-size:9pt">Available size - </span>'+file_size : '' );
			//rmrftype =  ''; //'&nbsp;<span class="'+rmrftype+'" style="font-size:10pt">[' + rmrftype + ']</span>&nbsp;';
			//var subject = document.JSONobj.getImgDat('subject'); 
			var data = $('data' + imageid).innerHTML
			setFields (imageid, data);
		    
		}
		new Effect.Opacity('pimid', {from: Element.getOpacity('pimid'), to:1, duration:.6});

	        //$('pimid').style.visibility = 'visible'; //in case fade effects don't work on your browser...
		
	}
	else if (tryCtr < 10)
	{
		if(oObjId != currMousedOverObj)
			return;
		tryCtr++;
		setTimeout("sp_act('"+oObjId+"', '"+imageid+"', '"+tryCtr+"')",  (250 + (50 * (tryCtr - 1))) );
	}

	
}

function setFields (imageid, data){
                if($('previewpane_metdat_'+imageid+'_ipnid'))
         //       $('previewpane_metdat_'+imageid+'_ipnid').innerHTML = imageid;

                if ($('previewpane_metdat_'+imageid+'_caption'))
                $('previewpane_metdat_'+imageid+'_caption').innerHTML = data;
}

