function expandSubmit(nodeId)
{
    expandField = "<input type=\"hidden\" name=\"expand\" value=\"" + nodeId + "\"/>";
    document.getElementById("hiddenField").innerHTML = expandField;
    document.forms[0].submit();
}

function collapseSubmit(nodeId)
{
    collapseField = "<input type=\"hidden\" name=\"collapse\" value=\"" + nodeId + "\"/>";
    document.getElementById("hiddenField").innerHTML = collapseField;
    document.forms[0].submit();
}

function selectSubmit(nodeId)
{
    expandField = "<input type=\"hidden\" name=\"select\" value=\"" + nodeId + "\"/>";
    document.getElementById("hiddenField").innerHTML = expandField;
    document.forms[0].submit();
}

function unselectSubmit(nodeId)
{
    collapseField = "<input type=\"hidden\" name=\"unselect\" value=\"" + nodeId + "\"/>";
    document.getElementById("hiddenField").innerHTML = collapseField;
    document.forms[0].submit();
}

function selectNode(nodeId)
{
    var url = "portletController.do";
    var params = 'portletName=calculateBuyPortlet&select='+nodeId;
    var myAjax = new Ajax.Updater({success: 'calculatedBuy'},url,{method: 'get', parameters: params});
    return false;
}

function unselectNode(nodeId)
{
    var url = "portletController.do";
    var params = 'portletName=calculateBuyPortlet&unselect='+nodeId;
    var myAjax = new Ajax.Updater({success: 'calculatedBuy'},url,{method: 'get', parameters: params});
    return false;
}

function previewAd()
{
    var theUrl = getVal('theUrl');
    var theTrackingUrl = getVal('theTrackingUrl');
    var theTitle = escape(Utf8.encode(getVal('theTitle')));
    var content = escape(Utf8.encode(getVal('theContent')));
    var mediaUrl = getVal('theMediaUrl');
    var fallbackMediaUrl = getVal('theFallbackMediaUrl');
    var url = "portletController.do";
    var params = 'portletName=previewAdPortlet&url='+theUrl+'&title='+theTitle+'&content='+content+'&trackingUrl='+theTrackingUrl+"&mediaUrl="+mediaUrl+"&fallbackMediaUrl="+fallbackMediaUrl;
    var myAjax = new Ajax.Updater({success: 'adPreview'},url,{method: 'get', parameters: params});
    return false;
}

function listPartners()
{
    var theUrl = getVal('theUrl');
    var theUsername = getVal('theUsername');
    var theTitle = getVal('theTitle');
    var theName = getVal('theName');
    var theCategoryId = getVal('theCategoryId');
    var theKeywordId = getVal('theKeywordId');
    var partnerType = getVal('partnerType');

    if((theUrl && theUrl.length > 3) ||
       (theUsername && theUsername.length > 3) ||
       (theTitle && theTitle.length > 3) ||
       (theName && theName.length > 3) ||
       (partnerType && partnerType > 0) ||
       (theCategoryId && theCategoryId > 0))
    {
        var thePageSize = getVal('thePageSize');
        var theOrder = getVal('theOrder');
        var theAscending = getVal('theAscending');
        var url = "/portletController.do";
        get('partnerListing').innerHTML = "<tr><td align='center' colspan='3'><img src='/images/ajax-loader.gif' border='0' /></td></tr>";
        var params = 'portletName=listPartnersPortlet&url='+theUrl+'&username='+theUsername+'&pageSize='+thePageSize+'&order='+theOrder+'&ascending='+theAscending+'&title='+theTitle+'&name='+theName+'&categoryId='+theCategoryId+"&partnerType="+partnerType+"&keywordId="+theKeywordId;
        var myAjax = new Ajax.Updater({success: 'partnerListing'},url,{method: 'get', parameters: params});
    }
    return false;
}

function lookupSitetitle()
{
    var siteUrl = getVal('siteUrl');
    if(siteUrl == undefined)
    {
        siteUrl = arguments[0];
    }
    partnerService.getSiteTitle(siteUrl, handleUpdateSiteTitle);
    lookupFeedUrl(siteUrl);
}

function lookupSiteInfo()
{
    var siteUrl = getVal('siteUrl');
    if(siteUrl == undefined)
    {
        siteUrl = arguments[0];
    }
    
    if(siteUrl.indexOf('http') == -1)
    {
    	siteUrl += "http://";
    	$("siteUrl").value = siteUrl;
    }

    if(isUrl(siteUrl))
    {
        get('ajaxloader').innerHTML = "<img src='/images/ajax-loader_16x16.gif' border='0' />";
        partnerService.getSiteInfo(siteUrl, handleLookupSiteInfo);
        //partnerService.getSiteDtoByUrl(siteUrl, handleSiteFound);
    }
    else
    {
        get('ajaxloader').innerHTML = "<img src='/images/icons/message_delete.png' alt='NOT OK' border='0' />";
    }
}

function isUrl(s)
{
    var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
    return regexp.test(s);
}



function validateURL()
{
    var url = arguments[0];
    url = trim(url);
    if(url != 0)
    {
        var j = new RegExp();
        j.compile("^[A-Za-z]+://[A-Za-z0-9-]+\.[A-Za-z0-9]+");

        if (!j.test(url))
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    return false
}

function trim()
{
    var str = arguments[0];
    return str.replace(/^\s+|\s+$/g, '') ;
}

function stripWhiteSpace()
{
    var str = arguments[0];
    str = trim(str);
    return str.replace(/\s+/g, '') ;
}

function handleLookupSiteInfo(str)
{
    if(str != undefined)
    {
        var sE = get('siteTitle');
        sE.value = str.title;

        var sE2 = get('feedUrl');
        sE2.value = str.feedUrl;

        var sE3 = get('sitedescription');
        sE3.value = str.description;

        var sE4 = get('sitekeywords');
        var kw = str.keywords;
        if (kw == undefined)
        {
            kw = "";
        }
        sE4.value = kw;
    }
    get('ajaxloader').innerHTML = "";
}

function handleSiteFound(site)
{
    if(site != undefined)
    {
        var sE = get('siteFound');
        var str = "<img src='/images/icons/message_delete.png' alt='NOT OK' border='0' />&nbsp;<a href='/partners/'"+site.name+"'>"+site.title+"</a>";
        siteFound.innerHTML = str;
    }
    else
        siteFound.innerHTML = "";
}

function handleUpdateSiteTitle(str)
{
    //alert(str);
    var sE = get('siteTitle');
    sE.value = str;
}

function lookupFeedUrl()
{
    var siteUrl = getVal('siteUrl');
    if(siteUrl == undefined)
    {
        siteUrl = arguments[0];
    }
    partnerService.getFeedUrl(siteUrl, handleUpdateFeedUrl);
}

function handleUpdateFeedUrl(str)
{
    //alert(str);
    var sE = get('feedUrl');
    sE.value = str;
}

function lookupByFeedUrl()
{
    var siteUrl = getVal('feedUrl');
    if(siteUrl == undefined)
    {
        siteUrl = arguments[0];
    }
    //partnerService.getFeedTitle(siteUrl, handleUpdateSiteTitle);
    //partnerService.getFeedDescription(siteUrl, handleUpdateSiteDescription);
    partnerService.getFeedByUrl(siteUrl, handleUpdateFeedValues);
}

function convertCurrency(textinput, from, to)
{
    tailsweepService.convert(from, to, textinput.value,handleConverted);
}

function handleConverted(converted)
{
    var sE = get('converted');
    sE.innerHTML = converted;
}

function loadTemplate(selectbox)
{
    var template = getSelectedOptionValue(selectbox);
    adminService.loadTemplate(template, handleLoadTemplate);
}

function handleLoadTemplate(content)
{
    var sE = get('content');
    sE.innerHTML = content;
}

function handleUpdateFeedValues(syndFeed)
{
    //alert(str);
    get('description').value = syndFeed.description;
    get('siteTitle').value = syndFeed.title;
}

function checkNickname()
{
    var nickname = getVal('nickname');
    if(nickname == undefined)
    {
        nickname = arguments[0];
    }
    partnerService.checkNickname(nickname, handleCheckNickname);
}

function handleCheckNickname(str)
{
    var sE = get('checkNickname');
    if(str)
        sE.innerHTML = '<img src="/images/icons/message_accept.png" alt="OK" />';
    else
        sE.innerHTML = '<img src="/images/icons/message_delete.png" alt="NOT OK" />';
}

function checkPassword()
{
    var pwd = getVal('password');
    
    if(pwd) {
    	$("#passwordCheck").load("/checkPasswordStrength.do?password="+pwd);
    }
}

function checkPasswordRetyped()
{
    var pwd = $("#password").val();
    var pwdRetyped = $("#passwordRetyped").val();
    
    if(pwdRetyped != "")
    {
    	if(pwdRetyped == pwd)
    	{	
    		$("#passwordCheckRetypedNOK").hide();
    		$("#passwordCheckRetypedOK").css('display', 'inline');
    	}
    	else
    	{
    		$("#passwordCheckRetypedOK").hide();
    		$("#passwordCheckRetypedNOK").css('display', 'inline');
    	}
    }
    else
    {
    	$("#passwordCheckRetypedNOK").hide();
		$("#passwordCheckRetypedOK").hide();
    }
}

function debug(text)
{
    var pw = document.createElement("div");
    pw.innerHTML = text;
    document.body.appendChild(pw);
}

function testa()
{
    alert("HEJ");
    return false;
}

function setCityName(cityName)
{
    var cE = get("city");
    cE.value = ""+cityName;
    //this.document.advertiserForm.city.value = ""+cityName;
    return false;
}

function partnerDetail(node,partnerId)
{

    var coors = findPos(node);
    var theDiv = get("partnerDetail");
    theDiv.style.display='block'
    theDiv.style.top=coors[1]+40 + 'px';
    //theDiv.style.bottom=coors[2]+20 + 'px';
    theDiv.style.left=coors[0]+20 + 'px';
    /*theDiv.style.width="800px;"
    theDiv.style.height="400px;"*/
    var url = "/portletController.do";
    var params = 'portletName=partnerDetailPortlet&partnerId='+partnerId;
    var myAjax = new Ajax.Updater({success: 'partnerDetail'},url,{method: 'get', parameters: params});

    return false;
}

function onMouseIt(node, url, params)
{
    var coors = findPos(node);
    var theDiv = get("onmouseDetail");
    theDiv.style.display='block'
    theDiv.style.top=coors[1]+20 + 'px';
    //theDiv.style.bottom=coors[2]+20 + 'px';
    theDiv.style.left=coors[0]+20 + 'px';
    /*theDiv.style.width="800px;"
    theDiv.style.height="400px;"*/
    var myAjax = new Ajax.Updater({success: 'onmouseDetail'},url,{method: 'get', parameters: params});

    return false;
}

function categoryDetail(node,partnerId)
{
    var coors = findPos(node);
    var theDiv = get("categoryDetail");
    theDiv.style.display='block'
    theDiv.style.top=coors[1]+20 + 'px';
    theDiv.style.left=coors[0]+20 + 'px';
    theDiv.style.width="800px;"
    theDiv.style.height="400px;"
    var url = "/portletController.do";
    var params = 'portletName=categoryDetailPortlet&categoryId='+partnerId;
    var myAjax = new Ajax.Updater({success: 'categoryDetail'},url,{method: 'get', parameters: params});

    return false;
}

function findPos(obj)
{
    var curleft = curtop = curbottom = 0;
    if(obj.offsetParent)
    {
        curleft = obj.offsetLeft;
        curtop = obj.offsetTop;
        curbottom = obj.offsetBottom;
        while(obj = obj.offsetParent)
        {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
            curbottom += obj.offsetBottom;
        }
    }
    return [curleft,curtop,curbottom];
}


function hideDiv(id)
{
    var node = get(id);
    node.style.display='none';
    /*node.style.width="1px;"
    node.style.height="1px;"*/
    return false;
}

function hidediv(id) {
    //safe function to hide an element with a specified id
    if (document.getElementById) { // DOM3 = IE5, NS6
        document.getElementById(id).style.display = 'none';
    }
    else {
        if (document.layers) { // Netscape 4
            document.id.display = 'none';
        }
        else { // IE 4
            document.all.id.style.display = 'none';
        }
    }
}

function showdiv(id) {
    //safe function to show an element with a specified id

    if (document.getElementById) { // DOM3 = IE5, NS6
        document.getElementById(id).style.display = 'block';
    }
    else {
        if (document.layers) { // Netscape 4
            document.id.display = 'block';
        }
        else { // IE 4
            document.all.id.style.display = 'block';
        }
    }
}

function showhide()
{
    var layer_ref = arguments[0];
    var state = Get_Cookie("showhide_"+layer_ref);
    if(!state)
    {
        if(arguments.length == 2)
        {
            state = arguments[1];
        }
        else
        {
            state = "none";
        }

    }

    if (state == 'block')
    {
        state = 'none';
    }
    else
    {
        state = 'block';
    }
    Set_Cookie("showhide_"+layer_ref, state, 90, "/", undefined, undefined);
    if (document.all)
    { //IS IE 4 or 5 (or 6 beta)
        eval( "document.all." + layer_ref + ".style.display = state");
    }
    if (document.layers)
    { //IS NETSCAPE 4 or below
        document.layers[layer_ref].display = state;
    }

    if (document.getElementById &&!document.all)
    {
        hza = document.getElementById(layer_ref);
        hza.style.display = state;
    }
    var btn = document.getElementById(layer_ref+"_button");
    if(btn)
    {
        if(state == "block")
        {
            swapImage(btn, "block");
        }
        else
        {
            swapImage(btn, "none");
        }
    }
}

function initShowHide()
{
    var layer_ref = arguments[0];
    var state = Get_Cookie("showhide_"+layer_ref);
    var btn = document.getElementById(layer_ref+"_button");
    if(state)
    {
        document.getElementById(layer_ref).style.display=state;
        if(btn)
        {
            if(state == "block")
            {
                swapImage(btn, "block");
            }
            else
            {
                swapImage(btn, "none");
            }
        }
    }
    else
    {
        state = "none";
        if(arguments.length == 2)
        {
            state = arguments[1];
        }
        document.getElementById(layer_ref).style.display=state;
        if(btn)
        {
            btn.src = "/images/icons/grey/minus.png";
        }
    }
}

function swapImage(myImage, state)
{
    if (state == "block")
    {
        myImage.src = "/images/icons/button_up_grey.png";
    }
    else
    {
        myImage.src = "/images/icons/button_down_grey.png";
    }
}

function offMouseIt()
{
    var node = get("onmouseDetail");
    node.style.display='none';
    /*node.style.width="1px;"
    node.style.height="1px;"*/
    return false;
}


function reportError(request)
{
    alert("ERROR");
    $F('adPreview') = "Error";
}


function showSign()
{
    get('reloadSign').style.display='block';
}

function get(id)
{
    return document.getElementById(id);
}

function getVal(id)
{
    var v = document.getElementById(id);//$(id);//
    if(v != undefined && v != null)
    {
        return v.value;
    }
    else
    {
        return "";
        //return undefined;
    }
}

function uploadPreviewMedia()
{
    //document.forms[0].action = "uploadMediaPreview.do";
    /*document.forms[0].action = "previewMediaAd.do";
    document.forms[0].submit();*/
    new Ajax.PeriodicalUpdater(
            'status',
            '/status.jsp',
    {asynchronous:true, frequency:1, method:'get'});
    return false;
}


function checkCardNumber()
{
    var cardNumberE = get('cardNumber');
    var cvvE = get('cvv');
    var fwdButton = get('fwdButton');

    var cardNumber = cardNumberE.value;
    var cvv = cvvE.value;

    var RegularExpression = /^[0-9]{13,21}$/i;

    if (! ValidateField(RegularExpression, cardNumber))
    {
        alert('Felaktigt kortnummer!');
        cvvE.focus();
        return false;
    }

    sum = 0; mul = 1; l = cardNumber.length;
    for (i = 0; i < l; i++)
    {
        digit = cardNumber.substring(l-i-1,l-i);
        tproduct = parseInt(digit ,10)*mul;
        if (tproduct >= 10)
            sum += (tproduct % 10) + 1;
        else
            sum += tproduct;
        if (mul == 1)
            mul++;
        else
            mul--;
    }

    if (!(sum % 10) == 0)
    {
        alert('Felaktigt kortnummer!');
        cardNumberE.focus();
        return false;
    }

    if (cvv == '000' ||cvv == '0000')
    {
        alert('Felaktigt säkerhetskod! (CVV2)');
        cvvE.focus();
        return false;
    }

    if (cvv.length < 3)
    {
        if (digit == 4 || digit == 5)
        {
            alert("Du måste fylla i säkerhetskoden! (CVV2)");
            cvvE.focus();
            return false;
        }
        else
        {
            if (confirm("Du har ej angett en säkerhetskod! (CVV2)\nDin kortutgivare kan komma att neka transaktionen utan säkerhetskod.\nVälj [OK] om du ej har en säkerhetskod, välj annars [Avbryt] och ange din kod.\n\nVill du fortsätta utan säkerhetskod?"))
            {

                fwdButton.disabled = 'true';
                document.body.style.cursor = 'wait';
                return true;

            }
            else
            {
                cvvE.focus();
                return false;
            }
        }
    }

    fwdButton.disabled = 'true';
    document.body.style.cursor = 'wait';
}

function ValidateField(pattern, FieldStr)
{
    return pattern.test(FieldStr);
}

function validateStartDate()
{
    var year = $F("year");
    var month = $F("month");
    var day = $F("day");
    var theDate = new Date ( year, month, day );
    var now = new Date();
    if (now.getTime() > theDate.getTime())
    {
        alert("Invalid startdate");
        return false;
    }
    return true;
}

function popitup()
{
    var url = arguments[0];
    var width = '600';
    var height = '800';

    if(arguments.length == 3)
    {
        width = arguments[1];
        height = arguments[2];
    }
    newwindow=window.open(url,'name','height='+height+',width='+width);
    if (window.focus) {newwindow.focus()}
    return false;
}

function popitupScrollbar()
{
    var url = arguments[0];
    var width = '600';
    var height = '800';

    if(arguments.length == 3)
    {
        width = arguments[1];
        height = arguments[2];
    }
    newwindow=window.open(url,'name','height='+height+',width='+width+',scrollbars=yes');
    if (window.focus) {newwindow.focus()}
    return false;
}

function previewContent()
{
    document.forms[0].action = "/admin/previewContent.do";
    popupform(document.forms[0], "preview");
    document.forms[0].submit;
    return false;
}

function popupform(myform, windowname)
{
    if (! window.focus)return true;
    window.open('', windowname, 'height=800,width=800,scrollbars=no');
    myform.target=windowname;
    return true;
}


function calculatePrice()
{
    var url = "/portletController.do";
    var params = 'portletName=calculatePricePortlet';
    var myAjax = new Ajax.Updater({success: 'calculatedPrice'},url,{method: 'get', parameters: params});
}

function togglePartners(id)
{
    var pid = 'expanded_partners_'+id;
    var show = "showPartners_"+id;
    var hide = "hidePartners_"+id;

    toggle(show);
    toggle(hide);
    toggle(pid);
}

function searchAvailablePartners()
{
    //get('availablePartners').style.display = "block";

    //    var productId = getVal('productId');
    var productId = "";
    var startDate = "";
    var endDate = "";
    var partnerId = "";
    var categoryIds = "";
    var budget = "0.0";
    var regionId = "0";
    var countryId = "0";
    var searchTerm = "";
    var sov = 1.0;
    var currencyId = 1;
    productId = getSelectedRadioValue(document.buyFlowForm.productId);
    if(productId == undefined || productId == "")
    {
        productId = getVal('productId');
    }

    startDate = getVal('startDate');
    endDate = getVal('endDate');
    //partnerId = getVal('partnerId');
    //alert(startDate  +" - " + endDate);
    categoryIds = getSelectedCheckboxValue(document.buyFlowForm.categoryIds);
    budget = getVal('budget');

    countryId = getVal("countryId");
    regionId = getVal("regionId");
    if(isset(getVal("sov")))
    {
        sov = getVal("sov");
    }

    if(isset(getVal('currencyId')))
    {
        currencyId = getVal('currencyId');
    }
    //searchTerm = getVal('searchTerm');

    get('availablePartners').style.display = "block";
    get('availablePartners').innerHTML = "<center><img src='/images/ajax-loader.gif' border='0' /><br /></center>";

    var url = "/portletController.do";
    var params = 'portletName=searchAvailablePartners&productId='+productId+'&startDate='+startDate+'&endDate='+endDate+'&partnerId='+partnerId + "&categoryIds="+categoryIds+"&budget="+budget+"&regionId="+regionId+"&searchTerm="+searchTerm+"&countryId="+countryId + "&sov="+sov+"&currencyId="+currencyId;
    var myAjax = new Ajax.Updater({success: 'availablePartners'},url,{method: 'post', parameters: params, evalScripts:true});

    //get('selectedPartners').style.display = "none";

    //calculatePrice();
    return false;
}

function checkPartner(box, nodeId)
{
    get('selectedPartners').style.display = "block";
    var params2 = 'portletName=listSelectedPartnersPortlet&';
    if(box.checked)
    {
        params2 += 'selectPartner='+nodeId;
    }
    else
    {
        box.checked = false;
        params2 += 'unselectPartner='+nodeId;
    }
    var url2 = "/portletController.do";

    var myAjax2 = new Ajax.Updater({success: 'selectedPartners'},url2,{method: 'get', parameters: params2});
    return false;
}

function checkPartners()
{
    get('selectedPartners').style.display = "block";
    partners = get('availablePartnersForm').availablePartners;
    checkAll(partners);
    var partnerIds = getSelectedCheckboxValue(partners);
    var params2 = 'portletName=listSelectedPartnersPortlet&selectPartners='+partnerIds;
    var url2 = "/portletController.do";
    var myAjax2 = new Ajax.Updater({success: 'selectedPartners'},url2,{method: 'get', parameters: params2});
    return false;
}

function uncheckPartner(nodeId)
{
    get('selectedPartners').style.display = "block";
    //get('checkedPartner_'+nodeId).style.display = "block";
    var box = get('partner_'+nodeId);
    if(box.checked)
    {
        box.checked=false
    }
    var url2 = "/portletController.do";
    var params2 = 'portletName=listSelectedPartnersPortlet&unselectPartner='+nodeId;
    var myAjax2 = new Ajax.Updater({success: 'selectedPartners'},url2,{method: 'get', parameters: params2});
    return false;
}

function listSelectedPartners()
{
    get('selectedPartners').style.display = "block";
    var url2 = "/portletController.do";
    var params2 = 'portletName=listSelectedPartnersPortlet';
    var myAjax2 = new Ajax.Updater({success: 'selectedPartners'},url2,{method: 'get', parameters: params2});
    return false;
}

function showCart()
{
    var url2 = "/portletController.do";
    var params2 = 'portletName=manageCartPortlet&action=show';
    var myAjax2 = new Ajax.Updater({success: 'showCart'},url2,{method: 'get', parameters: params2});
}

function addToCart(jsonStr)
{
    var url2 = "/portletController.do";
    var params2 = 'portletName=manageCartPortlet&action=add&json='+jsonStr;
    var myAjax2 = new Ajax.Updater({success: 'showCart'},url2,{method: 'post', parameters: params2});
    get('availablePartners').style.display = "none";
    return false;
}

function removeFromCart(id)
{
    var url2 = "/portletController.do";
    var params2 = 'portletName=manageCartPortlet&action=remove&id='+id;
    var myAjax2 = new Ajax.Updater({success: 'showCart'},url2,{method: 'get', parameters: params2});
    return false;
}

function clearCart()
{
    var url2 = "/portletController.do";
    var params2 = 'portletName=manageCartPortlet&action=clear';
    var myAjax2 = new Ajax.Updater({success: 'showCart'},url2,{method: 'get', parameters: params2});
    return false;
}

function checkCategory(box, id)
{
    //alert('^category_'+cid+'_partner_[0-9]+$');
    var regex = '^category_'+id+'_partner_[0-9]+$';
    var attributes = {
    //		'tagName':'input',                         // scalar   Test
        'id':(new RegExp(regex,'i'))   // RegExp   Test

    }

    // Define where in the DOM we want to start the search
    //var startAt = document.getElementById('categoryTree');

    // Find the Nodes!
    /*var results = DOM.Find.getElementsByAttributes(attributes, 'expanded_partners_'+id, undefined, undefined);

    for(var x = 0; x < results.length; x++)
    {
        var element = results[x];
        element.checked = box.checked;
    }*/

    var url = "/portletController.do";
    var params = 'portletName=toggleCategoryPortlet&';
    if(box.checked)
    {
        params += 'selectCategory='+id;
    }
    else
    {
        params += 'unselectCategory='+id;
    }
    var myAjax = new Ajax.Updater({success: 'expanded_partners_'+id},url,{method: 'get', parameters: params});

    var url2 = "/portletController.do";
    var params2 = 'portletName=calculatePricePortlet&';
    if(box.checked)
    {
        params2 += 'selectPartner='+id;
    }
    else
    {
        params2 += 'unselectPartner='+d;
    }
    var myAjax2 = new Ajax.Updater({success: 'calculatedPrice'},url2,{method: 'get', parameters: params2});
}

function expandCategory(id)
{
    //togglePartners(id);
    var url = "/portletController.do";
    var params = 'portletName=toggleCategoryPortlet&expandCategory='+id;
    var myAjax = new Ajax.Updater({success: 'expanded_partners_'+id},url,{method: 'get', parameters: params});
}

function collapseCategory(id)
{
    //alert('^category_'+cid+'_partner_[0-9]+$');
    //togglePartners(id);
    var url = "/portletController.do";
    var params = 'portletName=toggleCategoryPortlet&collapseCategory='+id;
    var myAjax = new Ajax.Updater({success: 'expanded_partners_'+id},url,{method: 'get', parameters: params});
}

function findIt(regex)
{
    //alert('^category_'+cid+'_partner_[0-9]+$');
    var attributes = {
        'id':(new RegExp(regex,'i'))   // RegExp   Test

    }

    // Define where in the DOM we want to start the search
    //var startAt = document.getElementById('categoryTree');

    // Find the Nodes!
    var results = DOM.Find.getElementsByAttributes(attributes, undefined, undefined, undefined);
    //alert(results);
    // Do something with the result set
    /*for(var x = 0; x < results.length; x++)
    {
        var element = results[x];
        //alert(element.id);
        //element.style.display = 'none';
    }*/
    return results;
}

function findIt(regex, start)
{
    //alert('^category_'+cid+'_partner_[0-9]+$');
    var attributes = {
        'id':(new RegExp(regex,'i'))   // RegExp   Test

    }

    // Define where in the DOM we want to start the search
    //var startAt = document.getElementById('categoryTree');

    // Find the Nodes!
    var results = DOM.Find.getElementsByAttributes(attributes, start, undefined, undefined);
    //alert(results);
    // Do something with the result set
    /*for(var x = 0; x < results.length; x++)
    {
        var element = results[x];
        alert(element.id);
        //element.style.display = 'none';
    }*/
    return results;
}

function toggleEl(obj) {
    var elements = new Array();
    for (var i=0,len=arguments.length;i<len;i++)
    {
        var element = arguments[i];

        var el = document.getElementById(element);
        if(el != undefined)
        {
            if ( el.style.display != 'none' ) {
                el.style.display = 'none';
            }
            else {
                el.style.display = '';
            }
        }
        else
        {
            alert("toggle - Cannot find " + obj);
        }
    }
    return false;
}

function dollar() {
    var elements = new Array();
    for (var i=0,len=arguments.length;i<len;i++) {
        var element = arguments[i];
        if (typeof element == 'string') {
            var matched = document.getElementById(element);
            if (matched) {
                elements.push(matched);
            } else {
                var allels = (document.all) ? document.all : document.getElementsByTagName('*');
                var regexp = new RegExp('(^| )'+element+'( |$)');
                for (var i=0,len=allels.length;i<len;i++) if (regexp.test(allels[i].className)) elements.push(allels[i]);
            }
            if (!elements.length) elements = document.getElementsByTagName(element);
            if (!elements.length) {
                elements = new Array();
                var allels = (document.all) ? document.all : document.getElementsByTagName('*');
                for (var i=0,len=allels.length;i<len;i++) if (allels[i].getAttribute(element)) elements.push(allels[i]);
            }
            if (!elements.length) {
                var allels = (document.all) ? document.all : document.getElementsByTagName('*');
                for (var i=0,len=allels.length;i<len;i++) if (allels[i].attributes) for (var j=0,lenn=allels[i].attributes.length;j<lenn;j++) if (allels[i].attributes[j].specified) if (allels[i].attributes[j].nodeValue == element) elements.push(allels[i]);
            }
        } else {
            elements.push(element);
        }
    }
    if (elements.length == 1) {
        return elements[0];
    } else {
        return elements;
    }
}

function getSelectedRadio(buttonGroup) {
    // returns the array number of the selected radio button or -1 if no button is selected
    if (buttonGroup[0]) { // if the button group is an array (one button is not an array)
        for (var i=0; i<buttonGroup.length; i++) {
            if (buttonGroup[i].checked) {
                return i
            }
        }
    } else {
        if (buttonGroup.checked) { return 0; } // if the one button is checked, return zero
    }
    // if we get to this point, no radio button is selected
    return -1;
} // Ends the "getSelectedRadio" function

function getSelectedRadioValue(buttonGroup) {
    // returns the value of the selected radio button or "" if no button is selected
    var i = getSelectedRadio(buttonGroup);
    if (i == -1) {
        return "";
    } else {
        if (buttonGroup[i]) { // Make sure the button group is an array (not just one button)
            return buttonGroup[i].value;
        } else { // The button group is just the one button, and it is checked
            return buttonGroup.value;
        }
    }
} // Ends the "getSelectedRadioValue" function

function getSelectedOption(buttonGroup) {
    // returns the array number of the selected radio button or -1 if no button is selected
    if (buttonGroup[0]) { // if the button group is an array (one button is not an array)
        for (var i=0; i<buttonGroup.length; i++) {
            if (buttonGroup[i].selected) {
                return i
            }
        }
    } else {
        if (buttonGroup.selected) { return 0; } // if the one button is checked, return zero
    }
    // if we get to this point, no radio button is selected
    return -1;
} // Ends the "getSelectedRadio" function

function getSelectedOptionValue(buttonGroup) {
    // returns the value of the selected radio button or "" if no button is selected
    var i = getSelectedOption(buttonGroup);
    if (i == -1) {
        return "";
    } else {
        if (buttonGroup[i]) { // Make sure the button group is an array (not just one button)
            return buttonGroup[i].value;
        } else { // The button group is just the one button, and it is checked
            return buttonGroup.value;
        }
    }
} // Ends the "getSelectedRadioValue" function

function getSelectedCheckbox(buttonGroup) {
    // Go through all the check boxes. return an array of all the ones
    // that are selected (their position numbers). if no boxes were checked,
    // returned array will be empty (length will be zero)
    var retArr = new Array();
    var lastElement = 0;
    if (buttonGroup[0]) { // if the button group is an array (one check box is not an array)
        for (var i=0; i<buttonGroup.length; i++) {
            if (buttonGroup[i].checked) {
                retArr.length = lastElement;
                retArr[lastElement] = i;
                lastElement++;
            }
        }
    } else { // There is only one check box (it's not an array)
        if (buttonGroup.checked) { // if the one check box is checked
            retArr.length = lastElement;
            retArr[lastElement] = 0; // return zero as the only array value
        }
    }
    return retArr;
} // Ends the "getSelectedCheckbox" function

function getSelectedCheckboxValue(buttonGroup) {
    // return an array of values selected in the check box group. if no boxes
    // were checked, returned array will be empty (length will be zero)        
    var retArr = new Array(); // set up empty array for the return values
    if(buttonGroup)
    {
        var selectedItems = getSelectedCheckbox(buttonGroup);
        if (selectedItems.length != 0) { // if there was something selected
            retArr.length = selectedItems.length;
            for (var i=0; i<selectedItems.length; i++) {
                if (buttonGroup[selectedItems[i]]) { // Make sure it's an array
                    retArr[i] = buttonGroup[selectedItems[i]].value;
                } else { // It's not an array (there's just one check box and it's selected)
                    retArr[i] = buttonGroup.value;// return that value
                }
            }
        }
    }
    return retArr;
} // Ends the "getSelectedCheckBoxValue" function

function getTextValues(textGroup)
{
    // return an array of values selected in the check box group. if no boxes
    // were checked, returned array will be empty (length will be zero)
    var retArr = new Array(); // set up empty array for the return values
    for (var i=0; i<textGroup.length; i++)
    {
        retArr.add()
        retArr.length = lastElement;
        retArr[lastElement] = i;
        lastElement++;

    }
    return retArr;
}



function uncheckAll(buttonGroup)
{
    if (buttonGroup[0]) { // if the button group is an array (one check box is not an array)
        for (var i=0; i<buttonGroup.length; i++)
        {
            buttonGroup[i].checked=false;
        }
    }
    else
    { // There is only one check box (it's not an array)
        buttonGroup.checked = false;
    }
    return false;
}

function checkAll(buttonGroup)
{
    if (buttonGroup[0]) { // if the button group is an array (one check box is not an array)
        for (var i=0; i<buttonGroup.length; i++)
        {
            buttonGroup[i].checked=true;
        }
    }
    else
    { // There is only one check box (it's not an array)
        buttonGroup.checked = true;
    }
    return false;
}

/**
 *
 * UTF-8 data encode / decode
 * http://www.webtoolkit.info/
 *
 **/

var Utf8 = {

// public method for url encoding
    encode : function (string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    },

// public method for url decoding
    decode : function (utftext) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;

        while ( i < utftext.length ) {

            c = utftext.charCodeAt(i);

            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i+1);
                c3 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }

        }

        return string;
    }

}

function checkBox(id)
{
    var box = get(id);
    if(!box.checked)
    {
        box.checked = true;
        //alert("CHECKED " + id);
    }
    else
    {
        box.checked = false;
        //alert("UNCHECKED " + id);
    }
}

function Set_Cookie( name, value, expires, path, domain, secure )
{
    // set time, it's in milliseconds
    var today = new Date();
    today.setTime( today.getTime() );

    /*
    if the expires variable is set, make the correct
    expires time, the current script below will set
    it for x number of days, to make it for hours,
    delete * 24, for minutes, delete * 60 * 24
    */
    if ( expires )
    {
        expires = expires * 1000 * 60 * 60 * 24;
    }
    var expires_date = new Date( today.getTime() + (expires) );

    document.cookie = name + "=" +escape( value ) +
                      ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
                      ( ( path ) ? ";path=" + path : "" ) +
                      ( ( domain ) ? ";domain=" + domain : "" ) +
                      ( ( secure ) ? ";secure" : "" );
}

// this fixes an issue with the old method, ambiguous values
// with this test document.cookie.indexOf( name + "=" );
function Get_Cookie( check_name ) {
    // first we'll split this cookie up into name/value pairs
    // note: document.cookie only returns name=value, not the other components
    var a_all_cookies = document.cookie.split( ';' );
    var a_temp_cookie = '';
    var cookie_name = '';
    var cookie_value = '';
    var b_cookie_found = false; // set boolean t/f default f

    for ( i = 0; i < a_all_cookies.length; i++ )
    {
        // now we'll split apart each name=value pair
        a_temp_cookie = a_all_cookies[i].split( '=' );

        // and trim left/right whitespace while we're at it
        cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

        // if the extracted name matches passed check_name
        if ( cookie_name == check_name )
        {
            b_cookie_found = true;
            // we need to handle case where cookie has no value but exists (no = sign, that is):
            if ( a_temp_cookie.length > 1 )
            {
                cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
            }
            // note that in cases where cookie is initialized but no value, null is returned
            return cookie_value;
            break;
        }
        a_temp_cookie = null;
        cookie_name = '';
    }
    if ( !b_cookie_found )
    {
        return null;
    }
}

function registerFunction(theFunction)
{
    var nowOnload = window.onload;
    window.onload = function () {
        theFunction();
        //myOnloadFunction1();
        if(nowOnload != null && typeof(nowOnload) == 'function') {
            nowOnload();
        }
    }
}

function copyTo(value, id)
{
    get(id).value = value;
}

function checkAd(paId)
{
    var id =  "ad_" + paId + ".id";
    var chkbox = get(id);
    if(!chkbox)
    {
        chkbox = document.createElement('input');
        chkbox.type = "checkbox";
        chkbox.id = id;
        chkbox.name = 'adIds';
        chkbox.value = paId;
        chkbox.checked = true;
        chkbox.style.visibility = 'hidden';
        var form = get('adsForm');
        form.appendChild(chkbox);
    }
    else
    {
        if(chkbox.checked)
        {
            chkbox.checked = false;
        }
        else
        {
            chkbox.checked = true;
        }
    }
}

/*
/.*\[.*\]$/
*/

function findFormInputElements(formId,myRegExp)
{
    //debugEl.innerHTML = "DEBUG:<br />"; // DEBUG

    var theHash = new Hash();
    var theForm = $(formId);
    var inputEls = $A(theForm.getElementsByTagName('input'));
    var myRegex = new RegExp(myRegExp, "gim");
    inputEls.each(function(inputEl)
    {
        var type = inputEl.type;
        if(((type == "checkbox" || type == "radio") && inputEl.checked) || (type != "checkbox" && type != "radio"))
        {
            var matchPos = inputEl.name.search(/.*\[.*\]$/);
            if(matchPos != -1)
            {
                if(theHash.get(inputEl.name))
                {
                    theHash.set(inputEl.name,theHash.get(inputEl.name) + "," + inputEl.value);
                }
                else
                {
                    theHash.set(inputEl.name, inputEl.value);
                }
            }
        }
    });

    //DEBUG
    //var keys = theHash.keys();
    return theHash;
    /*keys.each(function(chkBoxGroup){
        debug.innerHTML += chkBoxGroup + "=" + theHash.get(chkBoxGroup) + "<br />";
    });*/
}

String.prototype.replaceAll=function(s1, s2)
{
    return this.replace(new RegExp(s1,"gim"), s2);
}

String.prototype.trim = function()
{
    return this.replace(/^\s+|\s+$/g, '') ;
}

String.prototype.chop = function()
{
    return this.substr(this.length-2, 1);
}

function isset(  ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: FremyCompany
    // *     example 1: isset( undefined, true);
    // *     returns 1: false
    // *     example 2: isset( 'Kevin van Zonneveld' );
    // *     returns 2: true

    var a=arguments; var l=a.length; var i=0;

    while ( i!=l ) {
        if (typeof(a[i])=='undefined' || a[i] == undefined || a[i] == '') {
            return false;
        } else {
            i++;
        }
    }

    return true;
}

//function toggleDisplay(){
//	for(i=0;i<arguments.length;i++){
//		toggleEl = document.getElementById(arguments[i]);
//		if(toggleEl){
//			toggleEl.style.display = (toggleEl.style.display == 'none') ? 'block' : 'none';		
//		}	
//	}
//}


if(typeof Class != "undefined"){	
	var CharCounter= Class.create({
		// field: input field to count chars
		// cntfield:element that displays num of chars left
		// maxlimit: take a wild guess...
	    initialize: function(field, cntField, maxLimit){
	    	this.field = $(field);
	    	this.cntField = $(cntField);
	    	this.maxLimit = maxLimit;
		    Event.observe(this.field, "keyup", this.update.bindAsEventListener(this), false);
	    },
	    update: function(){
	    	if (this.field.value.length > this.maxLimit) // if too long...trim it!
				this.field.value = this.field.value.substring(0, this.maxLimit);	
			else
				this.cntField.innerHTML = this.maxLimit - this.field.value.length; // otherwise, update  counter    	
	    }    
	});
}

function getDayDiff(dateA, dateB){
	var res = dateA-dateB;
	if(res < 0 ){
		res *= -1;
	}
	res = res / 1000 / 60 / 60 / 24;
	res = Math.ceil(res);	
	return res;
}

var formHash;
function selectAll(form, name)
{
    if(!formHash)
    {
        formHash = $H();
    }
    var checkboxes = Form.getInputs(form, 'checkbox', name);
	var val = formHash.get(name);
    if(!isset(val))
    {
        val = false;        
    }

    checkboxes.each(function(checkbox)
    {
		if(!val)
        {
            checkbox.checked = true;
        }
        else
        {
            checkbox.checked = false;
        }
        /*if(checkbox.checked)
        {
            checkbox.checked = false;
        }
        else
        {
            checkbox.checked = true;
        }*/
    });

    formHash.set(name, !val);

    return false;
}

function unselectAll(form, name)
{
    var checkboxes = Form.getInputs(form, 'checkbox', name);
	var ret = true;
	checkboxes.each(function(checkbox)
    {
		checkbox.checked = false;
	});

	return false;
}


/* Takes X number of elements and flashes a highlight effect 
	 Deps: scriptaculous
*/
function flashHighlight()
{
	for(i=0;i<arguments.length;i++){
		new Effect.Highlight(arguments[i], {startcolor: '#ffff99',endcolor: '#ffffff' });
	}
	return false;
}


function tsMultiSelect(selectEl, inputName) { 
	var option = selectEl.options[selectEl.selectedIndex];
	if(option.value=="")
	{
		return;
	} 
	var ul = selectEl.parentNode.getElementsByTagName('ul')[0]; 
	var choices = ul.getElementsByTagName('input'); 
	for (var i = 0; i < choices.length; i++)
	{ 
		if (choices[i].value == option.value) return;
	} 
		
	var li = document.createElement('li'); 
	var input = document.createElement('input'); 
	var text = document.createTextNode(option.firstChild.data); 
	input.type = 'hidden'; 
	input.value = option.value; 
	input.name = inputName;
	li.appendChild(input); 
	li.appendChild(text); 
	li.setAttribute('onclick', 'this.parentNode.removeChild(this);'); 
	ul.appendChild(li); 
}

function updateAllBoxes(formId, checkboxName, check)
{
	var form = $(formId);
	var boxes = Form.getInputs(form, 'checkbox', checkboxName);

	boxes.each(function(checkbox)
    {
		checkbox.checked = check;
    });
}

function checkHiddenBox(form, checkboxId, checkboxName, checkboxVal)
	{
		var chkbox = $(checkboxId);
        if(!chkbox)
        {
		 	chkbox = new Element('input', { 'type': 'checkbox', 'name': checkboxName, 'id': checkboxId, 'value': checkboxVal, 'checked': true});
            chkbox.style.visibility = 'hidden';
            form.appendChild(chkbox);
        }
        else
        {
            if(chkbox.checked)
            {
                chkbox.checked = false;
            }
            else
            {
                chkbox.checked = true;
            }
        }
	}
function doAjaxUpdate(container, url , options)
{
    // Some default behaviour to this action
    showAjaxLoader();
    var finalOptions = { onComplete:function(){hideAjaxLoader();} };
    Object.extend(finalOptions, options || {});

    lastAjaxReq = new Ajax.Updater(container, url, finalOptions);
    
    var abortButton = $('abortAjax'); 
//	Event.observe(abortButton, "click", function(){lastAjaxReq.transport.abort();}, false);
}
