﻿
    

/// <summary>
/// 
/// </summary>
function Datastate(parentelement)
{
    //private variables
    var statediv = parentelement;
    var self = this;
    
    /*
    Array.prototype.remove = function(from, to) {
      var rest = this.slice((to || from) + 1 || this.length);
      this.length = from < 0 ? this.length + from : from;
      return this.push.apply(this, rest);
    };
    */
    
    
    /// <summary>
    /// creates a singe dataitem with key and value, to store data
    /// </summary>
    var getDataItem = function(key, value)
    {
        itm1 = new Object;
        itm1.valuekey = key;
        itm1.itemvalue = value; 
        return itm1;
    }
   
   
    /// <summary>
    /// creates a dataitemlist to store single dataitems, you can access a single item via key
    /// </summary>
    var getDataItemList = function()
    {
        dtlist = new Object;
        dtlist.items = new Array;
        return dtlist;
    }
    
    /// <summary>
    /// updates or creates (if doappend) a item in dataitemlist
    /// </summary>
    var internal_updateDataItem = function(dataitemlist, key, value, doappend)
    {   
        try
        { 
            for (iu=0;iu<dataitemlist.items.length;iu++)
            {
                var itm1 = dataitemlist.items[iu];
                if (itm1.valuekey == key)
                {
                    itm1.itemvalue = value;
                    return;
                }
            }
                    
            
            if (doappend == true)
            {
                itm2 = getDataItem(key,value);
                dataitemlist.items[dataitemlist.items.length] = itm2;
            }
       } catch (e)
       {
            alert(e);
       }
    }
    
    var internal_removeDataItem = function(dataitemlist, key)
    {    
        for (di=0;di<dataitemlist.items.length;di++)
        {
            itm1 = dataitemlist.items[di];
            if (itm1.valuekey == key)
            {
                //itm1.itemvalue = value;
                itm1.itemvalue="";
                dataitemlist.items.remove(di);
                return;
            } 
        }
    }
    
    var internal_removeByValue = function(dataitemlist, value)
    {
        try {
            for (ix=(dataitemlist.items.length-1);ix>-1;ix--)
            {
                itm1 = dataitemlist.items[ix];
                if (itm1.itemvalue == value)
                {
                    internal_removeDataItem(dataitemlist,itm1.valuekey);
                    //dataitemlist.items.remove(i);
                }
            }
        } catch(e)
        {
            alert(e); //TODO
        }
    }
    
    var internal_getItemsByValue = function(dataitemlist,value)
    {
        var result = new Array;
        for (ix=(dataitemlist.items.length-1);ix>-1;ix--)
        {
            itm1 = dataitemlist.items[ix];
            if (itm1.itemvalue == value)
            {
                result.push(itm1);
                //dataitemlist.items.remove(i);
            }
        }
        if (result.length > 0)
            return result;
        else
            return null;
    }
    
    var internal_getItemvalue = function(dataitemlist,key)
    {
        for (ix=(dataitemlist.items.length-1);ix>-1;ix--)
        {
            itm1 = dataitemlist.items[ix];
            if (itm1.valuekey == key)
            {                
                return itm1.itemvalue;
                //dataitemlist.items.remove(i);
            }
        }
        return null;
    }
    
    
    
    this.updateDataItem = function(key, value)
    {
        try
        {
            if (statediv.value != "")
            {
                var obj1 = JSON.parse(statediv.value);  //obj2 is a dataitemlist
                if (obj1)
                {
                    internal_updateDataItem(obj1,key,value,true);
                    statediv.value = JSON.stringify(obj1);    
                }
                
            } else
            {              
                var  searchstate = getDataItemList();
                if (searchstate)
                {
                    var itm1 = getDataItem(key,value);
                    searchstate.items.push(itm1);
                    var s1 = JSON.stringify(searchstate);
                    //alert(s1);
                    statediv.value = s1;
                }
            }   
        } catch(e)
        {
            alert(e);
        }
     } 
     
     this.removeByValue = function(value)
     {
        if (statediv.value != "")
        {
            var obj1 = JSON.parse(statediv.value);  //obj2 is a dataitemlist
            if (obj1)
            {
                internal_removeByValue(obj1,value);  
                var s1 = JSON.stringify(obj1);
                statediv.value = s1;
            }
        }
     }
     
     var removeItem = function(itemkey)
     {
        if (statediv.value != "")
        {
            var obj1 = JSON.parse(statediv.value);  //obj2 is a dataitemlist
            if (obj1)
            {
                internal_removeDataItem(obj1,itemkey);  
                var s1 = JSON.stringify(obj1);
                statediv.value = s1;
            }
        }
     }
     
    var internal_removeHpe = function(dataitemlist)
    {
        for (ix=(dataitemlist.items.length-1);ix>-1;ix--)
        {
            itm1 = dataitemlist.items[ix];
            if ((itm1.valuekey != "Internetkategorie_1") &&
                (itm1.valuekey != "Internetkategorie_2") &&
                (itm1.valuekey != "Internetkategorie_3") &&
                (itm1.valuekey != "Internetkategorie_4"))   
            {                
                internal_removeDataItem(dataitemlist,itm1.valuekey);
                //dataitemlist.items.remove(i);
            }
        }
        return null;
    }
     
     this.removeHpe = function()
     {
        if (statediv.value != "")
        {
            var obj1 = JSON.parse(statediv.value);  //obj2 is a dataitemlist
            if (obj1)
            {
                internal_removeHpe(obj1);  
                var s1 = JSON.stringify(obj1);
                statediv.value = s1;
            }
        }
     }
     
     this.getItemvalue = function(key)
     {
        //alert(statediv.value);
        if (statediv.value != "")
        {
            var obj1 = JSON.parse(statediv.value);  //obj2 is a dataitemlist
            if (obj1)
            {
                return internal_getItemvalue(obj1,key);
            }
        } else 
        {
            return null;
        }
     }
     
     this.getItemsByValue = function(value)
     {       
        if (statediv.value != "")
        {
            var obj1 = JSON.parse(statediv.value);  //obj2 is a dataitemlist
            if (obj1)
            {
                return internal_getItemsByValue(obj1,value);  
            }
        } else 
        {
            return null;
        }
     }
     
     this.getStatevalue = function()
     {
        if (statediv.value != "")
        {
            return statediv.value;
        }
        return "";
     }
     
     this.clearvalues = function()
     {
        statediv.value = "";
     }

}


function Searchstate(parentelement) 
{
   this.constructor(parentelement);
   self2 = this;
}

Searchstate.prototype = new Datastate();

