
//Ajax global settings
$.ajaxSetup({
     dataType: "json",
     type:"get",
     async: true,
     /* custom settings */
     onSuccess: false,
     onError: false,
     isLoginCall: false,
     
    'beforeSend': function(xhr) {
        xhr.setRequestHeader("Accept", "application/json");
        if ($.sx_nocache == true) {
            xhr.setRequestHeader("Cache-Control", "max-age=0");
            // alert('Requesting uncached content');
        }
    },
    'success': function(jsondata, textStatus) {
        //alert(JSON.stringify(jsondata));
        if(this.onSuccess && $.isFunction(this.onSuccess)) {
            this.onSuccess(jsondata, textStatus);
        }
    },
    'error': function( xhr, textStatus, errorThrown ){
        if (xhr.status == 403) {
            if(this.isLoginCall) {
                if(this.onError && $.isFunction(this.onError)){this.onError(xhr, textStatus, errorThrown)};
            } else {
                $.showLoginBox();
            }
        } else if (xhr.status == 200) {
            // Ignore this. Its really success. It should never get here.
            // This has to be a bug in jQuery because 200 is the definition
            // of success by http. No idea why or how this is being called.
        } else if (xhr.status == 406) {
            alert("Security Filter Alert. There are certain word combinations that are not allowed in text to maintain the security of the Taleo systems. Words like 'select' and 'update' for example. Please contact sxadmin@taleo.com for further assistence.");
        } else if (xhr.status == 0) {
            // ignore. This means that a request has returned from an Ajax
            // call to a page which is no longer loaded (we think)
        } else {
            alert("An internal error has occured. Please try again later. If the problem persists, please contact your system administrator. Error code: " + xhr.status);
            if(this.onError && $.isFunction(this.onError)){this.onError(xhr, textStatus, errorThrown)};
        }
     }

});


jQuery.extend({
    STATUS_ACTIVE: '1',
    STATUS_INACTIVE: '2',
    STATUS_TRANSCODING: '3',
    DEFAULT_SEARCH: 'Search solutions...',
    CLTR_CONFIG: null,
    loadConfig: function(obj) {
        obj = obj.replace(/=/g,":");
        obj = obj.replace(/:(?!{)/g, ":'");
        obj = obj.replace(/,/g, "',");
        obj = obj.replace(/}',/g, "},");
        obj = obj.replace(/}(?=}|,)/g, "'}");
        obj = obj.replace(/(ERROR)/g, "ERROR_MSG");

        //obj = "{SCREEN_SHOT:{ERROR:'The maximum upload size is 20KB',UNIT:'KB',BYTES:20480,VALUE:20}}";

        /*
         *"{SCREEN_SHOT:{ERROR_MSG:'The maximum upload size is 20KB', UNIT:'KB', BYTES:'20480', VALUE:'20'},
         *DEMO:{ERROR_MSG:'The maximum upload size is 50MB', UNIT:'MB', BYTES:'52428800', VALUE:'50'},
         *WHITEPAPER:{ERROR_MSG:'The maximum upload size is 5MB', UNIT:'MB', BYTES:'5242880', VALUE:'5'},
         *PARTNER_LOGO:{ERROR_MSG:'The maximum upload size is 20KB', UNIT:'KB', BYTES:'20480', VALUE:'20'},
         *DATA_SHEET:{ERROR_MSG:'The maximum upload size is 5MB', UNIT:'MB', BYTES:'5242880', VALUE:'5'},
         *PARTNER_BROCHURE:{ERROR_MSG:'The maximum upload size is 5MB', UNIT:'MB', BYTES:'5242880', VALUE:'5'},
         *SOLUTION_LOGO:{ERROR_MSG:'The maximum upload size is 5KB', UNIT:'KB', BYTES:'5120', VALUE:'5'},
         *PARTNER_AVATAR:{ERROR_MSG:'The maximum upload size is 5KB', UNIT:'KB', BYTES:'5120', VALUE:'5'},
         *TESTIMONIAL:{ERROR_MSG:'The maximum upload size is 50MB', UNIT:'MB', BYTES:'52428800', VALUE:'50'}}"
         *
         */

        $.CLTR_CONFIG = JSON.parse(obj);
        var test = 0;

    },
    cloneObj: function(obj){
        if(obj == null || typeof(obj) != 'object')
            return obj;
        var temp = new obj.constructor();
        for(var key in obj)
            temp[key] = $.cloneObj(obj[key]);
        return temp;

    },
    findPosX:function (obj)
  {
    var curleft = 0;
    if(obj.offsetParent)
        while(1)
        {
          //alert(obj.tagName + " - " + obj.className + "\n" + obj.id + " - " + obj.offsetLeft);
          curleft += obj.offsetLeft;
          
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
  },

  findPosY: function(obj)
  {
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
  },

    /* Find an object's position on the screen. */
    findPos: function (obj) {
        var curleft = $.findPosX(obj);
        var curtop = $.findPosY(obj);
        return [curleft,curtop];
	},

    /* Find an object's position on the center of the screen. */
    findCenterPos: function(objWidth, objHeight) {
       // First, determine how much the user has scrolled

            var scrolledX, scrolledY;
            if( self.pageYoffset ) {
            scrolledX = self.pageXoffset;
            scrolledY = self.pageYoffset;
            } else if( document.documentElement && document.documentElement.scrollTop ) {
            scrolledX = document.documentElement.scrollLeft;
            scrolledY = document.documentElement.scrollTop;
            } else if( document.body ) {
            scrolledX = document.body.scrollLeft;
            scrolledY = document.body.scrollTop;
            }

            // Next, determine the coordinates of the center of browser's window

            var centerX, centerY;
            if( self.innerHeight ) {
            centerX = self.innerWidth;
            centerY = self.innerHeight;
            } else if( document.documentElement && document.documentElement.clientHeight ) {
            centerX = document.documentElement.clientWidth;
            centerY = document.documentElement.clientHeight;
            } else if( document.body ) {
            centerX = document.body.clientWidth;
            centerY = document.body.clientHeight;
            }

            // Xwidth is the width of the div, Yheight is the height of the
            // div passed as arguments to the function:
            var leftOffset = scrolledX + (centerX - objWidth) / 2;
            var topOffset = scrolledY + (centerY - objHeight) / 2;

            return [leftOffset,topOffset];
    },

    getCharCount: function(str, maxChars){
        var delta = 0;
        if(str!=null && str!=undefined) {
            delta = str.length;
            if(maxChars) {
                delta = maxChars-delta;
                if(delta<0) delta=0;
            };
        };
        return delta;
    },

    truncateToFit: function(str, length, suffix) {
        if(!str) {str = "";};
        if (str.length <= length) {
            return str;
        }
        if (suffix == undefined) {
            suffix = '...';
        }
        return str.substr(0, length).replace(/\s+?(\S+)?$/g, '') + suffix;
    },
    scrollToView: function(item, offset){
        $('html, body').animate({scrollTop: $(item).offset().top+offset}, 700);
    },
    toInt: function(v) {
        v = parseInt(v);
        return isNaN(v) ? false : v;
    },
    getSXPage: function(page) {
        if(!page) {page = window.location.href;};
        page = page.substring(page.lastIndexOf("/sx/"));
        if(page.indexOf("?")!=-1) {page = page.substring(0, page.indexOf("?"));};
        if(page=="/sx/index.jsp") {page = "/sx/";};
        return page;
    },
    SX_MIN_DATE: "1940:",
    SX_SIMPLE_DATE_FORMAT: "MMM d, yyyy",
    SX_SHORT_DATE_FORMAT: "MMM yyyy",
    SX_DATE_TIME_FORMAT: "MMM d, yyyy H:m:s",
    SX_INTERNAL_DATE_FORMAT: "yyyy-MM-dd",
    SX_YEAR_DATE_FORMAT: "yyyy",
    format_date: function(aDateString, format) {
        var theDate = Date.parse(aDateString);
        var strDate = null;
        if (theDate != null) {
            strDate = theDate.toString(format);
        }
        return strDate;
    },
    getMonthSelect: function() {
        var mArr = new Array();
        mArr.push({id:1,name:'Jan'});
        mArr.push({id:2,name:'Feb'});
        mArr.push({id:3,name:'Mar'});
        mArr.push({id:4,name:'Apr'});
        mArr.push({id:5,name:'May'});
        mArr.push({id:6,name:'Jun'});
        mArr.push({id:7,name:'Jul'});
        mArr.push({id:8,name:'Aug'});
        mArr.push({id:9,name:'Sep'});
        mArr.push({id:10,name:'Oct'});
        mArr.push({id:11,name:'Nov'});
        mArr.push({id:12,name:'Dec'});

        var mVal = $.getValuesAsString(mArr);
        return mVal;
    },
    getYearSelect: function(p) {
        p = $.extend({
			startYear :  parseInt($.SX_MIN_DATE.replace(/:/,"")),
			endYear: parseInt((new Date()).toString($.SX_YEAR_DATE_FORMAT))
		}, p);

        var yArr = new Array();
        var y_count=0;
        for(y_count=p.startYear; y_count<=p.endYear; y_count++) {
            yArr.push({id:y_count,name:y_count});
        };

        var yVal = $.getValuesAsString(yArr);
        return yVal;
    },
    iFrameDocumentVal: function(id, val) {
        var oIframe = document.getElementById(id);
        var oDoc = oIframe.contentWindow || oIframe.contentDocument;
        if (oDoc.document) {
            oDoc = oDoc.document;
        };
        if(val) {
            oDoc.body.innerHTML = val;
        } else {
            return oDoc.body.innerHTML;
        };
    },
    getValuesAsString: function(arr, field_names){
        var vStr= '';
        var fields = ['id','name'];

        if(field_names) {
            fields = field_names;
        }

        $.each(arr, function(i, item) {
            if(vStr.length>0) {
                vStr += ";";
            }
            vStr += eval('item.'+fields[0]) + ":" + eval('item.'+fields[1]);
        });
        return vStr;

    },
    displayAsCheckboxes: function(container, name, cols, elements, selectedElements) {

        $(container).empty();

        if(elements) {
            var columnRecords = Math.ceil(elements.length/cols);
            $(container).append("<tr>");

            for(var i=0; i<cols; i++) {
                $(container + " tr").append("<td>");
                $(container + " tr").append("<td style='text-align:right; padding-right:40px;'>");
            }
            var colCount=1;
            $.each(elements, function(i, item) {
                if (i>columnRecords-1 && (i%columnRecords==0)){
                    colCount= colCount+2;
                }
                //$(container + " tr td:eq(" + (colCount-1) + ")").append("<span style='float:left;'>" + item.name + "</span> <input type='checkbox' style='float:right;' name='" + name + "' value='" + item.id + "'><br>");
                $(container + " tr td:eq(" + (colCount-1) + ")").append("<span style='line-height:20px;'>"+item.name + "</span><br/>");
                $(container + " tr td:eq(" + (colCount) + ")").append("<span style='line-height:20px;'>&nbsp;<input type='checkbox' class='FormElement' name='" + name + "' value='" + item.id + "'></span><br/>");
             });

             //select
             $("input[type='checkbox'][name='"+name+"']").val(selectedElements);
        }
    },    
    displayAsRadio: function(container, name, cols, elements, selectedElements) {

        $(container).empty();

        if(elements) {
            var columnRecords = Math.ceil(elements.length/cols);
            $(container).append("<tr>");

            for(var i=0; i<cols; i++) {
                $(container + " tr").append("<td style='padding-right:40px;'>");
            }
            var colCount=0;
            $.each(elements, function(i, item) {
                if (i%columnRecords==0){
                    colCount++;
                }
                //$(container + " tr td:eq(" + (colCount-1) + ")").append("<span style='float:left;'>" + item.name + "</span> <input type='radio' name='" + name + "' value='" + item.id + "'><br>");
                $(container + " tr td:eq(" + (colCount-1) + ")").append("<input type='radio' name='" + name + "' value='" + item.id + "'> "+item.name+"<br/>");
             });

             //select
             $("input[type='radio'][name='"+name+"']").val(selectedElements);
        }
    },

    displayAsSelect: function(container,elements, selElement) {
        $(container).empty();
        if(!selElement || selElement.length==0){
            $(container).append("<option value='' style='font-style:italic;font-weight:normal;'>Select...</option>");
        }
        $.each(elements, function(i, item) {
            $(container).append("<option value='" + item.id + "'>" + item.name + "</option>");
        });
        if(selElement && selElement.length>0) {
            $(container).val(selElement);
        }
    },
    openDialog : function(anchorSelector, content, p){
		p = $.extend({
			top : 0,
			left: 0,
			width: 500,
			height: 350,
			modal: true,
			drag: true,
            recreateForm: true,
            caption: '',
			closeicon: 'ico-close.png',
			imgpath: '/sx/resources/jqGrid-3.4.4/themes/taleo/images/',
            frmSelector: null,
			closeOnEscape : false,
            afterShowForm: false,
            dlgId: "dlgmod"
		}, p);

        IDs = {modalcontent:"dlgcnt", modalhead:"dlghead", themodal:p.dlgId};

	    if(p.recreateForm===true && $("#"+IDs.themodal).html() != null) {
            $("#"+IDs.themodal).remove();
		}


        if(!anchorSelector){
            //set position at the center of the screen
            var pos = $.findCenterPos(p.width, p.height);
            p.left = pos[0];
            p.top = pos[1];
            //alert(p.top + " - " + p.left);
            //set default anchor
            anchorSelector = "#content";

        }

        createModal(IDs,content,p,anchorSelector,anchorSelector);
        if( p.drag ) { DnRModal("#"+IDs.themodal,"#"+IDs.modalhead+" td.modaltext"); }
        if(p.afterShowForm && $.isFunction(p.afterShowForm)) {
            p.afterShowForm($(p.frmSelector));
        }
        viewModal("#"+p.dlgId,{modal:p.modal});
    },

    showLoginBox: function() {
        var content =$($.getLoginFormContent());
        // make sure the user was previously logged in before showing them the
        // login box
        if ($.user.username == null) {
            window.location = "login.jsp";
        } else {
            $.openDialog($("#content")[0], content,{dlgId:"loginDlg",zIndex:6000,height:300,width:500,modal:true,caption:"Login to Solution Exchange",
                afterShowForm: function(frm){
                    //$(".modalwin:not(#loginDlg)").hide();
                    $("input.[id=j_username]").attr({value: $.user.username});
                    $("input.[id=j_username]").attr({'disabled': 'disabled'});
                    $.initLoginForm(function(){hideModal("#loginDlg");});
                }
            });
        }
    },

    showLogin: function(selector) {
        var content =$($.getLoginFormContent());
        $(selector).append(content);
        $(selector).css("position","relative");
        $(selector).css("top","auto");
        $.initLoginForm(function(aUser){
            if ( aUser.userType=="PARTNER_MANAGER") {
                window.location.href="/sx/admin";
            } else   if ( aUser.userType=="PARTNER_USER") {
                window.location.href="/sx/partneradmin";
            } else {
                window.location.href="/sx/dashboard.jsp";
            }
        });
    },

    initLoginForm: function(successFn) {
        //enable/disable login button depending on values in the username/password fields
        $("#j_username, #j_password").keyup(function(e){
            var arr = jQuery.grep($("#j_username, #j_password"), function(n, i){
                return (n.value.length>0);
            });
            if(arr.length==2){
                $("#loginBtn").attr("class","EditButton").removeAttr("disabled");
            } else {
                $("#loginBtn").attr("class","EditButtonDisabled").attr("disabled","disabled");
            }

            if(e.keyCode==13 && !$("#loginBtn").attr("disabled")) {
                $("#loginBtn").trigger("click");
            }

        });
        //set focus to username field
        if($("#j_username").attr("disabled")) {
            $("#j_password").focus();
        } else {
            $("#j_username").focus();
        }

        $("#loginBtn").click(function(e){
            var login = new Object();
            login.j_username = $("#j_username").attr("value");
            login.j_password = $("#j_password").attr("value");
            $.ajax({url:"/sx/rest/SecurityService/login", data:login, isLoginCall:true,
                onSuccess: function(jsondata, textStatus){
                    // alert(JSON.stringify(jsondata));
                    if(successFn && $.isFunction(successFn)) {
                        successFn(jsondata, textStatus);
                    }
                },
                onError: function(xhr, textStatus, errorThrown) {
                    if(xhr.status == 403) {
                        $("#loginError").empty().append("Invalid username or password. Please try again...");
                    }
                }
             });
         });
    },

    getLoginFormContent: function() {
        var content ="<div id='dlg' style=''><form id='loginFrm'><div id='loginError' class='error'></div><table id='loginTbl'>"+
            "<tr><td class='lable'>Username:</td><td><input type='text' id='j_username' size='50'></td></tr>"+
            "<tr><td class='lable'>Password:</td><td><input type='password' id='j_password' size='50'></td></tr>"+
            "<tr><td></td><td style='padding-top:10px'><span class='EditButton'><input class='EditButtonDisabled' type='button' id='loginBtn' value='Login' disabled/></span><span style='padding-left:50px;vertical-align:middle;padding-top:5px;'></td></tr>"+
            "<tr><td></td><td style='padding-top:10px;'><a onclick='alert(\"Please email your request to sxadmin@taleo.com. \"); return false;'>I forgot my password</a></td></tr>"+
            "<tr><td></td><td style='padding-top:10px;'><a href='/sx/partner_application'>New partner application form</a></td></tr>"+
            "</table></div></div>";

        return content;
    },

    user: null,
    // Check to see who the logged in user is and calls the code to
    // modify the welcome page when it finds it.
    checkUser: function() {
        //pass timestamp as a parameter to fix IE caching problem
        var tsTimeStamp= new Date().getTime();
        $.ajax({async: false,
            url: "/sx/rest/SecurityService/user",
            data: {time: tsTimeStamp},
            onSuccess:function(sxUser, textStatus){
                //alert(JSON.stringify(sxUser));
                var a = $.hasAccess(sxUser);
                if(a) {
                    $.updateUserNav(sxUser);
                } else {
                    window.location = "/sx/login.jsp";
                };
            }
        });
    },
    makeWelcome: function() {
        $.ajax({async: false,
            url: "/sx/rest/SecurityService/user",
            onSuccess:function(sxUser, textStatus){
                $("#welcome_name").html(sxUser.firstname + " " + sxUser.lastname);
                $("#welcome").show();
            }
        });
    },
    hasAccess: function(aUser) {
        var page = $.getSXPage();
        var rc = false;
        var arr = (new sx_Menu()).getAccess(page);
        //alert("arr = " + arr.toString() + " has anonymous:" + $.inArray("anonymous",arr) + "\n user: " + aUser.userType + " has user: "+$.inArray(aUser.userType,arr));
        if(arr.length>0 && $.inArray("anonymous",arr)==-1) {
            var rc = ($.inArray(aUser.userType,arr)!=-1);
        };
        return rc;
    },
    updateUserNav: function (aUser) {
        $.user = aUser;
//        $.user.sessionId = "<%=request.getSession(false).getId()%>";

        var page = $.getSXPage();
        var arr = (new sx_Menu()).getAccess(page);
        var menuType = aUser.userType;
        if(page=="/sx/login.jsp" || $.inArray("anonymous",arr)!=-1) {
            menuType = "anonymous";
        };
        (new sx_Menu()).display(menuType);

        if(page!="/sx/login.jsp") {
            if(!aUser.userType || $.trim(aUser.userType).length==0 || aUser.userType=="anonymous") {
                $("#welcome_login").show();
            } else {
                $("#welcome_name").html(aUser.firstname + " " + aUser.lastname);
                $("#welcome").show();
            };
        }
    },
    attrSafe: function(str) {
        return str.replace(/</g, "").replace(/'/g, "").replace(/&/, "")
                .replace(/\n/g, "").replace(/\"/g, "");
    },
    urlParams: function (jqArr) {
       jqArr.map(function () {
            return this.id + '=' + $.urlEncode(this.value);
       })
       .get()
       .join('&');
    },
    
    urlPretty: function (str) {
        return $.urlEncode(str
            .replace(/&/g, 'and')
            .replace(/ /g, "-")
            .replace(/\//g,"-or-")
        );
    },

    urlEncodeComponent: function (str) {
        return encodeURIComponent(str).replace(/%20/g, "+");
    },
    urlEncode: function (str) {
        return encodeURI(str).replace(/%20/g, "+").replace(/\\/g, "");
    },
    htmlEncode: function (str) {
        return str
            .replace(/&/g,'&amp;')
            .replace(/</g,'&lt;')
            .replace(/>/g,'&gt;')
            .replace(/"/g,'&quot;')
            .replace(/'/g,'&#x27;');
    },
    noEncode: function (str) {
        return str;
    },

    htmlEncodeObject: function (obj) {
        var encObj = obj;

        var typetest = typeof encObj;
        if(typetest==='string') {
            return $.htmlEncode(encObj);
        };

        $.each(obj, function(p,param) {
            if(param) {
                var encVal = $.htmlEncodeObject(param);
                encObj[p] = encVal;
            }
        });
        
        return encObj;
    },

    jsonEncodeStr: function (str) {
        return $.jsEncode(str);
    },
    jsEncode: function (str) {
        return str
            .replace(/\'/g,'\\\'')
            .replace(/\n/g,'\\n')
            .replace(/\t/g,'\\t')
            .replace(/\"/g,'\\"')
    },
    toHTMLString: function(str){
        var htmlVal = "";

        if(str) {
            htmlVal = str.replace(/\n{2,}/g, "<p/>").replace(/\n/g, "<br/>");
        }
        //alert(htmlVal);
        return htmlVal;
    },


    showRequestInfo: function (type, pageContext, name) {
        var curr_purpose = null;
        var p = {
            dlgId:"rfiDlg",
            height:530,
            width:600,
            top: 0,
            left: 0,
            caption:"Solution Exchange: <span class='green'>Contact Us. Kudos. Suggestions. Questions.</span>",
            afterShowForm: function(frm){
                    $(".purpose_Contact").sx_Feedback({header:"Contact", text:"Taleo", btnClass:"doContact",className:"FeedbackButton2",rfi_type:"Contact", isSelected:type==="Contact"});
                    $(".purpose_Suggest").sx_Feedback({header:"Suggest", text:"ideas", btnClass:"doSuggest",className:"FeedbackButton2",rfi_type:"Suggest", isSelected:type==="Suggest"});
                    $(".purpose_Ask").sx_Feedback({header:"Ask", text:"questions", btnClass:"doAsk", className:"FeedbackButton2", rfi_type:"Ask", isSelected:type==="Ask"});
                    $(".purpose_Report").sx_Feedback({header:"Report", text:"issues", btnClass:"doReport", className:"FeedbackButton2", rfi_type:"Report", isSelected:type==="Report"});
                    $(".purpose_Kudos").sx_Feedback({header:"Kudos", text:"to Taleo", btnClass:"doKudos", className:"FeedbackButton2", rfi_type:"Kudos", isSelected:type==="Kudos"});

                    $("<input type='hidden' id='rfi_purpose' value='"+type+"'/>").insertAfter(".purpose_Kudos");
                    
                    $(".purpose_Contact, .purpose_Suggest, .purpose_Ask, .purpose_Report, .purpose_Kudos").click(function(){
                       $("#rfi_purpose").val(this.p.rfi_type);
                       $(this).selectFeedback(true);
                       if(curr_purpose!=null) {
                            $(curr_purpose).selectFeedback(false);

                       };
                       curr_purpose = this;
                    });

                    $(".purpose_"+type).click();

                    var typed = false;
                    $("#privacy").click(function () {
                       $("#rfiForm textarea").trigger("keyup");
                    });
                    $("#rfiForm input[type='text'], #rfiForm textarea").keyup(function(e){
                        if ($("#rfi_name").val().length > 0 && $("#rfi_email").val().length > 0 && $("#privacy:checked").val()) {
                            $("#rfiBtn").attr("class","EditButton").removeAttr("disabled");
                        } else {
                            $("#rfiBtn").attr("class","EditButtonDisabled").attr("disabled","disabled");
                        }
                        if(e.keyCode==13 && !$("#rfiBtn").attr("disabled")) {
                            $("#rfiBtn").trigger("click");
                        }
                    });
                    $("#rfi_description").focus(function(e){
                        if (!typed) {
                            $("#rfi_description").val("");
                            $("#rfi_description").removeClass("italic");
                            typed = true;
                        }
                    });

                    if(type) {
                        $("#rfi_purpose").val(type);
                    };

                    $("#rfiBtn").click(function(e){
                        $("#rfiBtn").attr("class","EditButtonDisabled").attr("disabled","disabled");
                        $("#rfiBtn").attr("value", "Sending...");

                        var info = new Object;
                        info.name = $("#rfi_name").attr("value");
                        info.company = $("#rfi_company").attr("value");
                        info.email = $("#rfi_email").attr("value");
                        info.purpose = $("#rfi_purpose").attr("value");
                        info.phoneNumber = $("#rfi_phoneNumber").attr("value");
                        info.description = $("#rfi_description").attr("value");

                        info.existingTaleoCustomer = $("input:checked[type='radio'][name='r']").val();
                        if (!info.existingTaleoCustomer) { delete info.existingTaleoCustomer; }

                        if (pageContext == "category") {
                            info.categoryName = name;
                        } else if (pageContext == "partner") {
                            info.partnerName = name;
                        } else if (pageContext == "solution"){
                            info.solutionName = name;
                        }

                        $.post("/sx/rest/InfoRequestService/requestInformation", info, function() {
                            if (pageTracker) {
                                try {
                                    pageTracker._trackPageview("RFI/" + pageContext + "/" + name.replace(/ /g, "-"));
                                    pageTracker._trackEvent("RFI", "submit", pageContext);
                                } catch(e) {}
                            }
                            alert("Thank you. Your request has been sent");
                            hideModal("#rfiDlg");
                        });
                    });
                    $("#rfiCancelBtn").click(function(e){
                        if (pageTracker) {
                            try {
                                pageTracker._trackEvent("RFI", "cancel", pageContext);
                            } catch(e) {}
                        }
                        hideModal("#rfiDlg");
                    });
                }
        };

       var content = "                     \
        <div style=''>         \
            <form id='rfiForm'>         \
                <table id='rfiTbl' class='rfiTbl' style=''>   \
                    <tr><td class='CaptionTD' colspan='2'>I would like to: (select one)</td></tr> \
                        <tr><td class='DataTD' colspan='2'><div class='purpose_Contact'></div><div class='purpose_Suggest'></div><div class='purpose_Ask'></div> \
                            <div class='purpose_Report'></div><div class='purpose_Kudos'></div><div style='clear:both;'></div>\
                        </td></tr>       \
                    <tr><td class='CaptionTD'>Name:</td><td class='DataTD'> <input type='text' id='rfi_name' size='50'/> *</td></tr>       \
                    <tr><td class='CaptionTD'>Email:</td><td class='DataTD'> <input type='text' id='rfi_email' size='50'/> *</td></tr>    \
                    <tr><td class='CaptionTD'>Company:</td><td class='DataTD'> <input type='text' id='rfi_company' size='50'/></td></tr>            \
                    <tr><td class='CaptionTD'>Phone:</td><td class='DataTD'> <input type='text' id='rfi_phoneNumber' size='50'/></td></tr>            \
                    <tr><td class='CaptionTD'>Existing Taleo Customer:</td><td class='DataTD'> Yes <input type='radio' id='rfi_existingCustomer' name='r' value='true' style='margin-right:25px;width:40px;'/> No <input type='radio' id='rfi_existingCustomer' value='false' name='r' style='width:40px;'/></td></tr> \
                    <tr><td class='CaptionTD' colspan='2'><hr class='greylinelight' style='width:98%;margin:2px 0;'/>Description:</td></tr> \
                    <tr><td class='DataTD' colspan='2'>Provide as much detail as possible so we can have the appropriate member of our team respond.<p/> \
                        <textarea cols=72 rows=4 id='rfi_description' class='italic' style='width:95%;padding:5px;'></textarea></td></tr> \
                </table> \
                <div class='DataTD'><input id=privacy type=checkbox /> I have read and accept the <a href=/sx/privacy-policy target='p' class='bold'>Privacy Policy and Terms of Use</a> </div> \
                <div class='EditButton' style='text-align:center;'><input class='EditButtonDisabled' type='button' id='rfiBtn' value='Send Request' disabled/>&nbsp;<input class='EditButton' type='button' id='rfiCancelBtn' value='Cancel'/></div> \
            </form> \
        </div>";

        $.openDialog(null, content, p);
    },

    recordCollateralView: function (collateral) {
        if (pageTracker) {
            try {
                pageTracker._trackPageview("COLLATERAL_VIEW/" + $.collaterals.getDescription(collateral.collateralType.id).replace(/ /g, "-") + "/" + collateral.id + "/" + collateral.title.replace(/ /g, "-"));
            } catch(e) {}
        }
    },
    killCollateralView: function(anchor){
        var cltrParams = {
            height:10,
            width:10,
            top: 0,
            left: 0,
            caption: "",
            afterShowForm: function(){
                /*
                    $(".modalwin .jqmClose").click();
                    alert("stop");
                    hideModal("#dlgmod");
                */
            }
        };
        //$.openDialog($(anchor)[0], '', cltrParams);
        $.openDialog(null, '', cltrParams);
        $(".modalwin .jqmClose").click();
    },

    showLearnMore: function (anchor, video, title) {
        var dlgParams = {
                            height:570,
                            width:770,
                            top: 0,
                            left: 0,
                            caption: "Getting Started: <span class='green'>" + title + "</span>"
                            }
        var content ="<div id='media'> \
            <object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' width='720' height='495' id='csSWF'> \
                <param name='movie' value='/sx/resources/learn_more/player.swf' /> \
                <param name='quality' value='best' /> \
                <param name='bgcolor' value='#1a1a1a' /> \
                <param name='allowfullscreen' value='true' /> \
                <param name='scale' value='showall' /> \
                <param name='allowscriptaccess' value='always' /> \
                <param name='flashvars' value='thumb=/sx/resources/learn_more/FirstFrame.png&containerwidth=720&containerheight=495&content=/sx/resources/learn_more/BrowseSolutionsV1.mp4&autostart=false&blurover=false&autohide=false&smoothing=true&showbranding=true&showstartscreen=true&color=0x1A1A1A,0x1A1A1A' /> \
                <!--[if !IE]>-->  \
                <object type='application/x-shockwave-flash' data='/sx/resources/learn_more/player.swf' width='720' height='495'> \
                    <param name='quality' value='best' /> \
                    <param name='bgcolor' value='#1a1a1a' /> \
                    <param name='allowfullscreen' value='true' /> \
                    <param name='scale' value='showall' /> \
                    <param name='allowscriptaccess' value='always' /> \
                    <param name='flashvars' value='thumb=/sx/resources/learn_more/FirstFrame.png&containerwidth=720&containerheight=495&content=/sx/resources/learn_more/BrowseSolutionsV1.mp4&autostart=false&blurover=false&autohide=false&smoothing=true&showbranding=true&showstartscreen=true&color=0x1A1A1A,0x1A1A1A' /> \
                <!--<![endif]--> \
                    <div id='noUpdate'> \
                        <p>The Camtasia Studio video content presented here requires a more recent version of the Adobe Flash Player. If you are using a browser with JavaScript disabled please enable it now. Otherwise, please update your version of the free Flash Player by <a href='http://www.adobe.com/go/getflashplayer'>downloading here</a>.</p> \
                    </div> \
                <!--[if !IE]>--> \
                </object> \
                <!--<![endif]--> \
            </object> \
        </div>";
        $.openDialog(null, $(content), dlgParams);

    }
});

var processingUpload = false;


jQuery.fn.extend({

/* The id of the wrapper for the upload button must follow the naming convention: <inputId>Uploader
 * <span id="logoUpload"><input class="EditButton" type="button" id="logo" value="Change"/><br/></span></td>
 */
  attachUploader: function(params){
    p = jQuery.extend({
        uploader:       '/sx/resources/ui/uploader.swf',
        script:         null,
        cancelImg:      '/sx/resources/themes/images/cancel.png',
        //'auto':'false',
        buttonImg:      '/sx/resources/themes/images/upload.gif',
        sizeLimit:      50000000, //default file size - 5MB
        cltrConfig:     null,
        fileDesc:       'Please select file.',
        fileExt:        '*.pdf',
        fileDataName:   'logo',
        fileSelector:    null,
        wrapperSelector: null,
        controlSelector: null,
        height:         '12',
        width:          '48',
//        scriptData:     {'foo=bar;jsessionid': $.user.sessionId},
        scriptData:     null,
        onSelectFn:     false,
        onCompleteFn:   false,
        onCancelFn:     false,
        onErrorFn:      false,
        beforeUpload:   false,
        onProgress: function(event,queueID,fileObj, data){
            if (data.percentage == 100) {
                $("#wait").html(" <img align=middle src='/sx/resources/jqGrid-3.4.4/themes/taleo/images/loading.gif' />");
                $("#uploadButton").val("Processing file...");
              } else {
                $("#uploadButton").val("Uploading...");
            }
        },
        onSelect: function(event,queueID,fileObj){
            var t = event.target;

            if( t.p.onSelectFn && $.isFunction(t.p.onSelectFn) ) {
                 t.p.onSelectFn(event,queueID,fileObj);
            }; 
        
            $(t.p.controlSelector).empty();
            if(fileObj.size > t.p.sizeLimit) {
                $(t.p.controlSelector).append("<span class='error'>Select file with size under " + t.p.cltrConfig['VALUE']+t.p.cltrConfig['UNIT']+"</span>");
             } else {
                 $(t.p.controlSelector).append("<input class='EditButton' type='button' id='uploadButton' value='Upload'/><span id='wait'></span><p/>");
                 $(t.p.controlSelector+" input").click(function(){
                     var ready = true;
                     if( t.p.beforeUpload && $.isFunction(t.p.beforeUpload) ) {
                        ready = t.p.beforeUpload();
                     }
                    
                     if(ready) {
                         $("#uploadButton").attr("disabled","disabled");
                         $(t.p.fileSelector).fileUploadStart();
                     }
                });
             }
             
             return true;
        }, 
        onComplete: function(event,queueID,fileObj,response,data){
            $("#uploadButton").val("Complete!");
            var t = event.target;
            //$(t.p.wrapperSelector+" input").remove();
            $(t.p.controlSelector).empty();
             if( t.p.onCompleteFn && $.isFunction(t.p.onCompleteFn) ) {
                 t.p.onCompleteFn(event, queueID,fileObj,response,data);
             }
        },
        onCancel: function(event,queueID,fileObj,data){
            //alert("cancel");
                var t = event.target;
                //$(t.p.wrapperSelector+" input").remove();
                $(t.p.controlSelector).empty();
                if( t.p.onCancelFn && $.isFunction(t.p.onCancelFn) ) {
                    t.p.onCancelFn(event, queueID,fileObj,data);
                }
        },
        onError: function(event,queueID,fileObj,errorObj) {
                var t = event.target;
                $("#wait").empty();
                $("#uploadButton").val("Upload failed");
                //$(t.p.wrapperSelector+" input").remove();
                if( t.p.onErrorFn && $.isFunction(t.p.onErrorFn) ) {
                    t.p.onErrorFn(event,queueID,fileObj,errorObj);
                }
        }
        }, params);

        $.fn.setParam = function(param) {
            var t = this[0];

            // Attach the session id
            /*
            var sessid = ";jsessionid=" + $.user.sessionId;
            if(name == 'script' && val.indexOf(sessid) == -1) {
                val = val + sessid;
            }
            */

            
            t.p = $.extend(t.p, param);
            $.each(param, function(i, item){
                if (i==='script') {
                    var sessid = ";jsessionid=" + $.user.sessionId;
                    if(item.indexOf(sessid) == -1) {
                        item = item + sessid;
                    }
                };
                $(t).fileUploadSettings(i,item);
            });

            //$(t).fileUploadSettings(name,val);
            t.p.sizeLimit = t.p.cltrConfig['BYTES'];
            $(t).fileUploadSettings('sizeLimit',t.p.sizeLimit);
            $(t).setMessage();
        };
        
        $.fn.setMessage = function(name,val) {
            var t = this[0];
            var fileExtStr = t.p.fileExt.replace(/;/g,", ");
            //var msg="Upload file "+fileExtStr+" with size under "+(t.p.sizeLimit/1000)+" KB";
            var msg="Upload file "+fileExtStr+" with size under "+t.p.cltrConfig['VALUE']+t.p.cltrConfig['UNIT'];
            $(t.p.fileSelector+"Uploader").attr("title",msg);
        };

        $.fn.clearQueue = function() {
            var t = this[0];
            $(t).fileUploadClearQueue();
        };

        return this.each(function() {
            var t = this;
            t.p = p;

            if(!t.p.fileSelector) {
                t.p.fileSelector = "#"+t.id;
            }
            if(!t.p.wrapperSelector) {
                t.p.wrapperSelector = t.p.fileSelector+"Upload";
            }

            t.p.sizeLimit = t.p.cltrConfig['BYTES'];

            t.p.controlSelector = t.p.fileSelector+"Control";
            $(t.p.wrapperSelector).append("<div style='margin-top:5px;' id='"+t.p.controlSelector.substring(1)+"'></div>");
 
            $(t).fileUpload(t.p);
            $(t).setMessage();
        });

    },

    attachOverlay: function(winId, p) {
        p = $.extend({
            populateData: null,
			populateDataFn: false,
			populateFn: false,
            offsetX: 20,
            offsetY: 0
		}, p);

        var contentWinId = winId;
        var currItem;

        $.fn.openOverlay = function(data){
            var t = this[0];

            if(data && t.p.populateFn && $.isFunction(t.p.populateFn)) {
                t.p.populateFn(t.p.populateData);
            }

            var pos = $.findPos(t);
            //var pos = $.findPos(currItem);
            //pos[0] += t.offsetWidth + t.p.offsetX; // add the width
            //pos[1] += t.p.offsetY;
            //$("#overlayWin").dialog('option', 'position', pos);
           
             pos[0] += t.p.offsetX;
             //pos[1] += t.offsetHeight + t.p.offsetY;
             $("#"+contentWinId).dialog('open');
             var dialogDiv = $(".ui-dialog");
             $(".ui-dialog").css("left",pos[0]).css("top",pos[1]);

            // re-position on screen if necessary
            
            browserWidth = $(window).width();
            if (document.documentElement && (document.documentElement.scrollLeft)) {
                browserX = document.documentElement.scrollLeft;
            }
            else {
                browserX = document.body.scrollLeft;
            }
            // reposition if outside the browser window
            if (($(".ui-dialog").offset().left + $(".ui-dialog").width()) > (browserWidth + browserX)) {
                $(".ui-dialog").css('left', (pos[0] + $(t).width() - $(".ui-dialog").width()) + 'px');
            }
            browserHeight = $(window).height();
            if (document.documentElement && (document.documentElement.scrollTop)) {
                browserTopY = document.documentElement.scrollTop;
            }
            else {
                browserTopY = document.body.scrollTop;
            }
            // reposition window if outside the browser window
            //if (($(".ui-dialog").offset().top + $(".ui-dialog").height()) > (browserTopY + browserHeight) ) {
                $(".ui-dialog").css('top', (pos[1] - $(".ui-dialog").height()) + 'px');
            //}
           

        };
        $.fn.closeOverlay = function(){
            var t = this[0];
            $("#"+contentWinId).dialog('close');
        };

        $("#"+contentWinId).dialog({
            resizable: false,
            autoOpen: false,
            width: 400
            //,show: 'slide'
            //,hide: 'slide'
         });

         $("#"+contentWinId).css("display","block");

        return this.each(function() {
            var t = this;
            t.p = p;
           
            var hideDelay = 300;
            var hideDelayTimer = null;
            var beingShown = false;
            var shown = false;
            $(t).bind('mouseover', function() {
                //alert("over: " + shown);
                if (hideDelayTimer) clearTimeout(hideDelayTimer);
                if (beingShown || shown) {
                    // don't trigger the animation again
                    return;
                } else {
                    if (t.p.populateDataFn && $.isFunction(t.p.populateDataFn)) {
                        t.p.populateData = t.p.populateDataFn(this);
                    }
                    hideDelayTimer = setTimeout(function () {
                        hideDelayTimer = null;
                        
                            beingShown = true;
                            
                            currItem = this;
                            $(t).openOverlay(t.p.populateData);
                            beingShown = false;
                            shown = true;
                    }, hideDelay);
                };
                
                return false;
            });
            
            $(t).bind('mouseout', function() {
                if (hideDelayTimer) clearTimeout(hideDelayTimer);
                if (shown) {
                    hideDelayTimer = setTimeout(function () {
                        hideDelayTimer = null;
                        $(t).closeOverlay();
                        shown = false;

                    }, hideDelay);
                };

                return false;
                
            });
            
            $("#"+contentWinId).bind('mouseover', function() {
                if (hideDelayTimer) clearTimeout(hideDelayTimer);
                //$(t).openOverlay();
            });
            
            
            $("#"+contentWinId).bind('mouseout', function() {
               if (hideDelayTimer) clearTimeout(hideDelayTimer);

               if (shown) {
                    hideDelayTimer = setTimeout(function () {
                        hideDelayTimer = null;
                        $(t).closeOverlay();
                        shown = false;

                    }, hideDelay);
               };
                return false;
            });
            
        });
    },
    sx_ContentPanel: function(hideFlag) {
        var loading_div = "<div class='pageLoading'>Loading...</div>";
        $.fn.enableContent = function(){
            var t = this[0];
            $(".pageLoading").css("display","none");
            $(t).css("visibility","visible");
        };
        $.fn.isModified = function(){
             var t = this[0];
             return t.modified;
        };
        $.fn.setModified = function(flag){
             var t = this[0];
             t.modified = flag;
        };
        $.fn.checkModified = function(){
            var t = this[0];
            var rc = true;
            if(t.modified) {
                rc = confirm("If you have modified data on this page, it will be lost if you choose to continue by clicking OK.");
                if(rc) {
                    t.modified=false;
                };
            }
            return rc;
        };

        return this.each(function() {
            var t = this;
            t.modified = false;
            //var parent = $(t).parent();
            if(hideFlag!=false) {
                $(t).css("visibility","hidden");
                $(loading_div).insertBefore("#"+t.id);
            }
        });

    },
    sx_ActionButtons: function(params) {
        p = jQuery.extend({
            stateTracker: null,
            className: 'EditButton',
            classNameDisabled: 'EditButtonDisabled',
            buttons: [{name:"Save",action:false}, {name:"Reset",action:false}]
        }, params);

       $.fn.enableBtn = function(btnName, flag) {
            var t = this[0];

            var arr = t.p.buttons;
            if(btnName) {
                arr = jQuery.grep(t.p.buttons, function(n, i){
                    return (n.name==btnName);
                });
            };

            $.each(arr, function(i,item){
                if(flag==false) {
                    $("#"+item.id).attr("class",t.p.classNameDisabled).attr("disabled","disabled");
                } else {
                    $("#"+item.id).attr("class",t.p.className).removeAttr("disabled");
                }
                if(t.p.stateTracker){
                    var modified = flag==false? false : true;
                    $("#"+t.p.stateTracker).setModified(modified);
                }
            });
        };

        $.fn.disableBtn = function(btnName) {
            var t = this[0];
            $(t).enableBtn(btnName,false);
        };


        $.fn.showBtn = function(btnName, flag) {
            var t = this[0];
            if(btnName) {
                var arr = jQuery.grep(t.p.buttons, function(n, i){
                    return (n.name==btnName);
                });
                if(arr.length>0) {
                    var item = arr[0];
                    if(flag==false) {
                        $("#"+item.id).hide();
                    } else {
                        $("#"+item.id).show();
                    };
                };
            };
        };

        $.fn.hideBtn = function(btnName) {
            var t = this[0];
            $(t).showBtn(btnName,false);
        };

        return this.each(function() {
            var t = this;
            t.p = p;
            t.id = $(t).attr("id");

            $.each(t.p.buttons, function(i,item){
                if(item.action && $.isFunction(item.action)) {
                    item.id = t.id+"_"+item.name.replace(/ /g,"-");
                    $(t).append("<input class='"+t.p.classNameDisabled+"' type='button' id='"+item.id+"' value='"+item.name+"'/>&nbsp;");
                    jQuery("#"+item.id).click(function(){
                        return item.action($(t));
                    });
                }
            });
        });
    },
    sx_ImageButton: function(params) {
        p = jQuery.extend({
            onClick: false
        }, params);

       $.fn.enableImgBtn = function(flag) {
            var t = this[0];
            $(t).removeClass("disabled");
        };

        $.fn.disableImgBtn = function() {
            var t = this[0];
            $(t).addClass("disabled");
        };

        $.fn.clickImgBtn = function() {
            var t = this[0];
            if($(t).hasClass("disabled")) {
                return false;
            } else if(t.p.onClick && $.isFunction(t.p.onClick)){
                t.p.onClick();
            };
        };

        return this.each(function() {
            var t = this;
            t.p = p;
            $(t).click(function(){
                $(t).clickImgBtn();
            });
        });
    },
    sx_InputButton: function(params) {
        p = jQuery.extend({
            ajaxMode:true,
            action:false,
            param:'',
            onSuccess:false,
            defaultVal: '',
            inputClass: '',
            submitClass: '',
            isSearch: false
        }, params);


       $.fn.hasValidValue = function() {
            var t = this[0];
            return($(t.inputBtn).val().length>0 && $(t.inputBtn).val()!=t.p.defaultVal);
        };
        $.fn.enableSubmitBtn = function(flag){
            var t = this[0];
            var className = t.p.submitClass+"Active";
            if(flag==false){
                $(t.submitBtn).removeClass(className);

            } else {
                $(t.submitBtn).addClass(className);
            };
        };

        var keyIsPressed = false;

        return this.each(function() {
            var t = this;
            t.p = p;

            t.container = t;

            if(!t.p.ajaxMode){
                $(t).append("<form action='"+t.p.action+"' onSubmit='return false;'></form>");
                t.container = $(t).children("form")[0];

                $(t.container).submit(function(){
                    $(t).enableSubmitBtn(false);
                    return ($(t).hasValidValue());
                });
            }

            $(t.container).append("<div class='layoutIcon imageButtonIcon "+t.p.submitClass+"'></div>");
            $(t.container).append("<input type='text' class='EntryButton "+t.p.inputClass+"' name='q' value=''>");
            $(t.container).append("<div style='clear:right;'></div>");
           

            t.inputBtn = $(t.container).children(".EntryButton")[0];
            t.submitBtn = $(t.container).children(".imageButtonIcon")[0];

            $(t.inputBtn).val(t.p.defaultVal);
            $(t.inputBtn).click(function(){
                if(!$(t).hasValidValue()) {
                    $(t.inputBtn).val("");
                };
            });
            $(t.inputBtn).blur(function(){
                if(!$(t).hasValidValue()) {
                    $(t.inputBtn).val(t.p.defaultVal);
                };
            });

            //enable/disable search button depending on values in the input field
            $(t.inputBtn).keyup(function(e){
                if($(t).hasValidValue()){
                    $(t).enableSubmitBtn();
                } else {
                    $(t).enableSubmitBtn(false);
                }

                if(e.keyCode==13) {
                    $(t.submitBtn).trigger("click");
                }

                if(e.keyCode==16) {
                    keyIsPressed = false;
                }
            });
            $(t.inputBtn).keydown(function(e){
                if(e.keyCode==16) {
                    keyIsPressed = true;
                }
            });


            $(t.submitBtn).click(function(){
                if(t.p.isSearch==true) {
                    if($(t.inputBtn).val().toLowerCase()==="shazam" && keyIsPressed){
                        keyIsPressed = false;
                        var video = '137008';

                        var dlgParams = {
                            height:600,
                            width:790,
                            top: 0,
                            left: 0,
                            caption: "Solution Exchange: <span class='green'>SHAZAM TEAM</span>"
                            }

                        var content =$("<div id='dlg' style='text-align:center'><a class='media' id='cltrVideo' href='javascript:void(0)'><div class='pageLoading' style='float:left;'>Loading...</div></a></div>");

                        $.openDialog(null, content, dlgParams);
                        $('.media').media({
                            height:     495,
                            width:      720,
                            autoplay:   'true',
                            params:     {allowFullScreen: true, allowScriptAccess: 'always'},
                            flashvars: {
                              brandText: 'Solution Exchange Dev Team',
                              brandLink: 'http://en.wikipedia.org/wiki/Shazam',
                              border:    'none',
                              autoplay:  true,
                              colourSet: 'red'
                            },
                            type:       'swf',
                            wmode:      'transparent',
                            src:        'http://vzaar.com/videos/' + video + '.swf',
                            caption:    false
                        });

                        return false;
                    };
                }

                if(t.p.ajaxMode) {
                    if($(t).hasValidValue()){
                        var data = t.p.param+"="+$(t.inputBtn).val();
                        $.post(t.p.action, data,
                                function () {
                                    $(t.inputBtn).val(t.p.defaultVal);
                                    $(t).enableSubmitBtn(false);
                                    if(t.p.onSuccess && $.isFunction(t.p.onSuccess)) {t.p.onSuccess();}
                            });
                    };

                } else {
                    $(t.container).submit();
                };
            });

        });
    },
    sx_ActionLink: function(params) {
        p = jQuery.extend({
            action:false,
            param:'',
            style: '',
            disabledStyle: '',
            name: '',
            disabledName: ''
        }, params);

        $.fn.enableActionLink = function(flag){
            var t = this[0];
            var className = t.p.style;
            var name = t.p.name;

            $(t.container).removeClass("disabled");

            if(flag==false){
                className = t.p.disabledStyle;
                className += " disabled"
                name = t.p.disabledName;

                $(t.container).addClass("disabled");
            };

            $(t.container).empty().append("<div class='layoutIcon layoutButtonIcon " + className + "'></div>" + name);
        };

        $.fn.disableActionLink = function(){
            var t = this[0];
            $(t).enableActionLink(false);
        };


        return this.each(function() {
            var t = this;
            t.p = p;
            if(!t.p.disabledStyle || t.p.disabledStyle.length==0) {
                t.p.disabledStyle = t.p.style;
            };
            if(!t.p.disabledName || t.p.disabledName.length==0) {
                t.p.disabledName = t.p.name;
            };

            t.container = t;
            var idClass = t.p.style+"_"+"actionLink"
            $(t.container).addClass(idClass);
            $(t).enableActionLink();
            if(t.p.action && $.isFunction(t.p.action)) {
                $(t).click(function(){
                    if($(this).hasClass("disabled")) {
                        return false;
                    };
                    t.p.action(this);
                });
            };
        });
    },
    sx_AddToMySolutions: function() {
        var params = {
            name: 'SAVE SOLUTION',
            style: 'addToSolutions',
            disabledName: 'SOLUTION SAVED',
            disabledStyle: 'addToSolutionsOff',
            action: function(target) {
                $(target).disableActionLink();
                addSolutionToCart($(target).attr("sid"));
            }
        };

        return this.each(function() {
            $(this).sx_ActionLink(params);
        });
    },
    sx_ViewSolutionDetails: function() {
        var params = {
            name: 'VIEW DETAILS',
            style: 'expand',
            action: function(target) {
                var sid = $(target).attr("sid");
                if($(target).children(".expand").hasClass("expand_up")) {
                    $("#carousel_content_"+sid).hide(400);
                    $(target).html($(target).html().replace("HIDE DETAILS", "VIEW DETAILS"));
                } else {
                    $("#carousel_content_"+sid).css("visibility","visible");
                    $("#carousel_content_"+sid).show(400);
                    $(target).html($(target).html().replace("VIEW DETAILS", "HIDE DETAILS"));
                };
                $(target).children(".expand").toggleClass("expand_up");
            }
        };

        return this.each(function() {
            $(this).sx_ActionLink(params);
        });
    },
    sx_GoToSolutionHome: function(name) {
        var params = {
            name: 'GO TO SOLUTION HOME PAGE',
            style: 'goHome',
            action: function(target) {
                
                var id = $(target).attr("sid");
                var sName = name? name : $.urlPretty(solutions[id].name_raw);
                document.location = "/sx/solution/" + id + "/" + sName;
            }
        };

        return this.each(function() {
            $(this).sx_ActionLink(params);
        });
    },
    sx_GoToPartnerHome: function(id, name) {
        var params = {
            name: 'GO TO PARTNER HOME PAGE',
            style: 'goHome',
            action: function(target) {
                document.location = "/sx/partner/" + id + "/" + $.urlPretty(name);
            }
        };

        return this.each(function() {
            $(this).sx_ActionLink(params);
        });
    },


    sx_CategoryIcon: function(params) {
        p = jQuery.extend({
            max_col:5,
            stepY: 88,
            stepX: 112
        }, params);

        return this.each(function() {
            var t = this;
            t.p = p;
            t.id = $(t).attr("id");
            t.cat_id = parseInt(t.id.substring(1));

            var row = Math.ceil(t.cat_id/t.p.max_col) - 1;
            var bg_pos_y = t.p.stepY*row;
            if(bg_pos_y>0) {
                bg_pos_y = "-"+bg_pos_y+"px";
            };

            var col = t.cat_id - t.p.max_col*row - 1;
            var bg_pos_x = t.p.stepX*col;
            if(bg_pos_x>0) {
                bg_pos_x = "-"+bg_pos_x+"px";
            };

            $(t).css("background-position", bg_pos_x+" "+bg_pos_y);
        });
    },
    sx_SlideWall: function(params) {
        p = jQuery.extend({
            effect: 'slide',
            alt_effect: 'scale',
            speed: 'slow',
            interval: 10000
        }, params);

        return this.each(function() {
            var t = this;
            t.p = p;
            if(!t.p.alt_effect || t.p.alt_effect.length==0) {
                t.p.alt_effect = t.p.effect;
            }
            var imgArr = $(t).children("img");
            var next_img = 1;

            window.setInterval(function(){
                    $(t).children("img").css("z-index","1");
                    $(imgArr[next_img]).css("z-index","2");
                    var e = next_img%2==0? t.p.alt_effect : t.p.effect;
                    $(imgArr[next_img]).show(e, t.p.speed);

                    next_img++;
                    if(next_img==imgArr.length) {
                        next_img=0;
                    }
                },t.p.interval);
        });
    },
    sx_RFI: function(params) {
        p = jQuery.extend({
            //anchor: false,
            anchor: null,
            context: null,
            contextVal: null,
            className: 'RequestButton',
            classNameDisabled: ''
        }, params);

        return this.each(function() {
            var t = this;
            t.p = p;
            if(!t.p.classNameDisabled || t.p.classNameDisabled.length==0) {
                t.p.classNameDisabled = t.p. className;
            };
            $(t).click(function(){
                var t = this;
                $.showRequestInfo('Contact', t.p.context, t.p.contextVal);
            });
        });
    },
   sx_Feedback: function(params) {
        p = jQuery.extend({
            context: null,
            contextVal: null,
            header:"",
            text:"",
            btnClass:"",
            className:"FeedbackButton",
            rfi_type:null,
            isSelected: null
        }, params);

        $.fn.selectFeedback = function(flag) {
            var t = this[0];
            if(flag==true) {
                $(t).addClass("FeedbackButtonActive");
                $(t).children(".layoutIcon").addClass(t.p.btnClass+"_active");
                t.p.isSelected=true;
            } else {
                $(t).removeClass("FeedbackButtonActive");
                $(t).children(".layoutIcon").removeClass(t.p.btnClass+"_active");
                t.p.isSelected=false;
            };
            
        };

        return this.each(function() {
            var t = this;
            t.p = p;

            $(t).addClass(t.p.className);
            $(t).append("<div class='layoutIcon doFeedback "+t.p.btnClass+"'></div>");
            $(t).append("<h3>"+t.p.header+"</h3>"+t.p.text);

            $(t).bind("mouseover mouseout", function(){
                if(this.p.isSelected!=true) {
                    $(this).toggleClass("FeedbackButtonActive");
                    $(this).children(".layoutIcon").toggleClass(t.p.btnClass+"_active");
                };
            });
            if(t.p.isSelected==null) {
                $(t).click(function(){
                    var t = this;
                    $.showRequestInfo(t.p.rfi_type, t.p.context, t.p.contextVal);
                });
            };
            
        });
    },
    sx_IssueReport: function(params) {
        p = jQuery.extend({
            name: 'REPORT INCORRECT INFORMATION',
            style: 'reportIssue',
            context: null,
            contextVal: null,
            action: function(target) {
                $.showRequestInfo('Report', target.p.context, target.p.contextVal);
                return false;
            }
        }, params);

        return this.each(function() {
            var t = this;
            t.p = p;
            $(this).sx_ActionLink(t.p);
        });


    },
    sx_Architecture: function(params) {
        p = jQuery.extend({
            context: null,
            contextParam: 'contextVal',
            className: 'RequestButton ArchitectureButton',
            classNameDisabled:'RequestButton ArchitectureButton',
            buttons:[{name:"SOLUTION ARCHITECTURE",action:function(container){
                        var t = $(container)[0];

                        var dlgParams = {
                            width:576 + 60,
                            height:418 + 120,
                            top: 0,
                            left: 0,
                            caption: "Background Check: <span class='green'>Solution Architecture</span>"
                            }

                        var content =$("<div id='dlg' style='text-align:center'><a class='media' id='cltrVideo' href='javascript:void(0)'></a></div>");

                        $.openDialog(null, content, dlgParams);

                        /* Open Solution Architecture video from vzaar */
                        var video = '184612';
                        $('.media').media({
                            width:      576,
                            height:     418,
                            autoplay:   true,
                            type:       'swf',
                            src:        'http://vzaar.com/videos/' + video + '.swf',
                            params:     {allowFullScreen: false},
                            wmode:      'transparent'

                        });

                        return false;
                        }}]
        }, params);

        return this.each(function() {
            var t = this;
            t.p = p;

            $(t).sx_ActionButtons(t.p);
            $(t).prepend("<div class='layoutIcon goArchitecture'></div>");
            $(".goArchitecture").click(function(){
                $(t).children("input").click();
            });
       
        });
    },
    sx_PremierIcon: function(params) {
        p = jQuery.extend({
            destroy: false
        }, params);

        $.fn.enablePremier = function() {
            var t = this[0];
            $(t).addClass("layoutIcon").addClass("premierLogo");
            $(t).attr("title","Premier solutions are from partners who are leaders and/or innovators in their markets. They have higher investment levels with Taleo in both the integration and the partnership, driving innovation, quality and ultimately customer success.");
        };

        $.fn.disablePremier = function() {
            var t = this[0];
            $(t).removeClass("layoutIcon").removeClass("premierLogo");
            $(t).removeAttr("title");
        }

        return this.each(function() {
            var t = this;
            t.p = p;

            if(t.p.destroy) {
                $(t).disablePremier();
            } else {
                $(t).enablePremier();
            };
        });
    },
    sx_RTE: function(params) {
        p = jQuery.extend({
            style: "",
            actionBtn:null,
            onClick: false
        }, params);

        var id,rte_id,wrapper_id, div_id;

        $.fn.enableReadOnly = function(val) {
            var t = this[0];
            $("#"+t.div_id).css("display","block");
            $("#"+t.wrapper_id).css("display","none");

            var val = val? val : "";
            $("#"+t.div_id).empty().append(val);
            //set value to the original textarea element
            $(t).val(val);
            if(t.p.actionBtn){
                $("#"+t.p.actionBtn).disableBtn();
            }
        };

        $.fn.enableRTE = function() {
            var t = this[0];
            $("#"+t.div_id).css("display","none");
            $("#"+t.wrapper_id).css("display","block");
            $(t).setValue($(t).val());
            if(t.p.actionBtn){
                $("#"+t.p.actionBtn).enableBtn();
            }
        };

        $.fn.getValue = function(){
            var t = this[0];
            var content = $.iFrameDocumentVal(t.rte_id);
            return content;
        };
        $.fn.setValue = function(val){
            var t = this[0];
           $.iFrameDocumentVal(t.rte_id, val);
        };
        $.fn.isActive = function(){
            var t = this[0];
            return ($("#"+t.wrapper_id).css("display")=="block");
        };


        return this.each(function() {
            var t = this;
            t.p = p;

            t.id = $(t).attr("id");
            t.div_id = t.id + "_div";
            t.wrapper_id = t.id + "_wrapper";
            t.rte_id = t.id + "_rte";

            var name = $(t).attr("name");

            var classVal = "rte_readonly";
            if(t.p.style) {
                classVal = classVal + " " + t.p.style;
            }
            //add div for read-only display
            $(t).after("<div id='"+t.div_id+"' class='"+classVal+"'></div>").after("<div id='"+t.wrapper_id+"'></div>");
            //add textarea to be used for rte
            $("#"+t.wrapper_id).append("<textarea id='"+t.rte_id+"' cols='80' rows='5' name='"+name+"'></textarea>");
            //hide the original textarea element
            $(t).css("display","none");

            $("#"+t.rte_id).addClass("rte-zone");
            $("#"+t.rte_id).rte("/sx/resources/themes/rte.css","/sx/resources/themes/images/");

            //$(t).enableReadOnly();

            $("#"+t.div_id).click(function(){
               
               if(t.p.onClick && $.isFunction(t.p.onClick)) {
                   t.p.onClick();
               }
               $(t).enableRTE();
            });
        });
    },
    sx_Stats: function(params) {
        p = jQuery.extend({
            style: "stats2",
            stats_url: "/sx/rest/StatisticsService/getTotals"
        }, params);

        return this.each(function() {
            var t = this;
            t.p = p;

            $.getJSON(t.p.stats_url, {}, function(jsondata) {
                var totals = jsondata.totals;
                $(t).addClass(t.p.style);
                $(t).append("<span>Total Categories:</span> " + totals.totalCategories);
                $(t).append("<br/><span>Total Partners:</span> " + totals.totalPartners);
                $(t).append("<br/><span>Total Solutions:</span> " + totals.totalSolutions);

            });
        });
    }
});

//common lookups
(function($) {
function Lookup ( params ) {
        p = jQuery.extend({
            url : null,
            root: null,
            async: true,
            htmlEnc: true,
            field_names: null
            }, params);

        var data = {
            values:null,
            getValues: function(field_names) {
                return $.getValuesAsString(this.values, field_names);
            },
            getParentForChildId: function(cid,path){
                var arr= jQuery.grep(this.values, function(n, i){
                    return (n.id == cid);
                });
                var rc = "";
                if(arr.length>0) {
                    rc = eval("arr[0]."+path);
                }
                return rc;
            },
            getChildrenByParentId: function(pid,path){
                var arr = jQuery.grep(this.values, function(n, i){
                     return (eval("n."+path) == pid);
                });
                return arr;
            }
        };
        var t = this;
        t.p = p;

        if(t.p.async==null) {
            t.p.async = true;
        }
        //load values
        $.ajax({url:t.p.url, async:t.p.async,
            onSuccess: function(jsondata) {
                if(jsondata) {
                    data.values = eval("jsondata." + t.p.root);
                    if(t.p.htmlEnc) {
                        data.values = $.htmlEncodeObject(data.values);
                    };
                    t.data = data;
                }}
        });
    };
$.extend(Lookup.prototype, {
    getData: function() {
        return this.data.values;
    },
    getValueString: function() {
        var t = this;
        var valStr = this.data.getValues(t.p.field_names);
        return valStr;
    },
    getValueById: function(cid) {
        return this.data.getParentForChildId(cid,"name");
    },
    getParent: function(cid,path){
        return this.data.getParentForChildId(cid,path);
    },

    displayAsRadio: function(container, name, cols, selElements, onSelect){
        var t = this;
        if(selElements && !$.isArray(selElements)){
            var arr = new Array;
            arr.push(selElements);
            selElements = arr;
        }
        $.displayAsRadio(container,name, cols, t.data.values, selElements);

        if(onSelect && $.isFunction(onSelect)) {
            $("input[name='"+name+"']").click(function(e){
                onSelect(this.value,e);
            });
        }
    },
    displayAsCheck: function(container,name,cols,selElements,onSelect) {
        var t = this;
        if(selElements && !$.isArray(selElements)){
            var arr = new Array;
            arr.push(selElements);
            selElements = arr;
        }
        $.displayAsCheckboxes(container,name, cols, t.data.values,selElements);

        if(onSelect && $.isFunction(onSelect)) {
            $("input[name='"+name+"']").click(function(e){
                onSelect(this.value,e);
            });
        }
    },
    displayChildrenAsCheck: function(pid,path,container,name,cols,selElements,onSelect) {
        var t = this;
        if(selElements && !$.isArray(selElements)){
            var arr = new Array;
            arr.push(selElements);
            selElements = arr;
        }
        var elementArr = t.data.getChildrenByParentId(pid,path);
        $.displayAsCheckboxes(container,name, cols, elementArr,selElements);

        if(onSelect && $.isFunction(onSelect)) {
            $("input[name='"+name+"']").click(function(e){
                onSelect(this.value,e);
            });
        }

    },
    validateCheck: function(arr, lable){
        var checkedItems = jQuery.grep(arr, function(n, i){
                return ($(n).attr("checked")==true);
            });

        if(checkedItems.length == 0){
            alert("Please select at least one "+lable+".");
        };
        return checkedItems;
    },
    displayAsSelect: function(container, selElement, onSelect) {
        var t = this;
        $.displayAsSelect(container,t.data.values,selElement);

        if(onSelect && $.isFunction(onSelect)) {
            $(container).change(function(e){
                onSelect($(container).attr("value"),e);
            });
        }
    },
    displayChildrenAsSelect: function(pid,path,container,selElement) {
        var t = this;
        var arr = t.data.getChildrenByParentId(pid,path);
        $.displayAsSelect(container,arr,selElement);
    }
});
$.extend({
    LookupService: function(params) {
        return new Lookup(params);
    }
});
$.extend({
    StatusService: function(async) {
        $.statuses = new $.LookupService({url:"/sx/rest/StatusService/getStatuses",root:"statuses",async:async});
    },
    CategoryService: function(async) {
        $.categories = $.LookupService({url:"/sx/rest/CategoryService/getCategories",root:"categories",async:async});
    },
    ActiveCategoryService: function(async) {
        $.activeCategories = $.LookupService({url:"/sx/rest/CategoryService/getAllCategories",root:"categories",async:async});
    },
    CategoryTypeService: function(async) {
        $.categoryTypes = $.LookupService({url:"/sx/rest/CategoryTypeService/getCategoryTypes",root:"categoryTypes",async:async});
    },
    IndustryService: function(async) {
        $.industries = $.LookupService({url:"/sx/rest/IndustryService/getIndustries",root:"industries",async:async});
    },
    OrgFunctionService: function(async) {
        $.orgFunctions = $.LookupService({url:"/sx/rest/OrgFunctionService/getOrgFunctions",root:"orgFunctions",async:async});
    },
    ProductService: function(async) {
        $.products = $.LookupService({url:"/sx/rest/ProductService/getProducts",root:"products",async:async});
    },
    ProductFamilyService: function(async) {
        $.productFamilies = $.LookupService({url:"/sx/rest/ProductFamilyService/getProductFamilies",root:"productFamilies",async:async});
    },
    OwnershipTypeService: function(async) {
        $.ownershipTypes = $.LookupService({url:"/sx/rest/OwnershipTypeService/getOwnershipTypes",root:"ownershipTypes",async:async});
    },
    ContactTypeService: function(async) {
        $.contactTypes = $.LookupService({url:"/sx/rest/ContactTypeService/getContactTypes",root:"contactTypes",async:async});
    },
    CountryService: function(async) {
        $.countries = $.LookupService({url:"/sx/rest/CountryService/getCountries",root:"countries",async:async});
    }
});
})(jQuery);

function sx_Grid(params) {
    p = jQuery.extend({
        id : null
    }, params);

    this.p = p;
}
$.extend(sx_Grid.prototype, {
        setParam: function(param) {
            $(this.p.id).setGridParam(param);
        },
        getParam: function(pName){
            return $(this.p.id).getGridParam(pName);
        },
        getColModelField: function(fid) {
            var field;
            var cModel = this.getParam("colModel");
            var arr = $.grep(cModel, function(n, i){
                        return (n.name==fid);
                      });
            if(arr.length>0) {
                field = arr[0];
            };
            return field;
        },
        getSelRowData: function(){
            var rid = this.getParam('selrow');
            var rowData = $(this.p.id).getRowData(rid);
            return rowData;
        },
        setCell: function(fName, val){
            var rid = this.getParam('selrow');
            $(this.p.id).setCell (rid,fName,val);
        },
        reloadGrid: function(param) {
            if(param) {
                this.setParam(param);
            };
            $(this.p.id).trigger('reloadGrid');
        },
        adjustGridHeight: function(sLength) {
            var gridHeight = 96;
            if(sLength < 5) {
                gridHeight = 19*sLength;
            };
            $(".grid_bdiv").css("height",gridHeight+"px");
        },
        viewRowData: function(selector, rowData, imageHandler) {
            //var rowData = this.getSelRowData();

            $.each($(selector+" .DataTD"), function(i,item){
                var fieldId = $(item).attr("fieldId");
                var displayFieldId = $(item).attr("displayFieldId");
                var imgObj = $(item).find("img");
                if(imgObj.length > 0 && imageHandler && $.isFunction(imageHandler)){
                    $(imgObj).attr("src","");
                    imageHandler(imgObj,fieldId);
                } else {
                    $(item).empty();
                    if(rowData[fieldId]) {
                        $(item).append($.toHTMLString(rowData[fieldId]));
                        //handle url
                        if(rowData[fieldId] && rowData[fieldId].indexOf("http")==0) {
                            $(item).wrapInner("<a href='"+$.attrSafe($(item).text())+"' target='_blank'></a>");
                        };
                    };
                }
            });
        },
        editRowData: function(selector, rowData) {
            //var rowData = this.getSelRowData();
            var $t = $(this.p.id);
            var $this = this;
            var cModel = $this.getParam("colModel");
            
            $.each($(selector+" .DataTD"), function(i,item){
                var fieldId = $(item).attr("fieldId");
                var field = $this.getColModelField(fieldId);

                if(field && field.editable) {
                        var edittype = field.edittype;
                        if(!edittype) 
                            edittype = "text";
                        var opt = $.extend({}, field.editoptions || {} ,{id:field.name,name:field.name});
                        var val = (rowData && rowData[fieldId])? rowData[fieldId] : "";
                        var inputField = createEl(edittype,opt,val);
                        $(item).empty().append(inputField);
                        $(inputField).addClass("FormElement");
                        $(item).append("<span id='"+fieldId+"_error' class='error'></span>");

                        $(inputField).bind("blur", function(e){
                            var valref;
                            var fid = $(this).attr("id");
                            $("#"+fid+"_error").empty();
                            var fArr = $.grep(cModel, function(n, i){
                                if(n.name==fid) valref = i;
                                return (n.name==fid);
                            });
                            var ret = checkValues($(this).val(),valref,$t[0]);
                            if(ret[0] === false) {
                                var msg = ret[1].split(":")[1];
                                $("#"+fid+"_error").append(msg);
                            };
                        });
                        $(inputField).trigger("blur");

                        if(field.charcount) {
                            $(item).append("<div class='note'></div>");
                            $(inputField).bind("keyup", function(){
                                var delta = $.getCharCount($(this).val(), $(this).attr('maxlength'));
                                $(item).children(".note").empty().append(delta + " characters remaining");
                            });
                            $(inputField).trigger("keyup");
                        }
                }
            });

            $(".FormElement:first").focus();
        },
        getInputData: function(container,data) {
            var inputArr = new Array();
            var postdata = {}, extpost={};

            $(container+" .FormElement").each(function(i){
                switch ($(this).get(0).type) {
                    case "checkbox":
                                if(!postdata[this.name]) {
                                    postdata[this.name] = new Array();
                                    extpost[this.name] = new Array();
                                }
                                var ind = postdata[this.name].length;
								if($(this).attr("checked")) {
                                    postdata[this.name][ind] = new Object();
									postdata[this.name][ind].id= $(this).val();
								}else {
									var ofv = $(this).attr("offval");
                                    if(ofv) {
                                        postdata[this.name][ind] = new Object();
                                        postdata[this.name][ind].id = ofv;
                                        extpost[this.name][ind] = new Object();
                                        extpost[this.name][ind].id = ofv;
                                    }
								}
							break;
					case "select-one":
								postdata[this.name]= $("option:selected",this).val();
                                extpost[this.name]= $("option:selected",this).text();
							break;
					case "select-multiple":
								postdata[this.name]= $(this).val();
								var selectedText = [];
								$("option:selected",this).each(
									function(i,selected){
										selectedText[i] = $(selected).text();
									}
								);
                                extpost[this.name]= selectedText.join(",");
							break;
							case "password":
							case "text":
							case "textarea":
								postdata[this.name] = $(this).val();
							break;
						}
            });

            // SOLUTION DATA
            var rDate_m = postdata.date_released_m;
            var rDate_y = postdata.date_released_y;
            if(rDate_m!=undefined && rDate_m.length>0) {
                var rDate = rDate_m+"/01/"+rDate_y;
                postdata.dateReleased = $.format_date(rDate,$.SX_INTERNAL_DATE_FORMAT);
            };
            var tCust = postdata.totalCustomers;
            if(tCust!=undefined && tCust.length==0) {
                postdata.totalCustomers = "0";
            };

            var orgFunc = postdata.org_functions;
            if(orgFunc!=undefined && orgFunc.length>0) {
                postdata.orgFunctions = orgFunc;
            };

            var prods = postdata.products;
            if(prods!=undefined && prods.length>0) {
                var certArr = new Array();
                $.each(prods, function(i, item) {
                    var cert = new Object;
                    cert.product = new Object;
                    cert.product.id = item.id;
                    certArr.push(cert);
                }); 
                postdata.certifications = certArr;
            };

            //PARTNER DATA
            rDate_m = postdata.founded_date_m;
            rDate_y = postdata.founded_date_y;
            if(rDate_m!=undefined && rDate_m.length>0) {
                var rDate = rDate_m+"/01/"+rDate_y;
                postdata.foundedDate = $.format_date(rDate,$.SX_INTERNAL_DATE_FORMAT);
            };
            var ownershipType = postdata.ownership_type_id;
            if(ownershipType!=undefined) {
                postdata.ownershipType = new Object();
                postdata.ownershipType.id = postdata.ownership_type_id;
            };
            var tEmployees = postdata.numberOfEmployees;
            if(tEmployees!=undefined) {
                if(tEmployees.length==0) postdata.numberOfEmployees = "0";
                postdata.numberEmployees = postdata.numberOfEmployees
            };
            
            var website = postdata.website;
            if(website!=undefined && website.length>0 && website.indexOf("http://")!=0) {
                postdata.website = "http://"+website;
            };

            inputArr[0] = postdata;
            inputArr[1] = extpost;

            return inputArr;
        },
        previewRowData: function(container,dataProcessingFn, successFn) {
            var $t = $(this.p.id);

            var inputData = this.getInputData(container);
            var postdata = inputData[0];
            var extpost = inputData[1];

            if(dataProcessingFn && $.isFunction(dataProcessingFn)) {
                postdata = dataProcessingFn(postdata);
            };
            //postdata = $.extend(postdata,data);

            //var url = this.getParam('editurl');
            //var sid = this.getParam('selrow');

            var url = this.getParam('previewurl');
            //var url = "/sx/rest/SolutionService/previewSolution";

            // debug
            //successFn(postdata);
           $.ajax({url:url, data:postdata, type:"post",
                onSuccess: function(jsondata, textStatus){
                    if(successFn && $.isFunction(successFn)) {
                        successFn(postdata,jsondata);
                    }
                }
             });
        },
        saveRowData: function(container,data, dataProcessFn, successFn, errorFn) {
            var $t = $(this.p.id);
            var cModel = $t.getGridParam("colModel");

            var inputData = this.getInputData(container,data);
            var postdata = inputData[0];
            var extpost = inputData[1];
            postdata = $.extend(postdata,data);

            var url = this.getParam('editurl');
            var sid = this.getParam('selrow');

           $.ajax({url:url, data:postdata, type:"post",
                onSuccess: function(jsondata, textStatus){

                    var data = jsondata;
                    if(dataProcessFn && $.isFunction(dataProcessFn)) {
                        data = dataProcessFn(data);
                    };

                    if(postdata.id) {
                        //edit
                        data = $.extend(data,extpost);
                        $t.setRowData(sid,data);
                    } else {
                        //add new
                        var rowInd = $t.getDataIDs().length+1;
                        $t.addRowData(rowInd,data);
                        $t.setSelection(rowInd);
                    };

                    if(successFn && $.isFunction(successFn)) {
                        successFn(jsondata);
                    }
                }, onError: function() {
                    if(errorFn && $.isFunction(errorFn)) {
                        errorFn();
                    }
                }
             });
        },
       
        updateRowData: function(solution, data) {
            var valueArr = new Array;
            var colModel = this.getParam('colModel');

            $.each(colModel, function(i, item) {
                var itemName = $(item).attr("name");
                try {
                    if(eval("solution." + itemName)) {
                        var outputValue = eval("solution." + itemName);
                        if (itemName == 'name') {
                            outputValue = $.htmlEncode(outputValue);
                        }
                        var value = "'" + itemName + "'" + ":'" + outputValue + "'";
                        valueArr.push(value);
                    }
                } catch (e) {}
           });

           var valueStr = "{" + valueArr.join(",") + "}";
           var JSONValue = JSON.parse(valueStr);

           var sid = this.getParam('selrow');
           //this.setParam("datastr", data);
           //this.reloadGrid();
           //datastr:t.data.slist,
           $(this.p.id).setRowData(sid,JSONValue);
           //$(this.p.id).addRowData(2,JSONValue);
        },
        hideEditRows: function(start, end) {
            var selector = "#TblGrid_" + this.p.id.substring(1);
            var arr = $.grep($(selector + " tr[rowpos]"), function(n, i){
                return (parseInt($(n).attr("rowpos"))>start && (!end || parseInt($(n).attr("rowpos"))<end));
            });
            $(arr).css("display", "none");
        },
        validateRTE: function(content, id, errorSelector){
            var t = this;
            var rc = true;

            if(content && id) {
                rc = t.validateRTEValue(content, id, errorSelector);
            } else {
                var selector = "#TblGrid_" + this.p.id.substring(1);
                $.each($(selector+" textarea"),function(i,item){
                    rc = t.validateRTEValue($(item).val(), $(item).attr("id"), errorSelector);
                    return rc;
                 });
            };
            return rc;
            
        },
        validateRTEValue: function(val, id, errorSelector){
            var rc = true;
            //TODO: d should not be global
            // change wordHTMLCleaner to take parameter instead
            d = val;
            cleanVal = cleanHTML();
            if(cleanVal.length > $.RTE_MAX_CHAR) {
                    //TODO: find the pretty name for the field
                    //var props = $(t.p.id).getColProp("keyDifferentiator1");

                    if(errorSelector) {
                        $(errorSelector).html(id + ": Value exceeds limit of " + $.RTE_MAX_CHAR + " characters");
                        $(errorSelector).show();
                    } else {
                        $("#FormError>td").html(id + ": Value exceeds limit of " + $.RTE_MAX_CHAR + " characters");
                        $("#FormError").show();
                    }
                    rc=false;
            };
            return rc;
        }
});
function sx_Menu () {
        this.mappings=[{name:"Welcome",path:"/sx/",access:["anonymous"]},
              {name:"Getting Started",path:"/sx/getting-started",access:["anonymous"]},
              {name:"Research Categories",path:"/sx/research/1/Assessment",access:["anonymous"]},
              {name:"Browse Solutions",path:"/sx/browse",access:["anonymous"]},
              //{name:"Help",path:"/sx/",access:["anonymous"]},
              {name:"Dashboard",path:"/sx/partneradmin",access:["PARTNER_USER","PARTNER_MANAGER"]},
              {name:"Profile",path:"/sx/partneradmin/profile",access:["PARTNER_USER"]},
              {name:"Partners",path:"/sx/partneradmin/profile",access:["PARTNER_MANAGER"]},
              {name:"Solutions",path:"/sx/partneradmin/solutions",access:["PARTNER_USER","PARTNER_MANAGER"]},
              {name:"Account",path:"/sx/partneradmin/account",access:["PARTNER_MANAGER"]}
        ];
};
$.extend(sx_Menu.prototype, {
        getMappings: function(userType) {
            var arr = jQuery.grep(this.mappings,
                function(n, i){return ($.inArray(userType, n.access)!=-1);});
            return arr;
        },
        display: function(userType) {
            var arr = this.getMappings(userType);
            $.each(arr, function(i, item) {
                $("#top_nav").append("<a class='top_nav_element' href='"+item.path+"'>"+item.name+"</a>");
            });
            var page = $.getSXPage();
            var arr = jQuery.grep($("a.top_nav_element"), function(n, i){return ($.getSXPage(n.href)==page);});
            if(arr.length>0) {
                $(arr[0]).addClass("selected");
                $(arr[0]).click(function(){return false;});
            }
        },
        getAccess: function(page) {
            var arr = jQuery.grep(this.mappings,function(n, i){return (n.path==page);});
            var accessArr = new Array;
            $.each(arr, function(i, item) {
                    accessArr = accessArr.concat(item.access);
            });
            return accessArr;
        }
});

$.RTE_MAX_CHAR = 4096;

$.extend($.jgrid.defaults,{
    imgpath: 'resources/jqGrid-3.4.4/themes/taleo/images',
    multiselect: false,
    viewrecords: true,
    loadtext:"",
    editurl: "",
    scrollrows : true,
    loadonce:true,
    datatype: "jsonstring"
 });
 $.extend($.jgrid.edit,{
    bSubmit:"Save",
    closeicon: 'ico-close.png',
    recreateForm:true,
    processData: "",
    closeAfterEdit:true,
    closeAfterAdd:true,
    modal: true
 });

/* jGrid functions */

function enc_html (elem, cellval, opts, act)
{
   if (!cellval) {
       $(elem).html('&#160;');
       return;
   }
   
   $(elem).html($.htmlEncode(cellval));
}
function enc_html_wiki (elem, cellval, opts, act)
{
   if (!cellval) {
       $(elem).html('&#160;');
       return;
   }
   var val = $.htmlEncode(cellval);
   val=$.toHTMLString(val);
   $(elem).html($.toHTMLString($.htmlEncode(cellval)));
}
function enc_none (elem,cellval,opts,act)
{
   if (!cellval) {
       $(elem).html('&#160;');
       return;
   }
   $(elem).html($.noEncode(cellval));
}







