//this needed to support pre-indexOf browsers
if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(val, fromIndex) {
        if (typeof(fromIndex) != 'number') fromIndex = 0;
        for (var index = fromIndex,len = this.length; index < len; index++)
            if (this[index] == val) return index;
        return -1;
    }
}

function $(elem){
    return YAHOO.util.Dom.get(elem);
}

function $by(funct, tag, parent){
    return YAHOO.util.Dom.getElementsBy(funct, tag, parent);
}

function on(object, eventName, funct){
    YAHOO.util.Event.on(object, eventName, funct);
}

function addLoadEvent(func) {
    YAHOO.util.Event.on(window, "load", func);
}

function isArray(elem){
    return YAHOO.util.Lang.isArray(elem);
}

function showHideElements(elementToShow, elementToHide){
    if(isDefined(elementToShow)){
        if(YAHOO.lang.isArray(elementToShow)){
            for(var i = 0; i < elementToShow.length; i++){
                YAHOO.util.Dom.removeClass(elementToShow[i], "hidden");
            }
        }else{
            YAHOO.util.Dom.removeClass(elementToShow, "hidden");
        }
    }
    if(isDefined(elementToHide)){
        if(YAHOO.lang.isArray(elementToHide)){
            for(var j = 0; j < elementToHide.length; j++){
                YAHOO.util.Dom.addClass(elementToHide[j], "hidden");
            }
        }else{
            YAHOO.util.Dom.addClass(elementToHide, "hidden");
        }
    }
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };

function isDefined(obj){
    return (!(YAHOO.lang.isUndefined(obj) || YAHOO.lang.isNull(obj)));
}

function rewriteUrl(pName, pValue, pathname, addToBrowserHistory) {
    pValue = pValue == null ? "" : pValue;
    var loc = window.location;
    var query = new QueryString();
    var newPathname = loc.pathname;
    if(isDefined(pathname)){
        newPathname = pathname;
    }
    //<protocol>//<host>[:<port>]/<pathname>[<hash>][<search>]
    var newUrl =loc.protocol + "//" + loc.host + newPathname + "?";
    var params = query.getParameterNames();
    for (var i=0; i < params.length; i++) {
        if (params[i] != pName) {
            var vals = query.get(params[i]);
            for (var v=0; v < vals.length; v++)
                newUrl += params[i] + "=" + vals[v] + "&";
        }
    }
    if (pValue != null && pValue != "null") {
        newUrl += pName+"="+pValue;
    }

    if (addToBrowserHistory)
        window.location = newUrl;
    else
        window.location.replace(newUrl);
}

function copyToClipboard(elemId){
    var elem = $(elemId);
    elem.select();
    if(window.clipboardData && clipboardData.setData)	{
        clipboardData.setData("text", elem.value);
        alert("The copied text is in your clipboard now.")
    }else{
      if (elem.createTextRange) {
        var range = elem.createTextRange();
        if (range)
          range.execCommand('Copy');
          alert("The copied text is in your clipboard now.")
        }
   }
}

function animateToggle(elemToAnimate, fullHeight, collapsedHeight, labelElem, labelMoreText, labelLessText) {
    var showFull = YAHOO.util.Dom.getStyle(elemToAnimate, "overflow-y") == "hidden";
    var settings = showFull ? { height: { to: fullHeight } } : { height: { to: collapsedHeight } };
    var anim = new YAHOO.util.Anim(elemToAnimate, settings, 0.5, YAHOO.util.Easing.backOut);
    anim.onStart.subscribe(function(){
        YAHOO.util.Dom.setStyle(elemToAnimate, "overflow-y", showFull ? "visible":"hidden");
    });
    anim.onComplete.subscribe(function() {
        YAHOO.util.Dom.setStyle(elemToAnimate, "height", showFull ? "100%": collapsedHeight + "px");
        $(labelElem).innerHTML = showFull
                ? labelLessText
                : labelMoreText;
    });
    anim.animate();
}

function addInputSubmitEventElem(input, callback) {
    input.onkeydown = function(e) {
        e = e || window.event;
        if (e.keyCode == 13) {
            if(isDefined(callback))
                callback();
            else
                input.form.submit();
            return false;
        }
    };
}

function addInputSubmitEventForm(form, callback) {
    var inputs = form.getElementsByTagName('input');
    for (var j=0;j < inputs.length;j++)
        addInputSubmitEventElem(inputs[j], callback);
}

function imageLoaded(img) {
    var imageLoaded = true;
    try{
        if(isDefined(img.complete)){
                imageLoaded = img.complete;
        }
        if(imageLoaded && isDefined(img.naturalWidth)){
            imageLoaded = (img.naturalWidth != 0);
        }
    }catch(error){}
    return imageLoaded;
}

function validateLoadedImages(imageId){
    var images = YAHOO.util.Dom.getElementsBy(function(elem){return elem.id==imageId;}, "img");
    for(var i = 0; i < images.length; i++){
        var loadedImage = images[i];
        if(!imageLoaded(loadedImage)){
            loadedImage.src = loadedImage.attributes["defaultImg"].value;
        }
    }
}

// Added for 2.0.0 changes start
function popUpWin(url,width,height) {
	var b=window.open(url,"NewWindow","width="+width+",height="+height+"," +
			"status=no,scrollbars=yes,resizable=yes,directories=no,menubar=no,toolbar=no,location=no");
	b.focus();
}
//Added for 2.0.0 changes end

