CreatoorSN.namespace('links');
CreatoorSN.links = {
	
	linkPhotos : new Array(),
	linkPhotoIndex : 0,
	savedPhotoIndex : 0,
	noThumbnail : false,
    callback: {},
	
	showLinkDialog: function(callback, params, linkObj, posObj, id) {
        if (posObj) {
			var position = absolutePosition(posObj, {x: 50});
		}
		
		var winPosition = null;
		if (position) {
			winPosition = {top: position.y, left: position.x};
		}
		var window = new creaDomWindow(
            {
				position: winPosition,
				header: {
                    title: CreatoorSN.common.translate('Vstavi povezavo')
                },
				width: 440
            }
        );
		//alert('main window initialized');
        //window.onclose(function(){CreatoorSN.wallPosts.attachedLinks = new Array();});
        var linkInput = new creaDomFormElement(
            {
                tag: 'input',
                type: 'text',
                className: 'link-input',
                label: {
                    params: {html: CreatoorSN.common.translate('enter link')}
                },
                value: 'http://'
            }
        );
        var okBtn = new creaDomFormElement(
            {
                tag: 'input',
                type: 'button',
                value: 'OK',
				className: 'submitBotton none'
            }
        );
        var submitBtn = new creaDomFormElement(
            {
                tag: 'input',
                type: 'button',
                value: CreatoorSN.common.translate('attach'),
                disabled: true,
                className: 'submitBotton none'
            }
        );
		
        var cancelBtn = new creaDomFormElement(
            {
                tag: 'input',
                type: 'button',
                value: CreatoorSN.common.translate('cancel'),
                className: 'submitBotton none'
            }
        );
        var previewDiv = new creaDomObject(
            {
                tag: 'div',
                className: 'link-preview',
				id: 'previewDiv'
            }
        );
        var btnDiv = new creaDomObject(
            {
                tag: 'div',
                className: 'link-buttons'
            }
        );
        cancelBtn.domElement.onclick = function() {
			CreatoorSN.links.linkPhotoIndex = CreatoorSN.links.savedPhotoIndex;
            window.close();
        }
        okBtn.domElement.onclick = function() {
            CreatoorSN.links.getLinkPreview(linkInput, previewDiv, submitBtn, window, callback, params, id);
        }
        submitBtn.addTo(btnDiv);
        cancelBtn.addTo(btnDiv);
        var container = new creaDomObject(
            {
                tag: 'div',
                className: 'link-container'
            }
        );
        container.setElements([linkInput, okBtn, previewDiv, btnDiv]);
        window.setContent(container);
		//alert('initialization complete');		
		window.open();
		if (linkObj) {
			CreatoorSN.links.linkPhotos = linkObj.images;
			CreatoorSN.links.savedPhotoIndex = CreatoorSN.links.linkPhotoIndex = linkObj.thumbIndex;
			CreatoorSN.links.noThumbnail = linkObj.noThumbnail;
			var id = linkObj.id ? linkObj.id : '';
			previewDiv.domElement.innerHTML = linkObj.editHTML;
			linkInput.domElement.value = linkObj.url;
			submitBtn.domElement.disabled = false;
			thumbNav = _$('linkImageNav' + id);
            noThumbnailDiv = _$('noThumbnailDiv' + id);
			if (noThumbnailDiv) {				
				var noThumbCheck = _$('noThumbnail' + id);
				if (linkObj.noThumbnail) {
					noThumbCheck.checked = true;
				} else {
					CreatoorSN.links.getLinkImage(CreatoorSN.links.linkPhotoIndex, id);
				}
				var thumb = _$('linkImageDiv' + id);
				noThumbCheck.onclick = function() {
					if (this.checked) {
						CreatoorSN.links.noThumbnail = true;
						thumbNav.style.display = 'none';
						thumb.style.display = 'none';						
					} else {
						CreatoorSN.links.noThumbnail = false;
						thumbNav.style.display = '';
						thumb.style.display = '';
						if (CreatoorSN.links.linkPhotos.length > 0) {
							CreatoorSN.links.getLinkImage(CreatoorSN.links.linkPhotoIndex, id);
						}
					}
				}
			}			
			submitBtn.domElement.onclick = function() {
				CreatoorSN.links.savedPhotoIndex = CreatoorSN.links.linkPhotoIndex;
				linkObj.editHTML = previewDiv.domElement.innerHTML;
				thumbNav = _$('linkImageNav' + id);
				noThumbnailDiv = _$('noThumbnailDiv' + id);
				if (thumbNav) {
					thumbNav.parentNode.removeChild(thumbNav);
				}
				if (noThumbnailDiv) {
					noThumbnailDiv.parentNode.removeChild(noThumbnailDiv);
				}				
				linkObj.html = previewDiv.domElement.innerHTML.replace(/id="?[a-z0-9_\-\.\:]*"?| {2,}|\n|\r/gi, '');
				linkObj.noThumbnail = CreatoorSN.links.noThumbnail;
				linkObj.thumbIndex = CreatoorSN.links.linkPhotoIndex;				
				if (!params) {
					params = {};
				}
				params.response = linkObj;
				params.window = window;				
				callback(params);
			}
		}
        return window;
    },
    
    getLinkPreview: function (linkInput, previewTarget, submitBtn, window, callback, params, id)
    {
        id = id ? id : '';
		if (linkInput.domElement.value == '' || linkInput.domElement.value == 'http://') {
            return;
        }
        CreatoorSN.links.linkPhotos = new Array();
		CreatoorSN.links.savedPhotoIndex = CreatoorSN.links.linkPhotoIndex = 0;
		CreatoorSN.links.noThumbnail = false;
        linkInput.domElement.disabled = true;
        var url = linkInput.domElement.value;
        window.disable();
		var href = location.href.search('#stay') > 0 ? location.href : location.href + '#stay';
        var oCallback = {                
            success : function (o) {
               if (YAHOO.lang.JSON.isSafe(o.responseText)) {
			   	    response = YAHOO.lang.JSON.parse(o.responseText);
				   	//console.log(response);
					linkInput.domElement.disabled = false;
					
					if (response.success) {
						previewTarget.domElement.innerHTML = decodeURIComponent(response.editHTML.replace(/\n/i, ''));
						submitBtn.domElement.disabled = false;
						CreatoorSN.links.linkPhotos = response.images;
						var thumb = _$('linkImageDiv' + id);
						var thumbNav = _$('linkImageNav' + id);
						var noThumbnailDiv = _$('noThumbnailDiv' + id);
						if (noThumbnailDiv) {
							_$('noThumbnail' + id).onclick = function()
							{
								if (this.checked) {
									thumb.style.display = 'none';
									CreatoorSN.links.noThumbnail = true;
									thumbNav.style.display = 'none';
									
								} else {
									CreatoorSN.links.noThumbnail = true;
									thumb.style.display = '';
									thumbNav.style.display = '';
									if (CreatoorSN.links.linkPhotos.length > 1) {
										CreatoorSN.links.getLinkImage(CreatoorSN.links.linkPhotoIndex, id);
									}
								}
							}
						}
						submitBtn.domElement.onclick = function()
						{
							CreatoorSN.links.savedPhotoIndex = CreatoorSN.links.linkPhotoIndex;
							window.disable();
							if (!params) {
								params = {};
							}
							params.response = response;
							params.response.editHTML = previewTarget.domElement.innerHTML.replace(/ {2,}|\n|\r|/gi, '');
							params.window = window;							
							params.response.thumbIndex = CreatoorSN.links.savedPhotoIndex;							
							if (thumbNav) {
								thumbNav.parentNode.removeChild(thumbNav);
							}
							if (noThumbnailDiv) {
								noThumbnailDiv.parentNode.removeChild(noThumbnailDiv);
							}
							params.response.noThumbnail = CreatoorSN.links.noThumbnail;
														
							params.response.html = previewTarget.domElement.innerHTML.replace(/id="?[a-z0-9_\-\.\:]*"?| {2,}|\n|\r/gi, '');
							params.response.id = id;
							callback(params);
						}
					} else {
						if (response.noAuth) {
							var login = new noAuth(function(noAuthObj)
							{
								CreatoorSN.links.getLinkPreview(linkInput, previewTarget, submitBtn, window, callback, params, id);
							}, response.message);
						} else {
						       previewTarget.domElement.innerHTML = response.message;
						}
					}
			} else {
				previewTarget.domElement.innerHTML = 'neznana napaka';
				//CreatoorSN.common.showErrorAlert('neznana napaka');
			}
			   window.enable();
            },
            
            failure : function (o) {
				window.enable();
				linkInput.domElement.disabled = false;
                previewTarget.domElement.innerHTML = o.statusText;
            },
            timeout: 25000
            
        };
		var get = '';
		if (id) {
			get += 'id=' + id;
		}
		get += '&url=' + encodeURIComponent(url);
        var request = YAHOO.util.Connect.asyncRequest(
            'GET',
            '/members/ajax/get-link-preview/?' + get,
            oCallback
        );
        window.onclose(function(){YAHOO.util.Connect.abort(request);});
        
    },
	
	showHideThumbnail: function(checkObj) {
		
	},
    
    getLinkImage : function (index, id) {
		CreatoorSN.links.linkPhotoIndex = index;
        id = id ? id : '';
		var prev = index - 1;
        var next = index + 1;
        var prevLink = _$('prevLinkImage' + id);
        var nextLink = _$('nextLinkImage' + id);
        if (prev >= 0) {
			if (prevLink.tagName.toLowerCase() == 'span') {
	            var prevHTML = prevLink.innerHTML;
				//console.log(prevHTML);
                var ns = prevLink.nextSibling;
                var parent = prevLink.parentNode;
                var active = new creaDomObject({tag: 'a', html: prevHTML, href: '#', id: 'prevLinkImage' + id});
				parent.removeChild(prevLink);
	            while (!ns.tagName) {
					ns = ns.nextSibling;
					if (!ns) {
						break;
					}
				}
				active.domElement.onclick = function()
				{
					CreatoorSN.links.getLinkImage(prev, id);
					return false;
				}
				//console.log(active);
				if (ns) {
                    addBefore(active, ns);
                } else {
                    inactive.addTo(parent);
                }
            } else {
				prevLink.onclick = function()
                {
                    CreatoorSN.links.getLinkImage(prev, id);
					return false;
                }
			}
            
        } else {
            if (prevLink.tagName.toLowerCase() == 'a') {
			    var prevHTML = prevLink.innerHTML;
				var ns = prevLink.nextSibling;
				var parent = prevLink.parentNode;
				var inactive = new creaDomObject({tag: 'span', html: prevHTML, id: 'prevLinkImage' + id});
				parent.removeChild(prevLink);
				while (!ns.tagName) {
                    ns = ns.nextSibling;
                    if (!ns) {
                        break;
                    }
                }
				if (ns) {
					addBefore(inactive, ns);
				} else {
					inactive.addTo(parent);
				}	 
			}
            
        }
        if (next < CreatoorSN.links.linkPhotos.length) {
            if (nextLink.tagName.toLowerCase() == 'span') {
                var nextHTML = nextLink.innerHTML;
                var ns = nextLink.nextSibling;
                var parent = nextLink.parentNode;
                var active = new creaDomObject({tag: 'a', html: nextHTML, href: '#', id: 'nextLinkImage' + id});
                parent.removeChild(nextLink);
                active.domElement.onclick = function()
                {
                    CreatoorSN.links.getLinkImage(next, id);
					return false;
                }
				while (!ns.tagName) {
                    ns = ns.nextSibling;
                    if (!ns) {
                        break;
                    }
                }
                if (ns) {
                    addBefore(active, ns);
                } else {
                    active.addTo(parent);
                }
            } else{
				nextLink.onclick = function()
                {
                    CreatoorSN.links.getLinkImage(next, id);
					return false; 
                }
			}          
        } else {
            if (nextLink.tagName.toLowerCase() == 'a') {
                var nextHTML = nextLink.innerHTML;
                var ns = nextLink.nextSibling;
                var parent = nextLink.parentNode;
                var inactive = new creaDomObject({tag: 'span', html: nextHTML, id: 'nextLinkImage' + id});
                parent.removeChild(nextLink);
				while (!ns.tagName) {
                    ns = ns.nextSibling;
                    if (!ns) {
                        break;
                    }
                }
                if (ns) {
                    addBefore(inactive, ns);
                } else {
                    inactive.addTo(parent);
                }    
            }
        }
        //console.log(CreatoorSN.wallPosts.linkPhotos[index].proportions);
		var width = parseInt(CreatoorSN.links.linkPhotos[index].width);
		var height = parseInt(CreatoorSN.links.linkPhotos[index].height);
		if (width > 130 || height > 130) {
			if (height > 130) {
				height = 130;
				width = Math.round(height * parseFloat(CreatoorSN.links.linkPhotos[index].proportions));
			}
            if (width > 130){
				//console.log(width);
				width = 130;
				height = Math.round(130 / parseFloat(CreatoorSN.links.linkPhotos[index].proportions));
			}
		}
        var linkPhoto = _$('linkImage' + id);
        linkPhoto.height = height;
		linkPhoto.width = width;
        linkPhoto.src = CreatoorSN.links.linkPhotos[index].src;
        _$('linkImgCount' + id).innerHTML = next + ' / ' + CreatoorSN.links.linkPhotos.length;
		return false;
    },
	
	attach: function (callback, params) {
		
	},

    setForm: function (id, url) {
       var form = _$('link-form-' + id)
       var urlInput = _$('links-form-url-' + id);
        var submit = _$('links-form-submit-' + id);
       if (form && urlInput && submit) {
           
           urlInput.value = url ? url : urlInput.value;
            var ph = _$('links-placeholder-' + id);
            var btnRegion = DOM.getRegion(submit);
            var btnWidth = parseInt(btnRegion.right - btnRegion.left);
            var containerRegion = DOM.getRegion(form.parentNode)
            var containerWidth = parseInt(containerRegion.right - containerRegion.left);
            var urlWidth = parseInt(containerWidth - btnWidth - 18);
            DOM.setStyle(urlInput, 'width', urlWidth + 'px');
            if (ph) {
                var cntRegion = DOM.getRegion(form.parentNode.parentNode);
                var lRegion = DOM.getRegion(_$('links-form-list-' + id));
                var height = (cntRegion.bottom - cntRegion.top) - (lRegion.bottom - lRegion.top) - 65;
                var width = urlWidth - 10;
                DOM.setStyle(ph, 'width', String(width) + 'px')
                DOM.setStyle(ph, 'height', String(height) + 'px');
            }
            if (urlInput.value && urlInput.value != 'http://') {
                form.onsubmit = function(){return false;}
            } else {
                form.onsubmit = function () {
                    CreatoorSN.common.saveFormData(this, CreatoorSN.links.showPreview, id, ph);
                    this.onsubmit = function(){return false;}
                    if (ph) {
                        var phRegion = DOM.getRegion(ph);
                        ph.innerHTML = '<img style="margin:' + Math.round(((phRegion.bottom - phRegion.top) - 32) / 2) + 'px 0 0 ' + Math.round(((phRegion.right - phRegion.left) - 32) / 2) + 'px;" src="/images/ajax-loader-medium.gif" alt="' + CreatoorSN.common.translate('loadnig...') + '" />';
                    }
                    return false;
                }
            }            
            urlInput.onfocus = function() {
                if(trim(urlInput.value) == 'http://') {
                    urlInput.value = '';
                    DOM.setAttribute(urlInput, 'value', '');
                }
            }
            urlInput.onblur = function() {
                if (trim(urlInput.value) == '') {
                    urlInput.value = 'http://';
                    DOM.setAttribute(urlInput, 'value', 'http://');
                    form.onsubmit = function(){return false;}
                } else {
                    form.onsubmit = function () {
                        CreatoorSN.common.saveFormData(this, CreatoorSN.links.showPreview, id, ph);
                        this.onsubmit = function(){return false;}
                        if (ph) {
                            var phRegion = DOM.getRegion(ph);
                            ph.innerHTML = '<img style="margin:' + Math.round(((phRegion.bottom - phRegion.top) - 32) / 2) + 'px 0 0 ' + Math.round(((phRegion.right - phRegion.left) - 32) / 2) + 'px;" src="/images/ajax-loader-medium.gif" alt="' + CreatoorSN.common.translate('loadnig...') + '" />';
                        }
                        return false;
                    }
                }
            }
       }
    },

    setInputs: function (id) {
        
        if (urlInput && submit) {
            
        }
    },

    setSubmit: function (id) {
        
    },

    showPreview: function (linkData, form, id) {
        var ph = _$('links-placeholder-' + id);
        if (ph) {
            ph.innerHTML = linkData.html;
            var thumb = DOM.getElementBy(function(el){return true;}, 'img', ph);
            var controls = DOM.getElementBy(function (el){return DOM.hasClass(el, 'links-thumb-controls');}, 'ul', ph);
            linkData.noThumb = true;
            if (controls && parseInt(linkData.data.imgCount)) {
                linkData.thumb = thumb;
                linkData.noThumb = false;
                linkData.id = id;
                DOM.batch(controls.childNodes, CreatoorSN.links.setThumbControls, linkData);
            }
            if (typeof(CreatoorSN.links.callback.add) == 'function') {
                CreatoorSN.links.callback.add(linkData, CreatoorSN.links.callback.params);
            }
        }
    },

    clearForm: function (id) {
        var url = _$('links-form-url-' + id);
        if (url) {
            url.value = 'http://';
            DOM.setAttribute(url, 'value', 'http://');
        }
        var ph = _$('links-placeholder-' + id);
        if (ph) {
            ph.innerHTML = '';
        }
        if (typeof(CreatoorSN.links.callback.clear) == 'function') {
            CreatoorSN.links.callback.clear(id, CreatoorSN.links.callback.params);
        }
        CreatoorSN.links.setForm(id);
    },

    setThumbControls: function (btn, linkData) {
        if (DOM.hasClass(btn, 'previous')) {
            btn.onclick = function () {
                 if (DOM.hasClass(this, 'active')) {
                    linkData.data.currentImage = parseInt(linkData.data.currentImage);
                    if (linkData.data.currentImage == linkData.data.imgCount - 1) {
                        DOM.addClass(btn.nextSibling.nextSibling, 'active');
                    }
                    linkData.data.currentImage--;
                    this.nextSibling.innerHTML = parseInt(linkData.data.currentImage + 1) + ' / ' + linkData.data.imgCount;
                    CreatoorSN.links.changeThumbnail(linkData);
                    if (!linkData.data.currentImage) {
                        DOM.removeClass(btn, 'active');
                    }
                }
            }
        }
        if (DOM.hasClass(btn, 'next')) {
            btn.onclick = function () {
                if (DOM.hasClass(this, 'active')) {
                    linkData.data.currentImage = parseInt(linkData.data.currentImage);
                    if (!linkData.currentImage) {
                        DOM.addClass(btn.previousSibling.previousSibling, 'active');
                    }
                    linkData.data.currentImage++;
                    this.previousSibling.innerHTML = parseInt(linkData.data.currentImage + 1) + ' / ' + linkData.data.imgCount;
                    CreatoorSN.links.changeThumbnail(linkData);
                    if (linkData.data.currentImage == linkData.data.imgCount - 1) {
                        DOM.removeClass(btn, 'active');
                    }
                }
            };
            
        }
        if (DOM.hasClass(btn, 'no-thumbnail')) {
            btn.firstChild.onclick = function() {
                if (this.checked) {
                    DOM.setStyle(linkData.thumb, 'display', 'none');
                    linkData.noThumb = true;
                    DOM.removeClass(btn.previousSibling, 'active');
                    DOM.removeClass(btn.previousSibling.previousSibling.previousSibling, 'active');
                } else {
                    DOM.setStyle(linkData.thumb, 'display', '');
                    linkData.noThumb = false;
                    if (parseInt(linkData.data.imgCount) > 1 && linkData.data.currentImage) {
                        DOM.addClass(btn.previousSibling.previousSibling.previousSibling, 'active');
                    }
                    if (linkData.data.currentImage < parseInt(linkData.data.imgCount - 1)) {
                        DOM.addClass(btn.previousSibling, 'active');
                    }
                }
                var ph = _$('links-placeholder-' + linkData.id);
                if (ph) {
                    linkData.html = ph.innerHTML;
                }
            }
        }
    },

    changeThumbnail: function(linkData) {
        var src = linkData.data.images[linkData.data.currentImage].src;
        var width = Math.max(DOM.getAttribute(linkData.thumb, 'width'), DOM.getAttribute(linkData.thumb, 'height'));
        var height = width;
        var size = height;
        if (parseInt(linkData.data.images[linkData.data.currentImage].width) > width || parseInt(linkData.data.images[linkData.data.currentImage].height) > height) {
            if (parseInt(linkData.data.images[linkData.data.currentImage].width) > parseInt(linkData.data.images[linkData.data.currentImage].height)) {
                height = Math.round((width * linkData.data.images[linkData.data.currentImage].height) / linkData.data.images[linkData.data.currentImage].width);
            }
            if(parseInt(linkData.data.images[linkData.data.currentImage].width) < parseInt(linkData.data.images[linkData.data.currentImage].height)){
                width = Math.round((linkData.data.images[linkData.data.currentImage].width / linkData.data.images[linkData.data.currentImage].height) * height);
            }
        } else {
            width = linkData.data.images[linkData.data.currentImage].width;
            height = linkData.data.images[linkData.data.currentImage].height;
        }
        DOM.setAttribute(linkData.thumb, 'src', src);
        DOM.setStyle(linkData.thumb, 'marginBottom', parseInt(size - height) + 'px');
        DOM.setAttribute(linkData.thumb, 'width', width);
        DOM.setAttribute(linkData.thumb, 'height', height);
        
        var ph = _$('links-placeholder-' + linkData.id);
        if (ph) {
            linkData.html = ph.innerHTML;
        }
    },

    setCallback: function (callback, params) {
        if (callback && (callback.add || callback.clear)) {
            callback.params = params;
            CreatoorSN.links.callback = callback;

        }
    },

    showPlayer: function(el) {
        if (CreatoorSN.common.browser.ie) {
            DOM.addClass(el.parentNode.parentNode, 'block');
        }
        DOM.addClass(el, 'display-none');
        DOM.removeClass(el.previousSibling, 'display-none');
        
    },

    showYoutubePlayer: function(el, containerId, width, height) {
        CreatoorSN.links.showPlayer(el);
        var params = { allowfullscreen:'true', allowscriptaccess:'always',wmode: 'transparent' };
        var attributes = { id: 'player-' + containerId, name: 'player-' + containerId };
        swfobject.embedSWF(DOM.getAttribute(el, 'rel'), containerId, width, height, '9.0.115', 'false', {}, params, attributes);
    },

    showVimeoPlayer: function(el, containerId, width, height) {
        CreatoorSN.links.showPlayer(el);
        var flashvars = {
            autoplay:'0',
            loop: '0',
            clip_id: DOM.getAttribute(el, 'rel'),
            color: '0',
            fullscreen: '1',
            server: 'vimeo.com',
            show_byline: '0',
            show_portrait: '0',
            show_title: '1'
        };
        var params = { allowfullscreen:'true', allowscriptaccess:'always',wmode: 'transparent' };
        var attributes = { id: 'player-' + containerId, name: 'player-' + containerId };
        swfobject.embedSWF('http://vimeo.com/moogaloop.swf', containerId, width, height, '9.0.115', 'false', flashvars, params, attributes);
    },

    hidePlayer: function(el) {
        if (CreatoorSN.common.browser.ie) {
            DOM.removeClass(el.parentNode.parentNode.parentNode, 'block');
        }
        DOM.addClass(el.parentNode, 'display-none');
        DOM.removeClass(el.parentNode.nextSibling, 'display-none');
        var id = el.nextSibling.firstChild.id.replace('player-', '');
        removeElement(el.nextSibling.firstChild);
        el.nextSibling.innerHTML = '<div id="' + id + '"></div>';
    }
}

