﻿/// <reference path="jquery.js" />


var _A_ = {};
_A_.PValidation = {};

(function () { 
    var CValidation = function(){
  /**
        * default div to display Success msg. (we use a clone of this div and position it absolute.)
        */
        this.pdivIdSuccess = "";
        /**
        * default div to display error msg.(we use a clone of this div and position it absolute.)
        */
        this.pdivIdFail = "";
        /**
        * default div to display default msg.(we use a clone of this div and position it absolute.)
        */
        this.pdivIdDefault = "";

        /**
        * default div to display Success msg. (we use a clone of this div and position it absolute.)
        */
        this._pdivCloneObjSuccess = "";
        /**
        * default div to display error msg.(we use a clone of this div and position it absolute.)
        */
        this._pdivCloneObjFail = "";
        /**
        * default div to display default msg.(we use a clone of this div and position it absolute.)
        */
        this._pdivCloneObjDefault = "";

        /**
        a flag to hold the type of massage shown last.
         */
        this._plastMsg = "default";

        /*
        the massage to be displayed on success, fail or as a default.
        
        */
        this.pmsgSuccess = "";
        this.pmsgFail = "";
        this.pmsgDefault = "";


        this.pflag = 1;

        /*
        position relative to input field.
        */
        this.ppositionDiv = {
        left:200,
        top:0,
        zIndex :10000,
        position:'left'/* can be 'left' 'right' 'top' 'bottom'*/
        };
    };
    

    var mcreateCloneForAllMsgDiv = function () {
        this._pdivCloneObjFail = this._mcreateCloneForMsgDisplay(this.pdivIdFail, this.pinputId);
        this._pdivCloneObjSuccess = this._mcreateCloneForMsgDisplay(this.pdivIdSuccess, this.pinputId);
        this._pdivCloneObjDefault = this._mcreateCloneForMsgDisplay(this.pdivIdDefault, this.pinputId);   
        this._mputMsgInToCloneDivs();    
    };

    var mhideAllMsgDiv = function () {
    //    $(this._pdivCloneObjSuccess).fadeOut('slow');
        $(this._pdivCloneObjFail).fadeOut('slow');
    //    $(this._pdivCloneObjDefault).fadeOut('slow');
    }

    var mshowAllMsgDiv = function(){
       // $(this._pdivCloneObjSuccess).fadeIn('slow');
        $(this._pdivCloneObjFail).fadeIn('slow');
     //   $(this._pdivCloneObjDefault).fadeIn('slow');
    }


   
      /**
    this function must be called by the object of CInputFieldValidation class, it can not be called from out side this clouser. 
    private function to print success and fail msg.
    **/

    var _mshowSuccessDiv = function () {
        this._plastMsg = "success";
        
        $(this._pdivCloneObjFail).fadeOut('slow');
      ////  $(this._pdivCloneObjDefault).fadeOut('slow');
      //  $(this._pdivCloneObjSuccess).fadeIn('slow');
        
        
    };


    /**
    this function must be called by the object of CInputFieldValidation class, it can not be called from out side this clouser. 
    private function to print success and fail msg.
    **/
    var _mshowFailDiv = function () {
        this._plastMsg = "fail";

      //  $(this._pdivCloneObjSuccess).fadeOut('slow');        
      //  $(this._pdivCloneObjDefault).fadeOut('slow');
        $(this._pdivCloneObjFail).fadeIn('slow');
       
    };

    /**
    this function must be called by the object of CInputFieldValidation class, it can not be called from out side this clouser. 
    private function to print success and fail msg.
    **/
    var _mshowDefaultDiv = function () {
        this._plastMsg = "default";
     //   $(this._pdivCloneObjSuccess).fadeOut('slow');
        $(this._pdivCloneObjFail).fadeOut('slow');
     //   $(this._pdivCloneObjDefault).fadeIn('slow');       
    };
    
    var _mputMsgInToCloneDivs = function () {
        this._pdivCloneObjSuccess.innerHTML = this.pmsgSuccess;
        this._pdivCloneObjFail.innerHTML = this.pmsgFail;
        this._pdivCloneObjDefault.innerHTML = this.pmsgDefault;
    };



    var _mshowLastDispalyedMsgDiv = function(){
        if(this._plastMsg == "success"){
            this._mshowSuccessDiv();
        }
        if(this._plastMsg == "fail"){
            this._mshowFailDiv();
        }
        if(this._plastMsg == "default"){
            this._mshowDefaultDiv();
        }    
    };

    function _mcreateCloneForMsgDisplay(divId,inputId){
        var cloneDiv =  $(document.getElementById(divId)).clone(true);
        
        var left = $(document.getElementById(inputId)).offset().left +this.ppositionDiv.left;
        var top = $(document.getElementById(inputId)).offset().top +this.ppositionDiv.top;
    
        cloneDiv[0].style.left =  left + 'px';
        cloneDiv[0].style.top = top + 'px';
        cloneDiv[0].style.zIndex = this.ppositionDiv.zIndex;
        //cloneDiv[0].style.display = 'block';
        cloneDiv.appendTo(document.body);

        return  cloneDiv[0];
    }


    CValidation.prototype._mcreateCloneForMsgDisplay=_mcreateCloneForMsgDisplay;
    CValidation.prototype._mshowLastDispalyedMsgDiv=_mshowLastDispalyedMsgDiv;
    CValidation.prototype._mshowSuccessDiv=_mshowSuccessDiv;
    CValidation.prototype._mshowSuccessDiv =_mshowSuccessDiv;
    CValidation.prototype._mshowFailDiv=_mshowFailDiv;
    CValidation.prototype._mshowDefaultDiv=_mshowDefaultDiv;
    CValidation.prototype._mputMsgInToCloneDivs=_mputMsgInToCloneDivs;


    CValidation.prototype.mcreateCloneForAllMsgDiv =mcreateCloneForAllMsgDiv;
    CValidation.prototype.mhideAllMsgDiv =mhideAllMsgDiv;
    CValidation.prototype.mshowAllMsgDiv= mshowAllMsgDiv;

    


    _A_.PValidation.CValidationBase = function(){    
    CValidation.call(this);
    };
    _A_.PValidation.CValidationBase.prototype =new CValidation();

})();


(function () {
    /*
    class to create a form object             
    */

    var CFormValidation = function () {
        _A_.PValidation.CValidationBase.call(this);
        /*
        ID of the form which will be submited. this.pinputId 
        */
        this.pformID = "";
        /*
        the ID of the element on which click event will fire and form will be submitted.
        */
        this.pinputButtonId = "";  
        /*
        the id of the div containing the form.
        */    
        this.pcontainerId = "";
        /*
        the objects of class CInputFieldValidation of all input fields which are in this form. 
        */
        this.pinputFieldObjectArray = [];
    };

    CFormValidation.prototype = new _A_.PValidation.CValidationBase();


    var mvalidateAllFields = function (event) {

        var count123 = event.data.pinputFieldObjectArray.length;
        var flag = 1;
        var i = 0;
        //alert(count123);

        for (i = 0; i < count123; i++) {
			event.data.pinputFieldObjectArray[i].mvalidateOneInputField({data:event.data.pinputFieldObjectArray[i]});
            if (event.data.pinputFieldObjectArray[i].pflag == 0) {
                flag = 0;
            }
        }

        if (flag == 1) {
            event.data.mhideAllMsgDiv();
            event.data._mshowSuccessDiv();
            //$(event.data._pdivCloneObjSuccess).delay(3000).fadeOut('1000');
			document.getElementById( "form_subscription" ).submit() ;
        } else {
            event.data._mshowFailDiv();
        }

    };
    
    var mshowLastMsgDiv = function(event){
        var count123 = event.data.pinputFieldObjectArray.length;
        for (i = 0; i < count123; i++) {
            if(!event.data._plastMsg){
                event.data._plastMsg = "default";
            }     
            event.data._plastMsg = "default";       
            event.data.pinputFieldObjectArray[i]._mshowLastDispalyedMsgDiv();
        }
    }
   
    var mhideAllMsgDiv = function(){
        var count123 = this.pinputFieldObjectArray.length;
        for (i = 0; i < count123; i++) {
            this.pinputFieldObjectArray[i].mhideAllMsgDiv();
        }
       
    }


    CFormValidation.prototype.mhideAllMsgDiv=mhideAllMsgDiv;
    CFormValidation.prototype.mshowLastMsgDiv = mshowLastMsgDiv;
    CFormValidation.prototype.mvalidateAllFields = mvalidateAllFields;


    _A_.PValidation.CFormValidation = function () {
        CFormValidation.call(this);
    };
    _A_.PValidation.CFormValidation.prototype = new CFormValidation();


})();




(function () {

    /*
    main validation class
    */
    var CInputFieldValidation = function () {
        _A_.PValidation.CValidationBase.call(this);
        /*
        input ID to validate
        */
        this.pinputId = "";
        /*
        extra input id to relate with(like duplicate password)
        */
        this.pinputId2 = "";
        /*
        @pvalidationType = type of validation for the input field.
        */
        this.pvalidationType = "is_empty";
        
    };

    CInputFieldValidation.prototype = new _A_.PValidation.CValidationBase();
    
    
    /*
    validate a single input field (input field object =  event.data)
    */
    var mvalidateOneInputField = function (event) {
        var value = document.getElementById(event.data.pinputId).value;
        event.data.pflag = 1;

        if (event.data.pvalidationType == "is_empty") {
            if (value == '') {
                event.data.pflag = 0;
            }
        }
		else  if (event.data.pvalidationType == "is_name") {
            if (value == '' || value == 'Name :') {
                event.data.pflag = 0;
            }
        }
		else  if (event.data.pvalidationType == "is_company") {
            if (value == '' ||  value == 'Company :') {
                event.data.pflag = 0;
            }
        }
		else  if (event.data.pvalidationType == "is_about") {
            if (value == '' ||  value == 'About Vantage:') {
                event.data.pflag = 0;
            }
        }
		else  if (event.data.pvalidationType == "is_comment") {
            if (value == '' ||  value == 'Comments :') {
                event.data.pflag = 0;
            }
        }
        else if (event.data.pvalidationType == "is_email") {
            if (value == '' || value== 'Email :') {
                event.data.pflag = 0;
            } else {
                if (!_mvalidateEmail(value)) {
                    event.data.pflag = 0;
                }
            }
        }
        else if (event.data.pvalidationType == "is_url") {
            if (value == '' || value == 'Website :') {
                event.data.pflag = 0;
            } else {
                if (!_mvalidateURL(value)) {
                    event.data.pflag = 0;
                }
            }
        }
        else if (event.data.pvalidationType == "is_duplicate_password") {
            if (value == '') {
                event.data.pflag = 0;
            } else {
            var value2= document.getElementById(event.data.pinputId2).value;
                if (!_mvalidateDuplicatePassword(value,value2)) {
                    event.data.pflag = 0;
                }
            }
        }
         else if (event.data.pvalidationType == "is_original_password") {
            if (value == '') {
                event.data.pflag = 0;
            } else {
            var value2 = document.getElementById(event.data.pinputId2).value;
            
            _mshowMsgInDuplicatePassword(value, value2);
            
            }
        }
         else if (event.data.pvalidationType == "is_select") {
            if (value == '') {
                event.data.pflag = 0;
            } else {
                if (!_mvalidateSelect(value)) {
                    event.data.pflag = 0;
                }
            }
        }
        else if (event.data.pvalidationType == "is_number") {
            if (value == '') {
                event.data.pflag = 0;
            } else {
                if (!isNumber(value)) {
                    event.data.pflag = 0;
                }
            }
        }


        else if (event.data.pvalidationType == "is_checkbox") {
            if (!document.getElementById(event.data.pinputId).checked) {
                event.data.pflag = 0;
            } else {
                
            }
        }

        else if (event.data.pvalidationType == "is_radiogroup") {
            if (!document.getElementById(event.data.pinputId).checked) {
                event.data.pflag = 0;
            } else {
                
            }
        }
        
        if (event.data.pflag == 1) {
            event.data._mshowSuccessDiv();
        }
        else if (event.data.pflag == 0) {
            event.data._mshowFailDiv();
        }
    };



   function isNumber(n) {  return !isNaN(parseFloat(n)) && isFinite(n);}





    // copyright 1999 Idocs, Inc. http://www.idocs.com
    // Distribute this script freely but keep this notice in place
    var mnumbersOnly = function (myfield, e, dec) {
        var key;
        var keychar;

        if (window.event)
            key = window.event.keyCode;
        else if (e)
            key = e.which;
        else
            return true;
        keychar = String.fromCharCode(key);

        // control keys
        if ((key == null) || (key == 0) || (key == 8) ||
	    (key == 9) || (key == 13) || (key == 27))
            return true;

        // numbers
        else if ((("0123456789").indexOf(keychar) > -1))
            return true;

        // decimal point jump
        else if (dec && (keychar == ".")) {
            myfield.form.elements[dec].focus();
            return false;
        }
        else
            return false;
    };

     var mshowLastMsgDiv = function(event){        
            if(!event.data._plastMsg){
                event.data._plastMsg = "default";
            }               
            event.data._mshowLastDispalyedMsgDiv();       
    }


    /************************************************************************************************
    *
    *
    *
    * validator functions (private functions)
    *
    *
    *
    *************************************************************************************************/

    /**
    * email validator http://www.white-hat-web-design.co.uk/articles/js-validation.php
    * 
    */
    var _mvalidateEmail = function (address) {
        var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
        return reg.test(address);
    };


    /**
    * URL validator http://www.weberdev.com/get_example-4569.html
    * 
    */

   var _mvalidateURL= function (url) {
        var reg = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;
        return reg.test(url);
    };


   function _mvalidateDuplicatePassword(value1, value2) {  
       if (value1 != "" && value1 == value2) {
         return true;
       } else {
        return false;
       }
 
    }

    function _mshowMsgInDuplicatePassword(value, value2){

        for(i=0; i<objFormValidationFinal.pinputFieldObjectArray.length;i++){
            if(objFormValidationFinal.pinputFieldObjectArray[i].pvalidationType =="is_duplicate_password")
            {
            if(value !=value2){
            objFormValidationFinal.pinputFieldObjectArray[i]._mshowFailDiv();
            }else{
            objFormValidationFinal.pinputFieldObjectArray[i]._mshowSuccessDiv();
            }
            }
        }
    }

    function _mvalidateSelect(value){
    if(value == "select"){
    return false;
    }else{
    return true;
    }
    
    }

    function _mcheckRadio (frmName, rbGroupName) { 
 var radios = document[frmName].elements[rbGroupName]; 
 for (var i=0; i <radios.length; i++) { 
  if (radios[i].checked) { 
   return true; 
  } 
 } 
 return false; 
} 


    /***********************************************************************************************
    **
    **
    **  MSG DISPLAY FUNCTIONS  (PRIVATE FUNCTION)
    **
    **
    **
    **/

  


    /***************************************************************************************************
    *
    *
    *           PUBLIC STATIC FUNCTION
    *
    ******************************************************************************************************/

    CInputFieldValidation.prototype.mvalidateOneInputField = mvalidateOneInputField;
    CInputFieldValidation.prototype.mnumbersOnly = mnumbersOnly;    
    
    /*************
    *
    *
    *       REGISTERING THE CLASS
    *
    */


    _A_.PValidation.CInputFieldValidation = function () {
        CInputFieldValidation.call(this);
    };
    _A_.PValidation.CInputFieldValidation.prototype = new CInputFieldValidation();


})();



  var objFormValidation = new _A_.PValidation.CInputFieldValidation();
        objFormValidation.pinputId = 'name';
        objFormValidation.pdivIdFail = 'div_error';
        objFormValidation.pdivIdSuccess = 'div_success';
        objFormValidation.pvalidationType = 'is_name';
        objFormValidation.pdivIdDefault = 'div_default';
        objFormValidation.pmsgSuccess = 'YES you have entered your name.';
        objFormValidation.pmsgFail = 'plese enter your name.';
        objFormValidation.pmsgDefault = 'plese enter your name.';
        objFormValidation.ppositionDiv = {
           left: 190,
            top: 0,
            zIndex: 10000
        };

        var objFormValidation1 = new _A_.PValidation.CInputFieldValidation();
        objFormValidation1.pinputId = 'company';
        objFormValidation1.pdivIdFail = 'div_error';
        objFormValidation1.pdivIdSuccess = 'div_success';
        objFormValidation1.pvalidationType = 'is_company';
        objFormValidation1.pdivIdDefault = 'div_default';
        objFormValidation1.pmsgSuccess = 'YES you have entered your company name.';
        objFormValidation1.pmsgFail = 'plese enter your company name.';
        objFormValidation1.pmsgDefault = 'plese enter your company name.';
        objFormValidation1.ppositionDiv = {
            left: 190,
            top: 0,
            zIndex: 10000
        };

 var objFormValidation2 = new _A_.PValidation.CInputFieldValidation();
        objFormValidation2.pinputId = 'website';
        objFormValidation2.pdivIdFail = 'div_error';
        objFormValidation2.pdivIdSuccess = 'div_success';
        objFormValidation2.pvalidationType = 'is_url';
        objFormValidation2.pdivIdDefault = 'div_default';
        objFormValidation2.pmsgSuccess = 'YES you have entered your website url.';
        objFormValidation2.pmsgFail = 'plese enter your website url.';
        objFormValidation2.pmsgDefault = 'plese enter your website url.';
        objFormValidation2.ppositionDiv = {
             left: 190,
            top: 0,
            zIndex: 10000
        };
		
		 var objFormValidation3 = new _A_.PValidation.CInputFieldValidation();
        objFormValidation3.pinputId = 'about_vantage';
        objFormValidation3.pdivIdFail = 'div_error';
        objFormValidation3.pdivIdSuccess = 'div_success';
        objFormValidation3.pvalidationType = 'is_about';
        objFormValidation3.pdivIdDefault = 'div_default';
        objFormValidation3.pmsgSuccess = 'YES you have entered about Vantage.';
        objFormValidation3.pmsgFail = 'plese enter about Vantage.';
        objFormValidation3.pmsgDefault = 'plese enter about Vantage.';
        objFormValidation3.ppositionDiv = {
             left: 190,
            top: 0,
            zIndex: 10000
        };
		
		 var objFormValidation4 = new _A_.PValidation.CInputFieldValidation();
        objFormValidation4.pinputId = 'comment';
        objFormValidation4.pdivIdFail = 'div_error';
        objFormValidation4.pdivIdSuccess = 'div_success';
        objFormValidation4.pvalidationType = 'is_comment';
        objFormValidation4.pdivIdDefault = 'div_default';
        objFormValidation4.pmsgSuccess = 'YES you have entered a comment.';
        objFormValidation4.pmsgFail = 'plese enter a comment.';
        objFormValidation4.pmsgDefault = 'plese enter a comment.';
        objFormValidation4.ppositionDiv = {
             left: 190,
            top: 0,
            zIndex: 10000
        };
		
		
		
		

        var objFormValidation5 = new _A_.PValidation.CInputFieldValidation();
        objFormValidation5.pinputId = 'email1';
        objFormValidation5.pdivIdFail = 'div_error';
        objFormValidation5.pvalidationType = 'is_email';
        objFormValidation5.pdivIdSuccess = 'div_success';
        objFormValidation5.pdivIdDefault = 'div_default';
        objFormValidation5.pmsgSuccess = 'YES you have entered a valid email.';
        objFormValidation5.pmsgFail = 'plese enter a valid email here.';
        objFormValidation5.pmsgDefault = 'plese enter your email here.';
        objFormValidation5.ppositionDiv = {
              left: 190,
            top: 0,
            zIndex: 10000
        };

        var objFormValidation6 = new _A_.PValidation.CInputFieldValidation();
        objFormValidation6.pinputId = 'phone';
        objFormValidation6.pdivIdFail = 'div_error';
        objFormValidation6.pvalidationType = 'is_number';
        objFormValidation6.pdivIdSuccess = 'div_success';
        objFormValidation6.pdivIdDefault = 'div_default';
        objFormValidation6.pmsgSuccess = 'YES you have entered a valid phone number.';
        objFormValidation6.pmsgFail = 'plese enter numbers only.';
        objFormValidation6.pmsgDefault = 'plese enter numbers only.';
        objFormValidation6.ppositionDiv = {
            left: 190,
            top: 0,
            zIndex: 10000
        };

        var objFormValidationFinal = new _A_.PValidation.CFormValidation();
        objFormValidationFinal.pformID = 'form_subscription';
        objFormValidationFinal.pinputId = 'submit1';
        objFormValidationFinal.pcontainerId = "form_mid";
        objFormValidationFinal.pdivIdFail = 'div_error1';
        objFormValidationFinal.pdivIdSuccess = 'div_success1';
        objFormValidationFinal.pdivIdDefault = 'div_default1';
        objFormValidationFinal.pmsgSuccess = 'YES you did it, Sir.!!!!!';
        objFormValidationFinal.pmsgFail = 'Plese check above entries again.';
        objFormValidationFinal.pmsgDefault = 'Plese Check this again.';
        objFormValidationFinal.pinputFieldObjectArray = [objFormValidation6, objFormValidation, objFormValidation1, objFormValidation2,objFormValidation3,objFormValidation4,objFormValidation5];
        objFormValidationFinal.ppositionDiv = {
            left: 155,
            top: 0,
            zIndex: 10000
        };
 function init() {

            objFormValidation.mcreateCloneForAllMsgDiv();
            objFormValidation1.mcreateCloneForAllMsgDiv();
            objFormValidation2.mcreateCloneForAllMsgDiv();
          objFormValidation3.mcreateCloneForAllMsgDiv();
		  objFormValidation4.mcreateCloneForAllMsgDiv();
		  objFormValidation5.mcreateCloneForAllMsgDiv();
            objFormValidation6.mcreateCloneForAllMsgDiv();
           
            objFormValidationFinal.mcreateCloneForAllMsgDiv();

           
           
           

            $(document.getElementById(objFormValidationFinal.pinputId)).bind('click', objFormValidationFinal, objFormValidationFinal.mvalidateAllFields);

        }
