//***************************************************************************//
//***************************************************************************//
// Copyright (c) 2009 Nils Valtu
// IFIE IngenieurbÃ¼ro fÃ¼r innovative Entwicklungen
// Gustav-Meyer-Allee 25, 13355 Berlin Germany
//
// Contact: kontakt@ifie.com
//
// Author: Nils Valtu
//
//***************************************************************************//
//***************************************************************************//

/**
 * L O A D
 */

function onSectionLoaded(data){
    var res = data.Payload.Result;

    animateActivity(document.getElementById(res.link),false);
    if(data.Success == 1){

    }
}

function onLoadSection(link, element, aid, action, sender, chapter, section, entity)
{
    animateActivity(link,true);
    var cssClass = "project-settings-section-loading";
    var e = document.getElementById(link);
    e.setAttribute("class",cssClass);

    var reqVars = {sender:sender, pjid:chapter, element:element, a:'loadactors', entity: entity, aid: aid};
    $.post(AjaxHelperUrl, reqVars, onSectionLoaded, "json");
}


function onActorsLoaded(data, link, element, action, sender, chapter, section, entity){
    animateActivity(link,false);

    var result = data.Payload.Result;
    var cssClass = result.state ? "project-settings-section-open" : "project-settings-section";
    var e = document.getElementById(result.link ? result.link : link);
    e.setAttribute("class", cssClass);

    if(data.Success == 1){
        var actorView = data.Payload.View;

        var updated_summary = $(actorView).find('.actor-settings-summary');
        if(updated_summary.length > 0){

            var aview = $(actorView).find('.actor-settings-view').html();

            var list = $('ul#'+result.element);
            if(list.length > 0)
                list[0].innerHTML = aview;

            $(list).hide();
        }else{
            var list = $('ul#'+result.element);
            if(list.length > 0)
                list[0].innerHTML = actorView;

            $(list).hide();
        }

        onToggleSection(link, element, action, sender, chapter, section, entity);
    }
}

function onLoadActors(link, element, action, sender, chapter, section, entity){
    var cssClass = "project-settings-section-loading";
    var e = document.getElementById(link);
   // e.setAttribute("class",cssClass);


   var link_id = new String($("a#"+link).attr('id'));
   /*if(link_id.search('actors')>-1){*/
       animateActivity(link,true);

       var list = $('ul#'+element);
       var aid = list.find('input[name=aid]')[0].value;
       var zid = list.find('input[name=zid]')[0].value;

       var pjid = $('input[name=pjid]')[0].value;

       var reqVars = {a: 'loadactors', aid: aid, zid: zid, link: link, element: element, sender: (sender == "CProfileSettingsView" ? sender : "CProjectSettingsView"), entity: entity, pjid: pjid};

       var pfid = $('input[name=pfid]');
       if(pfid.length > 0)
           reqVars['pfid'] = pfid[0].value;
       $.post(AjaxHelperUrl, reqVars, function(data){onActorsLoaded(data, link, element, action, sender, chapter, section, entity);}, "json");

   /*}else if(link_id.search('actor')>-1){  //is actor
       var lis = $("a#"+link).parent();
       $.each(lis,function(i,li){
       var inp0 = $(li).find('input:first');
       if(inp0.length == 1){
            var modelName = $(li).find('input[name=Model]')[0].value;
            var acid = $(li).find('input[name=acid]')[0].value;

            var reqVars =  {a: 'loadactors', link: link, element: element, sender: "CProjectSettingsView", model: modelName, acid: acid};

            $.post(AjaxHelperUrl, reqVars, function(data){  onActorsLoaded(data, link, element, action, sender, chapter, section, entity);}, "json");
       }
    });
   }else{
       //load zone
       var zoneID = new String($('#'+link).attr('name'));
       zoneID = zoneID.substr(1, zoneID.length);
       var reqVars = {a: 'loadactors', actor: "zone", zoneID: zoneID,  link: link, element: element, sender: "CProjectSettingsView", model: "CZoneModel"};
       $.post(AjaxHelperUrl, reqVars, function(data){  onActorsLoaded(data, link, element, action, sender, chapter, section, entity);}, "json");
   }*/

   return;
}


/**
 * T O G G L E
 */
function onSectionToggled(data)
{
	if(data.Success == 1)
	{
		var result = data.Payload.Result;
		if(result.state)
			$('#'+result.element).show(500);
		else
			$('#'+result.element).hide(500);

		var cssClass = result.state ? "project-settings-section-open" : "project-settings-section";
		var e = document.getElementById(result.link);
		e.setAttribute("class", cssClass);
		e.setAttribute("title", result.title);
	}
}

function justToggleSelection(link, element){

    var state = ($('#'+element).css('display') == 'none');

    $('#'+element).toggle(500);

    var cssClass = (state  ? "project-settings-section-open" : "project-settings-section");
    var e = document.getElementById(link);
    e.setAttribute('class', cssClass);
    //e.setAttribute('title', title);
}

function onToggleSection(link, element, action, sender, chapter, section, entity)
{
        //test for unloaded children

        var sectionElement = $('ul#'+element);

        var actorSettingsForm = sectionElement.find('form#actorSettingForm');
        if(actorSettingsForm.length > 0){
            //an actor is in editable mode
            //submit current setting
            submitActorSetting(actorSettingsForm[0],false);
        }

        var portSettingsForm = sectionElement.find('form#portSettingForm');
        if(portSettingsForm.length > 0){
            submitPortSetting(portSettingsForm[0], false);
        }

        var nchilds = sectionElement.children('li').length;

        var sectionElementLoaded = (nchilds> 0);

        if(!sectionElementLoaded){
            var aid = sectionElement.find('input[name=aid]')[0].value;

            var pjid = $('input[name=pjid]')[0].value;
            var entity = new String($('#'+link).attr('name'));
            entity = entity.substr(1, entity.length-1);

            onLoadActors(link, element, action, sender, chapter, section, entity);
        }else{
            if(true)
                justToggleSelection(link, element);
            else {

                var cssClass = "project-settings-section-loading";
                var e = document.getElementById(link);
                e.setAttribute("class", cssClass);

                var reqVars = {link:link, element:element, a:action, sender:sender, chapter:chapter, section:section, entity:entity};
                $.post(AjaxHelperUrl, reqVars, onSectionToggled, "json");
            }
        }
}
/**
 */

/**
 * E D I T    P R O F I L E S
 */
function onActorLinkageToProfileSubmitted(data)
{
	if(data.Success == 1)
	{
		var result = data.Payload.Result;
		var cssClassLink, cssClassRow;
		if(result.state == "1")
		{
			cssClassLink = "button-remove-small";
			cssClassRow = "project-settings-section-noarrow";
		}
		else
		{
			cssClassLink = "button-add-small";
			cssClassRow = "project-settings-section-noarrow-inactice";
		}

		var e = document.getElementById(result.link);
		e.setAttribute("class", cssClassLink);
		e.setAttribute("title", result.title);
		e = document.getElementById(result.element);
		e.setAttribute("class", cssClassRow);
	}
}

function submitActorToProfileLinkage(sender, action, profileId, linkModel, zoneId, actorId, linkid, element)
{
	var reqVars = {link:linkid, element:element, sender:sender, a:action, pid:profileId, model:linkModel, zid:zoneId, acid:actorId};
	$.post(AjaxHelperUrl, reqVars, onActorLinkageToProfileSubmitted, "json");

}

function onZoneLinkageToProfileSubmitted(zoneId,data)
{
        animateActivity('toggle_activities-'+zoneId,false);
    	if(data.Success == 1)
	{
		var result = data.Payload.Result;
		var cssClassLink, cssClassRow;
		if(result.state == "0")
		{
			cssClassLink = "button-add-small";
			cssClassRow = "project-settings-section-noarrow-inactice";
		}
		else
		{
			cssClassLink = "button-remove-small";
			cssClassRow = "project-settings-section-noarrow";
		}

		var e = document.getElementById(result.element);
                var input_elements = $(e).children('li').find('input[type=submit]');
                input_elements.each(function(i,item){
                    toggleInputLinkToProfile(this,result.title,result.state);
                });
                
                
	}
}

function toggleInputLinkToProfile(input,title,state){
        var cssClassLink, cssClassRow;
        if(state == "0")
        {
                cssClassLink = "button-add-small";
                cssClassRow = "project-settings-section-noarrow-inactice";
        }
        else
        {
                cssClassLink = "button-remove-small";
                cssClassRow = "project-settings-section-noarrow";
        }

        var t = $(input);
        var span = t.parent('form').parent('li').children('span');
        var caption = span.text();

        var oldtitle = new String(t.attr('title'));
        var oldpos = oldtitle.search(caption);

        var newtitle = "";
        if(oldpos == 0){
            newtitle = caption + " " + title;
        }else {
            newtitle = title + " " + caption;
        }

        t.attr('class',cssClassLink);

        t.attr("title", newtitle);
        span.attr('class',cssClassRow);
}

function submitZoneToProfileLinkage(sender, action, profileId, zoneId, element){
    animateActivity('toggle_activities-'+zoneId,true);
    var reqVars = {element: element, sender: sender, a:action, pid:profileId, zid: zoneId};
    $.post(AjaxHelperUrl, reqVars, function(data){ 
        onZoneLinkageToProfileSubmitted(zoneId,data);
    }, "json");
}

function onAllZonesToProfileLinkage(sender, data){
        animateActivity($('ul#'+sender).children('li:first').children('span:first'),false);
    	if(data.Success == 1)
	{
		var result = data.Payload.Result;
		var cssClassLink, cssClassRow;
		if(result.state == "0")
		{
			cssClassLink = "button-add-small";
			cssClassRow = "project-settings-section-noarrow-inactice";
		}
		else
		{
			cssClassLink = "button-remove-small";
			cssClassRow = "project-settings-section-noarrow";
		}

		var e = document.getElementById(result.element);
                var input_elements = $(e).children('li').children('ul').children('li').children('ul').children('li').find('input[type=submit]');
                input_elements.each(function(i,item){
                    toggleInputLinkToProfile(this,result.title,result.state);
                });


        }
}

function submitAllZonesToProfileLinkage(sender, action, profileId, projectId, element){
    animateActivity($('ul#'+sender).children('li:first').children('span:first'),true);
    var reqVars = {element: element, sender: sender, a:action, pfid:profileId, pid:projectId};
    $.post(AjaxHelperUrl, reqVars, function(data){
        onAllZonesToProfileLinkage(sender,data);
    }, "json");
}

/**
 * D E L E T E   I T E M S
 */

function onZoneDeleted(data){
    var result = data.Payload.Result;
    animateActivity(result.link,false);

    if(data.Success == 1){
        var link = document.getElementById(result.link);
        var row = link.parentNode;

        $(row).hide(500, function(){
            $(this).remove();
        });

    }
}

function onDeleteZone(link, element, action, sender, pjid, aid, acid, zid){
    var reqVars = {
        a: action,
        link: link,
        element: element,
        action: action,
        sender: sender,
        pjid: pjid,
        aid: aid,
        entity: acid,
        zid: zid

    };

    var r = window.confirm(document.JLocale.Message('conf_del_zone','zone'));
    if(r){
        animateActivity(link,false);
        $.post(AjaxHelperUrl, reqVars, onZoneDeleted, "json");
    }
}

function onZoneRenamed(data){
    var result = data.Payload.Result;
    if(data.Success == 1){
        var e = document.getElementById(result.element);
        e.innerHTML = data.Payload.View;
    }
}

function onRenameZone(link,element, action, sender, pjid, aid, acid, zid){

    var e = document.getElementById(element);
    var el = $(e);

    var par = el.parent();

    var i = par.children('li').index(el);

    var reqVars = {

        a: action,
        link: link,
        element: element,
        action: action,
        sender: sender,
        pjid: pjid,
        aid: aid,
        entity: acid,
        zid: zid,
        tabIndex: i

    };

    animateActivity(link,false);
    $.post(AjaxHelperUrl, reqVars, onZoneRenamed, "json");
}

function onActorDeleted(data){
    var result = data.Payload.Result;
    animateActivity(result.link,false);

    if(data.Success == 1){
        var link = document.getElementById(result.link);
        var row = link.parentNode;

        $(row).hide(500, function(){
            var csibs = $(this).siblings().length;

            if(csibs == 0){
                var view = $(data.Payload.View);
                view.hide();

                var index = -1;

                $.each(view, function(i,item){
                    if(!$(item).hasClass("message"))
                        index = i;
                });

                if(index > -1){
                    var v = $(view[index]);
                    $(this).replaceWith(v);
                    v.show(500);
                }
            }
            else
                $(this).remove();

        });

    }
}

function onDeleteActor(link, element, action, sender, pjid, section, entity, zid, actorTypeName, actorName){
    var reqVars = {
        a: action,
        link: link,
        element: element,
        action: action,
        sender: sender,
        pjid: pjid,
        zid: zid,
        section: section,
        entity: entity
    };

    var r = window.confirm(document.JLocale.Message('conf_del_actor',[actorTypeName,actorName]));
    if(r){
        animateActivity(link,true);
        $.post(AjaxHelperUrl, reqVars, onActorDeleted, "json");
    }
}


/**
 * K E Y   H A N D L E R
 */
var IsEditing = "0";

function tabKeyHandler(form)
{
	submitActorSetting(form, true);
}

function onActorSettingSubmitted(data)
{
	var result = data.Payload.Result;
	var view = data.Payload.View;

        var trigger = data.Payload.Trigger;

        IsEditing = result.edit;

        var tindex = new Number(result.tabIndex);
	var e = document.getElementById(result.element);

        if(trigger != null)
        {
            onHandleTrigger(trigger,e);
        }

        if($(view).length == 2){
            var setting = $(view)[0];
            var summary = $(view)[1];
            var lis = $(e.parentNode).children('li');

            e.innerHTML = $(setting).html();
            if(lis.index(e) == lis.length-1 && result.edit == "1")
                e.innerHTML += "<br style='clear: both;'/>";

            var summary_element = $(e.parentNode).parent().children('.project-settings-actor-summary')
            summary_element.html($(summary).html());
        }else {
            e.innerHTML = view;
        }
	var isActor = result.a == "edac";

	if(tindex != Number.NaN && tindex > -1 && (tindex+1)< e.parentNode.childNodes.length)
	{
		tindex++;
                var ael = result.element.split("-");

		if(isActor)
		{
			var el = ael[0]+"-"+ael[1]+"-"+ael[2]+"-";
                        e = document.getElementById(el+tindex.toString());
                        while(e && !$(e).is(':visible')){
                            e = document.getElementById(el+(++tindex).toString());
                        }
			if(e)
				openActorSettingsEditor(el+tindex.toString());
			else
				openActorSettingsEditor(el+"0");
		}
		else
		{
			var el = ael[0]+"-"+ael[1]+"-";
                        e = document.getElementById(el+tindex.toString());
                        while(e && !$(e).is(':visible')){
                            e = document.getElementById(el+(++tindex).toString());
                        }
			if(e)
				openPortSettingsEditor(el+tindex.toString());
			else
				openPortSettingsEditor(el+"0");
		}
	}

	if(result.edit == "1")
	{
		var form = isActor ? 'actorSettingForm' : 'portSettingForm';
		var input = document.forms[form].elements['Value'];//.select();
		input.focus();
		if(input.type == "text")
			input.select();
	}else{
            if(result.element.toString().search('CLightModel') > -1){
                /* triggers for light model */

                //slider settings visible
                var sliderValue = ($(e).parent().find('.CLightModel-Slider input[name="Value"]').attr('value')=="1");
                toggleLightSettingsDimmer($(e).parent('ul'), sliderValue );

                var actorName = $(e).find('input[name="Name"]').attr('value');
                var actorValue = $(e).find('input[name="Value"]').attr('value');

                var DPS = $(e).find('input[name="DPS"]');
                var DPD = $(e).find('input[name="DPD"]');

                if(DPS.length > 0 && DPD.length > 0)
                {
                    var valDPS = DPS.attr('value');
                    var valDPD = DPD.attr('value');
                }


            }
        }


}

function submitActorSetting(form, fromtab)
{
	var tabIndex = (fromtab) ? form.index.value : -1;
	var reqVars = {sender:form.sender.value, pjid:form.pjid.value, element:form.listitem.value,
					a:form.a.value, acid: form.EditActor.value, Name:form.Name.value, Model:form.Model.value,
					index:form.index.value, tabIndex:tabIndex, Value:form.Value.value, options:form.options.value,
					anchor:form.anchor.value, maxlen:form.maxlen.value, def:form.def.value, edit:0, reqId:form.reqId.value, dataType: form.DataType.value};
	$.post(AjaxHelperUrl, reqVars, onActorSettingSubmitted, "json");
}

function submitPortSetting(form, fromtab)
{
	var tabIndex = (fromtab) ? form.index.value : -1;
	var reqVars = {sender:form.sender.value, pjid:form.pjid.value, element:form.listitem.value,
					a:form.a.value, pid: form.EditPort.value, name:form.Name.value,
					index:form.index.value, tabIndex:tabIndex, value:form.Value.value, options:form.options.value,
					anchor:form.anchor.value, maxlen:form.maxlen.value, def:form.def.value, edit:0, reqId:form.reqId.value};
	$.post(AjaxHelperUrl, reqVars, onActorSettingSubmitted, "json");
}

function openActorSettingsEditor(element)
{
	if(IsEditing == "1") return;

	var el = document.getElementById(element);
	var reqVars = {acid: 	el.childNodes[1].value,
					Name: 	el.childNodes[2].value,
					Model:	el.childNodes[3].value,
					a:		el.childNodes[4].value,
					reqId:	el.childNodes[6].value,
					index:	el.childNodes[7].value,
					sender:	el.childNodes[8].value,
					pjid:	el.childNodes[9].value,
					options:el.childNodes[10].value,
					anchor:	el.childNodes[11].value,
					maxlen:	el.childNodes[12].value,
					def:	el.childNodes[13].value,
					Value:	el.childNodes[16].value,
					element:element,
					edit:	"1" ,
                                        dataType:   el.childNodes.length > 18 ? el.childNodes[18].value : 0};

        /*var t = $('#'+element).parent().parent().children('a:first').attr('id');

	animateActivity(t,true);*/
        $.post(AjaxHelperUrl, reqVars, onActorSettingSubmitted, "json");
}

function onSectionEditorOpened(data){

    if(data.Success == 1){
        var editView = data.Payload.View;

        var link = data.Payload.Result.link;

        var e = $('a#'+link).parent('li');

        e.html(editView);
    }

}

function onSectionSettingSubmitted(data, form){
    if(data.Success == 1){
        var view = data.Payload.View;
        var result = data.Payload.Result;

        var f = $(form).parent();
        f.html(view);
    }
}


function submitSectionSetting(reqVars, form){
    reqVars.a = 'edsecsub';
    reqVars.sender = "CProjectSettingsView";

    $.post(AjaxHelperUrl, reqVars, function(data){onSectionSettingSubmitted(data,form);}, 'json');
    return false;
}

function openSectionEditor(link, element, action, sender, chapter, section, entity){
    if(IsEditing == "1") return;

    var el = document.getElementById(element);

    var tabIndex = 0;

    if(section == "zone"){
        var sec_li = $(el).parent();
        var p = sec_li.parent().children();
        tabIndex = p.index(sec_li[0]) + 1;
    }

    var reqVars = {
                a: 'edsec',
                link: link,
                element: element,
                sender: sender,
                chapter: chapter,
                section: section,
                entity: entity,
                edit: "1",
                tabIndex: tabIndex
    };

    $.post(AjaxHelperUrl, reqVars, onSectionEditorOpened, "json");
    return false;
}

function openPortSettingsEditor(element)
{
	if(IsEditing == "1") return;

	var el = document.getElementById(element);
	var reqVars = {pid: 	el.childNodes[1].value,
					name: 	el.childNodes[2].value,
					a:		el.childNodes[3].value,
					reqId:	el.childNodes[4].value,
					index:	el.childNodes[5].value,
					sender:	el.childNodes[6].value,
					pjid:	el.childNodes[7].value,
					options:el.childNodes[8].value,
					anchor:	el.childNodes[9].value,
					maxlen:	el.childNodes[10].value,
					def:	el.childNodes[11].value,
					value:	el.childNodes[12].value,
					element:element,
					edit:	"1"};
	$.post(AjaxHelperUrl, reqVars, onActorSettingSubmitted, "json");
}

function animateActivity(link, animate){
    var olink = null;
    if(typeof link == "object")
        olink = link[0];
    else
        olink = document.getElementById(link);

    if(animate){
        olink.className = "project-settings-section-loading";
    }else{
        if($(olink).siblings('ul').css('display') == "none")
            olink.className = "project-settings-section";
        else
            olink.className = "project-settings-section-open";
    }
}

/**
 * A D D   A C T O R S
 */


function onActorAdded(data){
    var result = data.Payload.Result;

    if(data.Success == 1){
        var element = document.getElementById(result.link);
        var new_view = $(data.Payload.View);
        new_view.hide();

        if($(element).children('li:first').find('a').length > 0){
            //elements already loaded, so we append the new view

            $(element).append(new_view);
            new_view.show(500);
        }else{
            //no element, or elements not yet loaded
            var lis = $(element).children('li');
            if(lis.length == 1){
                $(element).children('li').remove();
                $(element).append(new_view);
                new_view.show(500);
            }else
                $(element).parent().children('a:first').click();
        }

    }

    if(data.Exception)
    {
        alert(data.Exception.message);
    }
}

function onAddActor(link, pjid, zid, aid, acid) {

    var action = "";

    switch(aid){
        case 1:
            action = "addlight";
            break;

        case 2:
            action = "addblind";
            break;

        case 3:
            action = "addheat";
            break;

        case 4:
            action = "addweather";
            break;

        case 5:
            action = "addscene";
            break;
            
        case 6:
            action = "addaux";
            break;

        case 7:
            action = "addalarm";
            break;

    }

     var reqVars = {
         a: action,
         link: link,
         zid: zid,
         aid: aid,
         pjid: pjid,
         sender: 'CProjectSettingsView',
         acid: acid
     };

     $.post(AjaxHelperUrl, reqVars, onActorAdded, "json");
 }

/** toggle field display */

 function toggleFieldsVisible(fields, visible){
     $.each(fields,function(i,item){
         if(visible)
             $(item).show(500);
         else
             $(item).hide(500);
     });
 }

 function toggleLightSettingsDimmer(section,enabled){
     toggleFieldsVisible($(section).find('.CLightModel-DPD, .CLightModel-DPDR'),enabled);
 }

 /** trigger handling */

 function onHandleTrigger(trigger, subject)
 {
        if(trigger)
        {
            for(var i in trigger)
            {
                var c_trigger = trigger[i];
                var command = c_trigger.cmd;

                switch(command)
                {
                    case "setval":
                        var s_val = null;
                        if(c_trigger.source)
                            s_val = $(subject).parent().find('li.'+c_trigger.model+'-'+c_trigger.source).find('input[name="Value"]').attr('value');
                        else
                            s_val = c_trigger.value;

                        for(var i=0; i<c_trigger.targets.length; i++)
                        {
                            var t_name = c_trigger.targets[i];
                            var listElement = $(subject).parent().find('li.'+c_trigger.model+'-'+t_name);
                            var maxElement = listElement.find('input[name="MaxValue"]');
                            var maxVal = maxElement.attr('value');
                            if(parseInt(s_val) > parseInt(maxVal))
                            	s_val = maxVal;
                            var t_inp = listElement.find('span.project-settings-column a');
                            t_inp.text(s_val);

                            var t_inpf = listElement.find('input[name="Value"]');
                            t_inpf.attr('value',s_val);
                            
                        }
                        break;

                   case 'togglefield':
                       for(var i=0;i<c_trigger.targets.length; i++)
                       {
                           var t_name = c_trigger.targets[i];
                           var t_li = $(subject).parent().find('input[value='+t_name+']').parent('li');
                           if(c_trigger.value)
                               t_li.show(500);
                           else
                               t_li.hide(500);
                       }
                       break;
                }
            }
        }
 }

 function triggerCommand(cmd,source,targets)
 {

 }
