/**
 * (c) 2008, Ilya Kantor
 * 1.1
 * http://browserpersistence.ru - Последняя версия и документация
 * Разработка спонсирована компанией Интернет-Обновление
 * http://obnovlenie.ru
 *
 * Вы можете делать с этим кодом, что хотите, но оставьте эти строки
 * И, пожалуйста, сообщайте об ошибках и полезных дополнениях на http://browserpersistence.ru
 * 
 */
//razor +Cookie + Null
Storage = {
    
    // Flash8 загружается последним и асинхронно, остальные - синхронно
	//Null -- заглушка, если ничего не сработало
	
	engines: ["WhatWG","Cookie","userData","Flash8","Null"],
    	
    swfUrl:"/main/storage.swf",
	
	cookie:{
		domain: "mo-zdorovie.tomsk.ru",
		path: "/",
		duration: 7,
		secure: false
	},
        
    init: function(onready) {
		if(window.ie6) Storage.engines = ["WhatWG","userData","Cookie","Flash8","Null"]; //sucks ie6
		
        for(var i=0; i<this.engines.length; i++) {                    
                    
            try {
                this[this.engines[i]](function() { Storage.active = true; onready && onready()})
                break            
            } catch(e) {
                // uncomment to see errors
                //alert(this.engines[i]+':<'+e.message+'>\n')
            }
        
        }         
        
    }
    
}

    

Storage.WhatWG = function(onready) {
    
    var storage = globalStorage[location.hostname];
            
    Storage = {
    
        put: function(key, value) {
            storage[key] = value
        },
        
        get: function(key) {
            return String(storage[key])
        },
        
        remove: function(key) {
            delete storage[key]
        },    
        
        getKeys: function() {
            var list = []
            
            for(i in storage) list.push(i)
            
            return list
        },
        
        clear: function() {
            for(i in storage) {
                delete storage[i]
            }
        }     
    }
    
    onready()
}




Storage.userData = function(onready) {
    var namespace = "data"

    if (!document.body.addBehavior) {            
        throw new Error("No addBehavior available")
    }
        
    var storage = document.getElementById('storageElement')
    if (!storage) {
        storage = document.createElement('span')
        document.body.appendChild(storage)
        storage.addBehavior("#default#userData")
        // initial element load
        storage.load(namespace)
    }
    
    Storage = {
        put: function(key, value) {
            storage.setAttribute(key, value)
            storage.save(namespace)
        },
        
        get: function(key) {
			//alert('sucks IE');
			//alert(storage.getAttribute(key))
            return storage.getAttribute(key)
        },
        
        remove: function(key) {
            storage.removeAttribute(key)
            storage.save(namespace)
        },
        
        getKeys: function() {
            var list = []
            var attrs = storage.XMLDocument.documentElement.attributes
            
            for(var i=0; i<attrs.length; i++) {
                list.push(attrs[i].name)
            }
            
            return list
        },
        
        clear: function() {
            var attrs = storage.XMLDocument.documentElement.attributes
            
            for(var i=0; i<attrs.length; i++) {
                storage.removeAttribute(attrs[i].name)
            }
            storage.save(namespace)
        }
    }
    
    onready()
    
}


Storage.Flash8 = function(onready) { 
    
    var movie
   
    var swfId = "StorageMovie"
   // while(document.getElementById(swfId)) swfId = '_'+swfId
    
    var swfUrl = Storage.swfUrl
    
    // first setup storage, make it ready to accept back async call
    Storage = {       
 
        put: function(key, value) {
            movie.put(key, value)        
        },
        
        get: function(key) {
            return movie.get(key)
        },
        
        remove: function(key) {
            movie.remove(key)
        },
        
        getKeys: function() {
            return movie.getkeys()  // lower case in flash to evade ExternalInterface bug         
        },
        
        clear: function() {
            movie.clear()
        },
        
        ready: function() {
            movie = document[swfId]
            onready()
        }
    }
    
    // now write flash into document
    
    var protocol = window.location.protocol == 'https' ? 'https' : 'http'

    var containerStyle = "width:0; height:0; position: absolute; z-index: 10000; top: -1000px; left: -1000px;"        

    var objectHTML = '<embed src="' + swfUrl + '" '
                              + ' bgcolor="#ffffff" width="0" height="0" '
                              + 'id="' + swfId + '" name="' + swfId + '" '
                              + 'swLiveConnect="true" '
                              + 'allowScriptAccess="sameDomain" '
                              + 'type="application/x-shockwave-flash" '
                              + 'pluginspage="' + protocol +'://www.macromedia.com/go/getflashplayer" '
                              + '></embed>'
                    
    var div = document.createElement("div");
    div.setAttribute("id", swfId + "Container");
    div.setAttribute("style", containerStyle);
    div.innerHTML = objectHTML;

    document.body.appendChild(div)
}

Storage.Cookie = function(onready){
	
	var cookie = Storage.cookie
	Storage = {
		
        put: function(key, value,duration){
			value = encodeURIComponent(value);
			if (cookie.domain) value += '; domain=' + cookie.domain;
			if (cookie.path) value += '; path=' + cookie.path;
			var expires = duration ? duration : cookie.duration;
			if (cookie.duration){
				var date = new Date();
				date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);
				value += '; expires=' + date.toGMTString();
			}
			if (cookie.secure) value += '; secure';
			document.cookie = key + '=' + value;
			return document.cookie ? true : false;
		},
        
        get: function(key) {
            var value = document.cookie.match('(?:^|;)\\s*' + key.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1') + '=([^;]*)');
			return value ? decodeURIComponent(value[1]) : false;
        },
        
        remove: function(key) {
			this.put(key,'',-1);
        },
        
        getKeys: function() {
			/*
			var keys=document.cookie.match(/[A-Za-z-\d]+=/ig)
			for(var i=0;i<keys.length;i++){keys[i] = keys[i].split(',')[0];}    - 30 

			var keys = document.cookie.match(/[A-Za-z-\d]+=/ig)
			for(var i=0,n=keys.length;i<n;i++) keys[i] = keys[i].substring(0, keys[i].length-1)   -31

			var keys = document.cookie.split(';');
			for(var i=0;i<keys.length;i++){keys[i] = keys[i].split('=')[0];}    - 29

			var keys = document.cookie.replace(/(=)[a-zA-z]+(?:;|)/ig,',')   - 25
			keys = keys.match(/[A-Za-z-\d]+/ig)
			*/
			var keys = document.cookie.replace(/(=)[a-zA-z]+(?:;|)/ig,',')
			keys = keys.match(/[A-Za-z-\d]+/ig)
			return keys;
        },
        
        clear: function() {
			keys = this.getKeys()
			for(var i=0;i<keys.length;i++){
				this.remove(keys[i])
			}
		}
    }
	
	onready()
}

Storage.Null = function(onready) {
    
	var storage = []
    Storage = {
    
        put: function(key, value) {
            storage[key] = value
        },
        
        get: function(key) {
            return storage[key]
        },
        
        remove: function(key) {
            delete storage[key]
        },    
        
        getKeys: function() {
            var list = []
            
            for(i in storage) list.push(i)
            
            return list
        },
        
        clear: function() {
            for(i in storage) {
                delete storage[i]
            }
        }     
    }
    
    onready()
}