////////////////////////////////////////////////////////////////
//
//  Copyright © 2008 by Critical Media. All rights reserved.
//  You may not modify this code or use it for any application
//  other than Syndicaster without the express written consent
//  of Critical Media.
//
///////////////////////////////////////////////////////////////


// CONSTANTS

var ONE_SECOND = 1000; // timestamps as milliseconds
var MINUTE = ONE_SECOND*60; // timestamp minute interval (60.000 seconds)
var AJAX_INTERVAL = 7000;  // 7 seconds
var d = document;
var day_names = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
var month_names = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

// VARS
var search_params_for_all_results = $H({});

// FUNCTIONS

function appendForm(form, name, value) {
	if (form.elements[name] === undefined) {
		var input = d.createElement("input") ;
		input.setAttribute("type", "hidden");
		input.setAttribute("name", name);
		input.setAttribute("value", value);
		form.appendChild(input);
	} else {
		form.elements[name].value = value;
	}
	return form.elements[name];
}

function loadSearchWorkspace(unique_params) {
	params = search_params_for_all_results.merge(unique_params);
	params.each(function(param) {
		$('ss_'+param.key).value = param.value;
	});
	d.search_submitter.submit();
}

function safeInt(str) {
	if (str.charAt(0) == "0" && str.length > 1) {
		str = str.slice(1);
	}
	return parseInt(str);
}

function addZero(int) {
	var str = (int < 10) ? "0" : "";
	return str + String(int);
}

function addPlus(num) {
	if (num >= 0) num = String("+" + num);
	return String(num);
}

function dateYMD(dt) {
	return String(dt.getUTCFullYear() + addZero(dt.getUTCMonth() + 1) + addZero(dt.getUTCDate()) + addZero(dt.getUTCHours()) + addZero(dt.getUTCMinutes()) + addZero(dt.getUTCSeconds()));
}

function dateEpoch(ymd, return_type) {
	var dt = new Date(safeInt(ymd.slice(0,4)), safeInt(ymd.slice(4,6))-1, safeInt(ymd.slice(6,8)), safeInt(ymd.slice(8,10)), safeInt(ymd.slice(10,12)), safeInt(ymd.slice(12,14)));
	if (return_type == "date") {
		return dt;
	} else { // format == "integer" (default)
		return dt.getTime();
	}
}

function merAdjust(str_int, mer) {
	var int_val = safeInt(str_int);
	if (mer == "pm" && int_val < 12) {
		int_val += 12;
	} else if (mer == "am" && int_val == 12) {
		int_val = 0;
	}
	return int_val;
}

function switchChannel(rank) {
	el_form = d.channel_switcher_form;
	appendForm(el_form, 'rank', rank);
	appendForm(el_form, 'authenticity_token', AUTH_TOKEN);
	el_form.submit();
}

function showClip(id, edit, adjust_v_offset) {
	url = '/clips/player_embed?id='+id;
	if (edit) url += '&edit=1';
	if (adjust_v_offset == undefined) var adjust_v_offset = true;
	new Ajax.Request(url, {
	  method:'get',
	  onSuccess: function(transport) {
		if (transport.responseText !== 'NO CLIP'){
			$('clip_player').update(transport.responseText);
			var clip_row = $('clip_'+id)
			var player_container = $('clip_player_container');
			var pos = clip_row.cumulativeOffset();
			var h_offset = pos[0] + 137;
			var v_offset = pos[1] + 21;
			player_container.style.left = String(h_offset + "px");
			player_container.style.top = String(v_offset + "px");
			player_container.show();
			if (adjust_v_offset && (v_offset + player_container.offsetHeight) > window.innerHeight) {
				player_container.style.top = String((window.innerHeight - player_container.offsetHeight - 10) + "px");
			}
		}
	  }
	});
}

function fitToFullScreen(el) {
	var xScroll = d.body.scrollWidth;
	var yScroll = d.body.scrollHeight;
	if (window.scrollMaxY) {
		xScroll += window.scrollMaxX;
		yScroll += window.scrollMaxY;
	}
	el.style.width = String(xScroll) + "px";
	el.style.height = String(yScroll) + "px";
}

function launchOverlay(args) {
	var el_om = $('overlay_messages');
	if (!el_om) {
		el_om = d.createElement("div");
		el_om.setAttribute('id', 'overlay_messages');
		el_om.setStyle({display: 'none'});
		$('overlay').insert({after: el_om})
	} else el_om.update('');

	var el_m = $(args.id);
	if (!el_m) {
		el_m = d.createElement("div");
		el_m.setAttribute('id', args.id);
		el_m.setAttribute('class', 'overlay_message');
		el_m.setStyle({
			width: args.width + "px",
			height: args.height + "px"
		});
		el_om.insert({bottom: el_m})
		if (args.add_class) el_m.addClassName(args.add_class);
		var el_close_btn = d.createElement("div");
		el_close_btn.setAttribute('id', "overlay_close_btn");
		el_m.insert({top:el_close_btn});
		el_close_btn.update('<span onclick="fadeOutOverlays()">X</span>')
	} else el_m.update('');

	var el_content;
	if (args.use_subcontainer) {
		el_content = d.createElement("div");
		el_content.setAttribute('id', "overlay_message_content");
		el_content.setStyle({height: args.height + "px"});
		el_m.insert({bottom: el_content})
	} else el_content = el_m;

	var http_method = args.http_method;
	if (!http_method) {
		var ary_url = args.url.split('/');
		http_method = (ary_url.indexOf('create') == -1 && ary_url.indexOf('update') == -1) ? 'get' : 'post'
	}
	var params = (http_method == 'post') ? {authenticity_token: AUTH_TOKEN} : {}
	new Ajax.Request(args.url, {
	  method: http_method,
	  parameters: params,
	  onSuccess: function(transport) {
		el_content.update(transport.responseText)
	  },
	  onFailure: function(transport) {
		el_m.update(transport.responseText)
	  },
	  onComplete: function() {showOverlays(args.fade)}
	});
}

function showOverlays(fade) {
	var el_o = $('overlay');
	var el_om = $('overlay_messages');
	fitToFullScreen(el_o);
	if (fade) {
		el_o.setStyle({opacity: 0.0}).show();
		el_om.setStyle({opacity: 0.0}).show();
		new Effect.Opacity(el_o, {duration:0.5, from:0.0, to:0.6});
		new Effect.Opacity(el_om, {duration:0.5, from:0.0, to:1.0});
	} else {
		el_o.show();
		el_om.show();
	}
}

function fadeOutElement(el, delay, duration) {
	if (!delay) var delay = 0.0;
	if (!duration) var duration = 0.5;
	var full_opacity = el.getStyle('opacity');
	new Effect.Opacity(el, {delay: delay, duration: duration, from:full_opacity, to:0.0, afterFinish: function (obj) {
			obj.element.hide();
			obj.element.setOpacity(full_opacity);
		}
	});
}

function fadeOutOverlays() {
	fadeOutElement($('overlay'));
	fadeOutElement($('overlay_messages'));
}

//  lists  //

function getScopeURL(is_new) {
	if (which_list =="other_clips") {
		var str = '/clips/other_clips?';
		if (files_mode) {
			str += 'files=' + files.join(",");
		} else {
			str += 'content_owner_id='+content_owner_id+'&start_time='+workspace.get('start')+'&end_time='+workspace.get('end');
		}
		if ($('show_group')) str += "&show_group=" + $F('show_group');
	} else {
		var str = '/' + which_list + '?order_by='+list_prms.get('order_by')+'&switch_dir='+list_prms.get('switch_dir');
		if (!is_new) str += '&page='+list_prms.get('page');
		if (!$F('search_str').blank()) str += '&search_str='+escape($F('search_str').strip());
		['file_source', 'show_group', 'content_owner_id'].each(function(field){
			if ($(field)) str += '&' + field + '=' + $F(field);
		});
	}
	return str;
}

function checkLoadList() {
	var bln_load_list = false;
	if ($('show_group') && $F('show_group') !== '0') {
		if (list_prms.get('page') < 3) bln_load_list = true;
	} else if (list_prms.get('page') == 1) {
		el_which = (which_list == "other_clips") ? "clips" : which_list;
		if ($(el_which+'_list').select('tr.processing').any()) bln_load_list = true;
	}
	if (bln_load_list && !load_interval) {
		triggerListLoad();
	} else if (!bln_load_list && load_interval) {
		clearInterval(load_interval);
	}
}

function triggerListLoad() {
	if (load_interval) clearInterval(load_interval);
	load_interval = setInterval('loadList()', AJAX_INTERVAL);
	loadList();
}

function loadList(full_refresh) {
	var url = getScopeURL() + '&ajax=1';
	new Ajax.Request(url, {
	  method:'get',
	  onSuccess: function(transport) {
		if (transport.responseText){
			if (which_list =="other_clips") {
				// always refresh b/c no images
				$("other_clips").update(transport.responseText);
			} else if (full_refresh || list_header !== transport.getHeader('If-None-Match')) {
				$(which_list).update(transport.responseText);
				list_header = transport.getHeader('If-None-Match');
			}
			checkLoadList();
		}
	  },
	  onComplete: function() {
		if (which_list == 'files') {
			$('files_loading').hide();
			$('pagination_controls').show();
		}
	  }
	});
}

function loadNewPage(params) {
	if (params) for(var index in params) {list_prms.set(index, params[index])};
	if (which_list == 'files') { // use ajax
		$('pagination_controls').hide();
		$('files_loading').show();
		if (public_users) {
			if ($F('show_group') == '0') {
				if ($F('file_source').indexOf(':') > -1) {
					new_option = ($F('file_source').split(':')[0] == 'all') ? 'all' : 'uploads';
					$(new_option).selected = true;
				}
				$('file_source').select('option.public_users').invoke('hide');
			} else {
				$('file_source').select('option.public_users').invoke('show');
			}
		}
		triggerListLoad();
	} else { // load new page
		location.href=getScopeURL(true);
	}
}

function swapBx(parent_el) {
	$(parent_el).select('table.bx', 'div.bx').each(function(el) {
		el.removeClassName('bx');
		container = d.createElement("div");
		container.setAttribute('class', 'bx');
		el.insert({before: container});
		container.insert({bottom: el});
		container.insert({bottom: '<div class="bx_b"><div class="bx_bl"></div></div>'});
	});
}

function getSelectedRUS(parent_el) {
	var ary_rus = [];
	$(parent_el).select('input.chkbx').each(function(el) {
		if (el.checked) {
			var cal_val = $F('release_at_'+el.value);
			var release_at = (cal_val == "Now") ? '' : new Date(cal_val).getTime() / 1000;
			var params = $H({id: el.value, release_at: release_at});
			if ($('rd_'+el.value)) params.update({repository_drop_id: $('rd_'+el.value).value});
			if ($('is_private_'+el.value)) params.update({is_private: ($('is_private_'+el.value).value == '1')});
			ary_rus.push(params);
		}
	});
	return ary_rus;
}

function empty_fields(num_empty) {
	var verb = (num_empty == 1) ? 'is' : 'are';
	var suffix = (num_empty == 1) ? '' : 's';
	return "There " + verb + " " + num_empty + " empty required field" + suffix + ".";
}

function toggleVisibility(el_id) {
	var el = $(el_id);
	(el.visible()) ? el.hide() : el.show();
}

function setAllReleaseAts(val) {
	$$('.cru_embargo_calendar input').each(function(el){
		el.value = val;
		releaseAtDateCheck(el);
	});
}

function scanReleaseAts() {
	var container = $('possible_distributions');
	if (container) container.select('.cru_embargo_calendar input').each(function(el){releaseAtDateCheck(el)});
}

function releaseAtDateCheck(el) {
	if ($F(el) !== "Now") {
		if (new Date($F(el)) < new Date()) {
			el.value = "Now";
			el.addClassName('grey');
		} else el.removeClassName('grey');
	}
}

function autoPublishFieldsVisibility(el_checkbox) {
	var fields = ['auto_publish_filter_cos', 'auto_publish_filter_cats'];
	(el_checkbox.checked) ? fields.each(function(f){$(f).show()}) : fields.each(function(f){$(f).hide()});
}

function frameSize(width, aspect_ratio) {
	var ratio_ary = aspect_ratio.split(':');
	var height = (width * ratio_ary[1]) / ratio_ary[0];
	return [width, height]
}