/*
Javascript and all associated code is intellectual property of RoastMedia Ltd
Please report piracy to sebastian@roastmedia.com
This file is licensed and should not be used as part and/or all without permission
*/


function DefaultButtonClick(event, buttonID) {
    if (event.type != "keypress" || event.keyCode != 13)
        return true;
    var elem = document.getElementById(buttonID);
    if (elem.tagName == "A")
        location.href = elem.href;
    if (elem.tagName == "INPUT" && elem.type == "button")
        elem.click();

    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("click", true, true);
    elem.dispatchEvent(evt);

    return false;
}

// Does generic widget instance non-ajax postback
function DoPostback(sp, wi, pid, act, prm) {
	$('#_postbackData').val(wi + "|)" + act + "|)" + prm + "|)" + pid);
	$('#form').submit();
}
// Does generic widget instance ajax postback
function DoPostbackAjax(sp, wi, pid, act, prm) {
	// fade out control
	//alert("DoPostbackAjax/" + pid);
	var wiPref = '#wi' + wi + 'container';
	var overDiv = OverlayDiv(sp, $(wiPref));
	// do postback
	var inputs = GetInputs(sp, wiPref);
	$.post(sp + "DoAjaxCall.aspx", { action: "doPostback", wi: wi, pid: pid, act: act, prm: prm, ips: inputs },
	function(data) {
		$('#wi' + wi + 'container').html(data);
		OverlayDivRemove(overDiv);
	}, "html");
}
// Does generic widget instance ajax postback but ignores callback, does not replace widget
function DoPostbackAction(sp, wi, pid, act, prm, de, em) {
	// do postback
	//alert("DoPostbackAction/" + pid);
	var inputs = null;
	if (em == false) {
		var wiPref = '#wi' + wi + 'container';
		inputs = GetInputs(sp, wiPref);
	}
	else {
		inputs = GetInputs(sp, '#_editWidgetDiv');
	}
	$.post(sp + "DoAjaxCall.aspx", { action: "doActionPostback", wi: wi, pid: pid, act: act, prm: prm, ips: inputs, em: em },
	de, "html");
}
// Does ajax postback for drag and drop window
function DoPostbackAjaxDragDrop(sp, act, prm) {
	// do postback
	//alert('doing drag and drop postback to ' + sp + 'DoAjaxCall.aspx');
	$.post(sp + "DoAjaxCall.aspx", { action: "doPostbackDragDrop", act: act, prm: prm },
	function(data) {
	}, "html");
}
// Does ajax postback for edit window
function DoEditPostbackAjax(sp, wi, pid, act, prm) {
	//alert("DoEditPostbackAjax/" + pid);
	if ($(".tinymce").length > 0)
		tinyMCE.activeEditor.save()
	tabsForEditSelected = $('#tabs').tabs('option', 'selected');
	// fade out control
	var wiPref = '#wi' + wi + 'container';
	var overDiv = OverlayDiv(sp, $('#_editWidgetDiv'));
	// do postback
	var inputs = GetInputs(sp, '#_editWidgetDiv');
	$.post(sp + "DoAjaxCall.aspx", { action: "doEditPostback", wi: wi, pid: pid, act: act, prm: prm, ips: inputs },
	function(data) {
		if (typeof (editPostbackSaveMode) == "undefined" || editPostbackSaveMode == false) {
			$('#_editWidgetDiv').html(data);
			OverlayDivRemove(overDiv);
			$('#tabs').tabs();
			$('#tabs').tabs('select', tabsForEditSelected);
			delete tabsForEditSelected;
		}
	}, "html");
}
// Does ajax postback for popup window
function DoPopupPostbackAjax(sp, wi, pid, act, prm, puc) {
	if ($(".tinymce").length > 0)
		tinyMCE.activeEditor.save()
	// fade out control
	var wiPref = '#wi' + wi + 'container';
	var overDiv = OverlayDiv(sp, $('#_editWidgetDiv'));
	// do postback
	var inputs = GetInputs(sp, '#_editWidgetDiv');
	$.post(sp + "DoAjaxCall.aspx", { action: "doPopupPostback", wi: wi, pid: pid, act: act, prm: prm, puc: puc, ips: inputs },
	function(data) {
		if (typeof (editPostbackSaveMode) == "undefined" || editPostbackSaveMode == false) {
			$('#_editWidgetDiv').html(data);
			OverlayDivRemove(overDiv);
		}
	}, "html");
}
function AddWidgetAndStartEdit(sp, pid, ctid, wi) {
	editPostbackSaveMode = false;
	$.post(sp + "DoAjaxCall.aspx", { action: "doAddWidgetToPage", pid: pid, ctid: ctid, wi: wi },
	function(data) {
		var wi = parseInt(data);
		addWidgetEditMode = true;
		OpenEdit(sp, wi, pid);
	}, "html");
}
function AddWidgetNoEdit(sp, pid, ctid, wi) {
	editPostbackSaveMode = false;
	$.post(sp + "DoAjaxCall.aspx", { action: "doAddWidgetToPage", pid: pid, ctid: ctid, wi: wi },
	function(data) {
		var wi = parseInt(data);
		addWidgetEditMode = true;
		editedWi = wi;
		editedPid = pid;
		AddWidgetToPage(sp);
	}, "html");
}
// Gets inputs for ajax postback
function GetInputs(sp, wiPref) {
	return $(wiPref + ' :input').serialize();
}
// Open popup in lightbox style div
function OpenLightBoxPopup(sp, wi, pid, act, prm, puc) {
	editPostbackSaveMode = false;
	editedWi = wi;
	editedPid = pid;
	// fade out control
	var div = $('#wi' + wi + 'container');
	overDivEdit = OverlayDiv(sp, div);
	// do ajax request
	$('#_editWidgetDiv').remove();
	$.post(sp + "DoAjaxCall.aspx", { action: "openPopup", puc: puc, wi: wi, act: act, prm: prm, pid: pid },
		function(data) {
			$('#form').append('<div id="_editWidgetDiv" style="width: 750px; display: none; cursor: default;">' + data + '</div>');
			$.blockUI({ message: $('#_editWidgetDiv'), fadeIn: 600, fadeOut: 600, css: { left: ($(window).width() - 750) / 2 + 'px', width: '750px', top: '100px'} });
			$('#tabs').tabs();
		}, "html");
}
// Does ajax postback and opens edit widget instance window
function OpenEdit(sp, wi, pid) {
	editPostbackSaveMode = false;
	editedWi = wi;
	editedPid = pid;
	// fade out control
	var div = $('#wi' + wi + 'container');
	overDivEdit = OverlayDiv(sp, div);
	// do ajax request
	$('#_editWidgetDiv').remove();
	$.post(sp + "DoAjaxCall.aspx", { action: "openEdit", wi: wi, pid: pid },
		function(data) {
			$('#form').append('<div id="_editWidgetDiv" style="width: 750px; display: none; cursor: default;">' + data + '</div>');
			$.blockUI({ message: $('#_editWidgetDiv'), fadeIn: 600, fadeOut: 600, css: { left: ($(window).width() - 750) / 2 + 'px', width: '750px', top: '100px'} });
			$('#tabs').tabs();
		}, "html");
}
// Saves edited configuration
function PostEdit(sp) {
	DoEditPostbackAjax(sp, editedWi, editedPid, 'save', '');
	DoPostbackAjax(sp, editedWi, editedPid, '', '');
	OverlayDivRemove(overDivEdit);
}
// Apply edited configuration
function ApplyEdit(sp) {
	editPostbackSaveMode = false;
	PostEdit(sp);
}
// Saves (apply+close) edited configuration
function SaveEdit(sp) {
	editPostbackSaveMode = true;
	PostEdit(sp);
	$.unblockUI();
	if (typeof (addWidgetEditMode) != "undefined" && addWidgetEditMode == true) {
		addWidgetEditMode = false;
		AddWidgetToPage(sp);
	}
}
// Cancels edited configuration changes
function CancelEdit(sp) {
	editPostbackSaveMode = false;
	OverlayDivRemove(overDivEdit);
	$.unblockUI();
	if (typeof (addWidgetEditMode) != "undefined" && addWidgetEditMode == true) {
		addWidgetEditMode = false;
		AddWidgetToPage(sp);
	}
}
function ClosePopup(sp) {
	DoPostbackAjax(sp, editedWi, editedPid, 'popupClosed', '');
	OverlayDivRemove(overDivEdit);
	$.unblockUI();
}
// adds new widget to page to given zone
function AddWidgetToPage(sp) {
	var wi = editedWi;
	var pid = editedPid;
	// do postback
	$.post(sp + "DoAjaxCall.aspx", { action: "doRenderWidget", wi: wi, pid: pid, act: '', prm: '', ips: '' },
	function(data) {
		$('#zo' + currentZone).prepend(data);
		//alert('prepended ' + data);
	}, "html");
}
// Shows overlay 'please wait' div
function OverlayDiv(sp, div) {
	//OverlayDivRemove();
	divOverlay = $(document.createElement('div'))
	//divOverlay.width(div.width());
	//divOverlay.height(div.height())
	divOverlay.css({ backgroundColor: 'white', opacity: 0.0, position: 'absolute', left: 0, top: 0, width: div.width(), height: div.height() });
	//divOverlay.id = 'wiOverlayDiv';
	divOverlay.prependTo(div);
	div.css('position', 'relative');
	var img = $(document.createElement('img')).attr({ src: sp + 'Resources/Images/ajax-loader.gif', style: 'display: block; text-align:center; margin: 0px auto;' });
	img.appendTo(divOverlay);
	setTimeout(function() { divOverlay.animate({ 'opacity': '0.8' }, 'slow'); }, 250);
	return divOverlay;
}
// Closes overlay 'please wait' div
function OverlayDivRemove(div) {
	//if (!(typeof divOverlay === 'undefined'))
	//	divOverlay.remove();
	RemoveTinyMce();
	div.remove();
}
function TableFilterHelper(tableId, val) {
	var t = $("#" + tableId);
	$.uiTableFilter(t, val);
}
function RemoveTinyMce() {
	var ctrls = $(".tinymce");
	for (var i = 0; i < ctrls.length; i++) {
		tinyMCE.execCommand('mceRemoveControl', false, ctrls[i].id);
		//alert("removed from " + ctrls[i].id);
	}
}
