// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

var call_request_status_updater = null;
var current_call_requests_updater = null;
var selected_call_request_hyperlinks_updater = null;
var pushed_urls = new Array();
var Fabtabs = Class.create();

Fabtabs.prototype = {
	initialize : function(element) {
		this.element = $(element);
		var options = Object.extend({}, arguments[1] || {});
		this.menu = $A(this.element.getElementsByTagName('a'));
		//this.show(this.getInitialTab());
		this.menu.each(this.setupTab.bind(this));
		ini = this.getInitialTab();
		this.menu.without(ini).each(this.hide.bind(this));
		this.show(ini);
	},

	setupTab : function(elm) {
		Event.observe(elm,'click',this.activate.bindAsEventListener(this),false)
	},

	activate :  function(ev) {
		var elm = Event.findElement(ev, "a");
		Event.stop(ev);
		this.show(elm);
		this.menu.without(elm).each(this.hide.bind(this));
		
		if (this.element.className == "wizard_tabbed_editor") {
			$('active_request_form_' + this.tabID(elm)).checked = true;
		}
	},

	hide : function(elm) {
		$(elm).removeClassName('active-tab');
		$($(elm).parentNode).removeClassName('active-tab');
		$(this.tabID(elm)).removeClassName('active-tab-body');
	},

	show : function(elm) {
		$(elm).addClassName('active-tab');
		$($(elm).parentNode).addClassName('active-tab');
		$(this.tabID(elm)).addClassName('active-tab-body');
	},

	tabID : function(elm) {
		return elm.href.match(/#(\w.+)/)[1];
	},

	getInitialTab : function() {
		if(document.location.href.match(/#(\w.+)/)) {
			var loc = RegExp.$1;
			var elm = this.menu.find(function(value) { return value.href.match(/#(\w.+)/)[1] == loc; });
			return elm || this.menu.first();
		} else {
			return this.menu.first();
		}
	}
}

function debug (msg) {
	$('debug_console').innerHTML = (msg + "\n") + $('debug_console').innerHTML;
}



function set_enabled_step_fields (selected_index) {
//TODO: remove this hardcoded number somehow
	for (i=0; i<3; i++) {
		phone_number_id = "steps[" + i + "][phone_number]"
		bypass_sequence_id = "steps[" + i + "][bypass_sequence]"
		if (i == selected_index) {
			$(bypass_sequence_id).className = 'enabled';
		} else {
			$(bypass_sequence_id).className = 'disabled';
		}

		if (i > selected_index) {
			$(phone_number_id).className = 'disabled';
		} else {
			$(phone_number_id).className = 'enabled';
		}
	}
}

var schedule_defaults = {
	default_a: false,
	default_b: "09:00",
	default_c: 0,
	default_d: "05:00",
	default_e: 1,
	default_f: false,
	default_g: "12:00",
	default_h: 1,
	default_i: "01:00",
	default_j: 1
};

function set_to_default (field) {

	default_value = schedule_defaults[Element.classNames(field).entries().first()];

	switch (field.type) {
		case "text":
			field.value = default_value; 
		break;

		case "select-one":
			field.selectedIndex = default_value;
		break;

		case "checkbox":
			field.checked = default_value;
		break;
	}

}

var fields_to_disable_for_available_by_day_number = {};
var afields_to_disable_for_available_by_day_number = {};
var bfields_to_disable_for_available_by_day_number = {};

function do_that (day_number) {
		fields_to_disable_for_available_by_day_number[day_number] = document.getElementsByClassName('disable_if_not_available', 'row_for_fields_for_day_number_' + day_number);
}

var selected_call_request_id = null;

function getStyleSheets() {
	if (!document.getElementsByTagName("link")) { return; }
	var links = document.getElementsByTagName("link");
	var count = 0;
	var stylesheetArray = new Array();
	for (var i=0; i<links.length; i++) {
		type = links[i].getAttribute("type");
		if (type=="text/css") {
			stylesheetArray[count] = links[i];
			count++;
			}
	}
	return stylesheetArray;
}

function setStyleSheet(title) {
	var stylesheets = getStyleSheets();
	for (var i=0; i<stylesheets.length; i++) {
		stylesheets[i].disabled = true;
		if (stylesheets[i].getAttribute("title") == title) {
			stylesheets[i].disabled = false;
			createCookie('style',title,365);
		}
	}
}

function getDefaultStyleSheet() {
	var title;
	var stylesheets = getStyleSheets();
	for (var i=0; i<stylesheets.length; i++) {
		if (stylesheets[i].getAttribute("rel").indexOf('alt')== -1) { title = stylesheets[i].getAttribute("title"); }
	}
	return title;
}
		
function getPreferredStyleSheet() {
	var title;
	if (readCookie('style')) { title=readCookie('style'); }
	else { title=getDefaultStyleSheet(); }
	return title;
}

function linkBox(elementID) {
	var form = document.createElement("form");
	form.setAttribute("id","linkBox");
	form.setAttribute("title","Change the stylesheet");
	var drop = document.createElement("select");
	drop.setAttribute("id","styleSelect");
	drop.onchange = function() { setStyleSheet(this.options[this.selectedIndex].value) };
	var label = document.createElement("label");
	label.setAttribute("for","styleSelect");
	var text = document.createTextNode("Change the stylesheet: ");
	label.appendChild(text);
	form.appendChild(label);
	form.appendChild(drop);
	document.getElementById(elementID).appendChild(form);
	var stylesheets = getStyleSheets();
	var preferred = getPreferredStyleSheet();
	for (var i=0;i<stylesheets.length; i++) {
		var title = stylesheets[i].getAttribute("title");
		drop.options[i] = new Option(title,title,false);
		if (title==preferred) { drop.options[i].selected = true; }
	}
}


// Cookie scripts

function createCookie(name,value,days)
{
	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name)
{
	createCookie(name,"",-1);
}

function select_current_call_request (row_id) {
	current_call_requests_updater.stop();
	current_call_requests_updater = null;

	l = row_id.replace("call_request_", "");
	old = $F("selected_call_request_id");
	if ($("call_request_" + old)) {
		$("call_request_" + old).removeClassName("selected");
	}
	$("selected_call_request_id").value = l;
	$('current_calls_form').submit();
	$(row_id).addClassName("selected");
	/*
	window.location = "/en/dashboard/index?selected_call_request_id=" + l;
	*/
}

function orderable_onUpdate (e) {
	var i;
	for (i=0; i<$(e.id).childNodes.length; i++) {
		$(e.id).childNodes[i].childNodes[1].value=(i+1);
	}
}

var on_resize_callbacks = new Array();

var rules = {

	'.wanger' : function (e) {
		building_block_id = e.id.replace("wanger_", "");
		Element.toggle($('building_block_attributes_' + building_block_id));

		Event.observe(e, 'click', function () {
			building_block_id = this.id.replace("wanger_", "");
			Element.toggle($('building_block_attributes_' + building_block_id));
		});
	},


	'.orderable_list' : function (e) {
		Sortable.create(e.id, {only: 'orderable_item', onUpdate: orderable_onUpdate});
	},

	'.fake' : function (e) {
		e.onsubmit = function () {
			return false;
		};
	},

	'#expand_blocked_numbers' : function (e) {
		Element.hide($('blocked_numbers'));
		Event.observe(e, 'click', function () {
			Element.toggle($('blocked_numbers'));
		});
	},

	'#close_window' : function (e) {
		window.close();
	},

	'#stylesheet_switcher' : function (e) {
		var title = getPreferredStyleSheet();
		setStyleSheet(title);
		linkBox(e.id);
	},

	'.selectable_row' : function (e) {
		e.onclick = function () {
			row_id = this.id.replace("row_", "");

			$$(".selectable_row").each(function (r) {
				r.removeClassName("selected");
			});

			$("radio_button_for_row_" + row_id).checked = true;
			//e.addClassName("selected");
			Element.addClassName(this, "selected");
		};

		e.onmouseover = function () {
			//e.addClassName("hovered");
			Element.addClassName(this, "hovered");
		};

		e.onmouseout = function () {
			//e.removeClassName("hovered");
			Element.removeClassName(this, "hovered");
		};
	},

	'.blocked_phone_number_row' : function (e) {
		e.onclick = function () {
			row_id = this.id.replace("blocked_phone_number_row_", "");

			$$(".blocked_phone_number_row").each(function (r) {
				r.removeClassName("selected");
			});

			$("radio_button_for_blocked_phone_number_id_" + row_id).checked = true;
			this.addClassName("selected");
		};
	},

	'.managed_hyperlink_row' : function (e) {
		e.onclick = function () {
			managed_hyperlink_row_id = this.id.replace("managed_hyperlink_row_", "");

			$$(".managed_hyperlink_row").each(function (r) {
				r.removeClassName("selected");
			});

			$("radio_button_for_managed_hyperlink_id_" + managed_hyperlink_row_id).checked = true;
			this.addClassName("selected");
		};
	},

	'.call_request_history_row' : function (e) {
		e.onclick = function () {
			call_request_id = this.id.replace("history_row_for_call_request_id_", "");
			$$(".call_request_history_row").each(function (r) {
				r.removeClassName("selected");
			});
			$("radio_button_for_call_request_id_" + call_request_id).checked = true;
			this.addClassName("selected");
			$("radio_button_for_call_request_id_" + call_request_id).form.submit();
		};

		e.onmouseover = function () {
			this.addClassName("hovered");
		};

		e.onmouseout = function () {
			this.removeClassName("hovered");
		};
	},

	'.clear_step_button' : function (e) {
		e.onclick = function () {
			step = this.id.replace("button_for_step_", "");
			fields_to_clear = document.getElementsByClassName('clear_when_button_clicked', 'route_step_' + step);
			fields_to_clear.each(function(f) {
				f.value = "";
			});
			
			return false;
		};
	},

/*
	'.current_call_row' : function (e) {
		e.onclick = function () {
			l = this.id.replace("call_request_", "");
			old = $F("selected_call_request_id");
			$("selected_call_request_id").value = l;
			$("call_request_" + old).removeClassName("selected");
			e.addClassName("selected");
			window.location = "/en/dashboard/index?selected_call_request_id=" + l;
		};
	},
*/
	
	'.xxxrows_for_fields' : function (e) {
		day_number = e.id.replace("row_for_fields_for_day_number_", "");
		setTimeout("do_that(" + day_number + ")", 1000);
	},

	'.available_checkbox' : function (e) {
		e.onclick = function () {
			day_number = e.id.replace("available_checkbox_", "");
			fields_for_day_number = document.getElementsByClassName('disable_if_not_available', 'row_for_fields_for_day_number_' + day_number);
			t = function (field) {
				set_to_default(field);
				field.disabled = !e.checked
				if (!field.disabled && Element.hasClassName(field, 'disable_if_not_lunch') && !$('lunch_checkbox_' + day_number).checked) {
					field.disabled = true;
				}
			}
			fields_for_day_number.each(t);
		};
	},

	'.lunch_checkbox' : function (e) {
		e.onclick = function () {
			day_number = e.id.replace("lunch_checkbox_", "");
			fields_for_day_number = document.getElementsByClassName('disable_if_not_lunch', 'row_for_fields_for_day_number_' + day_number);
			t = function (field) {
				set_to_default(field);
				field.disabled = !e.checked
			}
			fields_for_day_number.each(t);
		};
	},

	'.available_all_day_checkbox' : function (e) {
		e.onclick = function () {
			day_number = e.id.replace("available_all_day_checkbox_", "");
			fields_for_day_number = document.getElementsByClassName('disable_if_not_available_all_day', 'row_for_fields_for_day_number_' + day_number);
			t = function (field) {
				set_to_default(field);
				field.disabled = (e.checked);
				if (!field.disabled && Element.hasClassName(field, 'disable_if_not_lunch') && !$('lunch_checkbox_' + day_number).checked) {
					field.disabled = true;
				}
			}
			fields_for_day_number.each(t);
		};
	},

	'#clear_holiday_button' : function (e) {
		e.onclick = function () {
			$('holiday[from_date]').value = "";
			$('holiday[from_time]').value = "";
			$('holiday[until_date]').value = "";
			$('holiday[until_time]').value = "";
		};
	},

	//tabbed editor
	'#tabs' : function (e) {
		new Fabtabs('tabs');
	},

	//popup
	'.request_form' : function (e) {
		window.focus();
	},

	//tabbed editor
	'.uncheck_submit_to_new_window' : function (e) {
		Event.observe(e, "click", function () {
			Form.findFirstElement(e.form).checked = false;
		});
	},

	'.check_submit_to_new_window' : function (e) {
		Event.observe(e, "click", function () {
			Form.findFirstElement(e.form).checked = true;
		});
	},

	//tabbed editor
	'.submit_to_new_window' : function (e) {
		e.onsubmit = function () {
			if (Form.findFirstElement(e).checked) {
				new_target = "ctt_preview_window";
				e.target = new_target;
				if (e.hasClassName("noop")) {
					w = window.open("/loading.html",new_target); 
				} else {
					w = window.open("/loading.html",new_target,"width=640,height=480,toolbar=0"); 
				}
				this.submit();
				w.focus();
			} else {
				e.target = '';
			}
		};
	},

	'.confirm' : function (e) {

		c = function (event) {
			if (confirm(e.getAttribute('message'))) {
				return true;
			} else {
				Event.stop(event);
			}
		};

		Event.observe(e, "click", c);
	},

	//generic form element focus on load
	'.focus' : function (e) {
		e.focus();
	},

	//live updater
	'#call_request_status' : function (e) {
		if (call_request_status_updater == null) {
			call_request_status_updater = new Ajax.PeriodicalUpdater(
				'call_request_status',
				'/en/call_request/status/'+$F('call_request_id'),
				{asynchronous:true, evalScripts:true, frequency:3});
		}
	},

	'#current_call_requests' : function (e) {
		if (current_call_requests_updater == null) {

			selected_call_request_id = "";

			try {
				selected_call_request_id = $F("selected_call_request_id"); 
			} catch (e) {
			}

			current_call_requests_updater = new Ajax.PeriodicalUpdater(
				'current_call_requests',
				'/en/dashboard/current_call_requests?selected_call_request_id='+selected_call_request_id,
				{asynchronous:true, evalScripts:true, frequency:3, decay:1.01});
		}
	},

	'#baseline_stylesheet_selector' : function (e) {
		e.onchange = function () {
			//alert($F(this.id));
			stylesheet = $F(this.id);
			if (stylesheet == "None" || stylesheet == "") {
				stylesheet = "blank";
			}
			new Ajax.Updater(
				'baseline_stylesheet',
				'/stylesheets/' + stylesheet + ".css",
				{asynchronous:true});
		};

		e.onchange();
	},

	'#partner_baseline_stylesheet_selector' : function (e) {
		e.onchange = function () {
			//alert($F(this.id));
			stylesheet = $F(this.id);
			if (stylesheet == "None" || stylesheet == "") {
				stylesheet = "blank";
			}
			new Ajax.Updater(
				'partner_baseline_stylesheet',
				'/stylesheets/' + stylesheet + ".css",
				{asynchronous:true});
		};

		e.onchange();
	},

	'#selected_call_request_hyperlinks' : function (e) {
		if (selected_call_request_hyperlinks_updater == null) {
			selected_call_request_hyperlinks_updater = new Ajax.PeriodicalUpdater(
				'selected_call_request_hyperlinks',
				'/en/dashboard/selected_call_request_hyperlinks/' + $F('selected_call_request_id'),
				{asynchronous:true, evalScripts:true, frequency:3, decay:1.01});
		}
	},

	//page pusher
	'.push' : function (e) {
		if (pushed_urls.indexOf(e.id) == -1) {
			window.open(e.href);
			pushed_urls.push(e.id);
		}
	},

	//route steps thingy for bypass sequence
	'.active_bypass_radio_button' : function (e) {
		e.onclick = function () {
			set_enabled_step_fields (this.value);
		};
	},

	//more route steps thingy
	'#current_active_bypass_sequence' : function (e) {
		$("active_bypass_radio_button_"+e.value).click();
	},

	//date picker creator	
	'.date' : function (e) {
		(datePickerController.create());
	},

	//hide if js is available thingy
	'.hide_if_javascript_enabled' : function (e) {
		//Element.hide(e);
	},

	//button selector dropdown
	'.submit_on_first_select_change' : function (e) {
		if ($A(e.getElementsByTagName('select')).first()) {
		$A(e.getElementsByTagName('select')).first().onchange = function () {
			this.form.submit();
		};
		}
	},

	'.top_left_block_xxx' : function (e) {
		on_resize = function () {
			dimensions = Element.getDimensions(e);
			Element.setStyle(e, {
				backgroundImage:"url(/en/tools/gradient_frame/" + dimensions.width + "/" + dimensions.height + ")",
				backgroundRepeat:"no-repeat"
			});
		};

		Event.observe(window, 'resize', on_resize);
		if ($('expand_blocked_numbers')) {
			Event.observe($('expand_blocked_numbers'), 'click', on_resize);
		}
		on_resize();
	}
};

//wysiwyg editors
tinyMCE.init({
	relative_urls: false,
	width:"500",
	height:"90",
	mode:"textareas", 
	editor_selector : "wysiwyg",
	theme : "advanced",
	convert_urls : false,
	theme_advanced_buttons1 : "fontselect,fontsizeselect,forecolor,separator,bold,italic,underline,separator,justifyleft,justifycenter,justifyright",
	theme_advanced_buttons2 : "",
	theme_advanced_buttons3 : "",
	theme_advanced_toolbar_location : "top",
	theme_advanced_toolbar_align : "center",
	extended_valid_elements : "p[class|align|style],font[face|size|color|style],span[class|align|style]"
});

//apply all javascript stuff
Behaviour.register(rules);

/*
if(table.tagName != "TABLE") return;
		table.addClassName(SortableTable.options.tableScrollClass);
		
		var w = table.getDimensions().width;
		
		table.setStyle({
			'border-spacing': '0',
			'table-layout': 'fixed',
			width: w + 'px'
		});
		
		var cells = SortableTable.getHeaderCells(table);
		cells.each(function(c,i){
			c = $(c);
			var cw = c.getDimensions().width;
			c.setStyle({width: cw + 'px'});
			$A(table.tBodies[0].rows).each(function(r){
				$(r.cells[i]).setStyle({width: cw + 'px'});
			})
		})	
		
		// Fixed Head
		var head = (table.tHead && table.tHead.rows.length > 0) ? table.tHead : table.rows[0];
		var hclone = head.cloneNode(true);
		
		var hdiv = $(document.createElement('div'));
		hdiv.id = table.id + '-head';
		table.parentNode.insertBefore(hdiv, table);
		hdiv.setStyle({
			overflow: 'hidden'
		});
		var htbl = $(document.createElement('table'));
		htbl.setStyle({
			'border-spacing': '0',
			'table-layout': 'fixed',
			width: w + 'px'
		});
		hdiv.appendChild(htbl);
		hdiv.addClassName('scroll-table-head');
		
		table.removeChild(head);
		htbl.appendChild(hclone);
		
		cells = SortableTable.getHeaderCells(htbl);
		cells.each(function(c){
			c = $(c);
			Event.observe(c, 'click', SortableTable._sortScroll.bindAsEventListener(c));
			c.addClassName(SortableTable.options.columnClass);
		});	

		// Table Body
		var cdiv = $(document.createElement('div'));
		cdiv.id = table.id + '-body';
		table.parentNode.insertBefore(cdiv, table);
		cdiv.setStyle({
			overflow: 'auto'
		});
		cdiv.appendChild(table);
		cdiv.addClassName('scroll-table-body');
		
		hdiv.scrollLeft = 0;
		cdiv.scrollLeft = 0;

		Event.observe(cdiv, 'scroll', SortableTable._scroll.bindAsEventListener(table), false);
		if(table.offsetHeight - cdiv.offsetHeight > 0){
			cdiv.setStyle({width:(cdiv.getDimensions().width + 16) + 'px'})
		}
*/
