// This is the script file for study site photo management

var ua = navigator.userAgent.toLowerCase();

var isOpera = (ua.indexOf('opera') > -1);
var isSafari = (ua.indexOf('safari') > -1);
var isGecko = (!isOpera && !isSafari && ua.indexOf('gecko') > -1);
var isIE = (!isOpera && ua.indexOf('msie') > -1); 
var isIEMac  = (isIE && ua.indexOf('mac') > -1);

var panels = new Array();

var my_bg = new Image();

/* This code from Yahoo! gives us the resize functionality */

YAHOO.example.DDResize = function(panelElId, handleElId, sGroup, config) {
    if (panelElId) {
        this.init(panelElId, sGroup, config);
        this.handleElId = handleElId;
        this.setHandleElId(handleElId);
        this.logger = this.logger || YAHOO;
    }
};

YAHOO.extend(YAHOO.example.DDResize, YAHOO.util.DragDrop);

YAHOO.example.DDResize.prototype.onMouseDown = function(e) {
    var panel = this.getEl();
    this.startWidth = panel.offsetWidth;
    this.startHeight = panel.offsetHeight;

    this.startPos = [YAHOO.util.Event.getPageX(e),
                     YAHOO.util.Event.getPageY(e)];
};

YAHOO.example.DDResize.prototype.onDrag = function(e) {
    var newPos = [YAHOO.util.Event.getPageX(e),
                  YAHOO.util.Event.getPageY(e)];

    var offsetX = newPos[0] - this.startPos[0];
    var offsetY = newPos[1] - this.startPos[1];

    var newWidth = Math.max(this.startWidth + offsetX, 10);
    var newHeight = Math.max(this.startHeight + offsetY, 10);

    var panel = this.getEl();
    panel.style.width = newWidth + "px";
    panel.style.height = newHeight + "px";
};

function SlideShow(type, index, total) {

	// turn off all of the images and text boxes and show selected
	
	var d_id = '';
	var i_id = '';
	
	var display_type = '';
	
	for (var i = 0; i < total; i++) {
	
		i_id = type + '-image-' + i;
		d_id = type + '-description-' + i;
		
		if (i == index) {
			display_type = 'block';
		} else {
			display_type = 'none';
		}

		document.getElementById(i_id).style.display = display_type;
		document.getElementById(d_id).style.display = display_type;

	}

}


function get_select_box_value(element_id) {

	var e = document.getElementById(element_id);
	
	return e.options[e.selectedIndex].value;
	
}

function set_select_box_value(element_id, element_value) {

	var e = document.getElementById(element_id);
	
	for (var i = 0; i < e.options.length; i++) {
		if (e.options[i].value == element_value) {
			e.selectedIndex=i;
		}
	}

}

function add_login_form_behavior() {

	if (!document.getElementById) { return; }
	
	var username_field = document.getElementById('login-username');
	var password_field = document.getElementById('login-password');
	
	if (!username_field || !password_field) { return; }
	
	YAHOO.util.Event.addListener(username_field, 'focus', 
		function() {
			if (this.value == "Username" || this.value == "Логин") {
				this.originalvalue = this.value;
				this.value = "";
			}
		}
	); 

	YAHOO.util.Event.addListener(username_field, 'blur', 
		function() {
			if (this.value == "") {
				this.value = this.originalvalue;
			}
		}
	); 

	YAHOO.util.Event.addListener(password_field, 'focus', 
		function() {
			if (this.value == "gl-test-password") {
				this.value = "";
			}
		}
	); 

	YAHOO.util.Event.addListener(password_field, 'blur', 
		function() {
			if (this.value == "") {
				this.value = "gl-test-password";
			}
		}
	); 

}

function add_page_chapter_tab_rollovers() {

	if (!document.getElementById) { return; }
	
	var container = document.getElementById('page-chapter-tab-content');

	var imgs = container.getElementsByTagName('IMG');

	var orig = '';
	var over = '';

	for (var i = 0; i < imgs.length; i++) {
	
		imgs[i].over = '/images/tabs/' + (i+1) + '.png';
		imgs[i].orig = imgs[i].src;
		
		YAHOO.util.Event.addListener(imgs[i], 'mouseover', 
			function() {
				this.src = this.over;
			}
		); 
	
		YAHOO.util.Event.addListener(imgs[i], 'mouseout', 
			function() {
				this.src = this.orig;
			}
		); 
	
	}

}



/* Load/Unload event examples 

YAHOO.util.Event.addListener(window, 'load', 
	function() {
		alert('hello');
	}
); 

YAHOO.util.Event.addListener(window, 'unload', 
	function() {
		alert('goodbye');
	}
); 

*/

/*


function convert_to_decimal(field) {

	if (field.value.match(/NSEW'"°/)){
	
		// this doesn't appear to be a decimal degree

		var neg = 0;
		
		if (field.value.match(/SW/)) {
			neg = 1;
		}
		
		// now we need to parse the deg/min/sec parts
		
		var re = /\d+?( |°)\d+?/;
		
		var degs = parseFloat(deg);
		if (String(deg).charAt(0) == '-') {
			neg = 1;
		}
		var mins = parseFloat(min);
		var secs = parseFloat(sec);
		var decimal;
		if (neg != 1) {
			decimal = degs + (mins / 60) + (secs / 3600);
		} else if (neg == 1) {
			decimal = degs - (mins / 60) - (secs / 3600);
		} else {
			decimal = -9999; // impossible
		}
		dest.value = decimal;

	}

}
*/

/*
function InitializeOptions(first, last, pad) {
	var index = 0;
	for (var i = 0, j = first; j <= last; i++, j++) {
		var text = j;
		var length = String(text).length;
		while (length < pad) {
			text = "0" + text;
			length++;
		}
		document.write('<option');
		if (i == 0) {
			document.write(' selected');
		}
		document.write('>' + text + '</option>\n');
	}
}


function DMSChanged() {
	var deg;
	var min;
	var sec;
	var sign;

	deg = document.form.latitudeDegrees[document.form.latitudeDegrees.selectedIndex].text;
	min = document.form.latitudeMinutes[document.form.latitudeMinutes.selectedIndex].text;
	sec = document.form.latitudeSeconds[document.form.latitudeSeconds.selectedIndex].text;
	sign = document.form.latitudeDirection[document.form.latitudeDirection.selectedIndex].value;

	SetDecimal(document.form.latitudeDecimal, sign*deg, min, sec);

	deg = document.form.longitudeDegrees[document.form.longitudeDegrees.selectedIndex].text;
	min = document.form.longitudeMinutes[document.form.longitudeMinutes.selectedIndex].text;
	sec = document.form.longitudeSeconds[document.form.longitudeSeconds.selectedIndex].text;
	sign = document.form.longitudeDirection[document.form.longitudeDirection.selectedIndex].value;
	SetDecimal(document.form.longitudeDecimal, sign*deg, min, sec);
}

function SetDMS(destDirection, destDegrees, destMinutes, destSeconds, dec) {
	var deg;
	var min;
	var sec;

	if (dec >= 0) {
		destDirection.selectedIndex = 0;
	} else {
		destDirection.selectedIndex = 1;
		dec = -dec;
	}
	deg = Math.floor(dec);
	dec = dec - deg;
	dec = dec * 60;
	min = Math.floor(dec);
	dec = dec - min;
	dec = dec * 60;
	sec = Math.round(dec);
	if (sec == 60) {
		min++;
		sec = 0;
		if (min == 60) {
			deg++;
			min = 0;
		}
	}
	destDegrees.selectedIndex = deg;
	destMinutes.selectedIndex = min;
	destSeconds.selectedIndex = sec;
}

function DecimalChanged() {
	var dec;

	dec = document.form.latitudeDecimal.value;
	if (dec > 90) {
		document.form.latitudeDecimal.value = 90;
		dec = 90;
	} else if (dec < -90) {
		document.form.latitudeDecimal.value = -90;
		dec = -90;
	}
	SetDMS(document.form.latitudeDirection,
	       document.form.latitudeDegrees,
	       document.form.latitudeMinutes,
	       document.form.latitudeSeconds,
	       dec);

	dec = document.form.longitudeDecimal.value;
	if (dec > 90) {
		document.form.longitudeDecimal.value = 90;
		dec = 90;
	} else if (dec < -90) {
		document.form.longitudeDecimal.value = -90;
		dec = -90;
	}
	SetDMS(document.form.longitudeDirection,
	       document.form.longitudeDegrees,
	       document.form.longitudeMinutes,
	       document.form.longitudeSeconds,
	       dec);
}
*/



function create_new_panel() {

	var cnt, p, e, new_panel, panel_content, new_info, panel_info_content, new_confirm, panel_confirm_delete_content;
	
	cnt = panels.length + 1;
	
	// set up the new panel object
	
	p = new Object();
	
	p.pid = 'panel' + cnt;
	
	p.pibid = 'info' + cnt;
	
	p.pxbid = 'close' + cnt;
	
	p.hid = 'handle' + cnt;
	
	p.iid = 'input' + cnt;
	
	p.did = 'dialog' + cnt;
	
	p.dnid = 'name' + cnt;

	p.ddid = 'desc' + cnt;

	p.duid = 'url' + cnt;

	p.cdcid = 'url' + cnt;

	p.dd = new YAHOO.example.DDResize(p.pid, p.hid, "panelresize");
	
	p.dd2 = new YAHOO.util.DD(p.pid, "paneldrag");
	
	p.dd2.addInvalidHandleId(p.hid); 	// this makes the handle usable for drag and drop

	// add this panel to the html content
	
	panel_content = '<img src="/images/icons/cancel.png" onclick="delete_panel(this);" class="panel-delete-button" id="' + p.pxbid + '"> <img src="/images/icons/information.png" class="panel-info-button"  id="' + p.pibid + '" onclick="show_info_panel(' + p.did + ')"> <div id="' + p.hid + '" class="panelHandle"><' + '/div>';
	
	panel_info_content = ''
	+ '	<div class="hd">Site Area Information</div>'
	+ '	<div class="bd">'
	+ '		<form>'
	+ '			<label for="' + p.dnid + '">Name:</label> <input type="text" name="name" size="10" id="' + p.dnid + '" value=""><br>'
	+ '			<label for="' + p.ddid + '">Description:</label> <input type="text" name="description" size="15" id="' + p.ddid + '" value=""><br>'
	+ '			<label for="' + p.duid + '">URL:</label> <input type="text" name="name" size="15" id="' + p.duid + '" value="">'
	+ '		</form>'
	+ '	</div>'
	+ '';
	

	// need to add the info link to a form that saves data in the panel object
	// need to add the delete link to a popup that says are you sure
	// need a new function to save these things and...
	// need a way to instantiate the new ones.
	
	new_panel = document.createElement('div');
	new_panel.id = p.pid;
	new_panel.className = 'panelArea';
	new_panel.innerHTML = panel_content;
	
	document.getElementById('studysiteimage').appendChild(new_panel);

	new_info = document.createElement('div');
	new_info.id = p.did;
	// new_info.className = 'dialog';
	
	new_info.innerHTML = panel_info_content;
	
	document.getElementById('studysiteimage').appendChild(new_info);
	
	//  buttons : [ { text:"Submit", handler:handleSubmit, isDefault:true },
	//			  { text:"Cancel", handler:handleCancel } ]

	// Instantiate the Dialog
	
	console.log(p.did);
	
	p.dl = new YAHOO.widget.Dialog(p.did, 
						{ width : "300px",
						  fixedcenter : true,
						  visible : false, 
						  constraintoviewport : true
						 } );
	
	p.dl.render();

	YAHOO.util.Event.addListener(p.pibid, "click", p.dl.show, p.did, true);

	// Instantiate the Dialog 

	p.cdc = new YAHOO.widget.SimpleDialog("simpledialog1", 
							 { width: "300px",
							fixedcenter: true,
							visible: false,
							draggable: false,
							close: true,
							text: "Are you sure you want to delete this panel?",
							icon: YAHOO.widget.SimpleDialog.ICON_HELP,
							constraintoviewport: true,
							buttons: [ { text:"Yes", handler:handleYes, isDefault:true },
									  { text:"No",  handler:handleNo } ]
							} );


	var handleYes = function() {
		alert("You clicked yes!");
		this.hide();
	};
	var handleNo = function() {
		this.hide();
	};
	
	p.cdc.setHeader("Confirmation");
	
	// Render the Dialog
	p.cdc.render(document.body);
	
	// done with this, push the panel onto the stack for later reference
	
	panels.push(p);

}

function delete_parent(element) {

	var parent = element.parentNode;
	var grandparent = parent.parentNode;
	grandparent.removeChild(parent);

}

function array_remove(a, item) {

	new_array = new Array();
	for (var i =  0; i < a.length; i++) {
		if (a[i] != item) {
			new_array[(new_array.length)] = a[i];
		}
	}

	a = new Array();
	for (h = 0; h < new_array.length; h++) {
		a[h] = new_array[h];
	}
		
	return a;

}

function show_info_panel(panel_id) {

	var p = document.getElementById(panel_id);
	
	p.style.display = 'block';

}

function delete_panel(p) {

	if (confirm('Are you sure you want to delete this panel?','Yes','No')) {
	
		// remove it from the array of panels
		//panels = array_remove(panels, p.parentNode);
	
		// delete the element
		delete_parent(p);
		
	}

}

function generate_cd_output() {

	var prg = '', html = '';
	
	for (var i = 0; i < panels.length; i++) {
	
		prg += generate_panel_info(panels[i]);
	
	}
	
	var popup = window.open("", "PrgWindow", "toolbar=yes,menubar=yes,location=yes,scrollbars=yes,resizable=yes,width=600,height=600");

	html += '<html><head><title>autorun.prg<' + '/title><' + '/head><body><pre>';
	html += autorun_prg_base;
	html += prg;
	html += '<' + '/pre><' + '/body><' + '/html>';
	
	popup.document.open()
	popup.document.write(html)
	popup.document.close()

}

function generate_panel_info(panel_object) {

	var string = '';
	
	var p, t, l, w, h;

	if (document.getElementById(panel_object.pid)) {

		p = document.getElementById(panel_object.pid);
		
		t = p.style.top;
		l = p.style.left;
		w = p.style.width;
		h = p.style.height;
				
		if (t == '') {
			t = 10;
		}

		if (l == '') {
			l = 10;
		}

		if (w == '') {
			w = 125;
		}

		if (h == '') {
			h = 25;
		}
		
		t = parseInt(t) + 1;
		l = parseInt(l) + 1;
		w = parseInt(w) + 6;
		h = parseInt(h) + 6;

		string = "[button]\n";
		string += l + "\n";
		string += t + "\n";
		string += (w + l - 1) + "\n";
		string += (h + t - 1) + "\n";
		string += "silence.wav\n";
		string += "silence.wav\n";
		string += document.getElementById(panel_object.iid).value + "\n";
		string += "NoCloseAfterClick\n\n";
	
	}
	
	return string;

}

function specify_background_image() {

	var bgimage = prompt('Specify path to background image relative to this file:', my_bg.src);
		
	if (bgimage != null) {
			
		my_bg.src = bgimage;

		document.getElementById('content').style.backgroundImage = 'url(' + my_bg.src + ')';
		
		document.getElementById('content').style.height = my_bg.height + 'px';
	
		document.getElementById('content').style.backgroundImage = 'url(' + my_bg.src + ')';

	}

}

function set_background_image(obj) {

	var bgimage = obj.value;
		
	if (bgimage != '') {
			
		var re = /^file:/
		
		if (!bgimage.match(re)) {
			bgimage = 'file://' + bgimage;
		}
		
		my_bg.src = bgimage;

		document.getElementById('content').style.backgroundImage = 'url(' + my_bg.src + ')';
		
		document.getElementById('content').style.height = my_bg.height + 'px';
	
		document.getElementById('content').style.backgroundImage = 'url(' + my_bg.src + ')';

	}
	
}


function load_background_image(element, image) {
	
	document.getElementById(element).style.backgroundImage = 'url(' + image_object.src + ')';

	document.getElementById(element).style.height = image_object.height + 'px';

}


//YAHOO.util.Event.addListener(window, 'load', 
//	function() {
//		add_login_form_behavior();
//		add_page_chapter_tab_rollovers();
//	}
//); 

function resize_window() {

	if (!$.cookie('window_resized')) {
	
		// try to size the window
		// window.resizeTo(975,725);
		window.moveTo(0,0);
		window.resizeTo(1024,768);
		
		// set the cookie so we don't resize again automatically this session
		$.cookie('window_resized', 'yes');
	
	}

}


function getViewportHeight() {

	var height = self.innerHeight; // Safari, Opera
	var mode = document.compatMode;
	
	if ( (mode || isIE) && !isOpera ) { // IE, Gecko
		height = (mode == 'CSS1Compat') ?
		document.documentElement.clientHeight : // Standards
		document.body.clientHeight; // Quirks
	}
	
	return height;
}

function getViewportWidth() {

	var width = self.innerWidth; // Safari
	var mode = document.compatMode;
	
	if (mode || isIE) { // IE, Gecko, Opera
		width = (mode == 'CSS1Compat') ?
		document.documentElement.clientWidth : // Standards
		document.body.clientWidth; // Quirks
	}

	return width;

}

function findPos(obj) {

	var curleft = 0;
	var curtop = 0;

	if (obj.offsetParent) {

		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;

		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}

	}

	return [curtop,curleft];

}

function getViewportScrollPos() {

	var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
	var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);

	return [scrollTop, scrollLeft];

}




$(document).ready(
	function() {
		resize_window();
		add_login_form_behavior();
		add_page_chapter_tab_rollovers();
	}
);

