// a constant used to indicate a function that does nothing

var NOOP = function() {}

function BreakInDetected()
{
alert("This image is the Copyright of Silverwood Antiques, Vintage and Contemporaries. Sorry, it may not be your intention, but other people copy designs. If you would like an image for other purposes, like the intention to buy the item, please feel free to e-mail us with your query, we would be glad to help.");
return false;
}

function NetscapeBrowser(e)
{
if(document.layers||document.getElementById&&!document.all)
{
if(e.which==2||e.which==3)
{
BreakInDetected();
return false;
}
}
}

function InternetExplorer()
{
if(event.button==2)
{
BreakInDetected();
return false;
}
}

if(document.layers)
{
document.captureEvents(Event.MOUSEDOWN);
document.onmousedown=NetscapeBrowser();
}
else if(document.all&&!document.getElementById)
{
document.onmousedown=InternetExplorerBrowser();
}

document.oncontextmenu=new Function("BreakInDetected(); return false")

// ------------------------------------------------------------------------

//   Find the font family, size and face for the provided node in the

//   HTML dom.  The result object contains fontSize, fontFamily and

//   fontFace entries.

//

function findFont( obj )

{

	var result = new Object();

	if ( obj.currentStyle ) {

		result.fontSize = obj.currentStyle[ 'fontSize' ];

		result.fontFamily = obj.currentStyle[ 'fontFamily' ];

		result.fontFace = obj.currentStyle[ 'fontFace' ];

	} else if ( document.defaultView && document.defaultView.getComputedStyle ) {

		var computedStyle = document.defaultView.getComputedStyle( obj, "" );

		result.fontSize = computedStyle.getPropertyValue( 'font-size' );

		result.fontFamily = computedStyle.getPropertyValue( 'font-family' );

		result.fontFace = computedStyle.getPropertyValue( 'font-face' );

	}

	return result;

}



// ---------------------------------------------------------------------------



/*

	Find the bounds of the specified node in the DOM.  This returns

	an objct with x,y, height and width fields

*/

function findBounds( obj )

{

	var bounds = new Object();

	bounds.x = 0;

	bounds.y = 0;

	bounds.width = obj.scrollWidth;

	bounds.height = obj.scrollHeight;

	if( obj.x != null ) {

		bounds.x = obj.x;

		bounds.y = obj.y;

	}

	else {

		while( obj.offsetLeft != null ) {

			bounds.x += obj.offsetLeft;

			bounds.y += obj.offsetTop;

			if( obj.offsetParent ) {

				obj = obj.offsetParent;

			}

			else {

				break;

			}

		}

	}

			

	// subtract the amount the page is scrolled from position

	if (self.pageYOffset) // all except Explorer

	{

		bounds.x -= self.pageXOffset;

		bounds.y -= self.pageYOffset;

	}

	else if (document.documentElement && document.documentElement.scrollTop)

		// Explorer 6 Strict

	{

		bounds.x -= document.documentElement.scrollLeft;

		bounds.y -= document.documentElement.scrollTop;

	}

	else if (document.body) // all other Explorers

	{

		bounds.x -= document.body.scrollLeft;

		bounds.y -= document.body.scrollTop;

	}



	return bounds;

}



// ---------------------------------------------------------------------------



var isFirefoxPat = /Firefox\/([0-9]+)[.]([0-9]+)[.]([0-9]+)/;

var firFoxArr = isFirefoxPat.exec( navigator.userAgent );

var isSafariPat = /AppleWebKit\/([0-9]+)[.]([0-9]+)/;

var safariArr = isSafariPat.exec( navigator.userAgent );



// ---------------------------------------------------------------------------



/*

	Default implementation does nothing when viewing the webpage normally

*/

var clickTarget = NOOP;

var tellLightroomWhatImagesWeAreUsing = NOOP;

var setActiveImageSize = NOOP;



// ---------------------------------------------------------------------------



var callCallback = NOOP;

var WIN_ENV = false;

var MAC_ENV = false;



// ---------------------------------------------------------------------------



if( window.myCallback != null ){

	MAC_ENV = true;



	// We're being previewed on Mac.  Create a callback

	// function for communicating from the web page into Lightroom.

	callCallback = function() {

		// On Mac we use a special javascript to talk to Lightroom.

		var javascript = 'myCallback.' + arguments[ 0 ] + "( ";

		var j = arguments.length;

		var c = j - 1;

		for( var i = 1; i < j; i++ ) {

			var arg = arguments[ i ];

			if( typeof( arg ) == 'string' ) {

				javascript = javascript + '"' + arg + '"';

			}

			if( typeof( arg ) == 'number' ) {

				javascript = javascript + arg

			}

			if( typeof( arg ) == 'undefined' ) {

				javascript = javascript + 'undefined'

			}

			if( i < c ) {

				javascript = javascript + ", "

			}

		}

		javascript = javascript + " )"

		eval( javascript )

	}

	

	pushresult = function( result ) {

		callCallback( "pushresult", result )

	}

}



// ---------------------------------------------------------------------------



else if( window.AgMode == 'preview' ) {

	WIN_ENV = true;

	// We're being previewed on Windows.  Create a callback

	// function for communicating from the web page into Lightroom.

	callCallback = function() {

		// On windows we use a special lua: URL to talk to Lightroom.

		var lua = arguments[ 0 ] + "( ";

		var j = arguments.length;

		var c = j - 1;

		for( var i = 1; i < j; i++ ) {

			var arg = arguments[ i ];

			if( typeof( arg ) == 'string' ) {

				lua = lua + '"' + arg + '"';

			}

			if( typeof( arg ) == 'number' ) {

				lua = lua + arg

			}

			if( typeof( arg ) == 'undefined' ) {

				lua = lua + 'undefined'

			}

			if( i < c ) {

				lua = lua + ", "

			}

		}

		lua = lua + ")"

		location.href = "lua:" + lua

	}

	

	pushresult = function( result ) {

		location.href = "rsl:" + result;	

	}

}



// ---------------------------------------------------------------------------



/*

	Set up live feedback between Lightroom and the previewed web page.

*/

if( callCallback != NOOP ) {

	setActiveImageSize = function( size ) {

		document.activeImageSize = size;

		callCallback( "setActiveImageSize", size );

	}



	tellLightroomWhatImagesWeAreUsing = function() {



		if( window.myCallback != null ) {

			var imgElements = document.getElementsByTagName( "img" );

			var elsLen = imgElements.length;

			var result = new Array()

			for( i = 0; i < elsLen; i++ ) {

				var element = imgElements[ i ];

				var imageID = element.id;

				// for html validation purposes, we've prepended "ID" to the GUID for this

				// image, so now we strip that off.

				imageID = imageID.substring( 2 );

				result[ i ] = imageID;

			}

			myCallback.setUsedFiles( result );

		}

	}



	clickTarget = function( obj, target, imageID ) {

		if( imageID != null ) {

			// for html validation purposes, we've prepended "ID" to the GUID for this

			// image, so now we strip that off.

			imageID = imageID.substring( 2 );

		}

		var bounds = findBounds( obj );

		var font = findFont( obj );

		callCallback( 'inPlaceEdit', target, bounds.x, bounds.y, bounds.width, bounds.height, font.fontFamily, font.fontSize, imageID )

	}



	AgDebugPrint = function( message ) {

		callCallback( 'AgDebugPrint', message );

	}

}



// ---------------------------------------------------------------------------



if( firFoxArr && ( firFoxArr[1] > 1 || firFoxArr[2] > 4 ) ||

      safariArr ) {

	window.gridOn = NOOP;

	window.gridOff= NOOP;

}

else {

	window.gridOn = function( t, id ) {

		t.agOriginalClassName = t.className;

		t.className =  "selectedThumbnail " + t.className;

	};

	window.gridOff= function( t ) {

		t.className = t.agOriginalClassName;

	};

}



var needThumbImgLink = !isFirefoxPat;





var oldOnLoad = window.onload;

window.onload = function() {

	if( window.AgOnLoad ) {

		window.AgOnLoad();

	}

	if( oldOnLoad ) {

		oldOnLoad();

	}

};



//------------------------------------------------------------



document.liveUpdateImageMaxSize = function( id, value ) {

	var targetArr = id.split(/[ \t\r\n]*,[ \t\r\n]*/);

	for( i = 0; i < targetArr.length; i++ ) {

		var target = targetArr[i];

		var idRegex = new RegExp( "^[#](.+$)" );

		var theId = idRegex.exec( target );

		if( theId && theId[ 1 ] ) {

			var item = document.getElementById( theId[ 1 ] );

			if( item ) {



				// scale image size

				var max = item.width;

				if( item.height > max ) {

					max = item.height;

				}

				item.width = item.width * value / max;

				item.height = item.height * value / max;

			}

		}

	}





	return "invalidateAllContent";

}



//------------------------------------------------------------



document.liveUpdatePropertyMac = function( id, property, value ) {



	var targetArr = id.split(/[ \t\r\n]*,[ \t\r\n]*/);

	var clasRegex = new RegExp( "^[.](.+$)" )

	var idRegex = new RegExp( "^[#](.+$)" )

	var comboRegex = new RegExp( "[ \t\r\n]" );



	for( i = 0; i < targetArr.length; i++ ) {

		var target = targetArr[i];

		var theClass = clasRegex.exec( target );

		var theId = idRegex.exec( target );

		if( comboRegex.exec( target ) ) {

			return "failed";

		}

		else if( theClass) {

			var pattern = new RegExp( "(^|\\s)" + theClass[1] + "(\\s|$)" );

			var items = document.getElementsByTagName( '*' );

			for( o = 0; o < items.length; o++ ) { 

				var item = items[ o ];

				if( pattern.test( item.className ) ){

					item.style.setProperty( property, value, "important" );

				}

			}

			return "invalidateAllContent";

		}

		else if( theId ) {

			if( property == "maxSize" ) {

				return document.liveUpdateImageMaxSize( id, value );

			}

			var item = document.getElementById( theId[ 1 ] );

			if( item ) {

				item.style.setProperty( property, value, "important");

			}

			return "invalidateAllContent";

		}   

		else {

			var items = document.getElementsByTagName( target);

			for( i = 0; i < items.length; i++ ) {

				var item = items[i];

				item.style.setProperty( property, value, "important" );

			}

			return "invalidateAllContent";

		}

	}

};



//------------------------------------------------------------



document.liveUpdatePropertyWin = function( id, property, value ) {

//	AgDebugPrint( "document.liveUpdatePropertyWin( " + id + ", " + property + ", " + value + " )\n" );

	if( property == "maxSize" ) {

		return document.liveUpdateImageMaxSize( id, value );

	}

	if( property == 'display' || value == 'inherit' ) {

		return "failed"

	}

	var x = document.styleSheets[0];

	x.addRule(id, property + ": " + value + " !important");

	return "invalidateAllContent";

}

if( MAC_ENV ) {

	document.liveUpdateProperty = document.liveUpdatePropertyMac

}

if( WIN_ENV ) {

	document.liveUpdateProperty = document.liveUpdatePropertyWin

}



//------------------------------------------------------------



document.liveUpdate = function( path, newValue, cssId, property ) {

// AgDebugPrint( "document.liveUpdate( " + path + ", " + newValue + ", " + cssId + " , " + property + " ) " );

	var success = "failed";

	var reg = /(^[^.]+)\./;

	var ar = reg.exec( path );

	if( ar == null ) {



		// override result if we drove this change ourselves

		if( document.LR_modelManipulation ) {

			return "invalidateOldHTML";

		}

		return "failed";

	}

	var area = ar[1];

	if( area == "metadata" ) {

		// our html is built so that the HTML ids are the metadata path

		var a = document.getElementById( path );

		while(a.hasChildNodes()) {

			a.removeChild(a.firstChild);

		}

		a.innerHTML = newValue;

		success = "invalidateOldHTML";

	}

	else if( area == "appearance" ) {

		success = document.liveUpdateProperty( cssId, property, newValue );

	}

	else if( path == "nonCSS.tracking" ) {

		if( newValue == null || newValue == "null") {

			// force reload by signalling failure to update

			// because we don't properly layout all the nuiances of

			// detail image placement during tracking, we reload at the

			// end to make sure it is correct when mouseup

			success = "failed";

		}

		else {

			// FIX_ME, image won't layout properly during drag w/o this

			success = "invalidateOldHTML";

		}

	}

	else if( path == "nonCSS.imageBorderWidth" ) {

		// FIX_ME, not yet implemented, so image won't layout properly during drag

		// as a workaround, we're reloading on tracking up (see previous block)

		success = "invalidateOldHTML";

	}

	else {

		// AgDebugPrint("How do I update " + path + " to " + newValue )

	}



	// override result if we drove this change ourselves

	if( document.LR_modelManipulation ) {

		return "invalidateOldHTML";

	}

	return success;

}



//------------------------------------------------------------



document.liveUpdateImageSize = function( imageID, width, height ) {



	var img = document.getElementById( 'ID' + imageID );

	img.style.width = width + 'px';

	img.style.height = height + 'px';

	return "invalidateAllContent";

}



//------------------------------------------------------------




