var diaObjects = new Array();
var angleStep = 22.5;
var imageSetAuthor = '';

var imageSetAuthors = new Array();
imageSetAuthors[0]='Don-Giannatti';
imageSetAuthors[1]='antic_eye';
imageSetAuthors[2]='Sound-engineering';
imageSetAuthors[3]='Nikon';

imageSetCategories = new Array();
imageSetCategories[0] = 'Backgrounds';
imageSetCategories[1] = 'Cameras';
imageSetCategories[2] = 'Persons';
imageSetCategories[3] = 'Light Sources';
imageSetCategories[4] = 'Light Modifiers';
imageSetCategories[5] = 'Bouncing/Reflecting';
imageSetCategories[6] = 'Props';
imageSetCategories[7] = 'Accessories';
imageSetCategories[8] = 'Sound Engineering';

/**** IE Detection *****/
var isIE = false;
var browser=navigator.appName;
var b_version=navigator.appVersion;
var version=parseFloat(b_version);
if (browser=="Microsoft Internet Explorer") {
	isIE = true;
}

function sortDiaObjects(a, b) {
	a = a[0];
	b = b[0];
	return ((a < b) ? -1 : ((a > b) ? 1 : 0));
}

function selectImageSet(category) {
	for(var key in imageSetAuthors) {
		diaObjects[imageSetAuthors[key]] = null;
		diaObjects[imageSetAuthors[key]] = new Array();
	}
	
	switch(category) {
	case 'Light Modifiers':
                diaObjects['Don-Giannatti']['Gobo-soft-silk'] = new Array();
                diaObjects['Don-Giannatti']['Home-depot-shower-curtain'] = new Array();
                diaObjects['Don-Giannatti']['Umbrella-reflective'] = new Array();
                diaObjects['Don-Giannatti']['Umbrella-shoot-thru'] = new Array();
                diaObjects['Don-Giannatti']['Softbox-horizontal'] = new Array();
                diaObjects['Don-Giannatti']['Softbox-strip'] = new Array();
                diaObjects['Don-Giannatti']['Softbox-vertical'] = new Array();
                diaObjects['Don-Giannatti']['Beauty-dish'] = new Array();
                diaObjects['Don-Giannatti']['Umbrella-Zebra-with-strobe'] = new Array();
                diaObjects['Don-Giannatti']['Umbrella-large-with-strobe'] = new Array();
                diaObjects['Don-Giannatti']['Umbrella-on-boom-with-strobe'] = new Array();
                diaObjects['Don-Giannatti']['Umbrella-small-with-strobe'] = new Array();
                diaObjects['Don-Giannatti']['Umbrella-tipped-medium-with-strobe'] = new Array();
                diaObjects['antic_eye']['Beauty-dish'] = new Array();
                diaObjects['antic_eye']['Umbrella-gold'] = new Array();
                diaObjects['antic_eye']['Umbrella-silver'] = new Array();
                diaObjects['antic_eye']['Umbrella-white'] = new Array();
                diaObjects['antic_eye']['Snoot'] = new Array();
                diaObjects['antic_eye']['Softbox'] = new Array();
                diaObjects['antic_eye']['Striplight'] = new Array();
                diaObjects['antic_eye']['Octabox'] = new Array();
		break;

	case 'Backgrounds':
                diaObjects['Don-Giannatti']['Backdrop'] = new Array();
                diaObjects['antic_eye']['Brick-wall'] = new Array();
                diaObjects['antic_eye']['Canvas'] = new Array();
		break;

	case 'Cameras':
                diaObjects['antic_eye']['Camera'] = new Array();
                diaObjects['Don-Giannatti']['Camera-Short-Lens'] = new Array();
		diaObjects['Nikon']['Camera'] = new Array();
		diaObjects['Nikon']['Camera-with-Flashgun'] = new Array();
		break;

	case 'Persons':
                diaObjects['Don-Giannatti']['Model-sitting'] = new Array();
                diaObjects['Don-Giannatti']['Model-standing'] = new Array();
                diaObjects['antic_eye']['Person'] = new Array();
		diaObjects['Nikon']['Model'] = new Array();
		break;

	case 'Light Sources':
                diaObjects['Don-Giannatti']['Home-depot-double-lamp'] = new Array();
                diaObjects['Don-Giannatti']['Home-depot-lamp'] = new Array();
                diaObjects['Don-Giannatti']['Home-depot-lamp-bar'] = new Array();
                diaObjects['Don-Giannatti']['Flashgun'] = new Array();
                diaObjects['Don-Giannatti']['Flashgun-on-stand'] = new Array();
		diaObjects['antic_eye']['Light-torch'] = new Array();
                diaObjects['antic_eye']['Lamp'] = new Array();
                diaObjects['antic_eye']['Flashgun'] = new Array();
		diaObjects['Nikon']['Flashgun-on-stand'] = new Array();
		diaObjects['Nikon']['Flashgun-on-stand-pointing-up'] = new Array();
		diaObjects['Nikon']['Flashgun-pointing-down'] = new Array();
		break;

	case 'Bouncing/Reflecting':
                diaObjects['Don-Giannatti']['Reflector-silver'] = new Array();
                diaObjects['Don-Giannatti']['V-Card-90-degrees'] = new Array();
                diaObjects['Don-Giannatti']['V-Card-90-degrees-reverse'] = new Array();
                diaObjects['Don-Giannatti']['V-Card-90-degrees-vlight'] = new Array();
                diaObjects['Don-Giannatti']['V-Card-90-degrees-vlight-reverse'] = new Array();
                diaObjects['Don-Giannatti']['V-Card-90-less-angle'] = new Array();
                diaObjects['Don-Giannatti']['V-Card-90-minus-angle'] = new Array();
                diaObjects['Don-Giannatti']['V-Card-90-small-90-degrees'] = new Array();
                diaObjects['Don-Giannatti']['V-Card-90-small-less-angle'] = new Array();
                diaObjects['Don-Giannatti']['V-Card-90-small-minus-angle'] = new Array();
                diaObjects['antic_eye']['Reflector-gold'] = new Array();
                diaObjects['antic_eye']['Reflector-silver'] = new Array();
                diaObjects['antic_eye']['Reflector-white'] = new Array();
		break;

	case 'Sound Engineering':
                diaObjects['Sound-engineering']['Disk-jockey'] = new Array();
                diaObjects['Sound-engineering']['Headphones'] = new Array();
                diaObjects['Sound-engineering']['LP'] = new Array();
                diaObjects['Sound-engineering']['Mic-1'] = new Array();
                diaObjects['Sound-engineering']['Mic-2'] = new Array();
                diaObjects['Sound-engineering']['Mic-20'] = new Array();
                diaObjects['Sound-engineering']['Mic-3'] = new Array();
                diaObjects['Sound-engineering']['Mic-30'] = new Array();
                diaObjects['Sound-engineering']['Mic-50'] = new Array();
                diaObjects['Sound-engineering']['Mixer'] = new Array();
                diaObjects['Sound-engineering']['Turntable'] = new Array();
		break;

	case 'Accessories':
                diaObjects['Don-Giannatti']['Boom'] = new Array();
		break;

	case 'Props':
		diaObjects['Nikon']['Sofa'] = new Array();
		break;
	}

	for(var key in diaObjects) {
 		var j=0;
		for(var key2 in diaObjects[key]) {
			for(var i=0; i<360; i=i+angleStep) {
				diaObjects[key][key2][j] = i+'.png';
				j++;
			}
		}
	}
}

function populateImageSetSelector() {
	selector = document.getElementById('imageSetSelector');
        for(var key in imageSetCategories) {
                selector.options[key] = new Option(imageSetCategories[key], imageSetCategories[key]);
        }
}

function populateAddObjectSelector(category) {
	selectImageSet(category);
	selector = document.getElementById('addObjectSelector');

	while(selector.hasChildNodes()){
		selector.removeChild(selector.childNodes[0])
	}

	selector.options[0] = new Option('-- Select an object to add --', '');

	var i=0;
	var selectorObjectList = new Array();
	for(var key in diaObjects) {
		for(var key2 in diaObjects[key]) {
			selectorObjectList[i] = [key2+ ' ('+key+')', key+'/'+key2];
			i++;
		}
	}

	selectorObjectList.sort(sortDiaObjects);	

	for(var i=0;i<selectorObjectList.length; i++) {
		selector.options[i+1] = new Option(selectorObjectList[i][0].replace(/-/, " "), selectorObjectList[i][1]);
	}
}

function setOpacity(obj, opacity) { 
	opacity = (opacity == 100)?99.999:opacity; 

	// ie/Win 
	obj.style.filter = "alpha(opacity:"+opacity+")"; 

	// Safari<1.2, Konqueror 
	obj.style.KHTMLOpacity = opacity/100; 

	// Older Mozilla and Firefox 
	obj.style.MozOpacity = opacity/100; 

	// Safari 1.2, newer Firefox and Mozilla, CSS3 
	obj.style.opacity = opacity/100; 
}

function addElement(object,layerLevel,top,left,angle) {
	if(object.match(/\//)) {
		var objectSplitted = object.split('/');
		objName = objectSplitted[1];
		imageSetAuthor = objectSplitted[0];
	} else { objName = object;}
	
	if(typeof objName == "undefined" || objName == "") return false;
	if(typeof layerLevel == "undefined") layerLevel = 21;
	if(typeof angle == "undefined") angle = 0;

        var container = document.getElementById('diagram_container');
        var initTop = container.offsetTop;
	var initLeft = container.offsetLeft;

	var ni = document.getElementById('diagram_container');
	var numi = document.getElementById('theValue');
	var num = (document.getElementById('theValue').value -1)+ 2;
	numi.value = num;
	
	var newdiv = document.createElement('div');
	var divIdName = imageSetAuthor+'.'+objName+'.'+num;
	newdiv.setAttribute('id',divIdName);

	if(!isIE) {
		newdiv.setAttribute('onMouseOver', "setOpacity(document.getElementById('nav"+divIdName+"'),100); return true;");
		newdiv.setAttribute('onMouseOut',"setOpacity(document.getElementById('nav"+divIdName+"'),0); return true;");
		newdiv.setAttribute('class','VEPart');
		if(typeof top != "undefined" && typeof left != "undefined") {
			newdiv.setAttribute('style','z-index:'+layerLevel+';top:'+top+'px;left:'+left+'px'); 
		} else newdiv.setAttribute('style','z-index:'+layerLevel+';top:'+initTop+'px;left:'+initLeft+'px');
	} else {
		newdiv.onmouseover = new Function("setOpacity(document.getElementById('nav"+divIdName+"'),100);"); 
		newdiv.onmouseout = new Function("setOpacity(document.getElementById('nav"+divIdName+"'),0);")
		newdiv.setAttribute('className','VEPart');
		if(typeof top != "undefined" && typeof left != "undefined") {
			//newdiv.style.setAttribute('z-index',layerLevel);
			newdiv.style.zIndex=layerLevel;
			newdiv.style.setAttribute('top', top+'px');
			newdiv.style.setAttribute('left', left+'px');
		} else {
			//newdiv.style.setAttribute('z-index', layerLevel); 
			newdiv.style.zIndex=layerLevel;
		}
	}
	var objFile = angle+'.png'; 
	
	newdiv.innerHTML = '<div class="navigationBar" id="nav'+divIdName+'"><div class="move" title="Move '+ objName +'"><span></span></div><div class="rotate_ccw" title="Rotate CCW'+ objName +'" onClick="rotateElement(\'img'+ divIdName +'\', true)"><span></span></div><div class="rotate_cw" title="Rotate CW'+ objName +'" onClick="rotateElement(\'img'+ divIdName +'\')"><span></span></div><div class="layers" title="Switch  '+ objName +'\'s layer level" onClick="zIndexChange(\''+ divIdName +'\')"><span></span></div><div class="duplicate" title="Duplicate '+ objName +'" onClick="addElement(\''+objName+'\')"><span></span></div><div class="delete" title="Delete '+ objName +'" onClick="removeElement(\''+divIdName+'\')"><span></span></div><div class="clear"></div></div><img src="/extension/ezlightingdiagram/design/standard/images/diaObjects/'+ imageSetAuthor  +'/'+ objName + '/' + objFile + '" border="0" class="VEMover" id="img'+ divIdName +'" />';
	
	ni.appendChild(newdiv);
	
	jcl.LoadBehaviour(divIdName, MoverBehaviour);
	
	selector = document.getElementById('addObjectSelector');
	selector.options[selector.selectedIndex].selected = false;
	selector.selectedIndex = 0;
	selector.options[selector.selectedIndex].selected = true;

}

function generateObjectList(type) {
	if (typeof type == "undefined" || type == "") {
		exit;
  	}
	var objList = "";
	var container = document.getElementById('diagram_container');
	var canvas = document.getElementById('diagram_canvas');
        objList = container.id+':'+canvas.offsetTop+':'+canvas.offsetLeft+":"+0+":"+0+"|";
	var allPageTags=container.getElementsByTagName("div"); 
 	for (i=0; i<allPageTags.length; i++) { 
 		if (allPageTags[i].className=='VEPart') { 
			var result = getImageCurrentAngle(document.getElementById('img'+allPageTags[i].id).src);
			var angle = result[0];
			if(!isIE) {
				objList = objList + allPageTags[i].id+':'+allPageTags[i].offsetTop+':'+allPageTags[i].offsetLeft+":"+angle+":"+parseInt(allPageTags[i].style.zIndex) +"|";
			} else {
				objList = objList + allPageTags[i].id+':'+allPageTags[i].offsetTop+':'+allPageTags[i].offsetLeft+":"+angle+":"+parseInt(allPageTags[i].style.zIndex) +"|";
			}
 		} 
 	} 
	if(type == 'jpeg') {
		if(confirm("You have chosen to generate JPEG. Did you know that for diagrams PNG are better quality and smaller size? And they can be used the same way as JPEG. Do you still want to generate a JPEG?")) document.location.href='/lightingdiagram/genJPEG?objList='+escape(objList);
	} else if(type == 'png') {
		document.location.href='/lightingdiagram/genPNG?objList='+escape(objList);;
	} else {
		document.location.href=document.location.href.replace(/\?.*/, "") +"?objList="+escape(objList);
	}
}

function loadObjects(objListString,notify) {
	if (objListString == "home") {
		//objListString = unescape('diagram_container%3A269%3A377%3A0%3A0%7Cantic_eye.Canvas.1%3A279%3A421%3A0%3A21%7CNikon.Model.2%3A428%3A685%3A22.5%3A21%7CDon-Giannatti.Camera-Short-Lens.3%3A557%3A694%3A0%3A21%7CNikon.Flashgun-on-stand.4%3A487%3A500%3A45%3A21%7CDon-Giannatti.Umbrella-shoot-thru.5%3A436%3A556%3A45%3A21%7CNikon.Flashgun-on-stand.6%3A323%3A813%3A247.5%3A21%7C');
	        objListString = unescape('diagram_container%3A413%3A531%3A0%3A0%7C');
	}else if(objListString == "iframe") {
		objListString = unescape('diagram_container%3A56%3A8%3A0%3A0%7Cantic_eye.Canvas.1%3A67%3A33%3A0%3A21%7CNikon.Model.2%3A246%3A308%3A22.5%3A21%7CDon-Giannatti.Camera-Short-Lens.3%3A367%3A314%3A0%3A21%7CNikon.Flashgun-on-stand.4%3A298%3A130%3A45%3A21%7CDon-Giannatti.Umbrella-shoot-thru.5%3A247%3A184%3A45%3A21%7CNikon.Flashgun-on-stand.6%3A152%3A414%3A247.5%3A21%7C');
	}
	if (typeof notify == "undefined") {
		notify = false;
	}
	// For back compatibility
	objListString=objListString.replace(/Flashlight/, 'Light-torch');

	var objListSplitted = objListString.split("|");
	var objParms = new Array();
	for(var key in objListSplitted) {
		var objParmsString = objListSplitted[key];
		if(objParmsString.length != 0) {
			objParms = objParmsString.split(":");
			objID = objParms[0].split(".");
			if(objID[0] != "diagram_container") {	
				var oldImageSetAuthor = imageSetAuthor
				imageSetAuthor = objID[0];
				addElement(objID[1], objParms[4], objParms[1], objParms[2], objParms[3]);
				imageSetAuthor = oldImageSetAuthor;
			}
		}
	}

	if (notify) alert('Still beta. This URL can not work in the stable version.\n\nYou can now bookmark this URL and reload your diagram later or share your lighting setup with other person by sending them the page URL:\n'+document.location.href);
}

function zIndexChange(objName) {
	var object = document.getElementById(objName);
	object.style.zIndex = parseInt(object.style.zIndex) + 10;
	if(parseInt(object.style.zIndex) > 21) object.style.zIndex = 1;
}

function removeElement(divNum) {
	var d = document.getElementById('diagram_container');
	var olddiv = document.getElementById(divNum);
	d.removeChild(olddiv);
}

function isInteger(s) {
	return (s.toString().search(/^-?[0-9]+$/) == 0);
}

function getImageCurrentAngle(imgURL) {
	var imgSplitted = imgURL.split("/");
        var imgFilename = imgSplitted[imgSplitted.length-1];
        var imgFilenameSplitted = imgFilename.split(".");
        var angle = imgFilenameSplitted[0];
	if(imgFilenameSplitted.length>2) var angle = imgFilenameSplitted[0] + '.' + imgFilenameSplitted[1];
                else var angle = imgFilenameSplitted[0];
	angle = angle/100*100;
	var result = new Array();
	result[0] = angle;
	result[1] = imgSplitted;
	return result;
}

function rotateElement(image,reverse) {
	if(typeof reverse == "undefined") reverse=false;
	var img = document.getElementById(image);
	var result = getImageCurrentAngle(img.src);
	var angle = result[0];
	var imgSplitted = result[1];
	
	if(!reverse) {
		angle = angle + angleStep;
		if(angle>=360) angle=0;
	} else {
		angle = angle - angleStep;
		if(angle<0) angle=360 - angleStep;
	}
	
	imgSplitted[imgSplitted.length-1] = angle + '.png';
	
	var newImgSrc = imgSplitted.join("/");
	img.src = newImgSrc;
}

