var content = 'Loading data ...';		

var getArtworkDetailsSuccess = function(transport) {
	content = transport.responseText;	
} 

var getArtworkDetailsError = function(transport) {
	alert('Error ' + transport.status + ' -- ' + transport.statusText);
}

var getArtworkDetails = function(valArtworkID) {
	new Ajax.Request(
		'test.php',
		{
			parameters:'ArtworkID=123',
			onSuccess:getArtworkDetailsSuccess,
			onFailure:getArtworkDetailsError
		}
	);
}

var getID = function(str) {
	return str.substr(str.lastIndexOf('_') + 1);
}
var toggleHiddenBool = function(objHidden) {
	if (objHidden.value == 1) {
		objHidden.value = 0;
	} else {
		objHidden.value = 1;
	}	
}

var updateSortOrder = function(strTarget,strReference) {
	t = getID(strTarget);
	r = getID(strReference);
	if (t != r) {
		window.location = 'my-artworks-sort.php?ArtworkID=' + t + '&RefArtworkID=' + r;
	} 
}

function convertHSBtoRGB(hsb){

	// http://www.scriptographer.com/Forum/Help/Converting-HSB-color-values-to-R/
	var br = Math.round(hsb[2] / 100 * 255);
	if (hsb[1] == 0){
		return [br, br, br];
	} else {
		var hue = hsb[0] % 360;
		var f = hue % 60;
		var p = Math.round((hsb[2] * (100 - hsb[1])) / 10000 * 255);
		var q = Math.round((hsb[2] * (6000 - hsb[1] * f)) / 600000 * 255);
		var t = Math.round((hsb[2] * (6000 - hsb[1] * (60 - f))) / 600000 * 255);
		switch (Math.floor(hue / 60)){
			case 0: return [br, t, p];
			case 1: return [q, br, p];
			case 2: return [p, br, t];
			case 3: return [p, q, br];
			case 4: return [t, p, br];
			case 5: return [br, p, q];
		}
	}
}

var RGB = new Array(256);
var k = 0;
var hex = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F");
for (i = 0; i < 16; i++) {	
	for (j = 0; j < 16; j++) {		
		RGB[k] = hex[i] + hex[j];
		k++;
	}
}
var convertToHex = function(n) {
	return RGB[n];
}

var getRGBFromMouse = function(x,y) {

 	width = 150;
    radius = width/2;
    xCentre = width/2;
    yCentre = width/2;
    pi = Math.PI;
    
    if (y < width) {		
		dist = Math.sqrt(Math.pow(x-xCentre,2) + Math.pow(y-yCentre,2));
		angle = Math.atan2(y-yCentre,x-xCentre); // -pi to +pi
		
		hue = (angle + pi) / (2*pi);
		
		// From white at centre to pure hue at midpoint.
		saturation = (dist)/(radius/2);
		brightness = 1;
		
		// From pure hue at midpoint to black at edge.
		if (dist > radius/2) {
		    saturation = 1;
		    brightness = (radius-dist)/(radius/2);
		}
		
		// Outside of the colour wheel.
		if (dist > radius) {
			saturation = 1;
			brightness = 0;
		}
		
	} else {		
		hue = 0;
		saturation = 0;
		brightness = x/width;
	}
	
	rgb = convertHSBtoRGB([hue*360, saturation*100, brightness*100]);
	red = rgb[0]
	green = rgb[1];
	blue = rgb[2];

	//return '#' + convertToHex(red) + convertToHex(green) +  convertToHex(blue); 
	return 'rgb(' + red + ',' + green + ',' + blue + ')';
	// http://answers.yahoo.com/question/index?qid=20070623213746AA9s9VS
}

var showSelectedColour = function(e, divPreview, divSelected, objHidden) {
	showSelectedColourPreview(e,divPreview);
	divSelected.innerHTML = " \
					<table><tr> \
					<td style='padding:0px;'>&nbsp;&nbsp;</td> \
					<td style='padding:0px;' width='100%'>Custom colour:</td> \
					<td style='padding:0px;'>&nbsp;&nbsp;</td> \
					<td style='padding:0px;'><div class='colourCell' style='background-color:"
					+ divPreview.style.backgroundColor + "'></div></td> \
					<td style='padding:0px;'>&nbsp;&nbsp;</td> \
				</tr></table>";
	//divSelected.style.backgroundColor = divPreview.style.backgroundColor;	
	try {
		switch (divSelected) {
			case vWallColourSelected:
				hideCollapseDiv(divArtworkFull);
				showExpandDiv(divArtworkPreview);						
				showExpandDiv(imgWall);	
				vRoomSelected.innerHTML = strRoomLast;			
				divWall.style.backgroundColor = vWallColourCustom.style.backgroundColor;
				break;	
			case vFrameColourSelected:
				hideCollapseDiv(divArtworkFull);
				showExpandDiv(divArtworkPreview);						
				showExpandDiv(imgWall);		
				vRoomSelected.innerHTML = strRoomLast;		
				divArtworkResized.style.backgroundColor = vFrameColourCustom.style.backgroundColor;
				break;
			default:
				objHidden.value = divPreview.style.backgroundColor;
		}		
	} catch(error) {
		// vWallColourSelected, etc does not exist
	}		
	try {
		objHidden.value = divPreview.style.backgroundColor;
	} catch(error) {
		// objHidden does not exist
	}
	
}

var showSelectedColourPreview = function(e, divPreview) {
	var x = 50; var y = 50;
	if (document.all) { // if IE
		x = e.offsetX;
		y = e.offsetY;
		//alert ("offsetX=" + x + ", offsetY=" + y);
	} else { // if FireFox
		x = e.layerX;
		y = e.layerY;
		//alert ("layerX=" + e.layerX + ", layerY=" + e.layerY);
	}
	//alert ("x=" + e.offsetX + ", y=" + e.offsetY + ", colour=" + getRGBFromMouse(e.offsetX, e.offsetY));
	//div1.style.backgroundColor = getRGBFromMouse(e.offsetX, e.offsetY);	
	divPreview.style.backgroundColor = getRGBFromMouse(x, y);
}

var showDiv = function(obj) {
	obj.style.visibility = 'visible';
	//obj.style.position = 'static';
	//Effect.BlindDown(obj.id);	
}

var hideDiv = function(obj) {
	obj.style.visibility = 'hidden';
	//obj.style.position = 'absolute';
	//Effect.BlindUp(obj.id);
}

var validateKey = function(e) {
	return false;
	if(window.event) { // IE
		keynum = e.keyCode
	} else if(e.which) { // Netscape/Firefox/Opera
		keynum = e.which
	}
	keychar = String.fromCharCode(keynum)
	numcheck = /\d/
	if (!numcheck.test(keychar)) {
		alert ('Only numbers are allowed');
		//return false;
	}
	//return true;
}

var showExpandDiv = function(obj) {
	obj.style.visibility = 'visible';
	obj.style.position = 'static';
	
	// Force a redraw.  Without this, IE6 does not show the Room Wall after a reference to imgArtworkResized.width
	obj.style.display = "none";
	obj.style.display = "block";		
	//Effect.BlindDown(obj.id);	
}

var hideCollapseDiv = function(obj) {
	obj.style.visibility = 'hidden';
	obj.style.position = 'absolute';
	//Effect.BlindUp(obj.id);
}

var submitWithValidation = function() {
	
	if (validateEntityFields()) {	
		hideCollapseDiv(divOKCancel);
		hideCollapseDiv(divErrorAbove);	
		showExpandDiv(divPleaseWait);
		document.frmThis.submit();		
	} else {
		showExpandDiv(divErrorAbove);
		//alert('There is an error');
	}
}

var submitWithCheckboxToCommaDelimited = function(opt,objHidden) {
	str = '';
	for (var i = 0; i < opt.length; i++) {
	   if ((opt[i].selected) || (opt[i].checked)) {
	      str = str + ',' + opt[i].value;
	   }
	}	
	str = str.substring(1); // Remove the first dummy comma	
	objHidden.value = str;
	document.frmThis.submit();
}

var checkAll = function(opt,bool) {
	for (var i = 0; i < opt.length; i++) {
		opt[i].checked = bool;
	}
}

var ZZZemailFreeLabel = function(optSPARQCode,strURL) {
	if (optSPARQCode.selected || optSPARQCode.checked) {
	} else {
		alert('SPARQCode is required for free labels.  Please check the SPARQCode checkbox.');
	}
}

var showSearchSelectedBackupZZZ = function(divSelected, objHidden, strValue, strLabel) {
	divSelected.innerHTML = strLabel;
	objHidden.value = strValue;
}

var strFrameColourLast; /* Somehow IE7 shows frame at the bottom even when No Frame is selected. */
var strRoomLast = "&nbsp;&nbsp;Living Room";

var showSearchSelected = function(divSelected, objHidden, strValue, strLabel) {

	//alert('This site is currently under maintainence.  003'); 
	divSelected.innerHTML = strLabel;
	
	try {
		switch (divSelected) {
			case vRoomSelected:
				switch (strValue) {
					case "-1": // No Room
						showExpandDiv(divArtworkFull);
						hideCollapseDiv(divArtworkPreview);
						hideCollapseDiv(imgWall);	
						divWatermark.style.visibility = 'visible';						
						//hideCollapseDiv(divViewControlRoomSettings);
						break;
					default:						
						hideCollapseDiv(divArtworkFull);
						showExpandDiv(divArtworkPreview);						
						showExpandDiv(imgWall);		
						divWatermark.style.visibility = 'hidden';	
						strRoomLast = strLabel;				
						//showExpandDiv(divViewControlRoomSettings);	
						switch (strValue) {
							case "100":
								imgWall.src = "images/admin/preview-room-living.gif";
								break;	
							case "50":
								imgWall.src = "images/admin/preview-room-bed.gif";							
								break;
							case "25":
								imgWall.src = "images/admin/preview-room-office.gif";							
								break;
							default:
								imgWall.src = "images/admin/preview-room-empty.gif";								
						}
				}
				break;	
			case vFrameSizeSelected:
				hideCollapseDiv(divArtworkFull);
				showExpandDiv(divArtworkPreview);						
				showExpandDiv(imgWall);	
				vRoomSelected.innerHTML = strRoomLast;			
				switch (strValue) {
					case "0": // No frame
						strFrameColourLast = divArtworkResized.style.backgroundColor;
						divArtworkResized.style.backgroundColor = "transparent";						
						//hideCollapseDiv(divViewControlFrameSettings);
						break;
					default:
						divArtworkResized.style.backgroundColor = strFrameColourLast;
						//showExpandDiv(divViewControlFrameSettings);	
				}			
				//alert(imgArtworkResized.width + (strValue*2*4));
				divArtworkResized.style.width = imgArtworkResized.width + (strValue*2*4);
				divArtworkResized.style.height = imgArtworkResized.height + (strValue*2*4);				
				imgArtworkResized.style.left = (strValue*4);
				imgArtworkResized.style.top = (strValue*4);					
				break;
			case vFrameColourSelected:
				hideCollapseDiv(divArtworkFull);
				showExpandDiv(divArtworkPreview);						
				showExpandDiv(imgWall);		
				vRoomSelected.innerHTML = strRoomLast;			
				divArtworkResized.style.backgroundColor = strValue;
				break;				
			case vWallColourSelected:
				hideCollapseDiv(divArtworkFull);
				showExpandDiv(divArtworkPreview);						
				showExpandDiv(imgWall);		
				vRoomSelected.innerHTML = strRoomLast;		
				divWall.style.backgroundColor = strValue;
				break;								
			default:
				objHidden.value = strValue;			
		}
	} catch (error) {
		// vRoomSelected, etc does not exist
	}
	try {	
		objHidden.value = strValue;
	} catch (error) {
		// objHidden does not exist
	}
}

var showSearchSelectedCustom = function(divSelected, objHidden, strValue, strPre, strPost) {
	var patt1 = new RegExp("^(-){0,1}[0-9]*(\\.)*[0-9]*$","g");
	if (!patt1.match(strValue)) {
		//strLabel = 'bad5';
	} else {
		divSelected.innerHTML = "&nbsp;&nbsp;" + strPre + strValue + strPost + "<img src=images/admin/ish12.gif align=bottom/>" + "&nbsp;&nbsp;"; //TODO: This should not be hardcoded.
		try {
			objHidden.value = strValue;
		} catch (error) {
			// objHidden does not exist
		}
	}
}

var timerCustom;
var deltaCustom = 0;
var resetDeltaCustom = function(valSign, divCustom) {
	deltaCustom = 1;
	addCustomByDelta(valSign, divCustom);
}

var addCustomByDelta = function(valSign, divCustom) {
	minCustom = 0;
	maxCustom = 1000000;
	x = divCustom.innerHTML*1 + deltaCustom*valSign;
	if ((x < minCustom) && (valSign < 0)) {
		divCustom.innerHTML = minCustom;
		deltaCustom = 0;
		clearTimeout(timerCustom);		
	} else if ((x > maxCustom) && (valSign > 0)) {
		divCustom.innerHTML = maxCustom;
		deltaCustom = 0;
		clearTimeout(timerCustom);
	} else {
		divCustom.innerHTML = x;
		deltaCustom = Math.round(deltaCustom * 2.0);
		timerCustom=setTimeout("addCustomByDelta(" + valSign + "," + divCustom.id + ");",200); // Double delta every second (1000 ms = 1s)
	}
}

var stopTimerCustom = function(divSelected, objHidden, strValue, strPre, strPost) {
	clearTimeout(timerCustom);
	showSearchSelectedCustom(divSelected, objHidden, strValue, strPre, strPost);
}


var showMenuItemDetail = function(divDetail, htmDetail, strLabel, divCustom, isCustom) {
	
	switch (strLabel) {
		case "Colour":
		case "Frame Colour":
		case "Wall Colour":
		case "Width":
		case "Height":
		case "Price":	
		//case "Frame Size":
			if (isCustom == false) {
				hideCollapseDiv(divDetail);
				divCustom.style.backgroundColor = "white";
			} else {
				if (divDetail.innerHTML == "") divDetail.innerHTML = htmDetail;	
				showExpandDiv(divDetail);
				divCustom.style.backgroundColor = "#FFDD00"; //TODO: Hardcoding!!!
			}
			break;
		default:
			divDetail.innerHTML = htmDetail;
			showExpandDiv(divDetail);
	}
}

var submitOnEnter = function(myfield,e)
{
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;
	
	if (keycode == 13)
	   {
	   myfield.form.submit();
	   //submitWithValidation();
	   return false;
	   }
	else
	   return true;
}

var submitOnEnterWithValidation = function(myfield,e)
{
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;
	
	if (keycode == 13)
	   {
	   //myfield.form.submit();
	   submitWithValidation();
	   return false;
	   }
	else
	   return true;
}



var ZZZgoToURL = function(strURL)
{  
	Dialog.confirm('&nbsp;<br>This artwork contains nudity or other adult materials.  Are you legally an adult?', {
		width:300,
		okLabel: 'Yes',
		cancelLabel: 'No',
		buttonClass: 'myButtonClass',
		id: 'myDialogId',              
		ok:function(win) {
			self.location = strURL;
		},
		cancel:function(win) {
			debug('cancel confirm panel');
		}
	});
}

var showCensored = function()
{
	hideCollapseDiv(divCensored);
	showExpandDiv(divArtworkFull);
	showExpandDiv(divViewControl);
	divWatermark.style.visibility = 'visible';
}
