var $ = document.getElementById;


/*** Home ***/
function GetImageUrl(imageId)
{return "http://" + window.location.host + window.location.pathname.substr(0, window.location.pathname.indexOf("/", 1)) + "/images/slideshows/home/" + imageId + ".jpg";}

function PlaySlideShow()
{
	if (preloadedImages[0].complete == true || preloadedImages[1].complete == true)
	{
		currentImageIndex = ((currentImageIndex == 0) ? 1 : 0);
		if (preloadedImages[currentImageIndex].complete != true) currentImageIndex = ((currentImageIndex == 0) ? 1 : 0);
		if (document.all) document.images.PictureBox.filters.item("DXImageTransform.Microsoft.Fade").apply();
		document.images.PictureBox.src = preloadedImages[currentImageIndex].src;
		if (document.all) document.images.PictureBox.filters.item("DXImageTransform.Microsoft.Fade").play();
		newImageId = Math.floor(Math.random()*numberOfImages);
		while (newImageId == preloadedImages[0].ImageId || newImageId == preloadedImages[1].ImageId)
			newImageId = Math.floor(Math.random()*numberOfImages);
		preloadedImages[currentImageIndex].ImageId = newImageId;
		preloadedImages[currentImageIndex].src = GetImageUrl(newImageId);
		setTimeout(PlaySlideShow, 10000);
	}
	else setTimeout(PlaySlideShow, 2000);
}



/*** Contact ***/
function Show(id)
{
	document.getElementById("MessageDiv").style.display = "none";
	document.getElementById("SendingDiv").style.display = "none";
	document.getElementById("SuccessDiv").style.display = "none";
	document.getElementById("ErrorDiv").style.display = "none";
	if (id)
		document.getElementById(id).style.display = "inline";
	else
		document.getElementById("MessageDiv").style.display = "inline";
}

function Send()
{
    var doCallback = true;
    if (typeof(Page_ClientValidate) == "function" && Page_ClientValidate(null) != true)
        doCallback = false;
    if (doCallback == true)
    {
		var xml = null;
        var xmlDom;
        try { xmlDom = new ActiveXObject("Msxml2.DOMDocument.6.0"); } catch(e){}
        try { xmlDom = new ActiveXObject("Msxml2.DOMDocument.4.0"); } catch(e){}
        if (xmlDom)
        {
			var root = xmlDom.createElement("Contact");
			xmlDom.appendChild(root);
			var name = xmlDom.createElement("Name");
			name.text = GetNameTextBox().value;
			root.appendChild(name);
			var email = xmlDom.createElement("Email");
			email.text = GetEmailTextBox().value;
			root.appendChild(email);
			var subject = xmlDom.createElement("Subject");
			subject.text = GetSubjectTextBox().value;
			root.appendChild(subject);
			var message = xmlDom.createElement("Message");
			message.text = GetMessageTextBox().value;
			root.appendChild(message);
			xml = xmlDom.xml;
        }
        else
        {
	        var escapeXmlText = function(text)
	        {
				if (text && text.length > 0)
					return (new String(text)).replace(/&/g, "&amp;").replace(/</g, "&lt;");
	        };
	        xml = "<Contact><Name>" + escapeXmlText(GetNameTextBox().value) + "</Name><Email>" + escapeXmlText(GetEmailTextBox().value) + "</Email><Subject>" + escapeXmlText(GetSubjectTextBox().value) + "</Subject><Message>" + escapeXmlText(GetMessageTextBox().value) + "</Message></Contact>";
		}
		if (xml && xml.length > 0)
		{
			Show("SendingDiv");
			SendCallback(xml);
		}
		else
		{
			document.getElementById("ErrorReason").innerHTML = "Could not send message.";
			Show("ErrorDiv");
		}
    }
}

function SendAnother()
{
	var msgDiv = document.getElementById("MessageDiv");
	var textboxes = msgDiv.getElementsByTagName("input");
	var textareas = msgDiv.getElementsByTagName("textarea");
	if (textboxes && textboxes.length == 3)
		textboxes[2].value = "";
	if (textareas && textareas.length == 1)
		textareas[0].value = "";
	Show("MessageDiv");
}

function TryAgain()
{
	Show("MessageDiv");
}

function SendCallbackSuccess(data, context)
{
	if (data && data.length > 0)
	{
		document.getElementById("ErrorReason").innerHTML = data;
		Show("ErrorDiv");
	}
	else
		Show("SuccessDiv");
}

function SendCallbackError(error, context)
{
	if (error && error.length > 0)
		document.getElementById("ErrorReason").innerHTML = error;
	else
		document.getElementById("ErrorReason").innerHTML = "Unknown.";
	Show("ErrorDiv");
}


/*** Videos ***/
function get_mediainfo(mediainfoIndex) {
    switch (mediainfoIndex) {        

        case 0:
            return  { "mediaUrl": GetVideoSource(),
                      "placeholderImage": GetVideoCoverImage(),
                      "chapters": [               
                                  ] };                                                                
                          
        default:
             throw Error.invalidOperation("No such mediainfo");
     }
}

function StartWithParent(parentId, appId) {
    new StartSilverlightPlayer(parentId);
}

function StartSilverlightPlayer(parentId) {
    this._hostname = EePlayer.Player._getUniqueName("xamlHost");
    Silverlight.createObjectEx( {   source: GetPlayerSource(), 
                                        parentElement: $get(parentId ||"silverlightHost"), 
                                        id:this._hostname, 
                                        properties:{ width:'100%', height:'100%', version:'1.0', background:'#ffffff', isWindowless:'false' }, 
                                        events:{ onLoad:Function.createDelegate(this, this._handleLoad) } } );
    this._currentMediainfo = 0;      
}

StartSilverlightPlayer.prototype= {
    _handleLoad: function() {
        this._player = $create(   ExtendedPlayer.Player, 
                                  { // properties
                                    autoPlay    : false, 
                                    volume      : 0.5,
                                    muted       : false
                                  }, 
                                  { // event handlers
                                    mediaEnded: Function.createDelegate(this, this._onMediaEnded),
                                    mediaFailed: Function.createDelegate(this, this._onMediaFailed)
                                  },
                                  null, $get(this._hostname)  ); 
        this._playNextVideo();     
    },    
    _onMediaEnded: function(sender, eventArgs) {
        window.setTimeout( Function.createDelegate(this, this._playNextVideo), 1000);
    },
    _onMediaFailed: function(sender, eventArgs) {
        alert(String.format( Ee.UI.Xaml.Media.Res.mediaFailed, this._player.get_mediaUrl() ) );
    },
    _playNextVideo: function() {
        var cVideos = 1;
        if (this._currentMediainfo<cVideos)
            this._player.set_mediainfo( get_mediainfo( this._currentMediainfo++ ) );    
    }        
}



/*** City Info Control ***/
var weekdays = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var clocks = new Array();
function RunClock()
{
    var clock = null;
    var seconds = 0;
    if (clocks.length > 0)
        seconds = clocks[0].Date.getSeconds() + 1;
    for (var i = 0; i < clocks.length; ++i)
    {
        clock = clocks[i];
        if (clock != null)
        {
            clock.Date.setSeconds(seconds);
            clock.Control.innerHTML = weekdays[clock.Date.getDay()] + ", " + months[clock.Date.getMonth()] + " " + clock.Date.getDate() + ", " + clock.Date.getFullYear() + " at " + clock.Date.getHours() + ":" + EnsureDoubleDigit(clock.Date.getMinutes()) + ":" + EnsureDoubleDigit(clock.Date.getSeconds());
        }
    }
    window.setTimeout(RunClock, 1000);
}

function EnsureDoubleDigit(num)
{
    if (num.toString().length == 1)
        return "0" + num.toString();
    return num.toString();
}

function GetTimeCallback(data, context)
{
    var date = new Date(data);
    if (!isNaN(date.getFullYear()))
        clocks.push({Date:date,Control:document.getElementById(context + "_Time")});
    else
        document.getElementById(context + "_Time").innerHTML = data;
}

function GetTimeCallbackError(error, context)
{
    document.getElementById(context + "_Time").innerHTML = error;
}

function GetWeatherCallback(data, context)
{
    document.getElementById(context + "_Weather").innerHTML = data;
}

function GetWeatherCallbackError(error, context)
{
    document.getElementById(context + "_Weather").innerHTML = error;
}



/*** Exchange Rate Control ***/
function GetFxRateCallback(data, context)
{
    document.getElementById(context + "_FxRate").innerHTML = data;
}

function GetFxRateCallbackError(error, context)
{
    document.getElementById(context + "_FxRate").innerHTML = error;
}
