function GetFormValues(selector, context)
{
    context = context || document;
   var retObj = {}

  $(selector, context).each(function(){
      if(!$(this).is("label") && !$(this).is("span") && $(this).attr("name"))
      {
          var name = $(this).attr("name");
          if($(this).attr('type') == 'checkbox')
              retObj[name] = $(this).attr("checked")?1:0;
          else if($(this).attr('type') == 'radio')
              retObj[name] = $(this).parent().find("input[name=" + name + "]:checked").val();
          else
          {
              var val = null;

              if($(this).is("textarea") && $(this)[0].jhtmlareaObject)
              {
                val = $(this).htmlarea("toHtmlString");
              }
              else
              {
               val = typeof $(this).attr("retValue") != 'undefined' ? $(this).attr("retValue") : $(this).val();
              }

              if($(this).hasClass("properCase"))
              {
                val = val.toTitleCase();
              }              

              retObj[name] = val;
          }
      }
  })

  return retObj;

}

function fillForm(selector, data)
{
    for(var d in data)
    {        
        if(typeof data[d + "_autoComplete"] != 'undefined')
        {
            $(selector + "[name=" + d + "]").attr("retValue", data[d]== null? '': data[d]);
            $(selector + "[name=" + d + "]").val(data[d + "_autoComplete"] == null? '': data[d + "_autoComplete"]);
        }
        else
        {
            if($(selector + "[name=" + d + "]").attr("type") == "checkbox")
            {
                $(selector + "[name=" + d + "]").attr("checked", parseInt(data[d]));
            }
            else if($(selector + "[name=" + d + "]").attr("type") == "radio")
            {
                $(selector + "[name=" + d + "]").parent().find("input[name=" + d + "][value=" + data[d] + "]").attr("checked", true);
            }
            else if($(selector + "[name=" + d + "]").is("label") ||
                    $(selector + "[name=" + d + "]").is("span"))
            {               
                $(selector + "[name=" + d + "]").html(data[d]);
            }
            else
            {
                $(selector + "[name=" + d + "]").val(data[d] == null? '': data[d]);
            }
        }
    }
}

function checkForm(selector, context)
{
    context = context || document;
    var res = true;
    $(selector + ".required", context).each(function(){
        if(($(this).is("input") || $(this).is("select"))
            && $(this).val() == "")
        {
            res = false;            
            return false;
        }
    });

    return res;
}

function getEmptyRequiredFieldsNames(selector, context)
{
    context = context || document;
    var ret = [];
    $(selector + ".required", context).each(function(){        
        if(($(this).is("input") || $(this).is("select"))
            && $(this).val() == "")
        {
            var str = $(this).attr("name");
            str = normalizeString(str);
            str = str.replace(/_/g, " ");
            str = str.replace(/id$/i, "");
            ret.push(str);
        }
    });
    return ret;
}

function focusFirstRequiredField(selector)
{
    var res = true;
    $(selector + ".required").each(function(){
        if(($(this).is("input") || $(this).is("select"))
            && (typeof($(this).val()) == 'undefined' || $(this).val() == null || $(this).val() == ""))
        {
            if($(this).is(":hidden"))
            {
                var tabs = $(this).closest(".ui-tabs")
                if(tabs.length > 0)
                {
                    var id = $(this).closest(".ui-tabs-panel").attr("id");
                    var ul = tabs.find("ul.ui-tabs-nav");
                    var li = ul.find("a[href=#" + id + "]").closest("li")[0];
                    var index = ul.find("li").index(li);
                    tabs.tabs("select", index);
                }
            }
            $(this).focus();
            return false;
        }
    });
}

function capitalizeString(str)
{
    if(str != null && typeof(str) != 'undefined' && str != '')
    {
        return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase();
    }
    else
    {
        return "";
    }
}

function normalizeString(str)
{
    var strings = str.split(' ');
    var retStr = "";

    for(var i = 0; i < strings.length; i++)
    {
        if(i > 0)
        {
            retStr += " ";
        }
        retStr += capitalizeString(strings[i]);
    }

    return retStr;
}

$.maxZIndex = $.fn.maxZIndex = function(opt) {
        var def = {inc: 10, group: "*"};
        $.extend(def, opt);
        var zmax = 0;
        $(def.group).each(function() {
            var cur = parseInt($(this).css('z-index'));
            zmax = cur > zmax ? cur : zmax;
        });
        if (!this.jquery)
            return zmax;

        return this.each(function() {
            zmax += def.inc;
            $(this).css("z-index", zmax);
        });
    }

function resetForm(selector)
{
     $(selector).each(function(){
      if($(this).attr('type') == 'checkbox')
          $(this).attr("checked", false);
      else if ($(this).attr('type') == 'select')
        $(this).val($(this).find("options:firs").val());
      else
      {
          if($(this).attr("retValue") != null)
           {
              $(this).attr("retValue", "");
           }
           $(this).val("");
      }

  });
}

function registerPopupEnterPress(popupSelector, buttonSelector)
{
    var popup = $(popupSelector)[0];
    $("input, textarea", popup).each(function(){
            var events = $(this).data('events');
            if(typeof events == 'undefined' || events == null || typeof events.keyup == 'undefined' || events.keyup == null)
            {
                $(this).bind("keyup", function(event){if(event.keyCode == 13)  $(buttonSelector).focus()});
            }
      });
}

String.prototype.toTitleCase = function() {
    return this.replace(/([\w&`'‘’"“.@:\/\{\(\[<>_]+-? *)/g, function(match, p1, index, title) {
        if (index > 0 && title.charAt(index - 2) !== ":" &&
         match.search(/^(a(nd?|s|t)?|b(ut|y)|en|for|i[fn]|o[fnr]|t(he|o)|vs?\.?|via)[ \-]/i) > -1)
            return match.toLowerCase();
        //if (title.substring(index - 1, index + 1).search(/['"_{(\[]/) > -1)
        //    return match.charAt(0) + match.charAt(1).toUpperCase() + match.substr(2);
        //if (match.substr(1).search(/[A-Z]+|&|[\w]+[._][\w]+/) > -1 ||
        // title.substring(index - 1, index + 1).search(/[\])}]/) > -1)
        //    return match;
        return match.charAt(0).toUpperCase() + match.substr(1).toLowerCase();
    });
};

String.prototype.startsWith = function(str){
    return (this.match("^"+str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"))==str)
}

$(document).ready(function(){
    $("input.properCase").bind("blur", function(){
        $(this).val($(this).val().toTitleCase());
    });
    $("div#contentContainer").show();
    $("div#loading").hide();


    $("body").ajaxStart(function(){
                //TODO: add loader animation
            })
            .ajaxComplete(function(){
               //TODO: remove loader animation
            });

   
});
    
function showJPicker(callback){
    var input = $(this);
    var colorDiv = input.find("div[name=color]");

    $.colorPickerElements.currentInput = input;
    $.colorPickerElements.currentColor = colorDiv.css("background-color");
    if(colorDiv.css("background-color") != '')
    {
        $('#colorpicker').css('background-color', $.colorPickerElements.currentInput.css("background-color"));
        $.colorPickerElements.currentJPickerControl.settings.color.active.fromHex(rgbColorToHex(colorDiv.css("background-color")));
    }
    $('#colorpicker').css('top', $.colorPickerElements.currentInput.offset().top + $.colorPickerElements.currentInput.outerHeight());
    $('#colorpicker').css('left', $.colorPickerElements.currentInput.offset().left+ $.colorPickerElements.currentInput.outerWidth());

    $.colorPickerElements.currentJPickerControl.liveCallback = $(this).data("liveCallback");
    $.colorPickerElements.currentJPickerControl.commitCallback = $(this).data("commitCallback");
    $.colorPickerElements.currentJPickerControl.cancelCallback = $(this).data("cancelCallback");
    $.colorPickerElements.currentJPickerControl.maxZIndex().show();
}

$.fn.insertAtCaret = function (myValue) {
        return this.each(function(){
                //IE support
                if (document.selection) {
                        this.focus();
                        sel = document.selection.createRange();
                        sel.text = myValue;
                        this.focus();
                }
                //MOZILLA/NETSCAPE support
                else if (this.selectionStart || this.selectionStart == '0') {
                        var startPos = this.selectionStart;
                        var endPos = this.selectionEnd;
                        var scrollTop = this.scrollTop;
                        this.value = this.value.substring(0, startPos)
                                      + myValue
                              + this.value.substring(endPos, this.value.length);
                        this.focus();
                        this.selectionStart = startPos + myValue.length;
                        this.selectionEnd = startPos + myValue.length;
                        this.scrollTop = scrollTop;
                } else {
                        this.value += myValue;
                        this.focus();
                }
        });

};

function validateEmail(email)
{
    return email.match(/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b/) != null;
}

function createQueryString(data)
{
    var retStr = "";
    var counter = 0;
    for(var i in data)
    {
        if(counter > 0) retStr += "&";
        retStr += i + "=" + data[i];
        counter++;
    }
    return retStr;
}

function split(val) {
        return val.split(/,\s*/);
}
function extractLast(term) {
        return split(term).pop();
}

function txt2xml(txt){ return txt.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g,"&gt;").replace(/\"/g,"&#34;").replace(/\'/g,"&#39;"); }

function showAjaxLoading(show)
{
    if(show)
        $("#ajaxLoading").maxZIndex().show();
    else
        $("#ajaxLoading").hide();
}

function getUrlQueryParam( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

$.ui.dialog.prototype.options.closeOnEscape = false;

function rgbColorToHex(rgbString)
{
    if('\v'=='v') //IE
    {
        return rgbString.substring(1);
    }
    else
    {
        var parts = rgbString.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
        // parts now should be ["rgb(0, 70, 255", "0", "70", "255"]

        delete (parts[0]);
        for (var i = 1; i <= 3; ++i) {
            parts[i] = parseInt(parts[i]).toString(16);
            if (parts[i].length == 1) parts[i] = '0' + parts[i];
        }
        return parts.join('');
    }

}

//jQuery.ajaxSetup( {
//    beforeSend:function(XMLHttpRequest)
//    {
//        XMLHttpRequest.setRequestHeader("Expires", "-1");
//        XMLHttpRequest.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
//        XMLHttpRequest.setRequestHeader("Pragma", "public");
//    }
//} )

var feedTypes = {PlayerFeed:"1",
	OrganizationFeed:"2",
	CollegeCommitmentFeed:"3",
	GoldPassReportFeed:"4",
	VideoFeed:"5",
	EventsAddedFeed:"6",
	PlayerAddedRankingsListFeed:"7",
	PWFeed:"8",
    PlayerProfileUpdates: "9",
    TeamProfileUpdates:"10",
    PlayerRatings:"11",
    ArticlesAdded: "12",
    TeamFeed: "13",
    EventFeed: "14",
    OrganizationTwitterFeed: "15",
    EventReviewFeed: "16",
    ScoutingReportWirtten: "17"
}

function getFeedImage(feedData)
{
    var image = "/ScoutsCMS/images/noimage.jpg";
    switch(feedData["feedType"])
    {
        case feedTypes.PlayerFeed:
            if(feedData["image"]){
                image = "/playerPhotos/thumbs_small/" + feedData["image"];
            } else {
                image = "/ScoutsCMS/images/baseballcard-bw.jpg";
            }
         break;
	case feedTypes.OrganizationFeed:
        case feedTypes.EventReviewFeed:
        case feedTypes.ScoutingReportWirtten:
            if(feedData["image"]){
                image = "/organizationLogo/thumbs_small/" + feedData["image"];
            }else{
                image = "/ScoutsCMS/images/team_image.jpg";
            }
         break;
        case feedTypes.TeamProfileUpdates:
        case feedTypes.TeamFeed:
            if(feedData["image"]){
                image = "/teamLogo/thumbs_small/" + feedData["image"];
            }else{
                image = "/ScoutsCMS/images/team_image.jpg";
            }
         break;
        case feedTypes.PlayerProfileUpdates:
            image = "/ScoutsCMS/images/icon-updateprofile.png";
         break;
        case feedTypes.CollegeCommitmentFeed:
            image = "/ScoutsCMS/images/collegeCommitmentFeed.jpg";
         break;
        case feedTypes.GoldPassReportFeed:
            image = "/ScoutsCMS/images/goldPassFeed.jpg";
         break;
        case feedTypes.VideoFeed:
            image = "/ScoutsCMS/images/videoFeed.jpg";
         break;
        case feedTypes.PlayerAddedRankingsListFeed:
            image = "/ScoutsCMS/images/icon_ranking.png";
         break;
        case feedTypes.ArticlesAdded:
            image = "/ScoutsCMS/images/article_icon.jpg";
         break;
        case feedTypes.PlayerRatings:
            image = "/ScoutsCMS/images/icon_rating.png";
         break;
        case feedTypes.EventsAddedFeed:
        case feedTypes.PWFeed:        
                image = "/ScoutsCMS/images/pwFeed.jpg";
         break;
         case feedTypes.EventFeed:
             if(feedData["image"]){
                image = "/pw/images/event_logos/thumbs_small/" + feedData["image"];
             } else {
                image = "/ScoutsCMS/images/pwFeed.jpg";
             }
            break;
         case feedTypes.OrganizationTwitterFeed:
            if(feedData["image"]){
                image = "/organizationLogo/thumbs_small/" + feedData["image"];
            }else{
               image = "/ScoutsCMS/images/twitter-logo.png";
            }             
             break;
    }
    return image;
}

function openRegisterOrUpate()
{
    if(typeof rp_register  == "undefined")
        up.openUserProfile();
    else
        rp_register.open();

    return false;
}

function getFeedForHomePage()
{
    var html = "";

    var xhttpreq = $.ajax({
        url:"/TravelCoachCMS/ajax/feedFilter.php",
        async: false,
        type: "post",
        dataType: 'json',
        data: { "rowsPerPage": 5,
                "pageNum": 1
        }
    });

    res = jQuery.parseJSON(xhttpreq.responseText);

    var feedTemplate = "<div class='feed_container'>" +
                            "<div class='feed'><img src='{feed_image}'/><span style='font-weight:bold;'>{name}</span> {feed}</div>" +
                            "<div class='feed_author'>By {author}</div>" +
                        "</div>";

    for(var obj in res["feeds"])
    {
        var feed = res["feeds"][obj];
        var image = getFeedImage(feed);
        var name = "";
        if(feed["playerID"])
        {
            name = feed["graduated_year"] + " " + feed["position_name"] + " " + feed["firstName"] + " " + feed["lastName"];
        }
        else if(feed["organizationID"])
        {
            name = feed["organizationName"];
        }
        html += feedTemplate.replace(/{feed}/g, feed.feed)
                .replace(/{name}/g, name)
                .replace(/{feed_image}/g, image)
                .replace(/{feed_id}/g, feed.feedID)
                .replace(/{feed_type}/g, feed.type)
                .replace(/{author}/g, feed.postBy)
                .replace(/{source_id}/g, feed.postById);
    }
    return html;
}

function replaceTemplateValue(template, values)
{
    var ret = template;
    for(i in values){
        var regExp = new RegExp("{" + i + "}", "g")
        ret = ret.replace(regExp, values[i] ? values[i] : "");
    }
    return ret;
}

function wrapFeedText(text){
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
    text = text.replace(exp,"<a target='_blank' href='$1'>$1</a>");
    return text;
}

function stopEvent(e){
    if(typeof e != 'undefined' && e.preventDefault && e.stopPropagation){
        e.preventDefault();
        e.stopPropagation();
    } else{
        e.returnValue = false
    }
}

function isUrl(s, domain) {
        var regexp = null;
        if(typeof domain != 'undefined')
            regexp = new RegExp("(http|https):\\/\\/(\\w+:{0,1}\\w*@)?((www.)?" + domain + ")(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?");
        else
            regexp = /(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
	return regexp.test(s);
}

function createQueryString(obj) {
    var ret = [];
    for(var i in obj){
        ret.push(i + "=" + obj[i]);
    }
    return ret.join('&');
}
