var spareJQueryInstance;

/**
 * functions for working with cookies safe
 */
function getCookieSafe(jQuery,name) {
    if (!jQuery.cookie) {
        jQuery = spareJQueryInstance;
    }
    if (jQuery.cookie) {
        return jQuery.cookie(name);
    }
    return '';
}

function setCookieSafe(jQuery,name,value,options) {
    if (!jQuery.cookie) {
        jQuery = spareJQueryInstance;
    }
    if (jQuery.cookie) {
        return jQuery.cookie(name,value,options);
    }
    return '';
}

/**
 * Function to find elements by ClassName for specified DOM Element
 *
 * @param parentElement parent Element
 * @param childClass class name
 */
function getElementsForParentByClassName(parentElement, childClass) {
    var result = new Array();
    var children = parentElement.childNodes;
    for (var i = 0; i < children.length; i++) {
        var splitArray = children[i].className.split(' ');
        for (var j = 0; j < splitArray.length; j++) {
            if (splitArray[j] == childClass) {
                result.push(children[i]);
                break;
            }
        }
        if (children[i].childNodes.length > 0) {
            result = result.concat(getElementsForParentByClassName(children[i], childClass));
        }
    }
    return result;
}

/**
 * Language support for JS use
 *
 * addLabel: adds label to label repository for next use
 * getLabels: gets all label in languages
 * getLabel: gets label for given language
 */

var panoshopJSLabels = {
    labels: [],
    jsLabelBlock: function () {
        this.lbls = [];
        this.addLabel = function (lang, label) {
            this.lbls.push(lang);
            this.lbls[lang] = label;
        };
        this.getLabel = function (lang) {
            return this.lbls[lang];
        }
    },
    addLabel: function (name, en, de, fr, it, es, pt, ja, ru, ua) {
        this.labels.push(name);
        var lbl = new this.jsLabelBlock();
        lbl.addLabel('en', en);
        lbl.addLabel('de', de);
        lbl.addLabel('fr', fr);
        lbl.addLabel('it', it);
        lbl.addLabel('es', es);
        lbl.addLabel('pt', pt);
        lbl.addLabel('ja', ja);
        lbl.addLabel('ru', ru);
        lbl.addLabel('ua', ua);
        this.labels[name] = lbl;
    },
    getLabels: function(name){
        return this.labels[name];
    },
    getLabel: function(name, lang) {
        if (lang == undefined) {
            return '';
        } else {
            return this.labels[name].getLabel(lang);
        }
    }
};

/**
 * Function to copy specified text to clipboard
 *
 * @param copytext text to be copied
 */
function copyToClipboard(copytext) {
    if(window.clipboardData && window.clipboardData.setData) {
		window.clipboardData.setData("Text", copytext);
	} else if (jQuery.browser.mozilla == true) {
		try {
            netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
            var clip = Components.classes['@mozilla.org/widget/clipboard;1']
                     .createInstance(Components.interfaces.nsIClipboard);
            if (!clip) return;
            var trans = Components.classes['@mozilla.org/widget/transferable;1']
                      .createInstance(Components.interfaces.nsITransferable);
            if (!trans) return;

            trans.addDataFlavor('text/unicode');

            var str = Components.classes["@mozilla.org/supports-string;1"]
                        .createInstance(Components.interfaces.nsISupportsString);

            str.data = copytext;

            trans.setTransferData("text/unicode", str, copytext.length*2);

            var clipid=Components.interfaces.nsIClipboard;

            if (!clip) return;

            clip.setData(trans, null, clipid.kGlobalClipboard);
        } catch (e) {
            alert("Open new window, type 'about:config' and set 'signed.applets.codebase_principal_support' to 'true'");
        }
	} else {
        var elem = document.getElementById("popupEmbedded");
        elem.focus();
        elem.select();
        alert('Your browser does not support copy to clipboard functionality. Close this window and press CTRL+C');
    }
}

function linkUsingJS(url,blank) {
    if (blank) {
        window.open(url);
    } else {
        document.location.href = url;
    }
}

function isArray(obj) {
    return obj.constructor == Array;
}

function isEmptyString(value) {
    return !(value) || value == '';
}

function hasEmptyStrings(arrayOfString) {
    if (!isArray(arrayOfString)) return undefined;
    for (var i = 0; i < arrayOfString.length; i++) {
        if (isEmptyString(arrayOfString[i])) return true;
    }
    return false;
}

function placeMediaContent(selector, config) {
    config = config || {};
    jQuery(function($){
        $(selector).each(function(){
            if ($(this).attr('href') != null) {
                var href = $(this).attr('href').replace(/^http:/,'https:');
                $(this).attr('href', href);
            }
        });

        $(selector+"[href*='youtube.com']").each(function(){
            $(this).addClass("{type:'swf'}");
            var href = $(this).attr('href').replace('/watch?v=','/v/');
            $(this).attr('href', href);
        });

        $(selector).media(config);
    })
}

Array.prototype.removeByValue = function(value) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == value) {
            this.splice(i, 1);
        }
    }
};

function EnterClickFunction(event) {
    if (event.keyCode == 13) {
        if (this.enterClickFunc != null) {
            this.enterClickFunc();
        };
        return false;
    } else {
        return true;
    }
};
