var URL_SOAP_TOOLBOX = "/cms/controller/services/toolbox.asmx";
var URL_SOAP_SAVE = "/cms/model/services/save.asmx"

var trueStr = 'True'; /* Needs to be equal to .Net true.ToString() */
var falseStr = 'False';

var originalEdit, originalOnClick, originalClass, originalHtml;
var liveField, liveTable, liveKeyVal, liveCulture;

var COOKIE_DEFAULT_CULTURE = "CK_DEFAULT_CULTURE";

if (window.$)
{
	$(document).ready(function() {
		var shortCulture = getBrowserCulture().substr(0, 2);
		var defaultCulture = getCookie(COOKIE_DEFAULT_CULTURE);
		var confirmRedirect = false;
		if (!defaultCulture)
		{
			defaultCulture = shortCulture;
			confirmRedirect = true; /* Never been asked. */
		}

		var shortBoardCulture = board_culture.substr(0, 2);
		setCookie(COOKIE_DEFAULT_CULTURE, shortBoardCulture);
		if (defaultCulture != shortBoardCulture)
		{
			/* Find the culture that matches the browser. */
			var i = 0;
			while (SBCultures[i][0].substr(0, 2) != defaultCulture) 
			{
				i++;
			}
			var currentCulture = SBCultures[i][0].substr(0, 2);
			
			/* Ask the user to redirect to it. */
			var confirmed = true;
			if ((i < SBCultures.length) && (!confirmRedirect || (confirmed = confirm(SBCultures[i][1]))))
			{
				setCookie(COOKIE_DEFAULT_CULTURE, currentCulture);
				document.location = getMirrorUrl(SBCultures[i][0]);
			}
		}
		bodyLoader();
	});
}

function getMirrorUrl(currentCulture)
{
	var redirectUrl = "/";
	if (window.mirrorUrls)
	{
		var i = 0;
		while ((i < mirrorUrls.length) && (mirrorUrls[i][0] != currentCulture.substr(0, 2)))
		{
			i++;
		}
		if (i < mirrorUrls.length)
		{
			redirectUrl = mirrorUrls[i][1];
		}
	}
	
	return redirectUrl;
}

function getBrowserCulture()
{
	return (navigator["language"])?navigator["language"]:navigator["userLanguage"];
}


function editLivePage(sender, field, table, keyVal, culture)
{
	liveField = field;
	liveTable = table;
	liveKeyVal = keyVal;
	liveCulture = culture;

	alert(SBPhrases["EDIT_MODE"]); 
	if(document.addEventListener)
	{
		document.addEventListener("keyup",keyCapt,false);
	}
	else
	{
		document.attachEvent("onkeyup",keyCapt);
	} 

	originalClass = sender.className;
	originalOnClick = sender.ondblclick;
	originalHtml = sender.innerHTML;
	originalEdit = sender;
	originalEdit.className = "sbLiveEdit";
	sender.contentEditable = true;
	document.designMode = 'on';
	originalEdit.focus();
}
function keyCapt(e)
{
	if (window.event)
	{
		e = window.event;
	}
	var codeS = 83;
	var codeQ = 81;
	var codeB = 66;
	var codeI = 73;
	var codeEscape = 27;

	if (e.ctrlKey && e.altKey)
	{
		if ((e.keyCode == codeS) || (e.keyCode == codeQ))
		{
			if (e.keyCode == codeS)
			{
				var pl = new SOAPClientParameters();
				pl.add("TableName", liveTable);
				pl.add("FieldName", liveField);
				pl.add("FieldValue", originalEdit.innerHTML);
				pl.add("KeyValue", liveKeyVal);
				pl.add("CultureKey", liveCulture);
				SOAPClient.invoke(URL_SOAP_SAVE, "SaveField", pl, true, SaveField_CallBack);
			}
			else
			{
				editLivePageStop();
			}
		}
/*
		else
		{
			if (e.keyCode == codeB)
			{
				format_sel("b")
			}
			else if (e.keyCode == codeI)
			{
				format_sel("i")
			}
			//alert(e.keyCode);
		}
*/
	}
	else if (e.keyCode == codeEscape)
	{
		editLivePageStop();
		originalEdit.innerHTML = originalHtml;
	}
}

function editLivePageStop()
{
	originalEdit.contentEditable = false;
	document.designMode = 'off';
	originalEdit.className = originalClass;
	originalEdit.ondblclick = originalOnClick;
	if(document.removeEventListener)
	{
		document.removeEventListener("keyup", keyCapt, false);
	}
	else
	{
		document.detachEvent("onkeyup", keyCapt);
	}
	
}

function SaveField_CallBack(data)
{
	if (isNaN(data))
	{
		alert(data.toSource());
	}
	else
	{
		alert(SBPhrases["SAVED"]);
		editLivePageStop();
	}
}

//http://www.oreillynet.com/pub/a/javascript/2001/12/21/js_toolbar.html
/*
just plan doesn't work and sick of trying
function format_sel(v) 
{
	var sel = document.selection;
	if (!sel)
	{
		sel = window.getSelection();
	}
	var range;
	if (sel.createRange)
	{
		range = sel.createRange();
	}
	else
	{
		range = sel.getRangeAt(0);
	}

childNodes.startContainer.textContent = "<" + v + ">" + range.startContainer.textContent + "</" + v + ">";

alert(typeof(range))
	var str = range.text;
	alert(str);
	range.text = "<" + v + ">" + str + "</" + v + ">";
//alert(sel);
  return;
}
*/
function shortCulture(Culture)
{
	if (!Culture)
	{
		Culture = board_culture;
	}
	return Culture.substr(0, 2);
}

function getMailFormFieldCaption(input)
{
	var genericName = "field_";
	var name = "";
	if (input.name.substring(0, genericName.length) == genericName)
	{
		var captionField = document.getElementById(input.id + "_caption");
		if (captionField)
		{
			name = captionField.innerHTML;
		}
	}
	
	if (name == "")
	{
		return input.name.replace(/_/g, ' ');
	}
	else
	{
		return name;
	}
}

function ajaxMailTo(sender, recipientFunction)
{
	var form = sender;
	var msg = "", name, lastname;
	var cancelled = false;
	while ((msg == "") && (form.parentNode) && (!cancelled))
	{
		form = form.parentNode;
		var inputs = form.getElementsByTagName("INPUT");
		var selects = form.getElementsByTagName("SELECT");
		var textareas = form.getElementsByTagName("TEXTAREA");

		for (var i = 0; i < inputs.length; i++)
		{
			if ((inputs[i].type != "button") && (inputs[i].name != "__VIEWSTATE") && (((inputs[i].type != "radio") && (inputs[i].type != "checkbox")) || (inputs[i].checked)))
			{
				lastname = name;
				name = getMailFormFieldCaption(inputs[i]);
				if (inputs[i].value)
				{
					if (lastname != name)
					{ 
						msg += "\n" + name + ": ";
					}
					else
					{
						msg += ", ";
					}
					msg += inputs[i].value;
				}
				if ((inputs[i].getAttribute("required")) && (inputs[i].getAttribute("required").toLowerCase() == "yes") && ((inputs[i].value == "") || (inputs[i].value == inputs[i].defaultValue)))
				{
					alert(String.format(SBPhrases["REQUIRED_FIELD"], name));
					inputs[i].focus();
					cancelled = true; /* breaks loop. */
				}
			} 
		}
		
		for (var i = 0; i < selects.length; i++)
		{
			var selections = "";
			var multipleSelections = false;
			for (j = 0; j < selects[i].options.length; j++)
			{
				if (selects[i].options[j].selected)
				{
					if (selections != "")
					{
						selections += "\n\t";
						multipleSelections = true;
					}
					selections += selects[i].options[j].text;
				}
			}
			var breaker = "";
			if (multipleSelections)
			{
				breaker = "\n\t";
			}
			name = getMailFormFieldCaption(selects[i]);
			if ((selects[i].getAttribute("required")) && (selects[i].getAttribute("required").toLowerCase() == "yes") && (selections == ""))
			{
				alert(String.format(SBPhrases["REQUIRED_FIELD"], name));
			}
			msg += "\n" + name + ": " + breaker + selections;
		}
		
		for (var i = 0; i < textareas.length; i++)
		{
			name = getMailFormFieldCaption(textareas[i]);
			msg += "\n" + name + ":\n" + textareas[i].value; 
			if ((textareas[i].getAttribute("required") == "yes") && (textareas[i].value == ""))
			{
				alert(String.format(SBPhrases["REQUIRED_FIELD"], name));
				textareas[i].focus();
				form.parentNode = null; /* breaks loop */
			}
		}
	}

	if (!cancelled)
	{
		if (!recipientFunction)
		{
			recipientFunction = "SendEmail";
		}

		var pl = new SOAPClientParameters();
		pl.add("message", msg);
		//alert(msg);
		SOAPClient.invoke(URL_SOAP_TOOLBOX, recipientFunction, pl, true, ajaxMailTo_CallBack);
	}		
}

function ajaxMailTo_CallBack(data)
{
	if (data)
	{
		alert(data.toSource());
	}
	else
	{
		alert(SBPhrases["MAIL_SENT"]);
	}
}

var dropDowns;
function bodyLoader()
{
	dropDowns = document.getElementsByTagName("SELECT");
	for (var i = 0; i < dropDowns.length; i++)
	{
		var pl = new SOAPClientParameters();
		if (dropDowns[i].name.substring(0, 3) == "lst")
		{
			pl.add("dropName", dropDowns[i].name);
			pl.add("dropIndex", i);
			SOAPClient.invoke(URL_SOAP_TOOLBOX, "FillDrop", pl, true, fillDrop_CallBack);
		}
	}
}

function fillDrop_CallBack(data)
{
	if (data)
	{
		if (data.split)
		{
			var lines = data.split("\n");
			var drp = dropDowns[parseInt(lines[0])];
			drp.name = lines[1];
			if (drp.options.length == 0)
			{
				for (var i = 2; i < lines.length; i++)
				{
					if (lines[i] != "")
					{
						var item = lines[i].split("|");
						drp.options[drp.options.length] = new Option(item[1], item[0]);
					}
				}
			}
		}
		else
		{
			alert("Error: " + data.toSource());
		}
	}
}

function GetCreatedTimestamp()
{
	var pl = new SOAPClientParameters();
	SOAPClient.invoke(URL_SOAP_TOOLBOX, "GetCreatedTimestamp", pl, true, GetCreatedTimestamp_CallBack);
}

function DumpSpringBoard()
{
	var pl = new SOAPClientParameters();
	SOAPClient.invoke(URL_SOAP_TOOLBOX, "DumpSpringBoard", pl, true, GetCreatedTimestamp_CallBack);
}

function GetCreatedTimestamp_CallBack(data)
{
	document.getElementById('divStarted').innerHTML = data;
}
function ClearLog()
{
	var pl = new SOAPClientParameters();
	SOAPClient.invoke(URL_SOAP_TOOLBOX, "ClearLog", pl, true, ClearLog_CallBack);
}
function ClearLog_CallBack(data)
{
	if (data)
	{
		jAlert(data.toSource());
	}
	else
	{
		ReloadLog();
	}
}

function ReloadLog()
{
	document.getElementById('frmLog').contentWindow.location.reload(true);
}

function setCookie(name, Value, Days)
{
	if (!Days) 
	{
		Days = 365;
	}
	var endDate = new Date();
	endDate.setTime(endDate.getTime() + Days * 24 * 60 * 60 * 1000);
	document.cookie = String.format("{0}={1}; expires={2}; path=/;", name, escape(Value), endDate.toGMTString());
}
function getCookie(Name, defaultValue)
{
	var returnValue = getCookieRaw(Name);
	if (!returnValue)
	{
		returnValue = defaultValue;
	}
	return returnValue
}
function getCookieRaw(Name)
{
	var cookieName = Name + "=";
	var cookieLength = document.cookie.length;
	var cookieStart = 0;
	while (cookieStart < cookieLength)
	{
		var variableStart = cookieStart + cookieName.length;

		if (document.cookie.substring(cookieStart, variableStart) == cookieName)
		{
			var variableEnd = document.cookie.indexOf (";", variableStart);
			if (variableEnd == -1)
			{
				variableEnd = cookieLength;
			}
			var returnValue = unescape(document.cookie.substring(variableStart, variableEnd));
			if (returnValue == "null")
			{
				returnValue = null;
			}
			return returnValue;
		}

		cookieStart = document.cookie.indexOf(" ", cookieStart) + 1;

		if (cookieStart == 0)
		{
			break;
		}
	}
}

function getBrowserCulture()
{
	return (navigator["language"])?navigator["language"]:navigator["userLanguage"];
}

function UserLogin(UserName, Password, UserLogin_CallBack)
{
	var pl = new SOAPClientParameters();
	pl.add("UserName", UserName);
	pl.add("Password", Password);
	SOAPClient.invoke(URL_SOAP_TOOLBOX, "UserLogin", pl, true, UserLogin_CallBack);
}

function UserLogout(UserLogout_CallBack)
{
	var pl = new SOAPClientParameters();
	SOAPClient.invoke(URL_SOAP_TOOLBOX, "UserLogout", pl, true, UserLogout_CallBack);
}

function UserLoginFacebook(CallBack)
{
	if (!CallBack)
	{
		CallBack = UserLoginFacebook_CallBack;
	}
	var pl = new SOAPClientParameters();
	alert(SBPhrases["FACEBOOK_BUNDLEID"]);
	pl.add("bundleId", SBPhrases["FACEBOOK_BUNDLEID"])
	SOAPClient.invoke(URL_SOAP_TOOLBOX, "UserLoginFacebook", pl, true, CallBack);
}

function UserLoginFacebook_CallBack(data)
{
	if (data.toString().toLowerCase() != trueStr.toLowerCase())
	{
		alert(SBPhrases["FACEBOOK_LOGINFAILED"] + "\r\n" + data.toSource());
	}
	else
	{
		window.location.reload();		
	}
}

function SendPasswordReminder()
{
	var pl = new SOAPClientParameters();
	pl.add("CultureCode", board_culture);
	pl.add("Email", document.getElementById('txtEmail').value);
	SOAPClient.invoke(URL_SOAP_TOOLBOX, "SendPasswordReminder", pl, true, SendPasswordReminder_CallBack);
}

function SendPasswordReminder_CallBack(data)
{
	var msg = SBPhrases["PWD_SENT"];
	if (data)
	{
		msg = data.toSource();
	}
	var divReminder = document.getElementById('divReminder');
	if (divReminder)
	{
		divReminder.innerHTML = msg;
	}
	else
	{
		alert(msg);
	}
}

function ResetPassword()
{
	var newPassword = document.getElementById("txtPassword").value;
	if (newPassword != document.getElementById("txtPasswordConfirm").value)
	{
		alert(SBPhrases["PWD_NOMATCH"]);
	}
	else
	{
		var tokenParam = "token=";
		var token = document.location.toString().substr(document.location.toString().indexOf(tokenParam) + tokenParam.length);
		var pl = new SOAPClientParameters();
		pl.add("CultureCode", board_culture);
		pl.add("Token", token);
		pl.add("Password", newPassword);
		SOAPClient.invoke(URL_SOAP_TOOLBOX, "ResetPassword", pl, true, ResetPassword_CallBack);
	}
}

function ResetPassword_CallBack(data)
{
	var msg = SBPhrases["PWD_CHANGED"];
	if (data)
	{
		msg = data.toSource();
	}
	alert(msg);
}
