/**
This JS file contains all the functions necessary for executing the form buttons, etc. in the editing portion of the EU
*/

function EUButtonLink(href) {
	document.location = href;	
}

function EUButtonListener(view) {
	document.getElementById("view").value = view;
	document.getElementById("form").submit();
}

function ZuFormButtonListener(action, view, nextstep, confirmBox)
{
	if(confirmBox) {		
		if(!confirm("Please Confirm"))
			return;
	}
	document.getElementById("action").value = action;
	document.getElementById("view").value = view;
	if( nextstep ) document.getElementById("nextstep").value = nextstep;
	document.getElementById("form").submit();
}

function EUToggleDateEnable(name) {
	disabled = true;
	if( document.getElementById(name + "_displayed").checked )
		disabled = false;
		
	if( document.getElementById(name + "_month") )
		document.getElementById(name + "_month").disabled = disabled;
	if( document.getElementById(name + "_day") )
		document.getElementById(name + "_day").disabled = disabled;
	if( document.getElementById(name + "_year") )
		document.getElementById(name + "_year").disabled = disabled;
}

function EUToggleTimeEnable(name) {
	disabled = true;
	if( document.getElementById(name + "_displayed").checked )
		disabled = false;
	
	if( document.getElementById(name + "_hour") )
		document.getElementById(name + "_hour").disabled = disabled;
	if( document.getElementById(name + "_minute") )
		document.getElementById(name + "_minute").disabled = disabled;
	if( document.getElementById(name + "_second") )
		document.getElementById(name + "_second").disabled = disabled;
	if( document.getElementById(name + "_ampm") )
		document.getElementById(name + "_ampm").disabled = disabled;
}

function EUToggleTimeRangeEnable(name) {
	allday = false;
	if( document.getElementById(name + "_allday").checked )
		allday = true;
	
	if( document.getElementById(name + "_start_hour") )
		document.getElementById(name + "_start_hour").disabled = allday;
	if( document.getElementById(name + "_start_minute") )
		document.getElementById(name + "_start_minute").disabled = allday;
	if( document.getElementById(name + "_start_second") )
		document.getElementById(name + "_start_second").disabled = allday;
	if( document.getElementById(name + "_start_ampm") )
		document.getElementById(name + "_start_ampm").disabled = allday;
	if( document.getElementById(name + "_end_hour") )
		document.getElementById(name + "_end_hour").disabled = allday;
	if( document.getElementById(name + "_end_minute") )
		document.getElementById(name + "_end_minute").disabled = allday;
	if( document.getElementById(name + "_end_second") )
		document.getElementById(name + "_end_second").disabled = allday;
	if( document.getElementById(name + "_end_ampm") )
		document.getElementById(name + "_end_ampm").disabled = allday;
}

var start_slider_events = null;
var end_slider_events = null;

function EUToggleTimeRangeSliderEnable(name) {
	var start_slider = document.getElementById(name + "_slider_start_img");
	var end_slider = document.getElementById(name + "_slider_end_img");
	if( start_slider_events == null )
		start_slider_events = {onmsedown:start_slider.onmousedown};
	if( end_slider_events == null )
		end_slider_events = {onmsedown:end_slider.onmousedown};
	allday = {disabled:false, opacity:"1.0", filter:"alpha(opacity=100)", cursor:"pointer", start_events:start_slider_events, end_events:end_slider_events};
	if( document.getElementById(name + "_allday").checked )
		allday = {disabled:true, opacity:"0.4", filter:"alpha(opacity=40)", cursor:"default", start_events:{onmsedown:""}, end_events:{onmsedown:""}};
	
	if( document.getElementById(name + "_text_range") ) {
		document.getElementById(name + "_text_range").style.opacity = allday.opacity;
		document.getElementById(name + "_text_range").style.filter = allday.filter;
	}
	if( document.getElementById(name + "_slider_range") ) {
		document.getElementById(name + "_slider_range").style.opacity = allday.opacity;
		document.getElementById(name + "_slider_range").style.filter = allday.filter;
		if( start_slider ) {
			start_slider.style.cursor = allday.cursor;
			start_slider.onmousedown = allday.start_events.onmsedown;
		}
		if( document.getElementById(name + "_start") )
			document.getElementById(name + "_start").disabled = allday.disabled;
		if( end_slider ) {
			end_slider.style.cursor = allday.cursor;
			end_slider.onmousedown = allday.end_events.onmsedown;
		if( document.getElementById(name + "_end") )
			document.getElementById(name + "_end").disabled = allday.disabled;
		}
	}
}

// start and end are supported in the following formats:
// "His", "Hi", "gisa", "gia", "H:i:s", "H:i", "g:i:sa", "g:ia", "H.i.s", "H.i", "g.i.sa", "g.ia"
// if start or end are 'null' then do not change that time.
function EUTimeRangeSliderSetTimes(name, start, end) {
	if( !name ) return false;
	start = getTimeFromFormattedTime(start);
	end = getTimeFromFormattedTime(end);
	end = (end==0) ? 24*60*60 : end;
	var allday = document.getElementById(name+"_allday");
	if( start!=null && end!=null )
		allday.checked = ( end-start == 0 || end-start == 24*60*60 );
	EUToggleTimeRangeSliderEnable(name);
	if( allday.checked ) {
		start = 0;
		end = 24*60*60;
	}
	var start_time_label = document.getElementById(name+"_start_time");
	var start_time = document.getElementById(name+"_start");
	var end_time_label = document.getElementById(name+"_end_time");
	var end_time = document.getElementById(name+"_end");
	start_time_label.innerHTML = formatTime(getTimeFormat(start_time_label.innerHTML), start);
	start_time.value = formatTime(getTimeFormat(start_time.value), start);
	end_time_label.innerHTML = formatTime(getTimeFormat(end_time_label.innerHTML), end);
	end_time.value = formatTime(getTimeFormat(end_time.value), end);
	var slider = document.getElementById(name+"_slider");
	var slider_start_img = document.getElementById(name+"_slider_start_img");
	var slider_end_img = document.getElementById(name+"_slider_end_img");
	var max_width = Number(slider.style.width.substring(0,slider.style.width.indexOf('px'))) - Number(slider_end_img.style.width.substring(0,slider_end_img.style.width.indexOf('px')));
	slider_start_img.style.left = String(start/(24*60*60)*max_width) + "px";
	slider_end_img.style.left = String(end/(24*60*60)*max_width) + "px";
	return true;
}

function EUMouseCoords(ev) {
	if( !ev ) return { x: null, y: null };
	if( ev.pageX || ev.pageY ) {
		return { x:Number(ev.pageX), y:Number(ev.pageY) };
	}
	return { x:Number(ev.clientX) + Number(document.body.scrollLeft) - Number(document.body.clientLeft), y:Number(ev.clientY) + Number(document.body.scrollTop) - Number(document.body.clientTop) };
}

function EUGetPosition(e) {
	var left = 0;
	var top = 0;
	while (e.offsetParent) {
		left += Number(e.offsetLeft);
		top += Number(e.offsetTop);
		e = e.offsetParent;
	}
	left += Number(e.offsetLeft);
	top += Number(e.offsetTop);
	return {x:left, y:top};
}

// only checks for the following separators: ":", "." and "" for the following: "H:i:s", "H:i", "g:i:sa", "g:ia"
// hhmmss    hh:mm:ss    hh.mm.ss     (e.g. 13:24:55   )  length is always 6 or 8 and never has am/pm
// hhmm      hh:mm       hh.mm        (e.g. 17.10      )  length is always 4 or 5 and never has am/pm
// ?hmmssaa  ?h:mm:ssaa  ?h.mm.ssaa   (e.g. 11:15:46am )  always has am/pm and length is 7 or 8 (no separators) or 9 or 10 (with separators)
// ?hmmaa    ?h:mmaa     ?h.mmaa      (e.g. 1.35pm     )  always has am/pm and length is 5 or 6 (no separators) or 6 or 7 (with separators)
function getTimeFormat(d) {
	if(!d) return null;
	var sep = "";
	var hour = "H";
	var minute = "i";
	var sec = "";
	var ampm = "";
	var t = new Array();
	if( d.indexOf(":") >= 0 ) {
		t = d.split(":");
		sep = ":";
	}
	else if( d.indexOf(".") >= 0 ) {
		t = d.split(".");
		sep = ".";
	}
	else if( d.indexOf("m") >= 0 ) {
		hour = "g";
		ampm = "a";
		if( d.length >= 7 )
			sec = "s";
	}
	else if( d.length >= 5 )
		sec = "s";
	if( t.length == 3 )
		sec = "s";
	if( t.length > 0 && t[t.length-1].indexOf("m") >= 0 ) {
		hour = "g";
		ampm = "a";
	}
	return String(hour+sep+minute+(sec!=""?(sep+sec):"")+ampm);
}

// supports the following formats:
// "His", "Hi", "gisa", "gia", "H:i:s", "H:i", "g:i:sa", "g:ia", "H.i.s", "H.i", "g.i.sa", "g.ia"
function getTimeFromFormattedTime(t) {
	if(!t) return null;
	var mtch = t.match(/^(\d\d?)[\:\.]?(\d\d)[\:\.]?(\d\d)?([ap]m)?$/);
	if(!mtch) return null;
	var h = (!mtch[4]) ? Number(mtch[1]) : ((mtch[4]=="pm") ? (Number(mtch[1])==12 ? 12 : Number(mtch[1])+12) : (Number(mtch[1])==12 ? 0 : Number(mtch[1])));
	var m = (!mtch[2]) ? 0 : Number(mtch[2]);
	var s = (!mtch[3]) ? 0 : Number(mtch[3]);
	return (h*60*60)+(m*60)+s;
}

function formatTime(format, t) {
	if(typeof(format)!="string" || typeof(t)!="number") return;
	var H = new Number(Math.floor(t/3600));
	var g = new Number(Math.floor(t/3600));
	g = (g==0) ? 12 : g;
	g = (g>12) ? g-12 : g;
	var i = new Number(Math.floor((t-(H*3600))/60));
	var s = new Number(Math.round(t-(H*3600)-(i*60)));
	var a = (H>=12 && H<24) ? "pm" : "am";
	format = format.replace(/H/, String((H<10?("0"+H):H)));
	format = format.replace(/g/, String(g));
	format = format.replace(/i/, String((i<10?("0"+i):i)));
	format = format.replace(/s/, String((s<10?("0"+s):s)));
	format = format.replace(/a/, a);
	return format;
}

var dragObject = null;
var dragObjectInitPos = null;
var dragObjectLimits = null;
var mouseOffSet = null;
var label = null;
var label_timeformat = null;
var input = null;
var input_timeformat = null;
var max_width = null;
var dlay = null;
var time_interval = 5 * 60; // 5 minutes

function EUTimeRangeSliderInit(e,disabled_slider) {
	if(!e) return;
	var p = document.getElementsByTagName("body")[0];
	e.onmousedown = function(ev) {
		function pxToNumber(px) {
			return Number(px.substring(0,px.indexOf('px')));
		}
		function getLimits(e) {
			if(!e) return;
			var parent = e.parentNode || false;
			if(!parent) return;
			var siblings = parent.childNodes || false;
			if(!siblings) return;
			var limit = {left: 0, right: pxToNumber(parent.style.width) - pxToNumber(e.style.width)};
			var drag_img = {position: pxToNumber(e.style.left) || 0, width: pxToNumber(e.style.width)};
			for(var i=0;i<siblings.length;i++)
				if( siblings[i].nodeName.toLowerCase() == "img" && siblings[i].id != e.id && siblings[i].style.position == 'absolute' )
				{
					var image = {position: pxToNumber(siblings[i].style.left), width: pxToNumber(siblings[i].style.width)};
					if( drag_img.position <= image.position-(0.5*drag_img.width) && image.position-(0.5*drag_img.width) < limit.right )
						limit.right = image.position-(0.5*drag_img.width);
					else if( limit.left < image.position+(0.5*image.width) && image.position+(0.5*image.width) <= drag_img.position )
						limit.left = image.position+(0.5*image.width);
				}
			return limit;
		}
		dlay = 0;
		dragObject = this;
		dragObjectInitPos = {x:pxToNumber(dragObject.style.left), y:pxToNumber(dragObject.style.top)};
		dragObjectLimits = getLimits(this);
		var name = this.id.split("_slider_")[0];
		var which = this.id.split("_slider_")[1].split("_")[0];
		label = document.getElementById(name + "_" + which + "_time") || null;
		if( label )
			label_timeformat = getTimeFormat(label.innerHTML);
		else
			label_timeformat = null;
		input = document.getElementById(name + "_" + which) || null;
		if( input )
			input_timeformat = getTimeFormat(input.value);
		else
			input_timeformat = null;
		max_width = pxToNumber(this.parentNode.style.width) - pxToNumber(this.style.width);
		ev = ev || window.event;
		mouseOffSet = EUMouseCoords(ev);
		return false;
	}
	p.onmousemove = function(ev) {
		if( dragObject ) {
			if( dlay%2==0 ) {
				ev = ev || window.event;
				var mousePos = EUMouseCoords(ev);
				var new_position = dragObjectInitPos.x + (mousePos.x - mouseOffSet.x);
				new_position = (new_position < dragObjectLimits.left ? dragObjectLimits.left : new_position);
				new_position = (new_position > dragObjectLimits.right ? dragObjectLimits.right : new_position);
				dragObject.style.position = 'absolute';
				dragObject.style.left = String(new_position) + "px";
				if( label || input ) {
					var time = Math.round((new_position/max_width*24*60*60)/time_interval)*time_interval;
					if( label )
						label.innerHTML = formatTime(label_timeformat, time);
					if( input )
						input.value = formatTime(input_timeformat, time);
				}
			}
			if( navigator.appName.indexOf("Microsoft Internet Explorer")>-1 )
				dlay++;
		}
		return false;
	}
	p.onmouseup = function() {
		dragObject = null;
	}
	var which = e.id.split("_slider_")[1].split("_")[0];
	if( which=="start" )
		start_slider_events = {onmsedown:e.onmousedown};
	else if( which=="end" )
		end_slider_events = {onmsedown:e.onmousedown};
	if( disabled_slider )
		e.onmousedown = "";
}

function ZuAddFile(name) {
	var withinnode=document.getElementById("div_parent_"+name+"_file");
	numberOfRows = withinnode.childNodes.length;
	if( numberOfRows == 1 )
		document.getElementById("link_"+name+"_file").innerHTML = "Attach another File";
	var x=document.createElement("div");
	var seed = new String (Math.random()).substring (2, 11);
	x.setAttribute("id", "div_"+name+"_file_"+seed);
	x.innerHTML = "<p class=\"formfield\"><label for=\""+name+"_file[]\">File</label><input id=\""+name+"_file[]\" name=\""+name+"_file[]\" type=\"file\" />&nbsp;<a href=\"javascript:ZuRemoveFile('div_"+name+"_file_"+seed+"');\">Remove file</a></p>";
	withinnode.insertBefore(x, withinnode.lastChild);
}

function ZuRemoveFile(id) {
	var x=document.getElementById(id);
	numberOfRows = x.parentNode.childNodes.length;
	if( numberOfRows == 2 )
		document.getElementById("link_"+x.parentNode.id.substr(11)).innerHTML = "Attach a file";

	x.parentNode.removeChild(x);
}

function EURemoveFile(file_input_id) {
	var file_input = document.getElementById(file_input_id);
	var parent = file_input.parentNode;
	parent.removeChild(file_input);
	
	file_input = document.createElement("input");
	file_input.id = file_input_id;
	file_input.name = file_input_id;
	file_input.type = "file";
	parent.appendChild(file_input);
	
	/* for button*/
	document.getElementById('upload_elements_'+file_input_id).style.display = 'block';	
	
	document.getElementById(file_input_id + "_filename").value = "";
	document.getElementById(file_input_id + "_tmp_name").value = "";
	document.getElementById(file_input_id + "_filetype").value = "";
	document.getElementById(file_input_id + "_filesize").value = "0";
	document.getElementById(file_input_id + "_error").value = "0";
	document.getElementById(file_input_id + "_removed").value = "1";
}

/*function EUFilesChangeCategory(category_selector_id, vendor_id) {
	var category_selector = document.getElementById(category_selector_id);
	var href = "?category=" + category_selector.options[category_selector.selectedIndex].value + "&vendor=" + vendor_id;
	
	window.location = href;
}

function EUFilesChangeVendor(vendor_selector_id, category_id) {
	vendor_selector = document.getElementById(vendor_selector_id);
	href = "?category="+category_id+"&vendor=" + vendor_selector.options[vendor_selector.selectedIndex].value;
	
	window.location = href;
}
*/
/*function EUToggleMultipleCheckbox(root, ancestorIds, descendantIds) {
	for(i = 0; i < ancestorIds.length; i++) {
		checkbox = document.getElementById(ancestorIds[i]);
		if( root && checkbox ) {
			if( root.checked )
				checkbox.checked = true;
		}
	}
	for(i = 0; i < descendantIds.length; i++) {
		checkbox = document.getElementById(descendantIds[i]);
		if( root && checkbox ) {
			if( root.checked )
				checkbox.checked = true;
			else
				checkbox.checked = false;
		}
	}
}*/

/*function EUToggleElementDisplay(link, elementId, linkInnerHTMLArr, displayTypes) {
	var linkInnerHTMLArr = ( typeof(linkInnerHTMLArr) != "object" ) ? new Array("Collapse","Expand") : linkInnerHTMLArr;
	var displayTypes = ( typeof(displayTypes) != "object" ) ? new Array("block","none") : displayTypes;
	element = document.getElementById(elementId);
	if( element ) {
		if( element.style.display == displayTypes[1] ) {
			element.style.display = displayTypes[0];
			if( link )
				link.innerHTML = linkInnerHTMLArr[0];
		} else {
			element.style.display = displayTypes[1];
			if( link )
				link.innerHTML = linkInnerHTMLArr[1];
		}
	}
}*/

function EUElementHide(elementId) {
	var element = document.getElementById(elementId);
	if( element ) {
		element.style.display = "none";
	}
}

function EUElementShow(elementId) {
	var element = document.getElementById(elementId);
	if( element ) {
		element.style.display = "block";
	}
}

function EUCheckAll(elementName) {
	var elements = document.getElementsByName(elementName);
	for (i = 0; i < elements.length; i++) {
		elements[i].checked = true;
	}
}

function EUUncheckAll(elementName) {
	var elements = document.getElementsByName(elementName);
	for (i = 0; i < elements.length; i++) {
		elements[i].checked = false;
	}
}
